Valence Protocol Specification#
This tier is generated. Edit the specification, not these pages.
Every page under Specification is produced from spec/SPEC.md
by docs-site/tools/gen_spec_pages.py. That file is the normative source and the only
place to make a change. A hand edit here is overwritten by the next
build, and --check fails the build before that happens.
There is deliberately no second copy of the normative text on this site. An implementer trusts a specification absolutely, so a specification that can drift from its source is a defect, not a convenience.
Protocol: valence/1
Document version: v1.0-draft (public, not yet pinned — see Freeze state)
Status: Normative in content; the numbers are NOT frozen.
Registry of record: registry/registry.yaml — Appendices A, B and G are generated views of it. On any conflict between this document and the registry, the registry wins (§5.7).
Companion normative artifacts: schema/catalog.cddl (Appendix C), vectors/manifest.yaml (Appendix F), RENDERING.md (client-rendering conformance, §19).
Non-normative companions: RFC-QUEUE.md (change history and rationale), V1-READINESS.md, examples/session-traces.md (Appendix E).
FREEZE STATE — read this before building against any number here. Clauses throughout this document and RENDERING.md bind "from the v1.0 tag forward": the never-reuse/never-renumber rule (§5.7), the conformance fixture freeze (§16), and RENDERING.md's enumerable-vocabulary freeze (§14). That event has not occurred. It is the release pin — one commit the operator locks once the protocol has been put through its paces, after which only documentation, clients, and tools move. Until the pin exists, every one of those clauses describes a future state and binds nothing: numbers, frozen fixtures, and vocabularies MAY still change, and a registry regeneration is explicitly planned to happen at the pin (RFC-QUEUE.md). Implement against this document freely — that is what it is for — but treat no number as stable yet, and pin by commit sha, never by this document's version string. This notice is deleted at the pin, and its deletion is the announcement.
0. Reading this document#
Clause numbering is §<section>.<subsection>. Every section header carries *(normative)* or *(informative)*; where a section is mixed, the exception is named in its header. Numbered lists inside a normative section are normative. Tables are normative unless the section says otherwise.
Honesty clauses are normative statements about what this protocol does not protect against or does not guarantee. They are marked HONESTY CLAUSE inline and indexed in §1.5. They are requirements, not caveats: an implementation that presents a protected-sounding UI over one of them is non-conformant.
The clause pages#
The document is split by concern. Clause numbering is unchanged: §6.4 is §6.4 wherever it is published.
Citing a clause#
Anchors are derived from clause numbers, never from heading text. A reworded heading therefore cannot break a citation made from a bug report or another repository.
| Clause | Anchor | Example |
|---|---|---|
| Section §n | #sn |
§11 |
| Subsection §n.m | #sn-m |
§6.4 |
| Appendix X | #appendix-x |
Appendix G |
| Trace En | #en |
E4 |
Numbered items and lettered paragraphs inside a clause — §5.8-4, §12.3a — resolve to their parent clause, which is where they are read from.
Companion artifacts#
The specification's companions live beside it in the source repository. Three of them are published on this site, generated the same way these pages are:
| Artifact | Where |
|---|---|
registry/registry.yaml — every wire number |
Registry reference, generated |
examples/session-traces.md — Appendix E |
Worked session traces, generated |
schema/catalog.cddl — Appendix C, the normative catalog encoding |
Catalog schema (CDDL), generated |
vectors/manifest.yaml — Appendix F, golden-vector coverage |
source repository |
RFC-QUEUE.md, V1-READINESS.md — change history and rationale |
source repository |
The register#
This tier is written in the IEEE and RFC normative register. Numbered clauses. RFC 2119 keywords. Exact cross-references. It is permitted to be dense: implementers need exactness more than approachability.
Glossary tooltips are stripped from every page in this tier. In a normative document every word is normative or visibly marked otherwise, so a hover definition over a term inside a MUST clause would be a second, invisible source of meaning. The Dictionary stays one click away.
Everything outside this tier is written in the STE register. See Contributing.