# Semantic Publication Substrate — FULL RESEARCH CORPUS (share wrapper)
Abbreviation: sps
Version: v0.1.0
Bundle name: llm-full-docs-sps
Upstream artifact: .agents/llms-full-sps-v0.1.0.txt
Generated: unspecified
========================================================================
# SEMANTIC PUBLICATION SUBSTRATE (SPS): CONSOLIDATED SPECIFICATION & SUBSTRATE CORPUS
Version: v0.1.0 (2026-09-29) | Modules: 16 | Total Lines: 609
TABLE OF CONTENTS & SUBSYSTEM SUMMARY:
- Architecture & Protocol Governance: 8 files
- Substrate Implementation & Prototype: 3 files
- Evidence & Work Records: 4 files
- Other Modules: 1 files
========================================================================
========================================================================
## FILE: AGENTS.md
========================================================================
# Semantic Publication Substrate Agent Operating Contract (`.agents/AGENTS.md`)
## IEPE authority
This project operates under `IEPE-001`, version `0.2.0`, from `https://github.com/zachshallbetter/IEPE` at immutable revision `56f82de8cca122cc4d347cdd55bb32bdcd31ed27`. The pin is recorded in `.iepe/protocol-reference.json`.
IEPE Core governs claim, context, dispatch, evidence, perturbation, promotion, memory, and stop semantics. Local canonical sources govern this project's intent, experience, architecture, work graph, evaluators, adapters, and protected actions.
Preserve this trace:
```text
intent -> epic -> issue -> claim -> context -> artifact -> evaluation -> evidence -> qualification -> promotion
```
## Authority order
1. `INTENT.md`
2. `docs/EXPERIENCE.md`
3. `docs/ARCHITECTURE.md`
4. `PROJECT_PROFILE.json`
5. Authorized issues and decisions
6. Implementation and operational observations
7. Generated agent context (`.agents/llms-full-sps-v0.1.0.txt`)
## Operational loop
```text
reconcile -> select -> validate -> claim -> assemble bounded context -> dispatch -> observe -> evaluate -> stress test when required -> record evidence -> disposition -> release claim -> repeat
```
## Status honesty
$$\text{Documented} \neq \text{Implemented} \neq \text{Tested} \neq \text{Empirically Validated}$$
Artifact existence, a passing API call, or completion language does not establish qualification.
## Verification Gates & Execution Standard
Before proposing modifications or additions to the substrate, run the context exporter script:
```bash
python3 scripts/gen-llms.py
```
## Agent-First Publishing Architecture (`.agents/llms-full-sps-v0.1.0.txt`)
1. **Single-Pass Deterministic Context (`llms-full-sps-v0.1.0.txt`)**:
- `.agents/llms-full-sps-v0.1.0.txt` is an auto-generated, single-file concatenation of all intent docs, architecture specs, project profiles, and prototype code.
- Reading `llms-full-sps-v0.1.0.txt` provides AI agents with instant, zero-search access to all SPS capabilities without multi-step file discovery latency.
2. **Automated Downstream Generation**:
- Generated via `python3 scripts/gen-llms.py`.
========================================================================
## SUBSYSTEM: ARCHITECTURE & PROTOCOL GOVERNANCE (8 files)
========================================================================
--- FILE: AGENTS.md (59 lines, 2.6 KiB) ---
# Semantic Publication Substrate Agent Operating Contract
## IEPE authority
This project operates under `IEPE-001`, version `0.2.0`, from `https://github.com/zachshallbetter/IEPE` at immutable revision `56f82de8cca122cc4d347cdd55bb32bdcd31ed27`. The pin is recorded in `.iepe/protocol-reference.json`.
IEPE Core governs claim, context, dispatch, evidence, perturbation, promotion, memory, and stop semantics. Local canonical sources govern this project's intent, experience, architecture, work graph, evaluators, adapters, and protected actions. Local instructions may specialize IEPE but may not weaken its invariants.
Preserve this trace:
```text
intent -> epic -> issue -> claim -> context -> artifact -> evaluation -> evidence -> qualification -> promotion
```
## Authority order
1. `INTENT.md`
2. `docs/EXPERIENCE.md`
3. `docs/ARCHITECTURE.md`
4. `PROJECT_PROFILE.json`
5. Authorized issues and decisions
6. Implementation and operational observations
7. Generated agent context
Conversation and generated files are evidence inputs, not automatic authority.
## Operational loop
```text
reconcile -> select -> validate -> claim -> assemble bounded context -> dispatch -> observe -> evaluate -> stress test when required -> record evidence -> disposition -> release claim -> repeat
```
## Startup
1. Verify `.iepe/protocol-reference.json` and `PROJECT_PROFILE.json` against the pinned IEPE revision.
2. Inspect repository, documentation, work graph, claims, dependencies, tests, and evidence without mutation.
3. Reconcile contradictions and missing authority.
4. Select only a complete Ready issue.
5. Claim bounded scope, assemble minimal context, dispatch, evaluate, record, and release.
The first agent cycle is read-only reconciliation. Do not infer mutation authority from repository access.
## Status honesty
`Documented != Implemented != Tested != Empirically Validated`
Artifact existence, a passing API call, or completion language does not establish qualification.
## Process routing
Use the narrowest procedure under `.agents/skills/`: initialize, reconcile, operate, qualify, stress test, or maintain the package. These procedures are projections from the pinned IEPE revision and cannot expand local authority.
## Protected actions
Read `PROJECT_PROFILE.json`. Protected actions require its named promotion authority and issue-level authorization.
## Stop conditions
Stop and record a typed result when authority, ownership, context, dependencies, permissions, evidence, evaluator availability, provider health, or recovery becomes ambiguous. Stop when capacity or retry limits are exhausted. Silence is not approval.
--- FILE: INTENT.md (37 lines, 1.9 KiB) ---
# Semantic Publication Substrate Intent
## Purpose
Provide a publication-aware semantic substrate that preserves canonical publication meaning while enabling relational discovery, radically replaceable interface expression, inspectable field behavior, and governed consequential interaction.
## Beneficiaries
- Readers discovering, comparing, and returning to publications.
- Publication and interface architects modeling meaning independently from presentation.
- Renderer and runtime implementers building accessible, relational experiences.
- Operators who need governed, inspectable interaction boundaries.
## Protected qualities
- Publication identity and reading order remain stable across expressions.
- Required semantic content and operation identity remain exposed.
- Entitlement boundaries protect readable text and restricted resources.
- Derived observations retain provenance and uncertainty.
- Visual expression may change radically without changing canonical meaning.
- Read projections do not silently mutate canonical or user state.
## Exclusions
- Replacing a publication repository or content-management system.
- Defining a specific frontend framework as a protocol requirement.
- Treating inferred visual observations as authoritative facts.
- Production deployment, external publication, payments, or destructive migrations during the prototype.
## Success evidence
- A local browser prototype renders one canonical publication model through multiple expressions.
- The same semantic publication supports library, series, detail, field, and reading-entry projections.
- Relationship and observation signals are inspectable with provenance labels.
- Filtering, selection, expression switching, and reader entry have explicit state transitions.
- Entitlement-gated text is represented without exposing text content in discovery mode.
- Browser visual verification and local smoke checks are recorded before promotion.
--- FILE: PROJECT_PROFILE.json (58 lines, 1.3 KiB) ---
{
"$schema": "https://iepe.dev/schema/project-profile.schema.json",
"authorityOrder": [
"INTENT.md",
"docs/EXPERIENCE.md",
"docs/ARCHITECTURE.md",
"PROJECT_PROFILE.json",
"AGENTS.md"
],
"coordinator": {
"capacity": 1,
"identity": "coordinator.local",
"stopPolicyRef": "AGENTS.md#stop-conditions"
},
"evaluators": [
"manual.acceptance",
"browser.visual",
"schema.conformance"
],
"id": "sps",
"intentRefs": [
"INTENT.md"
],
"memory": {
"institutional": "docs",
"negativeResults": "docs/NEGATIVE_RESULTS.md",
"operational": "work"
},
"name": "Semantic Publication Substrate",
"profileStatus": "established",
"promotionAuthorities": [
"project.owner"
],
"protectedActions": [
"external-publication",
"production-deployment",
"spending",
"destructive-migration",
"credential-or-iam-change",
"authoritative-intent-change",
"external-communication"
],
"protocol": {
"protocolId": "IEPE-001",
"protocolVersion": "0.2.0",
"revision": "56f82de8cca122cc4d347cdd55bb32bdcd31ed27",
"source": "https://github.com/zachshallbetter/IEPE"
},
"workGraph": {
"projectRefs": [
"work"
],
"provider": "local"
},
"workspaces": [
"."
]
}
--- FILE: README.md (33 lines, 1.2 KiB) ---
# Semantic Publication Substrate
**Protocol version:** `0.1.0`
**Project profile:** `0.2.0`
**Status:** Working prototype
An integrated local prototype for publication truth, semantic interface expression, relational field
behavior, and governed interaction boundaries.
## Run
From this directory:
```sh
python3 -m http.server 4177 --bind 0.0.0.0
```
Open `http://localhost:4177/`.
## Prototype surfaces
- Overview: reader state, semantic projections, protected-resource boundary.
- Library: series grouping by `seriesId` and volume ordering by `ordinal`.
- Series: connected publication and relationship entry points.
- Field: relational topology, signal readings, and provenance.
- Publication detail: canonical identity, edition presence, reading order, relations, and options.
- Reader entry: separate reading projection with entitlement-gated text.
- Expression selector: Neo Capsule, Edo Ink, Nordic Frontier, and Cosmic Comic.
The data is intentionally local and authored as a fixture adapter. The field view attaches the published
signals-first Fundamental Engine adapter when the CDN is reachable, while retaining the same visible
projection if it is unavailable. The prototype does not publish content, mutate external state, or
expose readable text.
--- FILE: ROADMAP.md (43 lines, 1.5 KiB) ---
# Semantic Publication Substrate Roadmap
## M0: Governed baseline
Exit evidence:
- intent, beneficiaries, protected qualities, exclusions, and success evidence are confirmed
- project profile and protocol pin conform
- zero-state or operational baseline is recorded
- one material unknown is registered
- one bounded, reversible issue is Ready
## M1: First qualified outcome
### M0 exit evidence
- Browser-rendered prototype with publication, semantic, expression, field, and interaction surfaces.
- Smoke-checkable state transitions and no external side effects.
### Ready issue
- `SPS-001` Build the integrated publication substrate prototype.
## M2: Contract-backed publication adapters
- Replace fixtures with typed publication, series, resource, and progress adapters.
- Reconcile resource delivery, digest, compression, and canonical-source rules.
- Add schema and invariant conformance gates.
## M3: Governed reader operations
- Define ICP contracts for entitlement, reading, download, progress, library mutation, and recovery.
- Add receipts, conflict handling, and explicit terminal outcomes.
## M4: Qualified expression system
- Implement SES semantic schemas, resolver cascade, projection contracts, and negative fixtures.
- Validate multiple visual languages against one semantic composition.
## M5: Relational field runtime
- Bind Fundamental Engine patterns to publication geometry, relationships, observations, and snapshots.
- Add field query, diagnostics, reduced-motion projection, and performance evidence.
--- FILE: docs/ARCHITECTURE.md (48 lines, 2.2 KiB) ---
# Semantic Publication Substrate Architecture
## System boundary
```text
Publication / iPub truth
↓
Semantic publication adapters
↓
SES semantic contracts + expression resolver
↓
Fundamental field bindings and relational signals
↓
Host renderer and accessible projections
↓
ICP interaction contracts for consequential operations
```
## Source-of-truth ownership
| Layer | Owns | Does not own |
|---|---|---|
| Publication | identity, revision, reading order, resources, edition | UI layout or reader state |
| iPub | spreads, panels, regions, roles, text-layer entitlement | visual language |
| SES | semantic interface meaning and expression freedom | canonical publication bytes |
| Fundamental | field coupling, metrics, relationships, projections | authorization or business truth |
| ICP | authority, transitions, evidence, receipts, recovery | visual styling |
| Host app | routes, composition, loading, adapters | redefining lower-layer contracts |
## Prototype implementation
The first vertical slice is deliberately framework-free and local. `index.html` supplies the host;
`styles.css` supplies expression tokens and topology; `app.js` contains the typed fixture model,
semantic projection functions, a purpose/evidence morphology resolver, field-signal derivation, and
interaction state machine. The prototype has no generic dashboard shell: each shelf resolves its own
container from semantic purpose, available evidence, content count, and expression.
Prototype morphology forms include `hero`, `banner`, `rail`, `split`, `matrix`, and `portals`. This is
the reference behavior for future SES Recipes: the container is resolved after semantic purpose and
evidence, not selected as a fixed page template before content arrives.
## Required boundaries
- Discovery may use geometry, relationships, metrics, and observations without exposing text layers.
- Text content is entitlement-gated and is represented in discovery as a protected resource.
- Expression switching must not change publication identity or required operations.
- Field signals influence emphasis and discovery explanation, not canonical metadata.
- Every future write operation must cross an ICP contract boundary.
--- FILE: docs/EXPERIENCE.md (35 lines, 1.5 KiB) ---
# Experience Contract
## Primary experience
Readers encounter a library as a connected publication field rather than a flat list. They can move
from a reading path to a series, publication detail, related work, or reading entry while the same
publication identity remains stable.
## Critical journeys
1. Discover from current reading state.
2. Inspect why a publication surfaced.
3. Browse a library grouped by `series_id` and ordered by `series_ordinal`.
4. Open publication options without confusing them with the reader.
5. Enter a reader projection without exposing protected text in discovery.
6. Change visual expression without changing semantic identity or operation labels.
## States
The prototype expresses selected, filtered, in-library, reading-entry, protected-resource, and staged-
access-request states. Future production adapters must map these to ICP contract states and outcomes.
## Accessibility requirements
- Native buttons and labels remain operable by keyboard and assistive technology.
- Status feedback is textual and not color-only.
- Protected content has an explicit entitlement explanation.
- Responsive layout must not require horizontal scrolling.
- Reduced-motion expression must preserve the same semantic changes.
## Observation method
Prototype evaluation uses DOM state inspection, desktop and narrow viewport screenshots, and interaction
smoke checks. Visual fidelity is evidence of the prototype projection only; it does not establish
publication-schema or backend conformance.
--- FILE: docs/NEGATIVE_RESULTS.md (13 lines, 0.9 KiB) ---
# Negative and Inconclusive Results
Retain rejected candidates, failed evaluations, contradictions, limitations, and the evidence that produced each disposition.
## 2026-08-17 — initial prototype verification
- Browser visual verification passed at the default desktop viewport and at 390×844.
- Core interaction smoke checks passed for grouped library, publication detail, reader entry, expression
switching, and field view. Browser console reported no errors or warnings.
- The first narrow-layout pass exposed horizontal overflow in the topbar. The responsive breakpoint was
corrected by wrapping the search and expression controls; the second narrow pass passed.
- Upstream IEPE `validate.py` could not run in this environment because the Python `yaml` dependency is
unavailable. The compiled project package remains provisional and is not treated as conformance evidence.
========================================================================
## SUBSYSTEM: SUBSTRATE IMPLEMENTATION & PROTOTYPE (3 files)
========================================================================
--- FILE: app.js (61 lines, 23.1 KiB) ---
const publications = [
{ id:'pub-crimson', seriesId:'series-crimson', series:'Crimson Bloom', ordinal:1, title:'Crimson Bloom', subtitle:'The first garden remembers everything.', author:'H. Mori', year:2025, kind:'Volume', chapters:12, progress:68, color:'crimson', cover:'✦', world:'Crimson Reach', tags:['close-ups','dialogue','colour'], observations:{'Panel density':.52,'Dialogue density':.78,'Close-up frequency':.86,'Palette range':.74}, relations:[['same creator','Silent Requiem'],['shares character','Liora'],['part of','Crimson Bloom']] },
{ id:'pub-crimson-2', seriesId:'series-crimson', series:'Crimson Bloom', ordinal:2, title:'Crimson Court', subtitle:'The house at the edge of the map.', author:'H. Mori', year:2022, kind:'Volume', chapters:78, progress:0, color:'court', cover:'◈', world:'Crimson Reach', tags:['dialogue','close-ups','dark'], observations:{'Panel density':.58,'Dialogue density':.82,'Close-up frequency':.81,'Ink coverage':.44}, relations:[['precedes','Crimson Bloom'],['same creator','Silent Requiem'],['features','Liora']] },
{ id:'pub-eclipse', seriesId:'series-eclipse', series:'Eclipse of Stars', ordinal:12, title:'Eclipse of Stars', subtitle:'A horizon is only a promise seen from far away.', author:'H. Mori', year:2019, kind:'Volume', chapters:169, progress:63, color:'eclipse', cover:'☾', world:'Celestia', tags:['wide panels','slow pacing','dark ink'], observations:{'Negative space':.78,'Panel density':.28,'Slow pacing':.82,'Ink coverage':.74}, relations:[['sequel to',"Void's Eclipse"],['adapts','Path of the Eclipse'],['features','Airi · Kael']] },
{ id:'pub-reverse', seriesId:'series-reverse', series:'Re:Verse', ordinal:8, title:'Re:Verse', subtitle:'Every city has a second version of itself.', author:'Y. Tanabe', year:2021, kind:'Volume', chapters:104, progress:81, color:'neon', cover:'⌁', world:'Neo-Tokyo', tags:['dense panels','sound effects','close-ups'], observations:{'Panel density':.72,'Dialogue density':.64,'Onomatopoeia':.68,'Close-up frequency':.62}, relations:[['same creator','Starbound Atlas'],['shares character','Nyx'],['part of','Neo-Tokyo cycle']] },
{ id:'pub-chronicles', seriesId:'series-eldoria', series:'Aether Chronicles', ordinal:15, title:'Aether Chronicles', subtitle:'The old world is not as quiet as it looks.', author:'R. Ito', year:1998, kind:'Volume', chapters:212, progress:100, color:'aether', cover:'△', world:'Eldoria', tags:['1990s','wide panels','colour'], observations:{'Negative space':.66,'Panel density':.34,'Palette range':.62,'Slow pacing':.71}, relations:[['part of','Eldoria archive'],['adapts','Verdant Crown'],['features','Soren']] },
{ id:'pub-atlas', seriesId:'series-atlas', series:'Starbound Atlas', ordinal:1, title:'Starbound Atlas', subtitle:'A field guide to places that should not exist.', author:'Y. Tanabe', year:2023, kind:'Worldguide', chapters:0, progress:0, color:'atlas', cover:'✧', world:'Stellar Rift', tags:['world guide','wide panels','colour'], observations:{'Negative space':.69,'Palette range':.66,'Slow pacing':.74,'Image density':.36}, relations:[['same creator','Re:Verse'],['part of','Stellar Rift'],['references','The Last Signal']] },
];
const expressions = {
capsule:{label:'Neo Capsule', note:'bright clarity · open space'},
ink:{label:'Edo Ink', note:'paper grain · editorial weight'},
frontier:{label:'Nordic Frontier', note:'weathered material · quiet depth'},
comic:{label:'Cosmic Comic', note:'bold panels · kinetic contrast'},
};
const shelves = [
{ id:'current', purpose:'reading-continuity', label:'Your active thread', title:'The path you already started', description:'A return surface for works with active reader state. Progress and next action matter more than catalog completeness.', form:'hero', lens:p=>p.progress>0 },
{ id:'vast', purpose:'world-atmosphere', label:'morphology · cinematic banner', title:'Worlds that make the person small', description:'Wide space, low dialogue, and slow pacing resolve into an atmospheric field rather than a card rail.', form:'banner', lens:p=>p.observations['Negative space']>.6 },
{ id:'relations', purpose:'relationship-discovery', label:'morphology · comparison rail', title:'Complicated relationships', description:'Works are side by side because the useful question is not “what is this?” but “what does this connect to?”', form:'rail', lens:p=>p.relations.length>=2 },
{ id:'breathe', purpose:'page-quality', label:'morphology · editorial split', title:'Pages that breathe', description:'One visual anchor and a measured list of page qualities. The container gives the evidence room to speak.', form:'split', lens:p=>p.observations['Slow pacing']>.7 || p.observations['Negative space']>.7 },
{ id:'chaos', purpose:'kinetic-contrast', label:'morphology · dense matrix', title:'Beautiful chaos', description:'High panel density, close-ups, and sound effects turn the shelf into a compact visual index.', form:'matrix', lens:p=>p.observations['Panel density']>.5 || p.observations['Onomatopoeia']>.5 },
{ id:'places', purpose:'world-navigation', label:'morphology · portal field', title:'Places you keep returning to', description:'Worlds become portals. The content is spatial, so the container is circular, image-led, and navigational.', form:'portals', lens:p=>p.world },
];
const state = { view:'home', expression:'capsule', query:'', selected:null, toast:'', library:new Set(['pub-crimson','pub-eclipse','pub-reverse']), readMode:false };
const fieldRuntime = { handle:null, loading:false };
const $ = (s) => document.querySelector(s);
const esc = (v) => String(v).replace(/[&<>"']/g, (c) => ({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c]));
const pub = (id) => publications.find((p) => p.id === id);
const cover = (p, extra='') => `
Protected resource boundary. Text layers and clean-plate derivatives are available only through entitled resource operations. Discovery can inspect structure, regions, and measurements without receiving readable script content.