Skip to content

release: pm 0.53.0 — know where the tokens went, and keep the record honest - #257

Merged
cfdude merged 100 commits into
mainfrom
dev
Oct 21, 2026
Merged

cfdude merged 100 commits into
mainfrom
dev

Conversation

@cfdude

@cfdude cfdude commented Oct 21, 2026 •

Copy link
Copy Markdown
Owner

Cuts pm 0.53.0 from dev: 20 built epics plus the release cut. See the ## [0.53.0] entry in CHANGELOG.md.

  • Spend: --token-basis total|work, named invalid spend markers, spend-analysis, overhead, record-decision/decisions, spend-guard rules section that follows live limits.
  • Records: list, log-detour --sha, retract-detour, epic session trail, integrity attributed-commits-hold-duplicates, retired single-file certification record.
  • Test infrastructure: four flake and vacuity fixes, known-flakes.json now empty.
  • Developer-only session log (set-dev-log/dev-log), off by default.

Gate 2 recorded for all ten OpenSpec epics (one converged review, 0 Critical); release cross-spec review pass (11 specs). Assertion half 2427/2427, functional 1359/1359, sweeps 25/25; full run 3811 tests, 0 failing. Mintlify site updated in a separate PR on the docs repo.

https://claude.ai/code/session_01BoqzgrFwRC6QTUKuBkw8kM

Summary by CodeRabbit

  • New Features

    • Added read-only commands for epic listing, spend analysis, overhead reporting, developer-session logs, and decision records.
    • Added epic session attribution and minimal detour logging/retraction controls.
    • Added configurable spend-guard token bases and richer invalid-marker reporting.
    • Added integrity reporting for duplicate commit attributions.
  • Bug Fixes

    • Spend-guard rules now stay synchronized after limit changes.
    • Improved diagnostics for quoted flag-like values and rejected lesson matchers.
  • Documentation

    • Updated command guidance, OpenSpec path handling, release documentation, and feature-cost references.
  • Release

    • Updated the plugin to version 0.53.0.

cfdude added 30 commits October 14, 2026 09:49
…ase-intents, keep store-owns-claude-md-managed-block behind a re-baseline story

Claude-Session: https://claude.ai/code/session_01BoqzgrFwRC6QTUKuBkw8kM
Nothing has read or written pm-suite-certification.json since 0.51.0 moved the
record to pm-suite-certification.d/, and no pre-0.51.0 branch is live (branches:
dev, main, rc/0.52.0). The pre-commit hook now removes a leftover copy with an
idempotent rm -f beside the pm-isolation-flag cleanup; the directory is untouched.

Claude-Session: https://claude.ai/code/session_01BoqzgrFwRC6QTUKuBkw8kM
… file as pid 0

The stub wrote its ready file with writeFileSync (create, then fill), so under load the
guard saw the file created but empty, took Number("") = 0, and process.kill(0, 0) reported
its own process group alive for ever. The stub now renames the file into place and the
guard refuses a non-pid. Reproduced 1 in 40 concurrent runs under 24 CPU burners before,
0 in 60 after. Drops the entry from known-flakes.json.

Claude-Session: https://claude.ai/code/session_01BoqzgrFwRC6QTUKuBkw8kM
Twin-Unchanged: certify-index — test-side race fix only; the certify behaviour the twin covers is untouched
…opwatch

The guard timed a spawned engine against the 2000 ms lock wait, so node's own start-up on a
loaded machine counted as "waited out the lock". The engine returns the blocked refusal before
its wait loop sleeps, and the wait-it-out refusal reads "was not released within"; asserting
the message asserts the branch. 40 concurrent runs under 24 CPU burners: 0 failures. Empties
known-flakes.json.

