Skip to content

spec: 013's tasks, approved — 43 tasks, five phases, and a backstop family of six - #151

Merged
iancooper merged 1 commit into
masterfrom
docs/013-tasks-approved
Sep 6, 2026
Merged

spec: 013's tasks, approved — 43 tasks, five phases, and a backstop family of six#151
iancooper merged 1 commit into
masterfrom
docs/013-tasks-approved

Conversation

@iancooper

Copy link
Copy Markdown
Member

Adds spec/013-howto_guides/tasks.md and the .tasks-approved marker that /spec:design, /spec:review and /spec:status read. The marker is verified with ls -a, not asserted492b1ea is titled "012 requirements APPROVED", says in its body that it adds the marker, and adds no marker.

43 tasks across design §10's five phases (13 / 11 / 7 / 8 / 4), derived two ways that agree. The phases are the approved design's, unchanged — one PR each, and P0-2 + P0-4 go first because nothing new should be written on top of an API surface the corpus spells wrongly.

Reviewed by re-derivation, not by reading

Every count the list asserts reproduces at 7062bf9, each with its control:

Claim Result
43 tasks, two independent derivations 43 / 43
P0-2: known-dead sites / pages 10 / 6
The seven extra sites CommandProcessorBuilder.With( 5, DispatchBuilder.With( 1, .Subscribers( 1 → 17
The real API in contents/ .Resilience( 0, DefaultResilience 0, AddBrighterDefault 0
P0-4: sites / pages, against a live-twin control 10 / 6, control 13
Four new filenames, ClaimCheck.md as control 0,0,0,0 against 1
Both P0-3 anchors, through linkcheck.py's own slug() FOUND / FOUND, control MISSING
All seven gates 160 · 0 errors / 779 warnings / 158 · 157, widest 12 of 20 · 77 · 0 of 18 · 0 across 59 tables, 519 rows

Source citations check out too: UseExternalLuggageStore is three overloads at :951/:971/:992, AddBrighterDefault is at ResiliencePipelineRegistryExtensions.cs:57 and does use TryAddBuilder, Resilience() does throw on its first statement, and the luggage-store family enumerates to exactly the seven named.

Two findings, both applied

§2.3 — the backstop family is SIX, not three. Enumerated rather than extrapolated, there are three …OnErrorAttribute and three …OnErrorAsyncAttribute, all live at both refs. Task 3.3 said "the three" — standing obligation 2's exact failure mode, committed inside the document that states obligation 2, and the same shape as design §11 Q6's MsSqlEntityFrameworkTransactionProvider.

It matters rather than merely being wrong. DeferMessageOnErrorAsyncAttribute is on 0 of 158 pages — the same zero-tell as AddBrighterDefault and UseExternalLuggageStore — and Subscription<T> defaults to MessagePumpType.Proactor (Subscription.cs:291 @ 10.7.0). So the reader P0-3 is written for, on MSSQL, Redis or MQTT where a nack discards and DeferMessageAction is the only safe choice, is on the async pump by default and needs the one member of the family this corpus has never named.

§1 — a source line number is a figure and needs a ref. Every <file>:<line> into ../Brighter here means @ 10.7.0, and two had already drifted: OutboxProducerMediator.cs:502 is the InvalidOperationException throw at 10.7.0 and if (HasAsyncOutbox()) on origin/master; the DI factory's ??= is ServiceCollectionExtensions.cs:705 at 10.7.0 and :724 on master. The name is checked at both refs; the line number is only ever true at one.

Gates

Spec-only, so nothing under contents/ moves — confirmed rather than assumed: linkcheck 160, pagelint 0 errors, 779 warnings, 158 pages. Counts re-derived after both edits: still 43 / 43. Renumbering the old §2.3 broke no cross-reference; nothing pointed at it.

🤖 Generated with Claude Code

https://claude.ai/code/session_0146UueHL6H3zGBGTYwz7GtL

…amily of six

Adds `spec/013-howto_guides/tasks.md` and the `.tasks-approved` marker that
`/spec:design`, `/spec:review` and `/spec:status` actually read. The marker is
checked with `ls -a`, not asserted here: `492b1ea` is titled "012 requirements
APPROVED", says in its body that it adds the marker, and adds no marker.

43 tasks across design §10's five phases (13 / 11 / 7 / 8 / 4), derived two ways
that agree. The phases are the design's, unchanged — one PR each, P0-2 and P0-4
first because nothing new should be written on top of an API surface the corpus
spells wrongly.

Reviewed by re-derivation rather than by reading. Every count the list asserts
reproduces at 7062bf9 with its control: P0-2 at 10 sites / 6 pages, the seven
extra sites at 5 / 1 / 1 for seventeen, the real API at 0 / 0 / 0 in contents/,
P0-4 at 10 / 6 against a live-twin control of 13, both P0-3 anchors resolving
through linkcheck.py's own slug() against a control that does not, and all seven
gates at 160 · 779 · 158 · 157 · 77 · 0 of 18 · 0 across 59 tables and 519 rows.

Two findings, both applied:

§2.3 — the backstop family is SIX, not three. Enumerated rather than
extrapolated, `git grep -lE 'class [A-Za-z]*OnError[A-Za-z]*Attribute'` returns
three sync attributes and three async twins, every one live at both refs. Task
3.3 said "the three", which is standing obligation 2's exact failure mode
committed inside the document that states obligation 2 — the same shape as design
§11 Q6's MsSqlEntityFrameworkTransactionProvider. It matters rather than merely
being wrong: DeferMessageOnErrorAsyncAttribute is on 0 of 158 pages, the same
zero-tell as AddBrighterDefault and UseExternalLuggageStore, and Subscription<T>
defaults to MessagePumpType.Proactor (Subscription.cs:291 @ 10.7.0) — so the
reader P0-3 is written for, on MSSQL, Redis or MQTT where a nack discards and
DeferMessageAction is the only safe choice, is on the async pump by default and
needs the one member of the family this corpus has never named.

§1 — a source line number is a figure and needs a ref. Every <file>:<line> into
../Brighter in this document means @ 10.7.0, and two had already drifted:
OutboxProducerMediator.cs:502 is the InvalidOperationException throw at 10.7.0
and `if (HasAsyncOutbox())` on origin/master, and the DI factory's ??= is
ServiceCollectionExtensions.cs:705 at 10.7.0 and :724 on master. The name is
checked at both refs; the line number is only ever true at one.

Counts re-derived after both edits — still 43 and 43. Gates unmoved, the edit
being spec-only. Renumbering the old §2.3 broke no cross-reference; nothing
pointed at it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0146UueHL6H3zGBGTYwz7GtL
@iancooper
iancooper merged commit bdb8db4 into master Sep 6, 2026
8 checks passed
@iancooper
iancooper deleted the docs/013-tasks-approved branch September 6, 2026 23:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant