{"open":[{"createdAt":"2026-09-19T16:54:09Z","updatedAt":"2026-09-22T01:51:26Z","category":"Ideas","comments":9,"number":2615,"url":null,"tag":"Feature","title":"Engine tasks handed over by cloud: ENG-0 discussion tools, and the task-file schema, importer, inventory and PM card (T46-01/02/03/05)","summary":"estimated_hours: 24 complexity_points: 8 planned_prs: 5 acceptance_files: [\"backend/task_file.py\", \"backend/tests/test_task_file.py\", \"scripts/coldstart-templates/epic/NN.md\", \"scripts/coldstart-templates/epic/epic.md\", \"scripts/coldstart-templates/epic/README.md\", \"requirements.txt\", \"scripts/import-epic-tasks.py\", \"b…"},{"createdAt":"2026-09-19T18:39:09Z","updatedAt":"2026-09-19T18:39:09Z","category":"Ideas","comments":0,"number":2622,"url":null,"tag":"Small","title":"Pre-push guards cover derived files, but not behavioural guards like the coldstart/importer agreement check","summary":"What D#2578 makes code-plane-pr.sh build run three guards before pushing: engine-manifest-guard.py ruff-ratchet.py commands-twin-divergence-guard.sh Those cover the \"derived file not regenerated\" class behind 4 of today's 5 import-smoke reds. The fifth, PR #234 (T46-02, importer rewrite), was a real behavioural regress…"},{"createdAt":"2026-09-19T18:39:08Z","updatedAt":"2026-09-19T18:39:08Z","category":"Ideas","comments":0,"number":2621,"url":null,"tag":"Small","title":"The claude_spawn_forbidden match fires on data operands, which teaches agents to write wrapper scripts","summary":"What The sandbox's claude_spawn_forbidden fragment match fires on any Bash command where the literal spawn-agent.sh appears as an operand to an interpreter. That includes cases where the script is never executed: a PATH= argument to code-plane-pr.sh build; a Python heredoc doing unrelated string work. It was reported b…"},{"createdAt":"2026-09-19T18:39:05Z","updatedAt":"2026-09-19T18:39:05Z","category":"Ideas","comments":0,"number":2618,"url":null,"tag":"Small","title":"Three trust-boundary modules resolve BOT_ACCOUNT at import time, so the import-smoke check has to exclude them","summary":"What Code-plane PR #227 (D#2588) widened scripts/ci/backend-import-smoke.py to import scripts/lib/*.py. Three of the four trust-boundary modules that D#2588 was written to cover still can't be import-checked, so they're excluded through SCRIPTS_LIB_EXCLUDE: external_intake_gate.py pr_comment_trust.py pr_intake_gate.py…"},{"createdAt":"2026-09-19T18:39:04Z","updatedAt":"2026-09-19T18:39:04Z","category":"Ideas","comments":0,"number":2617,"url":null,"tag":"Bug","title":"test_loop_bootstrap_extended.sh: 10 failures unrelated to D#2165, unmasked when PR #232 removed the backend-snapshot abort","summary":"What Code-plane PR #232 (D#2165 PR 1) removed the set -e abort at the stale backend-snapshot block in tests/test_loop_bootstrap_extended.sh. That abort had been hiding the rest of the suite. On a clean clone of the PR head (Linux 6.18.38, NixOS), the suite now reports 332 PASS / 67 FAIL: 57 failures are not executable."},{"createdAt":"2026-08-23T23:24:50Z","updatedAt":"2026-09-19T18:28:07Z","category":"Ideas","comments":2,"number":2165,"url":null,"tag":"Bug","title":"test_loop_bootstrap_extended.sh still asserts against D#1890-archived backend-snapshot","summary":"estimated_hours: 6 complexity_points: 6 planned_prs: 2 acceptance_files: [\"tests/test_loop_bootstrap_extended.sh\", \"scripts/coldstart-project.sh\"] REMAINING SCOPE — BOTH PRs ARE STILL OPEN (updated 2026-09-11 by project-manager) Correction to an automated status reading. Code-plane PR #129 touched tests/test_loop_boots…"},{"createdAt":"2026-09-16T23:39:27Z","updatedAt":"2026-09-16T23:39:27Z","category":"General","comments":0,"number":2604,"url":null,"tag":"Small","title":"Muse lane: record real per-agent tokens from subagent session logs","summary":"[Small] Muse lane: record real per-agent tokens from subagent session logs Muse subagent completions are not landing in the stats lane. Today shows 16 start-only rows and 0 completions for ~20 Muse subagent runs, and the one reporting fix so far only covered envelope parsing — tokens were still NULL or self-reported (u…"},{"createdAt":"2026-09-16T22:45:57Z","updatedAt":"2026-09-16T22:45:57Z","category":"General","comments":0,"number":2603,"url":null,"tag":"Small","title":"Fix How-the-loop-works, marketplace-from-URL, document Muse loop","summary":"planned_prs: 1 [Small] Fix How-the-loop-works, marketplace-from-URL, document Muse /loop D#2601/D#2602 follow-up. Three docs-only items, all public README. 1. Rewrite \"How the loop works\" (one consistent story) Keep what's true: /loop is a product command (both CLIs), not a repo file; iterations in this repo fire via c…"},{"createdAt":"2026-09-16T22:20:19Z","updatedAt":"2026-09-16T22:20:19Z","category":"General","comments":0,"number":2602,"url":null,"tag":"Small","title":"Muse plugin bundle + sandbox run notes","summary":"planned_prs: 1 [Small] Muse plugin bundle + sandbox run notes Follow-up to D#2601 (closed by #218). Two adopter gaps found while operating the Muse lane for real: No install path. The three project skills work once the checkout exists, but there is no Muse-native plugin bundle and no marketplace route. Claude side has…"},{"createdAt":"2026-09-13T02:42:44Z","updatedAt":"2026-09-13T02:42:44Z","category":"General","comments":0,"number":2597,"url":null,"tag":"Small","title":"the fabrication detector lets an agent pick which repo it reads, and goes silent on a broken import","summary":"planned_prs: 1 Two hardening items on the fabrication detector Both raised by PR #214's security review, both explicitly non-blocking, both worth doing before the next fabrication rather than after. 1. An agent chooses which repository the detector reads backend/envelope_check.py:232 — owner and repo parsed from an age…"},{"createdAt":"2026-09-13T02:26:25Z","updatedAt":"2026-09-13T02:26:25Z","category":"General","comments":0,"number":2596,"url":null,"tag":"Small","title":"the containment verifier cannot report a positive denial — CONTAINED is unreachable on a correctly-contained host","summary":"planned_prs: 1 The gap scripts/gate1-verify-containment.sh can report that egress is not denied, and can report that it could not tell — but it can no longer report that egress is denied. So gate1_containment_verdict=CONTAINED is unreachable on a correctly-contained host. Measured on the operator host tonight, with the…"},{"createdAt":"2026-09-13T02:21:59Z","updatedAt":"2026-09-13T02:21:59Z","category":"General","comments":0,"number":2595,"url":null,"tag":"Bug","title":"nixos-rebuild switch resets the ACL mask and silently neuters D#2560's access grant — getfacl still shows the entry","summary":"planned_prs: 1 The finding nixos-rebuild switch silently neuters the ACL that D#2560's runbook tells the operator to set. Observed on the operator host tonight, during the gesture itself. Before the rebuild, with the ACL applied: gate1_probe gh-credential=DENIED gate1_probe state-dir=DENIED gate1_probe operator-checkou…"},{"createdAt":"2026-09-12T15:49:57Z","updatedAt":"2026-09-13T01:55:45Z","category":"General","comments":14,"number":2565,"url":null,"tag":"Feature","title":"Report anonymous counters to fulcrumaxe.dev, opt-in and off by default","summary":"estimated_hours: 8 complexity_points: 5 planned_prs: 2 acceptance_files: [\"backend/telemetry_report.py\", \"backend/telemetry_install_id.py\", \"backend/control_plane.py\", \"scripts/lib/telemetry.sh\", \"scripts/telemetry-erase.sh\", \"scripts/start-the-day.sh\", \"hooks/spawn_tag_redaction.py\", \"tests/test_telemetry_report.py\",…"},{"createdAt":"2026-09-13T00:49:18Z","updatedAt":"2026-09-13T00:49:18Z","category":"General","comments":0,"number":2593,"url":null,"tag":"Small","title":"every .py outside run-pr-tests.sh's pytest arm becomes unmergeable once PR #208 lands — hooks/*.py has no route and the ledger is deliberately no escape","summary":"planned_prs: 1 The finding Once PR #208 merges, any .py file outside run-pr-tests.sh's pytest arm can no longer pass Gate 1 at all — and the only remaining valve is --force-no-two-gate. The arm, at code-plane/main: backend/*|tests/*.py|*_test.py|test_*.py) RUN_PYTHON=true; suite=\"pytest\" ;; hooks/ appears in no routing…"},{"createdAt":"2026-09-13T00:04:15Z","updatedAt":"2026-09-13T00:04:15Z","category":"General","comments":0,"number":2591,"url":null,"tag":"Small","title":"the state dir's 0700 is the operator's umask, not an enforced property — and it now holds captured worktree diffs","summary":"planned_prs: 1 The finding The state directory's 0700 is the operator's umask, not an enforced property. scripts/setup-state-dir.sh creates it with a bare mkdir -p and no chmod: # 1. Create external state dir + blackboard subdir mkdir -p \"$STATE_DIR/blackboard\" On this host it happens to be right — drwx------ jp:users…"},{"createdAt":"2026-09-12T23:56:19Z","updatedAt":"2026-09-12T23:56:19Z","category":"General","comments":0,"number":2590,"url":null,"tag":"Small","title":"resolve_merged_count counts one plane only — a Discussion with a PR on each plane can never reach planned_prs and holds open forever","summary":"planned_prs: 1 The finding resolve_merged_count in scripts/post-merge-hook.sh:163-193 counts merges for one plane only, so a Discussion whose planned PRs are split across the two planes can never reach its own planned_prs and holds open forever. The query is scoped to a single repo: all_records=$(python3 \"$REPO_ROOT/ba…"},{"createdAt":"2026-08-18T00:20:31Z","updatedAt":"2026-09-12T23:50:23Z","category":"Ideas","comments":21,"number":1900,"url":null,"tag":"Feature","title":"CI has never run pytest — 90 of ~9,494 Python tests fail unnoticed behind an import-smoke check","summary":"estimated_hours: 18 complexity_points: 8 planned_prs: 4 acceptance_files: [\"requirements.txt\", \".github/workflows/ci.yml\", \".github/workflows/pytest-portability-probe.yml\", \".github/workflows/pytest-manifest-producer.yml\", \"scripts/lib/pytest_baseline.py\", \"scripts/ci/verify-no-unreproducible-counts.py\", \"scripts/lib/c…"},{"createdAt":"2026-09-12T23:40:25Z","updatedAt":"2026-09-12T23:40:25Z","category":"General","comments":0,"number":2587,"url":null,"tag":"Small","title":"18 test files ship to the code plane referencing dashboard_tui, which is tracked on neither plane — a permanent red floor under D#1900's baseline","summary":"planned_prs: 1 The finding 18 tracked test files reference dashboard_tui, and dashboard_tui/ is tracked on neither plane. Measured on the operator host, NixOS, this engine checkout at main 37d3bd20, against code-plane/main 9f86b71a: git ls-tree -r --name-only code-plane/main | grep -c '^dashboard_tui/' → 0 git ls-tree…"},{"createdAt":"2026-09-12T20:13:34Z","updatedAt":"2026-09-12T23:36:33Z","category":"General","comments":6,"number":2576,"url":null,"tag":"Bug","title":"the Gate-1 uid runbook never grants the runner read access to the checkout — 0700 on the operator home makes the containment unrunnable","summary":"estimated_hours: 3 complexity_points: 3 planned_prs: 0 acceptance_files: [\"wiki/Gate-1-Containment-Runbook.md\", \"scripts/gate1-verify-containment.sh\", \"scripts/gate1-invoke.sh\", \"tests/test_gate1_verify_containment.sh\", \"tests/test_gate1_invoke.sh\"] Reader's note (PM, 2026-09-12). The filing is retained verbatim at the…"},{"createdAt":"2026-09-12T23:17:41Z","updatedAt":"2026-09-12T23:17:41Z","category":"General","comments":0,"number":2583,"url":null,"tag":"Bug","title":"a specialist's whole Round 1 posted as a file path instead of its contents — gh -f body=PATH exits 0 and returns a comment URL","summary":"planned_prs: 1 What happened A technical-architect's entire Round 1 on D#1915 reached the Discussion as a 132-character file path: /tmp/.../scratchpad/ta-1915-r1.md The analysis was real — 3,114 bytes, five measured findings, an open question to the security-expert, and a well-formed AGENT_OUTPUT envelope. All of it st…"},{"createdAt":"2026-09-12T21:58:23Z","updatedAt":"2026-09-12T22:20:11Z","category":"General","comments":1,"number":2582,"url":null,"tag":"Small","title":"auto-pull-step.sh echoes conflicted file paths unsanitized into a needs-boss Issue — the lane the Team Lead is documented to act on","summary":"planned_prs: 1 The finding scripts/lib/auto-pull-step.sh was deliberately excluded from D#2415's echo-site sanitization on the stated grounds that it posts to the Discussion plane rather than the code plane. That rationale is about the destination, and the question is provenance. Its echoed values are not literals. Mea…"},{"createdAt":"2026-09-12T21:47:46Z","updatedAt":"2026-09-12T21:55:57Z","category":"General","comments":1,"number":2580,"url":null,"tag":"Bug","title":"team-lead-iteration.sh reads NEEDS_MERGE 140 lines before assigning it — the quality gate and the auto-merge step have never processed a PR","summary":"planned_prs: 1 The finding scripts/team-lead-iteration.sh reads NEEDS_MERGE 140 lines before it is ever assigned. Both consumers that run in that window — the quality gate and the auto-merge step — iterate an array that does not exist, so neither has ever processed a single PR. Measured on the Discussion-plane checkout…"},{"createdAt":"2026-09-12T16:47:40Z","updatedAt":"2026-09-12T21:51:39Z","category":"General","comments":2,"number":2567,"url":null,"tag":"Small","title":"executor.tmpl sends every executor to scripts/lib/code-plane-pr.sh, which only exists on the code plane","summary":"What's wrong backend/spawn_templates/executor.tmpl:67 tells every executor: When it is empty, do NOT try to push the worktree's own branch; build the commit with scripts/lib/code-plane-pr.sh instead (its header documents the full build/push interface and the three disciplines it enforces...) That path does not exist in…"},{"createdAt":"2026-09-12T17:38:47Z","updatedAt":"2026-09-12T17:38:47Z","category":"General","comments":0,"number":2570,"url":null,"tag":"Small","title":"the identity guard checks -z where jq prints the string \"null\", and its one caller discards the refusal","summary":"Three residuals from the PR #197 reviews (D#2434, merged). Both reviewers judged each non-blocking and said why; recording them so they don't survive only in a review comment. 1. The identity guard checks emptiness, not shape scripts/pr-instruction-path-notice.sh resolves our own login with gh api user --jq '.login' an…"},{"createdAt":"2026-09-12T17:25:08Z","updatedAt":"2026-09-12T17:25:08Z","category":"General","comments":0,"number":2569,"url":null,"tag":"Small","title":"the ref-trust gate checks which namespace a ref sits in, not whether that namespace really came from the remote","summary":"What's wrong backend/spawn_diff.py's ref-trust gate (merged in PR #196, D#2559) refuses to execute a ref's spawn_templates.py unless the resolved sha is an ancestor of a remote-tracking branch belonging to a configured remote whose URL is one of ours. That closed a real, demonstrated bypass: before the fix, git update-…"},{"createdAt":"2026-09-12T17:02:34Z","updatedAt":"2026-09-12T17:20:23Z","category":"General","comments":2,"number":2568,"url":null,"tag":"Bug","title":"A cross-plane commit built from an engine-plane worktree silently reverts code-plane content — 225 of 1790 shared files diverge","summary":"What's wrong An executor working a code-plane PR gets a worktree seeded from this plane. It edits files there, then builds a cross-plane commit by hand. For any file that exists on both planes but differs between them, the commit it builds carries this plane's version — silently reverting whatever landed on the code pl…"},{"createdAt":"2026-09-12T12:24:59Z","updatedAt":"2026-09-12T14:23:30Z","category":"General","comments":6,"number":2558,"url":null,"tag":"Feature","title":"The boss-login forbidden pattern should resolve to the account actually running the tooling, not a shipped literal","summary":"estimated_hours: 9 complexity_points: 6 planned_prs: 2 acceptance_files: [\"scripts/lib/identity-resolve.sh\", \"scripts/check-forbidden-identifiers.sh\", \"open-source/IDENTIFIER-RULES.txt\", \"scripts/ci/repo-target-gate.sh\", \"scripts/lib/preflight-common.sh\", \"scripts/coldstart-interview/questions.json\", \"scripts/coldstart…"},{"createdAt":"2026-09-08T14:13:32Z","updatedAt":"2026-09-12T13:27:22Z","category":"Ideas","comments":3,"number":2503,"url":null,"tag":"Small","title":"Deny the fetch-into-interpreter shape in the sandbox guardrail (re-scoped from [Critical])","summary":"RE-SCOPED [Critical] -> [Small] by Team Lead, 2026-09-12. Scope is now item 1 of the suggested minimum only (deny the fetch-verb -> pipe -> interpreter shape). Items 2 and 3 are out. No consensus panel is required at [Small]. The full reasoning, and what would reverse this, is in the Team Lead comment below. The measur…"},{"createdAt":"2026-09-12T13:14:45Z","updatedAt":"2026-09-12T13:14:45Z","category":"General","comments":0,"number":2561,"url":null,"tag":"Bug","title":"audit_trail dedupes against a repo-root seen.sqlite that AUTONOMOUS_TEAM_STATE_DIR does not move — a test run can suppress a real audit row for 7 days","summary":"estimated_hours: 2 complexity_points: 2 planned_prs: 1 acceptance_files: [\"backend/audit_trail.py\", \"backend/tests/test_audit_trail.py\"] [Bug] — found by security-reviewer on PR #191, verified independently by Team Lead before filing. Non-blocking for that PR, which merged on its own merits. One file, two path resolver…"},{"createdAt":"2026-09-12T12:10:42Z","updatedAt":"2026-09-12T12:10:42Z","category":"General","comments":0,"number":2557,"url":null,"tag":"Bug","title":"Two more resolvers read a PR from the Discussion plane — spawn_inspect confirmed, server.py a candidate","summary":"estimated_hours: 3 complexity_points: 2 planned_prs: 1 acceptance_files: [\"backend/spawn_inspect.py\", \"backend/tests/test_spawn_inspect.py\"] [Bug] — filed by Team Lead, 2026-09-12. Split out of D#2554 at the technical-architect's explicit request, so that D#2554's Spec stays ~60-90 lines and unblocks D#2540 rather than…"},{"createdAt":"2026-09-12T11:13:47Z","updatedAt":"2026-09-12T11:39:24Z","category":"General","comments":1,"number":2555,"url":null,"tag":"Bug","title":"Worktree claims never expire — 39 dead worktrees hold 108 file paths hostage with zero open PRs, and the sweep's predicate cannot reach them","summary":"estimated_hours: 4 complexity_points: 3 planned_prs: 1 acceptance_files: [\"scripts/sweep-stale-worktrees.sh\", \"scripts/lib/worktree-claims.sh\", \"tests/test_worktree_claims.sh\"] [Bug] — filed by Team Lead, 2026-09-12, after it blocked a [Critical] spawn. What happened Spawning an executor against D#2471 was refused by t…"},{"createdAt":"2026-09-11T18:29:56Z","updatedAt":"2026-09-11T18:29:56Z","category":"Ideas","comments":0,"number":2553,"url":null,"tag":"Feature","title":"Stamp the acting role on review comments so verdicts can be attributed downstream","summary":"Review comments carry no role marker, so verdicts cannot be attributed downstream Every merge-gate verdict is posted as an ordinary pull-request comment from one bot account. The comment body says what was decided; nothing in it says which role decided it. That is fine for the merge machinery, which reads labels. It is…"},{"createdAt":"2026-09-08T06:33:02Z","updatedAt":"2026-09-11T12:17:46Z","category":"Ideas","comments":3,"number":2483,"url":null,"tag":"Bug","title":"One tuple does two jobs: the dial guard freezes a script's source against the agents meant to fix it, and blocks prose that names it","summary":"estimated_hours: 6 complexity_points: 5 planned_prs: 2 acceptance_files: [\"hooks/sandbox_rules.py\", \"hooks/tests/test_sandbox_rules.py\"] Filing (context — the Spec is below, and is self-contained) Surfaced by the D#1946 PM, which could not spec three of its four findings because the file they live in cannot be edited b…"},{"createdAt":"2026-09-11T12:03:00Z","updatedAt":"2026-09-11T12:03:00Z","category":"Ideas","comments":0,"number":2546,"url":null,"tag":"Bug","title":"The pr_amend route is unit-tested but never followed — we assert the guidance renders, never that it reaches a PR head","summary":"estimated_hours: 4 complexity_points: 3 planned_prs: 1 acceptance_files: [\"tests/test_spawn_agent_pr_amend_e2e.sh\", \"backend/tests/test_prompt_builder.py\"] ⚠ NOT a P0. Do not let this displace tomorrow's P0 items. Filed while the context is fresh. It is cheap, it is real, and it is explicitly behind the P0 queue. Spawn…"},{"createdAt":"2026-09-11T11:42:57Z","updatedAt":"2026-09-11T11:42:57Z","category":"Ideas","comments":0,"number":2544,"url":null,"tag":"Bug","title":"Four coverage claims in hooks/sandbox_rules.py have been wrong in one day, each sending a reviewer to the wrong place — make the claims checkable","summary":"estimated_hours: 5 complexity_points: 3 planned_prs: 1 acceptance_files: [\"hooks/sandbox_rules.py\", \"hooks/tests/test_sandbox_rules.py\"] The individual finding, and the pattern behind it Individual: the non-python interpreter comment understates its own breadth The comment and the accompanying test describe the perl/ru…"},{"createdAt":"2026-09-11T11:41:57Z","updatedAt":"2026-09-11T11:41:57Z","category":"Ideas","comments":0,"number":2543,"url":null,"tag":"Bug","title":"Every name-gated exemption in the sandbox is defeated by a one-word wrapper — `timeout 5 echo \"dial-registry.json\"` blocks while bare echo allows","summary":"estimated_hours: 4 complexity_points: 3 planned_prs: 1 acceptance_files: [\"hooks/sandbox_rules.py\", \"hooks/tests/test_sandbox_rules.py\"] The defect: a one-word prefix defeats every name-gated exemption _is_segment_write_candidate (hooks/sandbox_rules.py:2967) decides whether a segment gets scanned for write targets, an…"},{"createdAt":"2026-09-10T16:35:59Z","updatedAt":"2026-09-11T11:35:43Z","category":"Ideas","comments":7,"number":2524,"url":null,"tag":"Bug","title":"The restarted dashboard holds a write lock on stats.duckdb — every merge since 11:56 has silently dropped its stats_metrics row","summary":"REMAINING SCOPE — PR-b ONLY (updated 2026-09-11 by project-manager) Context. PR-a is merged on the code plane (fulcrumaxe/fulcrumaxe PR #150, merged 2026-09-10T18:06Z) and has been synced onto the engine plane by Team Lead on 2026-09-11. record_many() now opens one connection per batch, wraps every insert in a single t…"},{"createdAt":"2026-09-11T10:35:58Z","updatedAt":"2026-09-11T10:35:58Z","category":"Ideas","comments":0,"number":2541,"url":null,"tag":"Bug","title":"The write-target scan drops a glued redirect, so `>>audit.jsonl` writes a protected file that `>> audit.jsonl` cannot — six spellings measured","summary":"estimated_hours: 4 complexity_points: 3 planned_prs: 1 acceptance_files: [\"hooks/sandbox_rules.py\", \"hooks/tests/test_sandbox_rules.py\"] The finding The write-target scan treats a glued redirect differently from a spaced one. audit.jsonl is a dial-protected basename, so every line below should block: echo x > audit.jso…"},{"createdAt":"2026-09-07T11:53:46Z","updatedAt":"2026-09-11T10:02:50Z","category":"Ideas","comments":2,"number":2475,"url":null,"tag":"Bug","title":"fix_rounds_per_pr has been hardcoded to 0 since July — gh pr view has no timelineItems field and the fallback swallows the error","summary":"Resolution — fixed, verified on the code plane Fixed by code-plane PR #104, merged as 4ad5e80c (\"count fix cycles via the REST issue timeline, not a nonexistent gh field\"). Verified against code-plane/main @ 245eb284 on host nixos, 2026-09-10 — this Discussion was not re-implemented, only confirmed: scripts/post-merge-…"},{"createdAt":"2026-09-07T11:53:47Z","updatedAt":"2026-09-11T10:02:31Z","category":"Ideas","comments":2,"number":2477,"url":null,"tag":"Bug","title":"spawn-hourly-stats has emitted three constant metrics for 337 consecutive ticks, two of them safety counters","summary":"Resolution — fixed, verified on the code plane Fixed by code-plane PR #107, merged as 8757a1b7 (\"spawn-hourly-stats: don't publish a value that wasn't computed\"). Verified against code-plane/main @ 245eb284 on host nixos, 2026-09-10 — this Discussion was not re-implemented, only confirmed: All three metrics now skip ra…"},{"createdAt":"2026-08-18T22:18:55Z","updatedAt":"2026-09-11T09:43:19Z","category":"General","comments":5,"number":1946,"url":null,"tag":"Small","title":"Five residuals from the dial-provisioning security review, chiefly: authorizing a source writes no audit row","summary":"estimated_hours: 6 complexity_points: 5 planned_prs: 2 acceptance_files: [\"scripts/coldstart-project.sh\", \"scripts/provision-dial-allowlist.sh\", \"tests/test_provision_dial_allowlist.sh\"] REMAINING SCOPE — PR 2 (items 1, 2, 3) ONLY (updated 2026-09-11 by project-manager) Context. PR 1 is merged on the code plane (fulcru…"},{"createdAt":"2026-08-20T01:32:23Z","updatedAt":"2026-09-11T09:33:31Z","category":"Ideas","comments":1,"number":2017,"url":null,"tag":"Small","title":"The checkout-path guard is blind to the slug-mangled form, so 17 files were never in D#1997's 169","summary":"D#1997 eliminated 169 hardcoded checkout paths and its guard now reports zero. But there is a whole class of the same leak the guard cannot see, and it was never in the 169. A security reviewer on PR #2003 found it at backend/tests/fixtures/prompt_golden_executor.txt:335: TRANSCRIPT=$(ls -t $HOME/.claude/projects/-home…"},{"createdAt":"2026-08-22T04:05:51Z","updatedAt":"2026-09-11T09:23:08Z","category":"Ideas","comments":2,"number":2148,"url":null,"tag":"Bug","title":"The pytest production-state guard does not fire for bash tests that shell out — 34 of 102 rows in the real flake history came from a test run tonight","summary":"estimated_hours: 7 complexity_points: 7 planned_prs: 2 acceptance_files: [\"backend/state_paths.py\", \"tests/lib/blackboard-fixture.sh\", \"tests/test_bash_suite_state_isolation.sh\"] Intent Goal: Close the gap between \"the repo protects production state from tests\" and what is actually enforced, for the bash-shells-out pat…"},{"createdAt":"2026-09-09T09:28:23Z","updatedAt":"2026-09-11T09:21:59Z","category":"General","comments":0,"number":2509,"url":null,"tag":"Bug","title":"merge-and-hook.sh exits 0 when it refuses to merge — a refusal is indistinguishable from a success","summary":"PREMISE NOT REPRODUCIBLE ON THE CODE PLANE — re-measure before speccing (updated 2026-09-11 by project-manager) This Discussion was a candidate for a Spec in today's queue refill. It did not get one, because the defect as written does not reproduce, and writing a \"make it exit non-zero\" Spec against it would have produ…"},{"createdAt":"2026-09-06T17:22:06Z","updatedAt":"2026-09-11T09:21:58Z","category":"Ideas","comments":1,"number":2457,"url":null,"tag":"Bug","title":"tutor.sh's fingerprint answers 'nothing changed' for every in-place edit when stat is unusable — the degraded mode is shaped exactly like a healthy one","summary":"CLOSED — already fixed on the code plane (updated 2026-09-11 by project-manager) Verified against code-plane fulcrumaxe/fulcrumaxe main @ 4a6192c5, 2026-09-11 — not against the engine checkout, which is behind the code plane and would have shown this as still open. scripts/coldstart-tutorial/tutor.sh:42 cites this Disc…"},{"createdAt":"2026-09-06T23:57:23Z","updatedAt":"2026-09-11T09:21:57Z","category":"Ideas","comments":2,"number":2462,"url":null,"tag":"Bug","title":"A code-review-passed label earned by an earlier commit still gates a manual merge of a later one","summary":"CLOSED — already fixed on the code plane (updated 2026-09-11 by project-manager) Verified against code-plane fulcrumaxe/fulcrumaxe main @ 4a6192c5, 2026-09-11 — not against the engine checkout, which is behind the code plane and would have shown this as still open. scripts/merge-and-hook.sh now carries the freshness ch…"},{"createdAt":"2026-09-06T23:30:30Z","updatedAt":"2026-09-11T09:21:52Z","category":"Ideas","comments":1,"number":2461,"url":null,"tag":"Bug","title":"cmd_auto_triage carries the same crash-reads-as-discardable collapse on a second destructive route","summary":"CLOSED — already fixed on the code plane (updated 2026-09-11 by project-manager) Verified against code-plane fulcrumaxe/fulcrumaxe main @ 4a6192c5, 2026-09-11 — not against the engine checkout, which is behind the code plane and would have shown this as still open. scripts/triage-orphan-diffs.sh now carries the distinc…"},{"createdAt":"2026-09-04T10:03:09Z","updatedAt":"2026-09-11T09:21:51Z","category":"Ideas","comments":1,"number":2351,"url":null,"tag":"Small","title":"three accidental ways past the coldstart state-dir guard","summary":"CLOSED — already fixed on the code plane (updated 2026-09-11 by project-manager) Verified against code-plane fulcrumaxe/fulcrumaxe main @ 4a6192c5, 2026-09-11 — not against the engine checkout, which is behind the code plane and would have shown this as still open. The fix is in scripts/ci/coldstart-state-dir-guard.py,…"},{"createdAt":"2026-09-07T09:20:55Z","updatedAt":"2026-09-11T09:21:03Z","category":"Ideas","comments":0,"number":2472,"url":null,"tag":"Small","title":"the ref that decides what has been reviewed has no reflog, no sandbox rule, and no audit row","summary":"estimated_hours: 4 complexity_points: 3 planned_prs: 1 acceptance_files: [\"scripts/engine-sync/inbound/apply_inbound.py\", \"scripts/engine-sync/tests/test_apply_inbound_marker_audit.py\"] Filing (context — the Spec is below, and is self-contained) What is missing refs/synced/code-plane is the ref that decides what the en…"},{"createdAt":"2026-09-11T09:15:27Z","updatedAt":"2026-09-11T09:15:27Z","category":"Ideas","comments":0,"number":2533,"url":null,"tag":"Bug","title":"the registered-hook auditor reads the last token as the path, so a wrapper around the real hook reports IN-REPO and the hash agrees","summary":"estimated_hours: 4 complexity_points: 3 planned_prs: 1 acceptance_files: [\"scripts/audit-registered-hooks.sh\", \"tests/test_audit_registered_hooks.sh\"] Filing (context — the Spec is below, and is self-contained) Three findings in scripts/audit-registered-hooks.sh, all from today's review of the PR that landed it (code-p…"},{"createdAt":"2026-09-05T04:33:48Z","updatedAt":"2026-09-11T09:04:49Z","category":"Ideas","comments":14,"number":2403,"url":null,"tag":"Bug","title":"the pytest baseline is load-dependent — the same tree gives 70 or 110 failures, so every zero-delta claim assumes a stability nobody measured","summary":"estimated_hours: 8 complexity_points: 5 planned_prs: 5 acceptance_files: [\"scripts/measure-pytest-baseline.sh\", \"scripts/lib/pytest_baseline.py\", \"tests/test_pytest_baseline.sh\", \".autonomous-team/measurements/pytest-baseline/analysis.json\"] CLOSED — Spec satisfied (updated 2026-09-11 by project-manager) Code-plane PR…"},{"createdAt":"2026-09-04T11:48:26Z","updatedAt":"2026-09-11T09:04:42Z","category":"Ideas","comments":1,"number":2362,"url":null,"tag":"Bug","title":"a hook with 9 tests and two reviews today is registered nowhere and fires on nothing","summary":"REMAINING SCOPE — PR-b ONLY (updated 2026-09-11 by project-manager) Context. PR-a of this Discussion is merged on the code plane (fulcrumaxe/fulcrumaxe PR #142, merged 2026-09-10T16:56Z). It landed scripts/ci/hook-registry-check.py, hooks/hook-ledger.json and tests/test_hook_registry_check.sh, and it answered PR-a item…"},{"createdAt":"2026-09-08T06:56:05Z","updatedAt":"2026-09-11T09:04:14Z","category":"Ideas","comments":2,"number":2485,"url":null,"tag":"Small","title":"CLAUDE.md prescribes a code-plane resolver form the harness refuses intermittently — and our own sandbox allows all seven shapes","summary":"estimated_hours: 4 complexity_points: 3 planned_prs: 1 acceptance_files: [\".claude/agents/executor.md\", \"backend/spawn_templates/executor.tmpl\", \"scripts/ci/prescribed-resolver-form-guard.py\", \"tests/test_prescribed_resolver_form_guard.sh\"] Filing (context — the Spec is below, and is self-contained) The measurement fir…"},{"createdAt":"2026-09-08T08:04:06Z","updatedAt":"2026-09-11T09:04:12Z","category":"Ideas","comments":0,"number":2491,"url":null,"tag":"Small","title":"Should verify-test-deps-declared.py scan archive/? Three options, none chosen (split from D#2464)","summary":"estimated_hours: 3 complexity_points: 2 planned_prs: 1 acceptance_files: [\"scripts/ci/verify-test-deps-declared.py\", \"tests/test_verify_test_deps_declared.sh\"] Filing (context — the Spec is below, and is self-contained) Split out of D#2464, which is closing via code-plane PR #87. That PR implements D#2464's item 1 (the…"},{"createdAt":"2026-09-11T08:57:19Z","updatedAt":"2026-09-11T09:03:56Z","category":"Ideas","comments":0,"number":2532,"url":null,"tag":"Bug","title":"executor retros can only be written by agents not in a worktree, so the corpus is selectively empty and the skip rate is unreported","summary":"estimated_hours: 5 complexity_points: 3 planned_prs: 1 acceptance_files: [\"backend/state_paths.py\", \"backend/agent_retros.py\", \"scripts/lib/self-observe-gate.sh\", \"backend/tests/test_agent_retros.py\"] Filing (context — the Spec is below, and is self-contained) The finding The executor self-observe gate writes a retro r…"},{"createdAt":"2026-09-07T02:01:41Z","updatedAt":"2026-09-11T08:59:09Z","category":"Ideas","comments":2,"number":2466,"url":null,"tag":"Small","title":"tool_proxy allows a declined-as-oversize command without writing the record that makes declining acceptable","summary":"CLOSED — already fixed on the code plane (updated 2026-09-11 by project-manager) Verified against code-plane fulcrumaxe/fulcrumaxe main @ 4a6192c5 (2026-09-11), not against the engine checkout — which is behind the code plane and would have shown this as still open. Fixed by code-plane PR #90 — \"record the oversize-dec…"},{"createdAt":"2026-09-04T18:05:02Z","updatedAt":"2026-09-11T08:59:06Z","category":"Ideas","comments":1,"number":2388,"url":null,"tag":"Small","title":"guard-registry-check.py counts a reference from a workflow that can never run","summary":"CLOSED — already fixed on the code plane (updated 2026-09-11 by project-manager) Verified against code-plane fulcrumaxe/fulcrumaxe main @ 4a6192c5 (2026-09-11), not against the engine checkout — which is behind the code plane and would have shown this as still open. Fixed by code-plane PR #89 — \"Skip untriggerable work…"},{"createdAt":"2026-09-10T18:27:10Z","updatedAt":"2026-09-10T18:27:10Z","category":"Ideas","comments":0,"number":2530,"url":null,"tag":"Bug","title":"the watchdog suite runs the real reaper with --kill and the age guard zeroed, scanning the whole host","summary":"The watchdog suite runs the real reaper with --kill and the age guard set to zero, host-wide Found by the security-reviewer on PR #148 after that PR had already passed both gates — it flagged this itself rather than letting it merge unrecorded. It did not block the merge, and should not have, for the measured reason be…"},{"createdAt":"2026-09-10T13:53:48Z","updatedAt":"2026-09-10T13:53:48Z","category":"Ideas","comments":0,"number":2519,"url":null,"tag":"Bug","title":"A wrapper script slips past the gh-api mutation allowlist — and the standing brief tells agents to write wrapper scripts","summary":"Found by a project-manager during the D#2435 pass, and reported rather than quietly used. Filing it because the path that makes it reachable is one I put in the executor standing brief this morning, so it is not a rare accident — it is currently the recommended workflow. What happens hooks/sandbox_rules.py:3187 holds _…"},{"createdAt":"2026-09-04T11:22:11Z","updatedAt":"2026-09-10T13:19:57Z","category":"Ideas","comments":1,"number":2359,"url":null,"tag":"Small","title":"one replacement identifier is unpinned, so the next rename has three possible answers","summary":"PR #2356 renamed the retired pre-SDK codename out of tests/, substituting legacy_lane / legacy-lane. That replacement has no frozen mapping in open-source/IDENTIFIER-RULES.txt, so the next rename has three possible answers instead of one. Verification (PM, 2026-09-10) The defect: confirmed, exactly as filed open-source…"},{"createdAt":"2026-09-10T13:16:53Z","updatedAt":"2026-09-10T13:17:24Z","category":"Ideas","comments":0,"number":2517,"url":null,"tag":"Feature","title":"Add a cross-plane parity guard — all three existing guards check parity inside one tree, so plane divergence is invisible to every one of them","summary":"planned_prs: 1 Every parity guard checks parity inside one tree, so the divergence that actually caused harm is invisible to all of them Surfaced by the technical-architect's Round 1 on D#2437 (discussioncomment-18386443), §8 prediction 3: Every parity guard is intra-tree; none is cross-plane. merge-gate-parity-guard.p…"},{"createdAt":"2026-09-10T13:16:46Z","updatedAt":"2026-09-10T13:17:18Z","category":"Ideas","comments":0,"number":2516,"url":null,"tag":"Small","title":"Executors run a sandbox hook 403 lines behind the one that receives fixes — and the tool they follow documents the other one's rules","summary":"planned_prs: 1 The sandbox hook executors actually run is a whole plane behind the one that gets fixed Surfaced by the technical-architect's Round 1 on D#2437 (discussioncomment-18386443), §8 prediction 2: The sandbox hook is a whole plane stale. This checkout's hooks/sandbox_rules.py is byte-identical to origin/main a…"},{"createdAt":"2026-09-05T11:44:14Z","updatedAt":"2026-09-10T13:16:04Z","category":"Ideas","comments":1,"number":2419,"url":null,"tag":"Small","title":"Cutover guard keeps two unlinked lists of the same config files, so a third would be silently exempt","summary":"Premise does not hold on the plane the PR must land on — closed without a Spec. Re-verified independently against code-plane/main at 854dce93 (extracted tree, this host), confirming the earlier not-spawnable finding: _CONFIG_READERS — 0 matches anywhere under scripts/. _half_flip_violations() likewise absent. _CUTOVER_…"},{"createdAt":"2026-09-04T23:08:13Z","updatedAt":"2026-09-10T13:15:37Z","category":"Ideas","comments":1,"number":2394,"url":null,"tag":"Bug","title":"a large diff makes every preflight Python gate report zero changed files, silently","summary":"Already fixed on the code plane — no Spec, no executor. Verified against code-plane/main at 854dce93 (extracted tree, this host). scripts/lib/preflight-common.sh::get_changed_python_files no longer materialises the path list in a shell variable — it streams get_changed_files | grep '\\.py$', snapshots PIPESTATUS into an…"},{"createdAt":"2026-09-04T19:41:03Z","updatedAt":"2026-09-10T13:15:32Z","category":"Ideas","comments":1,"number":2391,"url":null,"tag":"Small","title":"the guard against silently-unpinned gh calls skips instead of failing when they are deleted","summary":"Already fixed on the code plane — no Spec, no executor. Verified against code-plane/main at 854dce93 (extracted tree, this host). tests/test_card_code_plane_pins.py now carries a NON-VACUITY FIX (D#2391) section: the check scans real gh pr statements via _GH_PR_VERB instead of searching for the resolve assignment, so d…"},{"createdAt":"2026-09-04T17:09:16Z","updatedAt":"2026-09-10T12:58:13Z","category":"Ideas","comments":1,"number":2379,"url":null,"tag":"Small","title":"pr_state keys on the PR number alone, so two repos will share one key space","summary":"What breaks backend/pr_state.py keys every row on the PR number alone: backend/pr_state.py:128 def _bb_key(pr): return f\"{_KEY_PREFIX}/{pr}\" Once the public repo is the code plane, two repos issue PR numbers into one key space. A public PR whose number matches an existing private row reads and writes that row. The fail…"},{"createdAt":"2026-09-04T11:08:28Z","updatedAt":"2026-09-10T12:45:07Z","category":"Ideas","comments":1,"number":2358,"url":null,"tag":"Small","title":"a project name and a repo slug both reach the filesystem and gh argv unvalidated","summary":"planned_prs: 1 Recorded so the close guard can read it mechanically (D#2272). PR #102 is the one and only PR for this Discussion; the needs-planned-prs label can be removed. Resolution — both halves fixed by PR #102, verified 2026-09-10 Closed as already-fixed. No Spec written. Both input-validation gaps are closed, ea…"},{"createdAt":"2026-09-04T10:15:46Z","updatedAt":"2026-09-10T12:45:04Z","category":"Ideas","comments":1,"number":2355,"url":null,"tag":"Small","title":"the withheld-agent-updates report names 17 of 26 files that only differ by the identifier rewrite","summary":"planned_prs: 1 Recorded so the close guard can read it mechanically (D#2272). PR #101 is the one and only PR for this Discussion; the needs-planned-prs label can be removed. Resolution — fixed by PR #101, verified 2026-09-10 Closed as already-fixed. No Spec written: the fix this Discussion specified has landed, in the…"},{"createdAt":"2026-09-04T10:06:59Z","updatedAt":"2026-09-10T12:45:01Z","category":"Ideas","comments":2,"number":2354,"url":null,"tag":"Small","title":"the verify-tree instruction sits after the decision it should govern, and calls itself hygiene","summary":"planned_prs: 1 Recorded so the close guard can read it mechanically (D#2272). PR #88 is the one and only PR for this Discussion; the needs-planned-prs label can be removed. Resolution — fixed by PR #88, verified 2026-09-10 Closed as already-fixed. No Spec written: the fix this Discussion asked for has landed. Verified…"},{"createdAt":"2026-09-10T12:43:37Z","updatedAt":"2026-09-10T12:43:37Z","category":"Ideas","comments":0,"number":2513,"url":null,"tag":"Feature","title":"Add a dirty-working-tree check after test suites — the symlink guard catches one escape shape, and three were measured in two days","summary":"Filed by Team Lead on behalf of the D#2499 executor, which could not file it itself — createDiscussion is not on the sandbox's GraphQL mutation allowlist for a sub-agent worktree (only addDiscussionComment, updateDiscussion, addLabelsToLabelable and removeLabelsFromLabelable are permitted). It correctly declined to rou…"},{"createdAt":"2026-08-21T00:32:49Z","updatedAt":"2026-09-10T12:23:19Z","category":"Ideas","comments":0,"number":2050,"url":null,"tag":"Bug","title":"EnterWorktree from a sub-agent is unrecoverable — every later Bash call fails and ExitWorktree refuses to undo it","summary":"EnterWorktree from a sub-agent is a one-way trip — it bricks the session and ExitWorktree refuses to undo it A code-reviewer on PR #2049 called EnterWorktree(path=\".../agent-<other-id>\") to inspect the executor's worktree. That call left its Bash-tool cwd permanently resolved to the other agent's worktree, while the sa…"},{"createdAt":"2026-08-22T02:28:00Z","updatedAt":"2026-09-10T12:20:47Z","category":"Ideas","comments":0,"number":2134,"url":null,"tag":"Bug","title":"The spawn circuit breaker counts one lane and reports zero for the whole system — 'closed, 0 spawns' on a 26-PR day","summary":"What the status banner says Spawn breaker: closed spawns 1h=0 24h=0 spend 24h=$0.0000 That line printed at the end of a session in which this repo merged 26 PRs, each one involving at least one executor and at least one reviewer spawn, plus PM and specialist-panel spawns on top. The true 24h spawn count is well into th…"},{"createdAt":"2026-08-20T22:43:46Z","updatedAt":"2026-09-10T12:18:51Z","category":"Ideas","comments":0,"number":2040,"url":null,"tag":"Small","title":"Two accidental checkout-path shapes still evade the guard after D#2018 — real CI layout and mismatched basename","summary":"Two accidental checkout-path shapes still evade the guard after D#2018 PR #2038 (D#2018) replaced the guard's hardcoded PATTERN='/home/(agent|jp)' with a runtime derivation, so it now catches a hardcoded path under an arbitrary third username. That is a real improvement and it is merged. Its code reviewer found two res…"},{"createdAt":"2026-08-20T20:15:11Z","updatedAt":"2026-09-10T12:17:55Z","category":"Ideas","comments":0,"number":2028,"url":null,"tag":"Small","title":"The seam-used audit row is the only artifact a forged CI pass would leave — deferred from D#2019 on reasoning that inverted the threat","summary":"Deferred from D#2019 as F1. The PM ruled it out of scope for PR #2026 and the deferral was correct — but the security reviewer, reviewing that PR, showed the stated reason inverts the threat model. Filing with the corrected framing, because the wrong reason would have kept this closed forever. What was deferred A ci_st…"},{"createdAt":"2026-09-04T09:11:41Z","updatedAt":"2026-09-10T12:16:53Z","category":"Ideas","comments":1,"number":2343,"url":null,"tag":"Small","title":"two resolvers from #2341 each contradict their own docstring","summary":"Closed as already-fixed, 2026-09-10. Both findings landed on code-plane/main; no Spec is needed. Details in the verification note at the bottom. Two non-blocking findings the code-reviewer raised on PR #2341 (D#2340). Both were correctly judged non-blocking — the PR shipped and the public export CI is green on all six…"},{"createdAt":"2026-09-09T09:32:05Z","updatedAt":"2026-09-10T12:14:43Z","category":"General","comments":0,"number":2511,"url":null,"tag":"Feature","title":"Lint for x=\"$(f)\" silently dropping a subshell mutation — same defect hit three times","summary":"Drafted by the D#2470 executor while fixing the third instance of this shape; filed by the Team Lead because createDiscussion is outside a worktree executor's allowlist by design. What A lint or guard that flags x=\"$(f)\" (or x=$(f)) where f is a shell function that mutates a variable outside its own local scope — an ap…"},{"createdAt":"2026-09-07T02:13:15Z","updatedAt":"2026-09-08T14:19:47Z","category":"Ideas","comments":2,"number":2467,"url":null,"tag":"Small","title":"Nine stale stashes on the operator checkout, and popping one would overwrite the live uncommitted operating config","summary":"Nine stashes, three weeks old, and several carry the live operating config git stash list on the operator checkout holds 9 entries spanning 2026-08-17 to 2026-09-04. Nothing clears them and nothing reads them. stash@{0} 2026-09-04 WIP on worktree-agent-a42d0f75f42b587c0 stash@{1} 2026-09-04 leftover pre-PR-j tracked fi…"},{"createdAt":"2026-09-08T14:18:10Z","updatedAt":"2026-09-08T14:18:10Z","category":"Ideas","comments":0,"number":2507,"url":null,"tag":"Bug","title":"Eight prompt fragments, one of them actually distributed — agent-output-envelope reaches 0 of 24 templates and the anti-stall rule exists nowhere","summary":"Forwarded from a downstream fork of this tooling, which found this in its own prompt assembly and then measured this repo to compare. The comparison inverted: downstream reaches 24/24, this tree reaches 2/24. So this is filed here as this repo's defect, not a report of someone else's. Measured 2026-09-08 at 7471d5de: $…"},{"createdAt":"2026-09-08T14:15:31Z","updatedAt":"2026-09-08T14:15:31Z","category":"Ideas","comments":0,"number":2506,"url":null,"tag":"Bug","title":"All 24 spawn templates interpolate caller-supplied values mid-sentence — the untrusted-content fence exists in this repo and is never applied at substitution time","summary":"Forwarded from a downstream fork of this tooling. Re-checked against this repo's tree at 7471d5de — the gap described below is present here. The finding Spawn templates substitute caller-supplied values — discussion_title, Discussion bodies, PR titles, branch names, role arguments — directly into running prose. There i…"},{"createdAt":"2026-09-08T14:14:30Z","updatedAt":"2026-09-08T14:14:30Z","category":"Ideas","comments":0,"number":2505,"url":null,"tag":"Bug","title":"Five findings on the A2A path: the inbox load bypasses bearer verification, and four failure modes are all shaped like a quiet day","summary":"Five findings about the agent-to-agent message path, forwarded from a downstream fork that runs a copy of this tooling. They are filed as one item because they share a shape: a failure is indistinguishable from a quiet day. Where a line number is given it was checked against backend/a2a_broker.py in this repo at 7471d5…"},{"createdAt":"2026-09-08T14:14:04Z","updatedAt":"2026-09-08T14:14:04Z","category":"Ideas","comments":0,"number":2504,"url":null,"tag":"Bug","title":"Six credential name shapes survive the spawn env scrub, AWS_SECRET_ACCESS_KEY among them — and the \"compgen no-ops\" report is wrong","summary":"Forwarded from a downstream fork of this tooling, re-measured against this repo's own scripts/spawn-agent.sh at 7471d5de before filing. Correction up front, because it changes what to fix The downstream note that prompted this claimed the scrub silently no-ops because compgen -v is unavailable in the nix bash. That is…"},{"createdAt":"2026-09-04T18:22:54Z","updatedAt":"2026-09-08T09:33:09Z","category":"Ideas","comments":3,"number":2389,"url":null,"tag":"Bug","title":"the gate-label drift detector is red on main and its alarm has become part of the baseline","summary":"A guard fired correctly and nobody heard it tests/test_gate_label_drift.py::test_applied_labels_extraction_nonempty_and_exact_count is red on main and has been. Run just now on 47d71959: assert len(applied) > 0 E assert 0 > 0 E + where 0 = len(set()) tests/test_gate_label_drift.py:254 1 failed, 10 passed in 0.06s This…"},{"createdAt":"2026-09-08T09:25:12Z","updatedAt":"2026-09-08T09:25:12Z","category":"Ideas","comments":0,"number":2500,"url":null,"tag":"Bug","title":"The TypeScript post-merge-hook port carries an independent copy of the fix-rounds bug, and the parity test injects past it","summary":"Found by the D#2475 executor while fixing that item's Python side. It did not fix this one, correctly — it is a different file with a different owner and would have widened a single-concern PR. Filing so it is not lost. The finding ts-backend/src/spawn/post-merge-hook.ts (~lines 1386-1395) contains an independent copy…"},{"createdAt":"2026-09-06T23:15:44Z","updatedAt":"2026-09-08T08:59:02Z","category":"Ideas","comments":1,"number":2459,"url":null,"tag":"Bug","title":"Three hooks still write agent command text unscrubbed into the same directory the redaction fix just cleaned","summary":"The redaction chokepoint covers one hook; three siblings write to the same directory unscrubbed D#1957's PR routes all eight of hooks/sandbox.py's telemetry writers through a single _telemetry_line() and scrubs the serialised line. That design is right and it was verified hard — 4011 adversarial cases for JSON corrupti…"},{"createdAt":"2026-09-08T08:50:18Z","updatedAt":"2026-09-08T08:50:18Z","category":"Ideas","comments":0,"number":2497,"url":null,"tag":"Bug","title":"Two hooks log agent commands with no secret scrubber at all — bearer tokens demonstrated landing verbatim","summary":"Found by the PR #100 security reviewer while verifying a different redaction fix. It probed the boundary rather than the change, and the boundary turned out to have a second hole nobody was looking for. The finding Two of the three hooks that log agent command text have no secret scrubber at all. Only cosmetic_retry_br…"},{"createdAt":"2026-09-08T08:48:07Z","updatedAt":"2026-09-08T08:48:07Z","category":"Ideas","comments":0,"number":2496,"url":null,"tag":"Process","title":"Our mutation-proof standard cannot be applied to security validators — the classifier blocks the exact edit it requires","summary":"The gap This project's central verification standard cannot be applied to security validators, because the environment blocks the one action that satisfies it. The standard, in every brief this project issues: mutate the fix, show a NAMED test go red, restore it. A green suite is not evidence; a suite that goes red whe…"},{"createdAt":"2026-09-08T08:20:22Z","updatedAt":"2026-09-08T08:20:22Z","category":"Ideas","comments":0,"number":2494,"url":null,"tag":"Bug","title":"Ten gh pr calls across five templates target the Discussion plane for code-plane PR operations — a typo is the only thing preventing mislabeled PRs","summary":"Surfaced by an executor doing a two-line pin fix (code-plane PR #95), which found adjacent problems, correctly refused to widen its scope, and named them. Measured and extended by the Team Lead before filing. The finding Five agent templates on code-plane/main direct PR operations at the Discussion plane. Measured 2026…"},{"createdAt":"2026-09-07T00:10:02Z","updatedAt":"2026-09-08T08:10:17Z","category":"Ideas","comments":1,"number":2464,"url":null,"tag":"Small","title":"A shell var now collides with pytest-timeout's global switch, and the new deps guard scans archive/","summary":"Two consequences of declaring pytest-timeout, both cheap and both worth deciding D#2441's PR declared pytest-timeout and extended scripts/ci/verify-test-deps-declared.py to compare every used @pytest.mark.<name> against pytest.ini plus requirements.txt. Both items below are consequences of that landing, found by its re…"},{"createdAt":"2026-09-08T07:33:12Z","updatedAt":"2026-09-08T07:33:12Z","category":"Ideas","comments":0,"number":2490,"url":null,"tag":"Bug","title":"The engine-manifest guard makes every PR carry a generated file, and at our concurrency that manufactures the stale-base race it was born from","summary":"Filed within an hour of scripts/ci/engine-manifest-guard.py landing (code-plane PR #75, D#1928). The guard is correct and should stay — this is about how it is wired, not whether it should exist. What happened, measured The guard went into CI at 07:00. By 07:30 it had turned main red and blocked four of six open PRs. M…"},{"createdAt":"2026-09-08T07:30:33Z","updatedAt":"2026-09-08T07:30:33Z","category":"Ideas","comments":0,"number":2489,"url":null,"tag":"Bug","title":"Reviewers cannot run pytest on any code-plane PR built the sanctioned way — collection dies before a test is selected","summary":"Surfaced by the PR #80 reviewer as a non-blocking note, escalated here because it is larger than that PR. Verified independently before filing. The gap A reviewer who materialises a code-plane PR tree the sanctioned way cannot run pytest on it. pytest --collect-only fails identically in any fresh verify_tree_build tree…"},{"createdAt":"2026-09-08T07:24:54Z","updatedAt":"2026-09-08T07:24:54Z","category":"Ideas","comments":0,"number":2488,"url":null,"tag":"Bug","title":"FETCH_HEAD is shared across every concurrent agent, so a review can silently read a different commit than it thinks","summary":"Reported by the PR #81 security reviewer as a process note. It is worth more than a note: it is a silent wrong-tree hazard, and the only reason it did not produce a wrong verdict is that the reviewer noticed and re-pinned. What happened FETCH_HEAD shifted under me mid-review (another process fetched in the shared check…"},{"createdAt":"2026-09-08T06:38:22Z","updatedAt":"2026-09-08T06:38:22Z","category":"Ideas","comments":0,"number":2484,"url":null,"tag":"Bug","title":"gh api's implicit POST walks past the mutation guard — the same admin call is blocked with --method and allowed without it","summary":"Split out of D#1942 by its PM, which measured this while prototyping that fix and deliberately left it alone. Verified independently by the Team Lead before filing, by driving classify_bash() against a worktree cwd on the engine checkout at 7471d5de. The asymmetry The gh api mutation guard only ever inspects -X / --met…"}],"closed":[{"createdAt":"2026-09-19T18:39:07Z","updatedAt":"2026-09-22T01:49:05Z","category":"Ideas","comments":1,"number":2620,"url":null,"tag":"Small","title":"Executors have no non-destructive path when a fix round needs to rebase onto a moved main","summary":"What The auto-mode classifier denies git push --force-with-lease from executors as \"Git Destructive\", and there's no way to approve it mid-session. Two executors reported this on 2026-09-19 (PR #225 and its fix round). Today's fix rounds avoided the problem by pushing fast-forward commits on top of their own branch tip…"},{"createdAt":"2026-09-19T18:39:06Z","updatedAt":"2026-09-22T01:48:32Z","category":"Ideas","comments":1,"number":2619,"url":null,"tag":"Process","title":"Reviewer label application is blocked as Self-Approval, because one GitHub account both opens and approves every PR","summary":"What On 2026-09-19 the Claude Code auto-mode permission classifier repeatedly denied code-reviewer subagents applying code-review-passed. It gave two reasons: \"CI Bypass\". Fixed by an owner-approved permissions.allow rule plus an autoMode.allow note in .claude/settings.local.json. \"Self-Approval\". Not fixed. The same G…"},{"createdAt":"2026-09-12T21:31:01Z","updatedAt":"2026-09-19T19:31:34Z","category":"General","comments":3,"number":2578,"url":null,"tag":"Bug","title":"six PRs in one day reddened on an un-regenerated engine manifest — the check runs only after the PR is open","summary":"estimated_hours: 5 complexity_points: 3 planned_prs: 1 acceptance_files: [\"scripts/lib/code-plane-pr.sh\", \"scripts/ci/ruff-ratchet.py\", \"tests/test_code_plane_pr.sh\", \"engine/manifest.json\"] [Bug] Derived files are only checked after the PR is open. Check them, and regenerate them, where the commit gets built Folds in…"},{"createdAt":"2026-09-07T13:28:12Z","updatedAt":"2026-09-19T18:37:08Z","category":"Ideas","comments":1,"number":2481,"url":null,"tag":"Bug","title":"docs-writer pushes its commit to the Discussion plane using a code-plane PR branch name — the write side of the D#1940 split","summary":"estimated_hours: 2 complexity_points: 2 planned_prs: 1 acceptance_files: [\"backend/spawn_templates/docs-writer.tmpl\", \".claude/agents/docs-writer.md\", \"tests/test_docs_writer_push_plane.sh\"] Filing (context — the Spec is below, and is self-contained) What backend/spawn_templates/docs-writer.tmpl:73 pushes to origin, wh…"},{"createdAt":"2026-09-12T15:45:20Z","updatedAt":"2026-09-19T18:13:55Z","category":"General","comments":1,"number":2564,"url":null,"tag":"Bug","title":"Nothing tells an executor to regenerate engine/manifest.json — three of four PRs missed it today, each costing a fix round","summary":"Folded into D#2578. One frozen Spec covers both. See the fold comment below. estimated_hours: 3 complexity_points: 3 planned_prs: 1 acceptance_files: [\"scripts/preflight-fast.sh\", \"backend/spawn_templates/executor.tmpl\", \"tests/test_preflight_manifest_reminder.sh\"] [Bug] — filed by Team Lead, 2026-09-12, after it cost…"},{"createdAt":"2026-08-23T23:24:47Z","updatedAt":"2026-09-19T18:03:49Z","category":"Ideas","comments":0,"number":2164,"url":null,"tag":"Bug","title":"test_spawn_agent_includes_template_body.sh: executor/impl-coordinator spawn exits 1","summary":"estimated_hours: 3 complexity_points: 3 planned_prs: 1 acceptance_files: [\"tests/test_spawn_agent_includes_template_body.sh\"] Intent Goal: Fix the two independent causes behind the three failing assertions and stop the suite hiding its own diagnostics, so it comes off the denylist. Why now: Denylisted as bug(D#2164) si…"},{"createdAt":"2026-09-10T17:05:36Z","updatedAt":"2026-09-19T18:01:22Z","category":"Ideas","comments":1,"number":2525,"url":null,"tag":"Small","title":"acceptance-tester step 4b lacks the false-failure warning code-reviewer just got, and verify-tree.sh names a suite that is now fixed","summary":"estimated_hours: 3 complexity_points: 2 planned_prs: 1 acceptance_files: [\".claude/agents/acceptance-tester.md\", \"scripts/lib/verify-tree.sh\", \"engine/manifest.json\"] Filing (context — the Spec is below, and is self-contained) Two loose ends left by PR #143, both in the same two files Found by the code-reviewer re-veri…"},{"createdAt":"2026-09-08T06:29:58Z","updatedAt":"2026-09-19T17:49:05Z","category":"Ideas","comments":0,"number":2482,"url":null,"tag":"Bug","title":"The run-analyst's corpus paths resolve to the worktree it runs in, so the feed reads empty (split from D#1932)","summary":"estimated_hours: 3 complexity_points: 3 planned_prs: 1 acceptance_files: [\"backend/run_analyst.py\", \"backend/tests/test_run_analyst.py\"] Filing (context — the Spec is below, and is self-contained) Split out of D#1932 by its PM, who found this while re-measuring that item and deliberately kept it out of that Spec (crite…"},{"createdAt":"2026-09-11T12:51:30Z","updatedAt":"2026-09-19T17:48:04Z","category":"Ideas","comments":0,"number":2547,"url":null,"tag":"Bug","title":"The dry-run captures pr_tree_provision with 2>&1, so the path it exists to verify arrives with a log line glued to the front","summary":"estimated_hours: 3 complexity_points: 2 planned_prs: 1 acceptance_files: [\"scripts/spawn-agent.sh\", \"tests/test_spawn_agent_dry_run_worktree_path.sh\"] ⚠ Three corrections to the reported diagnosis — measure before you read further The symptom is real and was reproduced live. The mechanism, the location, and the plane w…"},{"createdAt":"2026-09-11T09:16:37Z","updatedAt":"2026-09-19T17:46:12Z","category":"Ideas","comments":0,"number":2534,"url":null,"tag":"Bug","title":"27 of 62 shared scripts/lib files are stale or absent on the engine plane, and three agents each rediscovered one undefined function today","summary":"estimated_hours: 5 complexity_points: 3 planned_prs: 1 acceptance_files: [\"scripts/check-shared-lib-staleness.sh\", \"tests/test_shared_lib_staleness.sh\"] Filing (context — the Spec is below, and is self-contained) The immediate symptom scripts/lib/repo-resolve.sh in the engine checkout has no _resolve_code_plane_remote."},{"createdAt":"2026-09-12T23:54:33Z","updatedAt":"2026-09-19T17:24:18Z","category":"General","comments":0,"number":2588,"url":null,"tag":"Small","title":"Nothing on the code plane imports scripts/lib/*.py — the import-smoke glob is backend-only, and ruff parses without importing","summary":"estimated_hours: 2 complexity_points: 2 planned_prs: 1 acceptance_files: [\"scripts/ci/backend-import-smoke.py\", \"tests/test_backend_import_smoke.sh\"] The gap scripts/ci/backend-import-smoke.py is the only thing on the code plane that imports Python to see whether it imports. Its subject set is one glob: BACKEND_DIR = R…"},{"createdAt":"2026-09-17T22:37:13Z","updatedAt":"2026-09-19T16:59:14Z","category":"Ideas","comments":3,"number":2614,"url":null,"tag":"Bug","title":"bootstrap rewrites one repo slug but the corpus carries two, so adopters ship pointing at this private repo","summary":"estimated_hours: 3 complexity_points: 3 planned_prs: 1 acceptance_files: [\"loop-bootstrap/bootstrap.sh\", \"loop-bootstrap/engine-identity-allowlist.txt\", \"tests/test_loop_bootstrap_extended.sh\"] Summary loop-bootstrap/bootstrap.sh rewrites the engine's repo slug in the files it installs, using a single sed search key. T…"},{"createdAt":"2026-09-17T18:52:07Z","updatedAt":"2026-09-17T20:23:50Z","category":"Ideas","comments":3,"number":2608,"url":null,"tag":"Bug","title":"The body sanitizer assembles the control tokens it strips: SPAWN_ REQUEST comes out as SPAWN_REQUEST","summary":"estimated_hours: 2 complexity_points: 2 planned_prs: 1 acceptance_files: [\"scripts/lib/route_discussion_wiring.py\", \"tests/test_route_discussion.py\"] Found while porting this sanitizer to the hosted product (D#2605 task H07). The security reviewer found it in the port; I then reproduced it against the engine's own patt…"},{"createdAt":"2026-09-16T18:07:47Z","updatedAt":"2026-09-16T22:17:58Z","category":"General","comments":1,"number":2601,"url":null,"tag":"Feature","title":"Run the team under Muse Code, starting with start-the-day and AGENTS.md","summary":"planned_prs: 1 [Feature] Run the team under Muse Code, starting with start-the-day and AGENTS.md Boss bought a Muse sub to see if the project can run there, not just under Claude Code. Agreed to try it for real: same loop (executors, reviewers, PRs, merges), same stats and audit trail, against the public repo so adopte…"},{"createdAt":"2026-09-16T05:46:05Z","updatedAt":"2026-09-16T20:02:42Z","category":"General","comments":5,"number":2598,"url":null,"tag":"Bug","title":"Adopters run a 301-line hand-maintained start-the-day: no self-heal, no dashboard, no HEAD restore — and it never had them","summary":"estimated_hours: 18 complexity_points: 8 planned_prs: 1 acceptance_files: [scripts/start-the-day.sh, loop-bootstrap/bootstrap.sh, scripts/ci/commands-twin-divergence-guard.sh, tests/test_commands_twin_divergence.sh, tests/test_loop_bootstrap.sh, .github/workflows/ci.yml, engine/manifest.json, agents/, .claude/agents/,…"},{"createdAt":"2026-09-16T15:57:17Z","updatedAt":"2026-09-16T16:02:54Z","category":"General","comments":1,"number":2600,"url":null,"tag":"Bug","title":"Derive loop-bootstrap/memories/ from scripts/memory-triage/: 9 divergent, 1 adopter-only, 3 never shipped","summary":"Split out of D#2598 (inventory comment, section 2). D#2598's parity guard seeds every divergent memories pair into its allowlist with reason pending reconciliation — D#2598 follow-up; this Discussion is where those entries get removed. What is wrong Adopters receive 20 memory files from loop-bootstrap/memories/, a hand…"},{"createdAt":"2026-09-16T15:57:16Z","updatedAt":"2026-09-16T16:02:53Z","category":"General","comments":1,"number":2599,"url":null,"tag":"Process","title":"Reconcile agents/ vs .claude/agents/: 17 of 26 role definitions diverge, pick the canonical copy","summary":"Split out of D#2598 (inventory comment, section 3). D#2598's parity guard seeds every divergent pair below into its allowlist with reason pending reconciliation — D#2598 follow-up; this Discussion is where those entries get removed. What is wrong The code plane carries two copies of every role definition: agents/ (plug…"},{"createdAt":"2026-07-29T05:18:42Z","updatedAt":"2026-09-13T02:41:47Z","category":"Ideas","comments":19,"number":1791,"url":null,"tag":"Critical","title":"A researcher fabricated an entire evidence envelope — five fake sources, zero tool calls, verdict pass","summary":"estimated_hours: 6 complexity_points: 5 planned_prs: 4 acceptance_files: [\"scripts/lib/subagent_payload.py\", \"scripts/subagent-stop-hook.sh\", \"scripts/post-agent-hook.sh\", \"backend/agent_run_tracker.py\", \"tests/test_subagent_tool_use_count.sh\", \"backend/envelope_check.py\", \"scripts/hooks/post-agent.d/envelope-check.sh\"…"},{"createdAt":"2026-09-12T12:44:37Z","updatedAt":"2026-09-13T02:26:56Z","category":"General","comments":10,"number":2560,"url":null,"tag":"Critical","title":"The Two-Gate Protocol requires running a PR head's pytest, which imports that head's conftest.py as the operator","summary":"estimated_hours: 8 complexity_points: 5 planned_prs: 0 acceptance_files: [\"scripts/gate1-invoke.sh\", \"scripts/gate1-verify-containment.sh\", \"scripts/run-pr-tests.sh\", \"tests/test_gate1_invoke.sh\", \"scripts/loop-phased-step5.sh\", \".claude/agents/code-reviewer.md\", \"backend/spawn_templates/code-reviewer.tmpl\", \"wiki/Gate…"},{"createdAt":"2026-09-12T23:24:52Z","updatedAt":"2026-09-13T01:53:05Z","category":"General","comments":10,"number":2584,"url":null,"tag":"Bug","title":"the containment verifier reads a broken probe as DENIED — a curl blip would turn a true UNCONTAINED into CONTAINED once the uid gesture lands","summary":"estimated_hours: 2 complexity_points: 2 planned_prs: 2 acceptance_files: [\"scripts/gate1-verify-containment.sh\", \"tests/test_gate1_verify_containment.sh\"] The finding scripts/gate1-verify-containment.sh's _probe distinguishes \"never ran\" from \"ran\", but never distinguishes \"ran and was denied\" from \"ran and broke\". Eve…"},{"createdAt":"2026-09-13T00:16:04Z","updatedAt":"2026-09-13T01:24:22Z","category":"General","comments":3,"number":2592,"url":null,"tag":"Bug","title":"the Gate-1 receipt channel is an uncreated mktemp -u path, and its contents reach a reviewer's spawn prompt — live now that a second uid exists","summary":"estimated_hours: 3 complexity_points: 2 planned_prs: 1 acceptance_files: [\"scripts/loop-phased-step5.sh\", \"scripts/gate1-invoke.sh\", \"tests/test_gate1_receipt_channel.sh\", \"engine/manifest.json\"] Intent Goal: Make the Gate-1 receipt channel unreachable by a second local uid, so that nothing another uid can write ends u…"},{"createdAt":"2026-09-12T16:21:04Z","updatedAt":"2026-09-13T00:50:30Z","category":"General","comments":15,"number":2566,"url":null,"tag":"Critical","title":"Gate 1 is a string in the PR body, not a test run — nothing binds the marker to an execution","summary":"estimated_hours: 10 complexity_points: 5 planned_prs: 2 acceptance_files: [\"scripts/lib/gate1-receipt.sh\", \"scripts/lib/gate1-receipt-check.sh\", \"scripts/gate1-invoke.sh\", \"scripts/run-pr-tests.sh\", \"scripts/lib/two-gate-check.sh\", \"scripts/merge-and-hook.sh\", \"scripts/loop-phased-step5.sh\", \"scripts/ci/gate1-routing-l…"},{"createdAt":"2026-08-18T19:34:50Z","updatedAt":"2026-09-13T00:30:20Z","category":"General","comments":9,"number":1915,"url":null,"tag":"Critical","title":"archive/orphan-diffs/ has 388 committed patch files and 7 match live credential shapes — the reaper archives full uncommitted diffs into the tracked tree","summary":"estimated_hours: 4 complexity_points: 3 planned_prs: 1 acceptance_files: [\"scripts/lib/orphan-triage.sh\", \"scripts/lib/worktree-registry.sh\", \"scripts/reap-worktrees.sh\", \"scripts/triage-orphan-diffs.sh\", \".gitignore\", \"tests/test_triage_orphan_diffs.sh\", \"tests/test_reaper_git_tracked_removal.sh\"] PM note, 2026-09-12."},{"createdAt":"2026-09-12T23:37:08Z","updatedAt":"2026-09-12T23:56:43Z","category":"General","comments":5,"number":2585,"url":null,"tag":"Small","title":"README tells adopters to start the team with /loop — it's /start-the-day to start, /loop to keep it running","summary":"estimated_hours: 1 complexity_points: 1 planned_prs: 2 acceptance_files: [\"README.md\"] Reported by the operator. What's wrong README.md:73 tells a new adopter that starting the team means running /loop, and demotes the actual starting command to optional background reading: Once a project is provisioned, \"starting the…"},{"createdAt":"2026-09-10T13:16:41Z","updatedAt":"2026-09-12T23:55:00Z","category":"Ideas","comments":6,"number":2515,"url":null,"tag":"Critical","title":"Nothing verifies the code plane's Python — no pytest at any gate, composed with a suite that cannot collect there","summary":"SUPERSEDED BY D#1900 — closed 2026-09-12 by the project manager The consensus panel (technical-architect, security-expert, cost-analyst) completed 3/3 and the decision is recorded in discussioncomment-18417083: this filing's stated deliverable — \"a decision recorded against D#1900, not a second gate\" — is discharged by…"},{"createdAt":"2026-09-06T11:13:45Z","updatedAt":"2026-09-12T23:50:27Z","category":"Ideas","comments":12,"number":2443,"url":null,"tag":"Critical","title":"The Python suite has zero runnable tests on the code plane — four modules abort collection, so a pytest gate would guard nothing","summary":"This Discussion was materially misfiled, and the Spec below fixes a different bug than the title and original body describe. The stated cause — that .autonomous-team/project.json is absent from the public export — is not operative: _load_repo has had a git-origin fallback since D#2340, and with a real .git present coll…"},{"createdAt":"2026-09-12T17:49:56Z","updatedAt":"2026-09-12T23:09:57Z","category":"General","comments":15,"number":2571,"url":null,"tag":"Critical","title":"a quarantined sync wrote a fix's tests without the fix — 12 tests red on main, and the documented operator remedy converts fail-closed to fail-open","summary":"estimated_hours: 6 complexity_points: 5 planned_prs: 2 acceptance_files: [\"scripts/lib/pr_head_baseline.py\", \"scripts/lib/external_intake_gate.py\", \"scripts/lib/trust_id_resolver.py\"] Reader's note (PM, 2026-09-12). The filing below is retained verbatim as the historical record. Two of its central claims were refuted b…"},{"createdAt":"2026-09-05T11:01:04Z","updatedAt":"2026-09-12T22:20:31Z","category":"Ideas","comments":15,"number":2415,"url":null,"tag":"Critical","title":"PR-comment trust asks the code plane ACL while its sibling asks the Discussion plane, and caches a silently-degraded answer for an hour","summary":"estimated_hours: 7 complexity_points: 5 planned_prs: 2 acceptance_files: [\"scripts/lib/external_intake_gate.py\", \"scripts/lib/pr_comment_trust.py\", \"scripts/lib/pr_intake_gate.py\", \"backend/tests/test_external_intake_gate.py\", \"backend/tests/test_pr_comment_trust.py\", \"backend/tests/test_pr_intake_gate.py\", \"scripts/li…"},{"createdAt":"2026-09-12T21:50:04Z","updatedAt":"2026-09-12T21:51:59Z","category":"General","comments":1,"number":2581,"url":null,"tag":"Bug","title":"Every executor is told to build code-plane commits with code-plane-pr.sh, which is quarantined off the plane their worktrees are cut from","summary":"planned_prs: 1 The finding backend/spawn_templates/executor.tmpl instructs every executor to build code-plane commits with scripts/lib/code-plane-pr.sh. That file is on the code plane and not on the engine plane — so it is absent from exactly the trees executors are cut from, and present only where they are not working…"},{"createdAt":"2026-09-08T09:40:02Z","updatedAt":"2026-09-12T21:38:30Z","category":"Ideas","comments":3,"number":2502,"url":null,"tag":"Critical","title":"The merge script the Team Lead runs is 250 lines behind the one PRs fix — today's stale-label gate is already inert","summary":"The finding The scripts/merge-and-hook.sh the Team Lead actually invokes is 250 lines behind the copy that receives fixes. The gap is not refactoring: it is four merge gates that exist only on the code plane, plus a library file that does not exist on the engine plane at all. Every manual merge on this project runs the…"}],"counts":{"open":117,"closed":1128},"age":{"n":92,"oldestDays":39.2,"medianDays":17.6,"buckets":[{"label":"under a day","count":0},{"label":"1 to 7 days","count":5},{"label":"1 to 4 weeks","count":78},{"label":"over a month","count":9}]},"fetchedAt":"2026-09-26T04:57:17.602Z"}