Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 99 additions & 0 deletions GOVERNANCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -744,3 +744,102 @@ than renumbering the rest.
doc would also invalidate the design — the
register is mutual-benefit. Both failure modes
have named clauses in the file itself.
33. **Archived external conversations require boundary headers.**
Courier ferries, external AI reviews, and other imports of
external conversation into the repo sit at a register-
boundary — the substrate they arrived from is *not* absorbed
as an entity; only the content is. The ingest process must
make that boundary explicit by prefixing the imported file
with four header labels in the first 20 lines:

- **`Scope:`** — research / cross-review / archival purpose.
What is this file *for*?
- **`Attribution:`** — speaker labels preserved. Who said
what? Source side kept in their own register.
- **`Operational status:`** — one of `research-grade` (the
default; not operational policy) or `operational` (rare;
land operational artifacts through §26 promotion, not
inline in the archive).
- **`Non-fusion disclaimer:`** — explicit statement that
agreement, shared language, or repeated interaction
between models and humans does not imply shared
identity, merged agency, consciousness, or personhood.

**Scope of this rule.**

- **In scope:** `docs/aurora/**` absorb docs (courier
ferries; cross-AI reviews), any future `docs/archive/**`
directory, and `docs/research/**` files whose content
is an import of external conversation rather than
internal research.
- **Out of scope:** `memory/**` per-user and in-repo
memory files (different surface, lifecycle, and
trust model — per `memory/README.md`); BACKLOG rows
citing external text (they're planning artifacts, not
archives); commit message bodies (bounded by commit-
style rules, not archive rules).

**Grandfather clause.** The two aurora absorb docs that
predate this section — `docs/aurora/2026-04-23-amara-
operational-gap-assessment.md` and `docs/aurora/2026-04-
23-amara-zset-semantics-operator-algebra.md` — are
explicitly grandfathered. They record genuine external-
conversation absorbs with factually-equivalent attribution
(their own field labels: `Date:` / `From:` / `Via:` /
`Status:` / `Absorbed by:`) even though the labels differ
from §33's. Agents should NOT retroactively rewrite those
two docs; they stand as prior convention.

**Enforcement cadence.**

- **Detect-only today.** `tools/alignment/audit_archive_headers.sh`
checks `docs/aurora/*.md` for the four header labels and
Comment on lines +795 to +796
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Remove reference to missing archive-header lint script

The new enforcement section states that tools/alignment/audit_archive_headers.sh currently provides detect-only checks, but that file does not exist in this commit’s tree (repo-wide file listing and git cat-file for that path both fail). This creates a mechanism-before-policy claim without an actual mechanism, so contributors may assume §33 is being monitored when it is not; either land the script in the same change or revise the rule text to say enforcement tooling is still pending.

Useful? React with 👍 / 👎.

