Skip to content

pm init writes two status registries that disagree: settings.json's embedded schema.statuses omits in_progress's alias while schema/statuses.json declares it #828

Closed

Description

@unbraind

pm --version 2026.7.29. Surfaced by a code reviewer on a fresh tracker and confirmed to be systematic.

What happens

pm init writes the status registry in two places, and they disagree about aliases.

.agents/pm/settings.json carries an embedded schema.statuses array and a schema.files.statuses pointer to schema/statuses.json. For in_progress, the canonical file declares an alias and the embedded copy does not:

settings.json  schema.statuses:  {"draft":null,"open":null,"in_progress":null,       "blocked":null,"closed":null,"canceled":["cancelled"]}
schema/statuses.json:            {"draft":null,"open":null,"in_progress":["in-progress"],"blocked":null,"closed":null,"canceled":["cancelled"]}

Note canceled does carry ["cancelled"] in both — so the embedded copy is not simply alias-free, it is alias-incomplete. That asymmetry is what makes it look like a bug rather than a deliberate projection.

Systematic, not local

Checked four independently initialized trackers of different ages (three fleet package repos plus a companion repo):

tracker settings.json schema/statuses.json
pm-web null ["in-progress"]
pm-github null ["in-progress"]
pm-graph null ["in-progress"]
companion null ["in-progress"]

All four agree with each other and disagree internally, so this is what pm init emits rather than drift introduced by a user.

Why it matters

Not a functional break as far as I can tell — pm update <id> --status in-progress resolves fine, so the canonical file is evidently the one the resolver reads. The cost is review noise and a bad repair incentive:

  • A reviewer comparing the two files reports it as a data-integrity finding (this is exactly how I found it).
  • The obvious "fix" is to hand-edit settings.json to add the alias. That is the wrong move — settings.json is history-audited, and the next pm init or pm schema mutation regenerates it anyway — but nothing in the file says so.

Suggested fix

Either make the embedded schema.statuses block a faithful mirror of schema/statuses.json (including aliases), or omit aliases from the embedded copy entirely for all statuses so it reads as a deliberate summary rather than an incomplete duplicate. The current state — one status with aliases, another without, for no visible reason — is the only version that reads as a defect.

If the embedded block is a cache rather than a source, saying so in a comment or a "_generated"-style marker would stop reviewers (human and automated) from filing this repeatedly.

Activity

  1. coderabbitai commented on Jul 30, 2026

    @coderabbitai
    🔗 Related PRs

    #51 - Polish CLI ergonomics, delete safety, and templates dedup [closed]
    #146 - fix: agent never-block reliability, MCP/version coherence, and CI/docs hardening [closed]
    #431 - Add SDK boundary inventory ratchet [merged]
    #491 - Harden init target safety and package install verification [merged]
    #712 - SDK context integrity: atomic Plans, batch similarity, sparse settings, and tombstones [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. unbraind commented on Jul 30, 2026

    @unbraind
    OwnerAuthor

    Tracked canonically as pm-62n4kk after an all-status duplicate search. The PM item records scope, acceptance criteria, lineage, and this GitHub intake; it remains open and unclaimed until actively implemented.

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