feat: aspirational-source marker convention (issue #1 Fix 5)
Documents a recommended (not plugin-enforced) frontmatter marker for files under `design_models` / RFCs / proposals: `status: aspirational` + `validated-against: <sha|"no validation">`, plus a recommendation that the design ledger distinguish model rows from contract rows mechanically. Wires the brainstorm skill to consume the signal: Step 1 notes the marker when reading model files, Step 4 flags code lifted from an aspirational source as the spec's most suspect bytes that must clear the Step-7 parse gate. This is the upstream signal whose downstream catch is the Fix-1 parse-every-block gate. Adds a Common Rationalisation and a Red Flag. Missing marker -> signal absent, graceful degradation, never a hard fail. Closes the issue #1 hardening set (P0 + Fixes 1-5). refs #1 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -69,6 +69,12 @@ Before asking any clarifying questions:
|
|||||||
- If the project has a design ledger configured under
|
- If the project has a design ledger configured under
|
||||||
`paths.design_ledger`, walk to the relevant contracts for
|
`paths.design_ledger`, walk to the relevant contracts for
|
||||||
the invariants the new cycle might touch.
|
the invariants the new cycle might touch.
|
||||||
|
- When reading any file under `paths.design_models` (or the
|
||||||
|
ledger's "model" rows), note its `status` /
|
||||||
|
`validated-against` frontmatter if present: `status:
|
||||||
|
aspirational` means its code is a target, not verified fact.
|
||||||
|
Track which content you may lift from such a source — it is
|
||||||
|
flagged for lift-time validation (Step 4).
|
||||||
- `git log --oneline -20` for the chronological scan.
|
- `git log --oneline -20` for the chronological scan.
|
||||||
- Identify scope: is this one cycle, or does it need to be
|
- Identify scope: is this one cycle, or does it need to be
|
||||||
decomposed into sub-cycles first? If multi-subsystem,
|
decomposed into sub-cycles first? If multi-subsystem,
|
||||||
@@ -146,6 +152,16 @@ code to show" is the rationalisation to refuse: an infra
|
|||||||
cycle that cannot be tied to concrete code is speculative
|
cycle that cannot be tied to concrete code is speculative
|
||||||
infra.
|
infra.
|
||||||
|
|
||||||
|
**Code lifted from an aspirational source is a hypothesis, not
|
||||||
|
evidence.** If the concrete code here is lifted from a
|
||||||
|
`design_models` file (or any source marked `status: aspirational`,
|
||||||
|
per Step 1), it carries no validation by default — the marker
|
||||||
|
exists precisely because no one has run it through the live tool.
|
||||||
|
Its `design/` location is not ratification. Treat it as the spec's
|
||||||
|
most suspect bytes: it must clear the Step-7 parse-every-block
|
||||||
|
gate before PASS. The marker tells you *which* blocks to distrust
|
||||||
|
first.
|
||||||
|
|
||||||
### Step 5 — Present design in sections
|
### Step 5 — Present design in sections
|
||||||
|
|
||||||
Scale each section to its complexity (a few sentences if
|
Scale each section to its complexity (a few sentences if
|
||||||
@@ -375,6 +391,7 @@ Hand off carries:
|
|||||||
| "Just polishing a wording after PASS, no need to re-dispatch" | The grounding-check report attests to specific bytes. A polish edit changes the bytes; the previous attestation no longer covers them. Re-dispatch is cheap; the alternative is a commit with an attestation that doesn't match the file. |
|
| "Just polishing a wording after PASS, no need to re-dispatch" | The grounding-check report attests to specific bytes. A polish edit changes the bytes; the previous attestation no longer covers them. Re-dispatch is cheap; the alternative is a commit with an attestation that doesn't match the file. |
|
||||||
| "The shape is clear from the prose, I don't need to paste the code" | If it's clear, pasting it is free; if pasting it is hard, it wasn't clear. The feature-acceptance criterion is unjudgeable without the worked code; "a user reaches for it" with no shown code is the exact hand-wave the criterion exists to kill. |
|
| "The shape is clear from the prose, I don't need to paste the code" | If it's clear, pasting it is free; if pasting it is hard, it wasn't clear. The feature-acceptance criterion is unjudgeable without the worked code; "a user reaches for it" with no shown code is the exact hand-wave the criterion exists to kill. |
|
||||||
| "The block obviously parses — I wrote it carefully" | Careful authoring is not a parse. A spec's code blocks are hypotheses until the live tool accepts them; treating them as truth is the compound-hallucination failure the parse-every-block gate exists to kill. If a parser is configured for the block's fence label, run it and paste the trace. |
|
| "The block obviously parses — I wrote it carefully" | Careful authoring is not a parse. A spec's code blocks are hypotheses until the live tool accepts them; treating them as truth is the compound-hallucination failure the parse-every-block gate exists to kill. If a parser is configured for the block's fence label, run it and paste the trace. |
|
||||||
|
| "It's in a model doc / the design ledger, so it's canonical" | A `models` / RFC / proposal doc holds aspirational code — a target, not verified fact; its `design/` location is not ratification. Code lifted from a `status: aspirational` source must clear the Step-7 parse gate like any other block, and is in fact the most suspect bytes in the spec. |
|
||||||
|
|
||||||
## Red Flags — STOP
|
## Red Flags — STOP
|
||||||
|
|
||||||
@@ -389,6 +406,9 @@ Hand off carries:
|
|||||||
- A spec carrying a code block whose fence label has a
|
- A spec carrying a code block whose fence label has a
|
||||||
configured `spec_validation` parser, committed without a
|
configured `spec_validation` parser, committed without a
|
||||||
parse-trace in the brainstorm chat
|
parse-trace in the brainstorm chat
|
||||||
|
- Lifting code verbatim from a `status: aspirational` source (a
|
||||||
|
`models` / RFC / proposal file) into the spec without flagging
|
||||||
|
it for the Step-7 parse gate
|
||||||
- Editing the spec file after a Step 7.5 PASS without
|
- Editing the spec file after a Step 7.5 PASS without
|
||||||
re-dispatching
|
re-dispatching
|
||||||
- Jumping straight from spec to `implement` (must go via
|
- Jumping straight from spec to `implement` (must go via
|
||||||
|
|||||||
@@ -23,6 +23,37 @@ Omitted optional keys signal that the feature is unused in this
|
|||||||
project; skills that depend on them either short-circuit or
|
project; skills that depend on them either short-circuit or
|
||||||
skip the corresponding step.
|
skip the corresponding step.
|
||||||
|
|
||||||
|
### Aspirational-source marker (recommendation)
|
||||||
|
|
||||||
|
Files under `design_models` (or an equivalent `RFCs` /
|
||||||
|
`proposals` directory) commonly carry aspirational code —
|
||||||
|
constructs written before the surface that would parse them
|
||||||
|
exists. To let a later brainstorm tell aspirational content from
|
||||||
|
validated contract, projects are encouraged (not required) to
|
||||||
|
give each such file a frontmatter marker:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
---
|
||||||
|
status: aspirational
|
||||||
|
validated-against: <commit-sha | "no validation">
|
||||||
|
---
|
||||||
|
```
|
||||||
|
|
||||||
|
`status: aspirational` says "the code here is a target, not a
|
||||||
|
verified fact"; `validated-against` records the last commit at
|
||||||
|
which someone actually ran the code through the live tool (or
|
||||||
|
`"no validation"`). A design ledger (`design_ledger`) is likewise
|
||||||
|
encouraged to distinguish "model" rows from "contract" rows so a
|
||||||
|
reading agent can mechanically tell which carry verified
|
||||||
|
behaviour.
|
||||||
|
|
||||||
|
When a file lacks the marker the signal is simply absent — the
|
||||||
|
brainstorm degrades to treating its content as unmarked, never
|
||||||
|
hard-failing. The marker is consumed by the brainstorm skill (see
|
||||||
|
its Step 1 and Step 4): content lifted from an aspirational source
|
||||||
|
is flagged and must clear the Step-7 parse-every-block gate before
|
||||||
|
it ships in a spec.
|
||||||
|
|
||||||
## `naming`
|
## `naming`
|
||||||
|
|
||||||
| Key | Type | Default | Description |
|
| Key | Type | Default | Description |
|
||||||
|
|||||||
Reference in New Issue
Block a user