spec: 009 Phase 3 — rung 1, the first Tutorial-typed page - #116
Open
iancooper wants to merge 1 commit into
Open
Conversation
… ran D1. `contents/TutorialFirstCommand.md`, the corpus's first `Tutorial`-typed page: a command dispatched to a handler in-process, no broker, no Docker. Task 3.1 settled `host.Run()` by observation rather than guessing. The sample prints `Hello Ian`, then `Application started. Press Ctrl+C to shut down.`, and sits there — still running at 45 seconds. `AddBrighter().AutoFromAssemblies()` registers no `IHostedService`; the only two in the DI package come from the opt-in `BrighterPipelineValidationExtensions`. So the page drops that one line and says why the sample keeps it. No change was made to Brighter. The near-miss on the way: `git grep "host.Run()"` matched one sibling of three, and the finding drafted from it — "HelloWorld is an outlier" — was false. The other two end `await host.RunAsync()`. One term, two spellings, exactly Phase 2's `Box Provisioning` against `BoxProvisioning`, one phase later. Task 3.3's assertion is the point, because a repo-wide `0 errors` is a silence. `BANNER_RE` was called directly and asserted to match with group(1) == 'Tutorial' — the vocabulary alternative that had never fired on a real page. Then two red-proofs on the page itself, each asserting the mutation produced the input the branch rejects before the tool ran: a type out of vocabulary gives BANNER MALFORMED, a deleted banner gives BANNER MISSING, both exit 1. Restored from a copy taken aside and asserted byte-identical. Task 3.4's first measurement was wrong and looked right. `NUGET_PACKAGES` moves the global packages folder but not the HTTP cache, so a "cold" restore of 4.5s was served locally while the directory really did go 0 → 195 MB. Redone with all four cache locations redirected and each verified empty: restore 4.5s → 6.2s, http-cache 0 → 113 files, total machine time 10.9s. An empty cache is a claim about one directory; cold is a claim about four. The three `csharp` blocks were then extracted from the markdown and compared byte for byte against the `.cs` files that were compiled and run — identical — and the `xml` block against the `<ItemGroup>` the three `dotnet add package` commands generated. Four reader-facing claims were checked against the Brighter source; two were wrong as drafted, including a promise about rung 2 that rung 2 would have broken. Design's D1 outline links rung 2, which does not exist yet and would have failed linkcheck with MISSING FILE. Link down the ladder, never up — Phases 6, 8 and 11 inherit this. Gates: linkcheck clean at 145 files; pagelint 0 errors, 790 warnings, 144 pages — the using-directive debt unmoved, since all three C# blocks carry their own directives and none uses the `// ...` escape; `--changed origin/master` reached 7 code blocks strict, this spec's first non-vacuous strict run; both urlmap checks 0. Tasks re-derived, not incremented: 11 done, 28 open, 39 total. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Spec 009, Phase 3 — D1.
contents/TutorialFirstCommand.md: a command dispatched to a handler in-process, no broker, no Docker. The corpus's firstTutorial-typed page — a banner typepagetypes.tsvshows 0 of 142 pages had ever used.Five tasks, 3.1–3.5. Phase 3 opens no Brighter PR: rung 1 reuses
samples/CommandProcessor/HelloWorldunchanged, which is what makes it the one rung nothing upstream can stall.host.Run(), settled by observationDesign said decide at writing time by running it; do not guess. Run: the sample prints
Hello Ian, thenApplication started. Press Ctrl+C to shut down., and sits there — still running at 45 seconds. The greeting arrives before the host starts, soSendcompletes andhost.Run()contributes nothing but the block.AddBrighter().AutoFromAssemblies()registers noIHostedService— the only two in the DI package come from the opt-inBrighterPipelineValidationExtensions.The page drops that one line and says why the sample keeps it. No change was made to Brighter.
The near-miss is worth the paragraph:
git grep "host.Run()"matched one sibling of three, and the finding drafted from it — "HelloWorld is an outlier among its own siblings" — is false. The other two endawait host.RunAsync(). One term, two spellings, and the query was well-formed and answering a different question — exactlyBox ProvisioningagainstBoxProvisioning, one phase earlier.The
Tutorialbanner asserted, not inferredA repo-wide
0 errorsis a silence. So:BANNER_REcalled directly and asserted to match withgroup(1) == 'Tutorial'; then two red-proofs on the page, each asserting the mutation produced the input the branch rejects before the tool ran — type out of vocabulary → BANNER MALFORMED, banner deleted → BANNER MISSING, both exit 1. Restored from a copy taken aside, asserted byte-identical.The timed run was wrong the first time, and looked right
NUGET_PACKAGESmoves the global packages folder but not the HTTP cache. A plausible "cold" restore of 4.5s was served from~/.local/share/NuGet/http-cachewhile the target directory really did go 0 files → 195 MB, so every cheap check agreed. Redone with all four locations redirected and each verified empty viadotnet nuget locals all --list: restore 4.5s → 6.2s, http-cache 0 → 113 files, total machine time 10.9s. An empty cache is a claim about one directory; cold is a claim about four.The page publishes that measurement as a diagnostic rather than a promise — ten minutes is reading and typing; if your restore takes minutes, the problem is your feed.
The code on the page is the code that ran
The three
csharpblocks were extracted from the markdown and compared byte for byte against the.csfiles that were compiled and run: identical. Thexmlblock against the<ItemGroup>the threedotnet add packagecommands actually generated: identical.Four reader-facing claims were checked against the Brighter source; two were wrong as drafted, including "rung 2 swaps in a broker and this line does not change" — rung 2 uses
Post, so that was a promise a future page would have broken.One finding the later rungs inherit
Design's D1 outline links rung 2, which does not exist yet — written as outlined the page would have failed
linkcheck.pywith MISSING FILE. Link down the ladder, never up. Phases 6, 8 and 11 each inherit this; the upward links are Phase 9's to add.Gates
linkcheck.pypagelint.pypagelint.py --changed origin/masterurlmap.py --check-shapeurlmap.py --check-redirectsThe debt staying at 790 is the point: all three C# blocks carry their own
usingdirectives and none uses the// ...escape, so the page adds nothing to AC1's baseline by construction. And 7 code blocks strict is this spec's first non-vacuous--changedrun — Phases 1 and 2 reached 0 blocks and said so.Predicted URL, from
urlmap.pyrather than guessed:get-started/tutorialfirstcommand.Tasks re-derived, not incremented: 11 done, 28 open, 39 total, and the phase table still sums to 39 independently.
🤖 Generated with Claude Code