outcomeThe engine's architectural roles each name one pattern
spec:protocol.role-vocabularyPacks: pack:roadmaps-and-slices-v1, pack:self-hosting-v1
Design: 5 design entries · no pinned declarations · 1 decision
Findings: no errors, 1 warning
specs/protocol/role-vocabulary.sdp.md
No open questions and no blocking questions; implementation binding present, verifier binding none, and expected-outcome oracle none.
Authors choose a role by the architectural responsibility a unit owns. The same responsibility uses the same word across the engine. These definitions are this corpus's design vocabulary, not a Protocol enum or a registry a validator checks. An adopter may use other roles for its own architecture.
Intent
- Define each architectural role the engine's anchors use, so the accepted set of significant units reads as a curated register of the engine's patterns and abstractions.
Model
adapter · term.adapterline 22 ·specs/protocol/role-vocabulary.sdp.md:22- Connects an external tool or runtime to an engine contract, such as a test runner or a TypeScript import reader.
codec · term.codecline 23 ·specs/protocol/role-vocabulary.sdp.md:23- Parses, normalizes or encodes a representation while preserving the meaning owned by its contract, such as ids, carrier text, parameter input or source links.
contract · term.contractline 24 ·specs/protocol/role-vocabulary.sdp.md:24- Owns a shared interface, data shape, closed vocabulary or public boundary that independently developed callers and providers must agree on.
decider · term.deciderline 25 ·specs/protocol/role-vocabulary.sdp.md:25- Computes a semantic answer from explicit inputs without reading or writing external state, such as delivery facts or example eligibility.
extractor · term.extractorline 26 ·specs/protocol/role-vocabulary.sdp.md:26- Reads authored carriers or source bindings, or composes their reified results, into the graph and its located evidence.
interaction · term.interactionline 27 ·specs/protocol/role-vocabulary.sdp.md:27- Adds browser controls and feedback to build-rendered content without owning its graph joins or layout. This is a corpus role for optional element behavior.
projection · term.projectionline 28 ·specs/protocol/role-vocabulary.sdp.md:28- Derives read-only presentation or generated contract content from the graph, the reader or an explicitly supplied answer. A page fragment and a complete page use the same role when both own presentation.
publisher · term.publisherline 29 ·specs/protocol/role-vocabulary.sdp.md:29- Writes or synchronizes an owned artifact set, including its path checks, replacement, recovery and clean comparison.
index · term.indexline 30 ·specs/protocol/role-vocabulary.sdp.md:30- Builds a disposable lookup structure over the graph for the units that query it; it holds no authored state and is never a second read model.
reader · term.readerline 31 ·specs/protocol/role-vocabulary.sdp.md:31- Answers queries over graph content, resolving or joining recorded identities and bindings without reading source files.
service · term.serviceline 32 ·specs/protocol/role-vocabulary.sdp.md:32- Coordinates a use case or pipeline across collaborators, including execution and failure handling, while each collaborator owns its own contract.
validator · term.validatorline 33 ·specs/protocol/role-vocabulary.sdp.md:33- Evaluates a stated contract and reports its failures, including readiness clauses, import fidelity and corpus-selected checks. A role does not determine a Protocol validator family.
Design
roleChoiceline 37 ·specs/protocol/role-vocabulary.sdp.md:37- Use the dominant responsibility of the anchored unit. A catalog of shared shapes is a contract, a table computing a semantic answer is a decider, and a failure-producing check is a validator. File size, caller count and naming style never select a role.
componentRoleline 38 ·specs/protocol/role-vocabulary.sdp.md:38- A component anchor's role names the dominant architectural responsibility its members serve together, read from their reviewed responsibilities rather than a count of role tokens. Omit the role when no responsibility dominates.
presentationWordline 39 ·specs/protocol/role-vocabulary.sdp.md:39- Use projection for pure page, fragment and text-equivalent rendering. Use publisher for filesystem publication, codec for representation encoding and interaction for optional DOM behavior; a unit that presents uses projection, never renderer.
helperWordline 40 ·specs/protocol/role-vocabulary.sdp.md:40- Choose a specific responsibility after reading the code. Graph indexes use index, concept queries use reader, parameter and path encoders use codec, browser controls use interaction and test-runtime integration uses adapter.
freeVocabularyline 41 ·specs/protocol/role-vocabulary.sdp.md:41- These Model terms explain the engine's role values. Token grammar remains the only Protocol check on role, omission remains lawful, and this Model is not an adopter-wide allowlist; the self-hosting suite pins each accepted engine unit's role.
Verification · reviewed
criteria- Compare the graph's role taxonomy with these meanings and review every renamed unit against its implementation; keep an unfamiliar adopter role visible without reporting a Protocol finding.
- Check that pure presentation uses projection across the Markdown and Studio implementations, and that publication and optional browser interaction retain their distinct responsibilities.
mode- reviewed
Verification
Verifier bindings
No verifier binding recorded.
Design view
Requirement drawing
- Declared verifying examples: no declared verifying example.
- Test or oracle bindings: no recorded binding.
The diagram as text
- spec:protocol.role-vocabulary: The engine's architectural roles each name one pattern · declared Spec
- spec:protocol.structural-self-binding: The engine's structural self-binding covers its architecturally significant units · declared Spec
- impl:protocol.role-vocabulary: asserts realization of the role vocabulary in the engine anchors' pinned roles · anchored code ·
test/self-hosting-graph.test.ts:143 - spec:protocol.role-vocabulary refines spec:protocol.structural-self-binding · declared — names what each role value the engine's significant units carry means
- impl:protocol.role-vocabulary satisfies spec:protocol.role-vocabulary · 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
- Architectural significance is annotated where it is realized
Architectural significance is annotated on the anchor of the unit that realizes it. A code anchor may carry
role, the architectural pattern the unit plays; acomponent:anchor may additionally carrylayer, one ofedge,application,domain,adapter, orinfrastructure, andcontext, its bounded context. Thecomponent:anchor is anchored architecture: it is the declared component, and there is no separate architecture file, because the anchor sits where the component is realized. It is not the original design's declared Component that could exist before code; an unrealized component lives in Specs and never as an invented CodeNode. A role is a free, corpus-owned vocabulary whose taxonomy the census renders with counts from the graph;service,decider,projection,read-model,codec,contract,barrel, andutilityare the lineage set, not a closed list.layeris a closed set, and a value outside it is an envelope error;layerorcontexton a non-component anchor is an envelope error. All three attributes are optional, and omission is lawful.
Runtime
impl:protocol.role-vocabulary· asserts realization of the role vocabulary in the engine anchors' pinned roles ·test/self-hosting-graph.test.ts:143Uses
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:decisions.architectural-annotation: Architectural significance is annotated where it is realized
- spec:protocol.role-vocabulary: The engine's architectural roles each name one pattern
- spec:protocol.significant-units-review: The engine's accepted set covers its significant abstractions and only those
- spec:protocol.structural-self-binding: The engine's structural self-binding covers its architecturally significant units
- spec:protocol.role-vocabulary decidedBy spec:decisions.architectural-annotation · declared
- spec:protocol.role-vocabulary refines spec:protocol.structural-self-binding · declared — names what each role value the engine's significant units carry means
- spec:protocol.significant-units-review dependsOn spec:protocol.role-vocabulary · 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:protocol.structural-self-binding · stated ready, floor ready
- decidedBy · spec:decisions.architectural-annotation · stated ready, floor ready
Rested on by
Distance 1
- spec:protocol.significant-units-review
Implementing units
impl:protocol.structural-self-binding·test/self-hosting-oracle/structural-edges.ts:76
Referencing units
None.
Enabled verifiers: test:protocol.structural-self-binding
Relations
| Relation and direction | Other end | Claim | Reason | Exercised keys |
|---|---|---|---|---|
| decidedBy · outgoing | Architectural significance is annotated where it is realizedspec:decisions.architectural-annotation · resolves | declared | None | None |
| refines · outgoing | The engine's structural self-binding covers its architecturally significant unitsspec:protocol.structural-self-binding · resolves | declared | names what each role value the engine's significant units carry means | None |
| dependsOn · incoming | The engine's accepted set covers its significant abstractions and only thosespec:protocol.significant-units-review · resolves | declared | None | None |
Bindings
Implementation binding: present
impl:protocol.role-vocabulary· asserts realization of the role vocabulary in the engine anchors' pinned roles ·test/self-hosting-graph.test.ts:143
Design reference: none
Verifier binding: none
Expected-outcome oracle: none
Runtime observation: not tracked.
Run results: not recorded in the graph.
Findings
- warning ·
honesty/gaps· spec:protocol.role-vocabulary · Spec "spec:protocol.role-vocabulary" states readiness "ready" with no resolving verifier — a gap, informative only (ready never requires delivery facts). ·specs/protocol/role-vocabulary.sdp.md
Composing (0)
Composing needs the script.