Plan 4: the prose kit, corrected by executing it - #41
Merged
Conversation
The sixteen prose pages open and close with CSS they share, and it lived in sixteen copies. This is the plan that gave it one source — and it corrected the spec's account of that CSS twice before writing a line of it. The spec said "16 pages, 54 lines common to all three sites". The 54 was measured across the three privacy pages, not sixteen. Across all sixteen, eight rules are byte-identical. Three of the six selectors the spec names are a privacy-page pattern, not a kit. And the shared CSS is not contiguous, so it becomes two fences rather than one prose.css. Five corrections made while running it. The premise of Task 2 was wrong. I wrote that a page losing a fence goes unnoticed by everything. design:check does stay green; verify does not — the fences carry behaviour, so deleting the language fence yields eight ReferenceErrors, a mobile menu that will not open and a failed language handoff, naming none of them a fence. The value is the diagnosis, not the detection. Tasks 8-10 asserted "no change beyond the marker lines" on pages that all carry a four-line prose comment the package folds into its own header. The gate would have read the intended outcome as drift and stopped three tasks. The install command was --package-lock-only, which moves the lockfile and leaves node_modules on the old release, so the sync writes the previous version's bytes while the lockfile claims the new one. Two of the test specifications were buggy: a blank-line regex that spanned the header comment, whose paragraph breaks are blank lines in every block, and a substring filter that missed two wrapped continuation lines. The implementer's rewrites are stricter than what I wrote and both are kept. And ruling 5 claimed the brand mark had lost its accent on three pages and that restoring one declaration fixed it. The mark consumes no currentColor. It never lost anything, the declaration is inert on that site, and the check I wrote to prove otherwise measured the property the edit had just set — the same vacuity the plan's own first three tasks exist to hunt.
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.
Adds
docs/superpowers/plans/2026-08-31-prose-kit.md, alongside plans 1, 2 and 3. Kept out of thethree adoption pull requests for the same reason as before: those are exactly the files each site
needed, and this document describes all three sites and the tiers still to come.
The implementation is in robertblust.github.io#40, companygraph.github.io#42 and
guestgraph.github.io#24, with the package released as
v0.4.0. All green.
It corrected the spec before writing a line
.card .cols .lede .note .rules h1.card,.colsand.noteare a privacy-page pattern. They live in the tail of 141 single-page rulesprose.cssFive corrections made while running it
design:checkstays green;verifydoes not. Deleting thelanguagefence gives eightReferenceError: langFromUrl is not defined, a mobile menu that will not open, and a failed language handoff — naming none of them a fence. The value is the diagnosis, not the detectioncreditpages carry a four-line prose comment the package folds into its header. The gate would have read the intended outcome as drift and stopped three tasksnpm install --package-lock-onlynode_moduleson the old release, so the sync writes the previous version's bytes while the lockfile claims the new one.brand svg{color}fixed itcurrentColor. It is<rect class="plate">+<text class="rb">, filled directly. It never lost anything, the declaration is inert on that site — and the check written to prove otherwise measuredgetComputedStyle('.brand svg').color, the property the edit had just setThat last one is the one worth reading twice. The plan's first three tasks exist to hunt exactly
that shape of check — one that cannot fail — and I wrote one three tasks later, in the step meant to
verify the only visible change I believed the plan was making. It was caught because the final
reviewer rendered the mark instead of reading the diff.