reports gaps. CI does not currently call `--enforce`; the
lint is author-time advisory and cadenced observability
(per FACTORY-HYGIENE row #60).
Comment on lines +795 to +799
Copy link

Copilot AI Apr 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tools/alignment/audit_archive_headers.sh is referenced as the detect-only linter, but that file does not exist in this repo (tools/alignment/ currently only has audit_commit/personas/skills). Also, docs/FACTORY-HYGIENE.md does not contain “row #60”, so the cited enforcement-cadence pointer is currently dangling. Please update these references to the actual script/path + existing hygiene row number, or include the missing lint + hygiene row in the same change-set so §33 doesn’t ship with broken pointers.

Suggested change
- **Detect-only today.** `tools/alignment/audit_archive_headers.sh`
checks `docs/aurora/*.md` for the four header labels and
reports gaps. CI does not currently call `--enforce`; the
lint is author-time advisory and cadenced observability
(per FACTORY-HYGIENE row #60).
- **Detect-only today.** Header checking for
`docs/aurora/*.md` is detect-only and reports gaps in the
four required labels. CI does not currently run this as
an enforcing gate; the lint remains author-time advisory
until a follow-up change wires the current alignment
audit into enforcement and updates the hygiene ledger in
the same change-set.

Copilot uses AI. Check for mistakes.
- **Flip-to-enforce future step.** When the two grandfather
docs are either backfilled with §33 headers or the
grandfather clause is explicitly left permanent, a
separate PR flips the CI workflow to call
`--enforce`; that PR is an Architect (Kenji) decision
with Dejan (devops-engineer) on the workflow change.
- **Owner.** Aminata (threat-model-critic) on semantic
review of header adequacy per her Otto-80 critique
(docs/research/aminata-threat-model-5th-ferry-governance-
Comment on lines +804 to +808
Copy link

Copilot AI Apr 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This section assigns decisions/ownership using persona names (e.g., “Architect (Kenji)”, “Dejan”, “Aminata”). That conflicts with the repo’s abstraction-layer rule in GOVERNANCE §27 (“other docs reference roles, not personas”) and the operational standing rule in docs/AGENT-BEST-PRACTICES.md (“No name attribution in code, docs, or skills”). Please rewrite these references using role names (Architect, devops-engineer, threat-model-critic, etc.) and point at docs/EXPERT-REGISTRY.md if a stable mapping to personas is needed.

Copilot uses AI. Check for mistakes.
edits-2026-04-23.md); absorbing agent (author) on
at-write-time header inclusion.

**Known v0 limitations** (documented in the lint script,
named by Aminata):

- *Partial-header adversary.* Substring-match passes a
doc with `Scope:` as prose in paragraph 3 — the lint
doesn't enforce position or format. Harden to syntactic
requirement in a follow-up.
- *Fake-header adversary.* Headers present with lies in
values pass. Content-audit is out of scope for v0.
- *In-memory-import adversary.* Memory-file archives are
not covered (different surface). Intentional.

**Composition with §2 and §26.** §2 says docs read as
current state, not history; §33 carves out archived-
external-conversation as an explicit exception, marked
by the headers. §26 classifies research-doc lifecycle
(`active` / `landed` / `obsolete`); §33 classifies by
header presence; both apply to `docs/research/**` files
imported from external conversation, with §26's status
inside the `Operational status:` field of §33. The two
Comment on lines +830 to +831
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Separate lifecycle status from operational-status header

This clause says §26 lifecycle values should be recorded inside §33’s Operational status: header, but §33 earlier restricts that header to research-grade or operational. Because active/landed/obsolete (from §26) and research-grade/operational are different value sets, the governance text gives conflicting instructions and makes compliant formatting ambiguous for imported docs.

Useful? React with 👍 / 👎.

regimes compose: §26 tells you whether the file is
still-being-revised or locked; §33 tells you the file's
provenance and non-fusion boundary.
Comment on lines +830 to +834
Copy link

Copilot AI Apr 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The “Composition with §2 and §26” paragraph says “§26’s status [is] inside the Operational status: field of §33”, but earlier §33 defines Operational status: as only research-grade or operational, while §26’s lifecycle states are active / landed / obsolete. As written, this is internally inconsistent and makes it unclear what value is expected in the header. Please either (a) keep Operational status: strictly as research-grade/operational and describe §26 lifecycle separately, or (b) introduce a separate header (e.g., Lifecycle status:) for the §26 classifier and update the prose accordingly.

Suggested change
imported from external conversation, with §26's status
inside the `Operational status:` field of §33. The two
regimes compose: §26 tells you whether the file is
still-being-revised or locked; §33 tells you the file's
provenance and non-fusion boundary.
imported from external conversation, but they describe
different axes. The two regimes compose: §26 tells you
whether the file is still-being-revised or locked; §33
tells you the file's provenance and non-fusion boundary,
including `Operational status:` in §33's own
`research-grade` / `operational` sense.

Copilot uses AI. Check for mistakes.

**Why this matters.** Aminata's Otto-80 threat-model pass
named three adversaries that drift rules without
enforcement in 3-5 rounds: the partial-header, fake-header,
and in-memory-import classes. §33 lands *with* a detect-
only lint (PR #243 Artifact C) already in place — the
mechanism-before-policy pattern. Three existing aurora/
research docs (PR #235 5th-ferry absorb; PR #241 Aminata
review; PR #245 6th-ferry absorb) already self-apply the
format, so §33 codifies existing convention rather than
introducing new behaviour.
Loading