@unbrained/pm-cli 2026.9.6 → 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 +218 -182
- 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/RELEASING.md +1 -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,161 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* Content-field governance & utilization primitives.
|
|
3
|
-
*
|
|
4
|
-
* "Project management = context management": these primitives let agents query
|
|
5
|
-
* which items carry context (notes/learnings/files/docs/tests/comments/deps/
|
|
6
|
-
* body, plus whether a linked test carries a runnable command) and which do
|
|
7
|
-
* not. The surface powers content-field selection (pm list / pm update-many)
|
|
8
|
-
* and field-utilization reporting (pm stats --field-utilization).
|
|
9
|
-
*
|
|
10
|
-
* The module is pure: it performs no IO and imports no heavy runtime
|
|
11
|
-
* dependencies. Callers pass plain structural item shapes so the logic stays
|
|
12
|
-
* trivially testable.
|
|
13
|
-
*/
|
|
14
|
-
/** Stable rendering / iteration order for content fields. */
|
|
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]="03824e4b-562b-5e12-a89a-9dd091ae7fd3")}catch(e){}}();
|
|
17
|
-
export const CONTENT_FIELD_ORDER = [
|
|
18
|
-
"notes",
|
|
19
|
-
"learnings",
|
|
20
|
-
"files",
|
|
21
|
-
"docs",
|
|
22
|
-
"tests",
|
|
23
|
-
"comments",
|
|
24
|
-
"deps",
|
|
25
|
-
"body",
|
|
26
|
-
"linked_command",
|
|
27
|
-
];
|
|
28
|
-
/** True when `value` is a non-empty array. */
|
|
29
|
-
function hasEntries(value) {
|
|
30
|
-
return Array.isArray(value) && value.length > 0;
|
|
31
|
-
}
|
|
32
|
-
/** True when the body string carries non-whitespace content. */
|
|
33
|
-
function hasBody(body) {
|
|
34
|
-
return typeof body === "string" && body.trim().length > 0;
|
|
35
|
-
}
|
|
36
|
-
/** True when at least one entry in the `tests` array carries a non-empty string `command`. Tolerant of non-object / non-string entries. */
|
|
37
|
-
function hasLinkedCommand(tests) {
|
|
38
|
-
if (!Array.isArray(tests)) {
|
|
39
|
-
return false;
|
|
40
|
-
}
|
|
41
|
-
return tests.some((entry) => {
|
|
42
|
-
if (typeof entry !== "object" || entry === null) {
|
|
43
|
-
return false;
|
|
44
|
-
}
|
|
45
|
-
const command = entry.command;
|
|
46
|
-
return typeof command === "string" && command.trim().length > 0;
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
/** True when the given content field carries context on this item. - collection fields: `Array.isArray && length > 0` - "deps": maps to the `dependencies` array - "body": `typeof body === "string" && body.trim().length > 0` - "linked_command": `tests` array has at least one entry with a non-empty string `command` */
|
|
50
|
-
export function isContentFieldPresent(item, field) {
|
|
51
|
-
switch (field) {
|
|
52
|
-
case "notes":
|
|
53
|
-
return hasEntries(item.notes);
|
|
54
|
-
case "learnings":
|
|
55
|
-
return hasEntries(item.learnings);
|
|
56
|
-
case "files":
|
|
57
|
-
return hasEntries(item.files);
|
|
58
|
-
case "docs":
|
|
59
|
-
return hasEntries(item.docs);
|
|
60
|
-
case "tests":
|
|
61
|
-
return hasEntries(item.tests);
|
|
62
|
-
case "comments":
|
|
63
|
-
return hasEntries(item.comments);
|
|
64
|
-
case "deps":
|
|
65
|
-
return hasEntries(item.dependencies);
|
|
66
|
-
case "body":
|
|
67
|
-
return hasBody(item.body);
|
|
68
|
-
case "linked_command":
|
|
69
|
-
return hasLinkedCommand(item.tests);
|
|
70
|
-
}
|
|
71
|
-
// No default: every ContentField has an explicit case above, so TypeScript
|
|
72
|
-
// enforces exhaustiveness here — adding a new field without a case is a
|
|
73
|
-
// compile error rather than a silent fall-through (and no unreachable branch
|
|
74
|
-
// to dent the literal-100% coverage gate).
|
|
75
|
-
}
|
|
76
|
-
/** True when at least one content-field selection is requested. */
|
|
77
|
-
export function hasContentFieldFilter(filters) {
|
|
78
|
-
return CONTENT_FIELD_ORDER.some((field) => filters[field] !== undefined);
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Does a single item satisfy the requested content-field filters?
|
|
82
|
-
*
|
|
83
|
-
* AND semantics across all requested fields: each requested field must match
|
|
84
|
-
* its present/absent requirement. When no filter is requested the item passes.
|
|
85
|
-
*/
|
|
86
|
-
export function itemMatchesContentFilters(item, filters) {
|
|
87
|
-
for (const field of CONTENT_FIELD_ORDER) {
|
|
88
|
-
const selection = filters[field];
|
|
89
|
-
if (selection === undefined) {
|
|
90
|
-
continue;
|
|
91
|
-
}
|
|
92
|
-
const present = isContentFieldPresent(item, field);
|
|
93
|
-
if (selection === "present" && !present) {
|
|
94
|
-
return false;
|
|
95
|
-
}
|
|
96
|
-
if (selection === "absent" && present) {
|
|
97
|
-
return false;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return true;
|
|
101
|
-
}
|
|
102
|
-
/** Filter a list of items by the requested content-field selections. */
|
|
103
|
-
export function filterByContentFields(items, filters) {
|
|
104
|
-
if (!hasContentFieldFilter(filters)) {
|
|
105
|
-
return [...items];
|
|
106
|
-
}
|
|
107
|
-
return items.filter((item) => itemMatchesContentFilters(item, filters));
|
|
108
|
-
}
|
|
109
|
-
/** Whether a content-field filter set requires the heavy collections to be loaded. True when any non-body field is requested (collections + tests' linked command all live in the heavy item-metadata arrays). */
|
|
110
|
-
export function contentFiltersNeedCollections(filters) {
|
|
111
|
-
return CONTENT_FIELD_ORDER.some((field) => field !== "body" && filters[field] !== undefined);
|
|
112
|
-
}
|
|
113
|
-
/** Whether a content-field filter set requires the item body to be loaded. */
|
|
114
|
-
export function contentFiltersNeedBody(filters) {
|
|
115
|
-
return filters.body !== undefined;
|
|
116
|
-
}
|
|
117
|
-
/** Round present/total into a one-decimal percentage. Matches the convention in metadata-coverage.ts: a zero population reports 100 (nothing missing). */
|
|
118
|
-
function roundPercent(present, total) {
|
|
119
|
-
if (total === 0) {
|
|
120
|
-
return 100;
|
|
121
|
-
}
|
|
122
|
-
return Math.round((present / total) * 1000) / 10;
|
|
123
|
-
}
|
|
124
|
-
function emptyUtilizationFields() {
|
|
125
|
-
const record = {};
|
|
126
|
-
for (const field of CONTENT_FIELD_ORDER) {
|
|
127
|
-
record[field] = { present: 0, total: 0, percent: 100 };
|
|
128
|
-
}
|
|
129
|
-
return record;
|
|
130
|
-
}
|
|
131
|
-
/** Compute content-field utilization across a list of items. For each field we report how many items populate it out of the total, plus a rounded percentage. Convenience `body_populated`/`empty_body` aliases mirror GH-241. */
|
|
132
|
-
export function computeContentFieldUtilization(items) {
|
|
133
|
-
const fields = emptyUtilizationFields();
|
|
134
|
-
const total = items.length;
|
|
135
|
-
for (const item of items) {
|
|
136
|
-
for (const field of CONTENT_FIELD_ORDER) {
|
|
137
|
-
if (isContentFieldPresent(item, field)) {
|
|
138
|
-
fields[field].present += 1;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
for (const field of CONTENT_FIELD_ORDER) {
|
|
143
|
-
fields[field].total = total;
|
|
144
|
-
fields[field].percent = roundPercent(fields[field].present, total);
|
|
145
|
-
}
|
|
146
|
-
const bodyPopulated = fields.body;
|
|
147
|
-
const emptyBodyCount = total - bodyPopulated.present;
|
|
148
|
-
const emptyBody = {
|
|
149
|
-
present: emptyBodyCount,
|
|
150
|
-
total,
|
|
151
|
-
percent: roundPercent(emptyBodyCount, total),
|
|
152
|
-
};
|
|
153
|
-
return {
|
|
154
|
-
total_items: total,
|
|
155
|
-
fields,
|
|
156
|
-
body_populated: bodyPopulated,
|
|
157
|
-
empty_body: emptyBody,
|
|
158
|
-
};
|
|
159
|
-
}
|
|
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]="2e200f74-0e6c-58ac-ab8c-da49071465ff")}catch(e2){}})();const CONTENT_FIELD_ORDER=["notes","learnings","files","docs","tests","comments","deps","body","linked_command"];function hasEntries(value){return Array.isArray(value)&&value.length>0}function hasBody(body){return typeof body==="string"&&body.trim().length>0}function hasLinkedCommand(tests){if(!Array.isArray(tests)){return false}return tests.some(entry=>{if(typeof entry!=="object"||entry===null){return false}const command=entry.command;return typeof command==="string"&&command.trim().length>0})}function isContentFieldPresent(item,field){switch(field){case"notes":return hasEntries(item.notes);case"learnings":return hasEntries(item.learnings);case"files":return hasEntries(item.files);case"docs":return hasEntries(item.docs);case"tests":return hasEntries(item.tests);case"comments":return hasEntries(item.comments);case"deps":return hasEntries(item.dependencies);case"body":return hasBody(item.body);case"linked_command":return hasLinkedCommand(item.tests)}}function hasContentFieldFilter(filters){return CONTENT_FIELD_ORDER.some(field=>filters[field]!==void 0)}function itemMatchesContentFilters(item,filters){for(const field of CONTENT_FIELD_ORDER){const selection=filters[field];if(selection===void 0){continue}const present=isContentFieldPresent(item,field);if(selection==="present"&&!present){return false}if(selection==="absent"&&present){return false}}return true}function filterByContentFields(items,filters){if(!hasContentFieldFilter(filters)){return[...items]}return items.filter(item=>itemMatchesContentFilters(item,filters))}function contentFiltersNeedCollections(filters){return CONTENT_FIELD_ORDER.some(field=>field!=="body"&&filters[field]!==void 0)}function contentFiltersNeedBody(filters){return filters.body!==void 0}function roundPercent(present,total){if(total===0){return 100}return Math.round(present/total*1e3)/10}function emptyUtilizationFields(){const record={};for(const field of CONTENT_FIELD_ORDER){record[field]={present:0,total:0,percent:100}}return record}function computeContentFieldUtilization(items){const fields=emptyUtilizationFields();const total=items.length;for(const item of items){for(const field of CONTENT_FIELD_ORDER){if(isContentFieldPresent(item,field)){fields[field].present+=1}}}for(const field of CONTENT_FIELD_ORDER){fields[field].total=total;fields[field].percent=roundPercent(fields[field].present,total)}const bodyPopulated=fields.body;const emptyBodyCount=total-bodyPopulated.present;const emptyBody={present:emptyBodyCount,total,percent:roundPercent(emptyBodyCount,total)};return{total_items:total,fields,body_populated:bodyPopulated,empty_body:emptyBody}}export{CONTENT_FIELD_ORDER,computeContentFieldUtilization,contentFiltersNeedBody,contentFiltersNeedCollections,filterByContentFields,hasContentFieldFilter,isContentFieldPresent,itemMatchesContentFilters};
|
|
160
2
|
//# sourceMappingURL=content-fields.js.map
|
|
161
|
-
//# debugId=03824e4b-562b-5e12-a89a-9dd091ae7fd3
|
|
@@ -1,152 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* Logical issue-code governance primitives (GH-235).
|
|
3
|
-
*
|
|
4
|
-
* Trackers frequently adopt a title convention that embeds a logical issue
|
|
5
|
-
* code at the START of the title, e.g. `ISSUE-004: ...`, `BUG-12 ...`,
|
|
6
|
-
* `TASK-7 — ...`, `ADR-001`, `RFC-9`. When two distinct items share the same
|
|
7
|
-
* logical code, auditability and duplicate detection both suffer: a human or
|
|
8
|
-
* agent searching for "ISSUE-004" can no longer assume a single canonical item.
|
|
9
|
-
*
|
|
10
|
-
* These primitives detect that condition. They are pure: no IO, no heavy
|
|
11
|
-
* runtime dependencies. Callers pass plain structural item shapes so the logic
|
|
12
|
-
* stays trivially unit-testable.
|
|
13
|
-
*/
|
|
14
|
-
/**
|
|
15
|
-
* Match a conventional leading logical issue code: an upper-case alphanumeric
|
|
16
|
-
* prefix (starting with a letter) followed by a `-` separator and a number, at
|
|
17
|
-
* the very start of the title (after optional leading whitespace).
|
|
18
|
-
*
|
|
19
|
-
* Examples that match: `ISSUE-004`, `BUG-12`, `TASK-7`, `ADR-001`, `RFC-9`,
|
|
20
|
-
* `GH-235`, `PM2-14`. The trailing `\b` requires the digit run to end at a word
|
|
21
|
-
* boundary, so `ISSUE-004-extra` extracts `ISSUE-004` while `ISSUE-004foo`
|
|
22
|
-
* (digit immediately followed by a letter — no boundary) does not match.
|
|
23
|
-
*/
|
|
24
|
-
|
|
25
|
-
!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]="8a7fbaf1-917f-5067-b9b6-a9f27c80e291")}catch(e){}}();
|
|
26
|
-
const ISSUE_CODE_PATTERN = /^([A-Z][A-Z0-9]*-\d+)\b/iu;
|
|
27
|
-
/**
|
|
28
|
-
* Extract the leading logical issue code from a title, or `null` when the title
|
|
29
|
-
* does not begin with one. The title is trimmed and upper-cased before matching
|
|
30
|
-
* so case differences (`issue-004` vs `ISSUE-004`) collapse to one logical
|
|
31
|
-
* code; the returned code is therefore always normalized upper-case.
|
|
32
|
-
*
|
|
33
|
-
* Accepts unknown-ish input defensively (exported helper SDK consumers may call
|
|
34
|
-
* from untyped JS): a non-string or empty title resolves to `null`.
|
|
35
|
-
*/
|
|
36
|
-
export function extractIssueCode(title, options = {}) {
|
|
37
|
-
if (typeof title !== "string") {
|
|
38
|
-
return null;
|
|
39
|
-
}
|
|
40
|
-
const trimmed = title.trim();
|
|
41
|
-
if (trimmed.length === 0) {
|
|
42
|
-
return null;
|
|
43
|
-
}
|
|
44
|
-
const match = ISSUE_CODE_PATTERN.exec(trimmed);
|
|
45
|
-
if (!match)
|
|
46
|
-
return null;
|
|
47
|
-
const rawCode = match[1];
|
|
48
|
-
const normalized = rawCode.toUpperCase();
|
|
49
|
-
const rawPrefix = rawCode.slice(0, rawCode.lastIndexOf("-"));
|
|
50
|
-
const configured = new Set((options.configuredPrefixes ?? []).map((prefix) => prefix.trim().replace(/-+$/u, "").toUpperCase()));
|
|
51
|
-
const remainder = trimmed.slice(rawCode.length);
|
|
52
|
-
const evidence = options.evidenceText?.toUpperCase() ?? "";
|
|
53
|
-
const hasExplicitBodyEvidence = evidence.includes(`ISSUE CODE: ${normalized}`) ||
|
|
54
|
-
evidence.includes(`ISSUE CODE \`${normalized}\``) ||
|
|
55
|
-
evidence.includes(`\`${normalized}\``) ||
|
|
56
|
-
evidence.includes(`[${normalized}]`);
|
|
57
|
-
const structurallyQualified = rawPrefix === rawPrefix.toUpperCase() ||
|
|
58
|
-
/^\s*(?::|—|–|\])/u.test(remainder) ||
|
|
59
|
-
configured.has(rawPrefix.toUpperCase()) ||
|
|
60
|
-
hasExplicitBodyEvidence;
|
|
61
|
-
return structurallyQualified ? normalized : null;
|
|
62
|
-
}
|
|
63
|
-
/** Test whether a value is a usable (non-empty after trim) item-id reference. */
|
|
64
|
-
function isNonEmptyIdReference(value) {
|
|
65
|
-
return typeof value === "string" && value.trim().length > 0;
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Find logical issue codes used by 2+ items. Any item whose title begins with a
|
|
69
|
-
* conventional issue code contributes; codes used by a single item are not
|
|
70
|
-
* reported. Status is intentionally NOT considered for genuine collisions — a
|
|
71
|
-
* closed item and an open item sharing a code still collide for audit purposes.
|
|
72
|
-
*
|
|
73
|
-
* Two adjudicated/by-design cases are excluded so `validate` output stays
|
|
74
|
-
* trustworthy in real trackers (GH-275, GH-278):
|
|
75
|
-
*
|
|
76
|
-
* - **Closed-as-duplicate** (GH-278): an item with a non-empty `duplicate_of`
|
|
77
|
-
* has already been resolved against its canonical keeper, so it is dropped
|
|
78
|
-
* before grouping and never contributes to a collision.
|
|
79
|
-
* - **Parent/child prefix sharing** (GH-275): the `PARENT` + `PARENT-T0n`
|
|
80
|
-
* task-breakdown convention makes a child's title share the parent's code.
|
|
81
|
-
* Within each code group, any item whose `parent` is another item in the same
|
|
82
|
-
* group is dropped, because the shared code is intentional hierarchy, not a
|
|
83
|
-
* collision. A genuine duplicate (two items with the same code, neither the
|
|
84
|
-
* parent of the other) still surfaces after this filtering.
|
|
85
|
-
*
|
|
86
|
-
* Results are deterministic: duplicate groups are sorted by code, and the
|
|
87
|
-
* `ids`/`titles` within each group are sorted by id. The first-seen title for a
|
|
88
|
-
* given (id) is used; duplicate ids (should not occur for a valid corpus) are
|
|
89
|
-
* de-duplicated so an item never inflates its own code's count.
|
|
90
|
-
*/
|
|
91
|
-
export function findDuplicateIssueCodes(items, options = {}) {
|
|
92
|
-
const byCode = new Map();
|
|
93
|
-
for (const item of items) {
|
|
94
|
-
// A non-string title can never carry a code, so skip it before extraction;
|
|
95
|
-
// this also guarantees every stored title below is a real string.
|
|
96
|
-
if (typeof item.title !== "string") {
|
|
97
|
-
continue;
|
|
98
|
-
}
|
|
99
|
-
// GH-278: an item closed as a duplicate of another is already adjudicated.
|
|
100
|
-
if (isNonEmptyIdReference(item.duplicate_of)) {
|
|
101
|
-
continue;
|
|
102
|
-
}
|
|
103
|
-
const code = extractIssueCode(item.title, {
|
|
104
|
-
...options,
|
|
105
|
-
evidenceText: item.body,
|
|
106
|
-
});
|
|
107
|
-
if (code === null) {
|
|
108
|
-
continue;
|
|
109
|
-
}
|
|
110
|
-
let entries = byCode.get(code);
|
|
111
|
-
if (!entries) {
|
|
112
|
-
entries = [];
|
|
113
|
-
byCode.set(code, entries);
|
|
114
|
-
}
|
|
115
|
-
if (!entries.some((entry) => entry.id === item.id)) {
|
|
116
|
-
entries.push({
|
|
117
|
-
id: item.id,
|
|
118
|
-
title: item.title,
|
|
119
|
-
parent: isNonEmptyIdReference(item.parent) ? item.parent.trim() : null,
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
const duplicates = [];
|
|
124
|
-
for (const [code, entries] of byCode) {
|
|
125
|
-
if (entries.length < 2) {
|
|
126
|
-
continue;
|
|
127
|
-
}
|
|
128
|
-
// GH-275: drop children whose parent is another item carrying the same code
|
|
129
|
-
// (intentional `PARENT` + `PARENT-T0n` breakdown), then re-check the group.
|
|
130
|
-
// The parent reference is resolved only against the same-code group on
|
|
131
|
-
// purpose: a child is by-design noise solely when its parent shares the code
|
|
132
|
-
// (resolving against the full corpus would suppress genuinely colliding
|
|
133
|
-
// siblings whose parent merely exists elsewhere). Comparison is
|
|
134
|
-
// case-insensitive so a `parent` reference recorded in a different case than
|
|
135
|
-
// the canonical id (e.g. an upper-case `id_prefix`) still matches.
|
|
136
|
-
const idsInGroup = new Set(entries.map((entry) => entry.id.toLowerCase()));
|
|
137
|
-
const collisionEntries = entries.filter((entry) => entry.parent === null || !idsInGroup.has(entry.parent.toLowerCase()));
|
|
138
|
-
if (collisionEntries.length < 2) {
|
|
139
|
-
continue;
|
|
140
|
-
}
|
|
141
|
-
const sorted = [...collisionEntries].sort((left, right) => left.id.localeCompare(right.id));
|
|
142
|
-
duplicates.push({
|
|
143
|
-
code,
|
|
144
|
-
count: sorted.length,
|
|
145
|
-
ids: sorted.map((entry) => entry.id),
|
|
146
|
-
titles: sorted.map((entry) => entry.title),
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
return duplicates.sort((left, right) => left.code.localeCompare(right.code));
|
|
150
|
-
}
|
|
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]="40703093-d602-5e6b-92b6-6b5efe3613fe")}catch(e2){}})();const ISSUE_CODE_PATTERN=/^([A-Z][A-Z0-9]*-\d+)\b/iu;function extractIssueCode(title,options={}){if(typeof title!=="string"){return null}const trimmed=title.trim();if(trimmed.length===0){return null}const match=ISSUE_CODE_PATTERN.exec(trimmed);if(!match)return null;const rawCode=match[1];const normalized=rawCode.toUpperCase();const rawPrefix=rawCode.slice(0,rawCode.lastIndexOf("-"));const configured=new Set((options.configuredPrefixes??[]).map(prefix=>prefix.trim().replace(/-+$/u,"").toUpperCase()));const remainder=trimmed.slice(rawCode.length);const evidence=options.evidenceText?.toUpperCase()??"";const hasExplicitBodyEvidence=evidence.includes(`ISSUE CODE: ${normalized}`)||evidence.includes(`ISSUE CODE \`${normalized}\``)||evidence.includes(`\`${normalized}\``)||evidence.includes(`[${normalized}]`);const structurallyQualified=rawPrefix===rawPrefix.toUpperCase()||/^\s*(?::|—|–|\])/u.test(remainder)||configured.has(rawPrefix.toUpperCase())||hasExplicitBodyEvidence;return structurallyQualified?normalized:null}function isNonEmptyIdReference(value){return typeof value==="string"&&value.trim().length>0}function findDuplicateIssueCodes(items,options={}){const byCode=new Map;for(const item of items){if(typeof item.title!=="string"){continue}if(isNonEmptyIdReference(item.duplicate_of)){continue}const code=extractIssueCode(item.title,{...options,evidenceText:item.body});if(code===null){continue}let entries=byCode.get(code);if(!entries){entries=[];byCode.set(code,entries)}if(!entries.some(entry=>entry.id===item.id)){entries.push({id:item.id,title:item.title,parent:isNonEmptyIdReference(item.parent)?item.parent.trim():null})}}const duplicates=[];for(const[code,entries]of byCode){if(entries.length<2){continue}const idsInGroup=new Set(entries.map(entry=>entry.id.toLowerCase()));const collisionEntries=entries.filter(entry=>entry.parent===null||!idsInGroup.has(entry.parent.toLowerCase()));if(collisionEntries.length<2){continue}const sorted=[...collisionEntries].sort((left,right)=>left.id.localeCompare(right.id));duplicates.push({code,count:sorted.length,ids:sorted.map(entry=>entry.id),titles:sorted.map(entry=>entry.title)})}return duplicates.sort((left,right)=>left.code.localeCompare(right.code))}export{extractIssueCode,findDuplicateIssueCodes};
|
|
151
2
|
//# sourceMappingURL=issue-codes.js.map
|
|
152
|
-
//# debugId=8a7fbaf1-917f-5067-b9b6-a9f27c80e291
|