Claude-Session: https://claude.ai/code/session_01BoqzgrFwRC6QTUKuBkw8kM
Twin-Unchanged: state-file-refuses-to-guess — test-side timing assertion replaced by a branch assertion; the engine behaviour the twin covers is untouched
… reading state.json (#204)

Three emitted procedures need the set of existing epics (tracker-sync dedup, intake, a disposition's
--deferral). The engine had no verb for it, so agents read .conductor/state.json and guessed its shape.
`list [--status] [--lane] [--linked-to <id>] [--json]` filters the record; --linked-to is incoming.
Read-only (verb-effects), command doc, parity-ledger entry, flag rows, and the sweep/recipe/baseline
entries the registries demand.

Claude-Session: https://claude.ai/code/session_01BoqzgrFwRC6QTUKuBkw8kM
Twin-Unchanged: conductor-31 — adds a VERB_BASELINE row and widens one closed-list entry for the new verb; the assertion twin reads the same registry and passed unchanged
Twin-Unchanged: output-text-integrity — adds three POISON_RECIPES rows for the new verb's flags; the assertion twin's subject (escaping) is untouched
Twin-Unchanged: verb-surface — adds one DISPATCH_BASELINE row for the new verb; the assertion twin sweeps the same dispatch table and passed unchanged
…e flake retry re-runs it

node:test locates a failing test at the test() call, which for every unitTest() is
unit-harness.mjs: a file the runner was not given, so failuresOf counted it unmapped and
recoverFlakes never retried a unit-rung failure. The harness now puts a
[unit-test-file: <path>] line at the top of the failure's stack (an AssertionError with a
generated message prints only its stack), and failuresOf reads it back when the located file is
not one it was given. A marker naming a file the runner was not given, or no marker, stays
unmapped, so nothing that cannot be re-run is ever recovered.

Claude-Session: https://claude.ai/code/session_01BoqzgrFwRC6QTUKuBkw8kM
cfdude added 20 commits October 20, 2026 04:36
Consolidates the 20 pending changesets into the 0.53.0 entry and removes them,
plus 19 fragments already consolidated into 0.51.0 and 0.52.0 and never deleted.
No MIGRATIONS entry: every field this release adds is optional.

Claude-Session: https://claude.ai/code/session_01BoqzgrFwRC6QTUKuBkw8kM
…sons skills

Covers list, log-detour --sha, retract-detour --minimal, the epic session trail,
attributed-commits-hold-duplicates, --token-basis and the work total, named invalid
spend markers, the rejected-lesson briefing line, and the live-limit spend-guard
section. Corrects the claim that --session exists only on claim and unclaim.

Claude-Session: https://claude.ai/code/session_01BoqzgrFwRC6QTUKuBkw8kM
@coderabbitai

coderabbitai Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 932dc51b-9c80-4d45-9e63-1c58bc8453d0
📥 Commits

Reviewing files that changed from the base of the PR and between 77a9ea2 and a43978b.

