type: meta

topic: P1 of autonomy epic — config layering X10, taxonomy rev (9 classes), wrapper contract rev, preflight gate A3, review.passed/task.usage journaling, X9 trailers, I9/I10

exec_mode: ship

scheduler: sequential

land_mode: merge-to-main

base_branch: main

gate0_mode: strict

status_enum: BLOCKED PENDING WORKING WRITTEN REVIEWED COMMITTED

truth_rule: this file is ground truth for INTENT (goals/task list); git is ground truth for DONE-NESS — reconcile statuses against git, never trust a COMMITTED line with no commit

report_rule: at session end emit brief: done / blocked / deferred / canceled


type: goal

text: foundational layer for autonomy: one config chain, complete fail-class set, one wrapper-contract rev, engine-native preflight, per-attempt usage + review-proof journaling, commit provenance, version-skew refusal + secret redaction


type: anchor

what: canonical for Task 3 — one atomic contract rev


what: rationale — PART II A3, PART V I9/I10, PART VI V1/V2, PART VIII X9/X10


what: plan — pinned per-task contracts (### Task N)


type: task

seat: coder

tier: high

desc: X10 config layering src/config.js: resolveConfig(cli, planMeta, repoRoot), merge chain later-wins, unknown key fail-closed naming layer, per-key provenance (plan Task 1)

status: PENDING


desc: taxonomy rev src/fail-taxonomy.js: add task-stalled, agent-idle, land-failed, land-blocked-unreviewed, protected-path-touched, provider-quota, budget-exceeded, artifacts-missing, adapter-contract-violation — bands/scopes per specs, names verbatim vs spec/RESOLVER.md table (plan Task 2)


desc: wrapper contract rev per spec/WRAPPER-CONTRACT-AMENDMENTS.md sections A-D as ONE rev: usage event + metered flag, errorKind quota channel, transcript tee, north dialect + _validate cross-check (plan Task 3)


desc: preflight gate A3: runplan preflight <slug> + config --show verbs, --unattended refuses dirty preflight, machine-readable findings, read-only, config via resolveConfig (plan Task 4)

blocker: waiting on wave 1


tier: medium

desc: root-cause refactor: introduce shared task_state_seq(journal,task) helper in test/runner-integration.sh (always excludes kind-tagged additive records via (.kind|not)) and replace every duplicated inline jq '.state'-sequence filter repo-wide (test/runner-integration.sh + test/self-healing-integration.sh) with a call to it; zero raw un-helpered occurrences remain; full suite green (plan Task 5 prerequisite, authorized by user to prevent recurring fixer-scope-blocked quarantine on additive-journal-record tasks)

blocker: waiting on w2.t1


desc: journal review.passed {task,stage} on review path + task.usage {attemptKind,adapter,...} per attempt from wrapper usage event; additive-only journal API (plan Task 5)

blocker: waiting on w3.t0


desc: X9 commit trailers Plan:/Task:/Run: at engine commit sites + post-implement gate check (fixable class); merge commits get Plan:/Run:; new commit-trailers-missing fail class needs its self-healing-integration.sh coverage scenario committed in the SAME task (do not split); replace the rg-based routing self-check in runner-integration.sh with grep -E, do NOT add any runtime rg shim/fallback to src/runner.js (plan Task 6)

blocker: waiting on w3.t1


desc: I9 formatVersion skew refusal (newer journal → fail-closed) + I10 secret redaction at append boundary in BOTH writers (src/runner.js, lib/journal.sh) (plan Task 7)

blocker: waiting on w4.t1


tier: low

desc: ungate P1 chaos assertions per spec/CHAOS-SUITE.md phase gate map; full suite green (plan Task 8)

blocker: waiting on w5.t1


desc: pi engine wrapper wrappers/pi.sh per REVISED WRAPPER-CONTRACT (headless Pi, openai-codex subscription provider, auth precondition exit 3, quota→75 with resume_at, model+effort pinned) + adapters.json entry id=pi; contract probe green (plan Task 9)

blocker: waiting on w1.t3