Skip to content

Agent UX: pm init <path> creates a tracker that workspace discovery then cannot find — "Run pm init first" loop right after running pm init #501

Closed

Description

@unbraind

Version: pm 2026.7.10

pm init . (or any path argument) switches init into tracker-path mode and roots the tracker at that path directly (settings.json, tasks/, … in the directory itself). But workspace discovery for every subsequent command only probes <cwd>/.agents/pm — it never considers "cwd itself is a tracker root". Result: the very next command fails with tracker_not_initialized telling the agent to run pm init first, which it just did. That's a hard loop for an agent: the error's own next_steps re-suggest the action that caused the state.

Repro

$ mkdir /tmp/ws && cd /tmp/ws
$ pm init .
ok: true
target:
  mode: "tracker-path"
  tracker_root: "/tmp/ws"      # tracker rooted at cwd itself

$ pm list --json
{ "code": "tracker_not_initialized",
  "detail": "Tracker is not initialized at /tmp/ws/.agents/pm. Run pm init first.", ... }

$ pm --pm-path . list --json   # works — the tracker exists, discovery just can't see it
{ "items": [], "count": 0, ... }

Plain pm init (no argument) uses workspace-discovery mode → .agents/pm → everything round-trips fine.

Why this bites agents specifically

pm init . is an extremely natural spelling for "init here" (git/npm muscle memory). The failure is delayed (init reports ok:true), and the recovery bundle for tracker_not_initialized neither detects the tracker sitting at cwd nor mentions --pm-path, so the agent has no path out other than re-initializing (possibly creating a second tracker at .agents/pm and silently splitting state — worst case for project management = context management).

Suggested fixes (any of)

  1. Make discovery also accept cwd (or an ancestor) as a tracker root when it contains a valid settings.json + tracker layout.
  2. Treat pm init . as the workspace-discovery spelling (init .agents/pm under it) and require something explicit like --tracker-path for raw-root mode.
  3. At minimum: tracker_not_initialized should probe for a tracker rooted at cwd and, when found, say A tracker exists at <cwd> but is outside discovery; rerun with --pm-path . — an executable next step instead of a loop.

