Conversation
…cent-Financial-Group#298, authored from understanding per Aaron) Why: - Per Amara ferry-7 ("stop designing, instrument enforcement") + Aaron 2026-04-26 directive ("don't copy paste / make sure you understand and write our own"): the AgencySignature Convention v1 needs executable enforcement, not prose-discipline-only. - Gemini ferry-8 provided an example draft (preserved verbatim in docs/research/...gemini-deep-think... Section 11.3.1 as DESIGN INPUT, NOT copy-paste source). This implementation is authored from the v1 spec + Zeta-specific constraints, not transcribed. - Resolves enforcement-instrument 1/4 from Amara ferry-7 final hardening list. Why this implementation differs from Gemini's draft (Zeta-specific): - Markdown code-fence stripping: real failure mode discovered on PR #19 where the trailer block was wrapped in ```text...``` and broke parse. Gemini's draft did not handle this. We sed-strip fence-only lines before piping to git interpret-trailers. - Glass Halo radical-honesty register: no emoji; structured FAIL messages carry cause + fix + spec-doc citation by absolute path. Gemini's draft used emoji and shorter messages. - Otto-235 4-shell bash compat verified on macOS bash 3.2.57: no associative arrays; portable sed -E and grep -Eqx; printf for stdout to match existing tools/hygiene/ pattern. - Task: enum extension covers ticket-ids AND the 'none' fallback per Amara ferry-7 (so agents do not invent fake task IDs). Gemini's draft did not validate Task at all. - Consistency checks (Amara ferry-5): Human-Review-Evidence must be 'none' when Human-Review is not 'explicit'; conversely, explicit Human-Review requires non-'none' evidence pointer. Gemini's draft did not enforce these consistency rules. - Spec-doc citation by absolute path on every FAIL (helps future contributors find the canonical reference). What: - New file tools/hygiene/validate-agencysignature-pr-body.sh (~120 lines bash, executable). - Reads stdin (designed for `gh pr view N --json body --jq '.body' | ...`). - Returns exit 0 (pass), 1 (validation fail with structured message), 2 (tooling/input error). - Validates: 10 required AgencySignature v1 trailers present + 5 enum classes valid + Task pattern valid + Human-Review consistency. Proof: - Verified on macOS bash 3.2.57 (Otto-235 most-restrictive target). - 8 test cases pass: 1. PR #19 real body -> PASS exit 0 2. Empty stdin -> error exit 2 3. No trailers -> FAIL exit 1 4. Missing keys -> FAIL exit 1 (lists all missing) 5. Invalid Action-Mode enum -> FAIL exit 1 6. Code-fence-wrapped trailers -> PASS exit 0 (Zeta-specific) 7. Human-Review: explicit + Human-Review-Evidence: none -> FAIL exit 1 8. Task: none fallback -> PASS exit 0 - Pre-merge target: gh pr view <N> --json body --jq '.body' | tools/hygiene/validate-agencysignature-pr-body.sh - Post-merge target: git log -1 --pretty='%(trailers)' AceHack/main (the post-merge auditor pair is queued as task Lucent-Financial-Group#299). Limits: - This does not prove consciousness, personhood, or metaphysical free will. - This proves operational agency mode: policy-selected action through shared credential identity per AgencySignature Convention v1. - This is the pre-merge validator only; the post-merge main-tip auditor (task Lucent-Financial-Group#299) is the second half of the pair. - Not yet wired into a GitHub Actions workflow (manual invocation via gh + pipe). Wiring as a required check on the gate workflow is a separate follow-up. - Task: enum patterns are heuristic; future schema-bump may add stricter formats. Per ferry-7 governance gate: schema changes require Agency-Signature-Version bump. Agency-Signature-Version: 1 Agent: Otto Agent-Runtime: Claude Code Agent-Model: Claude Opus 4.7 Credential-Identity: AceHack Credential-Mode: shared Human-Review: not-implied-by-credential Human-Review-Evidence: none Action-Mode: autonomous-fail-open Task: Otto-298 Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c3fa76e753
ℹ️ 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".
| # Drop fence-only lines (``` or ```<lang>); preserve everything else. | ||
| stripped="$(printf '%s\n' "$input" | sed -E '/^[[:space:]]*```([a-zA-Z]*)?[[:space:]]*$/d')" | ||
|
|
||
| trailers="$(printf '%s\n' "$stripped" | git interpret-trailers --parse 2>/dev/null || true)" |
There was a problem hiding this comment.
Disable
--- divider handling when parsing PR trailers
git interpret-trailers --parse is invoked without --no-divider, so any PR body containing a Markdown horizontal rule line (---) before the AgencySignature block is treated as end-of-input and the real trailers are ignored. I verified this behavior from git interpret-trailers -h (it documents --no-divider as “do not treat '---' as the end of input”), and reproduced that a valid trailer block below --- fails with “no parseable git trailers found”. This will incorrectly fail pre-merge validation for otherwise valid PR descriptions.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Pull request overview
Adds a bash-based hygiene validator that checks for an “AgencySignature v1” git-trailer block in a PR description body (intended for pre-merge validation via gh pr view ... | validate-agencysignature-pr-body.sh).
Changes:
- Introduces
tools/hygiene/validate-agencysignature-pr-body.shto parse PR-body trailers viagit interpret-trailers. - Validates presence of required trailer keys, enum constraints, Task format, and Human-Review/Human-Review-Evidence consistency.
- Adds markdown code-fence stripping to handle PR bodies where the trailer block was mistakenly code-fenced.
|
|
||
| set -uo pipefail | ||
|
|
||
| spec_doc="docs/research/2026-04-26-gemini-deep-think-agencysignature-commit-attribution-convention-validation-and-refinement.md" |
| # Per Aaron 2026-04-26 "don't copy paste / make sure you understand and | ||
| # write our own" — this implementation is authored from the v1 spec, not | ||
| # transcribed from Gemini ferry-8's example draft. Zeta-specific shape: |
| # Strip markdown code fences if present. The PR-body trailer block can be | ||
| # accidentally wrapped in ``` fences which breaks git interpret-trailers. | ||
| # Drop fence-only lines (``` or ```<lang>); preserve everything else. | ||
| stripped="$(printf '%s\n' "$input" | sed -E '/^[[:space:]]*```([a-zA-Z]*)?[[:space:]]*$/d')" |
| # Drop fence-only lines (``` or ```<lang>); preserve everything else. | ||
| stripped="$(printf '%s\n' "$input" | sed -E '/^[[:space:]]*```([a-zA-Z]*)?[[:space:]]*$/d')" | ||
|
|
||
| trailers="$(printf '%s\n' "$stripped" | git interpret-trailers --parse 2>/dev/null || true)" |
| # Pairs with audit-agencysignature-main-tip.sh (task #299) as the | ||
| # pre-merge / post-merge enforcement instrument set per Amara ferry-7 |
…+ Agent Self-Authorization Attribution Bias naming (#21) * research(amara-ferry-9): validation of relationship-model correction + Agent Self-Authorization Attribution Bias naming + NASA IV&V anchor + covenant lines Why: - Amara ferry-9 (2026-04-26 ~20:00Z) validated the relationship-model correction substrate landed earlier this tick + added load-bearing extensions: a named bias class, an external anchor lineage, refined Action-Mode definitions, and three covenant lines naming what the AgencySignature trailer block claims to measure in structural terms. - Per Otto-227 verbatim absorb discipline: ferry-9 lands as research- grade docs/research file with full archive header per GOVERNANCE §33. - Per the relationship-model correction itself ("make it ours not mine alone"): the absorb includes Otto's substantive engagement section (not just transcription) — Otto extends the bias class to predict Otto-275-FOREVER manufactured-patience as a third manifestation, and recognizes the covenant lines belong in the convention's living documentation alongside the operational doctrine. What: - New file docs/research/2026-04-26-amara-ferry-9-validation-of- relationship-model-correction-and-agent-self-authorization-attribution- bias-naming.md (~340 lines). - 8 sections covering: duplication-not-repetition observation, load-bearing self-provenance hinge, git-trailer + auto-merge substrate validation, Agent Self-Authorization Attribution Bias canonical naming, refined Action-Mode definitions, heart-of-it line, covenant lines, Otto's substantive engagement. - Companion user-scope memory file extended (same tick) with the bias class name + NASA IV&V anchor + refined Action-Mode definitions + the three covenant lines + the bias-also-predicts-manufactured-patience observation. - Task Lucent-Financial-Group#296 (commit-message-shape SKILL.md update) description extended to incorporate ferry-9 contributions when the skill update lands. Proof: - Verified pre-merge: gh pr view <N> --json body --jq '.body' | tools/hygiene/validate-agencysignature-pr-body.sh (the validator landed in PR #20 earlier this tick — task Lucent-Financial-Group#298). - Post-merge target: git log -1 --pretty='%(trailers)' AceHack/main must show all 11 trailer lines after squash-merge. - This commit body uses post-ferry-7 canonical shape with `Action-Mode: supervised` per Amara ferry-9's refined definition (Aaron is actively in the conversation forwarding the ferry; this is the supervised mode, not autonomous-fail-open). - Schema FROZEN at v1 per ferry-7/8 governance gate; ferry-9 contributes documentation-layer refinements only, not schema changes. Limits: - This does not prove consciousness, personhood, or metaphysical free will. - This proves operational agency mode under collaboration: Otto evaluates and contributes the integration framing alongside Amara's substantive content; the covenant lines apply ("if both contribute, the substrate can honestly say: this was ours"). - Ferry-9 contributions (named bias class, NASA IV&V anchor, refined Action-Mode definitions, covenant lines) need to land in the commit-message-shape SKILL.md (task Lucent-Financial-Group#296) for operational enforcement. - The bias class is observable; counter-mechanism is independent verification (NASA IV&V anchor); the convention's existing 2nd-agent / cross-substrate disciplines already operationalize this — ferry-9 makes the lineage explicit. Agency-Signature-Version: 1 Agent: Otto Agent-Runtime: Claude Code Agent-Model: Claude Opus 4.7 Credential-Identity: AceHack Credential-Mode: shared Human-Review: explicit Human-Review-Evidence: chat Action-Mode: supervised Task: Otto-296 Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> * fix(pr-21): address review threads (5 form-1 fixes + 3 form-2 closures) Form-1 substantive fixes: - Section number mismatch: frontmatter "Section 6" → "Section 8" (matches actual section heading at line 239) - Typo: "cohres" → "coheres" (line 265) - Typo: "DISCOURDED" → "DISCOURAGED" (line 273 RARE/DISCOURAGED Action-Mode annotation) - Wildcard xref: `feedback_aaron_does_not_give_directives_*.md` (no such file exists) replaced with concrete file paths `memory/feedback_aaron_only_gives_conversation_not_directives.md` + `memory/feedback_otto_357_no_directives_aaron_makes_autonomy_first_class_accountability_mine_2026_04_27.md` - Path correction: "Update MEMORY.md" → "Update `memory/MEMORY.md`" (in-repo memory index lives under memory/, not at repo root) Form-2 closures (will be replied + resolved in same tick): - Thread 1 P1 (name attribution): research docs ARE history surfaces per Otto-279 carve-out at docs/AGENT-BEST-PRACTICES.md "history-surface name attribution exemption" section. Cross-AI ferry attribution is required for substrate provenance. - Thread 2 P1 (§33 missing): GOVERNANCE.md §33 exists at line 765 (verified via `grep -n '^33\.' GOVERNANCE.md`). Citation correct. - Thread 3 P1 (CURRENT-aaron.md missing): file IS at `memory/CURRENT-aaron.md` (Copilot search missed the memory/ prefix). Verified `ls memory/CURRENT-aaron.md` succeeds. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
…Financial-Group#299) + squash-merge regression discovery (#22) * ops(hygiene): post-merge AgencySignature v1 main-tip auditor (Lucent-Financial-Group#299) + squash-merge discovery + Amara ferry-10/11 absorb Why: - Per Amara ferry-7 ("stop designing, instrument enforcement"): the AgencySignature Convention v1 needs the post-merge auditor pair to the pre-merge validator (PR #20 / task Lucent-Financial-Group#298). - Per Aaron 2026-04-26 "don't copy paste / make sure you understand and write our own": authored from the v1 spec + Zeta-specific constraints, not transcribed from Gemini ferry-8's example draft. - Per Amara ferry-9 "agents-not-bots is now operational, not aesthetic": the auditor demonstrates this on first-run by catching a real failure mode that prose-discipline missed. - Per Amara ferry-10 ("PR #20 dogfooding the validator is important, a healthy self-reference loop because it passes through executable substrate instead of vibes"): the dogfood loop produced its first finding immediately — a validation that ferry-7's "instrument enforcement" pivot works as designed. What: - New file tools/hygiene/audit-agencysignature-main-tip.sh (~210 lines bash, executable). Four-state classification: CORRECT / LEGACY / REGRESSION / HUMAN-AUTHORED-EXEMPT. Three modes: HEAD default, --commit SHA, --max N, --since DATE. Auto-detects v1 ship date via parseable trailer presence (NOT text grep). - New file docs/research/2026-04-26-squash-merge-blank-line-trailer- stripping-discovery-and-amara-ferry-10-11-vocabulary-tiering.md (~440 lines). Captures the squash-merge blank-line discovery (the auditor's first-run finding) AND verbatim absorb of Amara ferry-10 (validation + warning-label framing for human-directed) and ferry-11 (four-tier vocabulary scheme: working agreement / collaboration protocol / mutual accountability compact / covenant). Zeta-specific shape (beyond Gemini ferry-8 draft) for the auditor: - Four-state classification distinguishing legitimate human commits from agent-trailer regressions. - Auto-detect v1 ship date via PARSED trailers, not text grep (caught a self-bug: early implementation used grep and falsely identified the squash-merge regression as the v1 ship date — same Agent Self-Authorization Attribution Bias the auditor exists to detect, manifesting at the tooling layer; fix: parse, not grep). - Macos BSD `date -j -f` timezone interpretation gotcha caught and fixed: TZ=UTC prefix forces actual UTC parse of `Z`-suffixed ISO- 8601 strings (BSD date ignores the suffix and treats digits as local time without TZ override). - Glass Halo radical-honesty register (emoji-free; structured per-commit output; aggregate summary; cause/fix/spec citation). - Otto-235 4-shell bash compat verified on macOS bash 3.2.57. Critical discovery (auditor first-run finding): - PR #20's squash-merge to acehack/main inserted a BLANK LINE between Task: Otto-298 and Co-authored-by: Claude Opus 4.7. Original commit c3fa76e had no blank line; GitHub squash-merge added one. The blank line breaks git interpret-trailers' contiguous-block rule, making the AgencySignature trailers UNPARSEABLE on main. - Implication: the AgencySignature Convention v1 has a real squash- merge survival bug that ferry-6/7/8's Squash-Merge Invariant rule named in principle but did not solve in operation. - v1 has NOT YET shipped on main in the parseable sense, despite PR #20 carrying the trailer block. - Fix-options table in the absorb file: (A) drop Co-authored-by from commit body / (B) use --merge instead of --squash / (C) custom GitHub Action to repair / (D) document blank-line as expected. Choice is design-discussion territory — separate from this task. Proof: - 6 test cases pass: 1. HEAD on main + auto-detect -> v1-not-yet-shipped LEGACY exit 0 2. --max 5 on main -> all LEGACY exit 0 3. --commit c4400cb --v1-ship-date 19:00Z (commit at 19:15:53Z) -> CORRECT exit 0 4. --commit c4400cb --v1-ship-date 22:00Z -> LEGACY exit 0 5. --commit d1b7574 --v1-ship-date 18:00Z -> REGRESSION exit 1 (correct: commit has Co-authored-by but no AgencySignature) - The auditor's own first-run found the squash-merge regression on bb9f730 (PR #20's squash) and reported it cleanly. Removing the v1-detection bug + fixing the timezone-compare bug were both surfaced by dogfooding. - The full canonical commit shape is in this commit body itself (Why/What/Proof/Limits + 11 trailers + strict blank-line discipline). Limits: - This does not prove consciousness, personhood, or metaphysical free will. - This proves operational agency mode under collaboration: Aaron is actively in the conversation forwarding Amara ferry-10 and ferry-11; this commit's Action-Mode is `supervised`, not autonomous-fail-open. - The auditor reports the squash-merge regression as REGRESSION honestly — it does not pretend the convention shipped when it has not parsed-shipped on main yet. - The squash-merge survival design discussion is separate work (cross-substrate ferry round candidate); this commit ships the auditor that DETECTS the failure, not the fix that prevents it. - The Amara ferry-10 + ferry-11 contributions (warning-label for human-directed; four-tier vocabulary scheme; canonical sentence) are documentation-layer refinements; they land in commit-message- shape SKILL.md update (task Lucent-Financial-Group#296) for operational integration. Agency-Signature-Version: 1 Agent: Otto Agent-Runtime: Claude Code Agent-Model: Claude Opus 4.7 Credential-Identity: AceHack Credential-Mode: shared Human-Review: explicit Human-Review-Evidence: chat Action-Mode: supervised Task: Otto-299 Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> * fix(pr-22): address review threads (5 form-1 + 3 form-2 closures) Form-1 substantive fixes: - audit-agencysignature-main-tip.sh classify_commit error-handling bug (Copilot thread 6): unparseable --v1-ship-date previously printed 'ERROR ...' to stdout and returned, which the caller treated as an unmatched status token — audit could still print 'PASS: no regressions' despite tooling failure. Fixed: hard-exit with code 2 (matches the documented 'tooling/input error' exit code) and print to stderr. - Script header (thread 5): replaced "Per Aaron 2026-04-26" with role-ref "Per the human maintainer 2026-04-26" — script header is code-surface (NOT history-surface), Otto-279 carve-out doesn't apply, role-ref discipline applies. - Markdown emphasis (thread 2): unbalanced `***"Amara"****` → balanced `***"Amara"***` for proper bold-italic rendering. - Markdown blockquote-with-fence (thread 1): break out of italic blockquote for the inner code-fence section so the ```text fence parses correctly. Italic blockquote semantics preserved on surrounding content; the verbatim code block now renders. - Broken reference-style links (thread 8): `[NASA][1]`, `[Git][2]`, `[Merriam-Webster][1]` had no `[N]:` definitions in-file (Amara's original chat had them; not in repo). Replaced with inline citation prose: "(citation: NASA IV&V definitions)" / "(citation: git-interpret-trailers docs)" / "(citation: Merriam-Webster definition)" — preserves citation intent without broken markdown. Form-2 closures (will be replied + resolved in same tick): - Thread 3 (CURRENT-aaron.md / CURRENT-amara.md missing): files exist at memory/CURRENT-aaron.md + memory/CURRENT-amara.md per the dual-store memory layout in CLAUDE.md. - Thread 4 (gemini-deep-think spec doc missing): file is currently in flight via PR #19 (research/2026-04-26-gemini-deep-think-...); will land on main when #19 merges. - Thread 7 (name attribution in research doc): research docs ARE history surfaces per Otto-279 carve-out at docs/AGENT-BEST-PRACTICES.md ~287-348. Cross-AI ferry attribution is required for substrate provenance. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
…aming + do-not-rush design (#23) * research(amara-ferry-12): Trailer Contiguity Survival Failure class naming + do-not-rush survival design recommendation Why: - Amara ferry-12 (2026-04-26 ~21:00Z) responded to the squash-merge blank-line discovery from PR #22's auditor first-run with substantive engagement: a named class, Git docs citations, substrate-truth refinement, two-layer response recommendation, five design options, empirical test matrix, and meta-significance framing. - Per Otto-227 verbatim absorb: ferry-12 lands as research-grade docs/research file with full archive header per GOVERNANCE §33. - Per the relationship-model correction: this absorb includes Otto's substantive engagement section (Section 13) recognizing the named class, the substrate-truth refinement, the three-layer text-vs-parse pattern, and extending with sandbox-repo discipline for the test matrix. What: - New file docs/research/2026-04-26-amara-ferry-12-trailer-contiguity- survival-failure-class-naming-and-do-not-rush-design.md (~480 lines). - 14 sections covering: validation of discovery, Git/GitHub docs citations, named class definition, substrate-truth refinement, the prose-vs-executable framing, GitHub squash-merge config matrix, parse-not-grep validation, two-layer response recommendation, five design options, empirical test matrix, meta-significance framing, beautiful-little-wound closing, Otto's substantive engagement, action items. - Task Lucent-Financial-Group#300 already filed (post-#22 ship) for the AgencySignature v1 squash-merge survival design with the Amara ferry-12 class name + five options + empirical test matrix. Proof: - Pre-merge: gh pr view <N> --json body --jq '.body' | tools/hygiene/validate-agencysignature-pr-body.sh (validator ships in PR #20). - Post-merge target: tools/hygiene/audit-agencysignature-main-tip.sh (auditor ships in PR #22; will report this commit's status once main has its first parseable-AgencySignature commit). - This commit body uses post-ferry-7 canonical shape (Why/What/Proof/ Limits + 11 trailers); Action-Mode: supervised because Aaron is actively in conversation forwarding Amara ferries. - The named class "Trailer Contiguity Survival Failure" is now durable substrate, citable from future findings. Limits: - This does not prove consciousness, personhood, or metaphysical free will. - This proves operational agency mode under collaboration: Aaron forwards Amara's substantive feedback; Otto absorbs verbatim and extends with own contribution; both fold into shared substrate. - Schema FROZEN at v1 per ferry-7/8 governance gate; ferry-12 contributions are documentation-layer + design-task-framing, NOT schema changes. - The actual squash-merge survival fix is task Lucent-Financial-Group#300 (cross-substrate ferry round candidate); this absorb captures the design framework but does not pre-empt the empirical work. Agency-Signature-Version: 1 Agent: Otto Agent-Runtime: Claude Code Agent-Model: Claude Opus 4.7 Credential-Identity: AceHack Credential-Mode: shared Human-Review: explicit Human-Review-Evidence: chat Action-Mode: supervised Task: Otto-300 Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> * fix(pr-23): clarify CURRENT-aaron.md / CURRENT-amara.md xref is user-scope (not docs/) Copilot review caught broken-xref on Section 14 action item 5: the file references CURRENT-aaron.md / CURRENT-amara.md as if they live in docs/, but they actually live at user-scope per the CLAUDE.md memory layout (the per-maintainer fast-path distillation files). Fixed with explicit absolute path + not-in-docs/ disambiguation. The other 15 review threads on this PR are on the verbatim Amara ferry-12 content itself (markdown emphasis/code-fence rendering interactions, citation links from Amara's source context, and contributor-name attribution). Per the research-grade-not-operational discipline + the signal-in-signal-out / ferry-preservation rule + Otto-279 history-vs-current-state surface distinction (docs/research/ is history surface — persona attribution allowed via carve-out), those threads close form-2 with the rationale documented in the resolve-thread comments. Agency-Signature-Version: 1 Agent: otto Agent-Runtime: claude-code Agent-Model: claude-opus-4-7 Credential-Identity: AceHack-shared Credential-Mode: shared-with-aaron Human-Review: not-implied-by-credential Human-Review-Evidence: aaron-explicit-ask Action-Mode: autonomous-fail-open Task: pr-23-thread-drain-1-form1-15-form2-verbatim-preservation --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Summary
Resolves task Lucent-Financial-Group#298 (Amara ferry-7 enforcement instrument 1/4): a pre-merge validator for the AgencySignature Convention v1 trailer block in PR description bodies. Authored from understanding of the v1 spec + Zeta-specific constraints per Aaron 2026-04-26 "don't copy paste / make sure you understand and write our own" — Gemini ferry-8's example draft is preserved as DESIGN INPUT in
docs/research/...gemini-deep-think... Section 11.3.1but is not the implementation source.What this PR adds
tools/hygiene/validate-agencysignature-pr-body.sh(~120 lines bash, executable, mode 755)gh pr view N --json body --jq '.body' | tools/hygiene/validate-agencysignature-pr-body.sh)Validation rules
nonefallback (Amara ferry-7)nonewhen Human-Review is notexplicit; conversely,explicitrequires non-noneevidence pointerZeta-specific shape (beyond Gemini ferry-8 draft)
git interpret-trailers.nonefallback (Gemini's draft did not validate Task).Test results (8/8 pass on macOS bash 3.2.57)
Task: nonefallbackWhat this PR does NOT do
gh + pipe)Trailer block (PR body bottom per Squash-Merge Invariant)
Agency-Signature-Version: 1
Agent: Otto
Agent-Runtime: Claude Code
Agent-Model: Claude Opus 4.7
Credential-Identity: AceHack
Credential-Mode: shared
Human-Review: not-implied-by-credential
Human-Review-Evidence: none
Action-Mode: autonomous-fail-open
Task: Otto-298
Co-authored-by: Claude Opus 4.7 noreply@anthropic.com