Improve agent read-path token efficiency#39
Conversation
Add explicit pm get --full support so agents can use the same full-read muscle memory that list/search/history/activity already expose, while keeping --fields mutually exclusive for narrow projections. Avoid duplicated compact history diff payloads, steer health quick-check docs/help toward --summary JSON, and record pm-rnpb evidence from sub-agent audits, manual temp dogfood, secret scan, static quality, and the full release gate.
Reviewer's GuideAdds explicit --full support to pm get (mapped to deep item reads and mutually exclusive with --fields), wires it through CLI options, runtime contracts, and shell completions, and optimizes history --diff output plus updates health/help docs for token-efficient read paths. Sequence diagram for pm get --full and --fields handlingsequenceDiagram
actor User
participant PmCli
participant GetCommand
participant runGet
User->>PmCli: pm get <id> --full [--fields]
PmCli->>GetCommand: registerListQueryCommands
PmCli->>GetCommand: execute get action
GetCommand->>runGet: runGet(id, globalOptions, { depth, full, fields })
alt [options.full and options.fields]
runGet-->>GetCommand: throw PmCliError
GetCommand-->>User: exit EXIT_CODE.USAGE
else [options.full and not options.fields]
runGet->>runGet: depth = "deep"
runGet->>runGet: parseGetFields(options.fields)
runGet-->>GetCommand: GetResult (full item read)
GetCommand-->>User: printResult
else [not options.full]
runGet->>runGet: depth = parseGetDepth(options.depth)
runGet->>runGet: parseGetFields(options.fields)
runGet-->>GetCommand: GetResult (depth-based read)
GetCommand-->>User: printResult
end
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
|
Warning Rate limit exceeded
You’ve run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Repository UI (base), Organization UI (inherited) Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (8)
📝 WalkthroughWalkthroughThis PR adds a Changespm get --full flag feature and supporting changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Hey - I've left some high level feedback:
- The
getcommand help text describes--fullas equivalent to--depth deep, but the implementation actually makes--fulloverride any provided--depth; consider clarifying the description to explicitly state the precedence to avoid user confusion.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- The `get` command help text describes `--full` as equivalent to `--depth deep`, but the implementation actually makes `--full` override any provided `--depth`; consider clarifying the description to explicitly state the precedence to avoid user confusion.Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
There was a problem hiding this comment.
Code Review
This pull request improves the agent UX and token efficiency of the pm-cli tool. Key changes include the addition of a --full flag to the get command (equivalent to --depth deep), updated shell completions, and an optimization in the history command to omit the top-level diff field when in compact mode. Documentation and help examples were also updated to favor more concise machine-readable outputs. Feedback identifies a potential breaking change in the history command's JSON schema and suggests enforcing mutual exclusivity between the new --full flag and the existing --depth flag for better command consistency.
| }; | ||
|
|
||
| if (options.diff) { | ||
| if (options.diff && !compact) { |
There was a problem hiding this comment.
This change introduces a breaking change to the JSON output schema for the history command. By omitting the root diff field when compact is true (which is the default), any existing scripts or integrations that rely on result.diff will break when running standard history commands with the --diff flag.
While the information is available within compact_history items, removing the top-level field is a significant change. If token efficiency is the priority, this is a valid optimization, but it should be noted as a breaking change in the release notes.
| if (options.full && options.fields !== undefined) { | ||
| throw new PmCliError("Get projection options are mutually exclusive. Use either --full or --fields.", EXIT_CODE.USAGE); | ||
| } |
There was a problem hiding this comment.
The mutual exclusivity check currently only covers --full and --fields. However, using --full alongside --depth is also contradictory (e.g., --full --depth brief).
To ensure a consistent UX and prevent ambiguous command intent, consider including --depth in the exclusivity check. This would also align with the help text which describes --full as an explicit alternative to --depth deep.
| if (options.full && options.fields !== undefined) { | |
| throw new PmCliError("Get projection options are mutually exclusive. Use either --full or --fields.", EXIT_CODE.USAGE); | |
| } | |
| if (options.full && (options.fields !== undefined || options.depth !== undefined)) { | |
| throw new PmCliError("Get projection options are mutually exclusive. Use either --full or --fields/--depth.", EXIT_CODE.USAGE); | |
| } |
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.agents/pm/features/pm-rnpb.toon:
- Around line 9-11: This PR directly edited system-of-record files under
.agents/pm (e.g., the pm-rnpb.toon record with updated_at/deadline/assignee
fields and other occurrences listed), which is disallowed; instead revert those
manual edits and re-apply the intended changes through the pm workflow/mechanism
that owns .agents/pm records (do not commit direct changes to .agents/pm/**),
and ensure the commit removes all manual modifications flagged (lines around the
pm-rnpb.toon entries and the other listed occurrences) so the authoritative pm
process makes the update.
In @.agents/pm/history/pm-rnpb.jsonl:
- Around line 443-458: This PR directly mutates the autogenerated agent history
(pm-rnpb.jsonl) which must be produced by the pm workflow; revert the manual
edits to the history file, remove the file-level changes from the commit, and
regenerate/apply the intended updates via the approved pm workflow (run the pm
tool that produces history entries for pm-rnpb, e.g., the agent
run/claim/comment/files_add/tests_add steps you intended) so the history is
authored by the system of record; ensure the final commit contains only the
pm-generated output (and not a manual edit), then re-run the verification
commands you listed (tests/static gates) before pushing.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI (base), Organization UI (inherited)
Review profile: CHILL
Plan: Pro
Run ID: 2debf4b1-fead-4e7c-afe2-5ac2c9038240
📒 Files selected for processing (14)
.agents/pm/features/pm-rnpb.toon.agents/pm/history/pm-rnpb.jsonldocs/COMMANDS.mddocs/CONFIGURATION.mdsrc/cli/commands/completion.tssrc/cli/commands/get.tssrc/cli/commands/history.tssrc/cli/help-content.tssrc/cli/register-list-query.tssrc/sdk/cli-contracts.tstests/unit/completion-command.spec.tstests/unit/contracts-command.spec.tstests/unit/get-append-command.spec.tstests/unit/history-activity-command.spec.ts
| {"ts":"2026-05-21T20:35:53.078Z","author":"codex-extensive-audit","op":"claim","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-05-21T20:35:53.078Z"},{"op":"add","path":"/metadata/assignee","value":"codex-extensive-audit"}],"before_hash":"6f67bd13c387dbd88bf438f6845d8723ad58571089d9edd8f8cfdd084485f087","after_hash":"c0567b96151d1feae003f1bd038aaca2ed977244257b36982b2a875a02e7b9f5","message":"Continuing broad agent-UX/token/telemetry dogfood audit and implementation pass"} | ||
| {"ts":"2026-05-21T20:35:54.955Z","author":"codex-extensive-audit","op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/171","value":{"created_at":"2026-05-21T20:35:54.955Z","author":"codex-extensive-audit","text":"Investigation note: duplicate check reused existing active feature pm-rnpb after pm context/search/list-open/list-in-progress. Initial reproducible UX finding: pm get rejects --full and --depth full even though adjacent read commands expose --full; agent recovery works but the mismatch costs extra commands and tokens. Continuing with bounded sub-agent lanes for contracts/docs, temp-project dogfood, and observability/security checks."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-05-21T20:35:54.955Z"}],"before_hash":"c0567b96151d1feae003f1bd038aaca2ed977244257b36982b2a875a02e7b9f5","after_hash":"4da0710a7db23214b375501db01766cd26607d256f05ea6750b5641e4e9722bf"} | ||
| {"ts":"2026-05-21T20:38:49.035Z","author":"codex-observability-security-audit","op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/172","value":{"created_at":"2026-05-21T20:38:49.035Z","author":"codex-observability-security-audit","text":"Evidence 2026-05-21 bounded no-edit observability/security/GitHub audit: tracked secret scan passed; scripts/prod telemetry ops tree remains gitignored/untracked; public docs only mention Sentry/reliability policy-level hooks, not raw private ops details; direct history verification still fails for pm-rnpb and pm-xk39 and validate history drift reports 31 affected items, so keep existing pm-xk39 redaction/history-integrity blocker open; pm health brief is ok with telemetry enabled and one queued/draining local event; live stack healthy with telemetry queue ready=0 consumers=1 and 6670 events in last 24h; required Sentry/telemetry gate passed with Sentry critical=0 high=0 total=0 and telemetry finish_error_rate_pct=3.28 missing_error_code_rows=0; direct sentry issue list returned no unresolved fatal/error issues; GitHub has no open issues or PRs; current HEAD 6c924a45 CI run 26247416099 passed all check runs. Older nightly run 26213241053 failed on Windows Node 20 at prior sha 375b6979 in tests/unit/check-secrets.spec.ts with SyntaxError, but later current-head CI is green."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-05-21T20:38:49.035Z"}],"before_hash":"4da0710a7db23214b375501db01766cd26607d256f05ea6750b5641e4e9722bf","after_hash":"e99bea624ad2e3a97d865bcbc1df94395d818e60dad0bfab39badce38b326cd1"} | ||
| {"ts":"2026-05-21T20:39:13.667Z","author":"codex-extensive-audit","op":"files_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-05-21T20:39:13.667Z"}],"before_hash":"e99bea624ad2e3a97d865bcbc1df94395d818e60dad0bfab39badce38b326cd1","after_hash":"457076443d7d626f9edd414cccf7e1540f9b8087d2a9d6f4c21d73800c9d1bf6"} | ||
| {"ts":"2026-05-21T20:39:15.458Z","author":"codex-extensive-audit","op":"files_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-05-21T20:39:15.458Z"}],"before_hash":"457076443d7d626f9edd414cccf7e1540f9b8087d2a9d6f4c21d73800c9d1bf6","after_hash":"94fddb38e79903faa91e2848c11834960cb1fefd2303c7228094fc27bd8b515f"} | ||
| {"ts":"2026-05-21T20:39:18.217Z","author":"codex-extensive-audit","op":"files_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-05-21T20:39:18.217Z"}],"before_hash":"94fddb38e79903faa91e2848c11834960cb1fefd2303c7228094fc27bd8b515f","after_hash":"9d615b34fe44babd19a5e3f5f1d21ce0396e42074a6f7ad484b6f17bdfa8af5d"} | ||
| {"ts":"2026-05-21T20:39:20.054Z","author":"codex-extensive-audit","op":"files_add","patch":[{"op":"replace","path":"/metadata/files/93/note","value":"update event date alias regression"},{"op":"replace","path":"/metadata/files/93/path","value":"tests/unit/update-command.spec.ts"},{"op":"replace","path":"/metadata/files/92/note","value":"regression for nested sentry event scrub behavior"},{"op":"replace","path":"/metadata/files/92/path","value":"tests/unit/sentry-helpers.spec.ts"},{"op":"replace","path":"/metadata/files/91/note","value":"qwen Ollama model preference regression"},{"op":"replace","path":"/metadata/files/91/path","value":"tests/unit/semantic-defaults.spec.ts"},{"op":"replace","path":"/metadata/files/90/note","value":"unit coverage for semantic corpus helper branches"},{"op":"replace","path":"/metadata/files/90/path","value":"tests/unit/search-corpus.spec.ts"},{"op":"replace","path":"/metadata/files/89/note","value":"regression for reminder/event search matches"},{"op":"replace","path":"/metadata/files/89/path","value":"tests/unit/search-command.spec.ts"},{"op":"replace","path":"/metadata/files/88/note","value":"regression for bounded semantic refresh corpus input"},{"op":"replace","path":"/metadata/files/88/path","value":"tests/unit/search-cache.spec.ts"},{"op":"replace","path":"/metadata/files/87/note","value":"direct package runtime coverage"},{"op":"replace","path":"/metadata/files/87/path","value":"tests/unit/search-advanced-runtime.spec.ts"},{"op":"replace","path":"/metadata/files/86/note","value":"regression for malformed config token normalization"},{"op":"replace","path":"/metadata/files/86/path","value":"tests/unit/runtime-schema-command-flags.spec.ts"},{"op":"replace","path":"/metadata/files/85/note","value":"PM-CLI-T regression coverage"},{"op":"replace","path":"/metadata/files/85/path","value":"tests/unit/registration-helpers.spec.ts"},{"op":"replace","path":"/metadata/files/84/note","value":"Plan field projection regression"},{"op":"replace","path":"/metadata/files/84/path","value":"tests/unit/plan-command.spec.ts"},{"op":"replace","path":"/metadata/files/83/note","value":"health brief projection regression coverage"},{"op":"replace","path":"/metadata/files/83/path","value":"tests/unit/health-command.spec.ts"},{"op":"replace","path":"/metadata/files/82/note","value":"get depth projection regression"},{"op":"replace","path":"/metadata/files/82/path","value":"tests/unit/get-append-command.spec.ts"},{"op":"replace","path":"/metadata/files/81/note","value":"docs list non-mutation review coverage"},{"op":"replace","path":"/metadata/files/81/path","value":"tests/unit/files-docs-command.spec.ts"},{"op":"replace","path":"/metadata/files/80/note","value":"package-init-scaffold-regression"},{"op":"replace","path":"/metadata/files/80/path","value":"tests/unit/extension-command.spec.ts"},{"op":"replace","path":"/metadata/files/79/note","value":"retry guidance regression"},{"op":"replace","path":"/metadata/files/79/path","value":"tests/unit/error-guidance.spec.ts"},{"op":"replace","path":"/metadata/files/78/note","value":"regression for oversized ollama embedding input truncation"},{"op":"replace","path":"/metadata/files/78/path","value":"tests/unit/embedding-batches.spec.ts"},{"op":"replace","path":"/metadata/files/77/note","value":"create event date alias regression"},{"op":"replace","path":"/metadata/files/77/path","value":"tests/unit/create-command.spec.ts"},{"op":"replace","path":"/metadata/files/76/note","value":"regression for canonical flag surface with aliases"},{"op":"replace","path":"/metadata/files/76/path","value":"tests/unit/contracts-command.spec.ts"},{"op":"replace","path":"/metadata/files/75/note","value":"bash completion regression for health fast-path flags"},{"op":"replace","path":"/metadata/files/75/path","value":"tests/unit/completion-command.spec.ts"},{"op":"replace","path":"/metadata/files/74/note","value":"claim if-available and takeover warning regression coverage"},{"op":"replace","path":"/metadata/files/74/path","value":"tests/unit/claim-command.spec.ts"},{"op":"replace","path":"/metadata/files/73/note","value":"line-number regression for secret scanner review"},{"op":"replace","path":"/metadata/files/73/path","value":"tests/unit/check-secrets.spec.ts"},{"op":"replace","path":"/metadata/files/72/note","value":"release-readiness guard for nonblocking sentry startup"},{"op":"replace","path":"/metadata/files/72/path","value":"tests/integration/release-readiness-runtime.spec.ts"},{"op":"replace","path":"/metadata/files/71/note","value":"MCP get projection and plan stepRef regression"},{"op":"replace","path":"/metadata/files/71/path","value":"tests/integration/mcp-dynamic-package-actions.spec.ts"},{"op":"replace","path":"/metadata/files/70/note","value":"help coverage for keyword-first search mode flags"},{"op":"replace","path":"/metadata/files/70/path","value":"tests/integration/help-runtime.spec.ts"},{"op":"replace","path":"/metadata/files/69/note","value":"init defaults author regression"},{"op":"replace","path":"/metadata/files/69/path","value":"tests/integration/cli.integration.spec.ts"},{"op":"replace","path":"/metadata/files/68/note","value":"plugin MCP tool list regression"},{"op":"replace","path":"/metadata/files/68/path","value":"tests/integration/claude-plugin-contract.spec.ts"},{"op":"replace","path":"/metadata/files/67/note","value":"workflow contract covers dogfood and Sentry token fallback"},{"op":"replace","path":"/metadata/files/67/path","value":"tests/integration/ci-workflow-contract.spec.ts"},{"op":"replace","path":"/metadata/files/66/note","value":"allow spawned CLI stdin regression tests"},{"op":"replace","path":"/metadata/files/66/path","value":"tests/helpers/withTempPmPath.ts"},{"op":"replace","path":"/metadata/files/65/note","value":"public getContracts SDK helper"},{"op":"replace","path":"/metadata/files/65/path","value":"src/sdk/runtime.ts"},{"op":"replace","path":"/metadata/files/64/note","value":"compact alias duplicate flag contracts for agent schema"},{"op":"replace","path":"/metadata/files/64/path","value":"src/sdk/cli-contracts.ts"},{"op":"remove","path":"/metadata/files/63/note"},{"op":"replace","path":"/metadata/files/63/path","value":"src/mcp/server.ts"},{"op":"add","path":"/metadata/files/62/note","value":"did-you-mean not-found helper wired through update no-op path"},{"op":"replace","path":"/metadata/files/62/path","value":"src/core/store/item-store.ts"},{"op":"remove","path":"/metadata/files/61/note"},{"op":"replace","path":"/metadata/files/61/path","value":"src/core/store/front-matter-cache.ts"},{"op":"add","path":"/metadata/files/60/note","value":"recursive path scrub across nested sentry event payloads"},{"op":"replace","path":"/metadata/files/60/path","value":"src/core/sentry/instrument.ts"},{"op":"replace","path":"/metadata/files/59/note","value":"prefer qwen Ollama embedding auto default"},{"op":"replace","path":"/metadata/files/59/path","value":"src/core/search/semantic-defaults.ts"},{"op":"replace","path":"/metadata/files/58/note","value":"provider-aware semantic input bounding"},{"op":"replace","path":"/metadata/files/58/path","value":"src/core/search/embedding-batches.ts"},{"op":"replace","path":"/metadata/files/57/note","value":"shared search corpus builder includes calendar reminders/events"},{"op":"replace","path":"/metadata/files/57/path","value":"src/core/search/corpus.ts"},{"op":"replace","path":"/metadata/files/56/note","value":"semantic mutation refresh uses shared calendar-aware corpus"},{"op":"replace","path":"/metadata/files/56/path","value":"src/core/search/cache.ts"},{"op":"replace","path":"/metadata/files/55/note","value":"harden runtime schema normalization against malformed config tokens"},{"op":"replace","path":"/metadata/files/55/path","value":"src/core/schema/runtime-schema.ts"},{"op":"remove","path":"/metadata/files/54/note"},{"op":"replace","path":"/metadata/files/54/path","value":"src/core/output/output.ts"},{"op":"add","path":"/metadata/files/53/note","value":"null-safe malformed legacy status normalization"},{"op":"replace","path":"/metadata/files/53/path","value":"src/core/item/status.ts"},{"op":"replace","path":"/metadata/files/52/note","value":"chain output_format service overrides for package renderers"},{"op":"replace","path":"/metadata/files/52/path","value":"src/core/extensions/loader.ts"},{"op":"remove","path":"/metadata/files/51/note"},{"op":"replace","path":"/metadata/files/51/path","value":"src/cli/registration-helpers.ts"},{"op":"add","path":"/metadata/files/50/note","value":"init flags for defaults and author"},{"op":"replace","path":"/metadata/files/50/path","value":"src/cli/register-setup.ts"},{"op":"replace","path":"/metadata/files/49/note","value":"contracts help text clarifies --full heavy surfaces"},{"op":"replace","path":"/metadata/files/49/path","value":"src/cli/register-operations.ts"},{"op":"replace","path":"/metadata/files/48/note","value":"address PR review append source counting and docs list propagation"},{"op":"replace","path":"/metadata/files/48/path","value":"src/cli/register-mutation.ts"},{"op":"replace","path":"/metadata/files/47/note","value":"align search CLI flags with advertised search contract"},{"op":"replace","path":"/metadata/files/47/path","value":"src/cli/register-list-query.ts"},{"op":"replace","path":"/metadata/files/46/note","value":"error-path sentry initialization"},{"op":"replace","path":"/metadata/files/46/path","value":"src/cli/main.ts"},{"op":"replace","path":"/metadata/files/45/note","value":"compact machine-readable help aliases for token-efficient agent help"},{"op":"replace","path":"/metadata/files/45/path","value":"src/cli/help-json-payload.ts"},{"op":"replace","path":"/metadata/files/44/note","value":"agent help documents get fields"},{"op":"replace","path":"/metadata/files/44/path","value":"src/cli/help-content.ts"},{"op":"replace","path":"/metadata/files/43/note","value":"required-option guidance normalization"},{"op":"replace","path":"/metadata/files/43/path","value":"src/cli/error-guidance.ts"},{"op":"replace","path":"/metadata/files/42/note","value":"metadata output token-noise reduction verification"},{"op":"replace","path":"/metadata/files/42/path","value":"src/cli/commands/validate.ts"},{"op":"replace","path":"/metadata/files/41/note","value":"event date alias for update"},{"op":"replace","path":"/metadata/files/41/path","value":"src/cli/commands/update.ts"},{"op":"replace","path":"/metadata/files/40/note","value":"type support for test list option"},{"op":"replace","path":"/metadata/files/40/path","value":"src/cli/commands/test.ts"},{"op":"replace","path":"/metadata/files/39/note","value":"keyword search scores reminder/event corpus and short phrase matches"},{"op":"replace","path":"/metadata/files/39/path","value":"src/cli/commands/search.ts"},{"op":"replace","path":"/metadata/files/38/note","value":"reindex uses shared calendar-aware corpus"},{"op":"replace","path":"/metadata/files/38/path","value":"src/cli/commands/reindex.ts"},{"op":"replace","path":"/metadata/files/37/note","value":"Plan show field projection UX fix"},{"op":"replace","path":"/metadata/files/37/path","value":"src/cli/commands/plan.ts"},{"op":"remove","path":"/metadata/files/36/note"},{"op":"replace","path":"/metadata/files/36/path","value":"src/cli/commands/list.ts"},{"op":"add","path":"/metadata/files/35/note","value":"agent-friendly init defaults and author_default"},{"op":"replace","path":"/metadata/files/35/path","value":"src/cli/commands/init.ts"},{"op":"replace","path":"/metadata/files/34/note","value":"health brief projection for low-token agent diagnostics"},{"op":"replace","path":"/metadata/files/34/path","value":"src/cli/commands/health.ts"},{"op":"replace","path":"/metadata/files/33/note","value":"get depth projections for low-token agent reads"},{"op":"replace","path":"/metadata/files/33/path","value":"src/cli/commands/get.ts"},{"op":"replace","path":"/metadata/files/32/note","value":"fix extension reload/watch usage guidance"},{"op":"replace","path":"/metadata/files/32/path","value":"src/cli/commands/extension.ts"},{"op":"replace","path":"/metadata/files/31/note","value":"type support for docs list option"},{"op":"replace","path":"/metadata/files/31/path","value":"src/cli/commands/docs.ts"},{"op":"replace","path":"/metadata/files/30/note","value":"event date alias for create"},{"op":"replace","path":"/metadata/files/30/path","value":"src/cli/commands/create.ts"},{"op":"replace","path":"/metadata/files/29/note","value":"use compact flag contracts in command surface"},{"op":"replace","path":"/metadata/files/29/path","value":"src/cli/commands/contracts.ts"},{"op":"replace","path":"/metadata/files/28/note","value":"Add get projection flags to shell completions"},{"op":"replace","path":"/metadata/files/28/path","value":"src/cli/commands/completion.ts"},{"op":"add","path":"/metadata/files/94","value":{"path":"vitest.config.ts","scope":"project","note":"coverage include list covers new search corpus helper"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-05-21T20:39:20.054Z"}],"before_hash":"9d615b34fe44babd19a5e3f5f1d21ce0396e42074a6f7ad484b6f17bdfa8af5d","after_hash":"b5703224c8ad8466d2acf7386a58185754ba116a4764c0a76d45717b2c3f3442"} | ||
| {"ts":"2026-05-21T20:39:22.032Z","author":"codex-extensive-audit","op":"tests_add","patch":[{"op":"replace","path":"/metadata/tests/46/note","value":"docs and skills gate"},{"op":"replace","path":"/metadata/tests/46/command","value":"pnpm quality:docs-skills"},{"op":"replace","path":"/metadata/tests/45/note","value":"focused init defaults integration regression"},{"op":"replace","path":"/metadata/tests/45/timeout_seconds","value":120},{"op":"replace","path":"/metadata/tests/45/command","value":"pnpm exec vitest run tests/integration/cli.integration.spec.ts -t 'accepts agent-friendly non-interactive init defaults and author'"},{"op":"replace","path":"/metadata/tests/44/note","value":"focused typecheck after schema changes"},{"op":"replace","path":"/metadata/tests/44/timeout_seconds","value":300},{"op":"replace","path":"/metadata/tests/44/command","value":"pnpm exec tsc --noEmit -p tsconfig.json"},{"op":"replace","path":"/metadata/tests/43/note","value":"full remediation verification gate"},{"op":"replace","path":"/metadata/tests/43/timeout_seconds","value":1200},{"op":"replace","path":"/metadata/tests/43/command","value":"pnpm build && node scripts/run-tests.mjs coverage && pnpm quality:static && node scripts/check-secrets.mjs"},{"op":"replace","path":"/metadata/tests/42/note","value":"compile CLI after health/help/dogfood changes"},{"op":"replace","path":"/metadata/tests/42/timeout_seconds","value":300},{"op":"replace","path":"/metadata/tests/42/command","value":"pnpm build"},{"op":"replace","path":"/metadata/tests/41/note","value":"focused dependency/UX/Sentry regression suite"},{"op":"replace","path":"/metadata/tests/41/timeout_seconds","value":600},{"op":"replace","path":"/metadata/tests/41/command","value":"PM_RUN_TESTS_SKIP_BUILD=1 node scripts/run-tests.mjs test -- tests/unit/search-command.spec.ts tests/unit/status-normalization.spec.ts tests/unit/extension-command.spec.ts tests/unit/contracts-command.spec.ts tests/unit/error-guidance.spec.ts"},{"op":"replace","path":"/metadata/tests/40/note","value":"focused Sentry crash and package contract hint regression suite"},{"op":"replace","path":"/metadata/tests/40/timeout_seconds","value":300},{"op":"replace","path":"/metadata/tests/40/command","value":"PM_RUN_TESTS_SKIP_BUILD=1 node scripts/run-tests.mjs test -- tests/unit/search-command.spec.ts tests/unit/runtime-schema-command-flags.spec.ts tests/unit/contracts-command.spec.ts"},{"op":"replace","path":"/metadata/tests/39/note","value":"focused package docs search UX regressions"},{"op":"replace","path":"/metadata/tests/39/timeout_seconds","value":900},{"op":"replace","path":"/metadata/tests/39/command","value":"PM_RUN_TESTS_SKIP_BUILD=1 node scripts/run-tests.mjs test -- tests/unit/search-cache.spec.ts tests/unit/extension-command.spec.ts tests/integration/help-runtime.spec.ts"},{"op":"replace","path":"/metadata/tests/38/note","value":"SDK workspace contracts,Plan fields,search-advanced package regression"},{"op":"replace","path":"/metadata/tests/38/command","value":"PM_RUN_TESTS_SKIP_BUILD=1 node scripts/run-tests.mjs test -- tests/unit/sdk-index.spec.ts tests/unit/plan-command.spec.ts tests/integration/release-readiness-runtime.spec.ts"},{"op":"replace","path":"/metadata/tests/37/note","value":"focused SDK and Plan projection regression"},{"op":"replace","path":"/metadata/tests/37/timeout_seconds","value":240},{"op":"replace","path":"/metadata/tests/37/command","value":"PM_RUN_TESTS_SKIP_BUILD=1 node scripts/run-tests.mjs test -- tests/unit/sdk-index.spec.ts tests/unit/plan-command.spec.ts"},{"op":"replace","path":"/metadata/tests/36/note","value":"focused SDK contracts search-advanced regression"},{"op":"replace","path":"/metadata/tests/36/timeout_seconds","value":900},{"op":"replace","path":"/metadata/tests/36/command","value":"PM_RUN_TESTS_SKIP_BUILD=1 node scripts/run-tests.mjs test -- tests/unit/sdk-index.spec.ts tests/unit/contracts-command.spec.ts tests/unit/search-advanced-runtime.spec.ts tests/integration/release-readiness-runtime.spec.ts"},{"op":"replace","path":"/metadata/tests/35/note","value":"SDK runtime contracts regression"},{"op":"replace","path":"/metadata/tests/35/timeout_seconds","value":300},{"op":"replace","path":"/metadata/tests/35/command","value":"PM_RUN_TESTS_SKIP_BUILD=1 node scripts/run-tests.mjs test -- tests/unit/sdk-index.spec.ts tests/unit/contracts-command.spec.ts"},{"op":"replace","path":"/metadata/tests/34/note","value":"focused PM-CLI-T and pm-5k2w UX regressions"},{"op":"replace","path":"/metadata/tests/34/timeout_seconds","value":900},{"op":"replace","path":"/metadata/tests/34/command","value":"PM_RUN_TESTS_SKIP_BUILD=1 node scripts/run-tests.mjs test -- tests/unit/registration-helpers.spec.ts tests/unit/create-command.spec.ts tests/unit/update-command.spec.ts tests/unit/completion-command.spec.ts tests/integration/release-readiness-runtime.spec.ts --reporter=dot"},{"op":"replace","path":"/metadata/tests/33/note","value":"focused health brief and help alias compaction regression suite"},{"op":"replace","path":"/metadata/tests/33/command","value":"PM_RUN_TESTS_SKIP_BUILD=1 node scripts/run-tests.mjs test -- tests/unit/health-command.spec.ts tests/unit/contracts-command.spec.ts tests/unit/completion-command.spec.ts tests/integration/help-runtime.spec.ts tests/integration/release-readiness-runtime.spec.ts tests/integration/claude-plugin-contract.spec.ts"},{"op":"replace","path":"/metadata/tests/32/note","value":"focused UX/search/health regression suite"},{"op":"replace","path":"/metadata/tests/32/command","value":"PM_RUN_TESTS_SKIP_BUILD=1 node scripts/run-tests.mjs test -- tests/unit/get-append-command.spec.ts tests/unit/list-command.spec.ts tests/unit/create-command.spec.ts tests/unit/update-command.spec.ts tests/unit/plan-command.spec.ts tests/unit/search-command.spec.ts tests/unit/semantic-defaults.spec.ts tests/unit/health-command.spec.ts tests/integration/help-runtime.spec.ts tests/integration/mcp-dynamic-package-actions.spec.ts"},{"op":"remove","path":"/metadata/tests/31/note"},{"op":"replace","path":"/metadata/tests/31/timeout_seconds","value":240},{"op":"replace","path":"/metadata/tests/31/command","value":"PM_RUN_TESTS_SKIP_BUILD=1 node scripts/run-tests.mjs test -- tests/unit/get-append-command.spec.ts tests/unit/contracts-command.spec.ts tests/unit/completion-command.spec.ts tests/unit/error-guidance.spec.ts --reporter=dot"},{"op":"add","path":"/metadata/tests/47","value":{"command":"pnpm quality:static","scope":"project","timeout_seconds":300,"note":"static quality gate"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-05-21T20:39:22.032Z"}],"before_hash":"b5703224c8ad8466d2acf7386a58185754ba116a4764c0a76d45717b2c3f3442","after_hash":"5b57882d3041ab36808c108c2634d23adc2b5a26bfc36d7d307c58e90b5f0662"} | ||
| {"ts":"2026-05-21T20:39:22.963Z","author":"codex-extensive-audit","op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/173","value":{"created_at":"2026-05-21T20:39:22.963Z","author":"codex-extensive-audit","text":"Implementation evidence: added pm get --full as explicit deep-read compatibility for adjacent read-command muscle memory, rejected --full with --fields, and updated contracts/completions. Focused regression passed: PM_RUN_TESTS_SKIP_BUILD=1 node scripts/run-tests.mjs test -- tests/unit/get-append-command.spec.ts tests/unit/contracts-command.spec.ts tests/unit/completion-command.spec.ts tests/unit/error-guidance.spec.ts --reporter=dot (4 files / 128 tests)."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-05-21T20:39:22.963Z"}],"before_hash":"5b57882d3041ab36808c108c2634d23adc2b5a26bfc36d7d307c58e90b5f0662","after_hash":"9eb856635e960fbc4b25f594dfff7fce90df1e7a728bce4836bd177dde257a25"} | ||
| {"ts":"2026-05-21T20:42:57.321Z","author":"codex-extensive-audit","op":"files_add","patch":[{"op":"replace","path":"/metadata/files/94/note","value":"update event date alias regression"},{"op":"replace","path":"/metadata/files/94/path","value":"tests/unit/update-command.spec.ts"},{"op":"replace","path":"/metadata/files/93/note","value":"regression for nested sentry event scrub behavior"},{"op":"replace","path":"/metadata/files/93/path","value":"tests/unit/sentry-helpers.spec.ts"},{"op":"replace","path":"/metadata/files/92/note","value":"qwen Ollama model preference regression"},{"op":"replace","path":"/metadata/files/92/path","value":"tests/unit/semantic-defaults.spec.ts"},{"op":"replace","path":"/metadata/files/91/note","value":"unit coverage for semantic corpus helper branches"},{"op":"replace","path":"/metadata/files/91/path","value":"tests/unit/search-corpus.spec.ts"},{"op":"replace","path":"/metadata/files/90/note","value":"regression for reminder/event search matches"},{"op":"replace","path":"/metadata/files/90/path","value":"tests/unit/search-command.spec.ts"},{"op":"replace","path":"/metadata/files/89/note","value":"regression for bounded semantic refresh corpus input"},{"op":"replace","path":"/metadata/files/89/path","value":"tests/unit/search-cache.spec.ts"},{"op":"replace","path":"/metadata/files/88/note","value":"direct package runtime coverage"},{"op":"replace","path":"/metadata/files/88/path","value":"tests/unit/search-advanced-runtime.spec.ts"},{"op":"replace","path":"/metadata/files/87/note","value":"regression for malformed config token normalization"},{"op":"replace","path":"/metadata/files/87/path","value":"tests/unit/runtime-schema-command-flags.spec.ts"},{"op":"replace","path":"/metadata/files/86/note","value":"PM-CLI-T regression coverage"},{"op":"replace","path":"/metadata/files/86/path","value":"tests/unit/registration-helpers.spec.ts"},{"op":"replace","path":"/metadata/files/85/note","value":"Plan field projection regression"},{"op":"replace","path":"/metadata/files/85/path","value":"tests/unit/plan-command.spec.ts"},{"op":"replace","path":"/metadata/files/84/note","value":"health brief projection regression coverage"},{"op":"replace","path":"/metadata/files/84/path","value":"tests/unit/health-command.spec.ts"},{"op":"replace","path":"/metadata/files/83/note","value":"get depth projection regression"},{"op":"replace","path":"/metadata/files/83/path","value":"tests/unit/get-append-command.spec.ts"},{"op":"replace","path":"/metadata/files/82/note","value":"docs list non-mutation review coverage"},{"op":"replace","path":"/metadata/files/82/path","value":"tests/unit/files-docs-command.spec.ts"},{"op":"replace","path":"/metadata/files/81/note","value":"package-init-scaffold-regression"},{"op":"replace","path":"/metadata/files/81/path","value":"tests/unit/extension-command.spec.ts"},{"op":"replace","path":"/metadata/files/80/note","value":"retry guidance regression"},{"op":"replace","path":"/metadata/files/80/path","value":"tests/unit/error-guidance.spec.ts"},{"op":"replace","path":"/metadata/files/79/note","value":"regression for oversized ollama embedding input truncation"},{"op":"replace","path":"/metadata/files/79/path","value":"tests/unit/embedding-batches.spec.ts"},{"op":"replace","path":"/metadata/files/78/note","value":"create event date alias regression"},{"op":"replace","path":"/metadata/files/78/path","value":"tests/unit/create-command.spec.ts"},{"op":"replace","path":"/metadata/files/77/note","value":"regression for canonical flag surface with aliases"},{"op":"replace","path":"/metadata/files/77/path","value":"tests/unit/contracts-command.spec.ts"},{"op":"replace","path":"/metadata/files/76/note","value":"bash completion regression for health fast-path flags"},{"op":"replace","path":"/metadata/files/76/path","value":"tests/unit/completion-command.spec.ts"},{"op":"replace","path":"/metadata/files/75/note","value":"claim if-available and takeover warning regression coverage"},{"op":"replace","path":"/metadata/files/75/path","value":"tests/unit/claim-command.spec.ts"},{"op":"replace","path":"/metadata/files/74/note","value":"line-number regression for secret scanner review"},{"op":"replace","path":"/metadata/files/74/path","value":"tests/unit/check-secrets.spec.ts"},{"op":"replace","path":"/metadata/files/73/note","value":"release-readiness guard for nonblocking sentry startup"},{"op":"replace","path":"/metadata/files/73/path","value":"tests/integration/release-readiness-runtime.spec.ts"},{"op":"replace","path":"/metadata/files/72/note","value":"MCP get projection and plan stepRef regression"},{"op":"replace","path":"/metadata/files/72/path","value":"tests/integration/mcp-dynamic-package-actions.spec.ts"},{"op":"replace","path":"/metadata/files/71/note","value":"help coverage for keyword-first search mode flags"},{"op":"replace","path":"/metadata/files/71/path","value":"tests/integration/help-runtime.spec.ts"},{"op":"replace","path":"/metadata/files/70/note","value":"init defaults author regression"},{"op":"replace","path":"/metadata/files/70/path","value":"tests/integration/cli.integration.spec.ts"},{"op":"replace","path":"/metadata/files/69/note","value":"plugin MCP tool list regression"},{"op":"replace","path":"/metadata/files/69/path","value":"tests/integration/claude-plugin-contract.spec.ts"},{"op":"replace","path":"/metadata/files/68/note","value":"workflow contract covers dogfood and Sentry token fallback"},{"op":"replace","path":"/metadata/files/68/path","value":"tests/integration/ci-workflow-contract.spec.ts"},{"op":"replace","path":"/metadata/files/67/note","value":"allow spawned CLI stdin regression tests"},{"op":"replace","path":"/metadata/files/67/path","value":"tests/helpers/withTempPmPath.ts"},{"op":"replace","path":"/metadata/files/66/note","value":"public getContracts SDK helper"},{"op":"replace","path":"/metadata/files/66/path","value":"src/sdk/runtime.ts"},{"op":"replace","path":"/metadata/files/65/note","value":"compact alias duplicate flag contracts for agent schema"},{"op":"replace","path":"/metadata/files/65/path","value":"src/sdk/cli-contracts.ts"},{"op":"remove","path":"/metadata/files/64/note"},{"op":"replace","path":"/metadata/files/64/path","value":"src/mcp/server.ts"},{"op":"add","path":"/metadata/files/63/note","value":"did-you-mean not-found helper wired through update no-op path"},{"op":"replace","path":"/metadata/files/63/path","value":"src/core/store/item-store.ts"},{"op":"remove","path":"/metadata/files/62/note"},{"op":"replace","path":"/metadata/files/62/path","value":"src/core/store/front-matter-cache.ts"},{"op":"add","path":"/metadata/files/61/note","value":"recursive path scrub across nested sentry event payloads"},{"op":"replace","path":"/metadata/files/61/path","value":"src/core/sentry/instrument.ts"},{"op":"replace","path":"/metadata/files/60/note","value":"prefer qwen Ollama embedding auto default"},{"op":"replace","path":"/metadata/files/60/path","value":"src/core/search/semantic-defaults.ts"},{"op":"replace","path":"/metadata/files/59/note","value":"provider-aware semantic input bounding"},{"op":"replace","path":"/metadata/files/59/path","value":"src/core/search/embedding-batches.ts"},{"op":"replace","path":"/metadata/files/58/note","value":"shared search corpus builder includes calendar reminders/events"},{"op":"replace","path":"/metadata/files/58/path","value":"src/core/search/corpus.ts"},{"op":"replace","path":"/metadata/files/57/note","value":"semantic mutation refresh uses shared calendar-aware corpus"},{"op":"replace","path":"/metadata/files/57/path","value":"src/core/search/cache.ts"},{"op":"replace","path":"/metadata/files/56/note","value":"harden runtime schema normalization against malformed config tokens"},{"op":"replace","path":"/metadata/files/56/path","value":"src/core/schema/runtime-schema.ts"},{"op":"remove","path":"/metadata/files/55/note"},{"op":"replace","path":"/metadata/files/55/path","value":"src/core/output/output.ts"},{"op":"add","path":"/metadata/files/54/note","value":"null-safe malformed legacy status normalization"},{"op":"replace","path":"/metadata/files/54/path","value":"src/core/item/status.ts"},{"op":"replace","path":"/metadata/files/53/note","value":"chain output_format service overrides for package renderers"},{"op":"replace","path":"/metadata/files/53/path","value":"src/core/extensions/loader.ts"},{"op":"remove","path":"/metadata/files/52/note"},{"op":"replace","path":"/metadata/files/52/path","value":"src/cli/registration-helpers.ts"},{"op":"add","path":"/metadata/files/51/note","value":"init flags for defaults and author"},{"op":"replace","path":"/metadata/files/51/path","value":"src/cli/register-setup.ts"},{"op":"replace","path":"/metadata/files/50/note","value":"contracts help text clarifies --full heavy surfaces"},{"op":"replace","path":"/metadata/files/50/path","value":"src/cli/register-operations.ts"},{"op":"replace","path":"/metadata/files/49/note","value":"address PR review append source counting and docs list propagation"},{"op":"replace","path":"/metadata/files/49/path","value":"src/cli/register-mutation.ts"},{"op":"replace","path":"/metadata/files/48/note","value":"align search CLI flags with advertised search contract"},{"op":"replace","path":"/metadata/files/48/path","value":"src/cli/register-list-query.ts"},{"op":"replace","path":"/metadata/files/47/note","value":"error-path sentry initialization"},{"op":"replace","path":"/metadata/files/47/path","value":"src/cli/main.ts"},{"op":"replace","path":"/metadata/files/46/note","value":"compact machine-readable help aliases for token-efficient agent help"},{"op":"replace","path":"/metadata/files/46/path","value":"src/cli/help-json-payload.ts"},{"op":"replace","path":"/metadata/files/45/note","value":"agent help documents get fields"},{"op":"replace","path":"/metadata/files/45/path","value":"src/cli/help-content.ts"},{"op":"replace","path":"/metadata/files/44/note","value":"required-option guidance normalization"},{"op":"replace","path":"/metadata/files/44/path","value":"src/cli/error-guidance.ts"},{"op":"replace","path":"/metadata/files/43/note","value":"metadata output token-noise reduction verification"},{"op":"replace","path":"/metadata/files/43/path","value":"src/cli/commands/validate.ts"},{"op":"replace","path":"/metadata/files/42/note","value":"event date alias for update"},{"op":"replace","path":"/metadata/files/42/path","value":"src/cli/commands/update.ts"},{"op":"replace","path":"/metadata/files/41/note","value":"type support for test list option"},{"op":"replace","path":"/metadata/files/41/path","value":"src/cli/commands/test.ts"},{"op":"replace","path":"/metadata/files/40/note","value":"keyword search scores reminder/event corpus and short phrase matches"},{"op":"replace","path":"/metadata/files/40/path","value":"src/cli/commands/search.ts"},{"op":"replace","path":"/metadata/files/39/note","value":"reindex uses shared calendar-aware corpus"},{"op":"replace","path":"/metadata/files/39/path","value":"src/cli/commands/reindex.ts"},{"op":"replace","path":"/metadata/files/38/note","value":"Plan show field projection UX fix"},{"op":"replace","path":"/metadata/files/38/path","value":"src/cli/commands/plan.ts"},{"op":"remove","path":"/metadata/files/37/note"},{"op":"replace","path":"/metadata/files/37/path","value":"src/cli/commands/list.ts"},{"op":"add","path":"/metadata/files/36/note","value":"agent-friendly init defaults and author_default"},{"op":"replace","path":"/metadata/files/36/path","value":"src/cli/commands/init.ts"},{"op":"replace","path":"/metadata/files/35/note","value":"Avoid duplicated compact history diff payload for token efficiency"},{"op":"replace","path":"/metadata/files/35/path","value":"src/cli/commands/history.ts"},{"op":"add","path":"/metadata/files/95","value":{"path":"vitest.config.ts","scope":"project","note":"coverage include list covers new search corpus helper"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-05-21T20:42:57.321Z"}],"before_hash":"9eb856635e960fbc4b25f594dfff7fce90df1e7a728bce4836bd177dde257a25","after_hash":"97f59f503e02e8062ef731e5cf5320f308dc9ce7a98f52657188146b0a9183c7"} | ||
| {"ts":"2026-05-21T20:42:59.312Z","author":"codex-extensive-audit","op":"docs_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-05-21T20:42:59.312Z"}],"before_hash":"97f59f503e02e8062ef731e5cf5320f308dc9ce7a98f52657188146b0a9183c7","after_hash":"ed6cc4a38bb83955327da439d970886349bbad1661582bfc341806a0e3a6d67f"} | ||
| {"ts":"2026-05-21T20:43:01.001Z","author":"codex-extensive-audit","op":"docs_add","patch":[{"op":"replace","path":"/metadata/docs/13/note","value":"sync MCP tool list"},{"op":"replace","path":"/metadata/docs/13/path","value":"plugins/pm-codex/README.md"},{"op":"replace","path":"/metadata/docs/12/note","value":"remove stale pm_guide tool documentation"},{"op":"replace","path":"/metadata/docs/12/path","value":"plugins/pm-claude/README.md"},{"op":"replace","path":"/metadata/docs/11/note","value":"sync MCP tool list"},{"op":"replace","path":"/metadata/docs/11/path","value":"plugins/pm-claude/commands/pm-init.md"},{"op":"replace","path":"/metadata/docs/10/path","value":"plugins/pm-claude/agents/pm-coordinator.md"},{"op":"replace","path":"/metadata/docs/9/note","value":"document expanded search-advanced flags"},{"op":"replace","path":"/metadata/docs/9/path","value":"packages/pm-search-advanced/README.md"},{"op":"replace","path":"/metadata/docs/8/note","value":"document project install and package bootstrap"},{"op":"replace","path":"/metadata/docs/8/path","value":"packages/pm-calendar/README.md"},{"op":"replace","path":"/metadata/docs/7/note","value":"document in-process runtime contracts"},{"op":"replace","path":"/metadata/docs/7/path","value":"docs/SDK.md"},{"op":"replace","path":"/metadata/docs/6/note","value":"keep private reliability details local-only"},{"op":"replace","path":"/metadata/docs/6/path","value":"docs/RELEASING.md"},{"op":"replace","path":"/metadata/docs/5/note","value":"canonical package extension reference deduped"},{"op":"replace","path":"/metadata/docs/5/path","value":"docs/EXTENSIONS.md"},{"op":"replace","path":"/metadata/docs/4/note","value":"Prefer smallest health summary example for repository validation"},{"op":"replace","path":"/metadata/docs/4/path","value":"docs/CONFIGURATION.md"},{"op":"add","path":"/metadata/docs/14","value":{"path":"README.md","scope":"project","note":"remove private telemetry mode from public release docs"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-05-21T20:43:01.001Z"}],"before_hash":"ed6cc4a38bb83955327da439d970886349bbad1661582bfc341806a0e3a6d67f","after_hash":"60c35dfaa0f0da4b60aeaa10ae0e606fd4b1e033a1fd4c51574b9e8093616422"} | ||
| {"ts":"2026-05-21T20:43:02.758Z","author":"codex-extensive-audit","op":"files_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-05-21T20:43:02.758Z"}],"before_hash":"60c35dfaa0f0da4b60aeaa10ae0e606fd4b1e033a1fd4c51574b9e8093616422","after_hash":"9ce25b34152d76c3892b31738ea0026f284711538a263b29a9c507c1be0cb4b8"} | ||
| {"ts":"2026-05-21T20:43:04.524Z","author":"codex-extensive-audit","op":"tests_add","patch":[{"op":"replace","path":"/metadata/tests/47/note","value":"docs and skills gate"},{"op":"replace","path":"/metadata/tests/47/command","value":"pnpm quality:docs-skills"},{"op":"replace","path":"/metadata/tests/46/note","value":"focused init defaults integration regression"},{"op":"replace","path":"/metadata/tests/46/timeout_seconds","value":120},{"op":"replace","path":"/metadata/tests/46/command","value":"pnpm exec vitest run tests/integration/cli.integration.spec.ts -t 'accepts agent-friendly non-interactive init defaults and author'"},{"op":"replace","path":"/metadata/tests/45/note","value":"focused typecheck after schema changes"},{"op":"replace","path":"/metadata/tests/45/timeout_seconds","value":300},{"op":"replace","path":"/metadata/tests/45/command","value":"pnpm exec tsc --noEmit -p tsconfig.json"},{"op":"replace","path":"/metadata/tests/44/note","value":"full remediation verification gate"},{"op":"replace","path":"/metadata/tests/44/timeout_seconds","value":1200},{"op":"replace","path":"/metadata/tests/44/command","value":"pnpm build && node scripts/run-tests.mjs coverage && pnpm quality:static && node scripts/check-secrets.mjs"},{"op":"replace","path":"/metadata/tests/43/note","value":"compile CLI after health/help/dogfood changes"},{"op":"replace","path":"/metadata/tests/43/timeout_seconds","value":300},{"op":"replace","path":"/metadata/tests/43/command","value":"pnpm build"},{"op":"replace","path":"/metadata/tests/42/note","value":"focused dependency/UX/Sentry regression suite"},{"op":"replace","path":"/metadata/tests/42/timeout_seconds","value":600},{"op":"replace","path":"/metadata/tests/42/command","value":"PM_RUN_TESTS_SKIP_BUILD=1 node scripts/run-tests.mjs test -- tests/unit/search-command.spec.ts tests/unit/status-normalization.spec.ts tests/unit/extension-command.spec.ts tests/unit/contracts-command.spec.ts tests/unit/error-guidance.spec.ts"},{"op":"replace","path":"/metadata/tests/41/note","value":"focused Sentry crash and package contract hint regression suite"},{"op":"replace","path":"/metadata/tests/41/timeout_seconds","value":300},{"op":"replace","path":"/metadata/tests/41/command","value":"PM_RUN_TESTS_SKIP_BUILD=1 node scripts/run-tests.mjs test -- tests/unit/search-command.spec.ts tests/unit/runtime-schema-command-flags.spec.ts tests/unit/contracts-command.spec.ts"},{"op":"replace","path":"/metadata/tests/40/note","value":"focused package docs search UX regressions"},{"op":"replace","path":"/metadata/tests/40/timeout_seconds","value":900},{"op":"replace","path":"/metadata/tests/40/command","value":"PM_RUN_TESTS_SKIP_BUILD=1 node scripts/run-tests.mjs test -- tests/unit/search-cache.spec.ts tests/unit/extension-command.spec.ts tests/integration/help-runtime.spec.ts"},{"op":"replace","path":"/metadata/tests/39/note","value":"SDK workspace contracts,Plan fields,search-advanced package regression"},{"op":"replace","path":"/metadata/tests/39/command","value":"PM_RUN_TESTS_SKIP_BUILD=1 node scripts/run-tests.mjs test -- tests/unit/sdk-index.spec.ts tests/unit/plan-command.spec.ts tests/integration/release-readiness-runtime.spec.ts"},{"op":"replace","path":"/metadata/tests/38/note","value":"focused SDK and Plan projection regression"},{"op":"replace","path":"/metadata/tests/38/timeout_seconds","value":240},{"op":"replace","path":"/metadata/tests/38/command","value":"PM_RUN_TESTS_SKIP_BUILD=1 node scripts/run-tests.mjs test -- tests/unit/sdk-index.spec.ts tests/unit/plan-command.spec.ts"},{"op":"replace","path":"/metadata/tests/37/note","value":"focused SDK contracts search-advanced regression"},{"op":"replace","path":"/metadata/tests/37/timeout_seconds","value":900},{"op":"replace","path":"/metadata/tests/37/command","value":"PM_RUN_TESTS_SKIP_BUILD=1 node scripts/run-tests.mjs test -- tests/unit/sdk-index.spec.ts tests/unit/contracts-command.spec.ts tests/unit/search-advanced-runtime.spec.ts tests/integration/release-readiness-runtime.spec.ts"},{"op":"replace","path":"/metadata/tests/36/note","value":"SDK runtime contracts regression"},{"op":"replace","path":"/metadata/tests/36/timeout_seconds","value":300},{"op":"replace","path":"/metadata/tests/36/command","value":"PM_RUN_TESTS_SKIP_BUILD=1 node scripts/run-tests.mjs test -- tests/unit/sdk-index.spec.ts tests/unit/contracts-command.spec.ts"},{"op":"replace","path":"/metadata/tests/35/note","value":"focused PM-CLI-T and pm-5k2w UX regressions"},{"op":"replace","path":"/metadata/tests/35/timeout_seconds","value":900},{"op":"replace","path":"/metadata/tests/35/command","value":"PM_RUN_TESTS_SKIP_BUILD=1 node scripts/run-tests.mjs test -- tests/unit/registration-helpers.spec.ts tests/unit/create-command.spec.ts tests/unit/update-command.spec.ts tests/unit/completion-command.spec.ts tests/integration/release-readiness-runtime.spec.ts --reporter=dot"},{"op":"replace","path":"/metadata/tests/34/note","value":"focused health brief and help alias compaction regression suite"},{"op":"replace","path":"/metadata/tests/34/command","value":"PM_RUN_TESTS_SKIP_BUILD=1 node scripts/run-tests.mjs test -- tests/unit/health-command.spec.ts tests/unit/contracts-command.spec.ts tests/unit/completion-command.spec.ts tests/integration/help-runtime.spec.ts tests/integration/release-readiness-runtime.spec.ts tests/integration/claude-plugin-contract.spec.ts"},{"op":"replace","path":"/metadata/tests/33/note","value":"focused UX/search/health regression suite"},{"op":"replace","path":"/metadata/tests/33/command","value":"PM_RUN_TESTS_SKIP_BUILD=1 node scripts/run-tests.mjs test -- tests/unit/get-append-command.spec.ts tests/unit/list-command.spec.ts tests/unit/create-command.spec.ts tests/unit/update-command.spec.ts tests/unit/plan-command.spec.ts tests/unit/search-command.spec.ts tests/unit/semantic-defaults.spec.ts tests/unit/health-command.spec.ts tests/integration/help-runtime.spec.ts tests/integration/mcp-dynamic-package-actions.spec.ts"},{"op":"remove","path":"/metadata/tests/32/note"},{"op":"replace","path":"/metadata/tests/32/timeout_seconds","value":300},{"op":"replace","path":"/metadata/tests/32/command","value":"PM_RUN_TESTS_SKIP_BUILD=1 node scripts/run-tests.mjs test -- tests/unit/get-append-command.spec.ts tests/unit/contracts-command.spec.ts tests/unit/completion-command.spec.ts tests/unit/error-guidance.spec.ts tests/unit/history-activity-command.spec.ts tests/integration/help-runtime.spec.ts --reporter=dot"},{"op":"add","path":"/metadata/tests/48","value":{"command":"pnpm quality:static","scope":"project","timeout_seconds":300,"note":"static quality gate"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-05-21T20:43:04.524Z"}],"before_hash":"9ce25b34152d76c3892b31738ea0026f284711538a263b29a9c507c1be0cb4b8","after_hash":"3bdcecf892cee3f4e89969c7cffd64ead97c399440b179b07f5e365d410cb01d"} | ||
| {"ts":"2026-05-21T20:43:05.613Z","author":"codex-extensive-audit","op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/174","value":{"created_at":"2026-05-21T20:43:05.613Z","author":"codex-extensive-audit","text":"Evidence update: read-path sub-agent findings integrated. Added compact history --diff dedupe so default compact history no longer repeats identical diff arrays; updated health docs/help examples to prefer pm health --check-only --summary --json for the smallest machine-readable quick check. Verified package GitHub owner before editing: gh repo view unbraind/pm-cli resolves and unbrained/pm-cli does not, so package catalog URLs were not changed. Focused suite passed after rebuild: PM_RUN_TESTS_SKIP_BUILD=1 node scripts/run-tests.mjs test -- tests/unit/get-append-command.spec.ts tests/unit/contracts-command.spec.ts tests/unit/completion-command.spec.ts tests/unit/error-guidance.spec.ts tests/unit/history-activity-command.spec.ts tests/integration/help-runtime.spec.ts --reporter=dot (6 files / 172 tests)."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-05-21T20:43:05.613Z"}],"before_hash":"3bdcecf892cee3f4e89969c7cffd64ead97c399440b179b07f5e365d410cb01d","after_hash":"f54e89dc9b65ff1c1316c0c81d4232bb66d903d4f2a7002a03d2536d7172afdf"} | ||
| {"ts":"2026-05-21T20:48:56.790Z","author":"codex-extensive-audit","op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/175","value":{"created_at":"2026-05-21T20:48:56.790Z","author":"codex-extensive-audit","text":"Final local verification evidence before PR: npm install -g . refreshed pm 2026.5.18 and pm contracts --command get --flags-only --json now exposes --depth, --full, --fields. Manual temp smoke verified pm get --full returns full comments/body/links, --depth brief remains compact, and --full with --fields exits 2. pm history pm-rnpb --json --diff --limit 2 now returns compact_history without duplicate diff (585 bytes). Checks passed: node scripts/check-secrets.mjs; pnpm quality:static; pm health --check-only --summary --json with 0 warnings; pm validate --check-resolution --json; node scripts/dogfood-package-first.mjs (84 workflows); full release gate node scripts/release/run-gates.mjs --telemetry-mode required --max-sentry-critical 10 --max-sentry-high 20 --max-telemetry-error-rate 10 --json (97 files / 1409 tests, 100 percent coverage, package-first dogfood, npx smoke, compatibility, Sentry critical=0 high=0 total=0, telemetry finish_error_rate_pct=3.26)."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-05-21T20:48:56.790Z"}],"before_hash":"f54e89dc9b65ff1c1316c0c81d4232bb66d903d4f2a7002a03d2536d7172afdf","after_hash":"4026edb5fcc2d1a9f61d46501f4d3287043e8a8c7fd7ae0234b892cc1600e502"} |
There was a problem hiding this comment.
Direct edits to .agents/pm history should not be committed.
This change directly mutates .agents/pm/history/pm-rnpb.jsonl, which violates the repo rule that pm is the system of record for this path. Please regenerate/apply these updates via the approved pm workflow instead of committing manual file edits.
As per coding guidelines, .agents/pm/**: pm is the system of record. Do not edit .agents/pm files directly.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.agents/pm/history/pm-rnpb.jsonl around lines 443 - 458, This PR directly
mutates the autogenerated agent history (pm-rnpb.jsonl) which must be produced
by the pm workflow; revert the manual edits to the history file, remove the
file-level changes from the commit, and regenerate/apply the intended updates
via the approved pm workflow (run the pm tool that produces history entries for
pm-rnpb, e.g., the agent run/claim/comment/files_add/tests_add steps you
intended) so the history is authored by the system of record; ensure the final
commit contains only the pm-generated output (and not a manual edit), then
re-run the verification commands you listed (tests/static gates) before pushing.
Make pm get --full mutually exclusive with --depth as well as --fields, preserve the history --diff top-level schema with an empty compact diff array, and broaden SDK metadata for the shared full parameter. Record pm-rnpb review evidence and rerun focused tests plus the full release gate with required Sentry/telemetry.
|
Review follow-up status:
Post-fix verification passed locally: focused 6-file suite / 172 tests, manual error-output smoke for |
…ily release (#41) * perf: drop zod from settings hot path; unblock auto daily release Removes the eagerly-imported `zod` dependency from settings.ts, which is read by nearly every command (list/get/search/context/create/update). zod (~85ms to import) was the single largest CLI startup cost and was used in exactly one file. It is replaced by a dependency-free validator (src/core/store/settings-validator.ts) that mirrors the previous schema's safeParse semantics exactly: type checks, required/optional fields, integer/positive constraints, literal unions, unknown-key stripping, and all-or-nothing failure. The read path no longer validates twice (mergeSettings now takes the already-validated input). Measured on the maintainer machine: settings module import 157ms -> 14ms pm --help 227ms -> 140ms pm list 540ms -> 340ms (~38% faster) One fewer runtime dependency (zod + transitive undici removed). The new validator is at 100% coverage (tests/unit/settings-validator.spec.ts) and is added to the vitest coverage include list. Also populates CHANGELOG [Unreleased]: the daily auto-release was silently no-op'ing (run-release-pipeline reason=changelog_unreleased_empty) because the merged crash fixes (Sentry PM-CLI-R/S/T, PRs #39/#40) never added changelog entries, stranding them on 2026.5.18. Populating [Unreleased] lets the next scheduled release ship them. No manual version bump (date-based auto-release). Documents 7 new audit findings as pm items under pm-rnpb: pm-e1va (config-driven custom types), pm-ot8r (auto-release empty-changelog robustness), pm-kyd6 (--blocked-by deps edge), pm-1nht (validate ok:false on warn), pm-6blp (plan materialize cycle + flag UX), pm-uzmf (calendar ergonomics), pm-why9 (code dedup). Gates: 1431 tests pass, 100% coverage, typecheck/static/docs-skills/secrets green. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * fix: tighten settings number validation --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Summary
pm get --fullsupport and expose it through runtime contracts plus shell completions.pm get --fields ...mutually exclusive with--full, while--fullmaps to deep item reads.history --diffpayloads when history is already compact, and point health quick-check docs/help atpm health --check-only --summary --json.Verification
PM_RUN_TESTS_SKIP_BUILD=1 node scripts/run-tests.mjs test -- tests/unit/get-append-command.spec.ts tests/unit/contracts-command.spec.ts tests/unit/completion-command.spec.ts tests/unit/error-guidance.spec.ts tests/unit/history-activity-command.spec.ts tests/integration/help-runtime.spec.ts --reporter=dot(6 files / 172 tests)node scripts/check-secrets.mjspnpm quality:staticpm health --check-only --summary --json(0 warnings)pm validate --check-resolution --jsonpm get --full, brief projection, and--full/--fieldsconflictnode scripts/dogfood-package-first.mjs(84 workflows)node scripts/release/run-gates.mjs --telemetry-mode required --max-sentry-critical 10 --max-sentry-high 20 --max-telemetry-error-rate 10 --json(97 files / 1409 tests, 100% coverage, required Sentry/telemetry green)Notes
unbraind/pm-cliis the actual GitHub repository andunbrained/pm-clidoes not resolve, so package catalog URLs were not changed.pm-xk39; this PR does not broaden into history redaction work.Summary by Sourcery
Add explicit full-item reads to the get command contracts and CLI while tightening history diff behavior and updating health-check guidance.
New Features:
Bug Fixes:
Enhancements:
Documentation:
Tests: