Spec Studio

Recipes take parameters as data and ship as runnable files

spec:consumers.agent-surface.recipe-parametersUse Case / Behavior · storyready floor ready

Packs: pack:design-management-v1, pack:self-hosting-v1

Design: 2 design entries · 2 pinned declarations · 1 decision

Findings: no errors, no warnings

specs/consumers/agent-surface.recipe-parameters.sdp.md

No open questions and no blocking questions; implementation binding present, verifier binding present, and expected-outcome oracle none.

A body reads its parameters by name, so a name it does not read would be dropped without a word, and a recipe with a sample would answer for the sample: a misspelled name would look like a successful call. A recipe therefore answers a name it does not take with that name and the names it does take, and nothing else. A body cannot import and the reader holds no recipe metadata, so each body declares its own names in its first statement, and the recipe check holds that declaration to the catalog.

Intent
problem
A recipe that takes its input in its own source makes a caller rewrite the body for each input, a long list included, and a script that runs a recipe must first cut its body out of the Markdown catalog.
outcome
Pass a recipe's parameter as data through the one evaluation sink, and ship every catalog body as a file a caller runs as written.
Behavior
rule line 19 · specs/consumers/agent-surface.recipe-parameters.sdp.md:19
sdp q takes --params with a JSON object, or --params @PATH with a file holding one, the path resolved from the working directory, and injects it as a fourth binding, params, beside g, graph and report. Without the flag params is an empty object. In these two forms, a value that is not valid JSON, JSON that is not an object (null, an array, a string, a number or a boolean), or a file that cannot be read is refused before the body runs, with exit 1, one line on stderr and no output on stdout.
rule line 20 · specs/consumers/agent-surface.recipe-parameters.sdp.md:20
--params is repeatable in three forms: a JSON object, @PATH naming a file that holds one, and KEY=@PATH binding the JSON value in the file, of any type, to params.KEY, with KEY on the lower-camel grammar. Objects merge at the top level from left to right, and a key given twice by any form is refused before the body runs, with exit 1, one line on stderr and no output on stdout, so a recipe takes a large file such as a base graph beside its other parameters.
rule line 21 · specs/consumers/agent-surface.recipe-parameters.sdp.md:21
The bindings g, graph and report keep their names and meaning beside params. The sink evaluates one operator-supplied body and adds no query vocabulary: a parameter is input to a body, never a verb.
rule line 22 · specs/consumers/agent-surface.recipe-parameters.sdp.md:22
Every recipe reads its parameters under the names the catalog states. A parameter with a documented sample falls back to it when absent, so each body runs as written; a required input with no sample, such as a base graph, a proposal or an imports file, returns diagnostics when absent. Recipe 4 reads its changed files from params.files.
rule.declaredNames line 23 · specs/consumers/agent-surface.recipe-parameters.sdp.md:23
Each catalog body opens by declaring the parameter names it takes, in the order the catalog's index lists them, and checks params against that list before it reads anything else; a recipe that takes no parameter declares an empty list.

no example exercises it

rule.unknownNames line 24 · specs/consumers/agent-surface.recipe-parameters.sdp.md:24
A recipe given a parameter name it does not take returns { unknownParams, accepts } as its whole answer, and sdp q exits 0; it never answers for its sample, for an empty input or for the names it does take in that case.

no example exercises it

rule.namesChecked line 25 · specs/consumers/agent-surface.recipe-parameters.sdp.md:25
The recipe check holds each body's declared names to the catalog's index and to the params names the body reads, and runs each body with a name it does not take.

no example exercises it

rule line 26 · specs/consumers/agent-surface.recipe-parameters.sdp.md:26
The package build writes each catalog body to dist/recipes/<NN>-<slug>.js, where NN is the two-digit recipe number and the slug is the recipe's heading in lower kebab case, and the package ships that directory. The catalog stays the one owner of the bodies; the files are derived, and the recipe test checks that each file equals its catalog body byte for byte.

5 unkeyed rules.

Design
acceptsPreamble line 30 · specs/consumers/agent-surface.recipe-parameters.sdp.md:30
const accepts = [...]; const unknownParams = Object.keys(params).filter((name) => !accepts.includes(name)); if (unknownParams.length > 0) return { unknownParams, accepts }; opens every catalog body as three statements on three lines, with the recipe's names in the brackets as double-quoted strings.

no citation recorded

unknownAnswer line 31 · specs/consumers/agent-surface.recipe-parameters.sdp.md:31
{ unknownParams, accepts } is the whole answer for a name a recipe does not take, where unknownParams lists every such name in the order params holds them, and accepts repeats the recipe's declared names.

no citation recorded

Verification

Verifier bindings

  • test:protocol.query-answer-shapes · anchored · test anchor binding present · test/cli-q.test.ts:730

    External run evidence from test/cli-q.test.ts

    Test anchors: test:protocol.evaluation-sink, test:protocol.query-answer-shapes, test:protocol.query-params. Specs verified by those bindings: spec:consumers.agent-surface.evaluation-sink, spec:consumers.agent-surface.recipe-parameters.

    Run 2: external run evidence from vitest 4.1.10

    Build: CI 439 · Branch: docs/articles-refresh-1 · Commit: 61576184ea9f39b7f91c51fef5ff991b0bf2d0e6 · Start: 2026-11-04T07:59:39.962Z · Stop: 2026-11-04T08:03:39.928Z

    NameSuiteResultDuration
    evaluates an argv body over the derived graph and prints the pre-shaped returnsdp q — the agent front doorpassed74.69 ms
    reads the body from stdin when stdin is not a terminalsdp q — the agent front doorpassed17.85 ms
    prefers the argv body over stdin when both are availablesdp q — the agent front doorpassed28.14 ms
    refuses with no body when stdin is a terminal instead of waiting on itsdp q — the agent front doorpassed1.04 ms
    refuses an empty body rather than evaluating nothingsdp q — the agent front doorpassed0.54 ms
    prints JSON for --jsonsdp q — the agent front doorpassed21.5 ms
    exits 1 and names the failure when the body throwssdp q — the agent front doorpassed10.54 ms
    exits 1 on a body that does not compilesdp q — the agent front doorpassed24.5 ms
    awaits an asynchronous bodysdp q — the agent front doorpassed12.36 ms
    injects a live reader: the entry adapters answer from the derived graphsdp q — the agent front doorpassed14.32 ms
    injects the raw graph schema alongside the readersdp q — the agent front doorpassed8.26 ms
    injects the validation report as data, never as a gatesdp q — the agent front doorpassed9.87 ms
    runs the body when the graph merely reports findings — checks never gate the read pathsdp q — the agent front doorpassed11.94 ms
    refuses to run the body when the graph does not derive, rendering the extraction findingssdp q — the agent front doorpassed20.68 ms
    reports a body that returns nothing rather than printing a silent blanksdp q — the agent front doorpassed10.03 ms
    refuses an unknown option and a second body without deriving anythingsdp q — the agent front doorpassed0.73 ms
    refuses an empty --root instead of reinterpreting it as the working directorysdp q — the agent front doorpassed0.36 ms
    refuses a root that is not a directory, naming the resolved absolute pathsdp q — the agent front doorpassed0.55 ms
    honours --exclude, so the sink omits exactly the paths the caller namessdp q — the agent front doorpassed7.19 ms
    runs the body when extraction itself only warns — the warning is data, never a gatesdp q — the agent front doorpassed6.17 ms
    detects a terminal from the file descriptor, never from a stream propertysdp q — the agent front doorpassed9.42 ms
    puts --exclude through the strict exclusion contract before deriving anythingsdp q — the agent front doorpassed1.11 ms
    reports a throw from rendering the return value through the one diagnostic currencysdp q — the agent front doorpassed9.12 ms
    refuses a --json return value whose toJSON yields no JSON formsdp q — the agent front doorpassed8.47 ms
    writes nothing: the sink is a pure read toolsdp q — the agent front doorpassed439.43 ms
    injects params as a fourth binding beside g, graph and reportsdp q --params — a recipe parameter as datapassed8.76 ms
    binds params to an empty object without the flagsdp q --params — a recipe parameter as datapassed9.84 ms
    passes any JSON object through unchangedsdp q --params — a recipe parameter as datapassed16.23 ms
    reads params from a file named with @PATH, a byte-order mark droppedsdp q --params — a recipe parameter as datapassed13.56 ms
    refuses inline text that is not JSON before the body runs: exit 1, one line, nothing on stdoutsdp q --params — a recipe parameter as datapassed4.22 ms
    refuses an empty value before the body runs: exit 1, one line, nothing on stdoutsdp q --params — a recipe parameter as datapassed0.56 ms
    refuses null before the body runs: exit 1, one line, nothing on stdoutsdp q --params — a recipe parameter as datapassed0.5 ms
    refuses an array before the body runs: exit 1, one line, nothing on stdoutsdp q --params — a recipe parameter as datapassed0.49 ms
    refuses a string before the body runs: exit 1, one line, nothing on stdoutsdp q --params — a recipe parameter as datapassed0.4 ms
    refuses a number before the body runs: exit 1, one line, nothing on stdoutsdp q --params — a recipe parameter as datapassed0.4 ms
    refuses a boolean before the body runs: exit 1, one line, nothing on stdoutsdp q --params — a recipe parameter as datapassed6.48 ms
    refuses a file that cannot be read before the body runs: exit 1, one line, nothing on stdoutsdp q --params — a recipe parameter as datapassed0.54 ms
    refuses an @ with no path before the body runs: exit 1, one line, nothing on stdoutsdp q --params — a recipe parameter as datapassed0.56 ms
    refuses a missing value before the body runs: exit 1, one line, nothing on stdoutsdp q --params — a recipe parameter as datapassed0.38 ms
    refuses a flag in place of the value before the body runs: exit 1, one line, nothing on stdoutsdp q --params — a recipe parameter as datapassed6.39 ms
    refuses a repeated key before the body runs: exit 1, one line, nothing on stdoutsdp q --params — a recipe parameter as datapassed0.49 ms
    refuses a key outside the lower-camel grammar before the body runs: exit 1, one line, nothing on stdoutsdp q --params — a recipe parameter as datapassed0.4 ms
    refuses a file whose JSON is not an object, in one line naming the filesdp q --params — a recipe parameter as datapassed0.49 ms
    refuses a file whose text is not JSON, in one line naming the filesdp q --params — a recipe parameter as datapassed3.66 ms
    locates a refused body return )query body positions and merged parameterspassed5.39 ms
    locates a refused body return 1; foo barquery body positions and merged parameterspassed1.48 ms
    locates a refused body let x = 'a' 'bcdef';query body positions and merged parameterspassed1.41 ms
    locates a refused body const value = 1; return )query body positions and merged parameterspassed1.27 ms
    locates a refused body return (query body positions and merged parameterspassed2.93 ms
    names a body that stops short instead of the wrapper's closing bracequery body positions and merged parameterspassed2.33 ms
    names a body that stops inside a template literal return `abcquery body positions and merged parameterspassed1.88 ms
    names a body that stops inside a template literal const a = 1; return `x${a`query body positions and merged parameterspassed2.38 ms
    locates an error whose range runs past its line "const s = { id: 1 };\nreturn `id: ${Object.keys(s ?? {"query body positions and merged parameterspassed3.87 ms
    locates an error whose range runs past its line "return a; /* note"query body positions and merged parameterspassed1.8 ms
    locates an error whose range runs past its line " const { id"query body positions and merged parameterspassed1.84 ms
    locates an error whose range runs past its line "const x = (a\n+ b) = 1;\nreturn x;"query body positions and merged parameterspassed1.96 ms
    counts a CR as the line terminator the engine countsquery body positions and merged parameterspassed2.85 ms
    counts a CRLF as the line terminator the engine countsquery body positions and merged parameterspassed2.66 ms
    counts a U+2028 as the line terminator the engine countsquery body positions and merged parameterspassed2.91 ms
    counts a U+2029 as the line terminator the engine countsquery body positions and merged parameterspassed2.82 ms
    locates the brace of a body that closes its function early "return 1;\n})\n;(function(){"query body positions and merged parameterspassed1.43 ms
    locates the brace of a body that closes its function early "const a = 1;\r\n return a; })\n(function(){"query body positions and merged parameterspassed1.68 ms
    locates the brace of a body that closes its function early "const a = g.specs();\nreturn a; }"query body positions and merged parameterspassed1.87 ms
    keeps runtime failures separate, including a thrown SyntaxErrorquery body positions and merged parameterspassed0.82 ms
    refuses repeated top-level keys inside one inline object before extractionquery body positions and merged parameterspassed2.27 ms
    refuses repeated top-level keys inside one file object before extractionquery body positions and merged parameterspassed2.32 ms
    accepts nested duplicates and duplicate-looking text inside valuesquery body positions and merged parameterspassed1 ms
    binds a keyed file's JSON value null beside merged objectsquery body positions and merged parameterspassed1.32 ms
    binds a keyed file's JSON value 1 beside merged objectsquery body positions and merged parameterspassed1.08 ms
    binds a keyed file's JSON value "text" beside merged objectsquery body positions and merged parameterspassed1.15 ms
    binds a keyed file's JSON value 4 beside merged objectsquery body positions and merged parameterspassed1.19 ms
    binds a keyed file's JSON value true beside merged objectsquery body positions and merged parameterspassed1.23 ms
    binds a keyed file's JSON value {"nested":{"a":1}} beside merged objectsquery body positions and merged parameterspassed1.18 ms
    refuses duplicate keys from inline-file before extractionquery body positions and merged parameterspassed0.51 ms
    refuses duplicate keys from file-inline before extractionquery body positions and merged parameterspassed0.43 ms
    refuses duplicate keys from keyed-inline before extractionquery body positions and merged parameterspassed0.5 ms
    refuses duplicate keys from inline-keyed before extractionquery body positions and merged parameterspassed0.5 ms
    refuses duplicate keys from keyed-keyed before extractionquery body positions and merged parameterspassed0.56 ms
    keeps merged parameter keys writable for the caller's bodyquery body positions and merged parameterspassed0.83 ms
    refuses an invalid keyed input key=@ before extractionquery body positions and merged parameterspassed0.51 ms
    refuses an invalid keyed input key=@missing-file.json before extractionquery body positions and merged parameterspassed0.47 ms
    refuses an invalid keyed input bad-key=@missing-file.json before extractionquery body positions and merged parameterspassed0.35 ms
    refuses an invalid keyed input bad_key=@missing-file.json before extractionquery body positions and merged parameterspassed0.54 ms
    reads inline JSON and @PATH before KEY=@PATH when the input contains =@query body positions and merged parameterspassed0.95 ms
    refuses a keyed file holding invalid JSON before extractionquery body positions and merged parameterspassed0.55 ms
    merges own keys without treating __proto__ as an assignmentquery body positions and merged parameterspassed0.99 ms
  • test:protocol.query-params · front-door checks verify --params as the fourth binding and its refusals · anchored · test anchor binding present · test/cli-q.test.ts:509
  • test:protocol.recipe-parameters · recipe checks verify parameters passed as data and the shipped recipe files · anchored · test anchor binding present · test/recipes.test.ts:4472

    External run evidence from test/recipes.test.ts

    Test anchors: test:protocol.address-and-cycle-recipes, test:protocol.answer-shape-recipes, test:protocol.authoring-grammar-recipes, test:protocol.authoring-recipes, test:protocol.capability-epics, test:protocol.capability-map, test:protocol.design-recipes, test:protocol.recipe-parameters, test:protocol.register-recipes. Specs verified by those bindings: spec:consumers.agent-surface.address-and-cycle-recipes, spec:consumers.agent-surface.answer-shapes, spec:consumers.agent-surface.authoring-recipes, spec:consumers.agent-surface.design-recipes, spec:consumers.agent-surface.recipe-parameters, spec:consumers.agent-surface.register-recipes, spec:consumers.capability-map, spec:extraction.contract-declarations, spec:model.open-question-fields, spec:model.relation-reasons, spec:model.rule-keys, spec:protocol.capability-epics.

    Run 2: external run evidence from vitest 4.1.10

    Build: CI 439 · Branch: docs/articles-refresh-1 · Commit: 61576184ea9f39b7f91c51fef5ff991b0bf2d0e6 · Start: 2026-11-04T07:59:39.962Z · Stop: 2026-11-04T08:03:39.928Z

    NameSuiteResultDuration
    cites each recipe that a Spec names by number and heading under the catalog's numberthe agent-surface recipe corpuspassed419.67 ms
    pairs every documented recipe with exactly one fenced bodythe agent-surface recipe corpuspassed0.89 ms
    keeps self-hosting and adopter invocation forms distinctthe agent-surface recipe corpuspassed7.45 ms
    teaches parameters as data and keeps the on-ramps naming the CLI verbs and recipesthe agent-surface recipe corpuspassed4.63 ms
    names in the intro every recipe that reports an absent subject, by its shapethe agent-surface recipe corpuspassed19032.76 ms
    keeps every body plain JavaScript with a returnthe agent-surface recipe corpuspassed13.81 ms
    runs every body through the front door without throwingthe agent-surface recipe corpuspassed5696.65 ms
    returns the non-example build backlog and audits excluded example evidencethe agent-surface recipe corpuspassed109.98 ms
    returns a drift alarm of code-bound specs below ready, with the floor namedthe agent-surface recipe corpuspassed104.39 ms
    returns one spec's guarantees with its relations and verifier bindingsthe agent-surface recipe corpuspassed79.21 ms
    keeps hostile changed filenames as inert JSON datathe agent-surface recipe corpuspassed51.69 ms
    returns the complete diff-to-at-risk bridgethe agent-surface recipe corpuspassed111.2 ms
    names a changed identity-only unit as unlinked, never coverage-unknown or droppedthe agent-surface recipe corpuspassed131.95 ms
    returns a pack's review backbone with its verifier gapsthe agent-surface recipe corpuspassed113.57 ms
    returns concept matches carrying the fields that matchedthe agent-surface recipe corpuspassed98.75 ms
    returns readiness divergence as an array, where empty is lawfulthe agent-surface recipe corpuspassed151.96 ms
    returns the warn-level signals as data rather than as a gatethe agent-surface recipe corpuspassed94.98 ms
    returns promotion preflight without conferring a readiness editthe agent-surface recipe corpuspassed56.27 ms
    names the next rung's unmet clause and the dependency that breaks it on a probethe agent-surface recipe corpuspassed2.12 ms
    keeps declared examples distinct from enabled verifier bindingsthe agent-surface recipe corpuspassed395.96 ms
    returns the complete non-ready ladder grouped by familythe agent-surface recipe corpuspassed147.78 ms
    distinguishes a passing current floor from a blocked or clear stated next rungthe agent-surface recipe corpuspassed2.29 ms
    returns every committed structural component with non-empty membershipthe agent-surface recipe corpuspassed79.79 ms
    returns exact component uses fan-in and fan-out from the structural oraclethe agent-surface recipe corpuspassed80.4 ms
    returns a component structural neighborhood and an exact absent shapethe agent-surface recipe corpuspassed118 ms
    reports census structural coverage from graph and report ground truththe agent-surface recipe corpuspassed66.81 ms
    reports graph-side upper bounds for every shipped projection rootthe agent-surface recipe corpuspassed68.23 ms
    returns the architecture map of every live component with recomputed fan-in and fan-outthe agent-surface recipe corpuspassed89.28 ms
    explains the shared policy and adapter collaborations from graph intent and binding claimsthe agent-surface recipe corpuspassed90.9 ms
    retains local uses and their claims without counting a component as its own dependencythe agent-surface recipe corpuspassed128.78 ms
    preserves an unresolved responsibility without inventing its designthe agent-surface recipe corpuspassed136.4 ms
    keeps a dangling component row and surfaces unresolved uses edgesthe agent-surface recipe corpuspassed150.51 ms
    preserves an unresolved architecture-map member when memberOf outlives the nodethe agent-surface recipe corpuspassed171.55 ms
    returns the decision map ranked by live shaping fan-inthe agent-surface recipe corpuspassed85.02 ms
    returns a planning-slice neighborhood and an exact absent shapethe agent-surface recipe corpuspassed184.07 ms
    returns non-empty bidirectional dependencies for the binding-grain planning slicethe agent-surface recipe corpuspassed100.05 ms
    returns planning-slice implementations, never abstractionsthe agent-surface recipe corpuspassed67.4 ms
    preserves an unresolved component row when memberOf outlives the nodethe agent-surface recipe corpuspassed154.59 ms
    reports derived design columns beside the existing backlog fieldsthe agent-surface recipe corpuspassed1.06 ms
    groups backlog rows under lawful Object.prototype path segmentsthe agent-surface recipe corpuspassed86.28 ms
    groups lower-ladder rows under lawful Object.prototype path segmentsthe agent-surface recipe corpuspassed102.03 ms
    groups decided subjects under lawful Object.prototype path segmentsthe agent-surface recipe corpuspassed86.69 ms
    lists key families across the corpus in key, Spec and section order with the documented sampleregister recipe semanticspassed217.43 ms
    lists Design and UI key families without a row cap, preserving values, lines and overlapping prefixesregister recipe semanticspassed14.79 ms
    diagnoses an unresolved Pack member without returning a partial registerregister recipe semanticspassed2.67 ms
    diagnoses malformed key-family parameters without a register: {"prefixes":[]}register recipe semanticspassed130.37 ms
    diagnoses malformed key-family parameters without a register: {"prefixes":[""]}register recipe semanticspassed122.89 ms
    diagnoses malformed key-family parameters without a register: {"prefixes":["a","a"]}register recipe semanticspassed121.29 ms
    diagnoses malformed key-family parameters without a register: {"prefixes":"limit"}register recipe semanticspassed88.4 ms
    diagnoses malformed key-family parameters without a register: {"pack":"pack:absent"}register recipe semanticspassed89.25 ms
    diagnoses malformed key-family parameters without a register: {"specs":["spec:absent"]}register recipe semanticspassed81.73 ms
    diagnoses malformed key-family parameters without a register: {"specs":"bad"}register recipe semanticspassed80.3 ms
    diagnoses malformed key-family parameters without a register: {"pack":"pack:self-hosting-v1","specs":[]}register recipe semanticspassed109.08 ms
    runs recipe 20 as written in default outputregister recipe semanticspassed213.72 ms
    runs recipe 21 as written in default outputregister recipe semanticspassed89.57 ms
    runs recipe 22 as written in default outputregister recipe semanticspassed159.65 ms
    runs recipe 23 as written in default outputregister recipe semanticspassed238.63 ms
    runs recipe 24 as written in default outputregister recipe semanticspassed145.33 ms
    runs recipe 25 as written in default outputregister recipe semanticspassed83.91 ms
    runs recipe 26 as written in default outputregister recipe semanticspassed101.04 ms
    runs recipe 27 as written in default outputregister recipe semanticspassed112.31 ms
    runs recipe 28 as written in default outputregister recipe semanticspassed85.72 ms
    runs recipe 29 as written in default outputregister recipe semanticspassed90.32 ms
    runs recipe 30 as written in default outputregister recipe semanticspassed229.87 ms
    runs recipe 31 as written in default outputregister recipe semanticspassed108.19 ms
    runs recipe 32 as written in default outputregister recipe semanticspassed61.68 ms
    renders long JSON values with the same default text bound as stringsregister recipe semanticspassed21.25 ms
    registers an omitted blocking flag through a TypeScript carrierregister recipe semanticspassed5.29 ms
    searches coined keys of every value shape through a TypeScript carrierregister recipe semanticspassed8.63 ms
    searches strings inside a matching coined list or object keyregister recipe semanticspassed5.17 ms
    searches a null coined-key value in the reader graphregister recipe semanticspassed7.61 ms
    keeps register counts under totals and top-level plural nouns as arraysregister recipe semanticspassed1356.25 ms
    pins whole-token matching for 'retry' in 'entry' / 'retry'register recipe semanticspassed1.18 ms
    pins whole-token matching for 'retry' in 'entry' / 'retryable'register recipe semanticspassed0.55 ms
    pins whole-token matching for 'retry' in 'entry' / 'retry-worker'register recipe semanticspassed0.45 ms
    pins whole-token matching for 'retry' in 'retryWorker' / 'unrelated'register recipe semanticspassed0.44 ms
    pins whole-token matching for 'Retry' in 'entry' / 'RETRY.'register recipe semanticspassed0.37 ms
    pins whole-token matching for 'retry worker' in 'retryWorker' / 'retry-worker'register recipe semanticspassed0.37 ms
    pins whole-token matching for 'retry worker' in 'entry' / 'worker retry'register recipe semanticspassed0.5 ms
    pins whole-token matching for 'retry worker' in 'entry' / 'retry the worker'register recipe semanticspassed0.36 ms
    pins whole-token matching for 'server' in 'entry' / 'HTTPServer'register recipe semanticspassed0.41 ms
    pins whole-token matching for 'v' in 'entry' / 'v2'register recipe semanticspassed0.46 ms
    registers every authored question, blocking Specs firstregister recipe semanticspassed139.3 ms
    reports one-hop footing of all four types, including unresolved targetsregister recipe semanticspassed257.45 ms
    audits mention pairs, skips fences, and preserves full ids and directionregister recipe semanticspassed5.04 ms
    resolves entry mentions and retains every token and pair location through a probe rootregister recipe semanticspassed18.33 ms
    reads the whole mention token through an underscore as malformed, never the existing prefixregister recipe semanticspassed1.25 ms
    reads the whole mention token through a slash as malformed, never the existing prefixregister recipe semanticspassed1.07 ms
    reads the whole mention token through a comma as malformed, never the existing prefixregister recipe semanticspassed3.92 ms
    reads the whole mention token through an underscore and a letter as malformed, never the existing prefixregister recipe semanticspassed0.83 ms
    reads the whole mention token through a slash and a letter as malformed, never the existing prefixregister recipe semanticspassed0.79 ms
    reads the whole mention token through a comma and a letter as malformed, never the existing prefixregister recipe semanticspassed0.75 ms
    reads the whole mention token through a letter outside ASCII as malformed, never the existing prefixregister recipe semanticspassed4.06 ms
    reads the whole mention token through an escaped underscore as malformed, never the existing prefixregister recipe semanticspassed3.59 ms
    reads the whole mention token through a combining mark as malformed, never the existing prefixregister recipe semanticspassed0.88 ms
    reads the whole mention token through a combining mark after an entry key as malformed, never the existing prefixregister recipe semanticspassed0.83 ms
    reads the whole mention token through a zero-width space as malformed, never the existing prefixregister recipe semanticspassed0.7 ms
    reads the whole mention token through fullwidth connector punctuation as malformed, never the existing prefixregister recipe semanticspassed3.8 ms
    reads the whole mention token through a NUL as malformed, never the existing prefixregister recipe semanticspassed0.79 ms
    reads the whole mention token through an escape character as malformed, never the existing prefixregister recipe semanticspassed0.76 ms
    reads the whole mention token through a delete character as malformed, never the existing prefixregister recipe semanticspassed0.76 ms
    reads the whole mention token through a C1 control character as malformed, never the existing prefixregister recipe semanticspassed0.75 ms
    reads the whole mention token through a hyphenated entry key as malformed, never the existing prefixregister recipe semanticspassed3.96 ms
    reads the whole mention token through an entry suffix with no key as malformed, never the existing prefixregister recipe semanticspassed0.86 ms
    reads the whole mention token through an entry suffix outside design and ui as malformed, never the existing prefixregister recipe semanticspassed0.75 ms
    reads the clean id through Markdown punctuation: a sentence dotregister recipe semanticspassed4.02 ms
    reads the clean id through Markdown punctuation: a commaregister recipe semanticspassed0.79 ms
    reads the clean id through Markdown punctuation: a colonregister recipe semanticspassed0.74 ms
    reads the clean id through Markdown punctuation: a closing parenthesisregister recipe semanticspassed0.76 ms
    reads the clean id through Markdown punctuation: boldregister recipe semanticspassed3.9 ms
    reads the clean id through Markdown punctuation: emphasisregister recipe semanticspassed0.77 ms
    reads the clean id through Markdown punctuation: strikethroughregister recipe semanticspassed0.77 ms
    reads the clean id through Markdown punctuation: backticksregister recipe semanticspassed0.74 ms
    reads the clean id through Markdown punctuation: ASCII double quotesregister recipe semanticspassed0.71 ms
    reads the clean id through Markdown punctuation: ASCII single quotesregister recipe semanticspassed0.73 ms
    reads the clean id through Markdown punctuation: typographic double quotesregister recipe semanticspassed0.73 ms
    reads the clean id through Markdown punctuation: typographic single quotesregister recipe semanticspassed0.73 ms
    reads the clean id through Markdown punctuation: an em dashregister recipe semanticspassed0.71 ms
    reads the clean id through Markdown punctuation: an en dashregister recipe semanticspassed0.71 ms
    reads the clean id through Markdown punctuation: an ellipsisregister recipe semanticspassed0.76 ms
    reads the clean id through Markdown punctuation: an escaped starregister recipe semanticspassed0.72 ms
    reads the clean id through Markdown punctuation: an escaped exclamation markregister recipe semanticspassed0.78 ms
    reads the clean id through Markdown punctuation: U+0085register recipe semanticspassed7.13 ms
    reads the clean id through Markdown punctuation: a no-break spaceregister recipe semanticspassed1.23 ms
    reads the clean id through Markdown punctuation: a tabregister recipe semanticspassed1.08 ms
    reads the clean id through Markdown punctuation: an arrowregister recipe semanticspassed4.35 ms
    reads a placeholder or a bare prefix as prose, not a mentionregister recipe semanticspassed1.23 ms
    scans nested arrays in examples while skipping object fences by positionregister recipe semanticspassed8.37 ms
    addresses only lawful Design and UI entry keys in search resultsregister recipe semanticspassed2.69 ms
    scopes mentions by the mentioning Spec onlyregister recipe semanticspassed11.21 ms
    reports malformed open questions without counting them: "one question"register recipe semanticspassed1.02 ms
    reports malformed open questions without counting them: {}register recipe semanticspassed0.74 ms
    reports malformed open questions without counting them: 42register recipe semanticspassed0.85 ms
    reports malformed open questions without counting them: {"blocking":true}register recipe semanticspassed0.72 ms
    reports malformed open questions without counting them: nullregister recipe semanticspassed0.69 ms
    reports malformed open questions without counting them: ""register recipe semanticspassed0.8 ms
    reports malformed open questions without counting them: {"question":"valid","blocking":"yes"}register recipe semanticspassed0.82 ms
    reports malformed open questions without counting them: {"question":"valid","blocking":null}register recipe semanticspassed0.83 ms
    reports malformed open questions without counting them: {"question":"valid"}register recipe semanticspassed0.92 ms
    reports an off-grammar question key as malformed: {"question":"valid","key":"AggregateReach"}register recipe semanticspassed1.16 ms
    reports an off-grammar question key as malformed: {"question":"valid","key":"aggregate-reach"}register recipe semanticspassed0.89 ms
    reports an off-grammar question key as malformed: {"question":"valid","key":""}register recipe semanticspassed0.85 ms
    reports an off-grammar question key as malformed: {"question":"valid","key":7}register recipe semanticspassed0.78 ms
    reports an off-grammar question key as malformed: {"question":"valid","key":null}register recipe semanticspassed0.7 ms
    reports an off-grammar question key as malformed: {"question":"valid","blocking":true}register recipe semanticspassed0.64 ms
    searches whole tokens, coined keys, narrative and fence stepsregister recipe semanticspassed31.53 ms
    lists every pinned declaration this corpus holdsregister recipe semanticspassed308.68 ms
    reads spans of any run length and skips every entry that pins nothingregister recipe semanticspassed1.43 ms
    resolves the catalog's addresses on this corpus as writtenaddress resolution and dependency cyclespassed123.1 ms
    reports this corpus's dependency cycles as an independent reachability check finds themaddress resolution and dependency cyclespassed142.35 ms
    reports the probe's one set and one self-dependent Spec, and nothing for a Spec that only reaches a setaddress resolution and dependency cyclespassed7.1 ms
    reports a self-loop inside a larger set only with that setaddress resolution and dependency cyclespassed11.55 ms
    walks targets in code-unit order, so of two tied shortest cycles the first target's is reportedaddress resolution and dependency cyclespassed6.76 ms
    walks a chain of 10,000 Specs and one cycle of 5,000 without recursingaddress resolution and dependency cyclespassed351.67 ms
    resolves an inherited property name only where the Spec authors it as a keyaddress resolution and dependency cyclespassed3.67 ms
    resolves the design's probe addresses with one row and one reason eachaddress resolution and dependency cyclespassed9.64 ms
    resolves a keyed question, refuses description in Design and UI, and keeps repeatsaddress resolution and dependency cyclespassed4.22 ms
    registers a keyed question with its key and an unkeyed one with a null keyaddress resolution and dependency cyclespassed2.82 ms
    audits a question address against the target's open question keysaddress resolution and dependency cyclespassed3.37 ms
    addresses a keyed question's text and matches its key, never the key as a rowaddress resolution and dependency cyclespassed7.52 ms
    returns one row per Studio member with four independent factsdesign references and the architecture taxonomypassed225.83 ms
    lists a referencing unit beside the realizing units without conferring implementeddesign references and the architecture taxonomypassed236.19 ms
    lists the reader beside each Studio member that depends on it, with its realizing unitsdesign references and the architecture taxonomypassed117.64 ms
    derives builds-on from the member's relations without conferring a fact on itdesign references and the architecture taxonomypassed278.29 ms
    returns the role, layer, and context taxonomy from the code units alonedesign references and the architecture taxonomypassed44.37 ms
    counts references as edges apart from the units that carry themdesign references and the architecture taxonomypassed116.65 ms
    creates each taxonomy bucket once, however many units share the valuedesign references and the architecture taxonomypassed147.68 ms
    declares and checks only its indexed parameter names first: 1recipe parameters and the shipped recipe filespassed1.1 ms
    declares and checks only its indexed parameter names first: 2recipe parameters and the shipped recipe filespassed3.8 ms
    declares and checks only its indexed parameter names first: 3recipe parameters and the shipped recipe filespassed0.8 ms
    declares and checks only its indexed parameter names first: 4recipe parameters and the shipped recipe filespassed0.76 ms
    declares and checks only its indexed parameter names first: 5recipe parameters and the shipped recipe filespassed0.73 ms
    declares and checks only its indexed parameter names first: 6recipe parameters and the shipped recipe filespassed3.75 ms
    declares and checks only its indexed parameter names first: 7recipe parameters and the shipped recipe filespassed0.74 ms
    declares and checks only its indexed parameter names first: 8recipe parameters and the shipped recipe filespassed0.76 ms
    declares and checks only its indexed parameter names first: 9recipe parameters and the shipped recipe filespassed0.79 ms
    declares and checks only its indexed parameter names first: 10recipe parameters and the shipped recipe filespassed1.8 ms
    declares and checks only its indexed parameter names first: 11recipe parameters and the shipped recipe filespassed0.72 ms
    declares and checks only its indexed parameter names first: 12recipe parameters and the shipped recipe filespassed3.75 ms
    declares and checks only its indexed parameter names first: 13recipe parameters and the shipped recipe filespassed1.55 ms
    declares and checks only its indexed parameter names first: 14recipe parameters and the shipped recipe filespassed0.74 ms
    declares and checks only its indexed parameter names first: 15recipe parameters and the shipped recipe filespassed0.74 ms
    declares and checks only its indexed parameter names first: 16recipe parameters and the shipped recipe filespassed0.68 ms
    declares and checks only its indexed parameter names first: 17recipe parameters and the shipped recipe filespassed0.75 ms
    declares and checks only its indexed parameter names first: 18recipe parameters and the shipped recipe filespassed0.68 ms
    declares and checks only its indexed parameter names first: 19recipe parameters and the shipped recipe filespassed0.57 ms
    declares and checks only its indexed parameter names first: 20recipe parameters and the shipped recipe filespassed0.71 ms
    declares and checks only its indexed parameter names first: 21recipe parameters and the shipped recipe filespassed0.74 ms
    declares and checks only its indexed parameter names first: 22recipe parameters and the shipped recipe filespassed0.76 ms
    declares and checks only its indexed parameter names first: 23recipe parameters and the shipped recipe filespassed0.72 ms
    declares and checks only its indexed parameter names first: 24recipe parameters and the shipped recipe filespassed0.5 ms
    declares and checks only its indexed parameter names first: 25recipe parameters and the shipped recipe filespassed0.43 ms
    declares and checks only its indexed parameter names first: 26recipe parameters and the shipped recipe filespassed0.46 ms
    declares and checks only its indexed parameter names first: 27recipe parameters and the shipped recipe filespassed0.41 ms
    declares and checks only its indexed parameter names first: 28recipe parameters and the shipped recipe filespassed0.46 ms
    declares and checks only its indexed parameter names first: 29recipe parameters and the shipped recipe filespassed0.42 ms
    declares and checks only its indexed parameter names first: 30recipe parameters and the shipped recipe filespassed0.44 ms
    declares and checks only its indexed parameter names first: 31recipe parameters and the shipped recipe filespassed0.43 ms
    declares and checks only its indexed parameter names first: 32recipe parameters and the shipped recipe filespassed0.4 ms
    declares and checks only its indexed parameter names first: 33recipe parameters and the shipped recipe filespassed0.45 ms
    declares and checks only its indexed parameter names first: 34recipe parameters and the shipped recipe filespassed4.35 ms
    declares and checks only its indexed parameter names first: 35recipe parameters and the shipped recipe filespassed0.53 ms
    declares and checks only its indexed parameter names first: 36recipe parameters and the shipped recipe filespassed0.45 ms
    declares and checks only its indexed parameter names first: 37recipe parameters and the shipped recipe filespassed0.46 ms
    declares and checks only its indexed parameter names first: 38recipe parameters and the shipped recipe filespassed0.44 ms
    declares and checks only its indexed parameter names first: 39recipe parameters and the shipped recipe filespassed0.87 ms
    declares and checks only its indexed parameter names first: 40recipe parameters and the shipped recipe filespassed0.49 ms
    declares and checks only its indexed parameter names first: 41recipe parameters and the shipped recipe filespassed0.45 ms
    declares and checks only its indexed parameter names first: 42recipe parameters and the shipped recipe filespassed0.42 ms
    declares and checks only its indexed parameter names first: 43recipe parameters and the shipped recipe filespassed0.46 ms
    declares and checks only its indexed parameter names first: 44recipe parameters and the shipped recipe filespassed0.42 ms
    declares and checks only its indexed parameter names first: 45recipe parameters and the shipped recipe filespassed0.58 ms
    declares and checks only its indexed parameter names first: 46recipe parameters and the shipped recipe filespassed0.75 ms
    declares and checks only its indexed parameter names first: 47recipe parameters and the shipped recipe filespassed0.75 ms
    declares and checks only its indexed parameter names first: 48recipe parameters and the shipped recipe filespassed0.91 ms
    declares and checks only its indexed parameter names first: 49recipe parameters and the shipped recipe filespassed0.76 ms
    declares and checks only its indexed parameter names first: 50recipe parameters and the shipped recipe filespassed0.78 ms
    declares and checks only its indexed parameter names first: 51recipe parameters and the shipped recipe filespassed0.78 ms
    declares and checks only its indexed parameter names first: 52recipe parameters and the shipped recipe filespassed0.74 ms
    declares and checks only its indexed parameter names first: 53recipe parameters and the shipped recipe filespassed0.78 ms
    declares and checks only its indexed parameter names first: 54recipe parameters and the shipped recipe filespassed0.82 ms
    declares and checks only its indexed parameter names first: 55recipe parameters and the shipped recipe filespassed0.78 ms
    returns only the unknown-name answer before reading recipe inputs: 1recipe parameters and the shipped recipe filespassed117.83 ms
    returns only the unknown-name answer before reading recipe inputs: 2recipe parameters and the shipped recipe filespassed98.66 ms
    returns only the unknown-name answer before reading recipe inputs: 3recipe parameters and the shipped recipe filespassed108.88 ms
    returns only the unknown-name answer before reading recipe inputs: 4recipe parameters and the shipped recipe filespassed80.33 ms
    returns only the unknown-name answer before reading recipe inputs: 5recipe parameters and the shipped recipe filespassed104.2 ms
    returns only the unknown-name answer before reading recipe inputs: 6recipe parameters and the shipped recipe filespassed106.4 ms
    returns only the unknown-name answer before reading recipe inputs: 7recipe parameters and the shipped recipe filespassed93.79 ms
    returns only the unknown-name answer before reading recipe inputs: 8recipe parameters and the shipped recipe filespassed91.94 ms
    returns only the unknown-name answer before reading recipe inputs: 9recipe parameters and the shipped recipe filespassed82.47 ms
    returns only the unknown-name answer before reading recipe inputs: 10recipe parameters and the shipped recipe filespassed103.28 ms
    returns only the unknown-name answer before reading recipe inputs: 11recipe parameters and the shipped recipe filespassed81.57 ms
    returns only the unknown-name answer before reading recipe inputs: 12recipe parameters and the shipped recipe filespassed75.87 ms
    returns only the unknown-name answer before reading recipe inputs: 13recipe parameters and the shipped recipe filespassed106.17 ms
    returns only the unknown-name answer before reading recipe inputs: 14recipe parameters and the shipped recipe filespassed58.13 ms
    returns only the unknown-name answer before reading recipe inputs: 15recipe parameters and the shipped recipe filespassed45.95 ms
    returns only the unknown-name answer before reading recipe inputs: 16recipe parameters and the shipped recipe filespassed51.39 ms
    returns only the unknown-name answer before reading recipe inputs: 17recipe parameters and the shipped recipe filespassed71.7 ms
    returns only the unknown-name answer before reading recipe inputs: 18recipe parameters and the shipped recipe filespassed75.94 ms
    returns only the unknown-name answer before reading recipe inputs: 19recipe parameters and the shipped recipe filespassed89.69 ms
    returns only the unknown-name answer before reading recipe inputs: 20recipe parameters and the shipped recipe filespassed76.43 ms
    returns only the unknown-name answer before reading recipe inputs: 21recipe parameters and the shipped recipe filespassed76.25 ms
    returns only the unknown-name answer before reading recipe inputs: 22recipe parameters and the shipped recipe filespassed77.06 ms
    returns only the unknown-name answer before reading recipe inputs: 23recipe parameters and the shipped recipe filespassed76.24 ms
    returns only the unknown-name answer before reading recipe inputs: 24recipe parameters and the shipped recipe filespassed78.05 ms
    returns only the unknown-name answer before reading recipe inputs: 25recipe parameters and the shipped recipe filespassed74.04 ms
    returns only the unknown-name answer before reading recipe inputs: 26recipe parameters and the shipped recipe filespassed62.37 ms
    returns only the unknown-name answer before reading recipe inputs: 27recipe parameters and the shipped recipe filespassed99.86 ms
    returns only the unknown-name answer before reading recipe inputs: 28recipe parameters and the shipped recipe filespassed109.48 ms
    returns only the unknown-name answer before reading recipe inputs: 29recipe parameters and the shipped recipe filespassed132.78 ms
    returns only the unknown-name answer before reading recipe inputs: 30recipe parameters and the shipped recipe filespassed111.16 ms
    returns only the unknown-name answer before reading recipe inputs: 31recipe parameters and the shipped recipe filespassed81.75 ms
    returns only the unknown-name answer before reading recipe inputs: 32recipe parameters and the shipped recipe filespassed83.81 ms
    returns only the unknown-name answer before reading recipe inputs: 33recipe parameters and the shipped recipe filespassed79.2 ms
    returns only the unknown-name answer before reading recipe inputs: 34recipe parameters and the shipped recipe filespassed74.3 ms
    returns only the unknown-name answer before reading recipe inputs: 35recipe parameters and the shipped recipe filespassed43.28 ms
    returns only the unknown-name answer before reading recipe inputs: 36recipe parameters and the shipped recipe filespassed67.41 ms
    returns only the unknown-name answer before reading recipe inputs: 37recipe parameters and the shipped recipe filespassed79.8 ms
    returns only the unknown-name answer before reading recipe inputs: 38recipe parameters and the shipped recipe filespassed81.67 ms
    returns only the unknown-name answer before reading recipe inputs: 39recipe parameters and the shipped recipe filespassed43.83 ms
    returns only the unknown-name answer before reading recipe inputs: 40recipe parameters and the shipped recipe filespassed45.74 ms
    returns only the unknown-name answer before reading recipe inputs: 41recipe parameters and the shipped recipe filespassed47.32 ms
    returns only the unknown-name answer before reading recipe inputs: 42recipe parameters and the shipped recipe filespassed50.6 ms
    returns only the unknown-name answer before reading recipe inputs: 43recipe parameters and the shipped recipe filespassed62.4 ms
    returns only the unknown-name answer before reading recipe inputs: 44recipe parameters and the shipped recipe filespassed41.57 ms
    returns only the unknown-name answer before reading recipe inputs: 45recipe parameters and the shipped recipe filespassed41.95 ms
    returns only the unknown-name answer before reading recipe inputs: 46recipe parameters and the shipped recipe filespassed52.33 ms
    returns only the unknown-name answer before reading recipe inputs: 47recipe parameters and the shipped recipe filespassed121.15 ms
    returns only the unknown-name answer before reading recipe inputs: 48recipe parameters and the shipped recipe filespassed59.81 ms
    returns only the unknown-name answer before reading recipe inputs: 49recipe parameters and the shipped recipe filespassed45.97 ms
    returns only the unknown-name answer before reading recipe inputs: 50recipe parameters and the shipped recipe filespassed49.96 ms
    returns only the unknown-name answer before reading recipe inputs: 51recipe parameters and the shipped recipe filespassed73.38 ms
    returns only the unknown-name answer before reading recipe inputs: 52recipe parameters and the shipped recipe filespassed70.55 ms
    returns only the unknown-name answer before reading recipe inputs: 53recipe parameters and the shipped recipe filespassed75.88 ms
    returns only the unknown-name answer before reading recipe inputs: 54recipe parameters and the shipped recipe filespassed71.71 ms
    returns only the unknown-name answer before reading recipe inputs: 55recipe parameters and the shipped recipe filespassed74.91 ms
    diagnoses wrong subject names, mixed known names and ordered unknown names through shipped bodiesrecipe parameters and the shipped recipe filespassed198.1 ms
    reads and names each parameter, with a fallback only when the contract supplies onerecipe parameters and the shipped recipe filespassed17.17 ms
    ships every catalog body as dist/recipes/NN-slug.js, byte for byterecipe parameters and the shipped recipe filespassed10.2 ms
    runs every shipped file, read whole, to the answer its catalog body givesrecipe parameters and the shipped recipe filespassed14201.04 ms
    refuses a catalog whose bodies and headings do not pair, rather than guess a file namerecipe parameters and the shipped recipe filespassed1.91 ms
    reads a CRLF catalog as its LF bodies, and refuses a catalog with no recipe before publishingrecipe parameters and the shipped recipe filespassed33.61 ms
    removes only completed recipe files the catalog no longer owes, never another run's temporary filerecipe parameters and the shipped recipe filespassed1.05 ms
    passes recipe 4 its changed files from a file named with @PATHrecipe parameters and the shipped recipe filespassed74.72 ms
    resolves the addresses recipe 25 receives as datarecipe parameters and the shipped recipe filespassed94.67 ms
    reads the Pack the Pack recipes review from params.packrecipe parameters and the shipped recipe filespassed394.16 ms
    returns the Pack design of every corpus Pack as the raw graph states itdesign recipespassed1474.02 ms
    returns the probe Pack's design exactly, member by memberdesign recipespassed15.05 ms
    reaches every Spec resting on the corpus sample, by a shortest path of real edgesdesign recipespassed665.5 ms
    walks a dependency chain inbound only, once per Spec, and keeps a reference apartdesign recipespassed2.54 ms
    registers every corpus decision with its supersession, subjects and keyed questionsdesign recipespassed108.31 ms
    registers a supersedes pair both ways and a decision that shapes nothingdesign recipespassed1.33 ms
    carries a relation's reason beside the relation in recipes 3, 19, 21 and 31design recipespassed1.69 ms
    registers narrowing decisions both ways and excludes refinement by other kindsdesign recipespassed0.56 ms
    keeps the decoder in reader without adding crossings against the lawful notation alternativedesign recipespassed168.11 ms
    reports the corpus's architecture crossings as the raw edges state themdesign recipespassed91.03 ms
    names a crossing of two contexts and of two layers, and skips what cannot crossdesign recipespassed0.76 ms
    resolves every keyed corpus entry to its value and the line the location table recordsentry lines in entry search and address resolutionpassed188.3 ms
    gives each corpus entry-search row the line of a located entry and null otherwiseentry lines in entry search and address resolutionpassed315.26 ms
    never gives a nested entry the line of a literal top-level key its path spellsentry lines in entry search and address resolutionpassed5.8 ms
    counts a verifying Spec of another kind as a verifier, never as an example, in the Pack designentry lines in entry search and address resolutionpassed3.55 ms
    gives a string-form open question the line its question[n] row records, as the object formentry lines in entry search and address resolutionpassed5.14 ms
    counts equal layers and contexts between distinct components even without crossingsanswers that fitpassed0.59 ms
    returns guarantee entries and complete unit and verifier locations from contextanswers that fitpassed7.82 ms
    reports directions relative to an impacted Packanswers that fitpassed1.15 ms
    indexes exactly the present recipes with names, parameters and usesanswers that fitpassed6.64 ms
    runs a shipped body wrapped inside a caller's filteranswers that fitpassed237.05 ms
    keeps impact totals and puts both edge directions in the summaryanswers that fitpassed3.06 ms
    keeps the reader's Pack value in summary, full and selected-member answersanswers that fitpassed11.92 ms
    reports both next rungs when the stated rung is below the flooranswers that fitpassed0.96 ms
    reports no next rung at readyanswers that fitpassed78.41 ms
    reports gap exemptions and every omitted warning beyond the first 25answers that fitpassed2.09 ms
    lists only defined unimplemented designs and keeps exclusions and referencesanswers that fitpassed1.43 ms
    registers fields and counts deferrals apart from design holdsauthoring grammar recipespassed5.25 ms
    lists intended mentions apart and preserves the validator's warningsauthoring grammar recipespassed7.43 ms
    matches rule keys beside their text without searching the derived mapauthoring grammar recipespassed4.4 ms
    locates unkeyed rule text and question field textauthoring grammar recipespassed5.07 ms
    resolves rule addresses and preserves every parsed part of a missauthoring grammar recipespassed5.19 ms
    counts rule coverage from bound examples and reports unbound intent beside itauthoring grammar recipespassed4.87 ms
    reports missing rule-coverage scopes and accepts a scope with no rulesauthoring grammar recipespassed6.49 ms
    runs the catalog body in the evaluator without a module loaderentry citations recipepassed1.27 ms
    orders a declaration's citing files and lines independently of input orderentry citations recipepassed0.93 ms
    joins declarations and other cited entries, including uncited declarationsentry citations recipepassed1.28 ms
    includes absent Specs and malformed tokens only in the corpus unresolved listentry citations recipepassed2.14 ms
    returns diagnostics without findings for {"pack":"pack:missing"}entry citations recipepassed1 ms
    returns diagnostics without findings for {"specs":["spec:missing"]}entry citations recipepassed0.59 ms
    returns diagnostics without findings for {"specs":"spec:probe.cited"}entry citations recipepassed0.49 ms
    returns diagnostics without findings for {"pack":"pack:probe.citations","specs":[]}entry citations recipepassed0.59 ms
    returns diagnostics without findings for {"severity":"fatal"}entry citations recipepassed0.57 ms
    returns diagnostics without findings for {"severity":null}entry citations recipepassed0.65 ms
    reads an absent table as empty, and accepts an empty Spec scopeentry citations recipepassed1.03 ms
    adds recorded component fields, references, member roles and exact crossing-use countsStudio architecture and example-space recipe additionspassed130.37 ms
    runs shipped recipe 44 over every decoded space and refuses bad scopesStudio architecture and example-space recipe additionspassed734.97 ms
    runs recipe 45 as shipped and reports missing and malformed CTRF metadatanot recordedpassed1158.57 ms
    recipe 49 renders the panel memo from its catalog body and refuses a malformed documentnot recordedpassed212.65 ms
    reports text-preserving rule and flow key changes apart from rewordingnot recordedpassed9.27 ms
    preserves a removed keyed rule address beside new unkeyed textnot recordedpassed2.71 ms
    preserves a removed keyed flow address beside new unkeyed textnot recordedpassed2.47 ms
    distinguishes removed unkeyed rule base positions from head positionsnot recordedpassed3.07 ms
    distinguishes removed unkeyed flow base positions from head positionsnot recordedpassed5.3 ms
    retains every diamond edge and intermediate node while counting each descendant oncethe capability map recipepassed1.11 ms
    returns summary/full parity with explicit omissions for scope {}the capability map recipepassed1.89 ms
    returns summary/full parity with explicit omissions for scope {"epic":"spec:probe.epic"}the capability map recipepassed1.4 ms
    normalizes prose and unflagged questions while preserving authored indicesthe capability map recipepassed0.43 ms
    retains null titles in serialized node and epic rows when a title degradesthe capability map recipepassed0.78 ms
    reports a self-refining epic as a cycle without making it its own parent epicthe capability map recipepassed0.37 ms
    uses the outside unreached parent as root rather than its child cycle groupthe capability map recipepassed0.71 ms
    selects an epic of kind behavior without changing its kindthe capability map recipepassed0.82 ms
    selects an epic of kind workflow without changing its kindthe capability map recipepassed0.51 ms
    selects an epic of kind example without changing its kindthe capability map recipepassed0.46 ms
    selects an epic of kind rule without changing its kindthe capability map recipepassed0.45 ms
    selects an epic of kind constraint without changing its kindthe capability map recipepassed0.46 ms
    selects an epic of kind model without changing its kindthe capability map recipepassed0.4 ms
    selects an epic of kind decision without changing its kindthe capability map recipepassed0.44 ms
    selects an epic of kind contract without changing its kindthe capability map recipepassed0.39 ms
    reads node evidence and ordered questions directly, including examples and decisions as parentsthe capability map recipepassed1.06 ms
    represents a missing floor as none and keeps the epic's evidence outside its rollupthe capability map recipepassed0.68 ms
    counts stated rungs separately from reached floors without lending a bound example's facts to its epicthe capability map recipepassed1.57 ms
    keeps nested and overlapping memberships and outside parents when selecting one epicthe capability map recipepassed2.08 ms
    traverses only declared refinement and never infers ancestry from other graph structurethe capability map recipepassed0.94 ms
    reports cycles, self-links and unresolved or non-Spec endpoints separately from parameter failuresthe capability map recipepassed1.14 ms
    limits damage to edges touching a selected epic scope and terminates reached cyclesthe capability map recipepassed0.77 ms
    keeps overlapping unreached root scopes unique and exposes an empty corpusthe capability map recipepassed0.92 ms
    refuses invalid parameters without a map: { epic: null }the capability map recipepassed0.41 ms
    refuses invalid parameters without a map: { epic: 1 }the capability map recipepassed0.24 ms
    refuses invalid parameters without a map: { epic: [] }the capability map recipepassed0.23 ms
    refuses invalid parameters without a map: { epic: 'spec:probe.absent' }the capability map recipepassed0.24 ms
    refuses invalid parameters without a map: { epic: 'spec:probe.plain' }the capability map recipepassed0.26 ms
    refuses invalid parameters without a map: { epic: 'impl:probe.non-spec' }the capability map recipepassed0.21 ms
    refuses invalid parameters without a map: { detail: 'true' }the capability map recipepassed0.2 ms
    refuses invalid parameters without a map: { detail: 1 }the capability map recipepassed0.2 ms
    refuses invalid parameters without a map: { detail: null }the capability map recipepassed0.19 ms
    refuses invalid parameters without a map: { epic: 1, detail: 'x' }the capability map recipepassed0.34 ms
    checks unknown names before known valuesthe capability map recipepassed0.27 ms
    answers deterministically in code-unit id order even when graph arrays are reversedthe capability map recipepassed3.02 ms
    reaches every Spec from the intended epic owners while preserving kinds and overlapping refinementthe Protocol's capability epicspassed310.23 ms
    keeps refinement and dependency from spec:extraction.build-pipeline to spec:extraction.derive-graphthe Protocol's capability epicspassed3.9 ms
    keeps refinement and dependency from spec:validation.corpus-rules to spec:consumers.agent-surfacethe Protocol's capability epicspassed10.19 ms
    keeps refinement and dependency from spec:validation.architecture-constraints to spec:validation.corpus-rulesthe Protocol's capability epicspassed7.34 ms
    keeps refinement and dependency from spec:validation.external-registers to spec:validation.corpus-rulesthe Protocol's capability epicspassed5.95 ms
    keeps every ready statement at the ready floor and leaves the drift alarm emptythe Protocol's capability epicspassed176.26 ms
    runs the catalog body over the arc Pack through the CLI and keeps its summary totalsthe shipped design slicepassed730.23 ms
    runs the roadmap and its memo from the catalog over a named Packnot recordedpassed845.3 ms
    pins the adopter roadmap and its forward memo over the worked examplenot recordedpassed35.88 ms
    is left out of readiness divergence rather than read as below ideaa floor the reader does not evaluatepassed4.45 ms
    answers promotion preflight as not evaluated, with no floor reading to pass or faila floor the reader does not evaluatepassed2.32 ms
    labels the lower ladder and names no next rung nothing blocksa floor the reader does not evaluatepassed2.33 ms
    reads as not evaluated in every recipe row that reports the floor reacheda floor the reader does not evaluatepassed22.58 ms
    counts it in the capability map's totals and rollups, beside an unratified kind or altitudea floor the reader does not evaluatepassed6.27 ms
    counts a footing target it holds in dependency footing's totalsa floor the reader does not evaluatepassed3.09 ms
    puts the roadmap entries to design and renders their memo rows as not evaluateda floor the reader does not evaluatepassed13.81 ms
    counts foreign readiness done as unratified without changing structural bucketsdependency footing with unratified stated readinesspassed88.46 ms
    counts foreign readiness __proto__ as unratified without changing structural bucketsdependency footing with unratified stated readinesspassed91.31 ms
    counts foreign readiness constructor as unratified without changing structural bucketsdependency footing with unratified stated readinesspassed50.78 ms
    counts foreign readiness unresolved as unratified without changing structural bucketsdependency footing with unratified stated readinesspassed28.4 ms
    counts foreign readiness nonSpec as unratified without changing structural bucketsdependency footing with unratified stated readinesspassed61.16 ms
    counts foreign readiness constructor without losing a member or decisionrecipe 5 readiness tallies with foreign valuespassed39.78 ms
    counts foreign readiness __proto__ without losing a member or decisionrecipe 5 readiness tallies with foreign valuespassed48.27 ms
    counts foreign readiness done without losing a member or decisionrecipe 5 readiness tallies with foreign valuespassed42.41 ms
    counts foreign readiness constructor without losing a member or decisionrecipe 31 readiness tallies with foreign valuespassed31.33 ms
    counts foreign readiness __proto__ without losing a member or decisionrecipe 31 readiness tallies with foreign valuespassed32.52 ms
    counts foreign readiness done without losing a member or decisionrecipe 31 readiness tallies with foreign valuespassed30.64 ms
Design view

Requirement drawing

  • Declared verifying examples: no declared verifying example.
Requirement drawing for spec:consumers.agent-surface.recipe-parameters
Requirement drawing for spec:consumers.agent-surface.recipe-parameterssatisfies · anchoredsatisfies · anchoredsatisfies · anchoredsatisfies · anchoredrefines · declaredverifies · anchoredverifies · anchoredverifies · anchoredIntended Specsspec:consumers.agent-surface.recipe-parametersRecipes take parameters asdata and ship as runnablefiles…consumers.agent-surface.recipe-parametersdeclared SpecSatisfying or referencingunitsimpl:protocol.build-artifactsthe build step that writeseach catalog recipe todist/recipes and recordsthe build commit beside theCLI…protocol.build-artifactsanchored codeimpl:protocol.parameter-codecdecodes recipe parametersand refuses duplicate keys…protocol.parameter-codecanchored codeimpl:protocol.query-paramsreads --params as JSON dataand injects it as thesink's fourth binding,paramsimpl:protocol.query-paramsanchored codeimpl:protocol.recipe-parameters-catalogasserts realization of thecatalog recipes that readtheir parameter from params…protocol.recipe-parameters-cataloganchored codeTest or oracle bindingstest:protocol.query-answer-shapestest:protocol.query-answer-shapes…protocol.query-answer-shapesanchored test binding ·binding presenttest:protocol.query-paramsfront-door checks verify--params as the fourthbinding and its refusalstest:protocol.query-paramsanchored test binding ·binding presenttest:protocol.recipe-parametersrecipe checks verifyparameters passed as dataand the shipped recipe files…protocol.recipe-parametersanchored test binding ·binding presentOutside the selected setspec:consumers.agent-surfaceAgents script a visibletyped graph…consumers.agent-surfacedeclared Spec
The diagram as text
  • spec:consumers.agent-surface.recipe-parameters: Recipes take parameters as data and ship as runnable files · declared Spec
  • spec:consumers.agent-surface: Agents script a visible typed graph · declared Spec
  • impl:protocol.build-artifacts: the build step that writes each catalog recipe to dist/recipes and records the build commit beside the CLI · anchored code · src/cli/build-artifacts.ts:203
  • impl:protocol.parameter-codec: decodes recipe parameters and refuses duplicate keys · anchored code · src/cli/params.ts:121
  • impl:protocol.query-params: reads --params as JSON data and injects it as the sink's fourth binding, params · anchored code · src/cli/q-command.ts:71
  • impl:protocol.recipe-parameters-catalog: asserts realization of the catalog recipes that read their parameter from params · anchored code · test/recipes.test.ts:4466
  • test:protocol.query-answer-shapes: test:protocol.query-answer-shapes · anchored test binding · binding present · test/cli-q.test.ts:730
  • test:protocol.query-params: front-door checks verify --params as the fourth binding and its refusals · anchored test binding · binding present · test/cli-q.test.ts:509
  • test:protocol.recipe-parameters: recipe checks verify parameters passed as data and the shipped recipe files · anchored test binding · binding present · test/recipes.test.ts:4472
  • spec:consumers.agent-surface.recipe-parameters refines spec:consumers.agent-surface · declared
  • impl:protocol.build-artifacts satisfies spec:consumers.agent-surface.recipe-parameters · anchored
  • impl:protocol.parameter-codec satisfies spec:consumers.agent-surface.recipe-parameters · anchored
  • impl:protocol.query-params satisfies spec:consumers.agent-surface.recipe-parameters · anchored
  • impl:protocol.recipe-parameters-catalog satisfies spec:consumers.agent-surface.recipe-parameters · anchored
  • test:protocol.query-answer-shapes verifies spec:consumers.agent-surface.recipe-parameters · anchored
  • test:protocol.query-params verifies spec:consumers.agent-surface.recipe-parameters · anchored
  • test:protocol.recipe-parameters verifies spec:consumers.agent-surface.recipe-parameters · anchored
Mermaid source

Copyable source; the Studio draws static SVG.

Preferred and chosen syntax: requirementDiagram; exact refines, satisfies and verifies, with claim words in nodes and per-edge comments.

Decisions

Runtime
  • component:protocol.cli · entry points, shared build and publication · src/cli/build-command.ts:31 · layer edge · context protocol

    Uses

    • component:protocol.adapters · external runtime and source adapters · src/adapters/vitest.ts:23 · layer adapter · context protocol
    • component:protocol.codegen · contracts and registrar output · src/codegen/contracts.ts:671 · layer application · context protocol
    • component:protocol.extract · the carrier and source pipeline · src/extract/index.ts:197 · layer application · context protocol
    • component:protocol.graph · the one graph and its semantic decisions · src/graph/schema.ts:34 · layer domain · context protocol
    • component:protocol.import · canonical conversion with a fidelity boundary · src/import/import.ts:45 · layer application · context protocol
    • component:protocol.model · the authored contracts and stable ids · src/model/anchors.ts:100 · layer domain · context protocol
    • component:protocol.projections · read-only output, layout and owned publication · src/projections/design-review.ts:29 · layer edge · context protocol
    • component:protocol.reader · the typed graph contract and body evaluator · src/reader/reader.ts:697 · layer application · context protocol
    • component:protocol.validate · one finding currency and ordered checks · src/validate/validators.ts:76 · layer domain · context protocol
  • impl:protocol.build-artifacts · the build step that writes each catalog recipe to dist/recipes and records the build commit beside the CLI · src/cli/build-artifacts.ts:203

    Component: component:protocol.cli · entry points, shared build and publication · src/cli/build-command.ts:31 · layer edge · context protocol

    Uses

    None.

  • impl:protocol.parameter-codec · decodes recipe parameters and refuses duplicate keys · src/cli/params.ts:121

    Component: component:protocol.cli · entry points, shared build and publication · src/cli/build-command.ts:31 · layer edge · context protocol

    Uses

    None.

  • impl:protocol.query-params · reads --params as JSON data and injects it as the sink's fourth binding, params · src/cli/q-command.ts:71

    Component: component:protocol.cli · entry points, shared build and publication · src/cli/build-command.ts:31 · layer edge · context protocol

    Uses

    None.

  • impl:protocol.recipe-parameters-catalog · asserts realization of the catalog recipes that read their parameter from params · test/recipes.test.ts:4466

    Uses

    None.

Runtime observation: not tracked.

Evidence

Runtime observation: not tracked.

Build attestations: not tracked.

Deployments: not tracked.

Bills of materials: not tracked.

Impact
Relations of spec:consumers.agent-surface.recipe-parameters
The diagram as text
  • spec:consumers.agent-surface: Agents script a visible typed graph
  • spec:consumers.agent-surface.address-and-cycle-recipes: Address resolution and dependency cycles stay executable graph recipes
  • spec:consumers.agent-surface.design-recipes: Design work reads its answers from catalog recipes
  • spec:consumers.agent-surface.recipe-parameters: Recipes take parameters as data and ship as runnable files
  • spec:consumers.design-diff: Designs are compared between a base commit and the working tree at entry grain
  • spec:decisions.agent-front-door: The agent front door is one evaluation sink over the exported reader
  • spec:observation.run-evidence: CI run records are joined to verifiers in a view
  • spec:validation.corpus-rules: Corpus-authored rules run on the one validation path
  • spec:validation.external-registers: A corpus checks the register tokens its prose cites
  • spec:consumers.agent-surface.recipe-parameters decidedBy spec:decisions.agent-front-door · declared
  • spec:consumers.agent-surface.recipe-parameters refines spec:consumers.agent-surface · declared
  • spec:consumers.agent-surface.address-and-cycle-recipes dependsOn spec:consumers.agent-surface.recipe-parameters · declared — address resolution reads its addresses from params
  • spec:consumers.agent-surface.design-recipes dependsOn spec:consumers.agent-surface.recipe-parameters · declared
  • spec:consumers.design-diff dependsOn spec:consumers.agent-surface.recipe-parameters · declared — the base graph is supplied as recipe-parameter data, including the KEY=@PATH file form
  • spec:observation.run-evidence dependsOn spec:consumers.agent-surface.recipe-parameters · declared — the caller passes run records to the recipe as data
  • spec:validation.corpus-rules dependsOn spec:consumers.agent-surface.recipe-parameters · declared — validate takes `--params` in the sink's grammar
  • spec:validation.external-registers dependsOn spec:consumers.agent-surface.recipe-parameters · declared — the register arrives as data through `--params register=@PATH`
Mermaid source

Copyable source; the Studio draws static SVG.

Preferred syntax: flowchart. Chosen syntax: labelled flowchart, preserving exact relations, claims and folds.

Rests on

Rested on by

Distance 1

Distance 2

Distance 3

Distance 4

Distance 5

Distance 6

Distance 7

Distance 8

Relations

Relation and directionOther endClaimReasonExercised keys
decidedBy · outgoingThe agent front door is one evaluation sink over the exported reader
spec:decisions.agent-front-door · resolves
declaredNoneNone
refines · outgoingAgents script a visible typed graph
spec:consumers.agent-surface · resolves
declaredNoneNone
dependsOn · incomingAddress resolution and dependency cycles stay executable graph recipes
spec:consumers.agent-surface.address-and-cycle-recipes · resolves
declaredaddress resolution reads its addresses from paramsNone
dependsOn · incomingDesign work reads its answers from catalog recipes
spec:consumers.agent-surface.design-recipes · resolves
declaredNoneNone
dependsOn · incomingDesigns are compared between a base commit and the working tree at entry grain
spec:consumers.design-diff · resolves
declaredthe base graph is supplied as recipe-parameter data, including the KEY=@PATH file formNone
dependsOn · incomingCI run records are joined to verifiers in a view
spec:observation.run-evidence · resolves
declaredthe caller passes run records to the recipe as dataNone
dependsOn · incomingCorpus-authored rules run on the one validation path
spec:validation.corpus-rules · resolves
declaredvalidate takes --params in the sink's grammarNone
dependsOn · incomingA corpus checks the register tokens its prose cites
spec:validation.external-registers · resolves
declaredthe register arrives as data through --params register=@PATHNone

Bindings

Implementation binding: present

  • impl:protocol.build-artifacts · the build step that writes each catalog recipe to dist/recipes and records the build commit beside the CLI · src/cli/build-artifacts.ts:203 · role publisher · component component:protocol.cli · layer edge · context protocol
  • impl:protocol.parameter-codec · decodes recipe parameters and refuses duplicate keys · src/cli/params.ts:121 · role codec · component component:protocol.cli · layer edge · context protocol
  • impl:protocol.query-params · reads --params as JSON data and injects it as the sink's fourth binding, params · src/cli/q-command.ts:71 · role service · component component:protocol.cli · layer edge · context protocol
  • impl:protocol.recipe-parameters-catalog · asserts realization of the catalog recipes that read their parameter from params · test/recipes.test.ts:4466

Design reference: none

Verifier binding: present

  • test:protocol.query-answer-shapes · anchored · test/cli-q.test.ts:730 · test anchor
  • test:protocol.query-params · front-door checks verify --params as the fourth binding and its refusals · anchored · test/cli-q.test.ts:509 · test anchor
  • test:protocol.recipe-parameters · recipe checks verify parameters passed as data and the shipped recipe files · anchored · test/recipes.test.ts:4472 · test anchor

Expected-outcome oracle: none

Runtime observation: not tracked.

Run results: not recorded in the graph.

Findings

None.

Composing (0)

Composing needs the script.