All notable changes to this project are documented in this file.
The format follows Keep a Changelog, and this project adheres to Semantic Versioning.
- Added mixed-frontmatter compatibility coverage to the release gate so previous-version
json_markdownworkspaces with YAML wrappers before JSON item data are migrated in a temp project before release. - Added
--repairto bundled install scripts to clear stale globalpmshims before reinstalling from the npm registry.
- Hardened release post-publish verification so npm/npx/bunx checks run from a clean temp directory and fail the release workflow if package execution does not converge.
- Hardened the daily auto-release pipeline so
.agents/pm-only tracker commits are ignored for publish eligibility, preventing post-release tracker closure from creating a package-only release. - Documented npm registry installs as the supported global update path and added recovery guidance for broken git-sourced global installs.
- Fixed item-format migration to ignore leading YAML wrappers before JSON front matter, continue past unreadable item files with deterministic warnings, and avoid writing
item_formatsettings before migration completes.
- Relaxed release workflow npx/bunx post-publish checks to emit warnings instead of hard-failing the pipeline when registry/executor convergence lags, while keeping npm publication metadata as a blocking verification gate.
- Updated release workflow npx verification to run the explicit package binary command (
npx @unbrained/pm-cli@<version> pm --version) to avoid npm exec binary resolution drift on GitHub-hosted runners.
- Updated release post-publish verification commands to execute the package
pmbinary explicitly (npm exec --package ... -- pm --versionandbunx ... pm --version) and parse terminal line output robustly.
- Added npm/npx/bunx propagation retries to release publication verification so post-publish checks wait for registry availability instead of failing immediately on transient 404 windows.
- Hardened release workflow reliability gating so Sentry threshold checks are skipped when the runner does not provide the
sentryCLI binary, preventing false-negative publish blocks on GitHub-hosted runners.
- Relaxed tag release version policy guard in
.github/workflows/release.ymlto validate tag/version consistency without blocking same-day retry tags when a previous tag run failed before npm publication. - Hardened
scripts/release/run-release-pipeline.mjssame-day retry version resolution so local retry cuts always advance beyond the currently checked-out package version when npm has not yet observed failed prior tags.
- Relaxed release compatibility health evaluation so compatibility gating only blocks on failing health checks, not warning-only health states, preventing false negatives on GitHub-hosted release runs.
- Added a scheduled auto-release workflow (
.github/workflows/auto-release.yml) with one-release-per-UTC-day defaults, manual same-day override controls, and a shared release pipeline driver. - Added release automation scripts under
scripts/release/for changelog promotion, strict static quality checks, temporary-project backward-compatibility validation, Sentry/telemetry threshold gating, unified release gate execution, and full local pipeline orchestration. - Added release automation contract coverage in
tests/integration/release-automation-contract.spec.ts.
- Hardened CI, nightly, and release workflows with explicit static quality and compatibility migration gates.
- Release workflow now verifies published package availability via npm, npx, and bunx, and verifies GitHub release metadata after publication.
- Expanded release-readiness runtime checks to cover new release scripts, package commands, and auto-release workflow presence.
- Added progressive
pm contextdepth, section, activity, staleness, and agenda controls so agents can request brief, standard, deep, or focused project snapshots without broad list scans. - Added detailed CLI telemetry error classification for failed command finishes, including normalized
error_code,error_category, and exit-code metadata for telemetry and local OTLP spans. - Added regression coverage for bootstrap argument parsing, telemetry classification, Sentry helper filtering, migration gates, context output, and front-matter cache behavior.
- Decomposed
src/cli/main.tsfrom ~5800 lines into modular command registration files:register-setup.ts,register-list-query.ts,register-mutation.ts,register-operations.ts, and sharedregistration-helpers.ts, reducing main.ts to ~2550 lines while preserving all command behavior and help text. - Centralized command argument parsing and command registration helpers to reduce CLI surface drift across help, contracts, completion, and runtime telemetry paths.
- Centralized shared HTTP request handling for embeddings and vector-store providers, reducing duplicated semantic search transport logic.
- Changed the built-in telemetry capture default from
maxtoredactedso new installs preserve agent reliability diagnostics without sending local paths or personal identifiers by default. - Hardened CI, nightly, and release workflows around the sandboxed test harness and release readiness contracts while preserving the free GitHub Actions release path.
- Hardened Sentry filtering so expected handled CLI usage/validation errors are logged as structured usage signals without reopening Sentry exception groups, while unexpected failures still capture normally.
- Hardened
pm normalizeclosed-item backfill so it satisfies resolution metadata requirements without duplicating potentially sensitiveclose_reasontext into new tracked fields.
- Added persistent on-disk front-matter cache (
src/core/store/front-matter-cache.ts) forlistAllFrontMatteroperations, using mtime+size fingerprinting for incremental refresh and context-fingerprint-based invalidation when preferred format or schema changes. Warmlist-opendrops from full-scan to ~60ms for 636-item corpora.
- Hardened telemetry and Sentry scrubbing so emails, private IPs, absolute local paths, bearer values, and inline credential assignments are redacted even when higher-detail telemetry capture is explicitly selected.
- Redacted sensitive infrastructure details from tracked project metadata and kept production telemetry/Sentry release audit notes in the ignored private operations area.
- Reworked the README and public docs into progressive, agent-oriented pages with GitHub-compatible links and
pmtracker cross-references. - Hardened Sentry signal quality by suppressing expected handled
PmCliErrorusage/validation failures while retaining unexpected exception capture. - Added optional token-gated Sentry release and sourcemap upload to the free GitHub release workflow so published CLI stack traces can resolve source context when Sentry credentials are configured.
- Updated generated GitHub release notes so closed release-tagged
pmevidence remains visible after the release item is completed.
- Kept private operations material out of public docs and package output; local production operations artifacts remain ignored by git.
- Pinned direct runtime and development dependency ranges instead of publishing
latestspecifiers, includingundici@^8.1.0, so installs are deterministic and GitHub Dependabot evaluates the manifest against a non-vulnerable patched range.
- Fixed first-mutation compatibility for trackers created by
@unbrained/pm-cli@2026.3.12: legacy settings that omititem_formatnow auto-select the current default format and run the existing pre-mutation item-file migration instead of blocking writes, preserving existing items, linked artifacts, comments, close metadata, and history integrity. - Fixed npm package repository metadata so provenance publishing validates against the canonical
unbraind/pm-cliGitHub source repository.
- Added
scripts/generate-release-notes.mjsandpnpm release:notesto generate GitHub release notes fromCHANGELOG.mdplus sanitizedpmtracker metadata.
- Release workflow now checks out full git history for tag discovery, uploads generated release-note artifacts, and publishes the generated
CHANGELOG.md+pmtracker release body to GitHub Releases without requiring paid GitHub features.
- Added
Decisionas a built-in item type withdecisions/folder mapping, completion support, and stats coverage. - Added structured
close_through_updateerror context with actionablepm closeexamples when users attemptpm update --status closed. - Added audit flag recommendations (
--allow-audit-update,--allow-audit-dep-update,--allow-audit-comment) to ownership conflict error guidance as non-force alternatives. - Added lifecycle dependency-cycle diagnostics to
pm validatewith deterministic cycle counts/sample paths and configurable--dependency-cycle-severity off|warn|errorpolicy. - Added extension scaffold lifecycle action (
pm extension --init, alias--scaffold) that generates idempotent starter extension projects with manifest, entrypoint, and quick-start guidance. - Added
pm normalizelifecycle metadata governance workflow with deterministic dry-run planning (default), explicit--applymode, list-style filter targeting, and ownership-safe apply controls (--allow-audit-update,--force).
-
Bumped
pnpm/action-setupfrom v5 to v6 in all CI/release/nightly workflows (pnpm v11 support). -
Bumped
softprops/action-gh-releasefrom v2 to v3 in release workflow (Node 24 runtime). -
Bumped
undici,@types/node,@vitest/coverage-v8,vitest, andtypescriptto latest. -
Updated SDK/extension docs to explicitly cover
cli-contractspublic exports, capability contract constants, inline command flag schema capability requirements, and importer/exporter capability gating parity. -
Clarified templates command name binding in help/docs (
pm templates save <name>,pm templates show <name>), including explicit guidance that--nameis unsupported. -
Improved calendar usage guidance when
--full-periodis used with--view agendaby recommending--from/--tobounded windows in both runtime error text and help tips. -
Improved calendar UX ergonomics by accepting
todayfor--date/--from/--toboundaries and by adding explicit recurrence delimiter guidance for malformed--eventCSV payloads. -
Improved implicit Ollama hybrid search latency by bounding semantic timeout windows and emitting deterministic warning codes when auto-defaulted semantic execution falls back to keyword mode.
-
Improved extension doctor load diagnostics with targeted warning codes and remediation hints for missing
@unbrained/pm-cliSDK dependency resolution and ESM module-mode mismatches. -
Improved private diagnostics event segmentation by adding additive package/version and source-context metadata fields.
-
Improved
pm update-manyno-op validation guidance by listing actionable mutation flag examples when users provide filters/--dry-runwithout any mutation flags. -
Added
pm files discover <ID>to scan item text for existing project/global file paths, report addable vs already linked candidates, and optionally add missing linked files with--apply. -
Added
pm create --commentplain-text shorthand support so comment seeds can be passed as raw text without mandatorytext=<value>wrappers. -
Added ownership-safe dependency-only audit updates via
pm update --allow-audit-dep-update/--allow_audit_dep_updatefor append-only non-owner--depadditions. -
Added cache cleanup safety controls on
pm gc:--dry-run, repeatable/comma-delimited--scope index|embeddings|runtime, and deterministicguidanceoutput (including reindex hints after search-artifact cleanup). -
Added linked-test PM-context ergonomics flags
--check-contextand--auto-pm-contextforpm test --runandpm test-all, including preflight summary warnings and run-level execution-context metadata (requested_pm_context_mode,auto_pm_context_applied). -
Added hardened background-run attribution fallback for
requested_byinpm test-runsmetadata: explicit author ->PM_AUTHOR-> settings author default ->USER/LOGNAME/USERNAME-> OS username ->unknown. -
Added contract/completion alias parity improvements:
pm contractsnow publishes canonical flag + alias metadata for command surfaces, and generated completion scripts include accepted alias candidates from the shared contract registry. -
Added extension lifecycle flag-forwarding parity so subcommand forms (
pm extension manage ...,pm extension doctor ...) honor the same action flags as top-level action forms. -
Added command-flag contract parity coverage for
pm contracts --flags-onlyacross core command families (comments,notes,learnings,files,docs,history,config,restore,delete,extension,test-runs,validate) plus action-scopedcommand_flagsprojection when filtering with--actionand no explicit--command. -
Added additive governance
summarymetrics topm comments-auditoutput (totals, coverage ratio/percent, andby_type) while preserving existing export payloads. -
Added append-only ownership-safe audit bypass parity for
pm notesandpm learningsvia--allow-audit-comment, including ownership-conflict guidance, completion surfaces, contracts, and Pi wrapper action mapping. -
Added non-silent bare
pm test-runsbehavior so the root command defaults to list output when no subcommand is supplied. -
Added refined linked-test PM-context mismatch diagnostics that explicitly explain per-test
pm_context_modeoverride precedence over run-level--pm-contextvalues. -
Added
pm update --replace-depsatomic dependency replacement mode so existing dependency sets can be replaced in one mutation/history entry. -
Added ownership ergonomics enhancements:
pm release --allow-audit-releasefor non-owner handoffs that only clear assignee metadata, pluspm getclaim_statemetadata with current assignee and latest claim/release history context. -
Added
pm contracts --schema-only --action createx-create-required-optionsmetadata so machine consumers can resolve effective create required options per type and create mode. -
Added managed background linked-test execution for
pm test --run --backgroundandpm test-all --background, including persistent run registry metadata, worker lifecycle orchestration, and duplicate-run fingerprint prevention. -
Added
pm test-runslifecycle command surface (list,status,logs,stop,resume) for background run management with health/resource snapshots and tailed stdout/stderr inspection. -
Added configurable test-result tracking policy at
settings.testing.record_results_to_itemswithpm config <project|global> get|set test-result-tracking --policy enabled|disabled. -
Added bounded deterministic item-level
test_runssummary persistence (settings-gated) forpm test --runandpm test-all, including background-run propagation metadata. -
Added bundled managed extension sources at
.agents/pm/extensions/beadsand.agents/pm/extensions/todos, each with manifest + runtime entrypoint wiring for extension-managed command registration. -
Added bundled extension alias installs for
pm extension --install beadsandpm extension --install todos(with parity support for explicit local bundled paths). -
Added unified command/action contract registry exports in
src/sdk/cli-contracts.ts(including JSON Schema Draft 2020-12 tool-parameter contract) for cross-surface CLI + agent parity. -
Added centralized command help narratives across core command paths (
Why use this command, practical examples, and targeted tips) through a shared help composer. -
Added structured CLI error guidance rendering for commander usage failures and runtime
PmCliErrorfailures with deterministic sections (What happened,What is required,Why,Examples, optionalNext steps). -
Added sparse default TOON rendering that emits command payloads directly and omits
null/undefined/empty arrays/empty objects for token-efficient agent workflows while keeping--jsonpayload compatibility. -
Added strict action-scoped Pi tool parameter schema v4 in
src/sdk/cli-contracts.ts(oneOfaction branches with per-action required fields, richer per-field metadata, andadditionalProperties: false). -
Added machine-readable JSON error envelopes for usage/runtime failures when
--jsonis active (type,code,title,detail,required,exit_code, optional remediation fields). -
Added layered help defaults: compact command help by default plus explicit deep-help rendering with
--explain. -
Added machine-readable help payloads for
pm <command> --help --jsonandpm help <command> --jsonwith deterministic option metadata (required, aliases, value format). -
Added
pm contractscommand for runtime contract introspection (--action,--command,--schema-only) including shared schema/action/flag surfaces. -
Added merge-conflict marker detection in item and history parsing paths with actionable remediation guidance.
-
Added
pm healthintegritydiagnostics for conflict markers and parse/JSONL anomalies with deterministic warning codes. -
list*commands now accept--include-bodyto project itembodyinto each returned row when needed for metadata completeness analysis. -
Added
pm aggregategrouped governance queries with expanded--group-bydimensions (parent,type,priority,status,assignee,tags,sprint,release) while keeping default grouped-count mode (parent,type) and optional--count/--include-unparented. -
Added
pm dedupe-auditduplicate corpus checks withtitle_exact,title_fuzzy, andparent_scopemodes plus machine-readable merge suggestions. -
Added list-family projection and ordering controls:
--compact,--fields <csv>,--sort <priority|deadline|updated_at|created_at|title|parent>, and--order <asc|desc>. -
Added expanded
pm comments-auditgovernance filters:--parent,--tag,--sprint,--release, and--priority. -
Added
pm healthvector refresh intent controls:--check-only,--no-refresh, and--refresh-vectors(default targeted refresh behavior is unchanged). -
Added persistent item reminders via repeatable
--reminder at=<iso|relative>,text=<text>support onpm createandpm update(including explicit--clear-reminderssemantics). -
Added
pm update --body/-bsupport (including stdin token--body -) so existing items can backfill or replace body content with standard update history/lock semantics. -
Added
pm calendar(alias:pm cal) with deterministicagenda(default),day,week, andmonthviews across deadlines and reminders, plus--pastand range/filter options. -
Added
pm context(alias:pm ctx) as an agent-first project snapshot command that combines deterministic high-level/low-level active work focus with agenda/reminder context, including blocked fallback when active work is empty. -
Added persistent item scheduled events via repeatable
--eventsupport onpm createandpm update, including one-off entries plus recurrence fields (recur_freq,recur_interval,recur_count,recur_until,recur_by_weekday,recur_by_month_day,recur_exdates) and explicit--clear-eventssemantics. -
Added bounded recurring occurrence expansion to
pm calendarso recurring item events are materialized into agenda/day/week/month windows. -
Added calendar source and recurrence controls:
--include,--recurrence-lookahead-days,--recurrence-lookback-days, and--occurrence-limit. -
Added resilient entry parsing for mutation
--addand create/update repeatable seed flags: CSVkey=value, markdown-stylekey: value, and-stdin-token ingestion are now supported with deterministic normalization. -
Added stdin token support for
pm append --body -and structured comment ingestion forpm comments --add(plain text remains supported). -
Added runtime-configurable item type registry support:
settings.item_types.definitionsplus extensionregisterItemTypes(...)registrations now drive allowed type values, aliases, per-type required create fields/repeatables, option schemas, and type folder routing. -
Added calendar-native built-in item types:
Event,Reminder,Milestone, andMeeting(with deterministic folder routing, completion defaults, and help/usage fallback guidance parity). -
Added
--type-option/--type_optionsupport onpm createandpm updatefor validated per-type metadata (key=valueorkey=<name>,value=<value>, with explicit--clear-type-optionssemantics). -
Added per-type
command_option_policiessupport (settings + extension item-type registrations) forcreate/updateoption-levelrequired,enabled, andvisiblebehavior controls. -
Added type-aware help policy sections for
pm create --help/pm update --helpwhen--type <value>is supplied, including required/disabled/hidden option summaries from active settings/extensions. -
Added type-option schema surfacing in type-aware help (
pm create --help --type <value>/pm update --help --type <value>) including required markers, allowed values, aliases, and option descriptions. -
Added extension-first command routing for deterministic core-command replacement when extension handlers register matching command paths.
-
Added
pm extensionlifecycle management command with mutually-exclusive actions:--install,--uninstall,--explore,--manage,--doctor,--adopt,--adopt-all,--activate, and--deactivate. -
Added extension install source normalization for local paths plus GitHub URL/shorthand forms (
https://github.com/...,github.com/...,--gh/--github owner/repo[/path]) with optional--refsupport. -
Added scope-local managed extension state (
<extensions-root>/.managed-extensions.json) with deterministic metadata for source, install/update timestamps, and GitHub update checks. -
Added
pm extension --doctor(andpm extension doctorshorthand) with consolidated extension diagnostics, normalized warning-code summaries, remediation hints, and optional deep diagnostics via--detail deep. -
Added Extension Host V2 override planes:
registerParser(command-context parsing),registerPreflight(mutation-gate/migration interception), andregisterService(output/error/help plus lock/history/item-store service overrides) with deterministic last-wins precedence. -
Added richer command lifecycle hook payload parity (
beforeCommand/afterCommand) including command options, global options, and final command result context. -
Added live runtime wiring for extension search/vector selectors (
settings.search.provider,settings.vector_store.adapter) inpm searchandpm reindex. -
Added extension item-field default/validation wiring on create/update write paths from
registerItemFields(...). -
Added stable SDK package exports at
@unbrained/pm-cli/sdkwith public extension type contracts anddefineExtension(...)helper. -
Added Ollama-aware semantic auto-default resolution for
pm search/pm reindexwhen semantic settings are unset and local Ollama is installed, including compatibility-safe fallback to keyword mode for implicit default search when auto semantic execution fails. -
Added
pm healthhistory drift diagnostics (history_drift) that detect missing/unreadable history streams and item/hash mismatches against latest historyafter_hash. -
Added
pm healthvectorization diagnostics (vectorization) with targeted stale-ID semantic refresh and deterministic vectorization ledger tracking (search/vectorization-status.json). -
Added configurable missing history-stream policy at
settings.history.missing_streamwithpm config <project|global> get|set history-missing-stream-policy --policy auto_create|strict_error. -
Added configurable sprint/release format policy at
settings.validation.sprint_release_formatwithpm config <project|global> get|set sprint-release-format-policy --policy warn|strict_error. -
Added configurable parent-reference policy at
settings.validation.parent_referencewithpm config <project|global> get|set parent-reference-policy --policy warn|strict_error. -
Added reusable create templates via
pm templates save/list/showand additivepm create --templatesupport with deterministic explicit-flag override precedence. -
Added additive history diagnostics:
pm history --diff(changed-field summaries) andpm history --verify(hash-chain/current-hash validation output). -
Added linked artifact path hygiene features for
pm filesandpm docs:--migrate,--validate-paths, and--audit(pluspm files --listfor explicit listing). -
Added repeatable
--add-globsupport forpm filesandpm docsto expand deterministic file/doc matches (plain glob orpattern=<glob>,scope=<scope>,note=<text>entries). -
Added deterministic
--tagcompletion suggestions in bash/zsh/fish scripts derived from tracked item metadata. -
Added history-only restore recovery so
pm restorecan recreate missing/deleted item files when the corresponding history stream exists. -
Added first-class
pm notesandpm learningscommands with parity topm comments(<id> [text],--add,--limit,--author,--message,--force) including structured/stdin payload parsing. -
Added command-surface parity updates for
notes/learningsacross help narratives, shell completion scripts, command-aware output summaries, and Pi wrapper action routing. -
Added CLI/Pi shared contract parity for extension lifecycle actions (
extension-install,extension-uninstall,extension-explore,extension-manage,extension-doctor,extension-adopt,extension-adopt-all,extension-activate,extension-deactivate) and their schema parameters (target,scope,github,ref). -
Added integration regressions for repeated
pm files --add/pm docs --addmutation flows to keep linked-artifact add workflows stable across subsequent command invocations. -
Added transactional linked/log mutation support on
pm updatevia repeatable--comment,--note,--learning,--file,--test, and--docflags (including explicit--clear-comments|--clear-notes|--clear-learnings|--clear-files|--clear-tests|--clear-docssemantics) so metadata + linked surfaces can be updated in one mutation. -
Added dependency mutation support on existing items through
pm update: repeatable--depadd plus explicit--clear-depssemantics and repeatable--dep-remove/--dep_removeselector removals, with parity across help/completion/contracts/Pi wrapper surfaces. -
Added read-only dependency visualization command
pm depswith deterministictree(default) andgraphprojections, including cycle-safe traversal and missing-node reporting. -
Added
pm update --close-reason/--close_reasonsupport so callers can explicitly setclose_reason, and clear it with--unset close-reason, without usingpm close. -
Added standalone
pm validatecommand with deterministic check payloads for metadata completeness, closed-item resolution fields, linked-file/orphaned-file hygiene, and item/history drift. -
Added metadata-profile validation policy controls (
core|strict|custom) forpm validate --check-metadata, plus config surfacesmetadata-validation-profileandmetadata-required-fieldsfor settings-backed required-field governance. -
Added
pm validate --scan-mode default|tracked-allfor file-check candidate selection, including explicitcandidate_total/candidate_scannedreporting while preserving compatibility fields. -
Added
pm validate --scan-mode tracked-all-strictplus structured file-check exclusion reporting (excluded_by_reason) so tracked coverage behavior is explicit and machine-readable. -
Added explicit tracked-all-strict force-inclusion visibility in
pm validatefile-check details (strict_mode_forces_pm_internals,strict_mode_forces_pm_internals_notice) plus warning tokenvalidate_files_tracked_all_strict_forces_pm_internals. -
Added
pm validate --strict-exit(alias--fail-on-warn) to return non-zero exit (1) when validation warnings are present (ok=false). -
Added
pm contracts --runtime-only(alias--active-only) and runtime action availability metadata (action_availability) so machine callers can filter to invocable actions in current runtime conditions. -
Added extension lifecycle adopt action (
pm extension --adopt) to register existing unmanaged installs into managed state metadata without reinstalling extension files (with optional GitHub provenance via--gh/--github+--ref). -
Added extension lifecycle bulk adopt action (
pm extension --adopt-all) to register all unmanaged installs in selected scope into managed state metadata without reinstalling extension files. -
Added extension triage update-health diagnostics (
update_health_coverage,update_health_partial) and normalized warning-code surfacing (warning_codes, includingextension_update_health_partial_coverage) forpm extension --manage/pm extension --doctor. -
Added strict warning exit controls for extension diagnostics (
pm extension --doctor --strict-exit, alias--fail-on-warn) plus machine-usable blocking-failure indicators (blocking_failure_count,has_blocking_failures). -
Added explicit extension state semantics in extension listings/diagnostics (
activecompatibility alias,enabled,runtime_active,activation_status) so configured-vs-runtime status is unambiguous. -
Added unknown capability guidance hardening:
extension_capability_unknownwarnings now include inline allowed capability lists and nearest-match suggestions when confidence is high, and health/doctor payloads includecapability_guidancemetadata. -
Added health parity warning surfacing for extension update-check partial coverage (
extension_update_health_partial_coverage) sopm healthmirrors extension triage visibility when unmanaged loaded extensions reduce coverage. -
Added extension capability contract metadata publishing for diagnostics consumers (
capability_contract.version,capability_contract.capabilities,capability_contract.legacy_aliases) plus legacy alias guidance (migration/validation->schema) in unknown-capability diagnostics. -
Added extension diagnostics/runtime controls:
pm extension --doctor --detail deep --trace,pm extension --manage --runtime-probe, and--fix-managed-statesupport formanage/doctor, with parity wiring across CLI contracts, shell completion, and Pi wrapper arguments. -
Added
pm close --validate-close [warn|strict]for additive close-time resolution-field validation (resolution,expected_result,actual_result) with warning-first default behavior. -
Added
pm files --append-stablefor minimal-diff file-link appends that preserve existing link order and reduce history patch churn during large audits. -
Added
pm create --create-mode strict|progressiveso strict remains default while governance workflows can use staged progressive creation. -
Added
pm comments --allow-audit-commentto permit append-only audit comments on items owned by other assignees without broad ownership override semantics. -
Added
pm comments-auditfull-history export mode (--full-history) with mutually-exclusive latest controls, explicit export metadata (filters.full_history,export.mode,export.row_count), and NDJSON-friendlyrows[]payload support. -
Added ownership-safe non-owner metadata update mode on
pm updatevia--allow-audit-update/--allow_audit_update, with explicit lifecycle/ownership/linkage guardrails. -
Added
pm update-manybulk mutation workflow with deterministic filter targeting,--dry-runplanning, checkpoint capture, and--rollback <checkpoint-id>restore support. -
Added
pm update-manylinked-array mutation parity withpm update(--dep,--comment,--note,--learning,--file,--test,--doc,--reminder,--event,--clear-*,--replace-deps,--replace-tests), including deterministic dry-run/apply actionability for linked-array payloads and command/contracts/completion/help parity updates. -
Added task lifecycle alias commands:
pm start-task,pm pause-task, andpm close-taskfor discoverable claim/update/close/release workflows. -
Added
pm contractsprojection flags--flags-onlyand--availability-onlyfor lightweight machine-readable output selection. -
Added completion mode controls:
pm completion --eager-tagsfor embedded tag expansion and hiddenpm completion-tagshelper command for default lazy tag lookup. -
Added
pm calendar --full-periodfor anchored day/week/month windows without now-clipping. -
Added
pm activitytimeline filters (--id,--op,--author,--from,--to) and JSON line stream mode (--stream [rows|ndjson|jsonl]). -
Added compatibility-safe extension manifest/command migration aids: legacy capability aliases (
migration/validation) now remap toschemawithextension_capability_legacy_alias, and legacy command-definitionhandleraliases map torunwithextension_command_definition_legacy_handler_alias. -
Added
--offsetpagination and JSON-only--streamoutput mode forpm listand allpm list-*command families to improve large-result processing ergonomics. -
Added additive
pm health --strict-directoriesbehavior with required-vs-optional directory diagnostics (missing_required,missing_optional) so optional built-in item-type directory gaps do not fail default health runs. -
Added strict warning exit controls for health diagnostics (
pm health --strict-exit, alias--fail-on-warn) for CI-friendly non-zero health gating. -
Added
pm config <project|global> listandpm config <project|global> exportfor config-key discovery and one-shot resolved snapshot export. -
Added explicit extension manage update-check reporting with per-extension
update_check_status/update_check_reasonfields and triageupdate_check_status_totals. -
Added explicit
--progressflag support topm test,pm test-all, andpm reindexso non-interactive runs can opt into deterministic stderr progress visibility. -
Added additive linked-test runtime environment controls: repeatable
--env-set/--env-clearand--shared-host-safeonpm test --runandpm test-all. -
Added per-linked-test runtime directives in linked test metadata (
env_set,env_clear,shared_host_safe) for deterministic command-level execution control. -
Added linked-test PM-context and strict-governance controls:
--pm-context schema|tracker|auto,--fail-on-context-mismatch,--fail-on-skipped,--fail-on-empty-test-run, and--require-assertions-for-pmonpm test --runandpm test-all. -
Added linked-test PM-context auto-routing (
--pm-context auto) and per-linked-test context override metadata (pm_context_mode=schema|tracker|auto) for mixed-mode linked test execution. -
Added linked-test assertion metadata support (
assert_stdout_contains,assert_stdout_regex,assert_stderr_contains,assert_stderr_regex,assert_stdout_min_lines,assert_json_field_equals,assert_json_field_gte) with deterministic assertion-failure classification and per-runexecution_contextmetadata inrun_results. -
Added structured linked-test failure classification in
run_results(failure_category) and aggregatedfailure_categoriestotals inpm test/pm test-allresults for triage (infra_collisionvsassertion_failureand related categories). -
Added standalone
pm validatelinked command-reference diagnostics (command_references) with default-on stale PM-id detection and dedicated warning token (validate_command_references_stale_pm_ids:<count>). -
Added default-on resolution remediation command hints in
pm validatedetails for missing resolution metadata (resolution,expected_result,actual_result). -
Added unquoted multi-word query support for
pm search <keywords...>so variadic tokens are normalized into one query string without requiring shell quoting. -
Added
--parent <id>filtering support topm listand allpm list-*command families, with shared contract/completion/Pi wrapper parity. -
Added
pm searchprojection controls (--compact,--full,--fields <csv>) with deterministic projection metadata in result payloads. -
Added extension command metadata surfacing (
action,intent,examples,failure_hints, argument/flag descriptors) in dynamic--helptext and--help --jsonpayloads. -
Added runtime extension command/action schema inclusion in
pm contractsoutput (extension_commands, merged action availability/schema branches, extension-sourced command flag metadata).
settings.output.default_formatnow drives default command rendering forprintResult-based commands (without requiring explicit--json), while explicit per-command format decisions still take precedence.pm create --template <name>now allows template-providedtypedefaults to satisfy create requirements when--typeis omitted on the command line.- Relative time parsing now supports preset
nowand negative offsets (for example-1d) across shared ISO/relative parsing paths, restoring documentedpm activity --from/--tobehavior. pm list-opennow resolves against workflow-configuredopen_statusvalues instead of assuming literal statusopen, so customized workflows (for exampletriage) are returned correctly.- Bundled
beads/todosextension command help now includes discoverable option flags (--file,--folder,--author,--message, and related flags) after install, matching runtime-supported invocation surfaces. - Updated command-by-command documentation parity across
README.md,PRD.md,docs/ARCHITECTURE.md, andAGENTS.mdto reflect contracts projection behavior,comments-auditsummary metrics,notes/learningsaudit bypass parity, roottest-runslist behavior, and PM-context mismatch guidance. - Removed the
pm installcommand surface; extension lifecycle installs now flow throughpm extensiononly. pm beads import,pm todos import, andpm todos exportare now extension-discovered command paths that appear only after corresponding bundled extensions are installed and active.- Commander option normalization, shell completion flag generation, and Pi wrapper action/schema/arg mapping now consume the shared command contract registry to reduce cross-surface drift.
- Ownership-conflict guidance for
pm comments --addnow recommends--allow-audit-commentbefore--forcefor append-only audit workflows. pm searchnow defaults to compact projection for both TOON and JSON output unless callers request--fullor explicit--fields.pm getmissing-item guidance now uses deterministic recovery examples (pm list-open --limit 20,pm search "<keyword>" --limit 10) instead of echoing invalid IDs.pm helpandpm help <command>now exit successfully without trailing invalid-usage envelopes.- Runtime
PmCliError.contextfields (required,why,examples,next_steps, and optional code/type overrides) now flow through canonical text/JSON guidance rendering. - Top-level
--jsonerror handling now emits canonical machine-readable diagnostics instead of text-only guidance. pm historymalformed stream errors now include explicit repair/restore remediation guidance.- Extension schema-capability registrations now enforce stricter deterministic validation for
registerFlags,registerItemFields,registerItemTypes, andregisterMigrationinput shapes. - Commander error output now emits a single high-signal structured guidance payload (duplicate default commander stderr lines are suppressed).
pm commentsnow accepts optional positional text shorthand (pm comments <ID> "<text>") as an intuitive alias for--add <text>, and tolerates bare--authorby falling back to existing author resolution (PM_AUTHOR-> settings default ->unknown).- Default
list*output remains front-matter-only;bodyprojection is now explicit and opt-in via--include-bodyto preserve lightweight list payloads. - Calendar command output now defaults to markdown for agent/human readability while preserving explicit
--format toon|json|markdownand global--jsonoverrides; all other commands keep existing TOON-default behavior. - Calendar markdown summaries now include scheduled-event counts and event rendering includes recurring/location metadata where present.
pm comments-auditnow treats--latest 0as a valid summary-only export mode with deterministicexport.row_count = 0semantics.pm comments-audit --latestand--full-historynow enforce explicit mutual exclusivity in guidance/help output.pm contracts --command <name>now scopes action/command/availability output to the selected command for lower-noise machine payloads; use no--commandfilter for full corpus output.- Mutation-triggered search cache invalidation now covers linked-test run-tracking paths (
pm test --run,pm test-all) and lifecycle alias mutation flows. - Calendar JSON/markdown summaries now expose deterministic aggregate breakdowns (
by_kind,by_type,by_status,recurring_events) and markdown event lines now include richer metadata tokens (item type, recurrence rule, end-time projection, timezone/location, and description context). - Command-aware output summaries now consume the canonical calendar
summary.eventsstructure (instead of stalesummary.total) and emit richer calendar highlight metadata (events,deadlines,reminders,scheduled,view). - Mutation parsing errors for entry-style flags now include actionable format guidance and explicit stdin-token usage hints to reduce malformed-input retries.
pm createlog-seed repeatables (--comment,--note,--learning) now reject parsed unsupported keys to prevent silent narrative truncation when unquoted comma segments resemble key/value tokens; guidance now explicitly routes punctuation-heavy text to quotedtext=..., markdown key/value input, or stdin token usage.- Type validation/filtering/completion now resolve from the runtime registry across create/update/list/search/calendar/completion/init/health/storage paths while preserving built-in defaults when no custom type config exists.
- Commander required-option UX for missing
--typenow includes rationale, active allowed values, and concrete fix examples. - Type-governed
pm createrequired-option failures now aggregate all missing required create flags plus required type-option keys into one deterministic usage error payload and include a deterministic type-specific "next valid example" command. - Unavailable-command help requests (
pm <unknown> --help) now emit explicitunknown commandguidance and usage exit status (2) instead of successful help-path exits. - Dynamic extension command help now supports
registerFlagspolicy metadata (required,enabled,visible) with additive markers and hidden-flag suppression. - Dynamic extension flags can now declare
type/value_typemetadata (string/number/boolean) for deterministic loose-option coercion on matching command paths. - Search and reindex semantic execution now supports extension provider/adapter primary paths with deterministic fallback to built-in provider/vector configuration when available.
pm reindex --mode semantic|hybridnow rewritessearch/vectorization-status.jsonto keep health-time vector freshness checks synchronized with indexed corpus state.pm healthnow includes managed extension-state diagnostics and warnings for project/global extension roots.- Documentation surfaces (
README.md,docs/EXTENSIONS.md,docs/ARCHITECTURE.md,PRD.md) now include extension lifecycle-manager workflows and install-source equivalence guidance. - Date/deadline parsing now accepts month-relative offsets (
+6m) and normalized date-string variants (for example2026-03-31T13-59and20260331T135900Z) across deadline, reminder, event, list/search filter, and calendar date inputs while preserving canonical ISO persistence. pm beads import --file -now fails fast when stdin is an interactive TTY and returns explicit piped-input/EOF guidance instead of waiting for manual stream termination.- CLI top-level error handling now preserves canonical exit-code mapping via graceful
process.exitCodesemantics to reduce buffered output truncation risk in emulated terminal environments. - Output rendering now treats broken-pipe writes (
EPIPE) as expected pipeline behavior with stream-specific exit semantics: stdoutEPIPEpreserves success exits for early-terminated read pipelines, stderrEPIPEremains non-zero, and unhandled Node stack traces are suppressed. - Linked test runtime execution now uses shell-compatible spawn orchestration, closes child stdin for non-interactive runs, emits interactive stderr heartbeat progress for long-running commands, and applies deterministic timeout/maxBuffer diagnostics with force-kill fallback for stubborn subprocess trees.
- History-touching commands now enforce
settings.history.missing_streamconsistently across read/diagnostic paths (history,activity,stats,health) and existing-item mutation/restore flows. - Linked-test sandbox runs now seed project/global
settings.jsonandextensions/directories into temporary sandbox roots so extension-defined type/filter behavior matches direct workspace commands. pm test --addandpm create --testnow requirecommand=...for new linked-test entries (optionalpath=...is metadata-only); runtime still skips legacy stored path-only entries with deterministic diagnostics.pm updatenow auto-clears staleclose_reasonwhen reopening items fromclosedto non-terminal statuses unless an explicit--close-reasonvalue is provided in the same mutation.pm claimnow allows takeover of already-assigned non-terminal items without--force; force remains required for terminal-status or lock-override claim paths.pm commentsguidance is now explicit about--forceusage across rich help, shell completion, and docs parity surfaces.- Ownership-conflict guidance now includes explicit approved
--forcescenarios (PM audits, coordinated metadata correction, and ownership handoff cleanup) while preserving ownership enforcement semantics. pm create/pm updatenow validate--sprintand--releaseusing a warning-first default (warn) with deterministicvalidation_warning:*signals, and optional strict rejection mode (strict_error) for enforcement.pm create/pm updatenow validate missing--parentreferences using warning-first defaults (validation_warning:parent_reference_missing:<id>) with optional strict rejection mode (strict_error).- CLI contracts and Pi wrapper action/schema mapping now include additive
templates-*actions,create --template,history --diff/--verify, and files/docs linked-path hygiene flags. - CLI contracts, shell completion, and Pi wrapper action/parameter mappings now include additive parity for
validate,close --validate-close, list--offset/--stream, and long-run--progresscontrols. pm validate --check-files --scan-mode tracked-allnow excludes PM-internal storage files by default, adds--include-pm-internalsfor explicit internal-audit scans, and reports filtered/raw candidate counts (candidate_total*,candidate_scanned*,pm_internal_excluded_count);tracked-all-strictnow also reports explicit force-inclusion visibility/warnings.pm extension --manageandpm healthextension diagnostics now include condenseddetails.triagesummaries with prioritized counts and remediation-oriented next steps alongside full detailed payloads.pm extension --manage/pm extension --doctorwarning surfaces are now normalized so top-levelwarningsalign with triage warning codes/counts, and update-health partial coverage warnings only trigger when unmanaged extensions are action-required.pm extension --managekeeps compatibility-safe default runtime state reporting (runtime_active/activation_statusunchanged) unless--runtime-probeis explicitly requested.- Extension activation validation failures now carry structured registration trace metadata that deep doctor trace mode can surface for actionable remediation.
- CLI/contracts/completion/Pi wrapper parity now includes linked-test runtime env controls (
--env-set,--env-clear,--shared-host-safe) andpm validate --check-command-references.
- npm package identity switched to scoped publish target
@unbrained/pm-clito avoid naming collisions with existing unscoped packages while keeping thepmexecutable unchanged. - Versioning policy now follows calendar SemVer-compatible releases:
YYYY.M.Dfor the first release of a day andYYYY.M.D-Nfor subsequent same-day releases (N >= 2). - Installer defaults now target
@unbrained/pm-cliwhile preservingPM_CLI_PACKAGEoverride support for local/tarball smoke tests.
- Added automated version policy enforcement script (
scripts/release-version.mjs) with tag/version consistency checks and registry-aware same-day release sequencing. - Added tracked-file credential leak scanner (
scripts/check-secrets.mjs) and wired it into CI/release gates. - Added packaged
npxsmoke test (scripts/smoke-npx-from-pack.mjs) to verify tarball executability before release publish. - Release workflow now uses the GitHub
releaseEnvironment, validates version sequencing before publish, and creates a GitHub Release with generated notes after npm publish.
pm listnow excludes terminal statuses (closed,canceled) by default, showing only the active working-set of items. Usepm list-allto include all items regardless of status. This aligns with common CLI conventions (analogous todocker psvsdocker ps -a) and makespm listthe intuitive day-to-day view without having to typepm list-openor filter manually.pm list-allis unchanged and continues to return all items.
- Automated npm publish workflow (
.github/workflows/release.yml) triggered onv*.*.*version tags: runs full build, typecheck, test, and coverage suite before publishing to npm; requiresNPM_TOKENsecret. - npm provenance attestation enabled (
--provenanceonnpm publish) linking each release to its source commit and build pipeline via Sigstore; consumers can verify supply chain integrity and npm shows a Provenance badge. - Node 24 added to CI matrix (
ci.ymlandnightly.yml) ensuring forward compatibility with the Node 24 LTS line. - Node 25 (current release) added to nightly CI matrix for early forward-compatibility detection.
- Dependabot configured (
.github/dependabot.yml) for weekly npm and GitHub Actions dependency updates.
docs/ARCHITECTURE.md— comprehensive internal architecture guide covering source tree, item storage, mutation contract, history/restore, extension system, search architecture, and testing.docs/EXTENSIONS.md— extension development guide covering manifest format, fullExtensionApireference, lifecycle hooks, built-in extensions, and a minimal example.docs/**added topackage.jsonfilesallowlist so documentation ships with the npm package.- README links to new
docs/guides from the Repository Structure section.
package.jsonnow includesrepository,bugs,homepage, andauthorfields for proper npm page display and discoverability.- Keywords expanded: added
ai,git-native,task-tracker,coding-agents. - GitHub issue templates added (
.github/ISSUE_TEMPLATE/bug-report.ymlandfeature-request.yml) for structured bug reports and feature requests. - Pull request template added (
.github/PULL_REQUEST_TEMPLATE.md) to guide contributors through the checklist including pm item links, test evidence, and docs updates.
pm completion bash— outputs a bash tab-completion script. Source it or addeval "$(pm completion bash)"to~/.bashrc.pm completion zsh— outputs a zsh tab-completion script. Addeval "$(pm completion zsh)"to~/.zshrc.pm completion fish— outputs a fish tab-completion script. Pipe to~/.config/fish/completions/pm.fish.pm completion <shell> --json— returns structured{ shell, script, setup_hint }for programmatic use.- Completion covers all subcommands, global flags, list filters (
--type,--assignee,--sprint,--release,--priority, etc.), search modes, item types, statuses, priorities, and shell names.
--assignee <value>filter for alllist*commands — exact match onassigneefield; use--assignee-filter unassignedto filter for unassigned items.--sprint <value>filter for alllist*commands — exact match onsprintfield.--release <value>filter for alllist*commands — exact match onreleasefield.
- Full command surface:
init,create,get,update,append,close,delete,claim,release,list,list-all,list-draft,list-open,list-in-progress,list-blocked,list-closed,list-canceled,comments,files,docs,test,test-all,stats,health,gc,history,activity,restore,search,reindex. pm config <project|global> set definition-of-done --criterion <text>andpm config <project|global> get definition-of-donefor team-level Definition of Done criteria management.pm beads import [--file <path>]built-in Beads JSONL import command (extension-packaged).pm todos import [--folder <path>]andpm todos export [--folder <path>]built-in todos markdown import/export commands (extension-packaged).
- Canonical front-matter schema with required fields:
id,title,description,type,status,priority,tags,created_at,updated_at. - Full optional metadata surface:
deadline,assignee,author,estimated_minutes,acceptance_criteria,definition_of_ready,order,goal,objective,value,impact,outcome,why_now,parent,reviewer,risk,confidence,sprint,release,blocked_by,blocked_reason,unblock_note. - Issue-specific metadata fields:
reporter,severity,environment,repro_steps,resolution,expected_result,actual_result,affected_version,fixed_version,component,regression,customer_impact. - Deterministic key ordering and stable canonical serialization across all item mutations.
tagssorted lexicographically and deduplicated on every write.risk/severity/confidenceacceptmedalias normalizing to storedmedium.regressionacceptstrue|false|1|0boolean inputs.- Linked arrays (
dependencies,comments,notes,learnings,files,tests,docs) all have deterministic sort orders. - Relative deadline inputs (
+6h,+1d,+2w) resolved to absolute ISO timestamps at write time. - Sentinel value
none(case-insensitive) for any scalar option unsets/omits the field and records intent in history.
- All schema fields passable explicitly: required seed flags (
--dep,--comment,--note,--learning,--file,--test,--doc);--ac/--acceptance-criteria/--acceptance_criteriaalias;--estimate/--estimated-minutes/--estimated_minutesalias; snake_case aliases for all hyphenated flags. --unblock-note/--unblock_notefor recording unblock rationale.- Issue metadata flags:
--reporter,--severity,--environment,--repro-steps,--resolution,--expected-result,--actual-result,--affected-version,--fixed-version,--component,--regression,--customer-impact. - Planning/workflow flags:
--parent,--reviewer,--risk,--confidence,--sprint,--release,--blocked-by,--blocked-reason,--definition-of-ready,--order/--rank,--goal,--objective,--value,--impact,--outcome,--why-now.
- All
pm createoptional fields also supported onpm update, including--title/-tand--acaliases. --typemutation support for changing item type after creation.--status closedrejected with clear error directing callers topm close <ID> <TEXT>.
- Append-only RFC6902 patch history per item in
.agents/pm/history/<id>.jsonl. - SHA-256 before/after hash chain per history entry for integrity verification.
pm history <ID> [--limit]andpm activity [--limit]commands.pm restore <ID> <TIMESTAMP|VERSION>replays history to exact target state and appends arestorehistory event.- Hash verification on restore with loud failure on mismatch.
- Lock-file (
locks/<id>.lock) with TTL-based stale detection and PID/owner/timestamp metadata. - Atomic writes via temp-file + rename for all item mutations.
- Claim/release ownership model with conflict exit code
4. --forcefor stale-lock steal and terminal-status claim override.- Conflict guard for mutations against items owned by another assignee.
pm search <keywords>in keyword, semantic, and hybrid modes with deterministic ordering.--include-linkedflag expands keyword/hybrid lexical corpus with linked docs/files/tests content; scope-root containment enforced with both resolved-path and symlink-realpath checks.--limit 0returns a deterministic empty result without executing provider embedding queries.- Deterministic exact-title token lexical boost for keyword and hybrid lexical component.
- Configurable multi-factor lexical tuning via
search.tuningsettings object (title_exact_bonus,title_weight,description_weight,tags_weight,status_weight,body_weight,comments_weight,notes_weight,learnings_weight,dependencies_weight,linked_content_weight). search.score_thresholdfor mode-aware minimum score filtering (default0).search.hybrid_semantic_weightfor configurable semantic-vs-lexical blend in hybrid mode (default0.7).pm reindexrebuilds deterministic keyword cache artifacts (index/manifest.json,search/embeddings.jsonl);--mode semantic|hybridgenerates embeddings and upserts to the active vector store.- Embedding provider abstraction for OpenAI-compatible and Ollama providers with deterministic per-request input deduplication, cardinality validation, configurable batch sizing (
search.embedding_batch_size), and per-batch retry semantics (search.scanner_max_batch_retries). - Vector store adapter abstraction for Qdrant and LanceDB with deterministic snapshot persistence + reload across process boundaries, query-hit ordering (score desc, id asc tie-break), and upsert/delete operations.
- Mutation-triggered stale keyword artifact invalidation and best-effort semantic embedding refresh for affected item IDs (including vector pruning for deleted items).
- Global (
~/.pm-cli/extensions) and project (.agents/pm/extensions) extension directories with deterministic load order and project-over-global precedence. - Extension manifest with capability declarations (
commands,renderers,hooks,schema,importers,search); registrations outside declared capabilities fail activation deterministically. api.registerCommand,api.registerRenderer,api.registerFlags,api.registerItemFields,api.registerMigration,api.registerImporter,api.registerExporter,api.registerSearchProvider,api.registerVectorStoreAdapterregistration surface.api.registerImporter/api.registerExporterauto-wire<name> import/<name> exportextension command paths with isolated handler execution.- Hook lifecycle:
beforeCommand,afterCommand,onWrite,onRead,onIndexwith per-hook context snapshot isolation and failure containment. - Command result override and renderer override with cloned context snapshots to prevent mutation leakage.
- Dynamically surfaced extension command paths include help metadata derived from
registerFlagsdefinitions. - Mandatory migration blocking:
mandatory=truemigrations with non-applied status block write commands (bypassable with--forceon force-capable commands). - Extension entry paths enforced to remain within extension directory via symlink-resolved realpath check.
- Loose-option parser hardening: null-prototype option maps and prototype key rejection (
__proto__,constructor,prototype). pm healthreports extension load/activation diagnostics and migration status summaries.
- Built-in Beads import: maps Beads JSONL records to PM items with deterministic defaults and
op: "import"history entries. - Built-in todos import/export: round-trips todos markdown (JSON front-matter + body) with deterministic field defaults, canonical optional metadata preservation (planning/workflow and issue fields), hierarchical ID preservation (e.g.
pm-legacy.1.2), andmedalias normalization. - Built-in Pi agent extension at
.pi/extensions/pm-cli/index.ts: registers apmtool with full v0.1 action dispatch parity, camelCase wrapper parameters for all canonical scalar metadata, explicit empty-string passthrough for empty-allowed flags, numeric-flag stringification, claim/release parameter forwarding, and packaged CLI fallback (node <package-root>/dist/cli.jswhenpmis unavailable).
pm test <ID> --addrejects entries invokingpm test-all(includingnpx,pnpm dlx,npm execlauncher forms) to prevent recursive orchestration loops.pm test <ID> --rundefensively skips legacypm test-allentries and reports deterministic skip diagnostics.pm test <ID> --addrejects sandbox-unsafe test-runner commands (npm run test,pnpm run test,yarn run test,bun run test,vitestdirect runners) unless explicitly sandboxed withnode scripts/run-tests.mjs ...or bothPM_PATHandPM_GLOBAL_PATH.pm test-alldeduplicates linked entries per run (keyed by scope + normalized command or scope + path); duplicate-key timeout conflicts resolve to the maximumtimeout_seconds.
- TypeScript source with ESM modules and
tsccompilation; strict null checks and no implicit any. - Vitest test suite (52 files, 473 tests) with 100% lines/branches/functions/statements coverage gate enforced in CI.
- Sandboxed test runner
scripts/run-tests.mjscreates a temporary directory, sets bothPM_PATHandPM_GLOBAL_PATH, runs the requested Vitest command, and cleans up afterward. - CI matrix across Ubuntu, macOS, and Windows on Node 20; additional Ubuntu run on Node 22.
- Nightly validation workflow for Node 20 and 22.
- Installer scripts
scripts/install.sh(Linux/macOS) andscripts/install.ps1(Windows PowerShell) with idempotent update flows and post-installpm --versionverification. - npm packaging allowlist (
filesinpackage.json) andprepublishOnlybuild guard. - Repository governance baseline:
LICENSE(MIT),CHANGELOG.md,CONTRIBUTING.md,SECURITY.md,CODE_OF_CONDUCT.md.
pm createandpm updateexplicit-field contracts expanded to cover all optional schema fields so callers can always pass complete intent without relying on defaults.- Documentation contracts (
PRD.md,README.md,AGENTS.md) fully updated to cover all implemented command surfaces, schema fields, extension API, safety guardrails, and contributor workflow.
- Status parsing now accepts
in-progressand normalizes to canonicalin_progressacrosspm create,pm update,pm calendar, andpm test-allfilters. - Item/front-matter and built-in import normalization now resolve
in-progresstoin_progressto avoid validation failures while preserving deterministic stored status values. pm todos importcorrectly preserves hierarchical IDs (e.g.pm-legacy.1.2) from todos front-matter verbatim.pm todos importcorrectly round-trips canonical optional metadata fields (planning/workflow and issue metadata).- Pi extension packaged CLI fallback path resolves correctly from the package root.
pm search --mode semantic|hybrid --limit 0short-circuits without executing provider embedding queries.- Embedding provider request deduplication preserves correct output fan-out back to original input cardinality and order.
- LanceDB snapshot persistence correctly reloads across process boundaries.
- Initial
pm-cliv0.1.0 command surface and release-hardening baseline.