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): + +**![P1 Badge](https://img.shields.io/badge/P1-orange?style=flat) 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.