Skip to content

extension_migration_pending holds pm health at ok false but no command applies a pending extension migration #909

Closed

Description

@unbraind

Summary

pm health reports extension_migration_pending and counts it in
triage.migration_pending_count, but no command in the CLI applies a pending extension
migration
. The warning is permanent, it holds pm health at ok: false, and there is no
documented or discoverable way for an agent or a human to clear it.

Reproduction — pm-cli 2026.8.5

Install any extension that ships a registerMigration (both published starter packages do), then:

$ pm health --json | jq '.checks[]|select(.name=="extensions").details.triage
                        |{warning_count,migration_pending_count,migration_failed_count}'
{
  "warning_count": 12,
  "migration_pending_count": 2,
  "migration_failed_count": 0
}

Warnings:

extension_migration_pending:project:pm-starter:pm-starter-0001-noop
extension_migration_pending:project:pm-ts-starter:ts-starter-noop

The count does not change after running write commands (pm create, etc.) in the workspace —
verified across several mutations.

There is no remediation surface

Everything reachable is diagnostic-only:

tried result
pm migrate Unknown command migrate
pm --help | grep -i migrat no match
pm contracts --json no command whose name/path matches migrat
pm schema --help list, show, show-status — migrations only referenced as rename/remap item-schema definitions, unrelated
pm package --help no migration subcommand
pm extension --help --doctor / doctor — "Run consolidated extension diagnostics"; no apply/repair
pm health --help "Validates tracker/runtime health including extension triage, migration, and integrity diagnostics" — validates only
health.checks[].details rich triage block, but capability_guidance is [] and there is no remediation_map entry for this code (the telemetry check does carry one: {"telemetry_queue_pending": "pm health --check-telemetry"})

PreflightRuntimeDecision exposes run_extension_migrations / enforce_mandatory_migration_gate,
but those are override inputs, not a user-invocable action, and the published overrides here are
conservative pass-throughs that preserve the host decision (ctx.decision?.run_extension_migrations ?? true),
so nothing is suppressing the run from the extension side.

Impact

What would close it

Any one of:

  1. A user-invocable apply path — pm extension migrate (or pm extension --migrate, or a
    --apply-migrations flag on pm health/pm package) that runs pending extension migrations
    and reports applied/failed counts.
  2. If migrations are meant to apply automatically, document when, and make the warning state
    why this one has not run yet (gate disabled? scope mismatch? not yet triggered?).
  3. Failing both, add a remediation_map entry for extension_migration_pending naming the exact
    command, exactly as the telemetry check already does for telemetry_queue_pending.

Option 3 alone would at least make it actionable; option 1 is what the warning implies exists.

Environment

  • @unbrained/pm-cli 2026.8.5
  • Node 22, Linux
  • Project-scope extensions, 17 published pm-* packages installed

Activity

  1. coderabbitai commented on Aug 5, 2026

    @coderabbitai
    🔗 Related PRs

    #306 - Complete agent self-service remediation registry (extension adoption + duplicate-issue-codes gaps) [merged]
    #406 - feat(mcp): extension-aware built-in actions + action-scoped name schema (pm-zumn, pm-fq80) [merged]
    #414 - Clear CLI complexity suppressions across PM SDK and CLI [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. unbraind commented on Aug 5, 2026

    @unbraind
    OwnerAuthor

    Canonical pm item: pm-ig5cfe\n\nThis report is included in the extension lifecycle contracts implementation tranche. Progress, relationships, source/test/doc links, decisions, and verification evidence will be recorded on that 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