@unbrained/pm-cli 2026.9.7 → 2026.9.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/pm-developer/SKILL.md +12 -4
- package/.agents/skills/pm-developer/references/MULTI_AGENT_MERGE.md +19 -10
- package/.agents/skills/pm-extensions/SKILL.md +6 -0
- package/.agents/skills/pm-sdk/SKILL.md +11 -2
- package/.agents/skills/pm-user/SKILL.md +5 -0
- package/.agents/skills/pm-user/references/ECOSYSTEM_PLANNING.md +95 -0
- package/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +211 -181
- package/dist/cli/after-command-context-usage.js +1 -48
- package/dist/cli/argv-utils.js +1 -40
- package/dist/cli/bootstrap-args.js +1 -9
- package/dist/cli/bundle-integrity.js +2 -110
- package/dist/cli/commander-usage.js +11 -771
- package/dist/cli/commands/activity.js +1 -9
- package/dist/cli/commands/aggregate.js +1 -5
- package/dist/cli/commands/append.js +1 -5
- package/dist/cli/commands/claim.js +1 -5
- package/dist/cli/commands/close-many.js +1 -5
- package/dist/cli/commands/close.js +1 -9
- package/dist/cli/commands/comments.js +1 -5
- package/dist/cli/commands/config.js +1 -9
- package/dist/cli/commands/context.js +1 -9
- package/dist/cli/commands/contracts.js +1 -5
- package/dist/cli/commands/copy.js +1 -9
- package/dist/cli/commands/create.js +1 -9
- package/dist/cli/commands/delete.js +1 -9
- package/dist/cli/commands/deps.js +1 -9
- package/dist/cli/commands/docs.js +1 -9
- package/dist/cli/commands/duplicates.js +1 -9
- package/dist/cli/commands/eval.js +1 -9
- package/dist/cli/commands/extension/describe.js +1 -5
- package/dist/cli/commands/extension/scaffold.js +1 -5
- package/dist/cli/commands/extension/shared.js +1 -5
- package/dist/cli/commands/extension.js +1 -9
- package/dist/cli/commands/files.js +1 -9
- package/dist/cli/commands/focus.js +1 -9
- package/dist/cli/commands/gc.js +1 -9
- package/dist/cli/commands/get.js +1 -9
- package/dist/cli/commands/graph.js +1 -10
- package/dist/cli/commands/health.js +1 -9
- package/dist/cli/commands/history-compact.js +1 -10
- package/dist/cli/commands/history-redact.js +1 -11
- package/dist/cli/commands/history-repair.js +1 -10
- package/dist/cli/commands/history.js +1 -5
- package/dist/cli/commands/index.js +1 -58
- package/dist/cli/commands/init-agent-guidance.js +1 -9
- package/dist/cli/commands/init.js +1 -9
- package/dist/cli/commands/learnings.js +1 -5
- package/dist/cli/commands/lifecycle-transitions.js +1 -5
- package/dist/cli/commands/list.js +1 -9
- package/dist/cli/commands/merge.js +1 -11
- package/dist/cli/commands/next.js +1 -9
- package/dist/cli/commands/notes.js +1 -5
- package/dist/cli/commands/plan.js +1 -9
- package/dist/cli/commands/profile.js +1 -9
- package/dist/cli/commands/restore.js +1 -9
- package/dist/cli/commands/scheduling-shortcuts.js +1 -9
- package/dist/cli/commands/schema.js +1 -10
- package/dist/cli/commands/search.js +1 -9
- package/dist/cli/commands/stats.js +1 -9
- package/dist/cli/commands/telemetry.js +1 -9
- package/dist/cli/commands/test-all.js +1 -9
- package/dist/cli/commands/test-runs.js +1 -9
- package/dist/cli/commands/test.js +1 -9
- package/dist/cli/commands/update-many.js +1 -5
- package/dist/cli/commands/update.js +1 -9
- package/dist/cli/commands/upgrade.js +1 -5
- package/dist/cli/commands/validate.js +1 -15
- package/dist/cli/context-intent-invocation.js +1 -20
- package/dist/cli/description-stdin.js +1 -17
- package/dist/cli/error-guidance.js +1 -1353
- package/dist/cli/extension-command-help.js +5 -636
- package/dist/cli/extension-command-options.js +1 -427
- package/dist/cli/extension-recovery.js +1 -126
- package/dist/cli/help-content.js +2 -1001
- package/dist/cli/help-json-payload.js +4 -570
- package/dist/cli/main.d.ts +4 -0
- package/dist/cli/main.js +5 -2573
- package/dist/cli/migration-gates.js +1 -289
- package/dist/cli/public.js +1 -20
- package/dist/cli/register-annotations.js +1 -270
- package/dist/cli/register-assurance.js +1 -62
- package/dist/cli/register-files-lookup.js +1 -56
- package/dist/cli/register-history-activity.d.ts +8 -0
- package/dist/cli/register-history-activity.js +2 -0
- package/dist/cli/register-history-author.js +1 -38
- package/dist/cli/register-history-maintenance.d.ts +9 -0
- package/dist/cli/register-history-maintenance.js +2 -0
- package/dist/cli/register-list-query.js +10 -943
- package/dist/cli/register-mutation-options.js +1 -9
- package/dist/cli/register-mutation.js +19 -1893
- package/dist/cli/register-operations.js +1 -920
- package/dist/cli/register-setup.js +1 -716
- package/dist/cli/register-structured-mutation.js +1 -196
- package/dist/cli/registration-helpers.js +1 -5
- package/dist/cli/runtime-compatibility-boundary.js +4 -42
- package/dist/cli/schema-registration-helpers.js +1 -73
- package/dist/cli/search-refresh.js +1 -13
- package/dist/cli/stats-analytics-json.js +1 -68
- package/dist/cli/telemetry-flush.js +1 -10
- package/dist/cli-bundle/bundle-manifest.json +164 -156
- package/dist/cli-bundle/chunks/chunk-3BZZA6A3.js +5 -0
- package/dist/cli-bundle/chunks/chunk-AMRDVX36.js +235 -0
- package/dist/cli-bundle/chunks/chunk-DAM4CBBR.js +2202 -0
- package/dist/cli-bundle/chunks/{chunk-WYRZZ5ZE.js → chunk-DEZPZOQ7.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-FLDWYEND.js +77 -0
- package/dist/cli-bundle/chunks/{chunk-NPN5I67J.js → chunk-G5ADGQ2D.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-JAAEYHUA.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-JX4DH4WC.js → chunk-KR3RP4FH.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-LEZOUXG6.js +2 -0
- package/dist/cli-bundle/chunks/chunk-NSAPNEYH.js +2 -0
- package/dist/cli-bundle/chunks/chunk-QOEKOECV.js +29 -0
- package/dist/cli-bundle/chunks/chunk-RHSFOMHU.js +2 -0
- package/dist/cli-bundle/chunks/chunk-XOD2PCB6.js +20 -0
- package/dist/cli-bundle/chunks/{chunk-JT6XF6GE.js → chunk-YVEQ2AMO.js} +4 -4
- package/dist/cli-bundle/chunks/register-list-query-KSK3R63M.js +11 -0
- package/dist/cli-bundle/chunks/register-mutation-IQ5C7U6O.js +20 -0
- package/dist/cli-bundle/chunks/{register-operations-I5W3KMGB.js → register-operations-DWVHR2NC.js} +2 -2
- package/dist/cli-bundle/chunks/register-setup-BQ5SVD4B.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-3WRPWLA7.js +3 -0
- package/dist/cli-bundle/focused-chunks/chunk-7MBUII7U.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-COPBO5HW.js +8 -0
- package/dist/cli-bundle/focused-chunks/chunk-DUN4IXYN.js +20 -0
- package/dist/cli-bundle/focused-chunks/{chunk-LIJIA4TY.js → chunk-EE5QSM4Z.js} +3 -3
- package/dist/cli-bundle/focused-chunks/chunk-HJVARYM3.js +6 -0
- package/dist/cli-bundle/focused-chunks/chunk-IAUOUGVR.js +177 -0
- package/dist/cli-bundle/focused-chunks/chunk-KOOMJ54F.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-MZDXX7JY.js +56 -0
- package/dist/cli-bundle/focused-chunks/{chunk-M6PBRFSH.js → chunk-OPFHFGDD.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-QHNETP77.js +9 -0
- package/dist/cli-bundle/focused-chunks/{chunk-3BZEOXLT.js → chunk-RMWES4M6.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-RXT4P5QH.js +10 -0
- package/dist/cli-bundle/focused-chunks/chunk-SDOL6FM2.js +12 -0
- package/dist/cli-bundle/focused-chunks/chunk-SQV4AAUC.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-PEFABF7E.js → chunk-WE3IUNIW.js} +3 -3
- package/dist/cli-bundle/focused-chunks/chunk-YALOUBWJ.js +2 -0
- package/dist/cli-bundle/main.js +20 -20
- package/dist/cli-bundle/sdk-authoring.js +1 -1
- package/dist/cli-bundle/sdk-contracts.js +2 -2
- package/dist/cli-bundle/sdk-core.js +29 -29
- package/dist/cli-bundle/sdk-governance.js +1 -1
- package/dist/cli-bundle/sdk-graph.js +1 -1
- package/dist/cli-bundle/sdk-merge.js +42 -42
- package/dist/cli-bundle/sdk-query.js +1 -1
- package/dist/cli-bundle/sdk-runtime.js +1 -1
- package/dist/cli-bundle/sdk-testing.js +1 -1
- package/dist/cli-bundle/sdk.js +11 -11
- package/dist/cli.js +1 -104
- package/dist/core/checkpoint/checkpoint-gc.js +1 -169
- package/dist/core/checkpoint/mutation-checkpoint.js +2 -133
- package/dist/core/config/nested-settings.js +1 -534
- package/dist/core/config/positional-value.js +1 -109
- package/dist/core/diagnostics/remediation.js +1 -506
- package/dist/core/extensions/activation-summary-markdown.js +2 -145
- package/dist/core/extensions/activation-summary.js +1 -92
- package/dist/core/extensions/activation-transaction.js +1 -46
- package/dist/core/extensions/capability-usage.js +1 -173
- package/dist/core/extensions/command-hook-context.js +1 -13
- package/dist/core/extensions/command-metadata-contract.js +1 -22
- package/dist/core/extensions/command-visibility-tier.js +1 -29
- package/dist/core/extensions/contribution-inventory.js +1 -173
- package/dist/core/extensions/exporter-output-contract.js +1 -66
- package/dist/core/extensions/extension-candidate.js +1 -18
- package/dist/core/extensions/extension-capability-aliases.js +1 -158
- package/dist/core/extensions/extension-hook-runtime.js +1 -699
- package/dist/core/extensions/extension-policy.js +1 -599
- package/dist/core/extensions/extension-registries.js +1 -62
- package/dist/core/extensions/extension-runtime-helpers.js +1 -33
- package/dist/core/extensions/extension-types.js +1 -102
- package/dist/core/extensions/flag-definition-validation.js +1 -52
- package/dist/core/extensions/flag-value-types.js +1 -64
- package/dist/core/extensions/index.js +1 -526
- package/dist/core/extensions/item-field-types.js +1 -39
- package/dist/core/extensions/item-fields.js +1 -261
- package/dist/core/extensions/loader.js +1 -2223
- package/dist/core/extensions/manifest-schema.js +1 -69
- package/dist/core/extensions/module-graph-snapshot.js +1 -33
- package/dist/core/extensions/preflight-ownership.js +1 -41
- package/dist/core/extensions/registration-validation.js +1 -82
- package/dist/core/extensions/registration-values.js +1 -209
- package/dist/core/extensions/reserved-host-flags.js +1 -36
- package/dist/core/extensions/runtime-registrations.js +1 -67
- package/dist/core/extensions/service-ownership.js +1 -19
- package/dist/core/extensions/version-compat.js +1 -216
- package/dist/core/fs/fs-utils.js +2 -158
- package/dist/core/fs/host-environment-errors.js +1 -141
- package/dist/core/fs/index.js +1 -9
- package/dist/core/fs/path-utils.js +1 -17
- package/dist/core/governance/content-fields.js +1 -160
- package/dist/core/governance/issue-codes.js +1 -151
- package/dist/core/governance/metadata-coverage.js +1 -358
- package/dist/core/history/drift-cache.js +3 -72
- package/dist/core/history/drift-scan.js +1 -342
- package/dist/core/history/event-classification.js +1 -109
- package/dist/core/history/event-index.js +8 -784
- package/dist/core/history/history-compact-bulk.js +1 -104
- package/dist/core/history/history-diff.js +1 -158
- package/dist/core/history/history-rewrite.d.ts +6 -1
- package/dist/core/history/history-rewrite.js +1 -107
- package/dist/core/history/history-storage-stats.js +1 -102
- package/dist/core/history/history-stream-policy.js +1 -62
- package/dist/core/history/history.js +2 -617
- package/dist/core/history/identity.js +1 -30
- package/dist/core/history/index.js +1 -9
- package/dist/core/history/projection.js +1 -196
- package/dist/core/history/read.d.ts +9 -0
- package/dist/core/history/read.js +1 -57
- package/dist/core/history/replay.js +2 -439
- package/dist/core/history/version-address.js +1 -32
- package/dist/core/history/workspace-history.js +2 -433
- package/dist/core/io/body-file.js +1 -62
- package/dist/core/io/bulk-ids-input.js +1 -112
- package/dist/core/item/actionability.js +1 -327
- package/dist/core/item/dependency-reference.js +1 -20
- package/dist/core/item/id.js +1 -112
- package/dist/core/item/index.js +1 -12
- package/dist/core/item/item-format-version.js +1 -78
- package/dist/core/item/item-format.js +5 -1473
- package/dist/core/item/item-record.js +1 -23
- package/dist/core/item/item-type-definition.js +1 -133
- package/dist/core/item/parent-reference-policy.js +1 -57
- package/dist/core/item/parse.js +2 -603
- package/dist/core/item/plan-lifecycle.js +1 -19
- package/dist/core/item/priority.js +1 -61
- package/dist/core/item/sprint-release-format.js +1 -38
- package/dist/core/item/status-filter.js +1 -115
- package/dist/core/item/status.js +1 -43
- package/dist/core/item/toon-decode.js +1 -29
- package/dist/core/item/type-registry.js +1 -715
- package/dist/core/item/type-synonyms.js +1 -38
- package/dist/core/lock/index.js +1 -9
- package/dist/core/lock/lock-gc.js +1 -240
- package/dist/core/lock/lock.js +3 -590
- package/dist/core/output/mutation-projection.js +1 -217
- package/dist/core/output/output-control.js +1 -25
- package/dist/core/output/output.js +11 -494
- package/dist/core/output/query-summary.js +1 -58
- package/dist/core/output/tabular.js +1 -77
- package/dist/core/packages/manifest.js +1 -244
- package/dist/core/packages/root.js +1 -84
- package/dist/core/profile/profile-describe.js +1 -83
- package/dist/core/profile/profile-lint.js +1 -415
- package/dist/core/profile/profile-plan.js +0 -0
- package/dist/core/profile/profile-presets.js +1 -370
- package/dist/core/reproducibility/context.js +1 -82
- package/dist/core/schema/fields-file.js +2 -288
- package/dist/core/schema/item-types-file.js +2 -296
- package/dist/core/schema/runtime-field-filters.js +1 -49
- package/dist/core/schema/runtime-field-values.js +1 -313
- package/dist/core/schema/runtime-schema.js +2 -826
- package/dist/core/schema/status-defs-file.js +2 -227
- package/dist/core/schema/status-token.js +1 -31
- package/dist/core/schema/type-inference.js +1 -95
- package/dist/core/schema/type-presets.js +1 -87
- package/dist/core/schema/type-workflows.js +1 -104
- package/dist/core/search/background-refresh.js +2 -286
- package/dist/core/search/bm25.js +1 -146
- package/dist/core/search/cache.js +2 -534
- package/dist/core/search/corpus.js +1 -311
- package/dist/core/search/embedding-batches.js +1 -163
- package/dist/core/search/eval.js +1 -225
- package/dist/core/search/http-client.js +1 -75
- package/dist/core/search/providers.js +1 -242
- package/dist/core/search/relevance.js +1 -244
- package/dist/core/search/semantic-defaults.js +1 -199
- package/dist/core/search/staleness.js +1 -30
- package/dist/core/search/vector-stores.js +2 -664
- package/dist/core/search/vectorization-metadata.js +1 -81
- package/dist/core/sentry/helpers.js +1 -272
- package/dist/core/sentry/instrument.js +1 -387
- package/dist/core/session/session-state.js +1 -260
- package/dist/core/shared/agent-session-context.js +1 -133
- package/dist/core/shared/author.js +1 -1172
- package/dist/core/shared/command-types.js +1 -4
- package/dist/core/shared/conflict-markers.js +1 -31
- package/dist/core/shared/constants.js +1 -405
- package/dist/core/shared/errors.js +1 -20
- package/dist/core/shared/html-entity-decode.js +1 -131
- package/dist/core/shared/index.js +1 -12
- package/dist/core/shared/item-metadata-contract.js +1 -89
- package/dist/core/shared/lazy-module.js +1 -16
- package/dist/core/shared/levenshtein.js +1 -61
- package/dist/core/shared/memo.js +1 -19
- package/dist/core/shared/numeric-parsers.js +1 -20
- package/dist/core/shared/option-alias-visibility.js +1 -67
- package/dist/core/shared/primitives.js +1 -127
- package/dist/core/shared/serial-queue.js +1 -79
- package/dist/core/shared/serialization.js +1 -210
- package/dist/core/shared/split-comma-list.js +1 -30
- package/dist/core/shared/text-normalization.js +1 -38
- package/dist/core/shared/time.js +1 -306
- package/dist/core/store/index.js +1 -12
- package/dist/core/store/item-format-migration.js +1 -125
- package/dist/core/store/item-metadata-cache.js +1 -1116
- package/dist/core/store/item-metadata-query-index.js +9 -394
- package/dist/core/store/item-metadata-read-work.js +1 -43
- package/dist/core/store/item-store.js +1 -693
- package/dist/core/store/paths.d.ts +1 -1
- package/dist/core/store/paths.js +1 -214
- package/dist/core/store/settings-read-cache.js +1 -85
- package/dist/core/store/settings-validator.js +1 -421
- package/dist/core/store/settings.js +3 -1309
- package/dist/core/store/tracker-preflight.js +1 -141
- package/dist/core/telemetry/consent.js +5 -108
- package/dist/core/telemetry/observability.js +1 -246
- package/dist/core/telemetry/runtime.js +4 -1988
- package/dist/core/test/background-runs.js +4 -945
- package/dist/core/test/item-test-run-tracking.js +1 -63
- package/dist/core/test/run-selectors.js +1 -120
- package/dist/core/validate/estimate-defaults.js +1 -89
- package/dist/core/validate/fix-planning.js +1 -189
- package/dist/core/validate/linked-artifact-reference.js +1 -36
- package/dist/core/validate/missing-by-type.js +1 -34
- package/dist/core/validate/missing-link-owners.js +1 -95
- package/dist/core/validate/stale-file-classification.js +1 -82
- package/dist/mcp/http-server.js +5 -448
- package/dist/mcp/legacy-adapter.js +1 -77
- package/dist/mcp/runtime-capabilities.js +1 -200
- package/dist/mcp/server.js +4 -1233
- package/dist/mcp/tool-definitions.js +1 -804
- package/dist/sdk/actionability.js +1 -13
- package/dist/sdk/agent/closed-domain-contracts.js +1 -161
- package/dist/sdk/agent/command-recovery.js +1 -59
- package/dist/sdk/agent/command-suggestions.js +1 -66
- package/dist/sdk/agent/create-option-policy.js +1 -31
- package/dist/sdk/agent/identity-config.js +1 -106
- package/dist/sdk/agent/item-addressing.js +1 -207
- package/dist/sdk/agent/refusal-closure-census.js +1 -151
- package/dist/sdk/agent/refusal-closure.js +1 -133
- package/dist/sdk/agent/refusal-corpus-contracts.js +1 -193
- package/dist/sdk/agent/refusal-reachability.js +1 -593
- package/dist/sdk/agent/subcommand-recovery.js +1 -83
- package/dist/sdk/agent/task-transcript-contracts.js +1 -197
- package/dist/sdk/agent/tracker-preflight-contracts.js +1 -126
- package/dist/sdk/agent-capability-contracts.js +1 -428
- package/dist/sdk/agent-session-context.js +1 -9
- package/dist/sdk/annotations.js +1 -448
- package/dist/sdk/author-attribution.js +1 -468
- package/dist/sdk/authoring.js +1 -20
- package/dist/sdk/cli-bootstrap.js +1 -838
- package/dist/sdk/cli-contracts/agent-output-contracts.d.ts +1 -1
- package/dist/sdk/cli-contracts/agent-output-contracts.js +4 -476
- package/dist/sdk/cli-contracts/bootstrap-command-scanner.js +1 -79
- package/dist/sdk/cli-contracts/command-aliases.d.ts +4 -0
- package/dist/sdk/cli-contracts/command-aliases.js +1 -107
- package/dist/sdk/cli-contracts/command-exit-contracts.js +1 -151
- package/dist/sdk/cli-contracts/commander-mutation-options.js +1 -1081
- package/dist/sdk/cli-contracts/commander-types.js +1 -159
- package/dist/sdk/cli-contracts/completeness.js +1 -393
- package/dist/sdk/cli-contracts/enum-contracts.js +1 -222
- package/dist/sdk/cli-contracts/flag-contracts.js +1 -1947
- package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +1 -347
- package/dist/sdk/cli-contracts/grammar-contracts.js +1 -986
- package/dist/sdk/cli-contracts/registration-helpers.js +7 -990
- package/dist/sdk/cli-contracts/runtime-contracts.d.ts +5 -0
- package/dist/sdk/cli-contracts/runtime-contracts.js +1 -2090
- package/dist/sdk/cli-contracts/schemas/assurance-definition.js +1 -324
- package/dist/sdk/cli-contracts/string-lists.js +1 -16
- package/dist/sdk/cli-contracts/tool-option-contracts.js +1 -461
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +1 -2167
- package/dist/sdk/cli-contracts/tool-schema.d.ts +3 -1
- package/dist/sdk/cli-contracts/tool-schema.js +1 -1664
- package/dist/sdk/cli-contracts/typed-action-inputs.js +1 -4
- package/dist/sdk/cli-contracts.d.ts +1 -1
- package/dist/sdk/cli-contracts.js +1 -17
- package/dist/sdk/cli-program.js +1 -49
- package/dist/sdk/command-line.d.ts +2 -5
- package/dist/sdk/command-line.js +1 -78
- package/dist/sdk/comments.js +1 -133
- package/dist/sdk/compile-cache.js +1 -73
- package/dist/sdk/completion.js +157 -837
- package/dist/sdk/compose.js +1 -1090
- package/dist/sdk/config.js +1 -1204
- package/dist/sdk/context/recency.js +1 -33
- package/dist/sdk/context/semantic-session-attribution.js +1 -82
- package/dist/sdk/context/usage-egress.js +1 -29
- package/dist/sdk/context/usage-ledger.js +3 -185
- package/dist/sdk/context-intent-contracts.js +1 -709
- package/dist/sdk/context-intent-runtime.js +1 -115
- package/dist/sdk/context-packing.js +1 -218
- package/dist/sdk/context-relevance.js +1 -503
- package/dist/sdk/context-signal-store.js +2 -426
- package/dist/sdk/context-usage.js +1 -367
- package/dist/sdk/contracts.js +1 -23
- package/dist/sdk/core-governance.js +1 -14
- package/dist/sdk/core.js +1 -14
- package/dist/sdk/corpus-shape.js +1 -401
- package/dist/sdk/define.js +1 -220
- package/dist/sdk/dependencies.js +1 -718
- package/dist/sdk/dependency-flag-validation.js +1 -156
- package/dist/sdk/dependency-provenance.js +1 -135
- package/dist/sdk/docs.js +1 -14
- package/dist/sdk/duplicates.js +1 -40
- package/dist/sdk/environment/agent-environment.js +1 -466
- package/dist/sdk/environment/host-environment-errors.js +1 -8
- package/dist/sdk/environment/project-runtime-compatibility.js +1 -481
- package/dist/sdk/environment/source-context.js +1 -28
- package/dist/sdk/environment/tracker-preflight.js +1 -9
- package/dist/sdk/error-code-catalog.js +1 -153
- package/dist/sdk/error-runtime.js +1 -58
- package/dist/sdk/errors.js +1 -58
- package/dist/sdk/eval.js +1 -190
- package/dist/sdk/extension/author-manifest.js +1 -92
- package/dist/sdk/extension/bundled-catalog.js +1 -332
- package/dist/sdk/extension/concurrency.js +1 -25
- package/dist/sdk/extension/copy-scope.d.ts +2 -0
- package/dist/sdk/extension/copy-scope.js +2 -0
- package/dist/sdk/extension/custom-field-collisions.js +1 -30
- package/dist/sdk/extension/describe.js +3 -189
- package/dist/sdk/extension/doctor.js +1 -606
- package/dist/sdk/extension/install-plan.d.ts +69 -0
- package/dist/sdk/extension/install-plan.js +2 -0
- package/dist/sdk/extension/install-receipts.d.ts +7 -0
- package/dist/sdk/extension/install-receipts.js +2 -0
- package/dist/sdk/extension/install-runtime.js +3 -313
- package/dist/sdk/extension/install-snapshot.js +1 -66
- package/dist/sdk/extension/install-sources.js +5 -1057
- package/dist/sdk/extension/managed-state.js +2 -252
- package/dist/sdk/extension/migrations.js +2 -174
- package/dist/sdk/extension/output-ownership.js +1 -25
- package/dist/sdk/extension/runtime-summary.js +1 -18
- package/dist/sdk/extension/scaffold.js +4 -2308
- package/dist/sdk/extension/shared.js +1 -147
- package/dist/sdk/extension/source-resolution.js +1 -65
- package/dist/sdk/extension/update-check.js +1 -67
- package/dist/sdk/extension-command-context.js +1 -44
- package/dist/sdk/extension-contracts.js +1 -73
- package/dist/sdk/extension.d.ts +7 -2
- package/dist/sdk/extension.js +1 -2196
- package/dist/sdk/files.js +1 -535
- package/dist/sdk/flag-invocation-contracts.d.ts +0 -5
- package/dist/sdk/flag-invocation-contracts.js +1 -344
- package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -2224
- package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -2236
- package/dist/sdk/generated-error-code-catalog.js +1 -16
- package/dist/sdk/governance/assurance-action-contracts.js +1 -4
- package/dist/sdk/governance/assurance-action.js +1 -411
- package/dist/sdk/governance/assurance-limits.js +1 -10
- package/dist/sdk/governance/assurance-mutation-error.js +1 -81
- package/dist/sdk/governance/assurance-presets.js +1 -135
- package/dist/sdk/governance/assurance-runtime.js +1 -238
- package/dist/sdk/governance/assurance.js +4 -1182
- package/dist/sdk/governance/boundary-fixtures.js +1 -200
- package/dist/sdk/governance/coverage-assurance.js +1 -60
- package/dist/sdk/governance/defect-recurrence-coverage.js +1 -188
- package/dist/sdk/governance/defect-recurrence-graph.js +1 -120
- package/dist/sdk/governance/defect-recurrence-signals.js +1 -24
- package/dist/sdk/governance/defect-recurrence.js +1 -623
- package/dist/sdk/governance/extension-host-version.js +1 -115
- package/dist/sdk/governance/gc.js +1 -368
- package/dist/sdk/governance/health.js +1 -2367
- package/dist/sdk/governance/hierarchy-validation.js +1 -108
- package/dist/sdk/governance/linked-file-report.js +1 -71
- package/dist/sdk/governance/merge-receipt-history.js +1 -206
- package/dist/sdk/governance/provenance-health.js +1 -282
- package/dist/sdk/governance/reindex.js +4 -761
- package/dist/sdk/governance/stale-work.js +1 -82
- package/dist/sdk/governance/status-role-diagnostics.js +1 -35
- package/dist/sdk/governance/storage-integrity.js +1 -280
- package/dist/sdk/governance/tracked-runtime-cache.js +1 -106
- package/dist/sdk/governance/upgrade.js +2 -327
- package/dist/sdk/governance/validate-history-drift.js +1 -81
- package/dist/sdk/governance/validate-item-reader.js +1 -17
- package/dist/sdk/governance/validate-normalization.js +1 -36
- package/dist/sdk/governance/validate.js +1 -2261
- package/dist/sdk/governance/workspace-position.js +1 -163
- package/dist/sdk/governance.d.ts +1 -0
- package/dist/sdk/governance.js +1 -31
- package/dist/sdk/graph/adapter.js +1 -181
- package/dist/sdk/graph/analytics.js +1 -474
- package/dist/sdk/graph/assembly.js +1 -377
- package/dist/sdk/graph/cache.js +1 -160
- package/dist/sdk/graph/centrality.js +1 -258
- package/dist/sdk/graph/conformance.js +1 -130
- package/dist/sdk/graph/deadline-scheduling.d.ts +90 -0
- package/dist/sdk/graph/deadline-scheduling.js +2 -0
- package/dist/sdk/graph/durable-cache.d.ts +1 -1
- package/dist/sdk/graph/durable-cache.js +1 -361
- package/dist/sdk/graph/governance-contracts.js +1 -34
- package/dist/sdk/graph/governance.d.ts +13 -1
- package/dist/sdk/graph/governance.js +1 -735
- package/dist/sdk/graph/hierarchy-integrity.js +1 -310
- package/dist/sdk/graph/index.d.ts +3 -2
- package/dist/sdk/graph/index.js +1 -26
- package/dist/sdk/graph/lifecycle-coverage.d.ts +32 -0
- package/dist/sdk/graph/lifecycle-coverage.js +2 -0
- package/dist/sdk/graph/mutation-advisory.js +1 -176
- package/dist/sdk/graph/remediation.js +1 -197
- package/dist/sdk/graph/run.d.ts +15 -1
- package/dist/sdk/graph/run.js +1 -768
- package/dist/sdk/graph/scheduling.js +1 -124
- package/dist/sdk/graph/traversal.js +1 -284
- package/dist/sdk/graph/workspace-relationship-kind-registry.js +1 -27
- package/dist/sdk/graph.js +1 -15
- package/dist/sdk/guide-topics.js +1 -707
- package/dist/sdk/guide.js +1 -279
- package/dist/sdk/history/maintenance.d.ts +71 -0
- package/dist/sdk/history/maintenance.js +2 -0
- package/dist/sdk/history/salvage.js +2 -247
- package/dist/sdk/history/subject.d.ts +19 -0
- package/dist/sdk/history/subject.js +2 -0
- package/dist/sdk/history-analytics.js +1 -282
- package/dist/sdk/history-compact.js +1 -527
- package/dist/sdk/history-mcp.js +1 -68
- package/dist/sdk/history-provenance.js +1 -182
- package/dist/sdk/history-read.js +1 -96
- package/dist/sdk/history-redact.d.ts +1 -14
- package/dist/sdk/history-redact.js +1 -643
- package/dist/sdk/history-repair.d.ts +5 -0
- package/dist/sdk/history-repair.js +1 -657
- package/dist/sdk/improvement-ledger-validation.js +1 -62
- package/dist/sdk/improvement-ledger.js +2 -257
- package/dist/sdk/index.d.ts +4 -0
- package/dist/sdk/index.js +1 -183
- package/dist/sdk/init-agent-guidance.js +2 -496
- package/dist/sdk/init.js +2 -820
- package/dist/sdk/invocation-author.js +1 -39
- package/dist/sdk/item-children.js +1 -90
- package/dist/sdk/item-metadata-index.js +1 -15
- package/dist/sdk/item-schedule.js +1 -27
- package/dist/sdk/item-transaction.js +1 -396
- package/dist/sdk/learnings.js +1 -29
- package/dist/sdk/lifecycle/append.js +2 -53
- package/dist/sdk/lifecycle/claim.d.ts +2 -0
- package/dist/sdk/lifecycle/claim.js +1 -242
- package/dist/sdk/lifecycle/close-many.js +1 -438
- package/dist/sdk/lifecycle/close.js +1 -468
- package/dist/sdk/lifecycle/copy.js +1 -212
- package/dist/sdk/lifecycle/create.js +1 -1949
- package/dist/sdk/lifecycle/delete.js +1 -45
- package/dist/sdk/lifecycle/event-validation-messages.js +1 -91
- package/dist/sdk/lifecycle/focus.js +1 -91
- package/dist/sdk/lifecycle/hierarchy-mutation-lock.js +1 -24
- package/dist/sdk/lifecycle/legacy-none-tokens.js +1 -149
- package/dist/sdk/lifecycle/lifecycle-transitions.js +1 -40
- package/dist/sdk/lifecycle/mcp-actions.d.ts +2 -0
- package/dist/sdk/lifecycle/mcp-actions.js +1 -51
- package/dist/sdk/lifecycle/metadata-normalizers.js +1 -46
- package/dist/sdk/lifecycle/mutation-command-options.js +1 -9
- package/dist/sdk/lifecycle/plan.js +1 -1606
- package/dist/sdk/lifecycle/recurrence-parsers.js +1 -147
- package/dist/sdk/lifecycle/reopen.js +1 -68
- package/dist/sdk/lifecycle/repeatable-metadata-parsers.js +1 -143
- package/dist/sdk/lifecycle/restore.d.ts +1 -0
- package/dist/sdk/lifecycle/restore.js +1 -330
- package/dist/sdk/lifecycle/shared-unset-fields.js +1 -295
- package/dist/sdk/lifecycle/update-many.js +1 -861
- package/dist/sdk/lifecycle/update.js +1 -2136
- package/dist/sdk/lifecycle-completion.js +1 -92
- package/dist/sdk/lifecycle-policy.js +1 -120
- package/dist/sdk/linked-artifacts.js +1 -530
- package/dist/sdk/mcp/apps.js +4 -133
- package/dist/sdk/mcp/authorization.js +1 -404
- package/dist/sdk/mcp/discovery.js +1 -494
- package/dist/sdk/mcp/interactions.js +1 -336
- package/dist/sdk/mcp/protocol.d.ts +7 -0
- package/dist/sdk/mcp/protocol.js +1 -184
- package/dist/sdk/mcp/skills.js +1 -389
- package/dist/sdk/mcp/subscriptions.js +1 -211
- package/dist/sdk/mcp/tasks.js +2 -430
- package/dist/sdk/mcp/transport.js +1 -260
- package/dist/sdk/merge/abandoned-receipts.js +1 -46
- package/dist/sdk/merge/driver.js +1 -212
- package/dist/sdk/merge/index.js +1 -16
- package/dist/sdk/merge/install.js +3 -561
- package/dist/sdk/merge/receipt-file-boundary.js +1 -46
- package/dist/sdk/merge/receipt-operation.js +1 -96
- package/dist/sdk/merge/receipt-schema.js +1 -397
- package/dist/sdk/merge/receipts.js +4 -525
- package/dist/sdk/merge/reconcile.js +1 -352
- package/dist/sdk/merge/three-way.js +3 -775
- package/dist/sdk/merge.js +1 -10
- package/dist/sdk/mutation-events.js +1 -292
- package/dist/sdk/mutation-guard.js +1 -216
- package/dist/sdk/notes.js +1 -139
- package/dist/sdk/output-contracts.js +1 -172
- package/dist/sdk/output-projection.js +1 -430
- package/dist/sdk/output-token-accounting.js +1 -140
- package/dist/sdk/output.js +1 -64
- package/dist/sdk/ownership-source.js +1 -21
- package/dist/sdk/package-import-adapters.js +1 -442
- package/dist/sdk/package-migrations.js +1 -20
- package/dist/sdk/package-runtime-options.js +1 -80
- package/dist/sdk/pagination.js +1 -162
- package/dist/sdk/profile.js +1 -454
- package/dist/sdk/provenance.js +1 -258
- package/dist/sdk/public-surface.json +1 -1
- package/dist/sdk/query/activity.js +1 -401
- package/dist/sdk/query/aggregate.d.ts +16 -0
- package/dist/sdk/query/aggregate.js +1 -390
- package/dist/sdk/query/calendar.js +1 -964
- package/dist/sdk/query/complete-list.js +1 -215
- package/dist/sdk/query/context.js +1 -1702
- package/dist/sdk/query/duplicate-candidates.js +1 -70
- package/dist/sdk/query/get.js +1 -450
- package/dist/sdk/query/history.js +1 -186
- package/dist/sdk/query/item-filter-options.js +1 -9
- package/dist/sdk/query/light-metadata.js +1 -18
- package/dist/sdk/query/list-filter-shared.js +1 -81
- package/dist/sdk/query/list.js +1 -1304
- package/dist/sdk/query/multi-value-filters.js +1 -78
- package/dist/sdk/query/next.js +1 -513
- package/dist/sdk/query/parsers.js +1 -44
- package/dist/sdk/query/projection-contracts.js +1 -184
- package/dist/sdk/query/search-contracts.js +1 -230
- package/dist/sdk/query/search-pagination.js +1 -35
- package/dist/sdk/query/search-rendering.js +1 -105
- package/dist/sdk/query/search.js +2 -1987
- package/dist/sdk/query.js +1 -35
- package/dist/sdk/read-output/continuation.js +1 -194
- package/dist/sdk/read-output-budget.js +1 -135
- package/dist/sdk/read-output-contracts.js +1 -1225
- package/dist/sdk/read-output-rows.js +1 -186
- package/dist/sdk/read-output-session.js +1 -208
- package/dist/sdk/relationship-analytics.js +1 -410
- package/dist/sdk/relationship-context.js +1 -284
- package/dist/sdk/relationship-history.js +4 -519
- package/dist/sdk/relationship-kinds/contract.js +1 -22
- package/dist/sdk/relationship-migration.js +1 -77
- package/dist/sdk/relationships.js +1 -579
- package/dist/sdk/reproducibility/process.js +1 -87
- package/dist/sdk/runtime-action-aliases.js +1 -59
- package/dist/sdk/runtime-extended-actions.js +1 -177
- package/dist/sdk/runtime-input.js +1 -614
- package/dist/sdk/runtime-primitives.js +1 -84
- package/dist/sdk/runtime-public-contracts.js +1 -4
- package/dist/sdk/runtime-stats-options.js +1 -38
- package/dist/sdk/runtime.js +1 -1928
- package/dist/sdk/scheduling-shortcuts.js +1 -63
- package/dist/sdk/schema-migration.js +3 -856
- package/dist/sdk/schema.js +1 -1376
- package/dist/sdk/search-refresh-worker.js +1 -18
- package/dist/sdk/similarity-scoring.js +1 -53
- package/dist/sdk/similarity.js +1 -326
- package/dist/sdk/start-task-status.js +1 -14
- package/dist/sdk/stats.js +1 -270
- package/dist/sdk/structured-mutations.js +1 -580
- package/dist/sdk/telemetry-flush.js +1 -13
- package/dist/sdk/telemetry.js +1 -405
- package/dist/sdk/templates.js +2 -292
- package/dist/sdk/test/batch.js +2 -509
- package/dist/sdk/test/entry.js +1 -70
- package/dist/sdk/test/execution.js +6 -2211
- package/dist/sdk/test/linked-command-detection.js +1 -546
- package/dist/sdk/test/measurements.js +1 -91
- package/dist/sdk/test/parsers.js +1 -545
- package/dist/sdk/test/runs.js +1 -193
- package/dist/sdk/test/trust.js +2 -206
- package/dist/sdk/testing.js +4 -1391
- package/dist/sdk/traceability/runtime-files-lookup.js +1 -32
- package/dist/sdk/traceability/source-traceability.js +1 -292
- package/dist/sdk/tracker-root-discovery.js +1 -9
- package/dist/sdk/workspace-contracts-cache.js +1 -28
- package/dist/sdk/workspace-contracts.js +1 -33
- package/dist/sdk/workspace-memory.js +2 -318
- package/dist/sdk/workspace-recipe.js +1 -71
- package/dist/sdk/workspace-snapshot.js +4 -613
- package/dist/sdk/workspace-transaction-gc.js +1 -149
- package/dist/sdk/workspace-transaction.js +2 -363
- package/dist/sdk/workspace.js +3 -127
- package/dist/types/index.js +1 -9
- package/dist/types.js +1 -245
- package/docs/AGENT_GUIDE.md +1 -1
- package/docs/CONTEXT_ALGORITHM_PORTFOLIO.md +167 -0
- package/docs/DIAGNOSTIC_OUTPUT_CONTRACTS.md +9 -3
- package/docs/EXTENSIONS.md +1 -0
- package/docs/HISTORY_MAINTENANCE.md +125 -0
- package/docs/MCP_2026_07_28_CONFORMANCE.md +20 -10
- package/docs/PACKAGE_EVIDENCE.md +92 -0
- package/docs/PLANNING_MEASUREMENTS.md +183 -0
- package/docs/README.md +3 -0
- package/docs/SCRIPTING.md +21 -0
- package/docs/TESTING.md +23 -0
- package/docs/generated/FLAG_LEXICON_BUDGETS.md +5 -5
- package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +2 -2
- package/marketplace.json +2 -2
- package/package.json +1 -1
- package/packages/pm-beads/package.json +1 -1
- package/packages/pm-calendar/package.json +1 -1
- package/packages/pm-command-kit/package.json +1 -1
- package/packages/pm-digital-twin/package.json +1 -1
- package/packages/pm-governance-audit/package.json +1 -1
- package/packages/pm-guide-shell/package.json +1 -1
- package/packages/pm-kanban/package.json +1 -1
- package/packages/pm-lifecycle-hooks/package.json +1 -1
- package/packages/pm-linked-test-adapters/package.json +1 -1
- package/packages/pm-search-advanced/package.json +1 -1
- package/packages/pm-templates/package.json +1 -1
- package/packages/pm-todos/package.json +1 -1
- package/packages/pm-vcs/package.json +1 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/scripts/finalize-build.mjs +45 -3
- package/dist/cli-bundle/chunks/chunk-AZDFJGH6.js +0 -9
- package/dist/cli-bundle/chunks/chunk-BAX2BYUW.js +0 -2111
- package/dist/cli-bundle/chunks/chunk-CKOL5U7J.js +0 -77
- package/dist/cli-bundle/chunks/chunk-OF76PSDQ.js +0 -5
- package/dist/cli-bundle/chunks/chunk-QUWFABDM.js +0 -232
- package/dist/cli-bundle/chunks/chunk-QWRRFYK3.js +0 -2
- package/dist/cli-bundle/chunks/chunk-RWWBOWJ5.js +0 -2
- package/dist/cli-bundle/chunks/chunk-WGAOYSYH.js +0 -40
- package/dist/cli-bundle/chunks/chunk-WI2AYPA7.js +0 -2
- package/dist/cli-bundle/chunks/register-list-query-5JL52D33.js +0 -11
- package/dist/cli-bundle/chunks/register-mutation-ZPG7KMVP.js +0 -20
- package/dist/cli-bundle/chunks/register-setup-H4SVAVX7.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-AL5ON6K6.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-CHC2IDXA.js +0 -6
- package/dist/cli-bundle/focused-chunks/chunk-CK6QFAPZ.js +0 -20
- package/dist/cli-bundle/focused-chunks/chunk-EZR3GHFE.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-H2WJWK7L.js +0 -56
- package/dist/cli-bundle/focused-chunks/chunk-NTPY5GSO.js +0 -3
- package/dist/cli-bundle/focused-chunks/chunk-P5O7MP5Y.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-PDMW2E36.js +0 -177
- package/dist/cli-bundle/focused-chunks/chunk-QTVCLMSZ.js +0 -6
- package/dist/cli-bundle/focused-chunks/chunk-QTZRBUYA.js +0 -8
- package/dist/cli-bundle/focused-chunks/chunk-SGQST3PQ.js +0 -12
- package/dist/cli-bundle/focused-chunks/chunk-UKHASMMP.js +0 -10
- package/dist/cli-bundle/focused-chunks/chunk-ZPEKQHOC.js +0 -2
|
@@ -1,359 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* Metadata governance & coverage observability primitives.
|
|
3
|
-
*
|
|
4
|
-
* One dependency-light module that powers the whole metadata-governance
|
|
5
|
-
* surface: missing-field selection (pm list / pm update-many), coverage
|
|
6
|
-
* percentages (pm stats --metadata-coverage / pm validate), and grouped
|
|
7
|
-
* lifecycle breakdowns (pm stats --by-assignee/--by-tag/--by-priority,
|
|
8
|
-
* pm aggregate explicit labels).
|
|
9
|
-
*
|
|
10
|
-
* The module is pure: it performs no IO and imports no heavy runtime
|
|
11
|
-
* dependencies. Lifecycle semantics are injected via a {@link LifecycleClassifier}
|
|
12
|
-
* so callers map their runtime status registry to lifecycle buckets while the
|
|
13
|
-
* pure logic here stays trivially testable with a fake classifier.
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="5b7b3eaf-a792-5f44-9981-8c82ce511070")}catch(e){}}();
|
|
17
|
-
import { toNonEmptyStringOrUndefined } from "../shared/primitives.js";
|
|
18
|
-
/** Stable rendering order for lifecycle buckets. */
|
|
19
|
-
export const LIFECYCLE_BUCKET_ORDER = [
|
|
20
|
-
"open",
|
|
21
|
-
"in_progress",
|
|
22
|
-
"blocked",
|
|
23
|
-
"draft",
|
|
24
|
-
"closed",
|
|
25
|
-
"canceled",
|
|
26
|
-
"other",
|
|
27
|
-
];
|
|
28
|
-
function normalizeStatus(status, registry) {
|
|
29
|
-
const trimmed = status.trim().toLowerCase();
|
|
30
|
-
return registry.alias_to_id.get(trimmed) ?? trimmed;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Adapt a resolved runtime status registry into a {@link LifecycleClassifier}.
|
|
34
|
-
*
|
|
35
|
-
* Precedence is deliberate and disjoint: canceled → closed → blocked → draft →
|
|
36
|
-
* open → in_progress (active but not the default open status) → other.
|
|
37
|
-
*/
|
|
38
|
-
export function lifecycleClassifierFromStatusRegistry(registry) {
|
|
39
|
-
return {
|
|
40
|
-
isTerminal(status) {
|
|
41
|
-
return registry.terminal_statuses.has(normalizeStatus(status, registry));
|
|
42
|
-
},
|
|
43
|
-
classify(status) {
|
|
44
|
-
const id = normalizeStatus(status, registry);
|
|
45
|
-
if (registry.terminal_canceled_statuses.has(id)) {
|
|
46
|
-
return "canceled";
|
|
47
|
-
}
|
|
48
|
-
if (registry.terminal_statuses.has(id)) {
|
|
49
|
-
return "closed";
|
|
50
|
-
}
|
|
51
|
-
if (registry.blocked_statuses.has(id)) {
|
|
52
|
-
return "blocked";
|
|
53
|
-
}
|
|
54
|
-
if (registry.draft_statuses.has(id)) {
|
|
55
|
-
return "draft";
|
|
56
|
-
}
|
|
57
|
-
if (id === registry.open_status) {
|
|
58
|
-
return "open";
|
|
59
|
-
}
|
|
60
|
-
if (registry.active_statuses.has(id)) {
|
|
61
|
-
return "in_progress";
|
|
62
|
-
}
|
|
63
|
-
return "other";
|
|
64
|
-
},
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
// ---------------------------------------------------------------------------
|
|
68
|
-
// Missing-metadata predicates
|
|
69
|
-
// ---------------------------------------------------------------------------
|
|
70
|
-
/** True when an item has no non-empty acceptance_criteria. */
|
|
71
|
-
export function isAcMissing(item) {
|
|
72
|
-
return toNonEmptyStringOrUndefined(item.acceptance_criteria) === undefined;
|
|
73
|
-
}
|
|
74
|
-
/** True when an item has no finite estimated_minutes. */
|
|
75
|
-
export function isEstimateMissing(item) {
|
|
76
|
-
return !Number.isFinite(item.estimated_minutes);
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* True when a terminal (closed/canceled) item has no non-empty resolution.
|
|
80
|
-
* Resolution is only expected on terminal items, so open items are never
|
|
81
|
-
* considered "resolution-missing".
|
|
82
|
-
*/
|
|
83
|
-
export function isResolutionMissing(item, classifier) {
|
|
84
|
-
if (!classifier.isTerminal(item.status)) {
|
|
85
|
-
return false;
|
|
86
|
-
}
|
|
87
|
-
return toNonEmptyStringOrUndefined(item.resolution) === undefined;
|
|
88
|
-
}
|
|
89
|
-
/** True when an item has no non-empty reviewer. */
|
|
90
|
-
export function isReviewerMissing(item) {
|
|
91
|
-
return toNonEmptyStringOrUndefined(item.reviewer) === undefined;
|
|
92
|
-
}
|
|
93
|
-
/** True when an item has no non-empty risk level. */
|
|
94
|
-
export function isRiskMissing(item) {
|
|
95
|
-
return toNonEmptyStringOrUndefined(item.risk) === undefined;
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* True when an item has no confidence value. Confidence is a string-like enum
|
|
99
|
-
* or a numeric score depending on workspace, so a finite number counts as
|
|
100
|
-
* present and only blank/absent values are treated as missing.
|
|
101
|
-
*/
|
|
102
|
-
export function isConfidenceMissing(item) {
|
|
103
|
-
if (typeof item.confidence === "number") {
|
|
104
|
-
return !Number.isFinite(item.confidence);
|
|
105
|
-
}
|
|
106
|
-
return toNonEmptyStringOrUndefined(item.confidence) === undefined;
|
|
107
|
-
}
|
|
108
|
-
/** True when an item has no non-empty sprint. */
|
|
109
|
-
export function isSprintMissing(item) {
|
|
110
|
-
return toNonEmptyStringOrUndefined(item.sprint) === undefined;
|
|
111
|
-
}
|
|
112
|
-
/** True when an item has no non-empty release. */
|
|
113
|
-
export function isReleaseMissing(item) {
|
|
114
|
-
return toNonEmptyStringOrUndefined(item.release) === undefined;
|
|
115
|
-
}
|
|
116
|
-
/** True when any missing-metadata filter is requested. */
|
|
117
|
-
export function hasMissingMetadataFilter(filters) {
|
|
118
|
-
return Boolean(filters.acMissing ||
|
|
119
|
-
filters.estimatesMissing ||
|
|
120
|
-
filters.resolutionMissing ||
|
|
121
|
-
filters.reviewerMissing ||
|
|
122
|
-
filters.riskMissing ||
|
|
123
|
-
filters.confidenceMissing ||
|
|
124
|
-
filters.sprintMissing ||
|
|
125
|
-
filters.releaseMissing ||
|
|
126
|
-
filters.metadataMissing);
|
|
127
|
-
}
|
|
128
|
-
function itemMatchesSpecificMetadataFilters(item, filters, classifier) {
|
|
129
|
-
const checks = [
|
|
130
|
-
[filters.acMissing, isAcMissing(item)],
|
|
131
|
-
[filters.estimatesMissing, isEstimateMissing(item)],
|
|
132
|
-
[filters.resolutionMissing, isResolutionMissing(item, classifier)],
|
|
133
|
-
[filters.reviewerMissing, isReviewerMissing(item)],
|
|
134
|
-
[filters.riskMissing, isRiskMissing(item)],
|
|
135
|
-
[filters.confidenceMissing, isConfidenceMissing(item)],
|
|
136
|
-
[filters.sprintMissing, isSprintMissing(item)],
|
|
137
|
-
[filters.releaseMissing, isReleaseMissing(item)],
|
|
138
|
-
];
|
|
139
|
-
return checks.every(([requested, matched]) => requested !== true || matched);
|
|
140
|
-
}
|
|
141
|
-
function itemMatchesCoreMetadataMissingUnion(item, classifier) {
|
|
142
|
-
return (isAcMissing(item) ||
|
|
143
|
-
isEstimateMissing(item) ||
|
|
144
|
-
isResolutionMissing(item, classifier));
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Does a single item satisfy the requested missing-metadata filters?
|
|
148
|
-
*
|
|
149
|
-
* Specific flags (acMissing/estimatesMissing/resolutionMissing plus the
|
|
150
|
-
* governance flags reviewerMissing/riskMissing/confidenceMissing/sprintMissing/
|
|
151
|
-
* releaseMissing) are ANDed together so callers can narrow precisely.
|
|
152
|
-
* `metadataMissing` is ORed in as a union shortcut for "missing any of the
|
|
153
|
-
* core tracked fields" (acceptance_criteria/estimated_minutes/resolution); it
|
|
154
|
-
* deliberately excludes the governance fields so the long-standing flag keeps
|
|
155
|
-
* its original meaning. When no filter is requested the item passes.
|
|
156
|
-
*/
|
|
157
|
-
export function itemMatchesMissingMetadata(item, filters, classifier) {
|
|
158
|
-
if (!hasMissingMetadataFilter(filters)) {
|
|
159
|
-
return true;
|
|
160
|
-
}
|
|
161
|
-
if (!itemMatchesSpecificMetadataFilters(item, filters, classifier)) {
|
|
162
|
-
return false;
|
|
163
|
-
}
|
|
164
|
-
if (filters.metadataMissing &&
|
|
165
|
-
!itemMatchesCoreMetadataMissingUnion(item, classifier)) {
|
|
166
|
-
return false;
|
|
167
|
-
}
|
|
168
|
-
return true;
|
|
169
|
-
}
|
|
170
|
-
/** Filter a list of items by the requested missing-metadata predicates. */
|
|
171
|
-
export function filterMissingMetadata(items, filters, classifier) {
|
|
172
|
-
if (!hasMissingMetadataFilter(filters)) {
|
|
173
|
-
return [...items];
|
|
174
|
-
}
|
|
175
|
-
return items.filter((item) => itemMatchesMissingMetadata(item, filters, classifier));
|
|
176
|
-
}
|
|
177
|
-
/** Stable ordering of coverage fields for rendering. */
|
|
178
|
-
export const COVERAGE_FIELD_ORDER = [
|
|
179
|
-
"acceptance_criteria",
|
|
180
|
-
"estimated_minutes",
|
|
181
|
-
"resolution",
|
|
182
|
-
"tags",
|
|
183
|
-
"parent",
|
|
184
|
-
];
|
|
185
|
-
function isFieldPresent(item, field) {
|
|
186
|
-
switch (field) {
|
|
187
|
-
case "acceptance_criteria":
|
|
188
|
-
return !isAcMissing(item);
|
|
189
|
-
case "estimated_minutes":
|
|
190
|
-
return !isEstimateMissing(item);
|
|
191
|
-
case "resolution":
|
|
192
|
-
return toNonEmptyStringOrUndefined(item.resolution) !== undefined;
|
|
193
|
-
case "tags":
|
|
194
|
-
return Array.isArray(item.tags) && item.tags.length > 0;
|
|
195
|
-
default:
|
|
196
|
-
return toNonEmptyStringOrUndefined(item.parent) !== undefined;
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
/** Whether a field applies to a given item (resolution only applies to terminal items). */
|
|
200
|
-
function isFieldApplicable(item, field, classifier) {
|
|
201
|
-
if (field === "resolution") {
|
|
202
|
-
return classifier.isTerminal(item.status);
|
|
203
|
-
}
|
|
204
|
-
return true;
|
|
205
|
-
}
|
|
206
|
-
function roundPercent(present, applicable) {
|
|
207
|
-
if (applicable === 0) {
|
|
208
|
-
return 100;
|
|
209
|
-
}
|
|
210
|
-
return Math.round((present / applicable) * 1000) / 10;
|
|
211
|
-
}
|
|
212
|
-
function emptyFieldCoverage() {
|
|
213
|
-
const record = {};
|
|
214
|
-
for (const field of COVERAGE_FIELD_ORDER) {
|
|
215
|
-
record[field] = { present: 0, applicable: 0, percent: 100 };
|
|
216
|
-
}
|
|
217
|
-
return record;
|
|
218
|
-
}
|
|
219
|
-
function accumulateCoverage(target, item, classifier) {
|
|
220
|
-
for (const field of COVERAGE_FIELD_ORDER) {
|
|
221
|
-
if (!isFieldApplicable(item, field, classifier)) {
|
|
222
|
-
continue;
|
|
223
|
-
}
|
|
224
|
-
const entry = target[field];
|
|
225
|
-
entry.applicable += 1;
|
|
226
|
-
if (isFieldPresent(item, field)) {
|
|
227
|
-
entry.present += 1;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
function finalizePercentages(record) {
|
|
232
|
-
for (const field of COVERAGE_FIELD_ORDER) {
|
|
233
|
-
const entry = record[field];
|
|
234
|
-
entry.percent = roundPercent(entry.present, entry.applicable);
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
/**
|
|
238
|
-
* Compute metadata coverage overall and per item type. For each tracked field
|
|
239
|
-
* we report present/applicable counts and a rounded percentage. Resolution is
|
|
240
|
-
* scoped to terminal items (its only applicable population).
|
|
241
|
-
*/
|
|
242
|
-
export function computeMetadataCoverage(items, classifier) {
|
|
243
|
-
const overall = emptyFieldCoverage();
|
|
244
|
-
const byType = {};
|
|
245
|
-
for (const item of items) {
|
|
246
|
-
accumulateCoverage(overall, item, classifier);
|
|
247
|
-
const typeRecord = byType[item.type] ?? (byType[item.type] = emptyFieldCoverage());
|
|
248
|
-
accumulateCoverage(typeRecord, item, classifier);
|
|
249
|
-
}
|
|
250
|
-
finalizePercentages(overall);
|
|
251
|
-
for (const typeRecord of Object.values(byType)) {
|
|
252
|
-
finalizePercentages(typeRecord);
|
|
253
|
-
}
|
|
254
|
-
return { overall, by_type: byType };
|
|
255
|
-
}
|
|
256
|
-
/** Explicit labels for empty/blank group keys, by dimension. */
|
|
257
|
-
const EMPTY_GROUP_LABELS = {
|
|
258
|
-
assignee: "(unassigned)",
|
|
259
|
-
priority: "(no priority)",
|
|
260
|
-
tag: "(untagged)",
|
|
261
|
-
parent: "(unparented)",
|
|
262
|
-
type: "(untyped)",
|
|
263
|
-
status: "(no status)",
|
|
264
|
-
};
|
|
265
|
-
/** Explicit label for an empty/blank group value for a given dimension. */
|
|
266
|
-
export function emptyGroupLabel(dimension) {
|
|
267
|
-
return EMPTY_GROUP_LABELS[dimension];
|
|
268
|
-
}
|
|
269
|
-
function emptyBuckets() {
|
|
270
|
-
return {
|
|
271
|
-
open: 0,
|
|
272
|
-
in_progress: 0,
|
|
273
|
-
blocked: 0,
|
|
274
|
-
draft: 0,
|
|
275
|
-
closed: 0,
|
|
276
|
-
canceled: 0,
|
|
277
|
-
other: 0,
|
|
278
|
-
};
|
|
279
|
-
}
|
|
280
|
-
/**
|
|
281
|
-
* Resolve the group keys an item belongs to for a dimension. Most dimensions
|
|
282
|
-
* yield exactly one key (possibly null for blank); tag yields one key per
|
|
283
|
-
* matching tag (or [null] when none match), so an item can span multiple rows.
|
|
284
|
-
*/
|
|
285
|
-
function groupKeysForItem(item, dimension, options) {
|
|
286
|
-
switch (dimension) {
|
|
287
|
-
case "assignee":
|
|
288
|
-
return [toNonEmptyStringOrUndefined(item.assignee) ?? null];
|
|
289
|
-
case "parent":
|
|
290
|
-
return [toNonEmptyStringOrUndefined(item.parent) ?? null];
|
|
291
|
-
case "type":
|
|
292
|
-
return [toNonEmptyStringOrUndefined(item.type) ?? null];
|
|
293
|
-
case "status":
|
|
294
|
-
return [toNonEmptyStringOrUndefined(item.status) ?? null];
|
|
295
|
-
case "priority":
|
|
296
|
-
return [typeof item.priority === "number" ? `P${item.priority}` : null];
|
|
297
|
-
default: {
|
|
298
|
-
const prefix = options.tagPrefix?.trim();
|
|
299
|
-
const tags = Array.isArray(item.tags) ? item.tags : [];
|
|
300
|
-
const matching = tags.filter((tag) => typeof tag === "string" &&
|
|
301
|
-
tag.length > 0 &&
|
|
302
|
-
(!prefix || tag.startsWith(prefix)));
|
|
303
|
-
return matching.length > 0 ? matching : [null];
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
/**
|
|
308
|
-
* Group items by a dimension into lifecycle-bucketed rows. Blank keys render
|
|
309
|
-
* with an explicit "(unassigned)"-style label. Rows are sorted by total
|
|
310
|
-
* descending, then label ascending, with the empty group sorted last on ties.
|
|
311
|
-
*/
|
|
312
|
-
export function groupItemsByDimension(items, dimension, classifier, options = {}) {
|
|
313
|
-
const rows = new Map();
|
|
314
|
-
let totalItems = 0;
|
|
315
|
-
for (const item of items) {
|
|
316
|
-
totalItems += 1;
|
|
317
|
-
const bucket = classifier.classify(item.status);
|
|
318
|
-
for (const key of groupKeysForItem(item, dimension, options)) {
|
|
319
|
-
const mapKey = key ?? "empty";
|
|
320
|
-
let row = rows.get(mapKey);
|
|
321
|
-
if (!row) {
|
|
322
|
-
row = {
|
|
323
|
-
label: key ?? emptyGroupLabel(dimension),
|
|
324
|
-
key,
|
|
325
|
-
buckets: emptyBuckets(),
|
|
326
|
-
total: 0,
|
|
327
|
-
};
|
|
328
|
-
rows.set(mapKey, row);
|
|
329
|
-
}
|
|
330
|
-
row.buckets[bucket] += 1;
|
|
331
|
-
row.total += 1;
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
const sorted = [...rows.values()].sort((left, right) => {
|
|
335
|
-
if (right.total !== left.total) {
|
|
336
|
-
return right.total - left.total;
|
|
337
|
-
}
|
|
338
|
-
// All blank-key items collapse into a single row per dimension, so at most
|
|
339
|
-
// one row has key === null; it sorts last on ties.
|
|
340
|
-
if (left.key === null) {
|
|
341
|
-
return 1;
|
|
342
|
-
}
|
|
343
|
-
if (right.key === null) {
|
|
344
|
-
return -1;
|
|
345
|
-
}
|
|
346
|
-
return left.label.localeCompare(right.label);
|
|
347
|
-
});
|
|
348
|
-
return { dimension, rows: sorted, total_items: totalItems };
|
|
349
|
-
}
|
|
350
|
-
/** Lifecycle-bucket distribution across all items (for stats lifecycle section). */
|
|
351
|
-
export function computeLifecycleDistribution(items, classifier) {
|
|
352
|
-
const buckets = emptyBuckets();
|
|
353
|
-
for (const item of items) {
|
|
354
|
-
buckets[classifier.classify(item.status)] += 1;
|
|
355
|
-
}
|
|
356
|
-
return buckets;
|
|
357
|
-
}
|
|
1
|
+
!(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="81a10252-4fa3-5c14-878d-7d78717419a4")}catch(e2){}})();import{toNonEmptyStringOrUndefined}from"../shared/primitives.js";const LIFECYCLE_BUCKET_ORDER=["open","in_progress","blocked","draft","closed","canceled","other"];function normalizeStatus(status,registry){const trimmed=status.trim().toLowerCase();return registry.alias_to_id.get(trimmed)??trimmed}function lifecycleClassifierFromStatusRegistry(registry){return{isTerminal(status){return registry.terminal_statuses.has(normalizeStatus(status,registry))},classify(status){const id=normalizeStatus(status,registry);if(registry.terminal_canceled_statuses.has(id)){return"canceled"}if(registry.terminal_statuses.has(id)){return"closed"}if(registry.blocked_statuses.has(id)){return"blocked"}if(registry.draft_statuses.has(id)){return"draft"}if(id===registry.open_status){return"open"}if(registry.active_statuses.has(id)){return"in_progress"}return"other"}}}function isAcMissing(item){return toNonEmptyStringOrUndefined(item.acceptance_criteria)===void 0}function isEstimateMissing(item){return!Number.isFinite(item.estimated_minutes)}function isResolutionMissing(item,classifier){if(!classifier.isTerminal(item.status)){return false}return toNonEmptyStringOrUndefined(item.resolution)===void 0}function isReviewerMissing(item){return toNonEmptyStringOrUndefined(item.reviewer)===void 0}function isRiskMissing(item){return toNonEmptyStringOrUndefined(item.risk)===void 0}function isConfidenceMissing(item){if(typeof item.confidence==="number"){return!Number.isFinite(item.confidence)}return toNonEmptyStringOrUndefined(item.confidence)===void 0}function isSprintMissing(item){return toNonEmptyStringOrUndefined(item.sprint)===void 0}function isReleaseMissing(item){return toNonEmptyStringOrUndefined(item.release)===void 0}function hasMissingMetadataFilter(filters){return Boolean(filters.acMissing||filters.estimatesMissing||filters.resolutionMissing||filters.reviewerMissing||filters.riskMissing||filters.confidenceMissing||filters.sprintMissing||filters.releaseMissing||filters.metadataMissing)}function itemMatchesSpecificMetadataFilters(item,filters,classifier){const checks=[[filters.acMissing,isAcMissing(item)],[filters.estimatesMissing,isEstimateMissing(item)],[filters.resolutionMissing,isResolutionMissing(item,classifier)],[filters.reviewerMissing,isReviewerMissing(item)],[filters.riskMissing,isRiskMissing(item)],[filters.confidenceMissing,isConfidenceMissing(item)],[filters.sprintMissing,isSprintMissing(item)],[filters.releaseMissing,isReleaseMissing(item)]];return checks.every(([requested,matched])=>requested!==true||matched)}function itemMatchesCoreMetadataMissingUnion(item,classifier){return isAcMissing(item)||isEstimateMissing(item)||isResolutionMissing(item,classifier)}function itemMatchesMissingMetadata(item,filters,classifier){if(!hasMissingMetadataFilter(filters)){return true}if(!itemMatchesSpecificMetadataFilters(item,filters,classifier)){return false}if(filters.metadataMissing&&!itemMatchesCoreMetadataMissingUnion(item,classifier)){return false}return true}function filterMissingMetadata(items,filters,classifier){if(!hasMissingMetadataFilter(filters)){return[...items]}return items.filter(item=>itemMatchesMissingMetadata(item,filters,classifier))}const COVERAGE_FIELD_ORDER=["acceptance_criteria","estimated_minutes","resolution","tags","parent"];function isFieldPresent(item,field){switch(field){case"acceptance_criteria":return!isAcMissing(item);case"estimated_minutes":return!isEstimateMissing(item);case"resolution":return toNonEmptyStringOrUndefined(item.resolution)!==void 0;case"tags":return Array.isArray(item.tags)&&item.tags.length>0;default:return toNonEmptyStringOrUndefined(item.parent)!==void 0}}function isFieldApplicable(item,field,classifier){if(field==="resolution"){return classifier.isTerminal(item.status)}return true}function roundPercent(present,applicable){if(applicable===0){return 100}return Math.round(present/applicable*1e3)/10}function emptyFieldCoverage(){const record={};for(const field of COVERAGE_FIELD_ORDER){record[field]={present:0,applicable:0,percent:100}}return record}function accumulateCoverage(target,item,classifier){for(const field of COVERAGE_FIELD_ORDER){if(!isFieldApplicable(item,field,classifier)){continue}const entry=target[field];entry.applicable+=1;if(isFieldPresent(item,field)){entry.present+=1}}}function finalizePercentages(record){for(const field of COVERAGE_FIELD_ORDER){const entry=record[field];entry.percent=roundPercent(entry.present,entry.applicable)}}function computeMetadataCoverage(items,classifier){const overall=emptyFieldCoverage();const byType={};for(const item of items){accumulateCoverage(overall,item,classifier);const typeRecord=byType[item.type]??(byType[item.type]=emptyFieldCoverage());accumulateCoverage(typeRecord,item,classifier)}finalizePercentages(overall);for(const typeRecord of Object.values(byType)){finalizePercentages(typeRecord)}return{overall,by_type:byType}}const EMPTY_GROUP_LABELS={assignee:"(unassigned)",priority:"(no priority)",tag:"(untagged)",parent:"(unparented)",type:"(untyped)",status:"(no status)"};function emptyGroupLabel(dimension){return EMPTY_GROUP_LABELS[dimension]}function emptyBuckets(){return{open:0,in_progress:0,blocked:0,draft:0,closed:0,canceled:0,other:0}}function groupKeysForItem(item,dimension,options){switch(dimension){case"assignee":return[toNonEmptyStringOrUndefined(item.assignee)??null];case"parent":return[toNonEmptyStringOrUndefined(item.parent)??null];case"type":return[toNonEmptyStringOrUndefined(item.type)??null];case"status":return[toNonEmptyStringOrUndefined(item.status)??null];case"priority":return[typeof item.priority==="number"?`P${item.priority}`:null];default:{const prefix=options.tagPrefix?.trim();const tags=Array.isArray(item.tags)?item.tags:[];const matching=tags.filter(tag=>typeof tag==="string"&&tag.length>0&&(!prefix||tag.startsWith(prefix)));return matching.length>0?matching:[null]}}}function groupItemsByDimension(items,dimension,classifier,options={}){const rows=new Map;let totalItems=0;for(const item of items){totalItems+=1;const bucket=classifier.classify(item.status);for(const key of groupKeysForItem(item,dimension,options)){const mapKey=key??"\0empty";let row=rows.get(mapKey);if(!row){row={label:key??emptyGroupLabel(dimension),key,buckets:emptyBuckets(),total:0};rows.set(mapKey,row)}row.buckets[bucket]+=1;row.total+=1}}const sorted=[...rows.values()].sort((left,right)=>{if(right.total!==left.total){return right.total-left.total}if(left.key===null){return 1}if(right.key===null){return-1}return left.label.localeCompare(right.label)});return{dimension,rows:sorted,total_items:totalItems}}function computeLifecycleDistribution(items,classifier){const buckets=emptyBuckets();for(const item of items){buckets[classifier.classify(item.status)]+=1}return buckets}export{COVERAGE_FIELD_ORDER,LIFECYCLE_BUCKET_ORDER,computeLifecycleDistribution,computeMetadataCoverage,emptyGroupLabel,filterMissingMetadata,groupItemsByDimension,hasMissingMetadataFilter,isAcMissing,isConfidenceMissing,isEstimateMissing,isReleaseMissing,isResolutionMissing,isReviewerMissing,isRiskMissing,isSprintMissing,itemMatchesMissingMetadata,lifecycleClassifierFromStatusRegistry};
|
|
358
2
|
//# sourceMappingURL=metadata-coverage.js.map
|
|
359
|
-
//# debugId=5b7b3eaf-a792-5f44-9981-8c82ce511070
|
|
@@ -1,73 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
* Invalidates derived history-chain verification state after committed writes.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="5121b339-6594-58ec-b479-11cbf7dafd27")}catch(e){}}();
|
|
8
|
-
import { isFileMissingError } from "../fs/fs-utils.js";
|
|
9
|
-
import fs from "node:fs/promises";
|
|
10
|
-
import path from "node:path";
|
|
11
|
-
import { writeStderr } from "../output/output.js";
|
|
12
|
-
const DRIFT_CACHE_RELATIVE_PATH = path.join("runtime", "history-drift-cache.json");
|
|
13
|
-
const DRIFT_CACHE_ERROR_CODES = {
|
|
14
|
-
EINVAL: "invalid_cache_path",
|
|
15
|
-
EISDIR: "cache_path_is_directory",
|
|
16
|
-
ENOENT: "invalid_cache_path",
|
|
17
|
-
ENOTDIR: "invalid_cache_path",
|
|
18
|
-
ERR_FS_EISDIR: "cache_path_is_directory",
|
|
19
|
-
};
|
|
20
|
-
/** Extract a stable Node.js filesystem error code without assuming an Error instance. */
|
|
21
|
-
function getFilesystemErrorCode(error) {
|
|
22
|
-
return typeof error === "object" &&
|
|
23
|
-
error !== null &&
|
|
24
|
-
"code" in error &&
|
|
25
|
-
typeof error.code === "string"
|
|
26
|
-
? error.code
|
|
27
|
-
: undefined;
|
|
28
|
-
}
|
|
29
|
-
/** Remove the derived drift cache after a history mutation; a missing or concurrently removed cache is already invalidated. */
|
|
30
|
-
export async function invalidateHistoryDriftCache(pmRoot) {
|
|
31
|
-
const cachePath = path.join(pmRoot, DRIFT_CACHE_RELATIVE_PATH);
|
|
32
|
-
let pmRootIsDirectory = false;
|
|
33
|
-
let rootFailureCode = "invalid_cache_path";
|
|
34
|
-
try {
|
|
35
|
-
pmRootIsDirectory = (await fs.stat(await fs.realpath(pmRoot))).isDirectory();
|
|
36
|
-
}
|
|
37
|
-
catch (error) {
|
|
38
|
-
const errorCode = getFilesystemErrorCode(error);
|
|
39
|
-
rootFailureCode =
|
|
40
|
-
errorCode === undefined
|
|
41
|
-
? "unknown"
|
|
42
|
-
: (DRIFT_CACHE_ERROR_CODES[errorCode] ?? "filesystem_error");
|
|
43
|
-
}
|
|
44
|
-
if (!pmRootIsDirectory) {
|
|
45
|
-
writeStderr(`[pm] warning: history_drift_cache_invalidation_failed:${rootFailureCode}\n`);
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
try {
|
|
49
|
-
await fs.rm(cachePath, { force: true });
|
|
50
|
-
}
|
|
51
|
-
catch (error) {
|
|
52
|
-
const errorCode = getFilesystemErrorCode(error);
|
|
53
|
-
if (isFileMissingError(error)) {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
const code = errorCode === undefined
|
|
57
|
-
? "unknown"
|
|
58
|
-
: (DRIFT_CACHE_ERROR_CODES[errorCode] ?? "filesystem_error");
|
|
59
|
-
writeStderr(`[pm] warning: history_drift_cache_invalidation_failed:${code}\n`);
|
|
60
|
-
// Derived cache invalidation is best effort and must never roll back a
|
|
61
|
-
// successfully committed history mutation.
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
/** Resolve a conventional tracker root from a history stream path and invalidate its derived verification cache. */
|
|
65
|
-
export async function invalidateHistoryDriftCacheForPath(historyPath) {
|
|
66
|
-
const historyDirectory = path.dirname(path.resolve(historyPath));
|
|
67
|
-
if (path.basename(historyDirectory) !== "history") {
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
await invalidateHistoryDriftCache(path.dirname(historyDirectory));
|
|
71
|
-
}
|
|
1
|
+
!(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="979782f5-f4ee-5df5-a68a-0c51ab0548ae")}catch(e2){}})();import{isFileMissingError}from"../fs/fs-utils.js";import fs from"node:fs/promises";import path from"node:path";import{writeStderr}from"../output/output.js";const DRIFT_CACHE_RELATIVE_PATH=path.join("runtime","history-drift-cache.json");const DRIFT_CACHE_ERROR_CODES={EINVAL:"invalid_cache_path",EISDIR:"cache_path_is_directory",ENOENT:"invalid_cache_path",ENOTDIR:"invalid_cache_path",ERR_FS_EISDIR:"cache_path_is_directory"};function getFilesystemErrorCode(error){return typeof error==="object"&&error!==null&&"code"in error&&typeof error.code==="string"?error.code:void 0}async function invalidateHistoryDriftCache(pmRoot){const cachePath=path.join(pmRoot,DRIFT_CACHE_RELATIVE_PATH);let pmRootIsDirectory=false;let rootFailureCode="invalid_cache_path";try{pmRootIsDirectory=(await fs.stat(await fs.realpath(pmRoot))).isDirectory()}catch(error){const errorCode=getFilesystemErrorCode(error);rootFailureCode=errorCode===void 0?"unknown":DRIFT_CACHE_ERROR_CODES[errorCode]??"filesystem_error"}if(!pmRootIsDirectory){writeStderr(`[pm] warning: history_drift_cache_invalidation_failed:${rootFailureCode}
|
|
2
|
+
`);return}try{await fs.rm(cachePath,{force:true})}catch(error){const errorCode=getFilesystemErrorCode(error);if(isFileMissingError(error)){return}const code=errorCode===void 0?"unknown":DRIFT_CACHE_ERROR_CODES[errorCode]??"filesystem_error";writeStderr(`[pm] warning: history_drift_cache_invalidation_failed:${code}
|
|
3
|
+
`)}}async function invalidateHistoryDriftCacheForPath(historyPath){const historyDirectory=path.dirname(path.resolve(historyPath));if(path.basename(historyDirectory)!=="history"){return}await invalidateHistoryDriftCache(path.dirname(historyDirectory))}export{invalidateHistoryDriftCache,invalidateHistoryDriftCacheForPath};
|
|
72
4
|
//# sourceMappingURL=drift-cache.js.map
|
|
73
|
-
//# debugId=5121b339-6594-58ec-b479-11cbf7dafd27
|