Appendix P. Exact documentation release bundle and agent-discovery contracts
Established unversioned v1.3 section URLs remain resolvable and identify their legacy status. They do not silently become aliases to edited v1.4 content.
#P1. Route topology
| Route | Contract |
|---|---|
| /substrate/ | living human landing and current-release discovery |
| /substrate/versions.json | release catalog with exact targets |
| /substrate/identity-index.json | stable ID to exact route per release |
| /substrate/v1.4.0/ | immutable canonical release landing |
| /substrate/v1.4/ | mutable edition alias to newest 1.4 patch |
| /substrate/latest/ | mutable alias to latest stable release |
| /substrate/v1.4.0/reference/{registeredRoute}/ | immutable canonical human section |
| matching section.md and section.json | immutable canonical machine section |
| /substrate/v1.4.0/manifest.json | exact exhaustive release manifest |
| /substrate/v1.4.0/migrations/from-v1.3.0.json | cross-release migration map |
| /substrate/v1.4.0/changes.json | machine-readable changelog |
| /substrate/v1.4.0/deprecations.json | lifecycle registry |
Established unversioned v1.3 section URLs remain resolvable and identify their legacy status. They do not silently become aliases to edited v1.4 content.
#P2. Release catalog and discovery
ReleaseCatalog {
schema, projectId, latestStableRelease, latestEditionAliases,
releases[{ edition, releaseVersion, schemaVersion, status,
canonicalBase, manifestUrl, manifestSha256,
sourceSha256, compatibility, publishedAt }],
credit, watermark
}
DocumentationDiscovery {
schema, projectId, humanEntry, versionsUrl,
latestStableManifest, identityIndexUrl,
agentInstructionsUrl, credit, watermark
}#P3. Exact release manifest
ReleaseManifest {
schema, projectId, edition, releaseVersion, schemaVersion,
status, canonicalBase, language, title, credit, watermark,
source{ filename, sha256, creator }, generatedAt,
profiles{}, compatibility{}, supersededClauses[],
migrationRefs[], changeRef, deprecationRef,
stats{}, sections[], fixtures[], schemas[],
artifacts[{ path, mediaType, byteLength, sha256 }],
releaseGate{ status, checks[], twoImplementationProof? }
}Artifact entries exclude the manifest and manifest.sha256. The manifest is serialized deterministically and manifest.sha256 covers its exact bytes. An optional detached signature signs the exact manifest bytes. Accepted exact releases refuse overwrite unless verification mode proves every byte equal.
#P4. Semantic and artifact digests
semanticDigest = SHA256(JCS({
schemaVersion, stableId, title, normativeStatus, blocks
}))
artifactSha256 = SHA256(exact_published_bytes)The semantic digest changes when normative content or stable meaning changes. The artifact digest changes for any byte-level representation change. Build timestamp, absolute source path, and local environment never enter semantic identity.
#P5. Section identity and migration entry
SectionIdentityEntry {
stableId, registeredRoute, title,
headingIds[], requirementIds[], fixtureIds[],
firstRelease, lifecycleStatus, replacementIds[]
}
MigrationEntry {
priorStableId, currentStableIds[], classification,
priorTitle, currentTitles[], priorUrls[], currentUrls[],
priorSemanticDigest, currentSemanticDigests[],
compatibilityImpact, affectedFixtureIds[], explanation
}classification is unchanged, modified, renamed, moved, split, merged, deprecated, or removed. Added records are listed with firstRelease. An unchanged classification requires equal semantic digests.
#P6. Build and acceptance sequence
Build all exact release artifacts in a new staging directory. 2. Validate source credit/watermark, stable identities, fixture uniqueness, schemas, cross-links, and canonical routes. 3. Hash every artifact and write the exhaustive manifest. 4. Hash and optionally sign the exact manifest bytes. 5. Rebuild from a clean directory and prove byte-identical output. 6. Atomically promote the exact release directory. 7. Update mutable catalog/aliases only after exact release validation. 8. Package the same bytes into preview and the active application; never regenerate independently.