1372 Commits

Author SHA1 Message Date
boshu c37ea4d869 Merge remote-tracking branch 'origin/main' into crank/age-nw28h.7.8-stack-v3
# Conflicts:
#	scripts/validate-codex-rpi-contract.sh
#	skills-codex/learn/SKILL.md
#	skills-codex/rpi/SKILL.md
#	skills/catalog.json
#	skills/learn/SKILL.md
2026-07-13 10:19:54 -04:00
boshu d38b1b4e6b feat: shadow mechanical findings before blocking 2026-07-13 10:19:00 -04:00
boshu 592e7bce16 fix(loop): finish validation-learning split (age-tpeel) 2026-07-13 09:49:54 -04:00
boshu 2de9e23373 feat(learn): reduce recurrence by objective 2026-07-13 09:47:13 -04:00
boshu b7b0f7ea27 merge(go-cli): integrate sealed families on current main (age-nw28h.7.8) 2026-07-13 08:51:37 -04:00
boshu 9c6a662203 feat(loop): refactor the four-umbrella operating loop
Bead: age-four-umbrella-loop-refactor-xz4ps.1
2026-07-13 06:48:50 -04:00
boshu cf0f93388b fix(provenance): relativize evidence paths (age-a-plus-report-card-ieyp2.4)
Keep new pawl verdict evidence paths portable while retaining external evidence references.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-12 17:46:30 -04:00
boshu 4f48f41828 fix(age-ghk3i): resolve GPT-5 codebase audit findings 2026-07-12 07:32:19 -04:00
boshu bb6f4b58cf refactor(gate): cut over to internal command module 2026-07-12 01:29:48 -04:00
boshu 8f779fea9e test(eval): cover migrated command surface 2026-07-12 00:33:01 -04:00
boshu 81cebb0427 test(eval): remove legacy reset compatibility cell 2026-07-12 00:27:14 -04:00
boshu 39e7a6885a refactor(eval): cut over to internal command module 2026-07-12 00:26:33 -04:00
boshu f9e066a362 refactor(eval): extract retrieval bench command adapter 2026-07-12 00:00:41 -04:00
boshu a1dff4ae1e refactor(eval): extract session and chaos alias ports 2026-07-11 23:56:38 -04:00
boshu e3e75d0b95 refactor(done): atomically cut over Cobra ownership (age-nw28h.2.8.2) 2026-07-11 21:14:31 -04:00
boshu 9bb02d59bf refactor(done): extract verdict-close service and adapters (age-nw28h.2.8.1) 2026-07-11 21:10:33 -04:00
boshu 64e192453f test(doctor): restore owner-side coverage (age-nw28h.2.7.4) 2026-07-11 20:52:20 -04:00
boshu 856accd106 fix(doctor): declare command contract and scoped test owner (age-nw28h.2.7.4) 2026-07-11 20:19:31 -04:00
boshu 191bbf548d refactor(doctor): atomically cut over Cobra ownership (age-nw28h.2.7.4) 2026-07-11 20:18:37 -04:00
boshu 6a5ae2694d fix(doctor): make GC dry-run non-destructive (age-nw28h.2.7.4) 2026-07-11 19:52:57 -04:00
boshu 287c2797eb feat(pawl): surface the embedded bundle stamp in ao pawl doctor — trust-honest (age-pawl-intent-zhndq.19)
F4 stamped the embedded pawl bundle with a deterministic content hash; this surfaces it in
`ao pawl doctor` so the landed!=installed class (an installed ao silently running OLD pawl scripts —
it bit this very session) is diagnosable.

THE DESIGN IS THE LESSON. Two cross-family codex refutes killed the obvious implementation:
  round 1 — I hashed any repo containing scripts/pawl-*.sh and reported STALE. A stranger repo with
            same-named files would be falsely failed.
  round 2 — I gated that on "identity markers" (the verdict schema + pawls contract). Codex refuted
            again, correctly: FILE PRESENCE IS NOT IDENTITY. Every marker is attacker-controlled and
            spoofable, so no marker list can ever make it safe.
The real fix is not a better marker list — it is a TRUST BOUNDARY. A staleness FAILURE must never be
asserted against a repo the binary does not trust. So:
  - trusted dogfood path (untrustedRoot == "", i.e. the ao binary lives inside the checkout — the ONE
    trust decision the whole pawl surface is built on): the LIVE scripts run in place, so there is
    nothing to compare and nothing to warn about;
  - untrusted/installed path: surface the stamp INFORMATIONALLY (so the operator can diagnose
    landed!=installed themselves and rebuild), and assert NO verdict about a repo we cannot trust.
