2026.7.13

Added

  • Bare-core audit extraction phase 2: move audit command implementations and audit flags out of default CLI/SDK into pm-governance-audit elemento pm-vjk3
  • Cursor pagination and bounded-output defaults for list/search/context at scale elemento pm-dfg0
  • Notes/learnings repair parity: add --edit/--delete (and a real --stdin/--file input source) matching comments, so bad annotation entries are fixable via the CLI elemento pm-a2h3

Changed

  • S3: move the --allow-audit-\* override flag family out of core command registrations into pm-governance-audit (enforcement stays core) elemento pm-7dcf
  • S2: move the --audit linked-usage report mode off pm files/pm docs into pm-governance-audit elemento pm-27mv
  • S1: relocate dedupe-audit/dedupe-merge/comments-audit/normalize implementations into pm-governance-audit and delete their public SDK exports elemento pm-79fr

Fixed

  • Runtime-extension snapshot caches go stale in long-lived in-process embeddings (install invisible to next invocation) elemento pm-8fxc
  • GH-518: reduce Complex Method in src/cli/commands/next.ts (CodeFactor, PR\#517 rank rendering) elemento pm-2gvp

Other

  • Extract governance audit runtime from the default CLI and SDK elemento pm-w1c0
  • S5: coverage migration + bare-core vs installed-plugin e2e verification for the audit extraction elemento pm-rxp1
  • S4: purge audit surface from default SDK contracts, MCP tool definitions, completion, help, and docs; package declares its own contracts; re-measure token surface elemento pm-kg18
  • Promote terminal-status and mutation runner primitives required by package-owned governance workflows elemento pm-yu6d
  • Decision: extension-point mechanism and bare-core fallback semantics for extracted audit flags (D1+D2 of pm-vjk3) elemento pm-fg0b
  • Scale benchmark harness: synthetic 10k/100k/1M-item workspace generator + latency/memory/token baseline for the read and claim hot paths elemento pm-mi2x
  • Lazy-load @sentry/node off the command hot path (~850ms ESM load on every command, even when telemetry disabled) elemento pm-1ybs
  • ADR: workspace scale-out strategy — indexed reads, storage fan-out, and bounded-output contracts for 100k-1M-item workspaces (proposed) elemento pm-bl8x
  • Local test/coverage dev loop 17+min: replace per-call spawnSync CLI runner with synchronous worker-thread bridge elemento pm-kvd0

2026.7.12

Added

  • Promote plan workflow primitives to the public SDK: plan create/steps/dependencies/decisions/discoveries/validation/materialization elemento pm-je50

Fixed

  • Restore 100% SDK workspace read-error coverage elemento pm-jw2a
  • GH-510: macOS nightly red — withTempPmPath skips realpath canonicalization; init-path-guard probe-root assertion fails (/var vs /private/var) elemento pm-dprb
  • GH-454: schema add-field accepts reserved built-in names silently; collision error names no partner elemento pm-b9ov
  • GH-516: pm init seeds unrelated managed packages into fresh PM_GLOBAL_PATH workspaces elemento pm-b0se
  • GH-448: boolean custom field is silently never persisted (data-loss class) elemento pm-sjfs
  • GH-509: pm claim --next lacks candidate filters and race-loss walk — thread next filters + advance to next candidate elemento pm-fjxm
  • Prevent Decision items from entering agent work lanes by default; allow explicit maintainer opt-in elemento pm-eqk0
  • GH-513: pm next ready\[\] documented as ranked but not priority-ordered; no rank/score exposed elemento pm-1mwk
  • Fix red main coverage gate: measure-agent-token-surface.mjs landed without a covering spec elemento pm-ksca
  • GH-508: dedupe LegacyNoneCollectionNormalizer tables duplicated between create.ts and update.ts (CodeFactor) elemento pm-zuw8
  • Release-readiness guard expects pre-sync version:check command after date-version synchronization elemento pm-pmmv
  • Restore generated-loader docstrings and redact host path from tracker history elemento pm-9ugc
  • Full coverage contention times out metadata content-filter integration case elemento pm-d30l
  • GH-453: plan materialize --json response omits title/type/parent on materialized entries elemento pm-ypha
  • GH-452: plan materialize dead-ends on types with required-on-create custom fields elemento pm-qd2h
  • GH-507: recovery suggested_retry appends <value\> to missing boolean EXTENSION flags (contract arity ignored) elemento pm-9qcr
  • GH-505: nested extension failures suggest irrelevant missing flags instead of preserving tracker recovery elemento pm-o71e
  • GH-504: importer/exporter registered without options yields an unusable CLI command (no arg/flag contracts) elemento pm-0mjz
  • GH-503: flattened extension-command aliases (csv-export, jira-sync) drop option contracts elemento pm-s9iu

Other

  • Coverage to 100%: src/core, src/mcp, and src/sdk modules elemento pm-krwu
  • Baseline agent token cost of the CLI surface: measure pm --help, per-command help, and contracts payload sizes before consolidation elemento pm-a22j
  • Research and document the July 2026 native ChatGPT/Codex plugin implementation plan elemento pm-n28t
  • Align all plugin and package manifests to date-based versioning with release-time sync elemento pm-hxsv

2026.7.11

Added

  • pm claim --next: atomically claim the next actionable item so parallel agents each get distinct work elemento pm-114v

Fixed

  • Dangling dependency references: accepted at create/update, skipped by validate, and treated as satisfied by pm next (silent unblock) elemento pm-ol5v
  • Classify tracker-not-initialized Sentry CommandErrors as expected handled CLI errors elemento pm-w7jq
  • GH-498: pm comments rejects --body — accept it as an alias for --add and hint on unknown options elemento pm-z32q
  • GH-500: suggested_retry renders boolean flags with a "<value\>" placeholder — literal suggestion fails elemento pm-6y58
  • pm next repeats the recommended item verbatim as ready\[0\] — emit an id reference instead elemento pm-hfg5
  • pm next recommends another agent's assigned in_progress item as 'resume to finish' — recommendation must be caller-aware elemento pm-yl6c
  • GH-489: pm next summary reports blocked: 0 while blocked items exist — blocked companion list missing elemento pm-l0bu
  • GH-501: pm init <path\> roots a tracker that workspace discovery cannot find — tracker_not_initialized loop right after init elemento pm-69nl
  • GH-496: extension flags declared list:true don't accumulate repeated occurrences — host maps to scalar, Commander last-wins drops values elemento pm-kfq5
  • Reserved item-field name collisions are invisible to SDK lint/preflight/harness elemento pm-ghf1
  • Repeated --ac flags on create/update silently keep only the last acceptance criterion elemento pm-b84u
  • GH-497: pm create --template silently drops tags and custom type-option fields — only built-ins (priority/assignee) apply elemento pm-l6rz
  • pm create/update --dep silently normalizes malformed shorthand into dangling dependency ids (related:pm-x26a -\> pm-related:pm-x26a) elemento pm-zazb
  • contracts-snapshot gate is environment-dependent: fixture baked in installed-extension contracts, failing CI on extension version drift or absence elemento pm-zcjy
  • GH-495: extension context pm_root ignores root-layout trackers (falls back to non-existent .agents/pm) elemento pm-kvev
  • pm close never stamps closed_at, so changelog and release-notes bucketing always falls back to updated_at elemento pm-m4iu

Other

  • Repo-wide 100% docstring coverage: public API + data contracts (gate-enforced) elemento pm-4ak1
  • Docstring gate: extend static-quality-gate to enforce public-API + data-contract coverage repo-wide elemento pm-5566
  • Docstrings: src/types (shared data model interfaces + consts) elemento pm-uxmf
  • Docstrings: src/sdk (public SDK surface + cli-contracts) elemento pm-uwu0
  • Docstrings: packages/\* (module docs + exported/public surface for all 11 shipped packages) elemento pm-qely
  • Docstrings: src/core/extensions (extension-types + loader/runtime contracts) elemento pm-mswi
  • Docstrings: src/cli/commands (largest surface — command option/result interfaces) elemento pm-m0uc
  • Docstrings: src/core (search, schema, test, history, telemetry, governance, store, item, and remaining core modules) elemento pm-768v
  • Docstrings: src/cli (non-commands), src/mcp, src/ root modules elemento pm-2vb2
  • Untrack vendored pm-changelog extension dist from git (installed npm artifact, restored by changelog:pm:install) elemento pm-sod3
  • Refresh CodeQL Actions and reject incompatible Node 26 type-contract bump elemento pm-2a9n

2026.7.10

Added

Fixed

  • Sentry release gate misclassifies handled duplicate-import refusal as a blocking runtime error elemento pm-io4t
  • GH-488: path-target pm init emits executable tracker-scoped follow-up commands elemento pm-x26a
  • Declarative extension install: activation failure is misreported and scaffold next_steps break when @unbrained/pm-cli is unresolvable elemento pm-3wsi
  • Project package install with --pm-path can write extensions into the caller workspace elemento pm-qt5d
  • GH-482: Node 24 nightly coverage gate flake — readdir-order-dependent branch at front-matter-cache.ts:505 elemento pm-gume
  • Context evaluation runner and CI gate: rank-aware quality metrics plus token-budget regression checks elemento pm-xmp5
  • Token-cost regression gate: CI budget check over a representative command-output corpus elemento pm-cu1i
  • GH-484: pm update --blocked-by silently overwrites prior blockers instead of appending elemento pm-q6gx
  • GH-485: pm search rewrites quoted status:all hybrid queries into --status and drops keywords elemento pm-2ldo

Other

  • Pre-install package-owned command names should hint the owning package install command elemento pm-b3e9
  • Context relevance scorer contract: pluggable SDK weighting, deterministic default model, and extension override path elemento pm-h3no

2026.7.9

Added

  • GH-442: lean pm contracts --summary mode for cheap agent bootstrap (25KB -\> 1-3KB) elemento pm-vxxm
  • GH-470: pm list --today and --recent shorthand filters for recently active items elemento pm-bfma

2026.7.8

Added

  • GH-467: isolated package/extension diagnostics — project-scoped doctor and smoke tests without global pm state leaking in elemento pm-6abs
  • GH-474: pm search --limit support in hybrid mode elemento pm-alnj

Fixed

  • Triage: close GH-455 with shipped evidence once the Ollama embedding auto-default fix releases elemento pm-hq0r

Other

  • Expose package lifecycle primitives through public SDK helpers elemento pm-kffw
  • Expose sentry telemetry gate as package script alias elemento pm-w86l
  • ADR: 2026-06-07 deep review + remediation pass (never-block, MCP/version coherence, docs/CI hardening) elemento pm-96wm
  • GH-476: pm context rejects --max-items with an untargeted unknown_option (alias or recovery hint) elemento pm-5h9g

2026.7.7

Added

  • Promote query/read primitives to the public SDK: list, get, search, context, next, aggregate, stats elemento pm-rjqr
  • Promote item lifecycle primitives to the public SDK: create, update, close, claim/release, copy, delete, restore, focus elemento pm-98cz

Fixed

  • SDK client.run() rejects structured payloads for create: raw {type,title} fails with 'Missing required option --title' elemento pm-395t
  • GH-427: Windows Node 24 nightly fails — POSIX-only error-code assertions (EACCES/EISDIR) in restore-command and history-rewrite specs elemento pm-lt6n
  • pm plan create silently ignores the root --id-only flag (prints full plan envelope) elemento pm-oz0k
  • Annotation --add silently stores flag-like tokens as content: pm notes <id\> --add --stdin records the literal note "--stdin" elemento pm-vcu7
  • Bare extension command group (pm changelog / pm graph) exits 0 with zero output instead of rendering group help elemento pm-1k57
  • pm extension --install pm-<alias\> / @unbrained/pm-<alias\> fails with 'Local extension source does not exist' instead of suggesting the bundled catalog alias elemento pm-jqd2
  • GH-463: linked PM tracker-read tests should auto-remediate or suggest --auto-pm-context elemento pm-6e1d
  • GH-455: pm health auto-selects an uninstalled Ollama embedding model then fails vector refresh elemento pm-aems
  • Relative lancedb vector-store path resolves against process cwd, creating nested .agents/pm/.agents/pm stores elemento pm-og1v

Other

  • GH-458: claim/start-task reject --assignee with an untargeted recovery hint (alias or better hint) elemento pm-qfte
  • GH-468: clarify or publish the pm SDK npm package coordinates (@unbrained/pm-sdk is 404) elemento pm-25d0
  • 2026-07-07 ecosystem audit \#16: all-status review, long-horizon gap items (merge semantics, event stream, policy roles, flow metrics) elemento pm-su60
  • 2026-07-06 ecosystem audit \#15: WIP hygiene, GH/commit coverage verification, grammar+SDK domain completions, horizon-4 planning elemento pm-pvij
  • chore: 2026-07-06 ecosystem audit \#14 — WIP status hygiene (docstring family reset) + stale in-progress detection backlog elemento pm-6a1g
  • chore: 2026-07-06 ecosystem audit \#13 — Semgrep-issue metadata backfill, scale-out initiative pm-9rxu, composability contract set elemento pm-lgim
  • 2026-07-06 ecosystem audit \#12: GH-467..474 backlog coverage + code-scanning capability epic elemento pm-3rgp
  • pm install should accept multiple package targets (help already advertises \[targets...\]) elemento pm-hj9h
  • Triage: close stale dogfood reports GH-436 (pm next/focus) and GH-440 (context --fields) with shipped evidence elemento pm-7cx8
  • Unblock dependabot PRs: @types/node 26 type error, pnpm release-age cooldown, codeql-action lockstep group elemento pm-2czc

2026.7.6

Added

  • Expose SDK runAction and PmClient execution surface for programmatic integrations elemento pm-xzhz

Other

  • ADR: the pm SDK is the single public API — CLI and MCP are presentation layers (proposed) elemento pm-muhw

2026.7.5

Added

  • Architecture boundary ratchet: prevent new CLI/MCP private core imports while SDK promotion shrinks the baseline elemento pm-8778
  • Lock contention auto-retry: bounded jittered wait before lock_conflict so parallel agent mutations self-heal elemento pm-2muu
  • As a new teammate or onboarding agent, I want accurate docs, one-command onboarding, and automated date-based releases, so that I can become productive quickly and ship safely elemento pm-ixm6
  • As a coding agent, I want keyword, semantic, and hybrid search with inline field filters, so that I can find relevant prior context before creating new work and never duplicate an item elemento pm-nnro

Fixed

  • pm claim silently steals items already assigned to another agent — claim must be atomic test-and-set for multi-agent work distribution elemento pm-8t5x
  • Extension activation adds ~200ms to every command when bundled packages are installed elemento pm-4oww
  • pm close <id\> -m 'text' still hard-blocks with close_reason_required: accept --message text as close-reason fallback (like closed pm-7x8d did for --resolution) elemento pm-9hry
  • Extension installs are dead-on-arrival in CommonJS host projects: installed extension dirs lack package.json type:module elemento pm-r0m4
  • beads/todos import-export runtime broken from real npm installs: runtime-loader imports .ts under node_modules (type-strip refused) elemento pm-ejy7

Other

  • Bundle GH-433 self-parent guard, Windows nightly lock proof, and pnpm 11 bootstrap hardening elemento pm-q1ke
  • Inventory the CLI-to-core call graph: map every command to core modules and classify logic for SDK promotion elemento pm-lodl
  • 2026-07-04 ecosystem audit \#4: coverage matrix, governance capability epic & relationship modeling elemento pm-osea
  • As a future maintainer, I want every significant architectural decision recorded as an ADR with context, decision, and consequences, so that I can understand why the system is built the way it is elemento pm-xugp
  • As a maintainer extending pm with agents, I want CodeFactor A+ enforced by ratcheted static gates, so that the codebase stays maintainable no matter how many agents contribute elemento pm-r0z2
  • As an MCP-connected agent, I want narrow pm\_\* tools kept in lockstep with the CLI via machine-readable contracts, so that I get drift-free, discoverable operations over the same primitives elemento pm-wo7x
  • As a coding agent bootstrapping any project, I want to define custom item types, statuses, fields, workflows, and profiles via config, so that pm fits the project's domain without code changes elemento pm-0zuv
  • As a maintainer, I want consent-aware local telemetry and health diagnostics, so that I can observe how pm is used and detect problems without leaking any project data elemento pm-gnya
  • As one of many parallel agents, I want atomic claim and lock semantics with bounded auto-retry, so that we each get distinct work and never corrupt shared tracker state elemento pm-miju
  • As an agent gating on tracker quality, I want pm validate and pm health to surface every data-quality gap with a machine-executable remediation, so that I can keep context trustworthy and rebuild it from pm alone elemento pm-tra4
  • As a third-party author, I want an SDK to compose, validate, test, and ship a pm extension or package, so that pm can be customized and optimized for any project without forking elemento pm-m2kl
  • As a coding agent, I want every mutation to be atomic and fully replayable from an append-only history, so that I can trust the tracker's state and recover any prior context at any time elemento pm-hu11
  • As a coding agent, I want every pm command to be self-describing and to never block without a machine-actionable recovery path, so that I can operate the full item lifecycle with zero out-of-band context elemento pm-nh73
  • Backfill full-context bodies (and comments/deps/risk) on all active items so context is rebuildable from pm CLI alone elemento pm-o043
  • Sandbox audit fixes: package describe accepts npm package name; pm context <id\> routes to pm get elemento pm-ayn7
  • 2026-07-04 full pm-backlog audit: reconcile pm items with entire ecosystem (code, tests, docs, ideas, decisions) elemento pm-y904
  • GH-426: reduce complex method in compatibility-check.spec runCurrentPmCommand elemento pm-24o5
  • SDK testing-helper input validation: runRegisteredCommandForTest positional misuse crashes; createExtensionTestHarness accepts non-extension module silently elemento pm-2exf

2026.7.4

Security

  • Extreme mandatory quality gates: strict ESLint everywhere, jscpd strict/zero-threshold, suppressions budget, Trivy/ShellCheck/PSScriptAnalyzer/actionlint CI, admin-proof branch protection elemento pm-7wmq

Other

  • Test meaningfulness audit: strengthen hollow assertions, de-mock thin specs, convert contract source-mirrors to behavior elemento pm-4i73