Repository navigation
Plan 45: design at the adopter's scale: install from a commit, a bundle that fits, corpus rules, and the Spec Studio's phase 0 - #33
Conversation
The next chunk unlocks the Protocol for the first adopter's design work: installing from a commit, a design-pass loop that fits a large corpus, corpus checks and planned architecture, and the Spec Studio's phase 0, with plan 42 as that lane's brief. The plan records the rulings made at its start on the owner's delegation. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Folds the ruled answers on corpus rules, architecture constraints and planned architecture into rules and keyed Design entries: the rules file and its answer, sdp validate --rules and --params, the corpus section and summary line, exit codes, recipe 42 (the architecture walk) and recipe 43 (planned against realized components). Adds unbound example Specs for each, groups the three Specs and their examples in pack:corpus-checks-v1, and deletes the answered nextPacks question. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Lane L's design pass for plan 45, Specs only.
- spec:consumers.context-bundle: a compact bundle. Each member and example
row names its file once, a cut entry keeps only its line, each entry sits
in one place, footing cuts to ids, and declarations: "addresses" opts in
to a last cut of pinned declarations to their entry addresses. The
declarationCut question is answered and deleted.
- spec:consumers.agent-surface.register-recipes: recipe 41, the key-family
register, over Design and UI keys only.
- spec:consumers.agent-surface.recipe-parameters: a name a recipe does not
take is answered as { unknownParams, accepts }, from a declared list each
body opens with.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Studio's design pass. Six child Specs carry the static page set so its code can satisfy whole Specs: the publisher, search, the index, the Pack page, the Spec page's core and the page elements. The shell and the data Spec now describe only what that page set builds. Every provisional answer on the Studio's Specs becomes a rule or a keyed entry and its question is deleted, as plan 45's rulings delegate; the questions without one that the page set needs (header fields, rung colors, schema bindings, UI stories) are answered the same way. Phase 0 holds no AI slice. The vault is a projection of its own and waits for a reader. The data, element, verb and stamp contracts are keyed Design entries, pinned where two lanes must agree on a shape. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
One hand-written page, opened from file:// with no request and no build step, rendered from recipe 29's answer and the Pack context for pack:design-management-v1 here and for the first adopter's pack:history-view. Custom elements without a framework open cards and copy locations. The README names the commands that regenerate the inputs, what the design pass took from the page, and the two associations the adopter's re-pin applies for the five reader tasks. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…h holds it At the adopter's commit the paused-rebuild examples have no bound verifier, so the fifth reader task asks the reader to read the binding rather than assert one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each --params now belongs to the --rules before it, so the architecture walk never receives the names another rules file reads and answers them as unknown. The validate report carries corpusFindings and corpusFailures; the corpus line stands alone when the graph does not derive; recipes 42 and 43 answer an unknown name as every catalog recipe does; matching excludes unreadable designs; uses states none for an empty list. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The data Spec escapes every `<` in embedded JSON as `<` (it read as a tautology), and the search index's entries are defined without a term, matching as recipe 23 matches. A finding whose subject has no page shows on the index only; the search page's `#q=` fragment is exempt from the element-id check; the Spec page's narrative and sections carry ids that entry hits link to; and the search page is the one page that needs its script. The Pack page leads with its summary, each sentence opening with its count, folds the holds section into the summary, colors only the rung on a card's line, links a question by its key, splits the card body into citable rules, and says once that the graph records no run. The prototype follows. Questions left open gain a decider and a provisional reading, and two deleted questions' reasons are restored. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… rulings Corpus rules, architecture constraints, planned architecture and eight of the Studio's Specs state ready; four Studio parents state defined. Plan 45 records the delegated rulings and wave 2's shape. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…unts, PR 33's screenshots Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Important Review skippedToo many files! This PR contains 115 files, which is 15 over the limit of 100. To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch. Upgrade to a paid plan to raise the limit. This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry. ⚙️ Run configuration
⛔ Files ignored due to path filters (29)
📒 Files selected for processing (115)
You can disable this status message by setting the
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. Comment |
| const outcome = | ||
| parsed.rules === undefined | ||
| ? runValidate(parsed, output, "validate", hooks) | ||
| : await runValidateRules(parsed, output, hooks); |
There was a problem hiding this comment.
validate --watch --rules waits for the active rules body even after Ctrl+C. The stop handler closes the watcher and wakes its idle wait, but does not end await runValidateRules(...). If a body hangs on an async operation that keeps Node alive, the command stays running instead of exiting 0. When that operation eventually completes, the next rules file can still execute after the stop.
Fix this before merging: stopping must terminate active rule execution and its live handles, and prevent further rules or output after the stop.
Artifacts
CLI stop capture without the changed watch dispatch
- Ran an isolated bundle copy with the pre-change watch dispatch and sent SIGINT, showing exit 0 within about 10 ms.
CLI stop capture with an active hanging rule on prepared head
- Sent SIGINT during the actual prepared CLI's rule await and later released the operation, showing five seconds without exit and continued rule execution after stop.
CLI stop capture after rules completed on prepared head
- Ran the prepared CLI with the same rules configured to complete and sent SIGINT, showing prompt exit 0 when no rule await was active.
Focused CLI verification execution record
- Captured the executed harness command, runtime, commit, bundle hashes, and subprocess results, showing all focused assertions passed.
Source ranges and watch-dispatch diff used for verification
- Captured setup instructions, numbered source ranges, the prepared bundle path, and the candidate diff, showing the exact implementation inspected.
Production integrity check after CLI verification
- Checked production diffs and the prepared CLI hash after execution, showing production files and the prepared bundle remained unchanged.
Executed command-capture script
- Executed this shell script to capture source inspection, run the focused harness, and check integrity, providing the reproducible verification commands.
Executed subprocess verification harness
- Executed this harness to launch three CLI flows, send signals, measure exits, and assert post-stop behavior, providing the actual test logic.
Executed rule with a referenced handle and externally released await
- The CLI executed this rule body with a live interval and unresolved Promise, reproducing an active asynchronous operation that survives SIGINT.
Executed follow-up rule used to detect work after stop
- The CLI executed this second rule after external release of the stopped cycle, demonstrating that subsequent rule execution was not cancelled.
Isolated corpus fixture used by the CLI flows
- Copied this carrier into the isolated corpus for each execution, allowing real CLI extraction and validation without regenerating root outputs.
Executed isolated CLI bundle with pre-change watch dispatch
- Executed this generated copy of the prepared bundle with only the candidate dispatch reversed, providing a same-command comparison without modifying production.
There was a problem hiding this comment.
Fixed in abf532d: spec:consumers.validate-watch#rule.operatorStop now says an operator stop during a rules run ends the process with exit 0, and the watcher does so. No further rules file runs and nothing more is written. A process test with a live interval and a never-settling promise, plus a second rules file that would print, failed first (exit bound exceeded, second file ran) and now passes.
| if (record.entries.some((entry) => entry.key?.toLowerCase().includes(needle))) | ||
| matchedIn.push("key"); |
There was a problem hiding this comment.
searchRecords drops matches that entryMatches accepts. A Spec with design: { verifyPass: 42 } matches the entry search for verify pass, but this check tests whether verifypass contains verify pass. If no other field contains the phrase, the page says no node matches.
This is a non-blocking search gap: readers must know the exact joined key to find that Spec. Keep nodes with matching coined-key entries and add a test through searchRecords, not only entryMatches.
Artifacts
▶ Base revision without Studio search
- Entered the same query in the isolated fixture without a Studio bundle, matching the base revision’s lack of this feature; no search custom element is registered.
Base fixture with the spaced key query
- Captured the base-scope fixture with `verify pass` entered and no registered search-results element; this establishes feature absence rather than prior working search.
▶ Shipped search finds the literal key but drops its spaced query
- Ran the shipped elements with `verifyPass`, then held the `verify pass` failure and runtime diagnostics on screen; the token-matching entry is omitted from results.
Shipped search reports no hits for verify pass
- Captured the failing query alongside the fixture and observed matcher results; entryMatches is true while searchRecords and rendered result cards are empty.
Chromium and matcher assertion output
- Recorded the executed validation command, working directory, exit code, control result, and failing-query observations; all reproduction assertions passed.
Source ranges and unchanged production check
- Executed the source inspection script and captured numbered source, absent base Studio paths, and an empty tracked diff; the failure is localized without production edits.
Full Chromium validation source
- Executed this complete harness to serve isolated fixtures, load shipped elements, assert matcher behavior, and record both revisions’ scope; the reproduction is repeatable.
Validation command and output capture script
- Executed this shell wrapper to run the browser harness with a timeout and capture its actual exit code and output; the validation completed successfully.
Source inspection command script
- Executed this script to print relevant numbered source and check base paths and tracked changes; the recorded source supports the identified admission mismatch.
Isolated base-scope browser fixture
- Loaded this one-record page without a Studio bundle to reflect the base revision; it provides the same fixture and query scope for comparison.
Isolated shipped-search browser fixture
- Loaded this one-record page with the shipped custom elements and matcher diagnostics; the numeric camelCase design key reproduces F2.
Executed source matcher bundle
- Bundled the unchanged source matcher exports and invoked them inside Chromium on the fixture; direct results expose the entry-to-record inconsistency.
Shipped Studio JavaScript used in Chromium
- Copied the existing shipped browser bundle into the isolated artifact scope and loaded it unchanged; the actual custom element reproduces the missing result.
Shipped Studio styling used by the fixture
- Copied and loaded the existing shipped stylesheet for both browser fixtures; captures retain Studio styling without rebuilding shared outputs.
There was a problem hiding this comment.
Fixed in abf532d: a Spec whose only match is a coined-key entry is kept (#rule.entryHits now says so), and each record's authored-text lookup is built once per search instead of per entry. Tests through searchRecords and a property-read count (16,512 reads for 128 entries before, under 256 after) failed first.
| function isStringEntry(record: SearchRecord, entry: SearchEntry): boolean { | ||
| if (entry.section === "narrative") return true; | ||
| const walk = (value: unknown, path: string | null): boolean => { | ||
| if (typeof value === "string") return path === entry.entry && value === entry.text; | ||
| if (Array.isArray(value)) | ||
| return value.some((item: unknown, i) => walk(item, `${path ?? ""}[${String(i)}]`)); | ||
| if (typeof value === "object" && value !== null) { | ||
| return Object.entries(value).some(([key, item]: [string, unknown]) => | ||
| walk(item, path === null ? key : `${path}.${key}`), | ||
| ); | ||
| } | ||
| return false; | ||
| }; | ||
| return walk((record.sections as Record<string, unknown> | undefined)?.[entry.section], null); |
There was a problem hiding this comment.
isStringEntry walks the section again for every entry being searched, making search work grow roughly quadratically on every keystroke. The shipped search element took about 2.2 seconds per input event with a test section containing 4,000 string entries; search completed, but typing was delayed.
This is a non-blocking performance concern for large design sections. Record whether an entry holds authored text when building the index, or build a path lookup once, rather than rediscovering its type for every search.
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
There was a problem hiding this comment.
Fixed in abf532d: a Spec whose only match is a coined-key entry is kept (#rule.entryHits now says so), and each record's authored-text lookup is built once per search instead of per entry. Tests through searchRecords and a property-read count (16,512 reads for 128 entries before, under 256 after) failed first.
This PR carries plan 45: design at the adopter's scale. The first adopter, libar-platform, designs a Convex transactional domain platform as about 240 Specs in six Packs, most of it design that will stay ahead of its code for months. This chunk unlocks the Protocol for that work. An adopter installs from a commit. A design pass fits a large Pack into a model's budget. A corpus runs its own policy inside
sdp validate. And a person reads a Pack's design on a static page: the Spec Studio's phase 0 (plan 42 was its brief). The platform moved onto this branch in its own pull request, libar-platform#13, which pins this head.Read this first. The owner asked for as much of the platform's design work as possible to be unlocked, and delegated the rulings while away. Every ruling is in the second table under Decisions and rulings, and each is a candidate to overturn before merge. One question is the owner's alone and blocks nothing here: whether the Studio replaces the platform's committed Pack page (its decision 58), and how a reviewer holding only a link reaches the Studio's pages.
Why
A read of the platform, its feedback and this repository's backlog found four needs, in order:
maincheaply. The platform pinned822aea4through a vendored tarball, so about fifteen of its asks, delivered here since, were out of reach.pack:history-viewneeded at least 299,106 UTF-16 units against a default budget of 100,000, most of it repeated locations and declarations carried twice.sdp validate. The platform's gate,design/tools/check.py, parsed carriers to check citation edges, isolation between contexts and its readiness policy, outside the one graph.What it introduces
Install from a commit. The package builds itself through
prepare, so an adopter pinsgithub:libar-dev/software-delivery-protocol#<sha>and re-pins with one edit. The README teaches the approvals npm and pnpm need, by git source and never by name alone.npm run check:git-installinstalls a committed revision with npm and pnpm, from a clone and from a git archive, and requiressdp --versionto name the exact commit. A GitHub install builds from an archive with no.git, so the commit now travels throughexport-subst. →spec:consumers.adopter-on-ramp,spec:consumers.engine-provenanceThe design loop at the adopter's scale.
questions, a pinned value only in its Design section, and a cut entry as its address or{ line }. A new footing cut comes second, anddeclarations: "addresses"opts into a last cut that keeps pinned declarations as their entry addresses.pack:history-viewnow fits in 93,806 units. →spec:consumers.context-bundlelimit*, 27error*and 80table*/index*entries into registers. →spec:consumers.agent-surface.register-recipes{ unknownParams, accepts }, so recipe 30 givenspecno longer answers for its built-in sample. →spec:consumers.agent-surface.recipe-parametersCorpus checks. Three Specs designed, built and grouped in
pack:corpus-checks-v1, each with examples that execute.sdp validate --rules PATH [--params FORM]...runs a corpus's own policy: onesdp qbody per file, over its own copy of the graph and report, returning{ findings }. Each--paramsbelongs to the--rulesbefore it. Corpus findings print in their own section, name their rule and rules file, never move a readiness floor, and fail the run like a Protocol error.--watchreads the rules again each cycle. →spec:validation.corpus-rulesusesedges. A recipe that returns findings is a rules file as shipped, so--rules dist/recipes/42-the-architecture-walk.jsruns it undervalidate. →spec:validation.architecture-constraintsspec:model.planned-architectureThe Spec Studio, phase 0.
sdp studiopublishes a static page set undergenerated/spec-studio/: an index with task routes, one page per Pack and per Spec, and a search page. The pages open fromfile://with no network and read in full without script, except search. Every link resolves inside the page set, two runs give the same bytes, and the repository's projection suite certifies it as a fifth root. A Pack page leads with a summary the graph computes, then the framing and one closed card per member, each with its rung, floor, questions and bindings in words. Six custom elements enhance the pages, with no framework and no build step on the adopter's side. Search shares one matcher withg.findByConcept, shipped for browsers as the./concept-matchsubpath. The design pass split the Studio into child Specs so the code satisfies whole Specs; a hand-built prototype on real data was reviewed and then deleted once the real pages replaced it. →pack:spec-studio-v1, withpublisher,pack-page,searchandpage-elementsSmaller things.
spec:validation.prose-mentionsafterhook whether its steps pass or fail. →spec:extraction.example-runner#rule.worldCleanupcheck-carrier-rule.mjsis deleted: it still demanded a sentence the Pack syntax ruling retired.pack:self-hosting-v1again holds every self-hosted Spec, as its framing says.spec:consumers.obsidian-vault) is ruled its own projection, not the Studio's local half, and waits for a reader.AGENTS.md, the README and the recipe catalog teach all of the above.See it
The Studio is new, so there is no base view; the four frozen projections did not change. These are the pages at the head, from
file://. How these were made.The platform's history-view Pack. The summary first, then the framing and the member cards:
A question with its fields, and search finding OD-157, a decision register id the platform wrote into that question:
This repository's own
pack:corpus-checks-v1, every member stated and derivedready:The same Pack page at 390 pixels, an example page and the index are in the assets folder. No human view yet shows a declaration beside the assertion that checks it, run results, or the vault.
The first adopter on this branch
libar-platform#13 pins this head and passes its whole CI checks job on it:
package.jsonpinsgithub:libar-dev/software-delivery-protocol#abf532d…, this branch's head, with the approvals the README teaches;sdp --versionnames that commit, and the vendored tarball is gone. The platform's CI (checksandnative) passes on it.decisions.pyand the page scripts run the shippeddist/recipes/files with--paramsinstead of cutting bodies out of the catalog.check.py(readiness policy, mentions, address resolution, cycles, citation edges, question sources, isolation) now runs asdesign/rules/policy.jsand recipe 42 undersdp validate --rules. Every planted mistake its tests carry still fails the gate.npm run studiopublishes the platform's 251 pages, and the gate checks they build deterministically. The committed Pack page stays: see Feedback wanted.The reader-task acceptance. A gpt-6-astra job given only the platform's page set, with no repository and no CLI, worked plan 42's five tasks:
history-projection's Contract and Design sections,#design.typeHistoryProjectionhistory-rebuild#question.verifyPassUnderPauseaggregate-projection's relations and its blocking questionSelf-hosted and graph-measured
The design diff (recipe 35) from
7eef29b, the arc's base: 16 Specs added, 24 changed, none removed; 3 Packs changed (one added); 28 Specs whose bindings changed. Pack design (recipe 29) at the head:pack:corpus-checks-v1pack:spec-studio-v1The Studio Pack's seven waiting members are the Studio's parent and the Specs that carry its deferred panels, which stay below
readyuntil a reader needs them. The held one, the lenses, waits on the verification panels and the runtime overlay. Re-run the recipes rather than inheriting these numbers.Decisions and rulings
The owner's direction for this chunk, on 2026-10-13:
Delegated to the main thread, with cross-family reviews as advisers (gpt-6-sol, Opus 5.5, Fable 5.1); each awaits the owner's review:
prepare; no npm prerelease while the version is0.0.0adopter-on-rampexport-substengine-provenance{ line }context-bundleregister-recipes{ unknownParams, accepts }recipe-parameterssdp qbody returning{ findings }; a rule id is one kebab token; a finding'sfileis a root-relative POSIX pathcorpus-rules--paramsbelongs to the--rulesbefore it; each file gets its own copy of the graph; one file named twice is refused, through a symlink toocorpus-rulesvalidateexits 1 on any Protocol error, corpus error or failed rules file; under--watcha rules file is reread each cycle, and editing one starts no cyclecorpus-rulescorpus-rulesarchitecture-constraintsusesis statednone; an absent anchor isrealizedLayer: "absent"planned-architecturepack:corpus-checks-v1spec-studiofindByConcept's matcher, shipped as./concept-matchsearchpack-pagespec-page.core,shellspec-studiopublisherobsidian-vaultreadystated for corpus rules, architecture constraints, planned architecture, their ten examples, and the Studio's data, shell, search, publisher, index, Pack page, Spec page core and page elements;definedfor the Studio's lenses, Spec page, components and responsive layoutNo row is added to the decision registry: none of these passes the three-part test on its own, and each lives in its carrying Spec.
How it ran
Three waves, each lane in its own worktree, each reviewed by a model of another family and fixed before the main thread merged it. gpt-6.1-sol built; Opus 5.5 designed and reviewed; gpt-6-sol and Fable 5.1 reviewed. Wave 1 built the install path and the loop at scale and designed corpus checks and the Studio, with a prototype Pack page. Wave 2 built corpus checks and the Studio, moved the platform onto the engine, and brought the self-hosting oracle to green. Wave 3 pinned the platform to the published branch, retired its graph-side checks into rules files, and ran two adversarial reviews and Astra's acceptance. The reviews' findings that held were fixed with tests that failed first: recipe 43 missing a design id in a double-backtick span, a rules file run twice through a symlink, an absolute finding path, recipe 41 throwing on an unresolved Pack member, a bundle cut dropping an address before a full stop, docs naming four projection roots, and the GitHub install's unknown commit.
Review on the PR
Greptile ran the code and found three defects, each fixed in
abf532dwith a test that failed first:validate --watch --rulesrunning, and the next rules file could still run. An operator stop during a rules run now ends the process with exit 0 and no further output →spec:consumers.validate-watch#rule.operatorStop.verify passagainstverifyPass) was dropped; it is now a result.CodeRabbit skipped this PR: it changes more files than its limit.
Try it
In an adopter: pin
github:libar-dev/software-delivery-protocol#abf532d9a2a5da536d9235215f108d6aaa723ca2with the README's approvals, thennpx sdp --version.Measured at close
At
abf532d, re-measured at close; re-run the recipes rather than inheriting these. The links and screenshots above are pinned toe1d941d, the head before Greptile's review.npm run checkpasses: 2,199 pooled tests and 100 CLI tests.validate: 276 Specs · 6 Packs · 339 anchors → 621 nodes · 1,624 edges; 0 errors, 6 warnings (five intended prose mentions and one pending verifier gap, both pinned by the oracle).ready, 17defined, 3scoped, 11idea. The drift alarm (recipe 2) is empty.pack:history-viewwithdeclarations: "addresses"fits in 93,806 of 100,000 units.Feedback wanted
spec:consumers.spec-studio.pack-page#question.summaryFormat.findingsanswers from recipes 25 and 26?Upcoming
1. Merge, with libar-platform#13, once the owner has read the delegated rulings. The platform re-pins to the merge commit or keeps this head, which stays reachable.
2. Next PR: the platform designs ahead of its code, and the Studio follows the reader. A proposal.
findingsanswers from recipes 25 and 26, ruled in a short design passapplicationandfoundationstill exceed the bundle's budget after every cut; read them through perspectives (recipe 37), or cut the verifier rows example members repeatRe-entry: both PRs merged, and the owner's review of the delegated rulings.
3. Statements waiting for the owner, no code needed. Their floor already allows a higher rung:
spec:consumers.graph-first-planning(statedscoped, floorready);spec:consumers.impact-graph,spec:consumers.intent-compositionandspec:consumers.edit-model(stateddefined, floorready); and the Studio parents that staydefineduntil their deferred panels have a reader.Still deferred, with triggers (recipe 20): the gen-1
.featureimport adapter, exhaustive symbol reach, the vault, roadmap views, the reference projection, structural Mermaid, the runtime overlay, and the superseded-decision signal; plan 45 adds watching rules files, exportingsdp q's evaluator, and run evidence for the Studio's verification panels.Refused, and staying refused:
satisfiesthat moves built work into the build backlog; a partial-realization delivery fact.readyrule..omo/.🤖 Generated with Claude Code
Do not merge until the watch-stop defect is fixed. The two search concerns are non-blocking.
Findings
T-Rex evidence
CLI stop capture without the changed watch dispatch
CLI stop capture with an active hanging rule on prepared head
CLI stop capture after rules completed on prepared head
Focused CLI verification execution record
Source ranges and watch-dispatch diff used for verification
Production integrity check after CLI verification
Executed command-capture script
Executed subprocess verification harness
Executed rule with a referenced handle and externally released await
Executed follow-up rule used to detect work after stop
Isolated corpus fixture used by the CLI flows
Executed isolated CLI bundle with pre-change watch dispatch
▶ Base revision without Studio search
Base fixture with the spaced key query
▶ Shipped search finds the literal key but drops its spaced query
Shipped search reports no hits for verify pass
Chromium and matcher assertion output
Source ranges and unchanged production check
Full Chromium validation source
Validation command and output capture script
Source inspection command script
Isolated base-scope browser fixture
Isolated shipped-search browser fixture
Executed source matcher bundle
Shipped Studio JavaScript used in Chromium
Shipped Studio styling used by the fixture
Command output from the check
Command output from the check
Command output from the check
Command output from the check
Command output from the check
Command output from the check
Evidence from the check
Evidence from the check
Evidence from the check
Evidence from the check
Evidence from the check
Evidence from the check
Before: F2 01
▶ f2-01-before.webm
After: F2 02
▶ f2-02-after.webm
Before: F3 Search Cost 01
▶ f3-search-cost-01-before.webm
After: F3 Search Cost 02
▶ f3-search-cost-02-after.webm
▶ Recording of the check
Base fixture with the spaced key query
▶ Recording of the check
Shipped search reports no hits for verify pass
Command output from the check
Command output from the check
Evidence from the check
Evidence from the check
Evidence from the check
Evidence from the check
Evidence from the check
Evidence from the check
Evidence from the check
Evidence from the check
Summary
Adds commit-based installation, smaller context bundles, corpus rules under
sdp validate, and the first static Spec Studio pages.sdp validateand report their own findings.Acknowledgments from
darko-mijic: pnpm installation checks run only when pnpm is present; git takes precedence over archive metadata; rules-file edits do not start watch cycles; run evidence, declaration-to-assertion links, hosted previews, and whole bundles for the largest Packs are deferred.Reviews (1) · Last reviewed commit: "close: plan 45 executed, the Pack summar..." · Reviewed by Greptile