Merge RB-22 — tolerate a 404 on GET /brief with a one-shot reset

CQ-007 expand half. BriefStore.load() treats a 404 as 'no brief yet' and calls
the existing reset() command once. load()'s error channel becomes the
BriefLoadFailure union, because runResult folds the HTTP status away and the
store needs it. Today's backend never 404s, so the branch is a no-op until
RB-23 lands the contract half.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

# Conflicts:
#	docs/project/refactor-backlog-setup/refactor-backlog/99-backlog.md
#	libs/shared/docs/behaviour-spec.mdx
This commit is contained in:
eho
2026-08-27 18:44:20 +02:00
6 changed files with 275 additions and 25 deletions
+6 -1
View File
@@ -20,7 +20,7 @@ tested where._
Every bullet below is a real test name from the suite — an `it()` title (frontend) or a test
method name (backend), read as a sentence. Nothing here is hand-written prose: this page
**is** the suite, reshaped for a business reader. 465 frontend behaviours across
**is** the suite, reshaped for a business reader. 467 frontend behaviours across
9 contexts; 237 backend behaviours across 41 test
classes.
@@ -180,6 +180,11 @@ classes.
- flushes a pending debounced edit immediately and clears the pending flag
- is a no-op when no edit is pending
#### BriefStore.load — 404 tolerance (RB-22)
- a 404 drives exactly one reset(), which populates the store
- a second 404 does not drive a second reset()
#### BriefStore.previewLetter
- opens the composed letter in a new tab on success