📒 Files selected for processing: 224
  • .changesets/brief-snapshot-epipe-on-large-hook-payload.md
  • .changesets/brief-txt-tracked-in-fleet-repos.md
  • .changesets/certification-record-redesign.md
  • .changesets/commit-observation-gate2-minors.md
  • .changesets/execution-profile-planning-and-light-roles.md
  • .changesets/gh-cfdude-pm-176.md
  • .changesets/gh-cfdude-pm-196.md
  • .changesets/gh-cfdude-pm-210.md
  • .changesets/gh-cfdude-pm-213.md
  • .changesets/hook-early-return-drain-lesson-advice-gate-guard.md
  • .changesets/hook-friction-0-51.md
  • .changesets/integrity-reports-stale-gate-1.md
  • .changesets/openspec-gate1-guard-on-apply.md
  • .changesets/rules-block-session-cost.md
  • .changesets/spend-budget-and-stuck-loop-guard.md
  • .changesets/theme-b1.md
  • .changesets/theme-b2.md
  • .changesets/theme-b3.md
  • .changesets/token-spend-tracking-per-epic.md
  • .claude-plugin/plugin.json
  • .conductor/render-stamp.json
  • .conductor/state.json
  • .githooks/pre-commit
  • CHANGELOG.md
  • CONTRIBUTING.md
  • PROJECT.md
  • README.md
  • agents/reconciler.md
  • commands/cross-spec-review.md
  • commands/decisions.md
  • commands/detour.md
  • commands/dev-log.md
  • commands/epic.md
  • commands/list.md
  • commands/overhead.md
  • commands/override-spend-guard.md
  • commands/record-decision.md
  • commands/set-dev-log.md
  • commands/set-spend-guard.md
  • commands/spend-analysis.md
  • commands/spend-guard.md
  • commands/spend.md
  • commands/status.md
  • commands/sync.md
  • docs/artifacts/artifacts.md
  • docs/measurement/2026-10-commit-gate-rebaseline.md
  • docs/measurement/2026-10-feature-switch-audit.md
  • docs/measurement/2026-10-pm-overhead-baseline.md
  • docs/parity-ledger.json
  • docs/reviews/pm-0.54.0-grooming.md
  • openspec/changes/archive/2026-08-25-conductor-tells-the-truth/integrity-day-one.md
  • openspec/changes/archive/2026-10-20-decision-cost-log/.openspec.yaml
  • openspec/changes/archive/2026-10-20-decision-cost-log/call-site-sweep-R.1.txt
  • openspec/changes/archive/2026-10-20-decision-cost-log/design.md
  • openspec/changes/archive/2026-10-20-decision-cost-log/proposal.md
  • openspec/changes/archive/2026-10-20-decision-cost-log/red-1.x.txt
  • openspec/changes/archive/2026-10-20-decision-cost-log/red-2.x.txt
  • openspec/changes/archive/2026-10-20-decision-cost-log/specs/decision-cost-log/spec.md
  • openspec/changes/archive/2026-10-20-decision-cost-log/tasks.md
  • openspec/changes/archive/2026-10-20-dehardcode-openspec-change-root-in-instructions/.openspec.yaml
  • openspec/changes/archive/2026-10-20-dehardcode-openspec-change-root-in-instructions/call-site-sweep-R.1.txt
  • openspec/changes/archive/2026-10-20-dehardcode-openspec-change-root-in-instructions/design.md
  • openspec/changes/archive/2026-10-20-dehardcode-openspec-change-root-in-instructions/proposal.md
  • openspec/changes/archive/2026-10-20-dehardcode-openspec-change-root-in-instructions/red-1.1.txt
  • openspec/changes/archive/2026-10-20-dehardcode-openspec-change-root-in-instructions/specs/emitted-instructions/spec.md
  • openspec/changes/archive/2026-10-20-dehardcode-openspec-change-root-in-instructions/tasks.md
  • openspec/changes/archive/2026-10-20-developer-session-log/.openspec.yaml
  • openspec/changes/archive/2026-10-20-developer-session-log/call-site-sweep-R.1.txt
  • openspec/changes/archive/2026-10-20-developer-session-log/design.md
  • openspec/changes/archive/2026-10-20-developer-session-log/proposal.md
  • openspec/changes/archive/2026-10-20-developer-session-log/shapes-1.1.txt
  • openspec/changes/archive/2026-10-20-developer-session-log/specs/developer-session-log/spec.md
  • openspec/changes/archive/2026-10-20-developer-session-log/tasks.md
  • openspec/changes/archive/2026-10-20-epic-session-attribution/.openspec.yaml
  • openspec/changes/archive/2026-10-20-epic-session-attribution/call-site-sweep-R.1.txt
  • openspec/changes/archive/2026-10-20-epic-session-attribution/design.md
  • openspec/changes/archive/2026-10-20-epic-session-attribution/proposal.md
  • openspec/changes/archive/2026-10-20-epic-session-attribution/red-1.1.txt
  • openspec/changes/archive/2026-10-20-epic-session-attribution/specs/epic-session-trail/spec.md
  • openspec/changes/archive/2026-10-20-epic-session-attribution/tasks.md
  • openspec/changes/archive/2026-10-20-feature-switches-audit/.openspec.yaml
  • openspec/changes/archive/2026-10-20-feature-switches-audit/call-site-sweep-R.1.txt
  • openspec/changes/archive/2026-10-20-feature-switches-audit/design.md
  • openspec/changes/archive/2026-10-20-feature-switches-audit/proposal.md
  • openspec/changes/archive/2026-10-20-feature-switches-audit/specs/feature-switches/spec.md
  • openspec/changes/archive/2026-10-20-feature-switches-audit/tasks.md
  • openspec/changes/archive/2026-10-20-gh-cfdude-pm-242/.openspec.yaml
  • openspec/changes/archive/2026-10-20-gh-cfdude-pm-242/call-site-sweep-R.1.txt
  • openspec/changes/archive/2026-10-20-gh-cfdude-pm-242/design.md
  • openspec/changes/archive/2026-10-20-gh-cfdude-pm-242/proposal.md
  • openspec/changes/archive/2026-10-20-gh-cfdude-pm-242/red-1.1.txt
  • openspec/changes/archive/2026-10-20-gh-cfdude-pm-242/specs/spend-ledger/spec.md
  • openspec/changes/archive/2026-10-20-gh-cfdude-pm-242/tasks.md
  • openspec/changes/archive/2026-10-20-gh-cfdude-pm-251/.openspec.yaml
  • openspec/changes/archive/2026-10-20-gh-cfdude-pm-251/call-site-sweep-R.1.txt
  • openspec/changes/archive/2026-10-20-gh-cfdude-pm-251/design.md
  • openspec/changes/archive/2026-10-20-gh-cfdude-pm-251/proposal.md
  • openspec/changes/archive/2026-10-20-gh-cfdude-pm-251/red-1.1.txt
  • openspec/changes/archive/2026-10-20-gh-cfdude-pm-251/red-2.x.txt
  • openspec/changes/archive/2026-10-20-gh-cfdude-pm-251/specs/spend-guard/spec.md
  • openspec/changes/archive/2026-10-20-gh-cfdude-pm-251/specs/spend-ledger/spec.md
  • openspec/changes/archive/2026-10-20-gh-cfdude-pm-251/tasks.md
  • openspec/changes/archive/2026-10-20-pm-overhead-baseline/.openspec.yaml
  • openspec/changes/archive/2026-10-20-pm-overhead-baseline/call-site-sweep-R.1.txt
  • openspec/changes/archive/2026-10-20-pm-overhead-baseline/design.md
  • openspec/changes/archive/2026-10-20-pm-overhead-baseline/proposal.md
  • openspec/changes/archive/2026-10-20-pm-overhead-baseline/specs/pm-overhead/spec.md
  • openspec/changes/archive/2026-10-20-pm-overhead-baseline/tasks.md
  • openspec/changes/archive/2026-10-20-spend-guard-rules-section-follows-live-limits/.openspec.yaml
  • openspec/changes/archive/2026-10-20-spend-guard-rules-section-follows-live-limits/call-site-sweep-R.1.txt
  • openspec/changes/archive/2026-10-20-spend-guard-rules-section-follows-live-limits/design.md
  • openspec/changes/archive/2026-10-20-spend-guard-rules-section-follows-live-limits/proposal.md
  • openspec/changes/archive/2026-10-20-spend-guard-rules-section-follows-live-limits/red-1.1.txt
  • openspec/changes/archive/2026-10-20-spend-guard-rules-section-follows-live-limits/red-1.2.txt
  • openspec/changes/archive/2026-10-20-spend-guard-rules-section-follows-live-limits/specs/spend-guard/spec.md
  • openspec/changes/archive/2026-10-20-spend-guard-rules-section-follows-live-limits/tasks.md
  • openspec/changes/archive/2026-10-20-token-spend-analysis-and-recommendations/.openspec.yaml
  • openspec/changes/archive/2026-10-20-token-spend-analysis-and-recommendations/call-site-sweep-R.1.txt
  • openspec/changes/archive/2026-10-20-token-spend-analysis-and-recommendations/design.md
  • openspec/changes/archive/2026-10-20-token-spend-analysis-and-recommendations/dogfood-3.1.txt
  • openspec/changes/archive/2026-10-20-token-spend-analysis-and-recommendations/proposal.md
  • openspec/changes/archive/2026-10-20-token-spend-analysis-and-recommendations/red-1.x.txt
  • openspec/changes/archive/2026-10-20-token-spend-analysis-and-recommendations/red-2.x.txt
  • openspec/changes/archive/2026-10-20-token-spend-analysis-and-recommendations/specs/spend-analysis/spec.md
  • openspec/changes/archive/2026-10-20-token-spend-analysis-and-recommendations/tasks.md
  • openspec/specs/decision-cost-log/spec.md
  • openspec/specs/developer-session-log/spec.md
  • openspec/specs/emitted-instructions/spec.md
  • openspec/specs/epic-session-trail/spec.md
  • openspec/specs/feature-switches/spec.md
  • openspec/specs/pm-overhead/spec.md
  • openspec/specs/spend-analysis/spec.md
  • openspec/specs/spend-guard/spec.md
  • openspec/specs/spend-ledger/spec.md
  • scripts/conductor.mjs
  • scripts/lib/argv-surface.mjs
  • scripts/lib/briefing.mjs
  • scripts/lib/constants.mjs
  • scripts/lib/decision-log.mjs
  • scripts/lib/dev-log-capture.mjs
  • scripts/lib/dev-log-report.mjs
  • scripts/lib/dev-log.mjs
  • scripts/lib/gate-guard.mjs
  • scripts/lib/git.mjs
  • scripts/lib/integrity.mjs
  • scripts/lib/invocation.mjs
  • scripts/lib/list.mjs
  • scripts/lib/opt-ins.mjs
  • scripts/lib/overhead.mjs
  • scripts/lib/rules.mjs
  • scripts/lib/session-cost-report.mjs
  • scripts/lib/session-identity.mjs
  • scripts/lib/spend-analysis.mjs
  • scripts/lib/spend-attribution.mjs
  • scripts/lib/spend-command.mjs
  • scripts/lib/spend-guard-verbs.mjs
  • scripts/lib/spend-guard.mjs
  • scripts/lib/spend-ledger.mjs
  • scripts/lib/spend-reader.mjs
  • scripts/lib/spend-report.mjs
  • scripts/lib/store.mjs
  • scripts/lib/subcommands.mjs
  • scripts/lib/verb-effects.mjs
  • scripts/test/assert/conductor-09.test.mjs
  • scripts/test/assert/conductor-25.test.mjs
  • scripts/test/assert/conductor-35.test.mjs
  • scripts/test/assert/decision-log.test.mjs
  • scripts/test/assert/detour-frame-drop.test.mjs
  • scripts/test/assert/dev-log-capture.test.mjs
  • scripts/test/assert/dev-log-report.test.mjs
  • scripts/test/assert/dev-log-switch.test.mjs
  • scripts/test/assert/emitted-invocations.test.mjs
  • scripts/test/assert/feature-cost-table.test.mjs
  • scripts/test/assert/opt-ins.test.mjs
  • scripts/test/assert/overhead.test.mjs
  • scripts/test/assert/shipped-change-root.test.mjs
  • scripts/test/assert/spec-sync-index.test.mjs
  • scripts/test/assert/spend-analysis.test.mjs
  • scripts/test/assert/spend-guard-rules-follows-liveness.test.mjs
  • scripts/test/assert/spend-guard.test.mjs
  • scripts/test/certify.mjs
  • scripts/test/fixtures/change-root-sweep.mjs
  • scripts/test/fixtures/engine-extraction.mjs
  • scripts/test/fixtures/shipped-docs.mjs
  • scripts/test/fixtures/unit-harness.mjs
  • scripts/test/flake-retry.mjs
  • scripts/test/functional/certify-index.test.mjs
  • scripts/test/functional/commit-resolution.test.mjs
  • scripts/test/functional/conductor-09.test.mjs
  • scripts/test/functional/conductor-13.test.mjs
  • scripts/test/functional/conductor-30.test.mjs
  • scripts/test/functional/conductor-31.test.mjs
  • scripts/test/functional/emitted-invocations.test.mjs
  • scripts/test/functional/git-gateway-guard.test.mjs
  • scripts/test/functional/lesson-rejects-brief.test.mjs
  • scripts/test/functional/log-detour-sha.test.mjs
  • scripts/test/functional/output-text-integrity.test.mjs
  • scripts/test/functional/state-file-refuses-to-guess.test.mjs
  • scripts/test/functional/verb-surface.test.mjs
  • scripts/test/known-flakes.json
  • scripts/test/sweeps/output-interpolations.judged.mjs
  • scripts/test/unit/conductor-25.test.mjs
  • scripts/test/unit/decision-log.test.mjs
  • scripts/test/unit/dev-log-capture.test.mjs
  • scripts/test/unit/dev-log-report.test.mjs
  • scripts/test/unit/dev-log-switch.test.mjs
  • scripts/test/unit/engine-extraction.test.mjs
  • scripts/test/unit/epic-session-trail.test.mjs
  • scripts/test/unit/flake-retry.test.mjs
  • scripts/test/unit/integrity-duplicate-attributions.test.mjs
  • scripts/test/unit/lesson-rejects-brief.test.mjs
  • scripts/test/unit/list-verb.test.mjs
  • scripts/test/unit/log-detour-sha.test.mjs
  • scripts/test/unit/opt-ins.test.mjs
  • scripts/test/unit/overhead.test.mjs
  • scripts/test/unit/quoted-dash-text-hint.test.mjs
  • scripts/test/unit/shipped-change-root.test.mjs
  • scripts/test/unit/spend-analysis.test.mjs
  • scripts/test/unit/spend-guard-core.test.mjs
  • scripts/test/unit/spend-guard-liveness.test.mjs
  • scripts/test/unit/spend-guard-verbs.test.mjs
  • scripts/test/unit/spend-report.test.mjs
  • skills/conductor/SKILL.md
  • skills/lessons/SKILL.md
+-------------------------------------------------+
| My whiskers twitch when I detect a memory leak. |
+-------------------------------------------------+
  \
   \   (\__/)
       (•ㅅ•)
       /   づ
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

The 1.3 capture tests failed on the CI leg that shifts Date.now() 400 days ahead: the fixture transcript kept its real mtime, so ingest skipped it as older than enabledAtMs.

Claude-Session: https://claude.ai/code/session_01BoqzgrFwRC6QTUKuBkw8kM
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant