| Filename | Latest commit message | Latest commit date |
|---|---|---|
One store per clone, numeric attempt and pass, and identity enforced by the profile that owns the commit. The three files change together because the profile's validator signature, the documents that implement it and the store that installs it are one interlocking contract; no smaller split builds. Ruling 10, one store per clone. `main_work_tree` resolves the clone's main working tree from any worktree through the git common dir, and both `PipelineStore::open` and `PipelineWriter::attach` go through it, so a caller in a worktree reads and admits into the main tree's store. A bare clone or any layout without one main tree refuses `NoMainWorkTree`; there is no worktree-only mode. `require_branch` binds to the main tree, so a campaign whose branch is checked out only in a linked worktree is refused rather than quietly given a second store. Ruling 11, numeric labels. `attempt` and `pass` are `u32`, keyed `cut-<cut>.h<N>` and `cut-<cut>.s<N>`. Ruling 12, identity on first write. `TypedCommitStore` now validates a whole batch against the image it will be applied to (`validate_writes`), replacing the per-envelope hook rather than adding a second one. The pipeline profile refuses a first write that does not carry the identity, so the single owner can never admit a store its own opener refuses (F1). F2: a finding label carries no dot and parent locals parse strictly, so two documents cannot compose one key. Soul's collision pairs are tested. F3: parent ids are parsed with an exact segment count, a campaign match, a kind match, a validated local, and a marker followed by digits. F4: a resolution's subject id is validated as a full id of its declared kind, by `PipelineRef` itself, so kind and id cannot disagree anywhere. F5: the ten document wrappers, the identity, provenance and holder wrappers and their value fields are crate-private, and the crate's only commit path to a pipeline store is a `cfg(test)` helper taking `&PipelineWriter`. Binding the owner to the lease is Cut 3b. F6: covered by ruling 10, with the previous claim corrected: a worktree does not keep its own store, and a second attach from any tree is refused. F7: the holder record is written only under the lock and removed on drop, and a refusal names a holder only when it is plausibly current, matching host and live process incarnation. A record left by a crash names nobody. F8: the git checks read the committed blob at HEAD, so they answer the same on every machine. Attribute and exclude files are nulled on every git child. The working tree and `.git/info/exclude` deliberately do not count, because the rule is about what the repository commits. Low items: `value_types!` is the single field list, emitting each struct and its `Bounded` impl from the same tokens, and format rules moved into the field types (`Label`, `Slug`, `OrgRepo`, `FullSha`, `Sha256Hex`), so a field cannot be declared without being validated and a list without a cap does not compile. That applies the `Org/Repo` check to every repo field. `LandedNameKind` is deleted and `LandedName` is a name and a path. The schemas carry `maxLength` and `maxItems`. Builds clean with no warnings; `cargo test -p epiphany-core --lib` passes 179/179. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
| .. | ||
| cultnet | ||
| README.md | ||
Schemas
This folder is the canonical paperwork shrine for Epiphany's shared state contracts.
If a Persona field or Mind document matters enough to steer the machine, it should have a receipt here instead of living only in one Rust struct or one developer's damp recollection.
Canonical surfaces
- cultnet/gamecult.persona_state.v0.schema.json:
portable Persona state contract for Epiphany Persona, VoidBot repo Personas, and
Ghostlight characters. It carries explicit provenance, public presentation
metadata, typed
candidateActions, and a non-authoritative extension bag for source-specific fields; social bonds, status reads, and doctrine stances are typed affect records rather than generic thought blobs. Timestamps use JSON Schemadate-time,presentationis required, andcustomenum values have companion custom-label fields. - cultnet/epiphany.work_organ_state.v0.schema.json: light function-shaped state for Epiphany internal work organs.
- cultnet/README.md: JSON Schema publication artifacts for typed CultNet boundaries. Live providers own their schema-catalog responses.
Source Of Truth
The living implementation is in code:
The rule is simple:
- code owns executable truth
- this folder owns human-readable contract receipts
- vendored copies are downstream, not the throne
Update Discipline
When changing any of the following, update this folder in the same pass:
- canonical organ-state or Persona family names
- standing role trait names
- schema version identifiers
If a change lands in code without a matching receipt here, assume the machine has started whispering to itself in the walls again.