outcomeSearch finds a Spec, a Pack, an entry or a bound file by a word
spec:consumers.spec-studio.searchPacks: pack:self-hosting-v1, pack:spec-studio-v1
Design: 6 design entries · no pinned declarations · no decisions
Findings: no errors, no warnings
specs/consumers/spec-studio.search.sdp.md
No open questions and no blocking questions; implementation binding present, verifier binding present, and expected-outcome oracle none.
The first adopter asked to search entry keys, pinned declarations and file paths. A Spec's envelope holds no tags, so search reads what the graph holds: the fields concept search reads, which already include every pinned declaration, plus the keys authors coin and the files the graph records. The page matches with the reader's own code, so a term finds on the page what findByConcept finds through sdp q.
Intent
- Let a person find a Spec, a Pack, a keyed entry or the code bound at a file by a word they remember of it, from any page and with no request.
Behavior
rule.oneMatcherline 21 ·specs/consumers/spec-studio.search.sdp.md:21- Search matches with the reader's concept matching, one implementation the package exports without Node dependencies and the page script bundles, so over the fields
findByConceptreads, the page returns the nodes it returns, in its order.no example exercises it
rule.addedFieldsline 22 ·specs/consumers/spec-studio.search.sdp.md:22- Search also matches the keys authors coin, Design and UI keys, open question keys and rule keys, and a node's recorded file path; a node matched only through these follows every node
findByConceptmatches, in id order. It indexes nothing else.no example exercises it
ruleline 23 ·specs/consumers/spec-studio.search.sdp.md:23- A term matches where it appears in a field, without regard to case, as
findByConceptmatches; an empty term matches nothing. rule.searchPageline 24 ·specs/consumers/spec-studio.search.sdp.md:24- The search field on any page opens the search page with the term in its fragment,
search.html#q=<term>; the search page matches as the person types and keeps the term in its fragment, so a search is a link.no example exercises it
rule.resultShapeline 25 ·specs/consumers/spec-studio.search.sdp.md:25- Each result names its node type in words. A Spec result shows its title, id, kind, and stated rung beside the floor reached, and opens its page; a Pack result shows its title and id and opens its page, with no readiness; an Anchor or CodeNode result shows its id, label, and recorded file and line as text with a copy action, and links each Spec its edges reach, with the edge type.
no example exercises it
rule.entryHitsline 26 ·specs/consumers/spec-studio.search.sdp.md:26- A Spec with a matching entry is a result. Under a Spec result, the page lists the Spec's entries the term matches, as
spec:consumers.spec-studio.data#design.searchEntrystates, in the index's order, each with its section, key and recorded line, linked to the entry's element id on the Spec page when it has an entry address, and otherwise to its section's element id, or to the narrative's.no example exercises it
ruleline 27 ·specs/consumers/spec-studio.search.sdp.md:27- The page shows fifty results at a time, with a control that shows the next fifty.
ruleline 28 ·specs/consumers/spec-studio.search.sdp.md:28- The search page reads only the index it embeds; it fetches nothing and joins nothing.
3 unkeyed rules.
UI
searchFieldline 31 ·specs/consumers/spec-studio.search.sdp.md:31- a labelled text field and a Search button in the top navigation of every page.
resultsHeaderline 32 ·specs/consumers/spec-studio.search.sdp.md:32- the term, how many nodes and entries match, and the fields searched.
resultCardline 33 ·specs/consumers/spec-studio.search.sdp.md:33- one card per node, in result order: its node type in words, title and id, the fields that matched, and the Spec's rungs or the unit's location as the result rule states; then its entry hits.
entryHitline 34 ·specs/consumers/spec-studio.search.sdp.md:34- one line per entry: its section, its key as code, its recorded line, and the text around the term, shortened.
noMatchline 35 ·specs/consumers/spec-studio.search.sdp.md:35No node matchesand the term, then the fields searched.needsScriptline 36 ·specs/consumers/spec-studio.search.sdp.md:36- without script, the search page says that search needs it and links to the index.
Verification
Verifier bindings
- test:protocol.studio-concept-match · anchored · test anchor binding present ·
test/concept-match.test.ts:9External run evidence from
test/concept-match.test.tsTest anchors:
test:protocol.studio-concept-match. Specs verified by those bindings: spec:consumers.spec-studio.search.Run 1: external run evidence from vitest 4.1.10
Build: CI 391 · Branch: cursor/media-plan-and-articles-09b1 · Commit: 076cd4f1f85640d8236e5cca1bffffa68ab79a33 · Start: 2026-10-31T15:32:20.471Z · Stop: 2026-10-31T15:34:02.073Z
Name Suite Result Duration ships a standalone matcher module with no Node dependency the concept matcher shared by the reader and Studio passed 1.71 ms keeps reader results and their order for "order" on both corpora the concept matcher shared by the reader and Studio passed 160.75 ms keeps reader results and their order for "ready" on both corpora the concept matcher shared by the reader and Studio passed 128.9 ms keeps reader results and their order for "sentinel" on both corpora the concept matcher shared by the reader and Studio passed 81.92 ms keeps reader results and their order for "POST /ORDERS" on both corpora the concept matcher shared by the reader and Studio passed 98.71 ms keeps reader results and their order for "inventorySnapshot" on both corpora the concept matcher shared by the reader and Studio passed 68.28 ms keeps reader results and their order for "given" on both corpora the concept matcher shared by the reader and Studio passed 61.51 ms keeps reader results and their order for "" on both corpora the concept matcher shared by the reader and Studio passed 33.99 ms keeps reader results and their order for " " on both corpora the concept matcher shared by the reader and Studio passed 36.06 ms pins ranking and the fields the reader scans independently of its caller the concept matcher shared by the reader and Studio passed 0.38 ms appends only coined-key and file matches, after concept matches the concept matcher shared by the reader and Studio passed 0.39 ms - test:protocol.studio-page-elements · anchored · test anchor binding present ·
test/studio-elements.test.ts:26External run evidence from
test/studio-elements.test.tsTest anchors:
test:protocol.studio-page-elements. Specs verified by those bindings: spec:consumers.spec-studio.page-elements, spec:consumers.spec-studio.search.Run 1: external run evidence from vitest 4.1.10
Build: CI 391 · Branch: cursor/media-plan-and-articles-09b1 · Commit: 076cd4f1f85640d8236e5cca1bffffa68ab79a33 · Start: 2026-10-31T15:32:20.471Z · Stop: 2026-10-31T15:34:02.073Z
Name Suite Result Duration offers a prompt before searching and puts a real miss before the field list Studio page interactions passed 2.5 ms writes singular counts, readable fields, code-span titles and linked entry keys Studio page interactions passed 4.55 ms cuts long excerpts at word boundaries around the term Studio page interactions passed 0.45 ms copies the requested text and reports successful clipboard writes Studio page interactions passed 1.17 ms selects copy text when the clipboard is missing or rejects access Studio page interactions passed 0.47 ms decodes entry fragments literally and refuses malformed fragment escapes Studio page interactions passed 0.29 ms filters all filters together and accepts space-separated row values Studio page interactions passed 1.76 ms clears the filter when a link or fragment targets a row it hides Studio page interactions passed 4.64 ms round-trips term fragments including punctuation, spaces and Unicode Studio page interactions passed 0.49 ms matches entry tokens, and non-string values only by their coined key Studio page interactions passed 0.56 ms keeps a node whose only match is a tokenized coined entry key Studio page interactions passed 0.36 ms reads authored values at most twice per search, regardless of the entry count Studio page interactions passed 2.89 ms links addressed hits to the entry and other hits to their section or narrative Studio page interactions passed 0.2 ms groups entries beneath each node and pages fifty nodes at a time Studio page interactions passed 3.35 ms renders node words, independent rungs, bindings, locations and escaped text Studio page interactions passed 2.03 ms requests a stamp only over HTTP and HTTPS and shows only its text fields Studio page interactions passed 0.51 ms loads the built classic bundle without imports and defines the page and view elements Studio page interactions passed 1.94 ms names a question copy control with the full entry address and updates it Studio page interactions passed 1.01 ms uses the navigation search input, announces the empty prompt and reveals paging progress Studio page interactions passed 9.42 ms enhances a diagram through its view box, preserves links on click and removes handlers not recorded passed 3.07 ms - test:protocol.studio-pages · anchored · test anchor binding present ·
test/studio-pages.test.ts:18External run evidence from
test/studio-pages.test.tsTest anchors:
test:protocol.studio-pages. Specs verified by those bindings: spec:consumers.spec-studio.index-page, spec:consumers.spec-studio.pack-page, spec:consumers.spec-studio.search, spec:consumers.spec-studio.shell, spec:consumers.spec-studio.spec-page.core.Run 1: external run evidence from vitest 4.1.10
Build: CI 391 · Branch: cursor/media-plan-and-articles-09b1 · Commit: 076cd4f1f85640d8236e5cca1bffffa68ab79a33 · Start: 2026-10-31T15:32:20.471Z · Stop: 2026-10-31T15:34:02.073Z
Name Suite Result Duration rejects malformed page links: <div id="same"></div><div id="same"></div> not recorded passed 3.03 ms rejects malformed page links: <a href="missing.html">Missing</a> not recorded passed 0.61 ms rejects malformed page links: <a href="#missing">Missing</a> not recorded passed 0.42 ms rejects malformed page links: <a href="https://example.com">Outside</a> not recorded passed 0.3 ms renders Model definitions without exposing the derived term key map Studio static pages passed 9.63 ms frames every browsing page with a skip link, labelled search, rail, canvas, classic script and stamp Studio static pages passed 2.2 ms lists example-space owners only in Pack and Spec rails Studio static pages passed 0.36 ms shows a keyed question once with a copy action naming its full address Studio static pages passed 0.35 ms opens the index with counts, four task routes, every filter and stable section ids Studio static pages passed 0.84 ms gives each Spec row one rung badge and binding words Studio static pages passed 1.06 ms puts Pack totals before framing and folds holds into that summary Studio static pages passed 0.53 ms leaves member names out when every member waits only for its author Studio static pages passed 15.8 ms agrees each boundary verb with its count Studio static pages passed 13.16 ms shows only the Spec's own Packs in its rail and every Pack on the index Studio static pages passed 21.3 ms asserts every index summary sentence including fact-based verifier counts Studio static pages passed 10.79 ms renders code spans in titles on every page and strips them in document titles Studio static pages passed 13.22 ms orders rung filters by the ladder and uses none everywhere for an unmet idea floor Studio static pages passed 12.07 ms keeps navigation links outside Pack disclosure controls Studio static pages passed 0.23 ms labels next rungs, UI and finding links and avoids repeating absent bindings Studio static pages passed 0.49 ms renders Pack members in authored order, closed and with one colored badge per summary Studio static pages passed 0.7 ms renders the four Pack boundary sections and the verifier gap sentence once Studio static pages passed 0.29 ms shows the stated rung beside its floor and warns only in the dishonest direction Studio static pages passed 0.24 ms renders every section in order and every addressable entry with its key and recorded line Studio static pages passed 0.49 ms names the first unmet clause and renders a missing idea floor as none Studio static pages passed 5.38 ms shows question fields, code location, component, bindings and relations both ways Studio static pages passed 0.93 ms escapes authored text, reads only code spans and links resolving mentions Studio static pages passed 0.42 ms links validator-readable escaped mentions and preserves unequal code delimiters Studio static pages passed 0.36 ms shows findings on the index and only links page-bearing subjects Studio static pages passed 10.06 ms embeds the index only on search and supplies its element and no-script explanation Studio static pages passed 0.78 ms resolves all probe links including fragments in dynamic search results Studio static pages passed 9.25 ms keeps unresolved component bindings as text and resolves every remaining link Studio static pages passed 22.76 ms renders deterministically with no time or commit metadata Studio static pages passed 11.35 ms ships the native layout and focus stylesheet in the browser assets Studio static pages passed 0.4 ms resolves every page link and element fragment Protocol Studio page set passed 1364.19 ms contains the complete Spec prose without executing script Protocol Studio page set passed 103.58 ms
Design view
Requirement drawing
- Declared verifying examples: no declared verifying example.
The diagram as text
- spec:consumers.spec-studio.search: Search finds a Spec, a Pack, an entry or a bound file by a word · declared Spec
- spec:consumers.spec-studio.shell: The Studio's shell frames every page with navigation, a rail and a canvas · declared Spec
- impl:protocol.studio-concept-match: matches concepts deterministically across graph and browser queries · anchored code ·
src/reader/concept-match.ts:43 - impl:protocol.studio-search-page: publishes search records beside the browser results view · anchored code ·
src/projections/studio/pages/search-page.ts:5 - impl:protocol.studio-search-results: ranks and renders concept, entry and file search hits · anchored code ·
src/studio-elements/search-results.ts:95 - test:protocol.studio-concept-match: test:protocol.studio-concept-match · anchored test binding · binding present ·
test/concept-match.test.ts:9 - test:protocol.studio-page-elements: test:protocol.studio-page-elements · anchored test binding · binding present ·
test/studio-elements.test.ts:26 - test:protocol.studio-pages: test:protocol.studio-pages · anchored test binding · binding present ·
test/studio-pages.test.ts:18 - spec:consumers.spec-studio.search refines spec:consumers.spec-studio.shell · declared
- impl:protocol.studio-concept-match satisfies spec:consumers.spec-studio.search · anchored
- impl:protocol.studio-search-page satisfies spec:consumers.spec-studio.search · anchored
- impl:protocol.studio-search-results satisfies spec:consumers.spec-studio.search · anchored
- test:protocol.studio-concept-match verifies spec:consumers.spec-studio.search · anchored
- test:protocol.studio-page-elements verifies spec:consumers.spec-studio.search · anchored
- test:protocol.studio-pages verifies spec:consumers.spec-studio.search · 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
No decision record named.
Runtime
component:protocol.projections· read-only output, layout and owned publication ·src/projections/design-review.ts:29· layer edge · context protocol Uses
component:protocol.extract· the carrier and source pipeline ·src/extract/index.ts:192· 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.model· the authored contracts and stable ids ·src/model/anchors.ts:100· layer domain · context protocol component:protocol.notation· the leaf step codec ·src/notation/slots.ts:261· layer domain · context protocol component:protocol.reader· the typed graph contract and body evaluator ·src/reader/reader.ts:671· layer application · context protocol component:protocol.validate· one finding currency and ordered checks ·src/validate/validators.ts:72· layer domain · context protocol
component:protocol.reader· the typed graph contract and body evaluator ·src/reader/reader.ts:671· layer application · context protocol Uses
component:protocol.graph· the one graph and its semantic decisions ·src/graph/schema.ts:34· layer domain · context protocol component:protocol.model· the authored contracts and stable ids ·src/model/anchors.ts:100· layer domain · context protocol component:protocol.notation· the leaf step codec ·src/notation/slots.ts:261· layer domain · context protocol component:protocol.validate· one finding currency and ordered checks ·src/validate/validators.ts:72· layer domain · context protocol
component:protocol.studio-elements· optional browser behavior and proposal handoff ·src/studio-elements/index.ts:13· layer edge · context protocol Uses
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:671· layer application · context protocol
impl:protocol.studio-concept-match· matches concepts deterministically across graph and browser queries ·src/reader/concept-match.ts:43Component:
component:protocol.reader· the typed graph contract and body evaluator ·src/reader/reader.ts:671· layer application · context protocol Uses
None.
impl:protocol.studio-search-page· publishes search records beside the browser results view ·src/projections/studio/pages/search-page.ts:5Component:
component:protocol.projections· read-only output, layout and owned publication ·src/projections/design-review.ts:29· layer edge · context protocol Uses
None.
impl:protocol.studio-search-results· ranks and renders concept, entry and file search hits ·src/studio-elements/search-results.ts:95Component:
component:protocol.studio-elements· optional browser behavior and proposal handoff ·src/studio-elements/index.ts:13· layer edge · context protocol Uses
None.
Runtime observation: not tracked.
Evidence
Runtime observation: not tracked.
Build attestations: not tracked.
Deployments: not tracked.
Bills of materials: not tracked.
Impact
The diagram as text
- spec:consumers.reader: The reader bridges agent entry points to composable graph context
- spec:consumers.spec-studio.data: The Studio renders from the reader's values and embeds only what its script reads
- spec:consumers.spec-studio.page-elements: A few custom elements filter, search, open and copy on a rendered page
- spec:consumers.spec-studio.search: Search finds a Spec, a Pack, an entry or a bound file by a word
- spec:consumers.spec-studio.shell: The Studio's shell frames every page with navigation, a rail and a canvas
- spec:consumers.spec-studio.search dependsOn spec:consumers.reader · declared — the page matches with the reader's concept matching
- spec:consumers.spec-studio.search dependsOn spec:consumers.spec-studio.data · declared
- spec:consumers.spec-studio.search refines spec:consumers.spec-studio.shell · declared
- spec:consumers.spec-studio.page-elements dependsOn spec:consumers.spec-studio.search · declared
Mermaid source
Copyable source; the Studio draws static SVG.
Preferred syntax: flowchart. Chosen syntax: labelled flowchart, preserving exact relations, claims and folds.
Rests on
- refines · spec:consumers.spec-studio.shell · stated ready, floor ready
- dependsOn · spec:consumers.reader · stated ready, floor ready
- dependsOn · spec:consumers.spec-studio.data · stated ready, floor ready
Rested on by
Distance 1
- spec:consumers.spec-studio.page-elements
Implementing units
component:protocol.studio-elements·src/studio-elements/index.ts:13impl:protocol.studio-copy·src/studio-elements/copy.ts:22impl:protocol.studio-expander·src/studio-elements/expander.ts:16impl:protocol.studio-filter·src/studio-elements/filter.ts:25impl:protocol.studio-search-form·src/studio-elements/search.ts:18impl:protocol.studio-search-results·src/studio-elements/search-results.ts:95impl:protocol.studio-stamp·src/studio-elements/stamp.ts:30
Referencing units
None.
Enabled verifiers: test:protocol.studio-copy-source, test:protocol.studio-page-elements
Distance 2
- spec:consumers.spec-studio.diagram-kinds.mermaid-source
Implementing units
impl:protocol.studio-diagram-source·src/projections/studio/diagrams/mermaid.ts:13impl:protocol.studio-diagrams·src/projections/studio/diagrams/svg.ts:73
Referencing units
None.
Enabled verifiers: test:protocol.studio-diagram-core
Relations
| Relation and direction | Other end | Claim | Reason | Exercised keys |
|---|---|---|---|---|
| dependsOn · outgoing | The reader bridges agent entry points to composable graph contextspec:consumers.reader · resolves | declared | the page matches with the reader's concept matching | None |
| dependsOn · outgoing | The Studio renders from the reader's values and embeds only what its script readsspec:consumers.spec-studio.data · resolves | declared | None | None |
| refines · outgoing | The Studio's shell frames every page with navigation, a rail and a canvasspec:consumers.spec-studio.shell · resolves | declared | None | None |
| dependsOn · incoming | A few custom elements filter, search, open and copy on a rendered pagespec:consumers.spec-studio.page-elements · resolves | declared | None | None |
Bindings
Implementation binding: present
impl:protocol.studio-concept-match· matches concepts deterministically across graph and browser queries ·src/reader/concept-match.ts:43· role reader · component component:protocol.reader· layer application · context protocolimpl:protocol.studio-search-page· publishes search records beside the browser results view ·src/projections/studio/pages/search-page.ts:5· role projection · component component:protocol.projections· layer edge · context protocolimpl:protocol.studio-search-results· ranks and renders concept, entry and file search hits ·src/studio-elements/search-results.ts:95· role projection · component component:protocol.studio-elements· layer edge · context protocol
Design reference: none
Verifier binding: present
- test:protocol.studio-concept-match · anchored ·
test/concept-match.test.ts:9· test anchor - test:protocol.studio-page-elements · anchored ·
test/studio-elements.test.ts:26· test anchor - test:protocol.studio-pages · anchored ·
test/studio-pages.test.ts:18· 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.