Skip to content

Plan 4: the prose kit, corrected by executing it - #41

Merged
robertblust merged 2 commits into
mainfrom
plan-4-prose-kit
Aug 31, 2026
Merged

Plan 4: the prose kit, corrected by executing it#41
robertblust merged 2 commits into
mainfrom
plan-4-prose-kit

Conversation

@robertblust

Copy link
Copy Markdown
Owner

Adds docs/superpowers/plans/2026-08-31-prose-kit.md, alongside plans 1, 2 and 3. Kept out of the
three 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

the spec said what measuring found
the kit is "54 lines common to all three sites" across 16 pages the 54 was measured across the three privacy pages. Across all sixteen, eight rules are byte-identical
its content is .card .cols .lede .note .rules h1 .card, .cols and .note are a privacy-page pattern. They live in the tail of 141 single-page rules
one file, prose.css the shared CSS is not contiguous — a reset at the top, a footer near the bottom, per-page material between. Two fences, not one

Five corrections made while running it

the plan said what is true
a page that loses a fence is invisible to everything design:check stays green; verify does not. Deleting the language fence gives eight ReferenceError: 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 detection
Tasks 8–10: "no change beyond the marker lines" all ten credit pages 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 tasks
npm install --package-lock-only 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 both buggy — a blank-line regex spanning the header comment, whose paragraph breaks are blank lines in every block, and a substring filter missing two wrapped continuation lines. The rewrites are stricter than what I wrote
ruling 5: the brand mark lost its accent, and restoring .brand svg{color} fixed it the mark consumes no currentColor. 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 measured getComputedStyle('.brand svg').color, the property the edit had just set

That 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.

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.
@robertblust
robertblust merged commit e6229b2 into main Aug 31, 2026
1 check passed
@robertblust
robertblust deleted the plan-4-prose-kit branch August 31, 2026 22:41
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