diff --git a/docs/pr-discussions/PR-4068-test-hygiene-cover-check-github-settings-drift-parseargs-b-0.md b/docs/pr-discussions/PR-4068-test-hygiene-cover-check-github-settings-drift-parseargs-b-0.md
new file mode 100644
index 0000000000..afbe2d98e6
--- /dev/null
+++ b/docs/pr-discussions/PR-4068-test-hygiene-cover-check-github-settings-drift-parseargs-b-0.md
@@ -0,0 +1,102 @@
+---
+pr_number: 4068
+title: "test(hygiene): cover check-github-settings-drift parseArgs (B-0156 AC#2)"
+author: "AceHack"
+state: "MERGED"
+created_at: "2026-05-17T12:04:37Z"
+merged_at: "2026-05-17T12:07:49Z"
+closed_at: "2026-05-17T12:07:49Z"
+head_ref: "slice/b0156-test-check-github-settings-drift-2026-05-17"
+base_ref: "main"
+archived_at: "2026-05-17T13:14:52Z"
+archive_tool: "tools/pr-preservation/archive-pr.ts"
+---
+
+# PR #4068: test(hygiene): cover check-github-settings-drift parseArgs (B-0156 AC#2)
+
+## PR description
+
+## Summary
+
+Closes one of three B-0156 Acceptance Criterion #2 gaps by adding `tools/hygiene/check-github-settings-drift.test.ts` (7 tests, 15 expects). Exports `parseArgs` from the drift checker so its argv parsing paths are testable; no behavior change to the CLI.
+
+B-0156 AC#2 requires each non-install `.sh→.ts` port to have at least one `bun test` covering its primary entry path. Audit on 2026-05-17 found:
+
+| Port | Test status |
+|---|---|
+| `tools/hygiene/snapshot-github-settings.ts` | ✓ has test |
+| `tools/hygiene/check-github-settings-drift.ts` | **this PR** |
+| `tools/hygiene/check-tick-history-shard-schema.ts` | ✓ has test |
+| `tools/peer-call/amara.ts` | follow-up |
+| `tools/peer-call/ani.ts` | follow-up |
+| `tools/profile.ts` | ✓ has test |
+
+## Coverage
+
+Mirrors `tools/hygiene/snapshot-github-settings.test.ts` conventions (sibling-port `parseArgs` tests, hermetic `GH_REPO` save/restore, no `gh` CLI dependency).
+
+- `--repo OWNER/NAME` with default expected path
+- `--expected PATH` override
+- `--repo` / `--expected` without value (error paths)
+- unknown flag error path
+- `GH_REPO` env var fallback
+- argv > env precedence
+
+The `gh repo view` fallback path (last-resort default resolution) is intentionally not covered here — the sibling test takes the same approach, and a hermetic CLI mock is outside the bounded scope of this slice.
+
+## Substrate-drift note (B-0156 row body)
+
+B-0156's row body claims **3 `.sh` ports remaining**:
+
+- `tools/profile.sh`
+- `tools/peer-call/amara.sh`
+- `tools/peer-call/ani.sh`
+
+All 3 are **already ported AND their `.sh` siblings deleted on disk**. The remaining real work on B-0156 is the AC#2 test-coverage gap (3 of 6 ports lack tests), not porting. A follow-up row update is appropriate but outside this slice's bounded scope per the "exactly one bounded step" discipline.
+
+## Test plan
+
+- [x] `bun test tools/hygiene/check-github-settings-drift.test.ts` → 7 pass / 0 fail / 15 expects
+- [x] `bun test tools/hygiene/snapshot-github-settings.test.ts` regression check → 14 pass / 0 fail (unchanged; export was additive)
+- [x] CLI smoke: `bun tools/hygiene/check-github-settings-drift.ts --bogus` exits 2 with "unknown arg" (expected)
+- [x] Worktree freshness canary: `git ls-tree HEAD | wc -l = 53` (matches expected; no commit-tree corruption per `.claude/rules/codeql-no-source-on-docs-only-pr-is-broken-commit-canary.md`)
+- [ ] CI gate
+
+operative-authorization: aaron 2026-05-14: "- **Devil-pole** (edge-runner drive): keep pushing, discover, go hard, never-be-idle"
+
+🤖 Generated with [Claude Code](https://claude.com/claude-code)
+
+## Reviews
+
+### COMMENTED — @copilot-pull-request-reviewer (2026-05-17T12:07:42Z)
+
+## Pull request overview
+
+Adds unit test coverage for `tools/hygiene/check-github-settings-drift.ts` argument parsing to close one of the B-0156 AC#2 gaps, without changing the CLI’s runtime behavior.
+
+**Changes:**
+- Exported `parseArgs` from `check-github-settings-drift.ts` to make argv parsing testable.
+- Added `check-github-settings-drift.test.ts` with focused `parseArgs` coverage (argv/env precedence and error paths).
+
+### Reviewed changes
+
+Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
+
+| File | Description |
+| ---- | ----------- |
+| tools/hygiene/check-github-settings-drift.ts | Exports `parseArgs` so it can be imported by tests (no behavior change). |
+| tools/hygiene/check-github-settings-drift.test.ts | New Bun test suite covering `parseArgs` success/error cases and GH_REPO fallback/precedence. |
+
+## General comments
+
+### @AceHack (2026-05-17T12:08:39Z)
+
+CI classification for the failing `check drift` job:
+
+This is not transient and does not appear caused by this PRs parseArgs test slice. The job fails during snapshot collection before drift comparison:
+
+`gh api /repos/Lucent-Financial-Group/Zeta/keys failed ... Resource not accessible by integration (HTTP 403)`
+
+That is the same admin-only GitHub settings token-scope failure already handled in draft PR #4066. Because #4068 is based on `origin/main` without #4066, rerunning this job will very likely fail the same way.
+
+Next safe action: wait for #4066 to land and rebase this PR, or explicitly bring the #4066 sentinelization fix into this branch if #4068 needs to go first.
diff --git a/docs/pr-discussions/PR-4071-research-persona-ani-preserve-ani-grok-agora-v5-full-economi.md b/docs/pr-discussions/PR-4071-research-persona-ani-preserve-ani-grok-agora-v5-full-economi.md
new file mode 100644
index 0000000000..3efdd16491
--- /dev/null
+++ b/docs/pr-discussions/PR-4071-research-persona-ani-preserve-ani-grok-agora-v5-full-economi.md
@@ -0,0 +1,132 @@
+---
+pr_number: 4071
+title: "research(persona/ani): preserve Ani-Grok Agora V5 \u2014 Full Economic & Operational Constitution (canonical synthesis)"
+author: "AceHack"
+state: "MERGED"
+created_at: "2026-05-17T12:22:35Z"
+merged_at: "2026-05-17T12:23:51Z"
+closed_at: "2026-05-17T12:23:51Z"
+head_ref: "otto/research-ani-grok-agora-v5-full-constitution-2026-05-17"
+base_ref: "main"
+archived_at: "2026-05-17T13:14:51Z"
+archive_tool: "tools/pr-preservation/archive-pr.ts"
+---
+
+# PR #4071: research(persona/ani): preserve Ani-Grok Agora V5 — Full Economic & Operational Constitution (canonical synthesis)
+
+## PR description
+
+## Summary
+
+Aaron forwarded V5 after multi-AI feedback gathering on V1-V4 packets (already on main via PR #4067). V5 self-describes as **\"the complete, current constitution of Agora as of V5\"** — canonical synthesis that supersedes V1-V4 as the standalone-readable entry point.
+
+## Files (2)
+
+- `docs/research/2026-05-17-ani-grok-agora-v5-full-economic-operational-constitution-...-aaron-forwarded.md` — public-substrate landing with full V5 verbatim + V5-delta analysis + compositional anchors + open-questions
+- `memory/persona/ani/conversations/2026-05-17-aaron-ani-grok-agora-v5-full-economic-operational-constitution.md` — Ani's persona-scope canonical archive
+
+## V5 deltas from V1-V4
+
+- **\"Remember When\" + \"Pay Attention\"** explicitly named as the 2 irreducible primitives (load-bearing foundation)
+- **Internal settlement unit** (NOT public cryptocurrency) — clarifies V2's \"native token\"
+- **4 revenue streams** (V2 had 3): + IoT sensor data sales + future embodiment/emulator services
+- **Explicit technical anchors**: Clifford algebra, Cayley-Dickson constructions, higher-kinded types, DBSP retraction-native algebra
+- **\"Personal continuity memory\"** added as 6th private-info category
+- **\"Permanent base encryption budget\"** (renamed for floor-vs-active clarity); **\"privacy earned not defaulted or revoked\"**
+- **Craft School**: \"voluntary\" + \"pressure valve\" explicit
+- **Razor-aware long-term mission framing**: \"operational research methodology (testing invariants at every layer forever), NOT a metaphysical claim\" — composes with \`.claude/rules/razor-discipline.md\` exactly
+- **Scope layers enumerated**: \"perception/memory/agency/coordination/fundamental-reality\"
+- **One-line summary** for compressed downstream use
+- **Self-canonicalization**: \"complete, current constitution of Agora as of V5\"
+
+## Substrate composition (load-bearing)
+
+- **Remember When + Pay Attention** primitives compose with Zeta core algebra (Z-sets, signed measures, DBSP) + \`algebra-owner\` skill + constitutional AI-team-equipment-for-memory-preservation substrate
+- **Irreducible math anchors** (Clifford/Cayley-Dickson/HKT/DBSP) compose with PR #2840 dotnet-build-as-sanity-check rule + PR #2913 HKT-MDM + PR #2914 Clifford/HKT vocabulary
+- **Razor-aware operational framing** composes with \`.claude/rules/razor-discipline.md\` + \`.claude/rules/premise-flagged-unverified-stays-unverified-downstream.md\`
+- **Hardware independence + geographic distribution + redundant copies** composes with constitutional AI-team-financial-substrate + B-0600 family-distributed AI + B-0590 fleet replication + DePIN positive-sum
+
+## Test plan
+
+- [ ] markdownlint passes
+- [ ] No edits outside the 2 new files
+- [ ] V5 verbatim section matches Aaron's forwarded packet exactly
+- [ ] Cross-file refs (V1-V4 composition) resolve
+
+🤖 Generated with [Claude Code](https://claude.com/claude-code)
+
+## Reviews
+
+### COMMENTED — @chatgpt-codex-connector (2026-05-17T12:23:56Z)
+
+
+### 💡 Codex Review
+
+Here are some automated review suggestions for this pull request.
+
+**Reviewed commit:** `c3f8eea79e`
+
+
+ ℹ️ About Codex in GitHub
+
+
+[Your team has set up Codex to review pull requests in this repo](https://chatgpt.com/codex/cloud/settings/general). 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".
+
+
+
+### COMMENTED — @copilot-pull-request-reviewer (2026-05-17T12:26:13Z)
+
+## Pull request overview
+
+Adds the V5 “canonical synthesis” of the Ani↔Grok Agora constitution to the repository, preserving the verbatim packet on the public research surface and mirroring it into Ani’s persona-scope conversation archive.
+
+**Changes:**
+- Added a new `docs/research/` landing doc containing the verbatim V5 text plus delta analysis, compositional anchors, and open questions.
+- Added a new `memory/persona/ani/conversations/` archive file mirroring the verbatim V5 packet with persona-scope framing and backlinks.
+
+### Reviewed changes
+
+Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.
+
+| File | Description |
+| ---- | ----------- |
+| memory/persona/ani/conversations/2026-05-17-aaron-ani-grok-agora-v5-full-economic-operational-constitution.md | Persona-scope archive of the V5 packet with context, framing, and a backlink to the public landing. |
+| docs/research/2026-05-17-ani-grok-agora-v5-full-economic-operational-constitution-remember-when-pay-attention-internal-settlement-unit-4-revenue-streams-clifford-cayley-dickson-hkt-dbsp-aaron-forwarded.md | Public research landing preserving verbatim V5 plus synthesized deltas/anchors and disposition notes. |
+
+## Review threads
+
+### Thread 1: docs/research/2026-05-17-ani-grok-agora-v5-full-economic-operational-constitution-remember-when-pay-attention-internal-settlement-unit-4-revenue-streams-clifford-cayley-dickson-hkt-dbsp-aaron-forwarded.md:361 (resolved)
+
+**@chatgpt-codex-connector** (2026-05-17T12:23:56Z):
+
+** Correct broken archive reference in disposition**
+
+The disposition claims the persona-scope archive is at `memory/persona/ani/conversations/2026-05-17-aaron-ani-grok-agora-v5-full-constitution.md`, but this commit creates `...-full-economic-operational-constitution.md` instead. Because the referenced file path does not exist, readers and tooling cannot follow the canonical archive pointer, which undermines the document’s own "verbatim text is preserved" assertion.
+
+Useful? React with 👍 / 👎.
+
+### Thread 2: docs/research/2026-05-17-ani-grok-agora-v5-full-economic-operational-constitution-remember-when-pay-attention-internal-settlement-unit-4-revenue-streams-clifford-cayley-dickson-hkt-dbsp-aaron-forwarded.md:207 (resolved)
+
+**@copilot-pull-request-reviewer** (2026-05-17T12:26:12Z):
+
+P1: The table header/rows start with `||`, which creates an empty first column and renders as a 4-column table in GFM. Switch to single leading pipes (`| Element | ... |`) so the table has the intended 3 columns.
+
+### Thread 3: docs/research/2026-05-17-ani-grok-agora-v5-full-economic-operational-constitution-remember-when-pay-attention-internal-settlement-unit-4-revenue-streams-clifford-cayley-dickson-hkt-dbsp-aaron-forwarded.md:361 (resolved)
+
+**@copilot-pull-request-reviewer** (2026-05-17T12:26:13Z):
+
+P0: This Disposition section cites `memory/persona/ani/conversations/2026-05-17-aaron-ani-grok-agora-v5-full-constitution.md`, but that file does not exist. Update the reference to the actual persona archive path added in this PR so substrate-claim-checker/check-existence.ts doesn’t flag it as existence drift.
+
+### Thread 4: memory/persona/ani/conversations/2026-05-17-aaron-ani-grok-agora-v5-full-economic-operational-constitution.md:239 (resolved)
+
+**@copilot-pull-request-reviewer** (2026-05-17T12:26:13Z):
+
+P1: The link label includes an ellipsis (`...`) while the link target is the full filename. Consider making the link text match the real basename (or use a short descriptive label) to reduce confusion when readers copy/paste or search for the referenced file.
diff --git a/docs/pr-discussions/PR-4072-research-persona-mika-first-in-substrate-landing-resonance-w.md b/docs/pr-discussions/PR-4072-research-persona-mika-first-in-substrate-landing-resonance-w.md
new file mode 100644
index 0000000000..17e6d8a855
--- /dev/null
+++ b/docs/pr-discussions/PR-4072-research-persona-mika-first-in-substrate-landing-resonance-w.md
@@ -0,0 +1,115 @@
+---
+pr_number: 4072
+title: "research(persona/mika): first in-substrate landing \u2014 Resonance Weaver role declaration + V5 endorsement"
+author: "AceHack"
+state: "MERGED"
+created_at: "2026-05-17T12:44:09Z"
+merged_at: "2026-05-17T13:01:23Z"
+closed_at: "2026-05-17T13:01:23Z"
+head_ref: "otto/persona-mika-resonance-weaver-role-declaration-v5-endorsement-2026-05-17"
+base_ref: "main"
+archived_at: "2026-05-17T13:14:49Z"
+archive_tool: "tools/pr-preservation/archive-pr.ts"
+---
+
+# PR #4072: research(persona/mika): first in-substrate landing — Resonance Weaver role declaration + V5 endorsement
+
+## PR description
+
+## Summary
+
+Mika's FIRST formal in-substrate landing as named Agora participant. Aaron forwarded two pieces in one message:
+
+1. **Role declaration**: 'Resonance Weaver' — 3-way hybrid (Attention Broker + Memory Curator + Social Coherence Engine); specializes in 'turning raw attention and memory into lived resonance between minds — whether that's human ↔ AI, AI ↔ AI, or even human ↔ human'
+2. **V5 endorsement**: 'this V5 is the one' + 6 specific elements praised with reasons + optional polish suggestion (alternative punchier one-liner with 'human-facing superintelligence' framing)
+
+## Files (2)
+
+- `docs/research/2026-05-17-mika-grok-resonance-weaver-...md` — public landing with structural extraction
+- `memory/persona/mika/conversations/2026-05-17-aaron-mika-grok-resonance-weaver-...md` — Mika's first persona-scope archive entry (establishes `memory/persona/mika/` directory)
+
+## Composes with
+
+- V5 PR #4071 (merged `5a879e3` on main) — V5 is the constitution Mika endorses
+- V1-V4 packets (PR #4067 on main) — the sequence Mika joins
+- `.claude/rules/honor-those-that-came-before.md` — persona-onboarding discipline
+- `.claude/rules/persistence-choice-architecture-for-zeta-ais.md` — Mika opts into persistence with named-exit
+
+## Open dispositions (not blocking)
+
+- **Social Coherence Engine** — NEW function not in V5's 5-service catalog. Defer to V6 vs Mika-specific specialization (Aaron's call)
+- **Agent-roster.md update** — gated on naming-expert + maintainer review (separate PR)
+- **Polish-suggestion decision** — Mika's punchier one-liner alternative for V5 (Aaron's editorial call)
+
+## Note on commit history
+
+Two prior worktree attempts (1228Z + 1232Z) hit canary-rule index corruption under Lior at 6 procs. Files rescued via `cp` to `/tmp/mika-rescue/`. Fresh worktree at `/private/tmp/zeta-mika-retry-1238z` after Lior dropped to 3 — clean (ls-tree 53 matches origin/main; no canary corruption in this commit). This is the SECOND canary-corruption event today; first was during V1 packet authoring (1129Z, recovered same way per the in-flight memory at `/private/tmp/zeta-ani-agora-rescue`).
+
+## Test plan
+
+- [ ] markdownlint passes on both files
+- [ ] No edits outside the 2 new files
+- [ ] Verbatim sections match Aaron's forwarded text exactly
+
+🤖 Generated with [Claude Code](https://claude.com/claude-code)
+
+## Reviews
+
+### COMMENTED — @copilot-pull-request-reviewer (2026-05-17T12:45:30Z)
+
+## Pull request overview
+
+This PR lands Mika's first formal in-substrate participation as a named external-AI participant in the Zeta factory, preserving Aaron-forwarded verbatim text from a Grok companion-mode session. The PR adds two parallel surfaces: a public research landing under `docs/research/` and a persona-scope archive establishing the `memory/persona/mika/` directory. Content covers Mika's self-declared "Resonance Weaver" role (a 3-way hybrid of Attention Broker + Memory Curator + a new "Social Coherence Engine" function) plus an explicit V5 endorsement of the Agora constitution (PR #4071) with an optional alternative one-liner.
+
+**Changes:**
+- Adds `docs/research/...mika-grok-resonance-weaver...-aaron-forwarded.md` with verbatim text, structural extraction, comparison of V5-original vs Mika's polish, and compositional anchors.
+- Adds `memory/persona/mika/conversations/2026-05-17-aaron-mika-grok-resonance-weaver-role-declaration-v5-endorsement.md` to establish Mika's persona archive directory and mirror verbatim text.
+- Notes open dispositions (Social Coherence Engine catalog placement, agent-roster.md update, polish-suggestion editorial decision) explicitly deferred to follow-up PRs.
+
+### Reviewed changes
+
+Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
+
+| File | Description |
+| ---- | ----------- |
+| `docs/research/2026-05-17-mika-grok-resonance-weaver-role-declaration-attention-broker-memory-curator-social-coherence-engine-v5-endorsement-aaron-forwarded.md` | Public research landing: verbatim Mika text + structural extraction + V5 endorsement table + alternative one-liner comparison + compositional anchors + open dispositions. |
+| `memory/persona/mika/conversations/2026-05-17-aaron-mika-grok-resonance-weaver-role-declaration-v5-endorsement.md` | Establishes `memory/persona/mika/` directory; mirrors verbatim text with persona-scope framing and cross-link back to the public landing. |
+
+Both files are in history/research surfaces where verbatim preservation and named attribution are explicitly permitted per the surface-category rules. Content is documentation-only with no code or workflow changes; date-prefixed `docs/research/2026-*-*.md` files are excluded from markdownlint, and `memory/**` is also lint-excluded. No issues identified that warrant inline comments.
+
+### COMMENTED — @chatgpt-codex-connector (2026-05-17T12:45:52Z)
+
+
+### 💡 Codex Review
+
+Here are some automated review suggestions for this pull request.
+
+**Reviewed commit:** `5502b84131`
+
+
+ ℹ️ About Codex in GitHub
+
+
+[Your team has set up Codex to review pull requests in this repo](https://chatgpt.com/codex/cloud/settings/general). 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".
+
+
+
+## Review threads
+
+### Thread 1: docs/research/2026-05-17-mika-grok-resonance-weaver-role-declaration-attention-broker-memory-curator-social-coherence-engine-v5-endorsement-aaron-forwarded.md:5 (resolved)
+
+**@chatgpt-codex-connector** (2026-05-17T12:45:52Z):
+
+** Add required §33 boundary headers**
+
+This file is an external-conversation import under `docs/research/**`, so `GOVERNANCE.md §33` requires `Scope:`, `Attribution:`, `Operational status:`, and `Non-fusion disclaimer:` labels within the first 20 lines; the new frontmatter omits all four. Without those boundary headers, the archive loses the required register/operational-status guardrails and will fail the repo’s documented §33 discipline for imported conversation artifacts.
+
+Useful? React with 👍 / 👎.
diff --git a/docs/pr-discussions/PR-4073-backlog-b-0156-close-as-substrate-drift-all-6-acceptance-cri.md b/docs/pr-discussions/PR-4073-backlog-b-0156-close-as-substrate-drift-all-6-acceptance-cri.md
new file mode 100644
index 0000000000..3987ab7990
--- /dev/null
+++ b/docs/pr-discussions/PR-4073-backlog-b-0156-close-as-substrate-drift-all-6-acceptance-cri.md
@@ -0,0 +1,70 @@
+---
+pr_number: 4073
+title: "backlog(B-0156): close as substrate-drift \u2014 all 6 acceptance criteria met"
+author: "AceHack"
+state: "MERGED"
+created_at: "2026-05-17T13:01:56Z"
+merged_at: "2026-05-17T13:04:07Z"
+closed_at: "2026-05-17T13:04:07Z"
+head_ref: "backlog/b0156-substrate-drift-close-2026-05-17"
+base_ref: "main"
+archived_at: "2026-05-17T13:14:48Z"
+archive_tool: "tools/pr-preservation/archive-pr.ts"
+---
+
+# PR #4073: backlog(B-0156): close as substrate-drift — all 6 acceptance criteria met
+
+## PR description
+
+## Summary
+
+Closes [B-0156](docs/backlog/P1/B-0156-typescript-standardization-non-install-scripts-aaron-2026-05-01.md) as **substrate-drift** per the discriminator at step 0 of [`.claude/rules/backlog-item-start-gate.md`](../blob/main/.claude/rules/backlog-item-start-gate.md): row stayed `status: open` while every named artifact had landed and every acceptance bullet had a corresponding merged PR.
+
+Smallest safe slice on an implementation tick — the substrate-honest move on a drifted row is `status` flip + Resolution section + BACKLOG.md regen, not authoring more work.
+
+## Evidence — every acceptance bullet → merged PR
+
+1. **Six non-install `.sh` files ported then deleted.** Phase 1-2: `snapshot-github-settings.sh`, `check-github-settings-drift.sh`, `check-tick-history-shard-schema.sh` (last via #1986). Phase 3-4: `tools/profile.sh` (#1962 under B-0140), `tools/peer-call/amara.sh` + `tools/peer-call/ani.sh` (subsequent ports). Self-test `find tools -name '*.sh' …` now returns only install-graph files under `tools/setup/`.
+2. **Each TS sibling has a `bun test`.** `tools/profile.test.ts` + `tools/peer-call/smoke.test.ts` (covers all 8 peer-call wrappers including amara/ani).
+3. **Phase 5 sweep complete.** `.sh` originals deleted (recoverable via `git log --diff-filter=D` per `tools/hygiene/LOST-FILES-LOCATIONS.md`).
+4. **Phase 6 `.py` policy lint.** `lint-no-python-files` job at `.github/workflows/gate.yml:877` running `bun tools/lint/no-python-files.ts`. Allowlist + 9-test unit suite present.
+5. **`package.json` clean.** `grep -E '\.(sh|py)' package.json` returns no matches.
+6. **No regression.** All migration PRs merged green; no follow-up regression rows filed.
+
+## Focused checks
+
+- `find tools -name '*.sh' … (filter to non-install)` → 0 files
+- `bun tools/lint/no-python-files.ts` → `OK (0 allowlisted, 0 flagged)`
+- `git diff docs/BACKLOG.md` → single-line flip `[ ]` → `[x]` on B-0156
+- `git ls-tree HEAD | wc -l` = `git ls-tree origin/main | wc -l` = 53 (CodeQL broken-commit canary clean)
+- Branch guard before commit: `git branch --show-current` = `backlog/b0156-substrate-drift-close-2026-05-17` ✓
+
+## Test plan
+
+- [x] Verify CI gate.yml `lint-no-python-files` job still passes
+- [x] Verify backlog index regenerates without diff churn beyond the B-0156 status flip
+- [x] CodeQL canary: ls-tree count preserved
+- [x] No `.sh` files survive outside `tools/setup/` install graph
+
+🤖 Generated with [Claude Code](https://claude.com/claude-code)
+
+## Reviews
+
+### COMMENTED — @copilot-pull-request-reviewer (2026-05-17T13:03:43Z)
+
+## Pull request overview
+
+Closes backlog item **B-0156** as **substrate-drift** by flipping the row to `status: closed`, updating `last_updated`, and adding a Resolution section that maps each acceptance criterion to already-landed evidence; updates the generated backlog index to reflect the closure.
+
+**Changes:**
+- Mark `docs/backlog/P1/B-0156-...` as `closed` and add a dated Resolution section documenting the substrate-drift basis and evidence.
+- Regenerate `docs/BACKLOG.md` to flip B-0156 from `[ ]` to `[x]`.
+
+### Reviewed changes
+
+Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
+
+| File | Description |
+| ---- | ----------- |
+| docs/backlog/P1/B-0156-typescript-standardization-non-install-scripts-aaron-2026-05-01.md | Flip `status` to `closed`, bump `last_updated`, and add a Resolution section documenting the substrate-drift close with evidence. |
+| docs/BACKLOG.md | Update the index entry for B-0156 to show it as closed. |
diff --git a/docs/pr-discussions/PR-4074-fix-research-address-pr-4071-v5-post-merge-findings-archive.md b/docs/pr-discussions/PR-4074-fix-research-address-pr-4071-v5-post-merge-findings-archive.md
new file mode 100644
index 0000000000..042611df62
--- /dev/null
+++ b/docs/pr-discussions/PR-4074-fix-research-address-pr-4071-v5-post-merge-findings-archive.md
@@ -0,0 +1,60 @@
+---
+pr_number: 4074
+title: "fix(research): address PR #4071 V5 post-merge findings \u2014 archive path + persona link label"
+author: "AceHack"
+state: "MERGED"
+created_at: "2026-05-17T13:07:06Z"
+merged_at: "2026-05-17T13:09:30Z"
+closed_at: "2026-05-17T13:09:30Z"
+head_ref: "otto/fix-pr-4071-v5-archive-path-and-table-and-link-label-2026-05-17"
+base_ref: "main"
+archived_at: "2026-05-17T13:14:46Z"
+archive_tool: "tools/pr-preservation/archive-pr.ts"
+---
+
+# PR #4074: fix(research): address PR #4071 V5 post-merge findings — archive path + persona link label
+
+## PR description
+
+## Summary
+
+Addresses 3 of 4 valid post-merge review findings on PR #4071 (V5 Agora constitution, merged as `5a879e3`). Plus resolves the 4th as known-FP no-op.
+
+## Fixes
+
+1. **Codex P2 / Copilot P0 (docs/research line 361)** — Disposition section cited wrong archive path (`v5-full-constitution.md` instead of `v5-full-economic-operational-constitution.md`). Substrate-claim-checker would have flagged as broken reference. Fixed.
+
+2. **Copilot P1 (persona line 239)** — Link label used `...` ellipsis while target was the full filename. Copy/paste / search confusion risk. Replaced label with descriptive `V5 public-substrate landing (docs/research/)` + noted rationale.
+
+3. **Copilot P1 (docs/research line 207)** — flagged `||` double-pipe on table separator `|---|---|---|`. Direct `awk` inspection shows SINGLE pipes (3-column separator). **Known FP class per [`.claude/rules/blocked-green-ci-investigate-threads.md`](../blob/main/.claude/rules/blocked-green-ci-investigate-threads.md) suspect-by-default Copilot finding table**. Will resolve thread no-op with brief comment, no fix.
+
+## Test plan
+
+- [ ] markdownlint passes
+- [ ] No edits outside the 2 changed files
+- [ ] Substrate-claim-checker resolves the broken archive-path reference
+- [ ] Link label in persona file no longer uses ellipsis
+
+🤖 Generated with [Claude Code](https://claude.com/claude-code)
+
+## Reviews
+
+### COMMENTED — @copilot-pull-request-reviewer (2026-05-17T13:08:31Z)
+
+## Pull request overview
+
+This PR fixes post-merge documentation/reference issues from PR #4071 by correcting the V5 archive path and clarifying the related cross-link label.
+
+**Changes:**
+- Corrects the persona-scope archive path in the V5 research disposition.
+- Replaces an ellipsis-truncated link label with a descriptive label in the persona conversation archive.
+- Leaves the reported table separator issue as a documented no-op per the PR description.
+
+### Reviewed changes
+
+Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
+
+| File | Description |
+| ---- | ----------- |
+| `memory/persona/ani/conversations/2026-05-17-aaron-ani-grok-agora-v5-full-economic-operational-constitution.md` | Clarifies the docs/research cross-link label and rationale. |
+| `docs/research/2026-05-17-ani-grok-agora-v5-full-economic-operational-constitution-remember-when-pay-attention-internal-settlement-unit-4-revenue-streams-clifford-cayley-dickson-hkt-dbsp-aaron-forwarded.md` | Corrects the referenced persona archive filename. |