This is the honest feature, not a weaker one: the diagnostic signal is preserved while doctor cannot
be weaponized into failing on an untrusted tree.

Tests: TestPawlBundleStaleness — dogfood surfaces the stamp and never says STALE; an untrusted repo
is never reported STALE *whatever it contains*, including a repo that SPOOFS every identity marker a
naive check might have used.

Claude-Session: https://claude.ai/code/session_01RDWPYn4ZS2SyBkcBvAM18u
2026-07-11 19:49:05 -04:00
boshu 8a9c3293a8 test(doctor): cover mutation command wiring (age-nw28h.2.7.3) 2026-07-11 19:42:37 -04:00
boshu 8cf46a670c refactor(doctor): extract mutation application ports (age-nw28h.2.7.3) 2026-07-11 19:39:55 -04:00
boshu 7e4a141278 refactor(doctor): extract read service and make diff read-only (age-nw28h.2.7.2) 2026-07-11 19:24:59 -04:00
boshu fc3b298598 refactor(doctor): extract legacy and reviewer health services (age-nw28h.2.7.1) 2026-07-11 19:06:28 -04:00
boshu e38c499458 refactor(council-gate): extract explicit command module 2026-07-11 18:44:38 -04:00
boshu c55ebbacb9 refactor(config): extract explicit command module (age-nw28h.2.5) 2026-07-11 18:16:52 -04:00
boshu c3981930e9 fix(pawl): seam-derive the dry-run spawn string (drop hardcoded "atm spawn") (age-pawl-intent-zhndq.16)
`ao pawl up --dry-run` planned-step hardcoded "atm spawn ...", contradicting the actual seam and
`ao pawl doctor`'s own output: the swarm binary resolves ntm-first (PAWL_SWARM_BIN -> ntm -> atm),
and doctor reports "ntm -> ...". The planned step now says "swarm spawn session <s> ... (ntm-first
seam; see `ao pawl doctor` swarm-bin)" — neutral and truthful regardless of which binary wins.

Split from F10 (age-pawl-intent-zhndq.11) to keep that a fast shell land; this is the Go half.

Claude-Session: https://claude.ai/code/session_01RDWPYn4ZS2SyBkcBvAM18u
2026-07-11 18:06:56 -04:00
boshu bd3f65176e fix(config): reject junk args and sort model overrides (age-nw28h.2.5) 2026-07-11 18:06:41 -04:00
boshu cecaf479ca feat(pawl): embedded-bundle provenance stamp + doctor stamp row (age-pawl-intent-zhndq.4)
landed!=installed is a recurring class (an installed ao carries whatever pawl scripts were
embedded at build time, silently running old logic — it bit this very session). F4 adds the
MECHANISM: `make sync-hooks` writes a DETERMINISTIC content-hash stamp (sha256 of the three
embedded review scripts) to cli/embedded/pawl/BUNDLE_STAMP — it changes ONLY when they change, in
the SAME sync-hooks run (no always-dirty). `ao pawl doctor` gains a bundle row: the installed-binary
path shows the embedded stamp, the in-checkout dogfood path says live scripts run in place. The row
deliberately does NOT read $ROOT/scripts (on the embedded/stranger path $ROOT is the UNTRUSTED
caller repo; the full race suite's security guard TestEmbeddedPawlBundleCarriesVerdictWriterSibling
correctly caught a first attempt that did). A go:embed drift test (TestEmbeddedBundleStampMatchesScripts)
catches an embedded-script edit that forgot to regenerate the stamp.

Scoped: the trust-aware live-vs-installed STALE comparison (Go doctor layer) + the review-time
staleness warning split to .19 — they need the Go trust split to safely read a checkout.