Activity

  1. coderabbitai commented on Jul 10, 2026

    @coderabbitai
    ⚠️ Possible Duplicate Issue(s)
    🔗 Related PRs

    #142 - Guard pm tracker path targeting for agents [closed]
    #266 - Harden init targeting and extension command contracts [merged]
    #428 - Harden SDK extension runtime packaging [merged]
    #491 - Harden init target safety and package install verification [merged]


    📝 Issue Planner

    Check the box below or use the @coderabbitai plan command to generate an implementation plan and prompts that you can use with your favorite coding assistant.

    • Create Plan

    🧪 Issue enrichment is currently in open beta.

    You can configure auto-planning by selecting labels in the issue_enrichment configuration.

    To disable automatic issue enrichment, add the following to your .coderabbit.yaml:

    issue_enrichment:
      auto_enrich:
        enabled: false

    💬 Have feedback or questions? Drop into our discord!

  2. added a commit that references this issue on Jul 10, 2026
  3. unbraind commented on Jul 10, 2026

    @unbraind
    OwnerAuthor

    Verified against current main (0f43e92): a fresh followed immediately by bare {
    "items": [
    {
    "id": "pm-doxj",
    "status": "open",
    "type": "Milestone",
    "title": "pm-cli post-v0.1 roadmap & living backlog"
    },
    {
    "id": "pm-ol5v",
    "status": "in_progress",
    "type": "Issue",
    "title": "Dangling dependency references: accepted at create/update, skipped by validate, and treated as satisfied by pm next (silent unblock)"
    },
    {
    "id": "pm-usfg",
    "status": "open",
    "type": "Epic",
    "title": "SDK-first architecture: pm CLI (and MCP) become thin layers over a complete public pm SDK"
    },
    {
    "id": "pm-3hps",
    "status": "open",
    "type": "Task",
    "title": "Context relevance signal feature store: derived recency, graph, claim, risk, deadline, knowledge-density, and semantic-match signals"
    },
    {
    "id": "pm-4k6b",
    "status": "open",
    "type": "Feature",
    "title": "Adaptive context relevance engine: multi-signal scoring over metadata, graph, and history drives context/next assembly under an explicit token budget"
    },
    {
    "id": "pm-atfm",
    "status": "open",
    "type": "Feature",
    "title": "Context relevance evaluation harness: graded golden-workspace judgments for pm context/next quality"
    },
    {
    "id": "pm-w89s",
    "status": "open",
    "type": "Story",
    "title": "As an integrator, I can build a complete custom PM tool for my project using only the public pm SDK"
    },
    {
    "id": "pm-mpbb",
    "status": "open",
    "type": "Epic",
    "title": "Capability: CLI command surface & agent ergonomics"
    },
    {
    "id": "pm-n7rr",
    "status": "open",
    "type": "Epic",
    "title": "CLI surface simplification: noun-verb consolidation to a minimal agent-first command grammar (zero feature loss)"
    },
    {
    "id": "pm-55ra",
    "status": "open",
    "type": "Task",
    "title": "Token-budget context packer: diversity-aware selection, projection degradation, and bounded output for pm context/next"
    },
    {
    "id": "pm-tnud",
    "status": "open",
    "type": "Task",
    "title": "Consolidate package lifecycle: extension/package/install/upgrade under a single pm package namespace"
    },
    {
    "id": "pm-m2u1",
    "status": "open",
    "type": "Epic",
    "title": "Architecture Decision Records (living log)"
    },
    {
    "id": "pm-dj98",
    "status": "open",
    "type": "Epic",
    "title": "Capability: Concurrency & multi-agent safety"
    },
    {
    "id": "pm-33cw",
    "status": "open",
    "type": "Epic",
    "title": "Capability: Governance, validation & data quality"
    },
    {
    "id": "pm-o2kc",
    "status": "open",
    "type": "Epic",
    "title": "Capability: Storage, history & data durability"
    },
    {
    "id": "pm-pbyu",
    "status": "open",
    "type": "Decision",
    "title": "ADR: noun-verb CLI grammar — consolidation principles and alias-preserving deprecation policy (proposed)"
    },
    {
    "id": "pm-m0uc",
    "status": "open",
    "type": "Task",
    "title": "Docstrings: src/cli/commands (largest surface — command option/result interfaces)"
    },
    {
    "id": "pm-mswi",
    "status": "open",
    "type": "Task",
    "title": "Docstrings: src/core/extensions (extension-types + loader/runtime contracts)"
    },
    {
    "id": "pm-uxmf",
    "status": "open",
    "type": "Task",
    "title": "Docstrings: src/types (shared data model interfaces + consts)"
    },
    {
    "id": "pm-uwu0",
    "status": "open",
    "type": "Task",
    "title": "Docstrings: src/sdk (public SDK surface + cli-contracts)"
    },
    {
    "id": "pm-768v",
    "status": "open",
    "type": "Task",
    "title": "Docstrings: src/core (search, schema, test, history, telemetry, governance, store, item, and remaining core modules)"
    },
    {
    "id": "pm-2vb2",
    "status": "open",
    "type": "Task",
    "title": "Docstrings: src/cli (non-commands), src/mcp, src/ root modules"
    },
    {
    "id": "pm-qely",
    "status": "open",
    "type": "Task",
    "title": "Docstrings: packages/* (module docs + exported/public surface for all 11 shipped packages)"
    },
    {
    "id": "pm-5566",
    "status": "open",
    "type": "Task",
    "title": "Docstring gate: extend static-quality-gate to enforce public-API + data-contract coverage repo-wide"
    },
    {
    "id": "pm-4ak1",
    "status": "open",
    "type": "Epic",
    "title": "Repo-wide 100% docstring coverage: public API + data contracts (gate-enforced)"
    },
    {
    "id": "pm-oz8u",
    "status": "open",
    "type": "Task",
    "title": "Semgrep 2026-07-06 downloaded code findings triage batch"
    },
    {
    "id": "pm-ngjd",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840487: High spawn shell true in src/cli/commands/test.ts#L957"
    },
    {
    "id": "pm-f7ik",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874962821: High spawn shell true in plugins/pm-claude/scripts/pm-mcp-server.mjs#L82"
    },
    {
    "id": "pm-a7m7",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840488: High spawn shell true in scripts/release/utils.mjs#L38"
    },
    {
    "id": "pm-1uul",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874962820: High spawn shell true in plugins/pm-codex/scripts/pm-mcp-server.mjs#L86"
    },
    {
    "id": "pm-a22j",
    "status": "open",
    "type": "Chore",
    "title": "Baseline agent token cost of the CLI surface: measure pm --help, per-command help, and contracts payload sizes before consolidation"
    },
    {
    "id": "pm-tu71",
    "status": "open",
    "type": "Issue",
    "title": "GH-457: pm health hangs during vectorization check with no output (never-block violation)"
    },
    {
    "id": "pm-qd2h",
    "status": "open",
    "type": "Issue",
    "title": "GH-452: plan materialize dead-ends on types with required-on-create custom fields"
    },
    {
    "id": "pm-jkjt",
    "status": "open",
    "type": "Issue",
    "title": "GH-450: --duration 5m parses as 5 MONTHS — silent wrong data on meet/event/remind"
    },
    {
    "id": "pm-kjbh",
    "status": "open",
    "type": "Issue",
    "title": "GH-449: contracts policy_modes advertises 'enforce' but governance config accepts 'strict' (contract drift)"
    },
    {
    "id": "pm-sjfs",
    "status": "open",
    "type": "Issue",
    "title": "GH-448: boolean custom field is silently never persisted (data-loss class)"
    },
    {
    "id": "pm-ugqx",
    "status": "open",
    "type": "Epic",
    "title": "Capability: Extension & package platform maturity"
    },
    {
    "id": "pm-e2bq",
    "status": "open",
    "type": "Feature",
    "title": "Tiered contracts-driven help: one-screen core help, full surface via pm help --all, generated from the contract table"
    },
    {
    "id": "pm-tqel",
    "status": "open",
    "type": "Task",
    "title": "Consolidate history commands: history-redact/history-repair/history-compact/activity/restore under pm history subcommands"
    },
    {
    "id": "pm-pfqi",
    "status": "open",
    "type": "Task",
    "title": "Consolidate the 8 list-* status variants into pm list --status (list-all/open/draft/in-progress/blocked/closed/canceled become hidden aliases)"
    },
    {
    "id": "pm-0z7n",
    "status": "open",
    "type": "Feature",
    "title": "Alias shim layer: config-aware hidden aliases with one-line migration hints (foundation for all consolidations)"
    },
    {
    "id": "pm-1kxs",
    "status": "open",
    "type": "Story",
    "title": "As a coding agent, I can discover and operate every pm capability from a one-screen top-level command list without out-of-band context"
    },
    {
    "id": "pm-u9d0",
    "status": "open",
    "type": "Epic",
    "title": "Capability: Docs, onboarding, release & CI"
    },
    {
    "id": "pm-5oj5",
    "status": "open",
    "type": "Epic",
    "title": "Capability: Observability, telemetry & health"
    },
    {
    "id": "pm-8jdc",
    "status": "open",
    "type": "Epic",
    "title": "Capability: Schema, config & universal customization"
    },
    {
    "id": "pm-5k4v",
    "status": "open",
    "type": "Epic",
    "title": "Capability: MCP server & contract platform"
    },
    {
    "id": "pm-ydp6",
    "status": "open",
    "type": "Epic",
    "title": "Capability: Search & semantic retrieval (post-v0.1)"
    },
    {
    "id": "pm-hfg5",
    "status": "in_progress",
    "type": "Issue",
    "title": "pm next repeats the recommended item verbatim as ready[0] — emit an id reference instead"
    },
    {
    "id": "pm-yl6c",
    "status": "in_progress",
    "type": "Issue",
    "title": "pm next recommends another agent's assigned in_progress item as 'resume to finish' — recommendation must be caller-aware"
    },
    {
    "id": "pm-l0bu",
    "status": "in_progress",
    "type": "Issue",
    "title": "GH-489: pm next summary reports blocked: 0 while blocked items exist — blocked companion list missing"
    },
    {
    "id": "pm-114v",
    "status": "in_progress",
    "type": "Feature",
    "title": "pm claim --next: atomically claim the next actionable item so parallel agents each get distinct work"
    },
    {
    "id": "pm-4a7m",
    "status": "open",
    "type": "Feature",
    "title": "Promote history-stream maintenance primitives to the public SDK: history-redact, history-repair, history-compact (audited rewrite, re-anchor, checkpoint/prune)"
    },
    {
    "id": "pm-oxrw",
    "status": "open",
    "type": "Feature",
    "title": "Promote governance, validation, health, and maintenance primitives to the public SDK: validate, health, gc, changelog/reporting hooks"
    },
    {
    "id": "pm-3mna",
    "status": "open",
    "type": "Feature",
    "title": "Promote schema, config, profile, and init primitives to the public SDK: full workspace customization programmatically"
    },
    {
    "id": "pm-wrbe",
    "status": "open",
    "type": "Task",
    "title": "Deterministic closed_at backfill for legacy closed items derived from history streams"
    },
    {
    "id": "pm-7zs0",
    "status": "open",
    "type": "Reminder",
    "title": "Verify daily auto-release published to npm (release-health check)"
    },
    {
    "id": "pm-801d",
    "status": "open",
    "type": "Feature",
    "title": "Persistent derived read index: serve list/context/next/get-by-filter from an O(result) index instead of scanning all item files"
    },
    {
    "id": "pm-j8z6",
    "status": "open",
    "type": "Chore",
    "title": "Reconcile linked-file ownership after source and test relocations"
    },
    {
    "id": "pm-zwpp",
    "status": "open",
    "type": "Feature",
    "title": "Promote annotation and link primitives to the public SDK: comments, notes, learnings, files, docs, deps, append metadata"
    },
    {
    "id": "pm-x6jf",
    "status": "open",
    "type": "Feature",
    "title": "Promote package & extension lifecycle primitives to the public SDK: install, upgrade, extension list/enable/disable, managed-package state"
    },
    {
    "id": "pm-cbwg",
    "status": "open",
    "type": "Feature",
    "title": "SDK-only exemplar: minimal custom PM CLI package proving the universal-tool story end-to-end"
    },
    {
    "id": "pm-lixy",
    "status": "open",
    "type": "Task",
    "title": "Context judgment corpus: small, real-shaped, scale, and returning-agent continuity scenarios for pm context/next"
    },
    {
    "id": "pm-vvib",
    "status": "open",
    "type": "Decision",
    "title": "ADR: cognitive memory architecture — agent context assembly modeled on human memory systems (proposed)"
    },
    {
    "id": "pm-e9zh",
    "status": "open",
    "type": "Chore",
    "title": "Backfill terminal resolution evidence without placeholder metadata"
    },
    {
    "id": "pm-sqf7",
    "status": "open",
    "type": "Issue",
    "title": "GH-469: pm --version reports a stale binary when multiple npm global prefixes exist"
    },
    {
    "id": "pm-ishm",
    "status": "open",
    "type": "Feature",
    "title": "GH-445: suppress/factor repeated inherited tags in pm context rows (--no-tags + tag folding)"
    },
    {
    "id": "pm-g9xk",
    "status": "open",
    "type": "Feature",
    "title": "GH-443: lean error mode — drop constant required/why boilerplate from structured errors"
    },
    {
    "id": "pm-4bzq",
    "status": "open",
    "type": "Feature",
    "title": "GH-472: create error for missing required custom fields lists the field names"
    },
    {
    "id": "pm-a9mc",
    "status": "open",
    "type": "Feature",
    "title": "pm validate needs a counts-only projection so agents can read drift numbers without row-array payloads"
    },
    {
    "id": "pm-gdi7",
    "status": "open",
    "type": "Task",
    "title": "Agent-UX output polish: unknown-option errors should suggest valid flags; list-closed projection too verbose; schema add-field help discoverability"
    },
    {
    "id": "pm-khdq",
    "status": "open",
    "type": "Issue",
    "title": "Create/copy ID allocation TOCTOU: duplicate generated id silently overwrites the other item's file; idExists misses extension type folders"
    },
    {
    "id": "pm-bgcu",
    "status": "open",
    "type": "Issue",
    "title": "Workspace singleton files (settings.json, schema, session-state, checkpoints) are lock-free read-modify-write — parallel pm config set demonstrably loses updates"
    },
    {
    "id": "pm-p5u6",
    "status": "open",
    "type": "Chore",
    "title": "Bound local temp footprint: prune Node compile cache and guarantee smoke/dogfood sandbox cleanup on failure"
    },
    {
    "id": "pm-lp4j",
    "status": "open",
    "type": "Task",
    "title": "Hide internal test-runs-worker from default help/contracts and route it under the test execution plumbing"
    },
    {
    "id": "pm-6ixn",
    "status": "open",
    "type": "Story",
    "title": "As a maintainer, I want every security scanner finding tracked as an individually triageable pm issue with source links and severity, so that agents can drive security posture from pm context alone"
    },
    {
    "id": "pm-w8q4",
    "status": "open",
    "type": "Feature",
    "title": "Stale in-progress detection: validate/health flag in_progress items with no active claim or recent activity"
    },
    {
    "id": "pm-psy1",
    "status": "open",
    "type": "Task",
    "title": "Scripting contract: documented and test-gated guarantees for exit codes, stdout/stderr stream discipline, and stable machine-readable field names"
    },
    {
    "id": "pm-qwoy",
    "status": "open",
    "type": "Epic",
    "title": "Capability: Security & code scanning"
    },
    {
    "id": "pm-pim7",
    "status": "open",
    "type": "Feature",
    "title": "Write-time secret detection advisory: mutation paths flag credential-shaped content before it enters the immutable history stream"
    },
    {
    "id": "pm-4ri6",
    "status": "open",
    "type": "Feature",
    "title": "Create-time near-duplicate advisory: pm create/copy surface similar existing items before new work is filed"
    },
    {
    "id": "pm-bwyw",
    "status": "open",
    "type": "Story",
    "title": "As a long-lived agent returning to a workspace after an hour or a year, pm context restores my working memory — active work, why it matters, distilled learnings, and what changed while I was away — in bounded tokens"
    },
    {
    "id": "pm-hib1",
    "status": "open",
    "type": "Feature",
    "title": "Point-in-time read projection: pm get --at <version|timestamp> renders reconstructed historical item state without mutating"
    },
    {
    "id": "pm-z436",
    "status": "open",
    "type": "Story",
    "title": "As an agent on a minutes-old scratch project, pm init, quick-capture create, and next are near-zero ceremony and token-cheap at three-item scale"
    },
    {
    "id": "pm-dijg",
    "status": "open",
    "type": "Feature",
    "title": "Schema evolution migrations: lossless, history-recorded bulk migration of existing items when custom types, fields, or statuses are renamed or retired"
    },
    {
    "id": "pm-5qmm",
    "status": "open",
    "type": "Feature",
    "title": "Workspace memory tiers: derived rollup summaries of closed-item epochs keep decades-old work queryable in bounded tokens"
    },
    {
    "id": "pm-9yfo",
    "status": "open",
    "type": "Task",
    "title": "History completeness gate: contract-driven test proving every mutating CLI/SDK action appends a history entry"
    },
    {
    "id": "pm-klo8",
    "status": "open",
    "type": "Feature",
    "title": "Workspace-scoped audit history stream: schema/config/profile/init mutations recorded as append-only hash-chained JSONL"
    },
    {
    "id": "pm-9rxu",
    "status": "open",
    "type": "Epic",
    "title": "Scale-out: sub-second, bounded-token context at 100k-1M items with thousands of concurrent agents"
    },
    {
    "id": "pm-mu8m",
    "status": "open",
    "type": "Task",
    "title": "Generate shell completions, MCP tool registrations, and command reference docs from the contracts table (single source of truth)"
    },
    {
    "id": "pm-ik19",
    "status": "open",
    "type": "Task",
    "title": "Fold bulk and destructive lifecycle variants into their base nouns: update-many into update, close-many into close, delete/restore placement per ADR"
    },
    {
    "id": "pm-92if",
    "status": "open",
    "type": "Epic",
    "title": "CodeFactor remediation: drive code quality from A to A+ (zero outstanding findings)"
    },
    {
    "id": "pm-646c",
    "status": "open",
    "type": "Feature",
    "title": "NDJSON output mode: --format ndjson on list/search/context emits one JSON object per line for grep/jq/xargs pipelines"
    },
    {
    "id": "pm-m9xv",
    "status": "open",
    "type": "Story",
    "title": "As a power user or agent, I can compose pm with grep/jq/xargs and shell scripts to build arbitrary queries and bulk operations on the fly"
    },
    {
    "id": "pm-g2zz",
    "status": "open",
    "type": "Story",
    "title": "As an agent in a million-item workspace, pm context and pm next give me a correct working set in under a second and a bounded token budget, without me knowing how big the workspace is"
    },
    {
    "id": "pm-dfg0",
    "status": "open",
    "type": "Feature",
    "title": "Cursor pagination and bounded-output defaults for list/search/context at scale"
    },
    {
    "id": "pm-mi2x",
    "status": "open",
    "type": "Chore",
    "title": "Scale benchmark harness: synthetic 10k/100k/1M-item workspace generator + latency/memory/token baseline for the read and claim hot paths"
    },
    {
    "id": "pm-bl8x",
    "status": "open",
    "type": "Decision",
    "title": "ADR: workspace scale-out strategy — indexed reads, storage fan-out, and bounded-output contracts for 100k-1M-item workspaces (proposed)"
    },
    {
    "id": "pm-yowi",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840483: Medium non-literal RegExp in src/cli/commands/history-redact.ts#L250"
    },
    {
    "id": "pm-ycxu",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840461: Medium non-literal RegExp in src/cli/commands/test.ts#L1506"
    },
    {
    "id": "pm-y49x",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840469: Medium non-literal RegExp in src/cli/commands/test.ts#L1506"
    },
    {
    "id": "pm-y0wv",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840471: Medium non-literal RegExp in src/cli/commands/search.ts#L1318"
    },
    {
    "id": "pm-xxrq",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840455: Medium prototype pollution loop in src/cli/commands/test.ts#L1383"
    },
    {
    "id": "pm-v9wb",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840474: Medium non-literal RegExp in src/cli/commands/search.ts#L1318"
    },
    {
    "id": "pm-ufr4",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840477: Medium non-literal RegExp in src/cli/commands/linked-test-parsers.ts#L333"
    },
    {
    "id": "pm-u57g",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840466: Medium non-literal RegExp in src/cli/commands/test.ts#L1506"
    },
    {
    "id": "pm-t8e9",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840475: Medium non-literal RegExp in src/cli/commands/linked-test-parsers.ts#L333"
    },
    {
    "id": "pm-ssi3",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840484: Medium non-literal RegExp in src/cli/commands/history-redact.ts#L175"
    },
    {
    "id": "pm-rotb",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840470: Medium non-literal RegExp in src/cli/commands/search.ts#L1318"
    },
    {
    "id": "pm-r5mf",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840468: Medium non-literal RegExp in src/cli/commands/test.ts#L1506"
    },
    {
    "id": "pm-pax3",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840485: Medium non-literal RegExp in src/cli/commands/history-redact.ts#L175"
    },
    {
    "id": "pm-osnl",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840458: Medium non-literal RegExp in src/cli/commands/validate.ts#L1210"
    },
    {
    "id": "pm-o61m",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840457: Medium non-literal RegExp in src/cli/commands/validate.ts#L1210"
    },
    {
    "id": "pm-nwzn",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840476: Medium non-literal RegExp in src/cli/commands/linked-test-parsers.ts#L333"
    },
    {
    "id": "pm-nb1o",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840459: Medium non-literal RegExp in src/cli/commands/validate.ts#L1210"
    },
    {
    "id": "pm-lbyv",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840480: Medium non-literal RegExp in src/cli/commands/linked-test-parsers.ts#L333"
    },
    {
    "id": "pm-huq2",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840467: Medium non-literal RegExp in src/cli/commands/test.ts#L1506"
    },
    {
    "id": "pm-gqmo",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840472: Medium non-literal RegExp in src/cli/commands/search.ts#L1318"
    },
    {
    "id": "pm-gkut",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840452: Medium dependabot missing cooldown in .github/dependabot.yml#L3"
    },
    {
    "id": "pm-dtn1",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840460: Medium non-literal RegExp in src/cli/commands/test.ts#L1506"
    },
    {
    "id": "pm-dmo5",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840451: Medium dependabot missing cooldown in .github/dependabot.yml#L23"
    },
    {
    "id": "pm-dizf",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840482: Medium non-literal RegExp in src/cli/commands/history-redact.ts#L250"
    },
    {
    "id": "pm-bwa6",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840478: Medium non-literal RegExp in src/cli/commands/linked-test-parsers.ts#L333"
    },
    {
    "id": "pm-a23c",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840481: Medium non-literal RegExp in src/cli/commands/linked-test-parsers.ts#L157"
    },
    {
    "id": "pm-9cop",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840486: Medium non-literal RegExp in src/cli/commands/create.ts#L393"
    },
    {
    "id": "pm-7778",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840473: Medium non-literal RegExp in src/cli/commands/search.ts#L1318"
    },
    {
    "id": "pm-4la5",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840462: Medium non-literal RegExp in src/cli/commands/test.ts#L1506"
    },
    {
    "id": "pm-3u2x",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840456: Medium non-literal RegExp in src/cli/commands/validate.ts#L1210"
    },
    {
    "id": "pm-3kk6",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840453: Medium prototype pollution loop in src/core/config/nested-settings.ts#L488"
    },
    {
    "id": "pm-3isc",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840465: Medium non-literal RegExp in src/cli/commands/test.ts#L1506"
    },
    {
    "id": "pm-2038",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840479: Medium non-literal RegExp in src/cli/commands/linked-test-parsers.ts#L333"
    },
    {
    "id": "pm-1uok",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840463: Medium non-literal RegExp in src/cli/commands/test.ts#L1506"
    },
    {
    "id": "pm-1skc",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840454: Medium prototype pollution loop in src/cli/commands/test.ts#L1389"
    },
    {
    "id": "pm-0m2m",
    "status": "open",
    "type": "Issue",
    "title": "Semgrep 874840464: Medium non-literal RegExp in src/cli/commands/test.ts#L1506"
    },
    {
    "id": "pm-9x6e",
    "status": "open",
    "type": "Task",
    "title": "Capstone: zero the SDK import-boundary baseline (91 entries) — flip remaining CLI/MCP private-core imports to SDK primitives and harden the ratchet into a hard boundary gate"
    },
    {
    "id": "pm-6apl",
    "status": "open",
    "type": "Task",
    "title": "Group diagnostics/maintenance under pm ops: stats, health, validate, gc, telemetry, eval"
    },
    {
    "id": "pm-cfed",
    "status": "open",
    "type": "Feature",
    "title": "GH-435: lean JSON output mode omitting null/empty fields (~50% token cut for --json)"
    },
    {
    "id": "pm-b9ov",
    "status": "open",
    "type": "Issue",
    "title": "GH-454: schema add-field accepts reserved built-in names silently; collision error names no partner"
    },
    {
    "id": "pm-x1g5",
    "status": "open",
    "type": "Issue",
    "title": "GH-446: pm get omits schedule facet (events/start_at/end_at/location) for Meeting/Event/Reminder"
    },
    {
    "id": "pm-cpja",
    "status": "open",
    "type": "Feature",
    "title": "GH-444: ergonomic author attribution — global --author, init author_default, unknown-author advisory"
    },
    {
    "id": "pm-qmjx",
    "status": "open",
    "type": "Issue",
    "title": "GH-441: type-aware create help mislabels applicable flags as required (ignores create-mode)"
    },
    {
    "id": "pm-kipd",
    "status": "open",
    "type": "Feature",
    "title": "GH-438: accept a full item JSON document on stdin for pm create / pm update"
    },
    {
    "id": "pm-nilh",
    "status": "open",
    "type": "Feature",
    "title": "GH-437: make lean mutation output the CLI default (parity with MCP compact envelope)"
    },
    {
    "id": "pm-ds3b",
    "status": "open",
    "type": "Task",
    "title": "SDK reference documentation for promoted primitives + migration notes for the CLI-on-SDK layering"
    },
    {
    "id": "pm-je50",
    "status": "open",
    "type": "Feature",
    "title": "Promote plan workflow primitives to the public SDK: plan create/steps/dependencies/decisions/discoveries/validation/materialization"
    },
    {
    "id": "pm-kcs4",
    "status": "open",
    "type": "Task",
    "title": "Consolidate the navigation trio under the context noun: next and focus become context verbs (context/next/focus = one noun)"
    },
    {
    "id": "pm-yql1",
    "status": "open",
    "type": "Task",
    "title": "Consolidate item annotation facets: comments/notes/learnings/files/docs/deps/append/test become one facet grammar (old spellings aliased)"
    },
    {
    "id": "pm-o3fh",
    "status": "open",
    "type": "Task",
    "title": "Move meet/event/remind calendar shortcuts from core surface into the builtin-calendar package as create sugar"
    },
    {
    "id": "pm-eq4x",
    "status": "open",
    "type": "Task",
    "title": "Fold lifecycle sugar start-task/pause-task/close-task into claim/release/close flags (hidden aliases)"
    },
    {
    "id": "pm-28cf",
    "status": "open",
    "type": "Issue",
    "title": "Search config normalization (GH-244 follow-up): empty provider adapter strings should auto-normalize"
    },
    {
    "id": "pm-z5nb",
    "status": "open",
    "type": "Plan",
    "title": "Complete schema customization epic (pm-8jdc): remove-type, add-status, per-type workflows, config create_default_type"
    },
    {
    "id": "pm-ueuq",
    "status": "open",
    "type": "Task",
    "title": "Dedupe flag-contracts.ts repetitive per-command blocks (9 internal clones, ~150 lines)"
    },
    {
    "id": "pm-jt3b",
    "status": "open",
    "type": "Task",
    "title": "Split search.ts (3119 LOC, 92% of 3400 cap) into rendering / query-parsing / inline-field modules"
    },
    {
    "id": "pm-rj3w",
    "status": "open",
    "type": "Issue",
    "title": "Telemetry worker: no Postgres reconnect — ingestion stalls with events stuck in RabbitMQ after postgres restart"
    },
    {
    "id": "pm-z32q",
    "status": "in_progress",
    "type": "Issue",
    "title": "GH-498: pm comments rejects --body — accept it as an alias for --add and hint on unknown options"
    },
    {
    "id": "pm-6y58",
    "status": "in_progress",
    "type": "Issue",
    "title": "GH-500: suggested_retry renders boolean flags with a "" placeholder — literal suggestion fails"
    },
    {
    "id": "pm-wenq",
    "status": "open",
    "type": "Task",
    "title": "Close-time completeness signal for structured resolution fields (resolution/expected/actual) — config-gated warn or require"
    },
    {
    "id": "pm-ec8s",
    "status": "open",
    "type": "Feature",
    "title": "Extend pm-changelog to publish TypeScript source so pm install vendors TS-only (native .ts entry loading)"
    },
    {
    "id": "pm-p3x4",
    "status": "open",
    "type": "Issue",
    "title": "pm activity --compact --json emits an empty activity:[] decoy key alongside compact_activity"
    },
    {
    "id": "pm-g543",
    "status": "open",
    "type": "Issue",
    "title": "GH-490: unknown-command suggester ranks substring hits over synonyms/edit distance — pm log suggests 'extension catalog'"
    },
    {
    "id": "pm-ixoa",
    "status": "open",
    "type": "Issue",
    "title": "First-party service collision: builtin-calendar and builtin-guide-shell both override the global output_format service"
    },
    {
    "id": "pm-h85e",
    "status": "open",
    "type": "Feature",
    "title": "GH-471: pm context includes an installed package/extension health summary"
    },
    {
    "id": "pm-l98s",
    "status": "open",
    "type": "Task",
    "title": "Extension install should scaffold newly required item-type folders (pm health ok:false after installing pm-kanban until pm init)"
    },
    {
    "id": "pm-llrp",
    "status": "open",
    "type": "Task",
    "title": "SDK authoring DX polish: manifest-drift guard in scaffold tests, expectation key naming, repeated --capability, define* index signatures"
    },
    {
    "id": "pm-esbt",
    "status": "open",
    "type": "Task",
    "title": "docs-skills-gate: validate anchor fragments in relative links"
    },
    {
    "id": "pm-a2h3",
    "status": "open",
    "type": "Task",
    "title": "Notes/learnings repair parity: add --edit/--delete (and a real --stdin/--file input source) matching comments, so bad annotation entries are fixable via the CLI"
    },
    {
    "id": "pm-lvyd",
    "status": "open",
    "type": "Task",
    "title": "Claim and lock throughput at thousands of concurrent agents: contention stress benchmark + scaling fixes"
    },
    {
    "id": "pm-pee5",
    "status": "open",
    "type": "Feature",
    "title": "Extend the existing pm-brief package with flow metrics: cycle/lead time, throughput, and aging-WIP computed from item history streams"
    },
    {
    "id": "pm-kexu",
    "status": "open",
    "type": "Issue",
    "title": "update-many --dry-run should allow filter-only preview for review and bulk-selection workflows"
    },
    {
    "id": "pm-rml5",
    "status": "open",
    "type": "Feature",
    "title": "Extend the existing pm-github package to close the reconciliation loop: adopt GH--titled items into gh: provenance, evidence-comment close sync, metadata-profile seeding"
    },
    {
    "id": "pm-zwib",
    "status": "open",
    "type": "Issue",
    "title": "Stale-lock takeover race in acquireLock: two waiters can both remove the stale lock and both believe they own the item"
    },
    {
    "id": "pm-ugld",
    "status": "open",
    "type": "Issue",
    "title": "pm release leaves the item in_progress with no owner: offer --status open (or hint) so released work does not linger as phantom WIP"
    },
    {
    "id": "pm-iktj",
    "status": "open",
    "type": "Task",
    "title": "Uniform stdin convention: every --*-file flag (body-file, close --reason-file, etc.) accepts '-' for stdin, matching the annotation --add - convention"
    },
    {
    "id": "pm-g5sx",
    "status": "open",
    "type": "Feature",
    "title": "Tracker merge semantics: field-aware merge guidance, history-chain-safe JSONL merging, and post-merge reconciliation for multi-branch agent workflows"
    },
    {
    "id": "pm-e200",
    "status": "open",
    "type": "Feature",
    "title": "Mutation event stream primitive: pm events --follow (NDJSON with durable cursor) + SDK subscription API for cross-process agent coordination"
    },
    {
    "id": "pm-pivf",
    "status": "open",
    "type": "Chore",
    "title": "Resolve validate duplicate issue-code GH-209 warning without changelog drag"
    },
    {
    "id": "pm-0mox",
    "status": "open",
    "type": "Task",
    "title": "Alias-usage counters: measure deprecated-spelling hits so grammar-freeze removals are evidence-based"
    },
    {
    "id": "pm-uwfs",
    "status": "open",
    "type": "Feature",
    "title": "Context usage feedback signal: served-then-acted-on outcomes strengthen relevance scoring (retrieval-practice effect)"
    },
    {
    "id": "pm-3z0k",
    "status": "open",
    "type": "Feature",
    "title": "Portable integrity attestation: export a detached hash-chain proof bundle and verify it standalone, so third parties can confirm the recorded history was never altered"
    },
    {
    "id": "pm-plwm",
    "status": "open",
    "type": "Feature",
    "title": "Index-backed query predicates: --where expression on list/search so complex selections stay O(result) at million-item scale"
    },
    {
    "id": "pm-xkgq",
    "status": "open",
    "type": "Task",
    "title": "Fold aggregate into the query nouns: pm list --group-by/--count-by (or ops stats --by), retire the aggregate top-level"
    },
    {
    "id": "pm-npr3",
    "status": "open",
    "type": "Task",
    "title": "Map the workspace-customization family (init/config/schema/profile) in the target noun grammar: keep as distinct nouns or merge under one customization noun"
    },
    {
    "id": "pm-agou",
    "status": "open",
    "type": "Decision",
    "title": "ADR: v1.0 GA stability contract — CLI grammar freeze, SDK semver surface, storage format_version policy, and scale targets (draft)"
    },
    {
    "id": "pm-o79o",
    "status": "open",
    "type": "Task",
    "title": "History and git growth policy automation: compaction cadence, gc scheduling, and archive guidance for million-event repositories"
    },
    {
    "id": "pm-0qg5",
    "status": "open",
    "type": "Task",
    "title": "Item-directory fan-out: bucketed storage layout behind format_version gating with a lossless migration"
    },
    {
    "id": "pm-tgq6",
    "status": "open",
    "type": "Issue",
    "title": "Flaky Windows nightly: stale-cleanup lock test intermittently misses the mocked owner-write failure (GH-427)"
    },
    {
    "id": "pm-ypha",
    "status": "open",
    "type": "Issue",
    "title": "GH-453: plan materialize --json response omits title/type/parent on materialized entries"
    },
    {
    "id": "pm-oslr",
    "status": "open",
    "type": "Feature",
    "title": "Promote execution and diagnostics primitives to the public SDK: linked-test running and test-run lifecycle, search eval harness, telemetry stats/export"
    },
    {
    "id": "pm-f4yn",
    "status": "open",
    "type": "Task",
    "title": "Prune src/cli/commands/index.ts barrel dead re-exports and adopt knip as a dead-export gate"
    },
    {
    "id": "pm-is1a",
    "status": "open",
    "type": "Story",
    "title": "As an organization with many repos and thousands of agents, I can federate multiple pm workspaces: cross-workspace context, dependencies, and aggregation"
    },
    {
    "id": "pm-xc68",
    "status": "open",
    "type": "Story",
    "title": "As an organization running business workflows on pm, I can define roles and item-level policies (who may transition/approve what) enforced consistently at the SDK layer"
    },
    {
    "id": "pm-u14c",
    "status": "open",
    "type": "Story",
    "title": "As an organization running thousands of agents, I can verify which principal recorded each history entry: per-entry author signatures complementing hash-chain tamper-evidence"
    },
    {
    "id": "pm-xtrd",
    "status": "open",
    "type": "Feature",
    "title": "Beyond-PM SDK exemplar spike: minimal VCS-style changeset workflow as a pm package (custom schema + event-sourced history + hooks)"
    },
    {
    "id": "pm-8ngt",
    "status": "open",
    "type": "Story",
    "title": "As a platform developer, I can build a non-PM domain system (e.g. a git-like VCS or a company's business workflows) using only pm SDK primitives"
    }
    ],
    "count": 193,
    "filters": {
    "status": null,
    "type": null,
    "tag": null,
    "priority": null,
    "deadline_before": null,
    "deadline_after": null,
    "updated_after": null,
    "updated_before": null,
    "created_after": null,
    "created_before": null,
    "ids": null,
    "assignee": null,
    "assignee_filter": null,
    "parent": null,
    "sprint": null,
    "release": null,
    "limit": null,
    "offset": null,
    "include_body": null,
    "compact": null,
    "fields": null,
    "sort": null,
    "order": null,
    "runtime_filters": {}
    },
    "projection": {
    "mode": "compact",
    "fields": [
    "id",
    "status",
    "type",
    "title"
    ]
    },
    "sorting": {
    "sort": "default",
    "order": "asc"
    },
    "now": "2026-07-10T17:52:53.031Z"
    } succeeds with implicit cwd-rooted tracker discovery. The root-layout discovery fix already landed through the GH-495/GH-488 init-path work, so this report is resolved without an additional patch.

  4. unbraind commented on Jul 11, 2026

    @unbraind
    OwnerAuthor

    pm tracker item:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions