Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions .codearbiter/open-tasks.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ per task. Schema and the count rule: see `plugins/ca/hooks/init-codearbiter.py`
- [ ] v2.release.0001 - Phase 7 tone pass + marketplace publication
- Desc: tone pass not evidenced as a distinct pass; marketplace.json present but publication not confirmed.
- Done when: a tone-pass record exists and the marketplace listing is confirmed live.
- [ ] v2.release.0002 - Always rebuild-and-assert tools artifact freshness in the release skill (MEDIUM 8). The farm.js check is conditional on farm.ts changing in-window; it misses a pre-window-stale farm.js and the ca-sandbox sandbox.js. Rebuild + `git diff --quiet` unconditionally. (from release-skill red-team 2026-06-23)
- [ ] v2.release.0003 - Half-finished-publish recovery in the release skill (MEDIUM 9). Phase-2 "tag exists -> STOP" dead-ends a pushed-but-unpublished tag; branch on version/SHA match to resume Phase 3 instead of aborting. (from release-skill red-team 2026-06-23)
- [ ] v2.release.0004 - Deterministic release date stamping (MEDIUM 10). The YYYY-MM-DD in the changelog header / Released-at footer / Release is model-filled; derive it once (date +%F or the commit date) and reuse. (from release-skill red-team 2026-06-23)
- [ ] v2.release.0005 - Assert the notes-file `## vX.Y.Z` heading matches the tag before `gh release create` (LOW 11), so a stale notes-file can't publish the wrong section under the right tag. (from release-skill red-team 2026-06-23)
- [ ] v2.release.0006 - Confirm pre-release/beta tag exclusion in baseline resolution (LOW 12) is fully covered by the new `grep -Ev '-(beta|rc|alpha)'` filter; close if so, else tighten. (from release-skill red-team 2026-06-23)
- [x] v2.release.0002 - Always rebuild-and-assert tools artifact freshness in the release skill (MEDIUM 8). The farm.js check is conditional on farm.ts changing in-window; it misses a pre-window-stale farm.js and the ca-sandbox sandbox.js. Rebuild + `git diff --quiet` unconditionally. (from release-skill red-team 2026-06-23) (done 2026-06-26)
- [x] v2.release.0003 - Half-finished-publish recovery in the release skill (MEDIUM 9). Phase-2 "tag exists -> STOP" dead-ends a pushed-but-unpublished tag; branch on version/SHA match to resume Phase 3 instead of aborting. (from release-skill red-team 2026-06-23) (done 2026-06-26)
- [x] v2.release.0004 - Deterministic release date stamping (MEDIUM 10). The YYYY-MM-DD in the changelog header / Released-at footer / Release is model-filled; derive it once (date +%F or the commit date) and reuse. (from release-skill red-team 2026-06-23) (done 2026-06-26)
- [x] v2.release.0005 - Assert the notes-file `## vX.Y.Z` heading matches the tag before `gh release create` (LOW 11), so a stale notes-file can't publish the wrong section under the right tag. (from release-skill red-team 2026-06-23) (done 2026-06-26)
- [x] v2.release.0006 - Confirm pre-release/beta tag exclusion in baseline resolution (LOW 12) is fully covered by the new `grep -Ev '-(beta|rc|alpha)'` filter; close if so, else tighten. (from release-skill red-team 2026-06-23) (done 2026-06-26)
- [ ] v2.docs.0003 - Decision-log reconciliation form of the forge-allowlist drift check (CONFIRM-05-dependent). The shipped site check is self-consistency only (slug maps to a real command file); the stronger form reconciles PREVIEW_COMMANDS against a recorded promotion in the decision log and belongs in /ca:doctor (reaches outside site/). Blocked on CONFIRM-05 (the --farm promotion bar). (from sprint release-hardening-debt-paydown)
- [ ] v2.prune.0001 - [MED] The prune metric conflates file-bytes-freed with context-tokens-freed, overstating the model-context benefit that feeds the dry->on go/no-go.
- Desc: hook_run / append_dry_metrics / append_audit_log report bytes_before/after, freed_bytes, est_tokens (= bytes//4 over the WHOLE file) and per-strategy byte deltas. But sidecar-collapse (the single biggest contributor — 522KB of 890KB in session ff1c472d's PreCompact run) trims the top-level `toolUseResult` sidecar, which is Claude Code bookkeeping NOT sent to the model. Verified against the pre-prune backup: for large Reads the sidecar duplicates the model-visible message.content tool_result (line 214: sidecar 59.8KB ~= message 67KB); for others it holds bulk the model never received (line 475: sidecar 13.8KB vs message 0.26KB). So est_tokens overstates the compaction-relevant / cold-re-cache-cost benefit. That run's headline was -223k est-tokens (40.3%) but the actual model-context slice was ~87k (aged-result-condense only); the ~131k sidecar slice is disk/IO/resume-parse hygiene, not context. prune-dry.jsonl — the evidence base for flipping prune to `on` — accrues this conflated number.
Expand Down Expand Up @@ -74,7 +74,7 @@ approval or `/ca:dev` · `[DECISION]` ADR-grade, needs the operator. Ordered: qu
- [x] v2.rev.0017 - [HARD-GATE][MED] DEV:exit audit completeness — when SessionStart clears a live dev-active marker, append `DEV:exit BY: session-cleanup` to overrides.log before removing it (replaces prose-only "repair at next opportunity"). (observability-001:417-422) Done when: a session-boundary dev exit leaves a matched DEV:enter/DEV:exit pair; no append when no marker. WHY HARD-GATE: writes the append-only audit trail (level-1 conflict-hierarchy). (done 2026-06-25)
- [x] v2.rev.0018 - [HARD-GATE][MED] Extract one shared container `hardeningFlags()` consumed by buildRunArgs + buildClaudeRunArgs; share SANDBOX_LABEL; add a test asserting the --with-claude argv carries every hardening flag the ordinary sandbox does. (architecture-002:run.ts 127-159 / claude-inside.ts 262-303) Done when: the isolation flag block exists once; parity test green; sandbox.js rebuilt. WHY HARD-GATE: refactors the load-bearing container-isolation argv. (done 2026-06-25)
- [x] v2.rev.0019 - [HARD-GATE][MED] Centralize the append-only-log + ADR-decisions path sets in _hooklib (AUDIT_LOG_RE/is_audit_log, DECISIONS_PATH_RE) and import in pre-write/pre-edit/pre-bash (today triplicated inline). (architecture-004) Done when: each set defined once; adding an artifact touches one file; all three hooks' guard tests green. WHY HARD-GATE: moves the constants that drive the H-05/H-11 audit guards. (done 2026-06-25)
- [ ] v2.rev.0020 - [HARD-GATE][MED] farm.ts god-module split (/ca:refactor, L) — extract the secret redactor (213-413) and mutation engine (767-948) into focused modules, each tested; vitest = parity proof. (architecture-003) Done when: redactor + mutation engine each in their own tested module; farm.ts imports them; suite passes unchanged. WHY HARD-GATE: moves the security redactor; behavior-preserving but security-sensitive. Depends-on: v2.rev.0016 (shared secret fixture lands in the redactor).
- [x] v2.rev.0020 - [HARD-GATE][MED] farm.ts god-module split (/ca:refactor, L) — extract the secret redactor (213-413) and mutation engine (767-948) into focused modules, each tested; vitest = parity proof. (architecture-003) Done when: redactor + mutation engine each in their own tested module; farm.ts imports them; suite passes unchanged. WHY HARD-GATE: moves the security redactor; behavior-preserving but security-sensitive. Depends-on: v2.rev.0016 (shared secret fixture lands in the redactor). (done 2026-06-26)
- [x] v2.rev.0021 - [HARD-GATE][LOW] Harden the H-05 audit-log guard + align the policy doc. Block an Edit with empty old_string on an audit log (migration-003:pre-edit.py 43-45); add a path-aware backstop or at least enumerate variable-indirection in the residual-risk note (appsec-003:pre-bash.py 72-90,289-293); mirror the documented H-05 regex gaps (exec N>, >>>, proc-sub) into security-controls.md §Audit trail (observability-005). (g5) Done when: empty-old_string Edit on an audit log blocks; the policy doc matches the code's real scope; guard tests green. WHY HARD-GATE: audit-trail integrity control + edits security-controls.md. (done 2026-06-25)
- [x] v2.rev.0022 - [HARD-GATE][LOW] Atomic marker writes (.tmp + os.replace) in migration-pass.py:91-92 and security-pass.py:84-85 (eliminates the spurious-block-on-crash; fail-closed preserved). (migration-002, g9) Done when: a simulated crash leaves no partial marker; backstop behavior unchanged. WHY HARD-GATE: edits the security/migration gate marker writers. (done 2026-06-25)
- [x] v2.rev.0023 - [HARD-GATE][LOW] Collapse head_on_protected_tip's 3 sequential `git rev-parse` into one `git rev-parse HEAD main master` (detached-HEAD commit path). (performance-006:pre-bash.py 131-138) Done when: same block/allow decisions, 1 spawn not 3; guard matrix green. WHY HARD-GATE: edits a pre-bash commit guard. (done 2026-06-25)
Expand Down