Skip to content

Ticket 06 and the close of spec 011: the two documents the method reads, and the verify that proves the route - #76

Merged
Tradebaas merged 2 commits into
mainfrom
feat/artifact-ownership-and-record
Aug 9, 2026
Merged

Ticket 06 and the close of spec 011: the two documents the method reads, and the verify that proves the route#76
Tradebaas merged 2 commits into
mainfrom
feat/artifact-ownership-and-record

Conversation

@Tradebaas

@Tradebaas Tradebaas commented Aug 7, 2026

Copy link
Copy Markdown
Owner

What changed and why

Last ticket of spec 011. The design method resolves its context from the project root,
.agents/context/ and docs/, with no configuration and no supported way to point it elsewhere.
From inside docs/design/ it resolved nothing: designPath: null on a repo whose design system is
filled, 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 method
writes sits beside it at docs/PRODUCT.md. 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. 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 from what begin already 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; maintain refreshes the method as the one
dependency 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

  • The loader itself, not the source. node .agents/skills/impeccable/scripts/context.mjs before
    the move: productPath: null, designPath: null. After: docs/PRODUCT.md, docs/DESIGN.md,
    platform: web.
  • The refresh was run. node checks/design-method.mjs --install on an up-to-date install
    reports v4.0.4 and changes nothing, which is what makes it safe in maintain's dependency round.
  • The move added no dead path. The links gate's list of paths that point at nothing is
    byte-identical to main's, 71 entries either way, compared by diffing the two runs. Two new dead
    paths that the first draft of the ticket record introduced were found this way and fixed.
  • Read against each other. docs/PRODUCT.md and docs/product/BRIEF.md line by line; two
    sentences that had drifted into restating the brief (the publishing channel, the zero-dependency
    constraint) were cut back to the interface fact underneath them.
  • Gates: node checks/check.mjs green with the enforcement line reporting four signals, 187
    gate 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.mjs
    clean.
  • Not verified here: the spec-level end-to-end pass. plan.md asks for criteria 1, 2 and 4 to be
    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
    building until it runs.

And with it, spec 011 closes

verify ran over the whole spec on this head, with criteria 1, 2 and 4 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, because the payload is
    gitignored and a clone starts without it. node checks/design-method.mjs --install then printed
    impeccable 4.0.4 installed: payload moved to .agents/skills/impeccable, .claude/skills symlink restored, git status stayed empty, and check.mjs passed with the payload in place, which is
    criterion 3 exercised on a copy that is not this one.
  • Criterion 2. With npm pointed at an unreachable host the install refuses before writing
    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.
  • Criterion 4, first approval point, end to end. The roll assigned a direction, the decision
    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.
  • Approval points 2 and 3 could not be exercised without a real surface to build and an owner at
    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-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, and to disclose the substitution in one line.

The spec is done and archived. The move needed the two denylist exclusions rewritten from a path
archive/ would have broken to the spec name itself, which survives it.

Gates on the closing head: check.mjs OK, 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.html exits 0 here while exiting 2 with four findings on a
five-line page carrying a gradient headline, so the detector is looking rather than passing
everything.

One call left for the owner: progress.mjs reports SC-8 as claimed by two plans, the archived
baseline 000 and this one, and closing 011 does not clear it, because the gate counts a done spec
as a live claim. Drop SC-8 from 000's Traces to:, teach the gate that a later spec supersedes an
earlier claim, or leave the heads-up standing. Nothing is broken either way: progress.mjs exits 0
and the board still reads 12 of 12.

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
@Tradebaas Tradebaas changed the title Ticket 06: the two documents the method reads sit where it looks Ticket 06 and the close of spec 011: the two documents the method reads, and the verify that proves the route Aug 7, 2026
@Tradebaas
Tradebaas merged commit c0762f0 into main Aug 9, 2026
8 checks passed
@Tradebaas
Tradebaas deleted the feat/artifact-ownership-and-record branch August 9, 2026 11:03
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