Claude-Session: https://claude.ai/code/session_01RDWPYn4ZS2SyBkcBvAM18u
2026-07-11 17:57:35 -04:00
boshu 0782b566af fix(close): resume BR persistence from tracker state (age-nw28h.2.4) 2026-07-11 17:57:29 -04:00
boshu be19dc5be4 refactor(close): extract explicit command module (age-nw28h.2.4) 2026-07-11 17:45:08 -04:00
boshu 85adb9922a fix(close): make persistence retries monotonic (age-nw28h.2.4) 2026-07-11 17:22:15 -04:00
boshu 2172c77f05 fix(claim): preserve tracker runtime compatibility (age-nw28h.2.3) 2026-07-11 16:24:19 -04:00
boshu 9b1206a1e3 test(claim): preserve bind command surface coverage (age-nw28h.2.3) 2026-07-11 16:15:54 -04:00
boshu 66abdd2e12 refactor(cli): migrate claim command module (age-nw28h.2.3) 2026-07-11 16:14:32 -04:00
boshu d63c679bd5 fix(claim): normalize check args and ledger root (age-nw28h.2.3) 2026-07-11 16:04:31 -04:00
boshu bd171a4776 refactor(cli): migrate capabilities command module (age-nw28h.2.2) 2026-07-11 15:43:41 -04:00
boshu 663f5c1756 feat(provenance): ao provenance reconcile — detect/repair verdict-file↔ledger-edge desyncs (age-pawl-intent-zhndq.3)
F2 makes the verdict->edge emit fail-closed at WRITE time, but history + crash windows can
still leave a verdict FILE with no bound EDGE — a silent desync where 'ao done' (which reads
the LEDGER, not the file) refuses the close, discovered one-refused-close at a time. This
command scans .agents/pawl-verdicts/*.json and, for every CONFIRMED/REBOUND verdict, reports
whether a matching verdict->commit edge is bound, reusing the EXACT recognizer the push gate
and ao done use (hasConfirmedVerdictEdge — exact-token disposition, sha-bound, never substring).

--emit re-emits missing edges (idempotent — only the UNBOUND ones detected this pass, so a
second run is a no-op); --force allows a dirty ledger (default: refuse, age-7krl — never sweep
another lane's rows); --json for machine output. Exit 0 clean / 1 unbound-or-emit-failed / 2
usage. Report-only default is safe (no mutation).

Operational data (this repo, per the bead): 251 verdicts scanned, 1 unbound — and it is a
harmless orphan from this session's own messy F1 land (a dead sha 6cbcc0f5 reset away during
the concurrent-session recovery), NOT a systemic desync. Validates F2 (prevents new) + F3 (finds
existing). Tests: TestScanReconcileVerdicts (bound/unbound/REFUTED-skipped/malformed) + empty-dir.

Regenerated CLI surface (COMMANDS.md, cli-surface.{json,md}, eval matrix + smoke) for the new command.

Claude-Session: https://claude.ai/code/session_01RDWPYn4ZS2SyBkcBvAM18u
2026-07-11 15:28:12 -04:00
boshu 9f275dc8ea test(beads): bind high-risk behavior to new owners (age-nw28h.2.1) 2026-07-11 15:03:43 -04:00
boshu 6e039f21ee refactor(beads): move recovery orchestration behind use cases (age-nw28h.2.1) 2026-07-11 14:58:19 -04:00
boshu 7d1a204709 refactor(beads): internalize acceptance command handlers (age-nw28h.2.1) 2026-07-11 14:51:51 -04:00
boshu 44d5e2747b refactor(beads): internalize hygiene command handlers (age-nw28h.2.1) 2026-07-11 14:44:56 -04:00
boshu 88790b93d8 refactor(beads): internalize knowledge command handlers (age-nw28h.2.1) 2026-07-11 14:39:43 -04:00
boshu 80a29757aa refactor(beads): internalize recovery command handlers (age-nw28h.2.1) 2026-07-11 14:32:09 -04:00
boshu 66f91c9058 refactor(beads): internalize tracker command handlers (age-nw28h.2.1) 2026-07-11 14:28:23 -04:00
boshu f1bcca226e refactor(beads): cut over to explicit command owner (age-nw28h.2.1) 2026-07-11 14:23:30 -04:00
boshu 64a7ab99fa refactor(beads): extract knowledge policy (age-nw28h.2.1) 2026-07-11 14:11:14 -04:00
boshu 4f52df71f5 refactor(beads): isolate epic ledger read (age-nw28h.2.1) 2026-07-11 14:06:27 -04:00
boshu d701f004a4 refactor(beads): isolate claim-transfer effects (age-nw28h.2.1) 2026-07-11 14:05:46 -04:00