Ticket 06 and the close of spec 011: the two documents the method reads, and the verify that proves the route - #76
Merged
Conversation
The design method resolves its context from the project root, .agents/context/ and docs/, reads no configuration for it, and offers no way to point it elsewhere that is not configuration. From inside docs/design/ it resolved nothing: designPath null on a repo whose design system is filled, which would have opened every design session by calling our own document a documentation gap. The design system moves up one directory to docs/DESIGN.md and the product record sits beside it at docs/PRODUCT.md. Both now resolve, with platform web, measured with the loader itself rather than argued from the source. docs/design/ keeps VOICE.md and the reference material, which the method never reads. The product record points where the brief already owns the fact: stack, users and purpose are one line each at docs/product/BRIEF.md. What it holds itself is what the brief never carried, the platform, the three surfaces this project actually renders, the brand commitments, the evidence on hand, and the absences nobody may fabricate. Read against the brief line by line, two sentences that had drifted into restating it were cut back to the interface fact underneath them. A fresh copy gets the design system and no product record at all: begin deletes Groundwork's own and the method's init writes that project's in the same place. DESIGN.md now says in its own header that sections 1 and 2 are input and section 3 is written from the built world after the finish review. maintain refreshes the method as the one dependency that is in no manifest, and the refresh was run rather than assumed: on an up-to-date install it reports the version and changes nothing. Decision 0020 gained the option underneath the whole choice, writing a deeper in-house method, rejected because the missing halves were an owner-facing decision round and a mechanical detector, which together are a product rather than a skill; a tier table against decision 0015; and where the two documents live. Over the whole spec the most expensive tier shrank, AGENTS.md 126 lines before and 125 after. The move added no dead path: the links gate's unresolved list is identical before and after, 71 either way. The archived baseline spec keeps the old name, which is what the file was called then. The retired path is in the denylist, scoped so this spec's own record can still name it. Traces-to: SC-8
…easoned about `verify` ran over the whole spec, and criteria 1, 2 and 4 were exercised on a scratch copy of this repo rather than argued from the tickets. Criterion 1: a fresh copy reports the design method not armed, the install prints one line naming impeccable 4.0.4, the payload stays gitignored, the symlink survives, and check.mjs passes with it in place. Criterion 2: with npm pointed at an unreachable host the install refuses before writing anything, in one line, and the gates on that copy stay green, so setup carries on; the Node-floor refusal behaves the same. Criterion 4's first approval point ran end to end: the roll assigned, the decision page served and blocked, and the choice came back while the project still held no artifact code. The third approval point turned up the one thing worth fixing. Impeccable ships native reviewer definitions for Copilot and Cursor only, so a Claude Code install writes no agent definitions and `impeccable-finish-reviewer` is not a name this harness can spawn. The `design` skill now says to spawn a fresh subagent carrying the method's own degraded finish-reviewer reference, which keeps what that point is for, and to disclose the substitution in one line. Approval points 2 and 3 need a real surface and an owner at the keyboard, so this pass proved the mechanism that asks, never an owner answering, and the spec says so. The archive move needed the two denylist exclusions rewritten from a path that the move would have broken to the spec name itself, which survives it. Traces-to: SC-8
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.
What changed and why
Last ticket of spec 011. The design method resolves its context from the project root,
.agents/context/anddocs/, with no configuration and no supported way to point it elsewhere.From inside
docs/design/it resolved nothing:designPath: nullon a repo whose design system isfilled, so every design session would have opened by calling our own document a documentation gap.
The design system moves up one directory to
docs/DESIGN.md, and the product record the methodwrites sits beside it at
docs/PRODUCT.md.docs/design/keeps VOICE.md and the referencematerial, which the method never reads.
The product record points where the brief already owns the fact: stack, users and purpose are one
line each at
docs/product/BRIEF.md. What it holds itself is what the brief never carried, theplatform, the three surfaces this project actually renders, the brand commitments, the evidence on
hand, and the absences nobody may fabricate. A fresh copy gets the design system and no product
record at all:
begindeletes Groundwork's own, and the method's init writes that project's in thesame place from what
beginalready captured.Around that: DESIGN.md now says in its own header that sections 1 and 2 are input and section 3 is
written from the built world after the finish review;
maintainrefreshes the method as the onedependency that is in no manifest; and decision 0020 gained the option underneath the whole choice
(write a deeper in-house method, rejected because the missing halves were an owner-facing decision
round and a mechanical detector, which together are a product), a tier table against decision 0015,
and where the two documents live. Over the whole spec the most expensive tier shrank: AGENTS.md 126
lines before, 125 after.
Verified by
node .agents/skills/impeccable/scripts/context.mjsbeforethe move:
productPath: null,designPath: null. After:docs/PRODUCT.md,docs/DESIGN.md,platform: web.node checks/design-method.mjs --installon an up-to-date installreports v4.0.4 and changes nothing, which is what makes it safe in
maintain's dependency round.byte-identical to
main's, 71 entries either way, compared by diffing the two runs. Two new deadpaths that the first draft of the ticket record introduced were found this way and fixed.
docs/PRODUCT.mdanddocs/product/BRIEF.mdline by line; twosentences that had drifted into restating the brief (the publishing channel, the zero-dependency
constraint) were cut back to the interface fact underneath them.
node checks/check.mjsgreen with the enforcement line reporting four signals, 187gate self-tests across five suites (70 runner and document, 35 code, 24 config, 48 trace, 10
stack), progress 25, links 19, cockpit 21, cockpit-path 11, drill 11, and
node checks/progress.mjsclean.
exercised (a scratch project through
begin, the install failure forced by cutting the network,one surface through the three approval points). That is the next session, and spec 011 stays
buildinguntil it runs.And with it, spec 011 closes
verifyran over the whole spec on this head, with criteria 1, 2 and 4 exercised on a scratch copyof this repo rather than argued from the tickets.
gitignored and a clone starts without it.
node checks/design-method.mjs --installthen printedimpeccable 4.0.4 installed: payload moved to .agents/skills/impeccable, .claude/skills symlink restored,git statusstayed empty, andcheck.mjspassed with the payload in place, which iscriterion 3 exercised on a copy that is not this one.
anything: one line, exit 1, no payload on disk, and the gates on that copy stay green, so setup
carries on. The Node-floor refusal was forced the same way and behaves the same.
page served and rendered the assigned card, the challengers and the standing exit, and it blocked:
still waiting four seconds later, released only when an answer arrived, returning the chosen card
with the instruction to open its board and hero before any code. The project held no artifact code
at that moment.
the keyboard. This pass proved the mechanism that asks, not an owner answering, and the spec says
so in its own verified line.
The third point did turn up one thing worth fixing, and it is the only behavior change here:
impeccable ships native reviewer definitions for Copilot and Cursor only, so a Claude Code install
writes no agent definitions and
impeccable-finish-revieweris not a name this harness can spawn.The
designskill now says to spawn a fresh subagent carrying the method's own degradedfinish-reviewer reference, and to disclose the substitution in one line.
The spec is
doneand archived. The move needed the two denylist exclusions rewritten from a patharchive/would have broken to the spec name itself, which survives it.Gates on the closing head:
check.mjsOK, 187 gate self-tests (70 runner and document, 35 code,24 config, 48 trace, 10 stack), progress 25, links 19, cockpit-path 11, cockpit 21, drill 11, and
npx -y impeccable@latest detect index.htmlexits 0 here while exiting 2 with four findings on afive-line page carrying a gradient headline, so the detector is looking rather than passing
everything.
One call left for the owner:
progress.mjsreports SC-8 as claimed by two plans, the archivedbaseline 000 and this one, and closing 011 does not clear it, because the gate counts a
donespecas a live claim. Drop SC-8 from 000's
Traces to:, teach the gate that a later spec supersedes anearlier claim, or leave the heads-up standing. Nothing is broken either way:
progress.mjsexits 0and the board still reads 12 of 12.