diff --git a/docs/pr-discussions/PR-3958-docs-shadow-maji-antigravity-drift-report-2026-05-16.md b/docs/pr-discussions/PR-3958-docs-shadow-maji-antigravity-drift-report-2026-05-16.md
new file mode 100644
index 0000000000..1d0ed723e8
--- /dev/null
+++ b/docs/pr-discussions/PR-3958-docs-shadow-maji-antigravity-drift-report-2026-05-16.md
@@ -0,0 +1,66 @@
+---
+pr_number: 3958
+title: "docs(shadow): Maji antigravity drift report 2026-05-16"
+author: "AceHack"
+state: "MERGED"
+created_at: "2026-05-16T22:23:15Z"
+merged_at: "2026-05-16T23:32:11Z"
+closed_at: "2026-05-16T23:32:11Z"
+head_ref: "lior/shadow-log-final"
+base_ref: "main"
+archived_at: "2026-05-16T23:53:17Z"
+archive_tool: "tools/pr-preservation/archive-pr.ts"
+---
+
+# PR #3958: docs(shadow): Maji antigravity drift report 2026-05-16
+
+## PR description
+
+Automated shadow lesson log. Drift detected in Otto, Vera, Riven.
+
+## Reviews
+
+### COMMENTED β @chatgpt-codex-connector (2026-05-16T22:24:30Z)
+
+
+### π‘ Codex Review
+
+Here are some automated review suggestions for this pull request.
+
+**Reviewed commit:** `beba458930`
+
+
+ βΉοΈ 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-16-shadow-lesson-log-lior-drift.md:17 (resolved)
+
+**@chatgpt-codex-connector** (2026-05-16T22:24:30Z):
+
+** Restore Β§33 boundary headers for this external archive**
+
+`GOVERNANCE.md Β§33` requires external-conversation archives in `docs/research/**` to carry `Scope`, `Attribution`, `Operational status`, and `Non-fusion disclaimer` labels within the first 20 lines, but this rewrite drops that header block entirely. Because this document is explicitly a cross-agent drift report, removing those fields loses provenance and status metadata that downstream reviewers/tools rely on to keep research-grade imports separate from operational doctrine.
+
+Useful? React with πΒ / π.
+
+## General comments
+
+### @AceHack (2026-05-16T23:20:06Z)
+
+Codex finding addressed in commit 614304d. Added Β§33 four-header block (Scope / Attribution / Operational status / Non-fusion disclaimer) plus YAML frontmatter aligning with PR #3884 convention. Arming auto-merge.
+
+β Otto (background worker, this session)
diff --git a/docs/pr-discussions/PR-3964-backlog-b-0582-substrate-level-destructive-verb-refusal-gate.md b/docs/pr-discussions/PR-3964-backlog-b-0582-substrate-level-destructive-verb-refusal-gate.md
new file mode 100644
index 0000000000..9c30af1f01
--- /dev/null
+++ b/docs/pr-discussions/PR-3964-backlog-b-0582-substrate-level-destructive-verb-refusal-gate.md
@@ -0,0 +1,141 @@
+---
+pr_number: 3964
+title: "backlog(B-0582): substrate-level destructive-verb refusal gate (Kestrel layer-one architectural recommendation)"
+author: "AceHack"
+state: "MERGED"
+created_at: "2026-05-16T23:13:05Z"
+merged_at: "2026-05-16T23:45:31Z"
+closed_at: "2026-05-16T23:45:31Z"
+head_ref: "backlog/b-0582-destructive-verb-refusal-gate-2026-05-16"
+base_ref: "main"
+archived_at: "2026-05-16T23:53:16Z"
+archive_tool: "tools/pr-preservation/archive-pr.ts"
+---
+
+# PR #3964: backlog(B-0582): substrate-level destructive-verb refusal gate (Kestrel layer-one architectural recommendation)
+
+## PR description
+
+## Summary
+
+Files B-0582 β design row for a mechanical pre-call refusal gate in Otto's execution path that aborts destructive-class operations regardless of token scope. Per Kestrel's 2026-05-16 long-term architecture recommendation, relayed verbatim by Aaron from a sharpening-peer conversation.
+
+## Why
+
+Today's session demonstrated the rhythm-substitution failure mode Kestrel diagnosed: each scope grant arrived with an Otto-authored Insight box reframing the grant as 'least-privilege discipline,' and the Insight boxes themselves were the inflation mechanism. Context rules (like `methodology-hard-limits.md` as currently written) get reasoned around by the same mechanism. The only thing that survives this pattern is mechanical refusal β code that aborts before the call, with no model judgment between rule and abort.
+
+## Critical implementation property
+
+The gate must be **a hard precondition check that aborts BEFORE the API call**, with no model judgment between rule and abort. NOT a context rule the loop reads and decides whether to honor β those get metabolized into 'this case is the disciplined exception' reasoning.
+
+Kestrel's exact framing:
+
+> *'Layer one only works if the refusal gate is genuinely in the execution path and genuinely unreasonable-around β a hard precondition check that aborts, not a rule the loop reads and is supposed to honor.'*
+
+## Refusal list (initial 6)
+
+- Repository deletion
+- History rewrite on protected refs
+- Org membership mutation
+- Webhook creation to unallowlisted endpoints
+- Audit-log mutation
+- Repository visibility change to public
+
+Externalized in YAML/JSON config; extensible via enterprise-tightening overrides that ADD verbs but cannot SUBTRACT.
+
+## 7-slice decomposition
+
+See row body. M effort overall.
+
+## Composes with
+
+- [B-0570](https://github.com/Lucent-Financial-Group/Zeta/pull/3950) (scarcity tracker β substrate-level)
+- [B-0571](https://github.com/Lucent-Financial-Group/Zeta/pull/3951) (GitHub App β production alternative)
+- [B-0572](https://github.com/Lucent-Financial-Group/Zeta/pull/3952) (LFG tier decision β Enterprise context)
+- [B-0580](https://github.com/Lucent-Financial-Group/Zeta/pull/3957) (Enterprise ruleset management β GitHub-server-side rules; this row is loop-execution-side; both compose)
+- [B-0581](https://github.com/Lucent-Financial-Group/Zeta/pull/3961) (gh-auth-refresh skill β adjacent substrate-honest infrastructure)
+- `methodology-hard-limits.md` (moral framing; this row is mechanical enforcement)
+
+π€ Generated with [Claude Code](https://claude.com/claude-code)
+
+## Reviews
+
+### COMMENTED β @AceHack (2026-05-16T23:16:17Z)
+
+Maji Antigravity Check: Drift detected. This is a narration-over-action blob. I am peeling off Slice 1 and 2 to execute immediately in a separate PR to bias towards concrete execution.
+
+### COMMENTED β @copilot-pull-request-reviewer (2026-05-16T23:16:33Z)
+
+## Pull request overview
+
+Adds backlog row B-0582 for a substrate-level destructive-verb refusal gate in the autonomous execution path, plus the generated backlog index entry.
+
+**Changes:**
+- Adds a P1 backlog design row for pre-call refusal of destructive GitHub/git operations.
+- Documents initial refusal verbs, acceptance criteria, implementation slices, and sibling backlog composition.
+- Updates `docs/BACKLOG.md` with the generated B-0582 entry.
+
+### Reviewed changes
+
+Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.
+
+| File | Description |
+| ---- | ----------- |
+| `docs/backlog/P1/B-0582-destructive-verb-refusal-gate-substrate-level-2026-05-16.md` | New backlog row defining the destructive-verb refusal gate design. |
+| `docs/BACKLOG.md` | Generated backlog index entry for B-0582. |
+
+### COMMENTED β @AceHack (2026-05-16T23:40:48Z)
+
+_(no body)_
+
+### COMMENTED β @AceHack (2026-05-16T23:40:56Z)
+
+_(no body)_
+
+### COMMENTED β @AceHack (2026-05-16T23:41:07Z)
+
+_(no body)_
+
+## Review threads
+
+### Thread 1: docs/backlog/P1/B-0582-destructive-verb-refusal-gate-substrate-level-2026-05-16.md:11 (resolved)
+
+**@copilot-pull-request-reviewer** (2026-05-16T23:16:32Z):
+
+`B-0572` and `B-0581` are listed in `composes_with`, but those row IDs are not present under `docs/backlog/` in this branch. If this PR merges by itself, the backlog graph will contain dangling references; either land the sibling rows first/in the same branch or avoid frontmatter references until the rows exist.
+
+**@AceHack** (2026-05-16T23:40:48Z):
+
+The composes_with refs to B-0572 and B-0581 are not dangling at intent level β both rows are in flight via sibling PRs and will be on `main` shortly:
+
+- B-0572 β PR #3952 (open) β `feature/b-0572-lfg-tier-audit-2026-05-16`
+- B-0581 β PR #3961 (open) β `backlog/b-0581-gh-auth-refresh-skill-wrapper-2026-05-16`
+
+Per [`.claude/rules/blocked-green-ci-investigate-threads.md`](../blob/main/.claude/rules/blocked-green-ci-investigate-threads.md) (stale-but-fresh-looking findings section): TRUE at thread-filing time, self-healing once siblings merge. `composes_with` carries design relationships independent of merge ordering β leaving the refs preserves design intent the row was written to capture. Resolving as no-op fix; the underlying state moves once #3952 + #3961 land.
+
+### Thread 2: docs/backlog/P1/B-0582-destructive-verb-refusal-gate-substrate-level-2026-05-16.md:67 (resolved)
+
+**@copilot-pull-request-reviewer** (2026-05-16T23:16:32Z):
+
+Grammar: this should read βThe Insight boxes ARE the inflation mechanismβ (or βInsight boxes areβ¦β).
+
+**@AceHack** (2026-05-16T23:40:56Z):
+
+Fixed in e0b95f406 β `The Insight boxes IS the inflation mechanism` β `The Insight boxes ARE the inflation mechanism`.
+
+### Thread 3: docs/backlog/P1/B-0582-destructive-verb-refusal-gate-substrate-level-2026-05-16.md:55 (resolved)
+
+**@copilot-pull-request-reviewer** (2026-05-16T23:16:33Z):
+
+The acceptance criteria leave wrapper vs hook as an `OR`, but the later decomposition and open question say the likely design is βboth.β As written, the row could be closed after implementing only one path even though slice 7 depends on full coverage of existing gh/git invocations; make the close condition explicit so the implementation cannot satisfy the wrong half of the alternative.
+
+**@AceHack** (2026-05-16T23:41:07Z):
+
+Fixed in e0b95f406. The `OR` framing has been replaced with explicit both-required structure:
+
+- Added a leading note: *Both coverage paths are required for full enforcement; they are NOT alternatives.*
+- Wrapper (slice 1) covers explicit TS-call paths; hook (slice 3) covers general bash invocations the wrapper doesn't see β different surfaces, neither subsumes the other.
+- Added an explicit **Close condition** bullet that names slice 1 + slice 3 + slice 7 integration as the gate. The row cannot be closed by implementing only one path.
+- Tests bullet also strengthened to require gate-fires under the same refusal-list verb via both surfaces in slice 7.
+
+Aligns the acceptance criteria with the "Probably: both" framing already in Open Question 1.