| Package source, Python/system dependencies, binaries, images and licences |
Forge/candidate manifest with exact source, locks, platform inputs, legal inventory and receipts |
#65, #45 |
Designed lifecycle; a running Vessel never installs its own trusted dependencies |
| Package selection and boot registration |
Exact built-in/Crypt activation id and one sealed assembly pass |
#21 |
Partial foundation exists; installed is not active and there is no scanning or live unload |
| Settings, Rune schemas and Rune instances |
Shaped schema contribution plus immutable typed configuration generation |
#1, #21, master #64 |
Configuration selects admitted identities; it does not import code, start runtimes or grant authority |
| Backend services and operations |
Owner-qualified service/operation contribution adapted by the Vessel composition root |
#66 |
Designed; no arbitrary Litestar controller, middleware or route-bundle mutation |
| HTTP/API projection |
Host-owned versioned DTO/controller over an admitted backend contract |
#66 |
Designed; route, auth, errors, OpenAPI and collisions remain Backend-owned |
| Persistent models and migrations |
Explicit schema owner, manifest-pinned Alembic lineage/order, separate migration credentials and recovery policy |
#47, #65 |
Registration never implies table or migration authority |
| Durable jobs, workers and service attempts |
Typed job/attempt contribution using ordinary Workers recovery and settlement |
#22, #66 |
No extension-owned scheduler, queue law or second recovery ledger |
| Animator and Connector providers |
Separate interface, profile, dialect driver, activation, Rune and evidence contributions |
#68, #42, #55 |
Designed general surface; provider identity, semantic compatibility and readiness remain distinct |
| Soulstone/local runtime and Portal/remote runtime definitions |
Typed Animator definition and lifecycle-specific adapter |
#5, #6, #21, #55, #68 |
Local lifecycle and remote custody remain different; registration starts neither |
| Agent and delegated-runtime adapters |
Exact Agent builder or bounded delegated runtime declaration/adapter |
#5, #28 |
Adapter receives only its declared containment; it is not a Graph or authority kernel |
| Spell contracts and implementations |
Separate shaped contract and executable implementation stores |
#29 |
Designed public catalogue; registration of contract, implementation and activation are separate |
| Scrolls, Patterns and Graph binding |
Versioned restricted Scroll plus exact adapter and Resolution Lock |
#29; execution #8 and advanced topology #61 |
Extend Graph by admitted score/adapter, not by live node/edge mutation or package scanning |
| Graph topology capabilities |
Versioned adapter support for admitted serial, subgraph, branch and join grammar |
#8, #61 |
Topology support is Graph-owned; an extension may publish only scores the admitted adapter can prove |
| Composition/application contracts |
Owner-qualified immutable Composition revision with records, judgment, effects, projections, outcomes and recovery |
#69 |
Designed runtime contribution; documentation Portfolio membership alone is not registration or delivery |
| Product, Suite and deployment selection |
Exact revision/profile selection over already admitted Composition/Suite contracts |
#69, #29, #3 |
Product packaging cannot manufacture missing application truth or authority |
| Altar visibility and interaction |
Closed versioned projection/descriptor rendered by Core-owned Svelte instruments |
#67, #14, #56 |
Designed; no extension-owned HTML, JavaScript, Svelte, arbitrary CSS, imports or runtime routes |
| Palette and interface locale packages |
Finite semantic palette map or static message catalogue with accessibility/licence receipts |
#67, #45 |
Explicitly deferred bounded data contribution, never a CSS/component plug-in API |
| Artifact and storage providers |
Typed ArtifactRef/custody adapter under the owning storage contract |
#23 |
Provider cannot infer adoption, promotion or application meaning |
| Domain effects and providers |
Separate effect-specific contribution accepted by the receiving Domain |
A2A #19, Toll #32, Scout #43/#51, Echo #48, Vision #49 and their owning issues |
Capability registration grants no network, payment, crawl, media or declassification authority |
| Deployment service roles and host topology |
Versioned deployment-service contribution compiled into an owned manifest |
#3, #18, #65 |
Cannot inject undeclared commands, ports, mounts, networks, secrets, migrations or dependencies |
| CLI/operator operations |
Inert typed operation metadata beneath one future host-owned namespace |
#2 |
Root grammar and extension Click callbacks remain closed; dynamic operation catalogue is deferred |
| Evidence and inspection |
Typed producer-attributed events/projections consumed by Oculus/Altar |
#36, #67 |
Observation has no registration, execution, promotion or effect authority |
| Assimilation and promotion of foreign craft |
Candidate → review/evaluation → source-bound package → Evolution |
#35, #40, #45, #46, #65 |
Candidate material is not an active extension until every admission and recovery gate passes |
| Independent public extension SDK/registry |
Versioned public API, conformance suite, signed publication and Forge distribution |
future bounded work after coupled path |
Explicitly deferred; current built-in/private coupling creates no compatibility promise |
Track every supported way LychD can grow and route each extensibility surface to one bounded child issue or an explicit closed/deferred decision. This is the parent map; it is not a second architecture source and not one implementation assignment.
Canonical law remains in ADR 05 — Extensions. Each receiving office keeps its own authority: Backend, Frontend, Configuration, Persistence, Workers, Graph/Workflow, Packaging, Evolution, Security and the relevant Extension Domain. Issues cite those decisions; ADRs do not embed the mutable backlog.
What this master means by an extension surface
An extension surface is a shaped contract through which an explicitly selected package may contribute a versioned thing to one receiving owner. It is broader than the current five-store boot context and narrower than arbitrary plug-in code.
Keep these distinct:
Configuration Master #64 primarily maps Settings, Runes, exact selectors and bounded policy after an extensibility surface exists. It does not define how Backend, Altar, Graph, Animator, Composition or Packaging become extensible.
Child-issue register
Parallel master: #64 owns configurable/runic objects, precedence and immutable configuration generations.
Extensibility surface map
Reference vertical: one extension across the whole body
The child issues should eventually prove one coherent author journey rather than unrelated toy registries:
No step implies the next. The end-to-end receipt must preserve identity and provenance across all of them.
Cross-cutting requirements
Completion dimensions
Treat closure as two independent proofs:
A complete map does not prove the vertical; one successful vertical does not prove every surface is owned.
Completion condition
Close this master when every row has a canonical owner and a delivered, bounded or explicitly deferred child route; one reference extension traverses the complete admitted vertical with retained evidence; and the author guide makes clear which surfaces are open, descriptor-driven, owner-adapted or deliberately closed.
Closure means the extensibility map and decomposition are coherent. It does not mean every future surface or independent SDK has shipped.