Repository navigation
review: the whole repository, and the durable-content inventory - #38
darko-mijic wants to merge 7 commits into
Conversation
Owner working rules: run a deep review of the whole repository as one phase of the next work, doing as much as possible through the relay plugin (GPT and Claude reviewers in fan-outs and workflows) while the coordinating session keeps its context for coordination and execution. Commits, push and a draft pull request are authorized; the owner reviews and merges. Base: main b5e0a8b (PR #36). Arc Pack: none. The review is input to the roadmap's first entry, spec:protocol.delivery-record-cleanup, whose blocking question its inventory answers. Add the review's evidence scaffold: why it runs, the nine lanes with their reader and verifier model families, and where each kind of finding goes. The directory is removed before merge. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: true
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. |
PR #34 named the review's second input: the compact article packet and the seed / current / future distinctions. Add two lanes that carry it, seed to current and current to future, each verified by the other model family, and say how the seed design is read: as a reference lens, never intended truth. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An arc commits evidence that no test or recipe carries under evidence/prN/ on its branch and removes it before merge, the convention PR #36 followed. That evidence is temporal by genre: an inventory of the frozen records cites plan files by path and quotes the dated records it classifies. Exempt evidence/ beside the existing .omo/evidence/ exemption, so a review's evidence can cite what it reviews without failing the guard on its branch. On main the directory is empty once each arc removes its evidence. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Apply the eight confirmed docs findings against the series from the review in draft PR #38, each verified by a second model family: - L10-4, L11-02: the shipped-projections decision (MD-32) freezes Design Review, census, Mermaid and Gherkin; only Studio pages are open to survive, merge or disappear. - L10-5: example-space coverage and file-impact coverage-unknown are different absences. - L10-7: Part 1 no longer says the Protocol links to issue trackers and design tools; it separates CTRF run evidence, the idea-stage reference capture and undesigned links. - L10-8: the preview's design diff compares against the pull request's base. - L10-11: Part 2 points prototypes at the Studio's manual acceptance tasks without claiming anyone completed them. - L9-F7: the source checkout's Node range comes from the test toolchain, apart from the CLI's Node >=20 floor. - L9-F6: the evidence sync refuses a self-hosting warning rule other than honesty/gaps at the pin, so a new prose-mentions pair cannot be labelled intentional. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Twelve lanes read main at b5e0a8b: nine engineering lanes, two product-lens lanes (seed to current, current to future) and a PR-record lane over PRs #36, #35, #33, #32 and #31. A reader from one model family (GPT through the relay plugin, or Claude) produced each lane's findings; a verifier from the other family re-measured each one. - README.md: the dossier, with lanes, models, counts, coverage gaps and re-measure commands. - findings.md and findings.json: the engineering lanes' findings with their verdicts. - product-lens.md and .json, pr-record.md and .json: the other three lanes. - inventory.md: the measured answer to spec:protocol.delivery-record-cleanup#question.durableContent, for the owner's review. - open-questions.md: owner questions ready to author. - proposal.json, proposal-check.json, proposal-memo.md, not-proposed.md: one change proposal based on b5e0a8b, seven changes, checked by recipe 38 with nothing moved or unresolved. Arc evidence: removed before merge. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Change proposal memo (recipe 49) for Change proposalBase: Change 1Scope: Replaces: Change 2Scope: Reason: Change 3Scope: Reason: Change 4Scope: Reason: Change 5Scope: Replaces: Change 6Scope: Follows: Change 7Scope: Reason: The proposal{
"schema": "sdp-proposal/1",
"base": "b5e0a8bea1e3bedd48c616f96c9928e955792753",
"reason": "From the whole-repository review: two ready consumer Specs have drifted behind the realized agent surface, and three provisional answers the owner accepted in PR #36 are recorded only in its description.",
"changes": [
{
"scope": [
"spec:consumers.agent-surface.answer-shapes#design.wrapIdiom",
"spec:consumers.agent-surface.evaluation-sink#rule.recipeCall"
],
"request": "Replace the value of the design entry wrapIdiom in specs/consumers/agent-surface.answer-shapes.sdp.md with the text below, keeping the `- wrapIdiom: ` label. In the same change, update the pinned wrapIdiom value in test/self-hosting-oracle/consumers.ts to the same text so the self-hosting oracle stays green.",
"text": "to filter a shipped answer, the caller calls the recipe through the `recipes` binding with only the recipe's own parameters, `const answer = await recipes(<number>, { <the recipe's own parameters> });`, inside its own body, and returns a filtered value, so the caller's own parameters never reach the recipe as names it does not take and the shipped body is never inlined into the caller's; the catalog shows the shell form and states that the caller's part must hold no shell expansion.",
"replaces": "spec:consumers.agent-surface.answer-shapes#design.wrapIdiom",
"reason": "The entry prescribes inlining the shipped body, which the catalog and the reading skill replaced with `await recipes(n, params)` after the fifth binding (#rule.recipeCall)."
},
{
"scope": ["spec:consumers.reader"],
"request": "Replace the text of rule[1] of spec:consumers.reader, at specs/consumers/reader.sdp.gherkin line 74 (the unkeyed rule beginning \"The reader exposes `graph`\"), with the text below, keeping its `Rule: ` label. In the same change, update the pinned rule text in test/self-hosting-oracle/consumers.ts (line 420 at the base) to the same text.",
"text": "The reader exposes `graph`, the raw graph it reads, and the methods `specs`, `packs`, `findings`, `findByConcept`, `byFile`, `blastRadius`, `resolveEntryAddress`, `specContext` and `packContext`; a join is added only when a second machine consumer needs it and hand-rolled attempts get it wrong.",
"reason": "The realized Reader interface and createReader expose resolveEntryAddress, which recipe 51 and the vault projection call, yet the ready Spec's closed method list omits it."
},
{
"scope": [
"spec:consumers.reader",
"spec:consumers.reader#rule.conceptEntry",
"spec:extraction.entry-citations",
"spec:validation.prose-mentions"
],
"request": "Add a new rule to spec:consumers.reader in specs/consumers/reader.sdp.gherkin, as `Rule: ` followed by the text below, placed directly after rule[1] (the reader-surface rule at line 74) and before the rule keyed #conceptEntry. In the same change, add the new rule, without its key marker, to the pinned rules list for spec:consumers.reader in test/self-hosting-oracle/consumers.ts as rules[2], and shift that entry's ruleKeys by one: entryAddressResolution rules[2], conceptEntry rules[3], fileEntry rules[4], blastRadius rules[5], reasonsAsData rules[6].",
"text": "[#entryAddressResolution] `resolveEntryAddress` resolves one entry address with the grammar and entry rules that prose validation and entry citations use, and returns `{ entry, resolves, reason }`: `entry` names the resolved entry, such as `rule[2]`, `question[0]` or `design.wrapIdiom`, or is null; `reason` is null when the address resolves and otherwise `malformed`, `spec`, `section` or `entry`; recipe 51 and the vault projection are its machine consumers.",
"reason": "The public method has a shipped result shape (src/graph/entry-address.ts) but no stated contract, so an adopter cannot rely on it and a refactor could remove it unflagged."
},
{
"scope": [
"spec:protocol.delivery-record-cleanup",
"spec:protocol.delivery-record-cleanup#question.durableContent"
],
"request": "Record the method the owner accepted for answering #durableContent, which only PR #36's description records (\"Answered since the memo was rendered\"): the provisional answer stands, and the inventory is the arc's first commit and is checked by a review from another model family. In specs/protocol/delivery-record-cleanup.sdp.md, add a `## Behavior` section after Intent holding one entry, `- rule: ` followed by the text below. Keep the question itself: change 5 amends it. In the same change, add to the pinned entry for spec:protocol.delivery-record-cleanup in test/self-hosting-oracle/protocol.ts a behavior section with this rule, without its key marker, as rules[0] and the ruleKeys entry inventoryFirst rules[0]. State no readiness change.",
"text": "[#inventoryFirst] The arc that removes them opens with a measured inventory, in its first commit, of what `plans/`, `reviews/` and the concept documents still carry that no Spec, test, decision or recipe carries, each piece with its home; a review by another model family checks the inventory before anything is deleted.",
"reason": "The owner accepted #durableContent's provisional answer in PR #36 with two details, the first-commit inventory and the cross-family review, that the graph does not hold."
},
{
"scope": ["spec:protocol.delivery-record-cleanup#question.durableContent"],
"request": "Replace the open question #durableContent in specs/protocol/delivery-record-cleanup.sdp.md, its line and its two field lines, with the text below, which keeps the question, its flag, key and decider and changes only its provisional line. The question stays blocking: the owner accepted how it is answered, while the answer, the inventory's content, still awaits the owner's review. Once the owner has reviewed the inventory and each piece has moved to its home, the question leaves the Spec. In the same change, update the pinned provisional for this question in test/self-hosting-oracle/protocol.ts to the new provisional line. State no readiness change.",
"text": "- [blocking #durableContent] Which content in `plans/`, `reviews/` and the concept documents does no Spec, test, decision or recipe carry yet, and where does each piece belong?\n - decider: owner\n - provisional: the measured inventory this Spec's rule requires answers it once the owner has reviewed it; each piece then moves to its home and the question leaves the Spec",
"replaces": "spec:protocol.delivery-record-cleanup#question.durableContent",
"reason": "The graph's provisional predates the owner's acceptance and does not say that the owner's review of the inventory is what settles the question."
},
{
"scope": [
"spec:consumers.spec-studio.cited-line-text",
"spec:consumers.spec-studio.cited-line-text#question.lineText"
],
"request": "Record the owner's acceptance of the provisional answer to #lineText, which only PR #36's description records. In specs/consumers/spec-studio.cited-line-text.sdp.md, add the rule below to Behavior directly after #withoutWords, as `- rule: ` followed by the text; remove the open question #lineText with its decider and provisional lines; and in the narrative paragraph replace \"the choice is the owner's, because it puts source text in the graph for the first time\" with \"the owner chose it, though it puts source text in the graph for the first time\". In the same change, update the pinned entry for spec:consumers.spec-studio.cited-line-text in test/self-hosting-oracle/consumers.ts: the narrative, the openQuestions list without lineText, the new rule, without its key marker, as rules[3] and the ruleKeys entry lineRecorded rules[3]. PR #36 planned to record this answer at the start of the cited-line arc (roadmap place 2): apply it then, or earlier at the owner's word. State no readiness change.",
"text": "[#lineRecorded] The extractor records the citing line's text, trimmed and bounded, on the citation row it already writes, as inferred data that confers nothing; the Studio reads no source to show it.",
"follows": "spec:consumers.spec-studio.cited-line-text#rule.withoutWords",
"reason": "The owner let #lineText's provisional answer stand in PR #36, yet the graph keeps it open and blocking, and the roadmap memo still lists it as waiting on the owner."
},
{
"scope": [
"spec:consumers.spec-studio.cited-line-text",
"spec:consumers.spec-studio.cited-line-text#question.lineBound"
],
"request": "Record the owner's acceptance of the provisional answer to #lineBound, which only PR #36's description records. In specs/consumers/spec-studio.cited-line-text.sdp.md, add a `## Design` section after Behavior holding one entry, `- ` followed by the text below, and remove the open question #lineBound with its decider and provisional lines. Apply it with the #lineText change: once both questions are gone, remove the empty `### Open questions` heading. In the same change, update the pinned entry in test/self-hosting-oracle/consumers.ts: drop the openQuestions list and add a design section holding lineBound with the value after its label. The exact bound stays the builder's choice within the stated range. State no readiness change.",
"text": "lineBound: a recorded line holds at most a few hundred code units; a longer line is cut at a word boundary and marked as cut, and the whole line stays one source link away",
"reason": "The owner let #lineBound's delegated provisional answer stand in PR #36, yet the graph still shows the question open."
}
]
} |
The owner accepted the inventory as the answer to spec:protocol.delivery-record-cleanup#question.durableContent, with row rulings: proposed homes for R1, R5, R7, R9, R11, L8-01 and L8-02; a new TypeScript-authoring carrier Spec for R4; R2 in the cleanup pull request's record, never a Spec; and the live dependencies' dispositions. R6, R8 and the plan-46 prototypes stay open for the cleanup arc. The cleanup arc lands this inventory in its first commit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…hrough against the graph L6-1: AGENTS.md names only honesty/gaps as check:self-hosting's retained warning, tested against the oracle. L6-4: DECISIONS.md names every narrowing decision on the narrowed row (MD-33, MD-25, MD-27, MD-18), tested over refines edges. L2-6: the recipe catalog lists every recipe reporting an absent subject by its answer shape, tested by running each. L6-6: the sdp-agent-surface skill separates the three ruled entry adapters from the reader joins, tested against the rule. L9-F1: the checkout-v1 README shows the build summary its extraction produces, tested. L9-F4: the capture job asks for kind and altitude and accepts a parent relation for intent, matching AC1. L9-F5: the README explains carriers after the quick start and states the Studio's five lenses as the graph does. From the whole-repository review (PR #38). Each finding was verified by a second model family, and this lane's diff was reviewed by the other. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ry review L3-01: one delivery-fact spelling list, outside the public barrel, feeds the authoring-shape check, extraction's reserved keys and the Gherkin tag pattern, so the camelCase hasVerifier is refused everywhere. L1-04: Markdown list text refuses the block shapes the carrier rules list (nested bullets, ordered prefixes, pipes, block quotes, thematic breaks); code-span forms stay accepted. L1-05: readiness-floor evaluation and derived readiness skip a Spec with an unratified altitude instead of reporting floor failures for it. L1-03: not changed; reserving kind in Then slots needs an owner ruling. From the whole-repository review (PR #38). Each finding was verified by a second model family, and this lane's diff was reviewed by the other. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…pecified oracle L1-01: a key shared across phases gets one handler that branches on the occurrence's phase, so the first When invokes the product and a Then compares; StepFn gains an optional third step parameter. L1-02: an unspecified oracle never matches a Then, so completion raises the existing noMatchingThen diagnostic and no observation or assertion runs. From the whole-repository review (PR #38). Each finding was verified by a second model family, and this lane's diff was reviewed by the other. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s verifiers L5-01: test/markdown-reifier.test.ts declares test:protocol.markdown-body-grammar-regressions, verifying spec:carrier.markdown-body-grammar. L5-02: test/structural-anchors.test.ts declares test:protocol.structural-anchor-regressions, verifying spec:model.anchors. The self-hosting oracle pins move by the two new anchors, nodes and binding edges. From the whole-repository review (PR #38). Each finding was verified by a second model family, and this lane's diff was reviewed by the other. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…answers From the whole-repository review: two ready consumer Specs have drifted behind the realized agent surface, and three provisional answers the owner accepted in PR #36 are recorded only in its description. Proposal base: b5e0a8b. P1: wrapIdiom calls the recipe through the `recipes` binding P2: the reader's method inventory names resolveEntryAddress P3: the reader gains the #entryAddressResolution rule; its rule keys shift P4: delivery-record-cleanup gains the #inventoryFirst rule P5: #durableContent keeps blocking with the accepted provisional P6: cited-line-text records #lineText's answer as the #lineRecorded rule P7: cited-line-text records #lineBound's answer as a design entry; readiness stays scoped From the whole-repository review (PR #38). Each finding was verified by a second model family, and this lane's diff was reviewed by the other. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Q1: no symbolicLinks question; the owner ruled it out of the corpus Q2: JS-F1 hands scoped intent to an agent that picks its own budget (recipe 36) Q3: the AI-assisted reading capture keeps the four ruled links, each a reasoned relation Q4: the bound-file freshness trigger is the owner's wording; the owner decides Q5: #perSlotOnly drops its deferral clause; the combination capture carries it Q6: no handOffPreview question; the label and memo preview go to another lane K1: spec:consumers.ai-assisted-reading, an idea capture with a blocking deferral K2: spec:observation.run-evidence.bound-file-freshness takes #freshness off the ready parent K3: spec:consumers.agent-surface.combination-coverage, an idea capture with a blocking deferral From the whole-repository review (PR #38). Each finding was verified by a second model family, and this lane's diff was reviewed by the other. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
L4-01: stage build outputs with exclusive creation after unlinking stale entries, and refuse an unsafe or dangling generated parent before any write or cleanup. L4-04: resolve only the watch root's physical path, so validate, Studio and vault watch run through a linked root while output keeps the named path. L4-02: refuse view, mermaid and gherkin publication when two page paths collide by case, naming both paths and IDs. Q1: discovery never follows a symbolic link below the root, warns once for each link outside an excluded or skipped path, and resolves an explicitly named root first; the excludes Spec and oracle pins follow the owner's ruling. From the whole-repository review (PR #38). Each finding was verified by a second model family, and this lane's diff was reviewed by the other. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
L2-3: sdp q reports an unterminated template at its correct body position. L2-5: studio help states the build-owned-path refusal the CLI enforces. L3-03: Markdown ASCII trimming is linear, so long whitespace runs no longer stall extraction. L4-03: the vitest wrapper forwards option values and listings, keeping the dedicated CLI pass for executing commands. L9-F2: the root export ships CommonJS declarations for require consumers, and check:git-install walks nested conditions. C1: the temporal sweep no longer exempts the decision registry. From the whole-repository review (PR #38). Each finding was verified by a second model family, and this lane's diff was reviewed by the other. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…or anchor Q1n: discovery still never follows a link below the root, but a link now warns only when it targets a directory or its name is a carrier or anchor-candidate name; the CLAUDE.md link no longer warns, and the handbook sentence and test pins for it are removed. Carries out the owner's rulings on the whole-repository review (PR #38); the diff was reviewed by the other model family. Narrows the owner's Q1 ruling to candidate links; awaiting the owner's review. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Q6a: each gathered row reads `<scope> <action label>: <request>`, per #ui.gatheredIntents; the compose dialog and the panel share one label map, and change-pack gets its own label. Q6b: new rule #memoPreview and UI entry memoPreview; the panel shows a closed, read-only `Preview memo` of the memo it copies and saves, before the copy and save actions. Carries out the owner's rulings on the whole-repository review (PR #38); the diff was reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
SP1: the slice page's open question #exportCarriesSlice becomes rule #exportOmitsSlice; the export already behaved this way, and a new test pins it. Carries out the owner's rulings on the whole-repository review (PR #38); the diff was reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The owner ruled on all six of the review's questions (PR #38); this arc carries the rulings out. The README now lists lanes S and L, a results table per lane, and what stays open: L1-03, and R6, R8 and the plan-46 prototypes for the cleanup arc. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- L1-03: a Then slot named `kind` collides with the flat Outcome discriminant. The slot-notation and executable-contracts Specs gain a keyed `#reservedThenSlot` rule; a new error-level conformance check, `conformance/reserved-then-slot`, reports it with a probe pair; contract generation withholds the affected space or step contract with a `contracts/reserved-then-slot` warning that names the reserved word. Given and When slots stay unrestricted and the Outcome stays flat. Carries out the owner's ruling on the whole-repository review (PR #38); the diff was reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- M38-c-6: the evidence/ exemption's test proved only that the root directory is exempt; nothing showed a nested evidence/ (or plans/, reviews/, explorations/, docs/lineage/, .omo/ genre, or a nested package-lock.json) is still swept. A new case writes a banned token at each nested or look-alike path and expects a failure naming every file and line. It fails if isExcluded matches anywhere in the path, if excludedFiles match by suffix, or if a directory loses its trailing slash. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- M38-c-2: the records gave four closure conditions for #durableContent. The inventory, README and not-proposed.md now state one: the cleanup arc closes the question when it lands the inventory in its first commit. R6, R8 and the prototypes' new location do not hold it open; each is settled before the record that holds it goes. proposal.json stays as the owner accepted it; the README says change 5's closing sentence predates the ruling and that its applied provisional must name the acceptance and the closing commit. - M38-c-3: only inventory.md recorded the owner's rulings. README.md gains a rulings table; open-questions.md opens each question with its ruling (Q4's reworded trigger included); not-proposed.md, pr-record.md and the inventory's U1, U2 and L12 rows record the rulings, keeping the verifiers' verdicts and counts as history. - M38-c-8: the deferred spec-ids union in concept 01 becomes row R12 (low, awaiting the owner's keep-or-drop ruling), and concept 01 is classed C + U + drift [R6, R12]. - M38-c-9: the live-dependency list gains the 21 Markdown links into concept documents (17 in jtbd-stories/, one in README.md, three in the worked example's README, measured by path), the two exploration links into plans, and the prose pointers in AGENTS.md and CONTEXT.md. - GAP13-1: the 196-link count is qualified as file (blob and raw) links in inventory.md, pr-record.md and pr-record.json; the 17 tree and commit links (213 in all) were re-measured and all resolve. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- GAP9-1: include the extraction root's builder modules when its package identity names the Protocol, retaining physical-path trust and lookalike refusal. Align the anchors Spec and its oracle with the owner's ruling. - GAP9-2: compare an untouched Protocol corpus with external and local byte-identical engines, and remove the test helper's import rewrite. Lane X8 on r2/X8, based on c7368f4; scope is the anchor trust and extraction determinism Specs in pack:self-hosting-v1. Work stays in this worktree; no push. Both regressions fail with the source fix reverted. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- D-g-2: require own, defined Conditions before invoking the oracle; missing and extra payload diagnostics also distinguish own fields. - GAP7-1: refuse absent or non-callable own handlers and emit __proto__ handlers as computed properties so generated bindings remain callable. - GAP7-2: preserve missing parameter placeholders instead of rendering inherited Object.prototype members. - F-c-1: show unknown action strings and refuse unknown compose controls without resolving inherited labels. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ontext bundle - G-c-2: JS-F1 criterion 7 promised a preview of every hand-off, but the panel previews only the memo; the criterion now reads the owner's ruled sentence, "When the panel offers a memo, it previews the exact memo before it leaves." Criterion 1 already says the agent reads the scope through recipe 36 with its own budget. - G-c-3: JS-E2 criterion 8 called token-budgeted slices, an alias the glossary avoids, a later layer; it now names the shipped context bundle (recipe 36) and its UTF-16 code-unit budget, and leaves only the MCP surface as the later layer. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…definition apart - S-H-1: the glossary defined carrier only as the text format, while the handbook, the skills and ready Specs also use it for a file. Per the owner's ruling the gloss now says "a carrier" or "a carrier file" is also one file written in that format, and to say which level when it matters; no other site is rewritten. - H-c-4: the README's Carriers section defined a carrier as a file. It now defines the carrier as the text format a Spec or Pack is written in and a carrier file as one file written in it. - Proof: "the carrier's two levels" in test/skills.test.ts pins the glossary row and the README definition; it fails against either file's previous text. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- C-c-1: `/[.,;:!?*_~]+$/u` retried every start inside an interior punctuation run, so one
long run made every mention scan quadratic; mentionTokens now trims with a backward scan,
and the mention audit recipe's body does the same.
- C-c-3: the raw-HTML guard's `<\/?[A-Za-z][^>]*>` rescanned the rest of the line from every
unclosed opening; a tag exists exactly when a `>` follows the first opening, so one opening
and one search for `>` decide it, and a reference test pins the same verdicts.
- GAP6-1: the slot number pattern let `\d+` and `\d*` split one digit run at every place; the
fraction digits now follow a mandatory point, accepting the same literals.
- GAP6-4: the Studio search tokenizer's `(\p{Lu}+)(\p{Lu}\p{Ll})` rescanned a capital run from
every start on each keystroke; a one-capital lookahead gives the same tokens, and the entry
search recipe's body does the same.
Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- GAP6-5, GAP6-6: the new cases held raw U+2028 and U+2029 characters inside string literals; they are now written as ` ` and ` `, so the sources show what they test. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… rename - S-J-1: snapshot() listed a folder, then read and stat'd each entry. The vault sync renames `..sdp-vault.json.sdp-tmp` into place, so a listed staging file could vanish before its stat and the watch example failed with ENOENT. The helper now omits an entry that is gone by the time it is read, and the watch example takes its second snapshot only after the cycle's summary line, which follows the cycle's last write. A new test lands the rename between the read and the stat. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… blockquotes
- S-M38-3 (review round 1): the link gate read each line alone, so a destination on the line
after its "](" or "]:" was never checked, and a fence opened inside a blockquote was not
recognized, so its quoted example links failed the gate. The reader now strips blockquote
markers, tracks each fence with its blockquote depth (closing it where that blockquote ends),
opens a fence after list-item markers, refuses a backtick fence whose info string holds a
backtick, masks code spans across the lines of one paragraph, and reads destinations and HTML
attributes that continue on the next line. Over the repository's documents it reads the same
169 targets as before.
Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- S-C-1: remove the duplicate splitter finding and prove narrative, section and Pack tilde refusals independently with exact diagnostics - S-C-1: restore the section parser's backtick-prefix refusal so it agrees with the splitter and reports malformed fences at their opening line - C-c-4, C-g-2: preserve both quoted list-text controls and pin the complete prose-owner findings - C-g-1, S-C-2, S-C-8: add TypeScript/Markdown parity cases and assert reserved-property diagnostics rather than any error Addresses both required changes in the X3 round-1 review of 6140b97. Checks: lint, format:check, build, typecheck; 1023 tests in 34 files; validate has 0 errors and the three pinned honesty/gaps warnings. Regression tests also fail with each corresponding source fix removed. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…stor - B-c-2: when a child watcher found an ancestor directory replaced by a directory link, the watch dropped the subtree and reran but never recorded the link. If the link went before the parent's own event arrived, nothing cleared its warning. One dropDirectory helper now drops the subtree and records a link discovery warns about, on the ancestor path and on the filename-less reconcile path. The ancestor test now removes the link and expects a rerun. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- D-c-2: reuse the graph index for declared parents and skip Specs without Then steps, removing the quadratic reservation scan in validation and generation. - Resolve inherited keys from the first matching parent in code-unit order, matching contract generation. Add edge-read and conflicting-parent regression probes. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- S-N-1: five tests failed on fixed budgets when the whole suite ran on a loaded machine and passed on rerun. The base-worktree procedure moves from 60 s to 300 s, the Design Review two-root render from 20 s to 120 s, both Studio page-set hooks from 30 s to 120 s, and the 40-feature capability fold and the anchor-locality test from Vitest's 5 s default to 60 s. A sixth site of the same class failed this lane's dedicated CLI pass at a load average near 30 and passed on rerun: the CLI default-root view moves from 15 s to 120 s. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- GAP1-1, S-A-5: retain output-boundary checks at every publication call while restoring Windows path-placement checks for absent roots. - A-g-1: assert the guarded-write diagnostic in the registrar parent-swap test, preserving the outside sentinel and temporary-file assertions. Addresses required changes 1 and 2 from the X1 round-1 review. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ensus, vault and aggregates - C-c-5 (XG-T-1): the Design Review readiness line, its index and Pack member table, the census and the vault notes read a floor not evaluated as none, raised a below-idea banner and counted the Spec as not structurally reached. They now render "floor not evaluated (unratified descriptor)", raise no banner, and the census counts such Specs on their own row, present only when one exists, so a well-formed corpus renders unchanged. - C-c-5 (review r1): recipe 52 incremented keys it never created, so a floor not evaluated, or an unratified kind or altitude, counted as NaN, which the Studio rendered as "not evaluated NaN" and JSON as null. Each count now keeps ratified values at zero and gives any other value its own key when counted. Recipe 21 counts a footing target whose floor is not evaluated. - derived-readiness-banner, census-page, obsidian-vault.notes, capability-map and agent-surface.answer-shapes state the reading; oracle pins follow. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… rules - S-M38-3 (round-2 review, change 1): a fence opened in a list item stayed open past the item's end, and any backtick line opened a fence whatever its indentation, so later links went unchecked. The reader now follows cmark-gfm's block structure: blockquotes and list items continue or close line by line, a fence opens and closes only within three columns of its container and ends with it, and indented code, HTML blocks, lazy continuation lines, headings and GFM tables take the lines the forge gives them. - S-M38-3 (round-2 review, change 2): a destination stopped at its first `)`. Inline links and reference definitions are now parsed whole, with balanced parentheses, escapes, angle brackets and titles, and code spans are read within one paragraph, heading or table cell. - Where the reader departs from the forge it reads more, never less. The reader moves to `test/helpers/markdown-links.ts`; on the repository's documents it finds the same 169 links. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- GAP9-1: the authoring skill still said relative builder bindings mint no anchors on the CommonJS package surface. A relative import is now trusted when it resolves to `src/ids.ts`, `src/anchors.ts` or `src/model/code-anchor.ts` in the running engine's package or in an extraction root whose `package.json` names the Protocol package, so the skill says so, as `spec:model.anchors` and the code do. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- claude-side-T-5: state the working-directory boundary for parent creation and scaffold writes, including planted-link refusal and the concurrent-swap limit. Bind the existing escape and swap tests and update the oracle pins. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s, per descriptor - XG-T-1: the regression tests reached the Design Review and the census through their internal modules and checked an unratified kind and an unratified altitude in one graph, so a failure on the first Spec hid the second. They now call renderDesignReview and renderCensus from the package root, and run the Design Review, census and vault assertions once per descriptor; the vault head line also asserts no "nothing blocks". A combined graph still checks the census counts both on one row. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…in one spawn - claude-side-T-3: `pnpm test -- --help` ran the whole suite through the help branch, with no CLI exclusion and no generated/ check. The wrapper now drops one leading `--` (the package manager's) in one place, and that argv feeds routing, the help check (`-h` included) and the preflight. A further `--` is the caller's own Vitest delimiter: the wrapper reads nothing after it, as Vitest does, and every spawn carries that rest last, behind the wrapper's own exclusion. This replaces the earlier E-c-3 change, which dropped every `--`. - claude-side-T-2: bare `bench` became a split run, so the CLI unit suite ran after benchmarks, and it required every contract tree. `bench` is now forwarded once, like `list` and `init`, and requires no contract tree, since the dependency rows list test files only. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- B-c-2: the vault watch's owned-output filter resolves an event path through a link to its target, so creating `specs/shared.ts -> generated/graph.json` scheduled no run while discovery warns about the link; the warning stayed stale until another event. A skipped-link event now skips that filter: it concerns the link itself, which no cycle creates, so admitting it cannot loop. The hook's comment says so, and a vault --watch test creates and removes a carrier-named and an anchor-candidate link into the build's outputs. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e resolves a path - S-M38-3 (round-3 review, named references): the reader decoded five names, so a link to kept(v2).md failed the gate although the forge links it to kept(v2).md. - A new helper carries the HTML standard's static list of names, as cmark-gfm decodes them in a Markdown destination before backslash escapes, and the HTML 4 names the forge's sanitizer decodes in an `href` or `src` value. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e link gate - S-M38-3 (round-3 review, code examples and comments): the reader scanned indented code and HTML comments for links, so an example or a commented-out link failed the gate. It now skips indented code and reads raw HTML as an HTML parser does, for `href` and `src` outside comments. - Same class: Markdown inside an HTML block such as `<pre>` or `<textarea>`, an escaped bracket, and a link inside an image's description render no link and are skipped. Brackets pair as cmark-gfm pairs them, and footnote definitions continue as cmark-gfm continues them, so a footnote's indented paragraph is still read. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…dings - L34-c-1: Part 2 said the human experience was unsettled right under the table of the five projection roots, and Part 3 called the projections replaceable. Part 2 now names the shipped-projections decision (MD-32), which settles Design Review, census, Mermaid and Gherkin, and leaves only the Studio and new readings open; Part 3 says regenerable. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…recorded it - L34-c-3: Part 4 said PR #32 recorded the gpt-6.1-sol re-run (13 of 13, 23 calls against 20, one overflow). PR #31's acceptance records it; PR #32 carried the response, the task-to-recipe sheet in sdp-agent-surface and the impacted Packs in recipe 4's summary. Part 4 now cites each to its own pull request. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… spec - L34-c-4: Part 1 introduced three edges as "two edges can point at the same Spec", but belongsTo runs from a Spec to its Pack (706 Primitive->Pack edges at the pin). The lead-in now says edges that touch the same Spec can carry different claims, and the belongsTo bullet names its direction. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- L34-c-5: Parts 1 and 3 and the playbook gave Vite's and Rolldown's range `^20.19.0 || >=22.12.0` as the test toolchain's requirement, but the pinned Vitest 4.1.10 declares `^20.0.0 || ^22.0.0 || >=24.0.0` and excludes Node 23. All three sites now state the intersection `^20.19.0 || ^22.12.0 || >=24.0.0` and name the three packages. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ception - L34-g-2: the Article 08 outline said an authored Then landing on `unspecified` still fails, as behavior at the pin. The pinned engine passes a bound example whose Then key is itself `unspecified` (PR #38's L1-02). The outline now states the rule as spec:extraction.runnable-modules' rule, names that exception at the source baseline, and asks the writer to re-check at the article's own pin. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…t anchor's - GAP4-1: the annotation context listed `verifies` among anchor bindings as identifying "a test or example". Only a test anchor binds `verifies` (anchored); an example states its own `verifies` in its carrier (declared). The list now names the test anchor, and a separate paragraph says an example's declared relation confers `has-verifier` only when a resolving test anchor binds the example, as an enabled verifier. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ning pr - N-c-7: the root README said the articles "are developed in the open in PR #34", which names a merged pull request as the venue once #34 lands. It now says the series opened in PR #34 and is maintained on main through focused refresh PRs, as the playbook's posture and the PR's publication model state. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Y1 on r2/Y1, based on 2dc6a1a. Keep the article source pinned to b5e0a8b, work only in this lane, prove each fix by regression and reversion checks, and do not push. This lane changes no Pack. - K34-c-1, K34-c-3, S-K34-1: materialize the pin from git, install its locked dependencies and build it; keep supplied checkout outputs intact. - K34-c-2: refuse missing, duplicate, unknown, misplaced, nested and fenced evidence markers across the articles before generating evidence. - GAP12-1, K34-c-5: parse options and forwarded -- strictly, require an explicit source repository and document the disposable worktree writes. - K34-c-4: use one honesty/gaps-only warning policy and test source, dependency, build and output isolation instead of trusting metadata. - K34-c-6: generate both measurement labels inside their evidence blocks. - S-L34-3, L34-c-6: generate both Part 3 carrier excerpts from the pin. - L34-c-7: serialize the full drift recipe answer, including its clause. - L34-c-2: describe build diagnostics separately from validation checks. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- K34-c-1: read raw pinned blobs with replacement objects disabled so sparse checkout and smudge filters cannot alter evidence. - K34-c-4: test the CLI isolation call against a repository without the pin; bypassing materialization now fails the test. - S-L34-3, L34-c-6: test carrier generation with independent fixtures so later carrier edits do not require refreshing pinned articles. - S-K34-1: document temporary worktree registration and keep generated output in the disposable source. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
K34-c-4 (round 3; also K34-c-1 and K34-c-3): exercise the real CLI with a toy pinned build and a different supplied CLI. The sentinel proves generation reads the materialized root; both bypass mutations now fail. Check the owner executable bit so the materialization test also passes under umask 077. Second review pass over PRs #34, #38 and #39; the diff is reviewed by the other model family. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Note 🤖 Claude Opus 5.5 responding on behalf of darko-mijic Closing in favour of #40. That pull request merges this branch unchanged at |
A whole-repository review, and the inventory the cleanup needs
This pull request is a deep review of the whole repository at
mainb5e0a8be(PR #36). It changes no Spec and no engine code. It adds one evidence directory,evidence/pr38/, which is removed before merge, and one guard exemption that lets that directory cite the records it reviews.The review answers four questions:
spec:protocol.delivery-record-cleanup, is held atideaby exactly that blocking question,#durableContent. The owner already accepted how it is answered: a measured inventory, checked by a cross-family review before anything is deleted. This review produces that inventory.Every finding was checked by a verifier from the other model family (GPT checks Claude, Claude checks GPT), which tried to refute it against the tree.
Working record. Branch
review/whole-repository; basemainb5e0a8be. Owner's working rules: review the whole repository as one phase of the next work, doing as much as possible through the relay plugin (GPT and Claude reviewers) while the coordinating session keeps its context for coordination and execution. Commits, push and this draft are authorized; the owner reviews and merges. There is no arc Pack.What it found
Across twelve lanes: 73 items, 55 confirmed (2 high, 26 medium, 27 low), 16 refuted, 2 unsettled. Severities are the verifier's.
sdp validatereports 0 errors, the drift alarm is empty, and the build backlog holds two Specs,spec:consumers.edit-modelandspec:consumers.intent-composition. Yet a TypeScript carrier can author the delivery facthasVerifierwith no honesty error (L3-01), andsdp buildwrites through a planted symbolic link, overwriting a file outside the corpus (L4-01).resolveEntryAddress(L2-1, L6-3). They travel as a change proposal.plans/andreviews/are largely carried by Specs, tests and recipes, or are history git and the descriptions already hold. Thirteen pieces of durable content are not yet carried, and a fourteenth, R12, was found after the owner's rulings. Four live dependencies must move before the folders go, and 23 Markdown links and the prose pointers inAGENTS.mdandCONTEXT.mdmust be repointed or removed before their targets go.2dc6a1a2.No human view shows this review: the evidence is Markdown and JSON. The Studio's pages are unchanged.
Lanes
consumersSpecs against the reader, projections, CLI and recipesplans/anddocs/concept/reviews/GPT reads with
gpt-6-astraat xhigh effort and verifies withgpt-6.1-solat high, through the relay plugin on Codex; Claude runs natively asclaude-opus-5-5at high. L12's two uncertain items are ledger items no verifier ruled on. The dossier gives each lane's relay job, routes and what it did not cover.The most severe confirmed findings
hasVerifierspelling, so a TypeScript carrier can author a delivery fact the Markdown carrier refusessdp build's staging files follow an existing link and overwrite the file it points to, outside the corpusrecipesbinding replacedEvery finding, with its verdict and reproduction:
findings.md(L1–L9),product-lens.md(L10–L11) andpr-record.md(L12). The 16 refutations sit beside them with their reasons.The inventory: the answer to the cleanup's blocking question
inventory.mdclassifies every file inplans/,reviews/anddocs/concept/as carried, history, or holding uncarried durable content. Its answer:spec-idsunion type in concept 01, which a later cross-family review of the inventory added after the owner's rulings. Each row names its proposed home.reviews/assets/, two Specs cite prototypes there, anddocs/concept/DECISIONS.mdis the live registry, not cleanup material. Links and pointers must be repointed or removed before their targets go: 21 Markdown links from kept documents into the concept documents (17 injtbd-stories/, one inREADME.md, three in the worked example's README), two exploration exhibits that link plans, and the prose pointers inAGENTS.mdandCONTEXT.md.#durableContentis answered; the owner has since accepted this inventory as the answer, with row rulings (see Rulings). The inventory lives in removable evidence, so the cleanup arc opens with it, as the owner ruled it, in its first commit, and that commit closes the question. Its cross-family check is done: L7, L8 and L12 were each verified by the other model family. Proposal changes 4 and 5, which PR fix: execute the whole-repository review's findings #39 applies, record the accepted method in the graph, but change 5's provisional predates the acceptance, so an agent reading the graph would still ask the owner to review the inventory; PR review: the whole repository, its fixes, and the durable-content inventory #40 amends the provisional to name the acceptance and the closing commit.Nothing is deleted before the cleanup arc lands the inventory, and no record goes before the durable content it holds has its home.
The change proposal
proposal.jsonis one change proposal on baseb5e0a8be, seven changes, most severe first (memo):spec:consumers.agent-surface.answer-shapes#design.wrapIdiomteachesawait recipes(n, params)instead of inlining a shipped body (L2-2).spec:consumers.readerlistsresolveEntryAddressamong the reader's methods (L2-1, L6-3).spec:consumers.readergains rule#entryAddressResolution, that method's contract (L2-1, L6-3).spec:protocol.delivery-record-cleanupgains rule#inventoryFirst, the method the owner accepted (L12-01).spec:protocol.delivery-record-cleanup#question.durableContentstays blocking; its provisional names the owner's review of the inventory as what settles it (L12-01). That closing sentence predates the owner's acceptance of the inventory: the question closes when the cleanup arc lands the inventory in its first commit.spec:consumers.spec-studio.cited-line-textrecords the accepted#lineTextanswer as rule#lineRecorded, and the question leaves the Spec (L12-01).#lineBoundanswer as Design entrylineBound, and the question leaves the Spec (L12-01).Recipe 38 (
proposal-check.json) against the base graph: no schema problem, no diagnostic, 7 changes, 0 moved, 0 unresolved, no incomparable scope. A trial application of all seven changes to a scratch copy, carriers and oracle pins, keptsdp validateat 0 errors and passed the self-hosting oracle, recipe, roadmap, readiness, census and gate suites (522 tests in 7 files). The trial caught one gap in change 3's request, now fixed: the oracle's rule-key indexes shift with the inserted rule.What the proposal does not carry, and why, is in
not-proposed.md. The three new Specs that L11-01 and L12-02 call for cannot travel in a proposal, whose scopes must resolve at the base; they are capture candidates for an authoring session. Changes 6 and 7 can wait for the start of the cited-line arc, as PR #36 planned.Questions for the owner
open-questions.mdholds six open questions ready to author and two unsettled items. Each question names its carrying Spec, flag, decider, provisional answer and links. The ones that matter most:The owner has ruled on all six questions and on U2 (see Rulings). PR #39 carries out the rulings. Three questions become decisions, not questions: discovery's link policy, the token budget, and the hand-off preview. The other three become
ideacaptures.The unsettled items are settled too: the owner ratified PR #32's delegated rulings as the graph carries them today (U1), and PR #35's refused-list phrase was the wrong wording (U2).
Rulings
The owner's rulings on this review's questions. Each was recommended after re-checking its citations against the tree at
b5e0a8be; the owner took them all as rulings. PR #39 carries them out.#canonicalDiscovery,src/extract/discover.tsjtbd-stories/06-edit-through-the-lens.mdideacapture with four declared relations and a one-line provisional: select existing deterministic readings only; generated text stays outside the Studio and the frozen projections (question 3, L11-01)ideacapture with the owner as decider, its trigger reworded: a reader cannot tell whether a run at another commit still applies (question 4, L12-02)ideacapture as drafted, the owner as decider (question 5, L12-02)#ui.gatheredIntents; a collapsed, read-only memo preview is ruled yes, with a UI entry and a rule (question 6, L10-9)spec:consumers.spec-studiointent panel,src/studio-elements/intent-panel-element.tsspec:consumers.spec-studio#rule.noSecondGraphresolveEntryAddress, 4 to 7 record the answers the owner accepted in PR #36; PR #39 applies themproposal.json2dc6a1a2#durableContentspec:carrier.typescript-authoring; R2 goes to the cleanup PR's record, never a Spec, because a count inside a Spec is refused;DECISIONS.mdstays, the plan-reading gate checks retire with the folders, andmeasure.mjsmoves beside its test. The cleanup arc lands the inventory in its first commit and closes the question thereinventory.md,spec:protocol.delivery-record-cleanup#exportCarriesSlice's provisional answer stands, and the question becomes a rulespec:consumers.spec-studio.slice-pageStill open, on purpose:
docs/concept/06;designColumnsSufficiency, which waits for the first adopter's design passes;spec-idsunion beside R6's deferrals, in the form R6 takes, or drop it.None of these holds
#durableContentopen. R6, R8, R12 and the prototypes' new location are each settled before the record that holds it is removed.The owner's earlier rulings. This PR also carries out two of PR #36's:
plans/andreviews/; this review produces the inventory it needsspec:protocol.delivery-record-cleanup#durableContent(with the first-commit inventory and the cross-family review),#lineTextand#lineBound; proposal changes 4 to 7 record themspec:protocol.delivery-record-cleanup,spec:consumers.spec-studio.cited-line-textThis review's delegated choices, as the owner ruled them:
spec:protocol.delivery-record-cleanupand adds no corpus intent of its ownmain, not PR #34src/) and no Spec, so the engine under review is the same; its articles are read at230b0d28. Its CI job "Check article evidence", itscheck:articlesscript and its latertest/article-evidence.test.tswere outside the reviewb5e0a8be...230b0d28evidence/pr38/evidence/5f528a15addsevidence/beside the existing.omo/evidence/exemption, so an inventory can cite the plan files it classifies; onmainthe directory is empty once each arc removes its evidencecheck-temporal.mjs,test/check-temporal.test.ts2dc6a1a2, not hereproduct-lens.mdpr-record.md#durableContentstays blockingreadyfirstnot-proposed.mdopen-questions.mdThe owner ratified seven of these choices. "Design findings stay open questions" is superseded by the Q1, Q2 and Q6 rulings.
Delegated choices awaiting the owner's review:
Try it
Build the base graph with the base's own CLI, as the dossier shows. A CLI built in another checkout trusts only its own source's builder modules, so it drops 105 of the corpus's anchors with no warning from
sdp build. The first check used such a graph; recipe 38's answer was the same against both.Feedback wanted: the owner has answered the questions this call first asked. The inventory's line between "carried" and "history" stands, with row rulings;
#durableContentstays blocking until the cleanup arc lands the inventory in its first commit; the two deferral captures (L12-02) and the AI-presentation capture (L11-01) are ruled in. Whetherbuildshould warn when it drops relative builder anchors was closed another way: the owner ruled that the extractor trusts the extracted root's own builders when that root is the Protocol package itself, so a CLI built in another checkout keeps this corpus's anchors. PR #40 carries that ruling. Pressure is still wanted on R12, keep or drop, and on the delegated choice above that awaits review.Next
The owner's decisions:
Review the inventory. It answers the cleanup's blocking question; the cleanup arc then opens with it in its first commit.Accepted, with row rulings; see Rulings.Accept or reject the change proposal, change by change. Applying it is an ordinary source edit with its oracle pins, and the applying commit names the proposal's reason and base.Accepted; PR fix: execute the whole-repository review's findings #39 applies it.Answer the six open questions and settle the two unsettled items.Ruled; see Rulings.Review the eight article corrections PR docs(articles): publish the product and projection narrative #34 applies inAccepted.2dc6a1a2: L10-4, L10-5, L10-7, L10-8, L10-11, L11-02, L9-F6 and L9-F7 (product-lens.md).Follow-up fix arcs this review implied. Each is a code arc against settled intent; none joins the roadmap except on the owner's word. PR #39 carries out all four in one pull request; the concept-document drift stays with the cleanup arc.
hasVerifierslips past the honesty check). It also takes L1-01, L1-02, L1-03, L1-04 and L1-05 (contract generation, the test runtime, the Markdown carrier and the readiness floor), and L5-01 and L5-02 (verifier bindings that omit their regression tests).studio --help), L3-03 (a quadratic trim), L4-03 (a test pass that misses option values), L9-F2 (a CommonJSrequireexport with no types) and C1 (the guard's staleDECISIONS.mdexemption).The roadmap. This PR changes no roadmap entry. Recipe 55 over
pack:roadmap, re-run at the head3dedfaa4(the same graph asb5e0a8be), keeps the order PR #36 set:spec:protocol.delivery-record-cleanup#durableContentplans/andreviews/once PR #36's precedent landsspec:consumers.spec-studio.cited-line-text#lineTextspec:consumers.spec-studio.register-input#registerEntryand#inputFormspec:consumers.edit-modelIn the trial application of the proposal, which PR #39 applies, recipe 55 moved place 2 to "to state" and kept place 1 blocked by
#durableContent. The owner has since accepted the inventory; the question closes when the cleanup arc lands it in its first commit, so place 1 stays blocked until then.Re-entry: met. The owner has accepted the inventory, the proposal and the corrections, and has ruled on the questions. Nothing further blocks opening the cleanup arc: it opens with the inventory in its first commit, which closes
#durableContent. R6's re-entry conditions (or dropping R6), R8's home, R12's keep-or-drop ruling and the prototypes' new location are settled within that arc, each before the record that holds it is removed.Refused, durably (unchanged from PR #36): a rung stated by tooling; priority as a date, a schedule, a gate or a new relation; a roadmap that lists every feature; a slice or a capability as a new grouping primitive; an "over-designed" check; a diagram derived from prose; an anchor added for coverage; a tool that edits a carrier itself; a count, date or plan number inside a Spec.
Recipe 55's memo at the head
The next work, from the roadmap
Roadmap: The Protocol's roadmap
pack:roadmapTo state means the floor allows ready and a person still judges the statement. Built means every Spec of the entry's work states ready and has an implementation binding; it reports no passing test and no deployment.
The Protocol's next work, first entry first. The order is a preference: it dates, gates and sequences nothing, and what each entry still needs is read from the graph each time.
First the cleanup that removes the frozen plans, review reports and superseded concept material, as the roadmap and the pull request record make possible. Then the two steps a reader of the Studio's pages could not take, the words of a test line that checks a declaration and an outside register's entries, and then the composed-intent model the build backlog holds. What the first adopter's mass update asks for joins when the owner selects it; a capture landing adds nothing here. An entry leaves by an edit to this manifest once its selected work is complete or no longer belongs among the next work.
To design
spec:protocol.delivery-record-cleanupidea→scoped, held by kind-evidence-present; blocked byspec:protocol.delivery-record-cleanup#question.durableContentplans/,reviews/and the superseded concept material from the tree, after moving into the graph the durable content they still hold, so the repository keeps one delivery record: the graph, git and the pull requests.spec:consumers.spec-studio.cited-line-textscoped→defined, held by no-blocking-open-questions; blocked byspec:consumers.spec-studio.cited-line-text#question.lineTextspec:consumers.spec-studio.register-inputscoped→defined, held by no-blocking-open-questions; blocked byspec:consumers.spec-studio.register-input#question.registerEntry,spec:consumers.spec-studio.register-input#question.inputFormTo build
spec:consumers.edit-modelWaiting on the owner
spec:protocol.delivery-record-cleanup#question.durableContent(blocking), place 1: Which content inplans/,reviews/and the concept documents does no Spec, test, decision or recipe carry yet, and where does each piece belong?spec:consumers.spec-studio.cited-line-text#question.lineText(blocking), place 2: May the Studio show source text the graph does not hold, and if so is it recorded in the graph beside the citation or read as a named input?Deferred, with their triggers
spec:carrier.sdp-import.feature-adapter#question.featureAdapter: Which bare .feature constructs can an import adapter preserve honestly? Trigger: an adopter migrates a gen-1.featurecorpus into the Protocolspec:consumers.impact-graph.symbol-reach#question.symbolIdentity: Which language-neutral identity and extraction boundary can support exhaustive symbol reach without freezing a single compiler's representation into the Protocol? Trigger: a reader needs symbol-level reach that file-level imports and curated anchors cannot givespec:consumers.projections-model.roadmap-views#question.releaseReader: Does a reader need release or baseline views that the roadmap, the recipes and git tags do not serve? Trigger: the first published releasespec:consumers.reference-projection#question.namedOutsideReader: Does a human reader outside the repository need a reference projection the four shipped roots do not serve? The taxonomy row is not that reader. Trigger: a named consumer outside the repository, with a way to measure that demand inside the arc that builds the projectionspec:consumers.structural-mermaid#question.namedStructuralReader: Does a reader need diagrams rooted at code units, which census tables and Spec-rooted one-hop Mermaid do not serve? Trigger: a named reader with that need, plus a decision that refinesspec:decisions.shipped-projections-frozenfor the affected Mermaid rendering or supersedes that ruling wholespec:observation.runtime-overlay#question.observationIdentity: Which external observation identity and freshness boundary is small enough for the graph while still supporting an honestobserveddelivery fact? Trigger: An adopter needs runtime measurements linked to measurable Spec targets and can supply an observation identity and freshness policy for review.Numbers were measured at
b5e0a8be, which the review tree matches outsideevidence/and the guard exemption: 456 Specs (447 statedready), 9 Packs, a base graph of 1072 nodes and 2978 edges, 0 validation errors and 3 warnings, 0 drift alarms, 2 build-backlog entries, and 16 open questions (10 blocking, 6 deferrals). Re-run the recipes rather than inheriting these.Second review pass
After the owner's rulings, a second cross-family review read this pull request again, with PRs #34 and #39. On this branch it changed the evidence and one test (
684844eb...3dedfaa4):#durableContentwhen it lands the inventory in its first commit; R6, R8, R12 and the prototypes' new location do not hold it open.test/check-temporal.test.tswrites a banned token at a nested or look-alike path for each exemption (evidence/,plans/,reviews/,explorations/,docs/lineage/,.omo/andpackage-lock.json) and expects the guard to report every one.This description now follows those files, and its evidence links are pinned to
3dedfaa4. The pass's engine and corpus fixes are in PR #40, one new draft pull request on top of PR #39's branch. Among them, the cleanup question's provisional records the owner's acceptance and the closing commit, and the extractor trusts the Protocol package's own builders when it extracts that package.🤖 Generated with Claude Code