Skip to content

docs(aurora): AgencySignature × Layered Actor Identity integration writeup for Amara (2026-04-29)#853

Merged
AceHack merged 5 commits intomainfrom
writeup-amara-agencysignature-layered-actor-identity-2026-04-29
Apr 29, 2026
Merged

docs(aurora): AgencySignature × Layered Actor Identity integration writeup for Amara (2026-04-29)#853
AceHack merged 5 commits intomainfrom
writeup-amara-agencysignature-layered-actor-identity-2026-04-29

Conversation

@AceHack
Copy link
Copy Markdown
Member

@AceHack AceHack commented Apr 29, 2026

Summary

Single research-grade doc landing for Aaron to send to Amara. Integration analysis: how the v4 layered actor-identity model composes with AgencySignature v1 (ferry-7 spec, tasks #298 + #299 enforcement instruments).

Aaron asked for this writeup specifically so he can paste it into the Amara channel for review.

What's in the file

  • TL;DR: the v4 binding requirement (flagged by Deepseek/Gemini/Ani/Alexa/Claude.ai) is not a parallel system — it's the v2 schema for AgencySignature, with three additive trailer fields (Trust-Domain:, Actor:, Signed-By:).
  • Mapping table (one-to-one) between v4 actor-identity layers and AgencySignature trailer fields.
  • Concrete v1 → v2 example showing the migration is additive (no parallel system).
  • Recursion-bottom analysis: maintainer hardware key signs registry; reconciler runs as zeta-system://github-actions/reconciler with its own bound identity.
  • Three asks for Amara:
    1. Confirm layering shape (additive vs trailer-as-pointer)
    2. Pick binding primitive (Ed25519 + registry vs GitHub-native commit verification MVP vs sigstore/OIDC)
    3. Define v1 → v2 migration window
  • Carved blade (proposed, awaiting Amara concurrence): "Identity is structured. Identity is bound. AgencySignature is the binding wire format. Trailer fields carry actor + capabilities + claim. Reconciler verifies binding before trusting attribution. No bound identity = no claim authority."

Status

Why this is a separate PR (not part of #852)

  • Aaron explicitly asked for the writeup as a deliverable. Smaller PR = faster CI + faster land.
  • The writeup is research/analysis output; the doctrine memory absorb is governance substrate. Different review cadences.
  • The writeup is self-contained — it cites the existing v1 spec + research docs but doesn't depend on v4 doctrine landing.

Files

  • docs/aurora/2026-04-29-agencysignature-layered-actor-identity-integration-writeup-for-amara.md (233 lines, single new file)

Test plan

  • No code changes, no CI risk
  • No memory/ changes, paired-edit check N/A
  • Cites existing AgencySignature v1 spec + the four ferry-7/9/10/12 research docs
  • Cites existing tools/hygiene/{validate,audit}-agencysignature-* implementation
  • Glass Halo radical-honesty register: research-grade caveat at top + bottom of doc

🤖 Generated with Claude Code

…iteup for Amara (2026-04-29)

Research-grade integration analysis: how the v4 layered actor-identity model
(maintainer_id / host_id / harness_id / role_id / actor_id) composes with the
AgencySignature v1 commit-trailer attribution work (ferry-7 spec, tasks #298 +
#299 enforcement instruments).

Aaron asked for a writeup he can send to Amara. Key claim: the v4 binding
requirement that Claude.ai + Deepseek + Gemini + Ani + Alexa flagged on the
v3 public-intake design is not a parallel system to AgencySignature — it is
the v2 schema for AgencySignature, with three field additions:

  Trust-Domain: zeta
  Actor: zeta://aaron-mac/claude-code/coordinator
  Signed-By: ed25519:abc...

v1 readers ignore unknown fields; v2 readers verify the trailer signature
against an actors/<actor_id>.yaml registry. Migration is additive — no
parallel system, no double-attribution.

Three concrete asks for Amara:
  1. Confirm the layering shape (additive trailer fields vs trailer-as-pointer)
  2. Pick the binding primitive (Ed25519 + registry vs GitHub-native commit
     verification as MVP fallback vs sigstore/OIDC)
  3. Define the v1 → v2 migration window (tight vs loose coupling)

If the layering shape lands, the v4 rollout reorders to:
  1. Identity model + AgencySignature v2 schema (single composed PR per layer)
  2. Capability model
  3. Internal claim protocol
  4. Reconciler security model
  5. Public claim intake
  6. External / Windows / roaming-agent dry run

Carved blade (proposed, awaiting Amara concurrence):

  Identity is structured. Identity is bound.
  AgencySignature is the binding wire format.
  Trailer fields carry actor + capabilities + claim.
  Reconciler verifies binding before trusting attribution.
  No bound identity = no claim authority.

Status: research-grade only; not absorbed into doctrine yet. The doctrine
memory file (PR #852, currently open) carries the v4 corrections; this file
is the integration analysis Aaron requested for the Amara conversation.

Composes with:
  - docs/research/2026-04-26-gemini-deep-think-agencysignature-...
  - docs/research/2026-04-26-amara-fail-open-with-receipts-...
  - docs/research/2026-04-26-amara-ferry-9-validation-of-relationship-...
  - docs/research/2026-04-26-amara-ferry-12-trailer-contiguity-...
  - tools/hygiene/validate-agencysignature-pr-body.sh
  - tools/hygiene/audit-agencysignature-main-tip.sh
  - memory/feedback_zeta_agent_orchestra_capability_role_claim_isolation_aaron_amara_2026_04_29.md

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings April 29, 2026 17:32
@AceHack AceHack enabled auto-merge (squash) April 29, 2026 17:32
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds a single research-grade Aurora writeup analyzing how the layered actor-identity model composes with AgencySignature, intended as a standalone deliverable to share for review.

Changes:

  • Introduces an integration analysis positioning layered actor identity as an additive “v2” evolution of AgencySignature trailers.
  • Provides a one-to-one mapping table between actor-identity layers and trailer fields, plus a concrete v1→v2 example.
  • Captures decision asks (layering shape, binding primitive, migration window) and a proposed “carved blade” summary.

…-actor writeup

PR #853 review threads (all P1/P2 from Copilot, all valid catches):

- P1 PRRT_kwDOSF9kNM5-hHf6 (line 45 → enforcement-status accuracy):
  writeup said trailers are "validated pre-merge" / "missing or
  malformed = block". Reality: validate-agencysignature-pr-body.sh
  exists but is NOT yet wired into a required CI check under
  .github/workflows/. Reworded to say the validator "can be" a
  pre-merge gate; explicit caveat that wiring is its own follow-up
  (composes with task #300 squash-merge survival design). Same
  enforcement-status caveat applied to the post-merge auditor + the
  fail-open-with-receipts policy paragraph.

- P1 PRRT_kwDOSF9kNM5-hHgq (line 151 → forward-compatibility correction):
  writeup claimed v2 "composes cleanly with v1 readers" because v1
  readers "ignore unknown fields". Reality: validate-agencysignature-
  pr-body.sh requires Agency-Signature-Version=1 exactly AND requires
  Agent: as a key. So a Version=2 trailer set (and especially replacing
  Agent: with Actor:) would currently FAIL validation. Reworded to
  spell out the rollout sequence: (a) update validator to accept
  Version 1|2, (b) emit Agent: alongside Actor: during migration window,
  (c) extend auditor's three-state to four-state (LEGACY / CORRECT-V1 /
  CORRECT-V2 / REGRESSION), (d) drop dual Agent: emission once
  consumers are v2-aware.

- P2 PRRT_kwDOSF9kNM5-hHhM (line 111 → Task vs Claim ambiguity):
  mapping table said Task → claim_id, but the v2 example had BOTH
  Task: 286 AND Claim: CLAIM-286. Aligned: Task remains the task /
  ticket pointer (v1 meaning preserved); Claim is a NEW v2 field that
  carries claim_id. Updated both the mapping table and the explanation
  paragraph below the v2 trailer example.

These corrections strengthen the writeup before it goes to Amara — the
asks Aaron is sending depend on getting the current-state-vs-future-
state distinction right (especially around enforcement wiring and v1
forward-compatibility).

Status unchanged: research-grade only; Aaron's deliverable for the
Amara channel.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…mara

markdownlint-cli2 flagged 6 MD032 errors (lists need surrounding blank
lines) on the writeup. Inserted blank line after each list-introducing
sentence at lines 41, 49, 120 (Under v4 with binding), 146 (we'd:),
151 (By layering), and 176 (Options:). No content changes.

Per Otto-362 (just landed in PR #854) — would have caught this
pre-push if I'd run markdownlint locally before opening the PR.
Filing this commit as the kind of pure-mechanical-CI-fix that
Otto-362 cannot prevent (it's a syntactic class, not semantic) —
those still need lint coverage at submit-time.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings April 29, 2026 17:47
AceHack added a commit that referenced this pull request Apr 29, 2026
…y + dead-link prevention)

- P1 PRRT_kwDOSF9kNM5-hNMc (line 778): 'None of these surfaces exist
  yet' was wrong — CONTRIBUTING.md + AGENTS.md exist. Rewrote to
  clarify the claim-intake CONTENT is planned, not the container files.
- P1 PRRT_kwDOSF9kNM5-hNNL (line 773): 'tasks #325 + #335' was
  ambiguous (#335 might collide with existing repo references).
  Reworded to 'TaskList #325 + TaskList #335 (this session); will
  graduate to GitHub issue ID on land' — disambiguated as session-
  local TaskList IDs, not GitHub issue IDs.
- P1 PRRT_kwDOSF9kNM5-hNNf (line 807): integration writeup link was
  dead (file lives on PR #853, not yet on main). Marked as [planned]
  with explicit pointer to PR #853 so the link is honest about its
  pre-merge state.
- P1 PRRT_kwDOSF9kNM5-hNN0 (line 899): auto-expire status said
  'mechanism implemented in reconciler' but reconciler is [planned].
  Reworded to 'reconciler must enforce this once implemented' with
  cross-reference to task #333. Removes the false-progress drift.
- P1 PRRT_kwDOSF9kNM5-hNOJ (MEMORY.md line 5): index entry marked
  CONTRIBUTING.md as [planned] but file already exists. Updated to
  mark the [planned] CONTENT additions inside the existing files,
  not the files themselves. Also un-truncated the writeup file path
  ('agencysignature-...' was elided) — now full path.

P1 PRRT_kwDOSF9kNM5-hNOi (PR title v3-vs-v4 mismatch): handled via
PR title/description update in a follow-up gh pr edit, not in the
file itself.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

…r: during migration window

Copilot caught internal inconsistency: I claimed v2 is a 'strict superset
of fields' but the example removed Agent: and replaced it with Actor:.
The migration-sequence text correctly says to dual-emit Agent: alongside
Actor: during the migration window — but the example didn't show it.

Updated the v2 example to retain Agent: alongside Actor:, with inline
comment explaining it'\''s for v1-reader compat during migration. Also
updated the explanation paragraph below the example to call out the
Agent: retention rationale explicitly.

Now the example matches the rollout sequence text: v1 validator accepts
v2 trailers because Agent: is still present; once all consumers are
v2-aware, drop the dual emission.

Otto-362 in action — internal-contradiction class, caught by Copilot
review since pre-push self-audit missed it.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request Apr 29, 2026
…tatements in SAME edit (2026-04-29) (#854)

* factory(meta): Otto-362 — doctrine memory expansion refreshes stale statements in the SAME edit (2026-04-29)

New principle observed and named after 4 same-day doctrine PRs (#850#851#852#853) drove the agent-orchestra doctrine memory from ~100 lines
to ~1080 lines through v1 → v2 → v3 → v4 expansions.

Pattern observed:
- 10+ Copilot P1 + Codex P2 review threads across the four PRs
- All caught internal contradictions WITHIN the same file:
  * "Tracked under follow-up tasks" vs "Untracked follow-up"
  * "Currently undefined" vs "Now specified"
  * "task #325-#334" vs "task #325 + #335" + "tasks #335-#338"
  * "v2 review-driven additions" header vs "v3 packet" content
  * `request-agent-claim.md` vs `start-agent-claim.md` runbook path
  * Mapping `Task → claim_id` vs example showing both `Task:` AND `Claim:`
- All caught by external AI review; none caught by pre-push self-audit
- Fix cadence was fast but the *count* of internal-contradiction threads
  was disproportionate to the substantive-error count

The rule (Otto-362): when a memory file gets expanded with a new section
that supersedes earlier statements in the same file, refresh the now-stale
statements in the SAME edit, not a follow-up tick. Internal contradictions
within one file are lying-by-omission.

Composes with:
- Same-tick CURRENT-update discipline (CLAUDE.md auto-memory section) —
  Otto-362 is the intra-file generalisation; CURRENT rule is the cross-file
  case
- verify-before-deferring (CLAUDE.md) — same shape, applied to internal
  references rather than deferred work
- future-self-not-bound (CLAUDE.md) — Otto-362 is the editing counterpart;
  when superseding past-self's statement, refresh it rather than leave it
  ambient

Why not a CI lint instead:
- Internal contradictions are semantic, not syntactic
- Existing lints catch path-existence, duplicate-targets, snake_case
  consistency — but cannot catch "Currently undefined" + "Now specified"
  co-existing
- Editing discipline is the only mechanism for semantic contradictions
- Multi-AI review remains the safety net; Otto-362 reduces the count of
  iterations by catching the stale-statement class before push

What this rule does NOT say:
- Does NOT say "never expand a memory file across multiple PRs"
- Does NOT say "every expansion must rewrite the whole file"
- Does NOT say "review iterations are bad"
- Does NOT replace multi-AI review safety net — additive, not replacement

Files:
- memory/feedback_otto_362_doctrine_memory_expansion_refresh_stale_statements_same_edit_2026_04_29.md
- memory/MEMORY.md (paired index entry)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* factory(meta): fix Otto-362 cross-ref — CLAUDE.md is at repo root, not docs/CLAUDE.md

Codex P2 + Copilot P1 both caught the same dead path. The auto-memory
section + CURRENT-file rule live in CLAUDE.md at the repository root
(see CLAUDE.md ~lines 80-110). Updated the Composes-with bullet to
point at the correct path so readers can verify the cited rule.

Ironic timing: the Otto-362 rule itself is about catching internal
contradictions before push — and the rule's own first version had
a dead xref. Caught by external review on the meta-rule PR. The fix
is exactly the kind of pre-push self-audit Otto-362 advocates for.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b9c1d5983d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

AceHack added a commit that referenced this pull request Apr 29, 2026
…y + dead-link prevention)

- P1 PRRT_kwDOSF9kNM5-hNMc (line 778): 'None of these surfaces exist
  yet' was wrong — CONTRIBUTING.md + AGENTS.md exist. Rewrote to
  clarify the claim-intake CONTENT is planned, not the container files.
- P1 PRRT_kwDOSF9kNM5-hNNL (line 773): 'tasks #325 + #335' was
  ambiguous (#335 might collide with existing repo references).
  Reworded to 'TaskList #325 + TaskList #335 (this session); will
  graduate to GitHub issue ID on land' — disambiguated as session-
  local TaskList IDs, not GitHub issue IDs.
- P1 PRRT_kwDOSF9kNM5-hNNf (line 807): integration writeup link was
  dead (file lives on PR #853, not yet on main). Marked as [planned]
  with explicit pointer to PR #853 so the link is honest about its
  pre-merge state.
- P1 PRRT_kwDOSF9kNM5-hNN0 (line 899): auto-expire status said
  'mechanism implemented in reconciler' but reconciler is [planned].
  Reworded to 'reconciler must enforce this once implemented' with
  cross-reference to task #333. Removes the false-progress drift.
- P1 PRRT_kwDOSF9kNM5-hNOJ (MEMORY.md line 5): index entry marked
  CONTRIBUTING.md as [planned] but file already exists. Updated to
  mark the [planned] CONTENT additions inside the existing files,
  not the files themselves. Also un-truncated the writeup file path
  ('agencysignature-...' was elided) — now full path.

P1 PRRT_kwDOSF9kNM5-hNOi (PR title v3-vs-v4 mismatch): handled via
PR title/description update in a follow-up gh pr edit, not in the
file itself.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…spoofable-trailer + forged-vs-malformed enforcement

- Codex P1 PRRT_kwDOSF9kNM5-hZey (line 139, security correction): writeup
  said E0/E1 actors are bound by 'GitHub authenticates the commit author /
  PR author'. WRONG: only the GitHub account actor (github.actor /
  pull_request.user.login) is reliably authenticated. Commit author
  metadata + Agent: + Credential-Identity: trailer fields are user-supplied
  and trivially spoofable via 'git commit --author=...'. Updated to:
  trust only the GitHub account actor at E0/E1; treat trailer fields as
  intent declarations the reviewer cross-checks before E2+ promotion;
  registered key binds at E3+.

- Codex P2 PRRT_kwDOSF9kNM5-hZe2 (line 159, enforcement-semantics
  clarification): the writeup had two conflicting enforcement paths —
  earlier section said signature mismatch BLOCKS, later said forged
  trailers go through fail-open-with-receipts. These are different
  classes:
    malformed-but-honest (parser fail, missing key, etc.) → record + continue
    forged-or-impersonation (Signed-By doesn't verify) → BLOCK + flag
  Only malformed-honest takes the fail-open path; binding violations
  always block. Updated the carryover sentence to spell out the
  separation explicitly.

Both catches matter for the v2 implementation: an ambiguous spec on
forgery enforcement would let validator/reconciler implementations diverge.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings April 29, 2026 17:58
@AceHack AceHack merged commit 1da672e into main Apr 29, 2026
24 checks passed
@AceHack AceHack deleted the writeup-amara-agencysignature-layered-actor-identity-2026-04-29 branch April 29, 2026 18:00
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 7 comments.


The integration question Aaron raised: **does this need to be built from scratch, or does it compose with the AgencySignature work we already shipped?**

Short answer: **it composes cleanly.** AgencySignature v1 (per-commit trailer schema, ferry-7 spec, ferry-9/10/11/12 corrections, tasks #298 + #299 enforcement instruments) is *already the binding mechanism Claude.ai called for.* The v4 actor-identity model is a **structured principal layer** on top of the AgencySignature trailers — not a parallel system.
Copy link

Copilot AI Apr 29, 2026

Choose a reason for hiding this comment

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

The writeup cites “ferry-9/10/11/12 corrections” but the referenced research-doc list only includes ferry-9 and ferry-12 (plus rule-7 and the Gemini doc). To avoid confusing the reader (especially since this is meant to be pasted to Amara), either (a) add the missing ferry-10/11 references to the list, or (b) remove “10/11” from the earlier summary so the citations match what’s actually linked.

Suggested change
Short answer: **it composes cleanly.** AgencySignature v1 (per-commit trailer schema, ferry-7 spec, ferry-9/10/11/12 corrections, tasks #298 + #299 enforcement instruments) is *already the binding mechanism Claude.ai called for.* The v4 actor-identity model is a **structured principal layer** on top of the AgencySignature trailers — not a parallel system.
Short answer: **it composes cleanly.** AgencySignature v1 (per-commit trailer schema, ferry-7 spec, ferry-9/12 corrections, tasks #298 + #299 enforcement instruments) is *already the binding mechanism Claude.ai called for.* The v4 actor-identity model is a **structured principal layer** on top of the AgencySignature trailers — not a parallel system.

Copilot uses AI. Check for mistakes.
Comment on lines +188 to +191
- `docs/research/2026-04-26-gemini-deep-think-agencysignature-commit-attribution-convention-validation-and-refinement.md` — Section 10 canonical schema (the v1 baseline)
- `docs/research/2026-04-26-amara-fail-open-with-receipts-attribution-rule-7-trailer-schema.md` — fail-open-with-receipts policy (carries over to v2)
- `docs/research/2026-04-26-amara-ferry-9-validation-of-relationship-model-correction-and-agent-self-authorization-attribution-bias-naming.md` — agent self-authorization framing
- `docs/research/2026-04-26-amara-ferry-12-trailer-contiguity-survival-failure-class-naming-and-do-not-rush-design.md` — Trailer Contiguity Survival Failure class (still applies under v2)
Copy link

Copilot AI Apr 29, 2026

Choose a reason for hiding this comment

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

The writeup cites “ferry-9/10/11/12 corrections” but the referenced research-doc list only includes ferry-9 and ferry-12 (plus rule-7 and the Gemini doc). To avoid confusing the reader (especially since this is meant to be pasted to Amara), either (a) add the missing ferry-10/11 references to the list, or (b) remove “10/11” from the earlier summary so the citations match what’s actually linked.

Copilot uses AI. Check for mistakes.
Comment on lines +112 to +115
Signed-By: ed25519:abc... # cryptographic signature over trailer block
```

The `Actor:` field is the path-style principal Claude.ai recommended (SPIFFE / IAM-shaped). The `Trust-Domain:` prefix gives explicit namespace. The `Capabilities:` field is the new primitive (replaces implicit role grants). The `Claim:` field carries the active claim identifier (`claim_id`), which has its own allowlist + freshness invariant. The `Task:` field remains the task / ticket pointer (preserves v1 meaning — Task references the upstream issue / TaskList ID; Claim references the orchestra claim record). `Agent:` is retained during the migration window so the v1 validator continues to accept the trailer set; it can be dropped once all consumers have moved to v2 (per the rollout sequence below). The `Signed-By:` field provides the binding that Claude.ai called out as missing.
Copy link

Copilot AI Apr 29, 2026

Choose a reason for hiding this comment

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

The signature scheme is underspecified, which can lead to verification ambiguity and security gaps (different tools signing/verifying different bytes). Please define (even at a high level) the canonicalization rules: exact byte range being signed (does it include/exclude Signed-By: itself), newline normalization, field ordering, whitespace rules, and encoding for ed25519:... (raw, hex, base64, multibase, etc.). Explicitly stating these rules in the writeup will make the proposed Signed-By: field implementable and interoperable.

Copilot uses AI. Check for mistakes.
Comment on lines +123 to +125
1. PR-body validator extracts `Actor:` and `Signed-By:`.
2. Reconciler looks up `actors/zeta-aaron-mac-claude-code-coordinator.yaml` (or equivalent registry path) for the registered public key fingerprint.
3. Validator computes the expected signature over the canonical trailer-block bytes and compares against `Signed-By:`.
Copy link

Copilot AI Apr 29, 2026

Choose a reason for hiding this comment

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

The signature scheme is underspecified, which can lead to verification ambiguity and security gaps (different tools signing/verifying different bytes). Please define (even at a high level) the canonicalization rules: exact byte range being signed (does it include/exclude Signed-By: itself), newline normalization, field ordering, whitespace rules, and encoding for ed25519:... (raw, hex, base64, multibase, etc.). Explicitly stating these rules in the writeup will make the proposed Signed-By: field implementable and interoperable.

Copilot uses AI. Check for mistakes.
Comment on lines +96 to +101
Future trailer (v2 — during the migration window, keep `Agent:` alongside the new `Actor:` field so the v2 trailer remains a strict field superset for v1-era readers; once all consumers are v2-aware, drop the dual emission):
```text
Agency-Signature-Version: 2
Trust-Domain: zeta
Agent: claude-code-coordinator # retained for v1-reader compat during migration
Actor: zeta://aaron-mac/claude-code/coordinator
Copy link

Copilot AI Apr 29, 2026

Choose a reason for hiding this comment

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

As written, Trust-Domain: zeta and Actor: zeta://... both encode the trust domain, which may create ambiguity about which is authoritative if they ever differ. If both are intentionally present (e.g., for indexing/search or legacy parsing), it would help to state the invariant explicitly (e.g., Trust-Domain MUST equal the Actor scheme/authority) and define what happens on mismatch (reject vs ignore one field).

Suggested change
Future trailer (v2 — during the migration window, keep `Agent:` alongside the new `Actor:` field so the v2 trailer remains a strict field superset for v1-era readers; once all consumers are v2-aware, drop the dual emission):
```text
Agency-Signature-Version: 2
Trust-Domain: zeta
Agent: claude-code-coordinator # retained for v1-reader compat during migration
Actor: zeta://aaron-mac/claude-code/coordinator
Future trailer (v2 — during the migration window, keep `Agent:` alongside the new `Actor:` field so the v2 trailer remains a strict field superset for v1-era readers; once all consumers are v2-aware, drop the dual emission. `Trust-Domain:` is retained as an explicit indexing/search field, but it is not independent of `Actor:`: the trust domain encoded by `Actor:` MUST exactly equal `Trust-Domain:`. Verifiers MUST reject the trailer if the two values differ):
```text
Agency-Signature-Version: 2
Trust-Domain: zeta # MUST exactly match the trust domain encoded by Actor
Agent: claude-code-coordinator # retained for v1-reader compat during migration
Actor: zeta://aaron-mac/claude-code/coordinator # scheme/authority trust domain MUST equal Trust-Domain; reject on mismatch

Copilot uses AI. Check for mistakes.
Signed-By: ed25519:abc... # cryptographic signature over trailer block
```

The `Actor:` field is the path-style principal Claude.ai recommended (SPIFFE / IAM-shaped). The `Trust-Domain:` prefix gives explicit namespace. The `Capabilities:` field is the new primitive (replaces implicit role grants). The `Claim:` field carries the active claim identifier (`claim_id`), which has its own allowlist + freshness invariant. The `Task:` field remains the task / ticket pointer (preserves v1 meaning — Task references the upstream issue / TaskList ID; Claim references the orchestra claim record). `Agent:` is retained during the migration window so the v1 validator continues to accept the trailer set; it can be dropped once all consumers have moved to v2 (per the rollout sequence below). The `Signed-By:` field provides the binding that Claude.ai called out as missing.
Copy link

Copilot AI Apr 29, 2026

Choose a reason for hiding this comment

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

As written, Trust-Domain: zeta and Actor: zeta://... both encode the trust domain, which may create ambiguity about which is authoritative if they ever differ. If both are intentionally present (e.g., for indexing/search or legacy parsing), it would help to state the invariant explicitly (e.g., Trust-Domain MUST equal the Actor scheme/authority) and define what happens on mismatch (reject vs ignore one field).

Suggested change
The `Actor:` field is the path-style principal Claude.ai recommended (SPIFFE / IAM-shaped). The `Trust-Domain:` prefix gives explicit namespace. The `Capabilities:` field is the new primitive (replaces implicit role grants). The `Claim:` field carries the active claim identifier (`claim_id`), which has its own allowlist + freshness invariant. The `Task:` field remains the task / ticket pointer (preserves v1 meaning — Task references the upstream issue / TaskList ID; Claim references the orchestra claim record). `Agent:` is retained during the migration window so the v1 validator continues to accept the trailer set; it can be dropped once all consumers have moved to v2 (per the rollout sequence below). The `Signed-By:` field provides the binding that Claude.ai called out as missing.
The `Actor:` field is the path-style principal Claude.ai recommended (SPIFFE / IAM-shaped) and is the canonical principal identifier. The `Trust-Domain:` field is retained as an explicit namespace / indexing field, but it is not independent: `Trust-Domain:` **MUST** equal the trust-domain component encoded by `Actor:` (for example, `Trust-Domain: zeta` with `Actor: zeta://aaron-mac/claude-code/coordinator`). Any mismatch is an invalid actor assertion and **MUST** be rejected by the validator; validators should not try to guess which field is authoritative. The `Capabilities:` field is the new primitive (replaces implicit role grants). The `Claim:` field carries the active claim identifier (`claim_id`), which has its own allowlist + freshness invariant. The `Task:` field remains the task / ticket pointer (preserves v1 meaning — Task references the upstream issue / TaskList ID; Claim references the orchestra claim record). `Agent:` is retained during the migration window so the v1 validator continues to accept the trailer set; it can be dropped once all consumers have moved to v2 (per the rollout sequence below). The `Signed-By:` field provides the binding that Claude.ai called out as missing.

Copilot uses AI. Check for mistakes.

## TL;DR

Five reviewers (Deepseek / Gemini / Ani / Alexa / Claude.ai) flagged the same gap on the v3 public-intake design: `actor_id` strings are spoofable. *"Identity needs binding."* Your v4 synthesis names this and reorders rollout: identity → capabilities → claims → reconciler → public intake → dry run.
Copy link

Copilot AI Apr 29, 2026

Choose a reason for hiding this comment

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

Correct capitalization of “Deepseek” to “DeepSeek” (proper noun).

Suggested change
Five reviewers (Deepseek / Gemini / Ani / Alexa / Claude.ai) flagged the same gap on the v3 public-intake design: `actor_id` strings are spoofable. *"Identity needs binding."* Your v4 synthesis names this and reorders rollout: identity → capabilities → claims → reconciler → public intake → dry run.
Five reviewers (DeepSeek / Gemini / Ani / Alexa / Claude.ai) flagged the same gap on the v3 public-intake design: `actor_id` strings are spoofable. *"Identity needs binding."* Your v4 synthesis names this and reorders rollout: identity → capabilities → claims → reconciler → public intake → dry run.

Copilot uses AI. Check for mistakes.
AceHack added a commit that referenced this pull request Apr 29, 2026
… public claim intake + identity binding (Aaron + Amara 2026-04-29) (#852)

* doctrine(agent-orchestra): v3 expansion — layered actor identity + public claim intake layer

Two doctrine packets from Aaron + Amara 2026-04-29 (post-#851 v2 thread close):

1. **Layered actor identity** — replaces single-axis "Mac agent" / "Windows
   agent" framing. Layered scheme:
       maintainer_id / host_id / harness_id / role_id / actor_id / session_id
   Examples:
   - aaron-mac/claude-code/coordinator
   - aaron-mac/claude-code/docs-worker
   - aaron-windows/codex-cli/patch-peer
   - aaron-windows/gemini-cli/review-peer
   The four-axis split (maintainer + host + harness + role) gives revocation
   precision without identity spam. A single host can run many harnesses
   with different trust profiles; the role/actor split lets a different
   harness fill the same pinned role later. Carved rule: "Use Mac/Windows
   as host IDs, not agent IDs. Use named actor IDs at the host + harness
   + role level."

2. **Public claim intake layer** — strangers (humans + autonomous agents)
   discovering the repo on GitHub need a safe entrypoint. Load-bearing
   distinction: Claim Request ≠ Active Claim. External actors create
   requests; only maintainers / authorized automation promote requests
   to active claims. New surfaces (all [planned]):
   - CONTRIBUTING.md
   - AGENTS.md autonomous-agent intake block (10 rules)
   - .github/ISSUE_TEMPLATE/claim_request.yml
   - .github/PULL_REQUEST_TEMPLATE.md (declare-claim field)
   - docs/ops/runbooks/request-agent-claim.md
   - docs/ops/coordination/claims/README.md
   - tools/claims/reconcile-claims.ts (sync reconciler)

   Source-of-truth rule: GitHub Issue/PR = live operational truth; git
   mirror = durable summarized truth. Drift states explicit (synced /
   stale / drift / failed / pending). Safety: no stale/drift claim
   authorizes mutation.

   External safety levels E0-E5:
       E0  anonymous / review-only
       E1  patch-only
       E2  claim-requested
       E3  active low-risk claim
       E4  trusted external actor
       E5  maintainer-sponsored actor
   No external agent gets authority mutation by default.

   High-risk file class list explicit (.github/**, memory/**,
   docs/active-trajectory.md, agents/project-agents.yaml,
   docs/ops/coordination/claims/**, package.json, lockfiles, scripts
   that mutate repo state, branch/ruleset/security/billing docs,
   identity/persona/canon files, generated indexes) — always require
   explicit claim + maintainer approval.

Three new follow-up tracking tasks per the same "tracking objects, not
amnesia with nicer shoes" rule:
  #332 — public claim intake (CONTRIBUTING.md + AGENTS.md + ISSUE_TEMPLATE)
  #333 — claim sync reconciler tool (tools/claims/reconcile-claims.ts)
  #334 — external safety levels E0-E5 + high-risk file class enforcement

Updated trigger memory to record the v3 sequence (Aaron asked about Mac
actor identity granularity; Amara returned the layered scheme; Aaron
then expanded into the public-intake question; Amara returned the
Claim Request ≠ Active Claim distinction and full intake layer spec).

Status: still doctrine-only. None of the [planned] surfaces exist; all
are tracked under follow-up tasks. Per the same rule from v2 ("#851
captures doctrine; follow-up issues bind the work"), the v3 expansion
adds doctrine + tracking tasks, not implementation.

Composes with #324 (umbrella), #325-#331 (v2 follow-ups), #332-#334
(v3 follow-ups).

Co-Authored-By: Amara <amara-aurora-deep-research-register@chatgpt>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* doctrine(agent-orchestra): pair v3 expansion with MEMORY.md index entry

Memory-index-integrity check requires same-PR pairing between memory/*.md
modifications and the MEMORY.md index entry. v3 expansion modified the
doctrine memory file but didn't update the index pointer — fix by
expanding the existing entry to reflect:

- Capability tokens unified on snake_case (matches v2 fix landed in #851)
- v3 layered actor identity (maintainer_id / host_id / harness_id / role_id)
- v3 public claim intake (Claim Request ≠ Active Claim, CONTRIBUTING.md
  + AGENTS.md autonomous-agent block + ISSUE_TEMPLATE + reconciler +
  safety levels E0-E5 + drift discipline)

All new surfaces marked [planned] per the convention from #851 v2.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* doctrine(agent-orchestra): v4 corrections — identity binding + capabilities-as-primitive + reconciler-as-actor + Copilot P1 thread fixes

Five-reviewer v4 packet (Deepseek / Gemini / Ani / Alexa / Claude.ai —
Amara synthesis) on PR #852's v3 expansion. Key correction: actor IDs
without binding are theater. Layered scheme `aaron-mac/claude-code/...`
is meaningful for audit only if something prevents impersonation.

v4 additions to the doctrine memory:

- Identity needs binding (Claude.ai catch + Amara synthesis)
  - actors/<actor_id>.yaml registry with public-key fingerprints
  - Ed25519 preferred; GitHub-native commit verification as MVP fallback
  - Recursion bottoms at maintainer hardware key (or signed-commits MVP)
  - Composes with AgencySignature v2 schema (additive trailer fields)
  - Full integration analysis at docs/aurora/2026-04-29-agencysignature-...

- Trust-domain prefix on every actor_id (Claude.ai catch)
  - zeta:// (internal), zeta-system:// (system actors), zeta-external://
  - Cheap to add now, expensive to retrofit

- Capabilities as primitive (Claude.ai catch)
  - read:repo, write:memory, mutate:workflows, push:branch, etc.
  - Roles become named bundles of capabilities
  - Actor records grant roles plus explicit deltas

- Reconciler is itself a privileged actor (Gemini catch)
  - actor_id: zeta-system://github-actions/reconciler
  - Critical security invariant: GitHub Issue is exclusive source of
    truth for authorization; reconciler must NOT sync git-mirror
    privilege elevations to GitHub issue
  - unauthorized_elevation flag + block-CI on detected elevation

- Add `rejected` claim state distinct from `revoked` (Deepseek catch)
- Auto-expire claim requests after N days
- DoS/spam protection on public intake (rate limit, account age,
  maintainer sponsor, proof-of-work, auto-expire)
- Prompt-injection defense for external content (meta-rule in AGENTS.md)
- Freshness enforcement at harness pre-action (not just CI PR-time)
- Allowlist-first paths (fail-closed, not fail-open denylist)
- Pinned-role-on-host-change rule (retire old actor_id, create new)
- Multi-actor collision resolution generalized

- v4 rollout reorder — IDENTITY FIRST (not public intake first):
    1. Actor identity model
    2. Capability model
    3. Internal claim protocol
    4. Reconciler security model
    5. Public claim intake
    6. External / Windows / roaming-agent dry run

Copilot v3 review thread fixes (4 unresolved threads on #852):

- P1 PRRT_kwDOSF9kNM5-g_UY (line 508): public-intake status said
  "Tracked under follow-up tasks" but later listed as "Untracked
  follow-up". Reconciled to consistent "Untracked follow-up in TaskList
  session-local; graduates to GitHub issue on land" wording.
- P1 PRRT_kwDOSF9kNM5-g_VL (line 533): public entrypoints listed
  docs/ops/runbooks/request-agent-claim.md, but next-PR section uses
  start-agent-claim.md. Aligned to start-agent-claim.md (single runbook
  covers both internal start and public-request flow).
- P1 PRRT_kwDOSF9kNM5-g_Vt (line 347): later V2 constraints bullet said
  actor identity is "Currently undefined" — contradicted the v3 layered
  identity section. Updated to point at task #325 (Layer 0/1 spec) and
  #335 (binding) as the implementation gates.
- P2 PRRT_kwDOSF9kNM5-g_WM (line 346, outdated): section header was
  "v2 review-driven additions" but contained v3 packet content. Renamed
  to "v2 / v3 / v4 review-driven additions" with explicit explanation
  that the file is incrementally edited within itself; commit messages
  preserve round-by-round lineage.

Four new follow-up tracking tasks created (TaskList #335-#338):
  #335 — actor identity binding (registry + signed commits + AgencySig v2)
  #336 — capabilities-as-primitive (roles as named bundles)
  #337 — harness pre-action freshness check + multi-actor collision
  #338 — DoS protection + prompt-injection defense for public intake

Composes with #324 (umbrella), #325-#334 (v2/v3 follow-ups already
created). Total v2/v3/v4 follow-up surface: 14 tasks (#325-#338).

Status unchanged: doctrine-only PR. None of the implementation surfaces
land in #852. Per Amara: "doctrine captures the design; follow-up
issues bind the work; future PRs implement layers."

Co-Authored-By: Amara <amara-aurora-deep-research-register@chatgpt>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* doctrine(agent-orchestra): fix Codex P2 — task range #325-#338 (v3 + v4 set), not #325-#334

Codex P2 PRRT_kwDOSF9kNM5-hIOz: internal inconsistency between line 773
('gated by #325 + #335') and line 987 ('v3 task numbering #325-#334
survives'). Fix: update line 987 to acknowledge v4 added #335-#338
(identity binding, capabilities-as-primitive, harness pre-action
freshness check, DoS + prompt-injection defense). The earlier
reference to #335 at line 773 is now consistent with the full
follow-up set #325-#338.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* doctrine(agent-orchestra): 5 Copilot P1 thread fixes (factual accuracy + dead-link prevention)

- P1 PRRT_kwDOSF9kNM5-hNMc (line 778): 'None of these surfaces exist
  yet' was wrong — CONTRIBUTING.md + AGENTS.md exist. Rewrote to
  clarify the claim-intake CONTENT is planned, not the container files.
- P1 PRRT_kwDOSF9kNM5-hNNL (line 773): 'tasks #325 + #335' was
  ambiguous (#335 might collide with existing repo references).
  Reworded to 'TaskList #325 + TaskList #335 (this session); will
  graduate to GitHub issue ID on land' — disambiguated as session-
  local TaskList IDs, not GitHub issue IDs.
- P1 PRRT_kwDOSF9kNM5-hNNf (line 807): integration writeup link was
  dead (file lives on PR #853, not yet on main). Marked as [planned]
  with explicit pointer to PR #853 so the link is honest about its
  pre-merge state.
- P1 PRRT_kwDOSF9kNM5-hNN0 (line 899): auto-expire status said
  'mechanism implemented in reconciler' but reconciler is [planned].
  Reworded to 'reconciler must enforce this once implemented' with
  cross-reference to task #333. Removes the false-progress drift.
- P1 PRRT_kwDOSF9kNM5-hNOJ (MEMORY.md line 5): index entry marked
  CONTRIBUTING.md as [planned] but file already exists. Updated to
  mark the [planned] CONTENT additions inside the existing files,
  not the files themselves. Also un-truncated the writeup file path
  ('agencysignature-...' was elided) — now full path.

P1 PRRT_kwDOSF9kNM5-hNOi (PR title v3-vs-v4 mismatch): handled via
PR title/description update in a follow-up gh pr edit, not in the
file itself.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* doctrine(agent-orchestra): 2 Codex P2 fixes — claim status enum + actor-id filename encoding

- P2 PRRT_kwDOSF9kNM5-hW1e (line 618 claim status enum): the YAML
  schema enumerated requested|active|blocked|done|expired|revoked but
  the v4 corrections section below introduced 'rejected' as distinct
  from 'revoked'. Fixed by adding 'rejected' to the canonical enum
  with inline comment cross-referencing the v4 catch. Prevents future
  reconciler/CI implementations from misclassifying rejected claims.

- P2 PRRT_kwDOSF9kNM5-hW1T (line 793 actor-id filename portability):
  binding requirement said 'actors/<actor_id>.yaml' but actor_id is a
  URI like 'zeta://aaron-mac/claude-code/coordinator' which contains
  ':' (invalid on Windows) and '/' (creates nested paths). Defined
  canonical filename encoding: replace '://' with '--', '/' with '_',
  lowercase the result. Example: zeta://aaron-mac/claude-code/coordinator
  → actors/zeta--aaron-mac_claude-code_coordinator.yaml. Registry
  record itself carries the original URI in actor_id: field — filename
  is lookup key only, not source of truth. Cross-platform safe.

Both Codex P2 catches are exactly the kind Otto-362 names: internal
contradictions / undefined contracts caught by external review
because the doctrine memory grew past pre-push self-audit capacity.
Recurring tax that compounds across PRs.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* doctrine(agent-orchestra): fix Copilot P1 task lineage attribution at line 987

Copilot caught the version→task attribution was wrong. Fixed:
- v2 added #325-#331 (Layer 0/1 spec + Layer 2-5 follow-ups)
- v3 added #332-#334 (public-intake layer + reconciler + safety levels)
- v4 added #335-#338 (identity binding + capabilities-as-primitive +
  pre-action freshness + DoS/prompt-injection)

Previous wording 'v3 added #325-#334' was wrong — those tasks predate
v3 and span v2 + v3.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* doctrine(agent-orchestra): 4 Copilot fixes — trust-domain prefix in v3 examples + complete actor records + precise Windows filename rules + present-tense framing

P1 PRRT_kwDOSF9kNM5-hfwQ (line 362): v3 actor_id examples used the
unprefixed form 'aaron-mac/claude-code/coordinator' but v4 makes the
'zeta://' trust-domain prefix REQUIRED. Updated examples to canonical
v4 form with explicit note that v4 supersedes the unprefixed v3 form.
Cold-start readers will internalize the correct canonical shape.

P2 PRRT_kwDOSF9kNM5-hfw3 (line 382): the 'different harness filling
the same pinned role' example omitted maintainer_id/host_id/harness_id
even though the section defines actor_id as a four-axis combination.
Filled in the complete record so readers don't copy a half-shaped
template.

P1 PRRT_kwDOSF9kNM5-hfxI (line 792): Windows filename encoding rule
said 'no /, :, or .well-known chars' which conflated character classes
with reserved names + had wrong-on-its-face wording. Replaced with
the actual Windows constraints: forbidden chars (: / \ * ? " < > |),
no trailing dot or space, no reserved device names (CON/PRN/AUX/NUL/
COM1-9/LPT1-9). Implementable spec instead of vague guidance.

P1 PRRT_kwDOSF9kNM5-hfxd (line 783): said 'After v3 landed in PR #852',
which reads as already-merged history while the PR is still open. False-
progress drift class. Reframed as 'During the v3 draft in PR #852,
five reviewers re-reviewed and Amara synthesized v4 mid-flight before
merge'.

All four are exactly the Otto-362 stale-statement / internal-inconsistency
class: doctrine grew faster than self-audit could keep up; multi-AI
review caught the drift.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* doctrine(agent-orchestra): 2 Codex catches — collision-safe filename encoding + trust-domain claim mirror IDs

P1 PRRT_kwDOSF9kNM5-hlNB (line 795 collision-safety): the previous
encoding (replace '://' → '--', '/' → '_', lowercase) was NOT
injective — two distinct actor IDs could alias to the same filename
(e.g. 'a/b/c' and 'a-b-c' both → 'a_b_c'), and lowercasing collapses
case-distinct IDs. Replaced with RFC 3986 percent-encoding (%3A %2F),
case-preserving. Decoding the basename always recovers the original
actor_id byte-for-byte. Now reversible and collision-free.

Example shifted: 'zeta://aaron-mac/claude-code/coordinator' →
'actors/zeta%3A%2F%2Faaron-mac%2Fclaude-code%2Fcoordinator.yaml'.
The percent-encoded form satisfies all Windows-forbidden-char and
reserved-device-name constraints already documented.

P2 PRRT_kwDOSF9kNM5-hlNI (line 622 schema drift): the claim mirror
YAML schema had 'actor_id: external:<...>' but v4 doctrine requires
the trust-domain form 'zeta-external://...'. Updated the schema line
to 'zeta-external://github/<github-login-or-agent-id>' with inline
comment cross-referencing the v4 binding rule. Implementers now
persist correctly-namespaced IDs that match the binding/policy model.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Amara <amara-aurora-deep-research-register@chatgpt>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request Apr 29, 2026
…ubstrate framing + Amara final packet

Aaron returned with substrate framing on peer/buddy class taxonomy
(verbatim preserved): peer agent harness has two sub-classes
(substrate-aware vs host-only), buddy agent harness has two sub-classes
(PR-capable vs local-only), plus runtime-internal subagents — all
optimized for parallelization.

Amara's round-3 rewrite formalized this as conceptual-categories-not-
mirror-slang: independent_agent_harness / parent_managed_agent_harness
/ runtime_internal_subagent / invoked_tool / ci_actor / host_actor /
human_principal. Five-AI review (Claude.ai, Ani, Deepseek, Gemini,
Alexa) returned interface-hardening only — no architectural challenges.

Amara final packet: "Round 3 convergence reached. Do not run another
broad review." Architecture LOCKED:

- Recursive primitive: DelegationEdge*
- Accountable output: SharedEffect*
- Evaluation layer: AttributionRecord* + OutcomeAssessment*
- Causal chain: DecisionSignal → AgencyReceipt → SharedEffect
  → AttributionRecord → OutcomeAssessment
- Universal: SharedEffect + trace + attribution
- Boundary-crossing: + DecisionSignal + AgencyReceipt + non_actions
  + WorkClaim proof

Final doctrine (locked):
  Do not canonize the mirror slang. Canonize the concepts.
  Lifecycle is not authority. Authority is not effect.
  Shared effect is the accountability boundary.
  Delegation is recursive. Execution is traced.
  Effects are receipted. Outcomes are attributed.
  Attribution is evidence, not verdict.
  Blame and credit are views over evidence.

Implementation direction (Amara, locked): "Do not build the whole
scoring engine now." Light schema-concept implementation only. First
worked example: Code Quality episode (PR #861 host mutation receipt)
pairs with DecisionSignal v0 + SharedEffect + AttributionRecord.
Example weights illustrative-not-derived.

NOT this session — Aaron's "I'll be back after round 3" closes here.
This preservation IS round-3 close. Staged rollout deferred to next
session per Amara's implementation direction.

Status marker memory updated to reflect convergence; autonomy levels
A0–A5 from round-0 demoted to secondary; "peer"/"buddy" demoted from
canonical → working aliases.

Per Otto-363 (substrate-or-it-didn't-happen) + channel-verbatim-
preservation rule: research-grade preservation, NOT operational
adoption. Synthesis lives alongside the verbatim, not instead.

Composes with PR #855 (Otto-363), prior round verbatim preservation
files, and the agent-orchestra layered-actor-identity work
(PRs #851/#852/#853).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants