@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,362 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module sdk/graph/durable-cache
|
|
3
|
-
*
|
|
4
|
-
* Durable, rebuildable graph query index persisted under the workspace
|
|
5
|
-
* `runtime/` cache directory. One-shot CLI invocations lose the in-process
|
|
6
|
-
* {@link WorkspaceGraphCache} memo between commands; this store persists the
|
|
7
|
-
* fingerprint-keyed deterministic query results (and the audit census
|
|
8
|
-
* baseline) across processes so repeated bounded queries on an unchanged
|
|
9
|
-
* workspace are answered without re-running assembly-derived analysis. The
|
|
10
|
-
* index is never authoritative: every entry is rebuildable from item storage,
|
|
11
|
-
* a fingerprint mismatch invalidates the whole envelope, corrupt or
|
|
12
|
-
* version-drifted files are ignored and rewritten, and writes are atomic
|
|
13
|
-
* (temp-file rename) so a crash can never publish a torn index. Persistence
|
|
14
|
-
* is optional for small projects: envelopes are written only above an item
|
|
15
|
-
* threshold or after an explicit `pm graph index --rebuild` opt-in.
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
!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]="9e4aa41d-fca4-5e55-ab2b-d99f06d90ae2")}catch(e){}}();
|
|
19
|
-
import path from "node:path";
|
|
20
|
-
import { readFileIfExists, removeFileIfExists, writeFileAtomic, } from "../../core/fs/fs-utils.js";
|
|
21
|
-
import { acquireLock } from "../../core/lock/lock.js";
|
|
22
|
-
import { isSemanticContextKind, } from "./governance.js";
|
|
23
|
-
import { RELATIONSHIP_AUDIT_FINDING_CODES } from "./governance-contracts.js";
|
|
24
|
-
/** Envelope format version; any change invalidates persisted entries. */
|
|
25
|
-
export const GRAPH_DURABLE_CACHE_VERSION = 1;
|
|
26
|
-
/** Workspaces below this item count skip implicit persistence. */
|
|
27
|
-
export const GRAPH_DURABLE_CACHE_MIN_ITEMS = 500;
|
|
28
|
-
/** Maximum memoized query results retained in one persisted envelope. */
|
|
29
|
-
const MAX_DURABLE_RESULTS = 64;
|
|
30
|
-
const DURABLE_GRAPH_CACHE_LOCK_ID = "graph-durable-cache";
|
|
31
|
-
/** Serialize cache read-merge-write and clear operations across processes. */
|
|
32
|
-
function acquireDurableGraphCacheLock(pmRoot) {
|
|
33
|
-
return acquireLock(pmRoot, DURABLE_GRAPH_CACHE_LOCK_ID, 30, `graph-cache:${process.pid}`, false, false, 3_000);
|
|
34
|
-
}
|
|
35
|
-
/** Resolve the durable graph cache file path for one workspace root. */
|
|
36
|
-
export function durableGraphCachePath(pmRoot) {
|
|
37
|
-
return path.join(pmRoot, "runtime", "graph-cache.json");
|
|
38
|
-
}
|
|
39
|
-
/** Resolve the persisted audit census baseline path for one workspace root. */
|
|
40
|
-
export function graphAuditBaselinePath(pmRoot) {
|
|
41
|
-
return path.join(pmRoot, "runtime", "graph-audit-baseline.json");
|
|
42
|
-
}
|
|
43
|
-
/** Decode one persisted JSON envelope, returning undefined on any defect. */
|
|
44
|
-
function decodeEnvelope(raw) {
|
|
45
|
-
if (raw === null)
|
|
46
|
-
return undefined;
|
|
47
|
-
try {
|
|
48
|
-
const parsed = JSON.parse(raw);
|
|
49
|
-
if (typeof parsed !== "object" ||
|
|
50
|
-
parsed === null ||
|
|
51
|
-
parsed.version !==
|
|
52
|
-
GRAPH_DURABLE_CACHE_VERSION ||
|
|
53
|
-
typeof parsed.fingerprint !== "string" ||
|
|
54
|
-
typeof parsed.saved_at !== "string" ||
|
|
55
|
-
typeof parsed.results !== "object" ||
|
|
56
|
-
parsed.results === null ||
|
|
57
|
-
Array.isArray(parsed.results))
|
|
58
|
-
return undefined;
|
|
59
|
-
return parsed;
|
|
60
|
-
}
|
|
61
|
-
catch {
|
|
62
|
-
// Corrupt or torn writes must never break queries; the index rebuilds.
|
|
63
|
-
return undefined;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Open the persisted envelope against the current workspace fingerprint. A
|
|
68
|
-
* missing, corrupt, version-drifted, or fingerprint-mismatched envelope reads
|
|
69
|
-
* as empty so stale entries can never answer for a mutated workspace.
|
|
70
|
-
*/
|
|
71
|
-
export async function openDurableGraphCache(pmRoot, fingerprint) {
|
|
72
|
-
const raw = await readFileIfExists(durableGraphCachePath(pmRoot));
|
|
73
|
-
const envelope = decodeEnvelope(raw);
|
|
74
|
-
const fresh = envelope?.fingerprint === fingerprint;
|
|
75
|
-
return {
|
|
76
|
-
exists: raw !== null,
|
|
77
|
-
fresh,
|
|
78
|
-
results: fresh ? envelope.results : {},
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Persist one query result into the durable envelope, replacing any envelope
|
|
83
|
-
* recorded for a different fingerprint and trimming the oldest entries beyond
|
|
84
|
-
* the retention bound. A cross-process lock protects the read-merge-write, and
|
|
85
|
-
* the final write is atomic, so concurrent queries retain each other's entries.
|
|
86
|
-
*/
|
|
87
|
-
export async function persistDurableGraphResult(pmRoot, fingerprint, view, queryKey, result) {
|
|
88
|
-
const release = await acquireDurableGraphCacheLock(pmRoot);
|
|
89
|
-
try {
|
|
90
|
-
const envelope = decodeEnvelope(await readFileIfExists(durableGraphCachePath(pmRoot)));
|
|
91
|
-
const results = envelope?.fingerprint === fingerprint ? envelope.results : {};
|
|
92
|
-
delete results[queryKey];
|
|
93
|
-
results[queryKey] = result;
|
|
94
|
-
const keys = Object.keys(results);
|
|
95
|
-
for (const stale of keys.slice(0, Math.max(0, keys.length - MAX_DURABLE_RESULTS)))
|
|
96
|
-
delete results[stale];
|
|
97
|
-
await writeFileAtomic(durableGraphCachePath(pmRoot), JSON.stringify({
|
|
98
|
-
version: GRAPH_DURABLE_CACHE_VERSION,
|
|
99
|
-
fingerprint,
|
|
100
|
-
saved_at: new Date().toISOString(),
|
|
101
|
-
results,
|
|
102
|
-
}));
|
|
103
|
-
view.results = results;
|
|
104
|
-
}
|
|
105
|
-
finally {
|
|
106
|
-
await release();
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
/** Delete the persisted durable graph cache envelope when present. */
|
|
110
|
-
export async function clearDurableGraphCache(pmRoot) {
|
|
111
|
-
const release = await acquireDurableGraphCacheLock(pmRoot);
|
|
112
|
-
try {
|
|
113
|
-
await removeFileIfExists(durableGraphCachePath(pmRoot));
|
|
114
|
-
}
|
|
115
|
-
finally {
|
|
116
|
-
await release();
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
/** Report the durable index status against the current workspace fingerprint. */
|
|
120
|
-
export async function durableGraphCacheStatus(pmRoot, fingerprint) {
|
|
121
|
-
const cachePath = durableGraphCachePath(pmRoot);
|
|
122
|
-
const raw = await readFileIfExists(cachePath);
|
|
123
|
-
const envelope = decodeEnvelope(raw);
|
|
124
|
-
if (envelope === undefined)
|
|
125
|
-
return { exists: raw !== null, fresh: false, entry_count: 0 };
|
|
126
|
-
return {
|
|
127
|
-
exists: true,
|
|
128
|
-
fresh: envelope.fingerprint === fingerprint,
|
|
129
|
-
entry_count: Object.keys(envelope.results).length,
|
|
130
|
-
fingerprint: envelope.fingerprint.slice(0, 12),
|
|
131
|
-
saved_at: envelope.saved_at,
|
|
132
|
-
bytes: Buffer.byteLength(raw, "utf8"),
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Decide whether implicit persistence applies to this invocation. Small
|
|
137
|
-
* workspaces skip the index unless an envelope already exists — the explicit
|
|
138
|
-
* `pm graph index --rebuild` opt-in creates it and thereby enables writes.
|
|
139
|
-
*/
|
|
140
|
-
export function shouldPersistDurableGraphCache(itemCount, envelopeExists) {
|
|
141
|
-
return envelopeExists || itemCount >= GRAPH_DURABLE_CACHE_MIN_ITEMS;
|
|
142
|
-
}
|
|
143
|
-
/** Return whether a decoded value is a string-keyed non-negative integer count map. */
|
|
144
|
-
function isNonnegativeCountRecord(value) {
|
|
145
|
-
return isRecord(value) && Object.values(value).every(isNonnegativeInteger);
|
|
146
|
-
}
|
|
147
|
-
/** Return whether a decoded value is a non-array record. */
|
|
148
|
-
function isRecord(value) {
|
|
149
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
150
|
-
}
|
|
151
|
-
/** Return whether a decoded value is a non-negative integer. */
|
|
152
|
-
function isNonnegativeInteger(value) {
|
|
153
|
-
return Number.isInteger(value) && Number(value) >= 0;
|
|
154
|
-
}
|
|
155
|
-
/** Return whether a decoded value is a finite share in the inclusive unit interval. */
|
|
156
|
-
function isUnitShare(value) {
|
|
157
|
-
return (typeof value === "number" &&
|
|
158
|
-
Number.isFinite(value) &&
|
|
159
|
-
value >= 0 &&
|
|
160
|
-
value <= 1);
|
|
161
|
-
}
|
|
162
|
-
/** Apply a validator only when an optional decoded value is present. */
|
|
163
|
-
function isOptionalValid(value, validate) {
|
|
164
|
-
return value === undefined || validate(value);
|
|
165
|
-
}
|
|
166
|
-
/** Return whether a decoded record contains finite shares in the inclusive unit interval. */
|
|
167
|
-
function isUnitShareRecord(value) {
|
|
168
|
-
return isRecord(value) && Object.values(value).every(isUnitShare);
|
|
169
|
-
}
|
|
170
|
-
/** Return whether every decoded item-type coverage entry contains valid counts. */
|
|
171
|
-
function isNonnegativeCoverageByTypeRecord(value) {
|
|
172
|
-
if (!isRecord(value))
|
|
173
|
-
return false;
|
|
174
|
-
return Object.values(value).every((entry) => isRecord(entry) &&
|
|
175
|
-
[entry.active, entry.isolated, entry.degree_leq_one].every(isNonnegativeInteger));
|
|
176
|
-
}
|
|
177
|
-
/** Decode the additive information-bearing census as one coherent field group. */
|
|
178
|
-
function decodeInformativeProfile(profile, nodes, edges) {
|
|
179
|
-
const fields = [
|
|
180
|
-
"recorded_nodes",
|
|
181
|
-
"informative_edges",
|
|
182
|
-
"redundant_edges",
|
|
183
|
-
"ordering_contradiction_edges",
|
|
184
|
-
];
|
|
185
|
-
const presentCount = fields.filter((field) => profile[field] !== undefined).length;
|
|
186
|
-
if (presentCount !== 0 && presentCount !== fields.length)
|
|
187
|
-
return undefined;
|
|
188
|
-
if (!fields.every((field) => isOptionalValid(profile[field], isNonnegativeInteger)))
|
|
189
|
-
return undefined;
|
|
190
|
-
const decoded = {
|
|
191
|
-
recorded_nodes: profile.recorded_nodes ?? nodes,
|
|
192
|
-
informative_edges: profile.informative_edges ?? edges,
|
|
193
|
-
redundant_edges: profile.redundant_edges ?? 0,
|
|
194
|
-
ordering_contradiction_edges: profile.ordering_contradiction_edges ?? 0,
|
|
195
|
-
};
|
|
196
|
-
return decoded.recorded_nodes <= nodes &&
|
|
197
|
-
decoded.informative_edges <= edges &&
|
|
198
|
-
decoded.redundant_edges <= edges &&
|
|
199
|
-
decoded.ordering_contradiction_edges <= edges
|
|
200
|
-
? decoded
|
|
201
|
-
: undefined;
|
|
202
|
-
}
|
|
203
|
-
/** Validate the optional structural census fields as one complete version group. */
|
|
204
|
-
function hasValidStructuralFields(profile, countFields, rateFields) {
|
|
205
|
-
const introducedFields = [
|
|
206
|
-
...countFields,
|
|
207
|
-
...rateFields,
|
|
208
|
-
"finding_subjects_by_code",
|
|
209
|
-
];
|
|
210
|
-
const presentCount = introducedFields.filter((field) => profile[field] !== undefined).length;
|
|
211
|
-
if (presentCount !== 0 && presentCount !== introducedFields.length)
|
|
212
|
-
return false;
|
|
213
|
-
return (countFields.every((field) => isOptionalValid(profile[field], isNonnegativeInteger)) &&
|
|
214
|
-
rateFields.every((field) => isOptionalValid(profile[field], isNonnegativeInteger) &&
|
|
215
|
-
(profile[field] === undefined || Number(profile[field]) <= 10_000)) &&
|
|
216
|
-
isOptionalValid(profile.finding_subjects_by_code, isNonnegativeCountRecord));
|
|
217
|
-
}
|
|
218
|
-
/** Decode optional structural fields while normalizing pre-structure baselines. */
|
|
219
|
-
function decodeStructuralProfile(profile, affectedSubjectsByCode, nodes, edges) {
|
|
220
|
-
const informative = decodeInformativeProfile(profile, nodes, edges);
|
|
221
|
-
if (informative === undefined)
|
|
222
|
-
return undefined;
|
|
223
|
-
const countFields = [
|
|
224
|
-
"articulation_points",
|
|
225
|
-
"bridge_edges",
|
|
226
|
-
"outcome_nodes",
|
|
227
|
-
"active_outcome_reachable_nodes",
|
|
228
|
-
"active_outcome_unreachable_nodes",
|
|
229
|
-
"terminal_nodes",
|
|
230
|
-
"terminal_outcome_reachable_nodes",
|
|
231
|
-
"terminal_outcome_unreachable_nodes",
|
|
232
|
-
"outcome_reachable_nodes",
|
|
233
|
-
"outcome_unreachable_nodes",
|
|
234
|
-
];
|
|
235
|
-
const rateFields = [
|
|
236
|
-
"active_outcome_reachability_basis_points",
|
|
237
|
-
"terminal_outcome_reachability_basis_points",
|
|
238
|
-
"outcome_reachability_basis_points",
|
|
239
|
-
];
|
|
240
|
-
if (!hasValidStructuralFields(profile, countFields, rateFields))
|
|
241
|
-
return undefined;
|
|
242
|
-
if (profile.edge_basis !== undefined &&
|
|
243
|
-
profile.edge_basis !== "deduplicated_directed")
|
|
244
|
-
return undefined;
|
|
245
|
-
const findingSubjects = isNonnegativeCountRecord(profile.finding_subjects_by_code)
|
|
246
|
-
? profile.finding_subjects_by_code
|
|
247
|
-
: {};
|
|
248
|
-
return {
|
|
249
|
-
edge_basis: "deduplicated_directed",
|
|
250
|
-
...informative,
|
|
251
|
-
...Object.fromEntries(countFields.map((field) => [field, profile[field] ?? 0])),
|
|
252
|
-
...Object.fromEntries(rateFields.map((field) => [field, profile[field] ?? 0])),
|
|
253
|
-
finding_subjects_by_code: Object.fromEntries(RELATIONSHIP_AUDIT_FINDING_CODES.map((code) => [
|
|
254
|
-
code,
|
|
255
|
-
findingSubjects[code] ?? affectedSubjectsByCode[code] ?? 0,
|
|
256
|
-
])),
|
|
257
|
-
};
|
|
258
|
-
}
|
|
259
|
-
/** Decode and cross-check optional graph-composition fields as one coherent unit. */
|
|
260
|
-
function decodeGraphComposition(edges, edgesByKind, edgeShareByKind, semanticEdgesValue, semanticEdgeShareValue) {
|
|
261
|
-
const values = [
|
|
262
|
-
edgeShareByKind,
|
|
263
|
-
semanticEdgesValue,
|
|
264
|
-
semanticEdgeShareValue,
|
|
265
|
-
];
|
|
266
|
-
const presentCount = values.filter((value) => value !== undefined).length;
|
|
267
|
-
if (presentCount === 0) {
|
|
268
|
-
return {
|
|
269
|
-
edge_share_by_kind: {},
|
|
270
|
-
semantic_edges: 0,
|
|
271
|
-
semantic_edge_share: 0,
|
|
272
|
-
};
|
|
273
|
-
}
|
|
274
|
-
if (presentCount !== values.length ||
|
|
275
|
-
!isUnitShareRecord(edgeShareByKind) ||
|
|
276
|
-
!isNonnegativeInteger(semanticEdgesValue) ||
|
|
277
|
-
!isUnitShare(semanticEdgeShareValue)) {
|
|
278
|
-
return undefined;
|
|
279
|
-
}
|
|
280
|
-
const edgeEntries = Object.entries(edgesByKind);
|
|
281
|
-
if (edgeEntries.reduce((sum, [, count]) => sum + count, 0) !== edges ||
|
|
282
|
-
Object.keys(edgeShareByKind).length !== edgeEntries.length ||
|
|
283
|
-
edgeEntries.some(([kind, count]) => edgeShareByKind[kind] !== (edges === 0 ? 0 : count / edges))) {
|
|
284
|
-
return undefined;
|
|
285
|
-
}
|
|
286
|
-
const semanticEdges = edgeEntries.reduce((sum, [kind, count]) => sum + (isSemanticContextKind(kind) ? count : 0), 0);
|
|
287
|
-
if (semanticEdgesValue !== semanticEdges ||
|
|
288
|
-
semanticEdgeShareValue !== (edges === 0 ? 0 : semanticEdges / edges)) {
|
|
289
|
-
return undefined;
|
|
290
|
-
}
|
|
291
|
-
return {
|
|
292
|
-
edge_share_by_kind: edgeShareByKind,
|
|
293
|
-
semantic_edges: semanticEdgesValue,
|
|
294
|
-
semantic_edge_share: semanticEdgeShareValue,
|
|
295
|
-
};
|
|
296
|
-
}
|
|
297
|
-
/** Decode one persisted audit census baseline, undefined on any defect. */
|
|
298
|
-
function decodeBaseline(raw) {
|
|
299
|
-
if (raw === null)
|
|
300
|
-
return undefined;
|
|
301
|
-
try {
|
|
302
|
-
const parsed = JSON.parse(raw);
|
|
303
|
-
if (!isRecord(parsed))
|
|
304
|
-
return undefined;
|
|
305
|
-
const snapshot = parsed;
|
|
306
|
-
const profile = snapshot.profile;
|
|
307
|
-
if (typeof snapshot.saved_at !== "string")
|
|
308
|
-
return undefined;
|
|
309
|
-
if (typeof snapshot.fingerprint !== "string")
|
|
310
|
-
return undefined;
|
|
311
|
-
const affectedSubjectsByCode = snapshot.affected_subjects_by_code;
|
|
312
|
-
if (!isNonnegativeCountRecord(affectedSubjectsByCode)) {
|
|
313
|
-
return undefined;
|
|
314
|
-
}
|
|
315
|
-
if (!isRecord(profile))
|
|
316
|
-
return undefined;
|
|
317
|
-
if (![
|
|
318
|
-
profile.nodes,
|
|
319
|
-
profile.edges,
|
|
320
|
-
profile.active_nodes,
|
|
321
|
-
profile.missing_nodes,
|
|
322
|
-
profile.isolated_active_nodes,
|
|
323
|
-
profile.degree_leq_one_active_nodes,
|
|
324
|
-
].every(isNonnegativeInteger)) {
|
|
325
|
-
return undefined;
|
|
326
|
-
}
|
|
327
|
-
if (!isNonnegativeCountRecord(profile.edges_by_kind))
|
|
328
|
-
return undefined;
|
|
329
|
-
if (!isOptionalValid(profile.coverage_by_type, isNonnegativeCoverageByTypeRecord)) {
|
|
330
|
-
return undefined;
|
|
331
|
-
}
|
|
332
|
-
const composition = decodeGraphComposition(profile.edges, profile.edges_by_kind, profile.edge_share_by_kind, profile.semantic_edges, profile.semantic_edge_share);
|
|
333
|
-
if (composition === undefined)
|
|
334
|
-
return undefined;
|
|
335
|
-
const structural = decodeStructuralProfile(profile, affectedSubjectsByCode, profile.nodes, profile.edges);
|
|
336
|
-
if (structural === undefined)
|
|
337
|
-
return undefined;
|
|
338
|
-
const { coverage_by_type = {} } = profile;
|
|
339
|
-
return {
|
|
340
|
-
...snapshot,
|
|
341
|
-
profile: {
|
|
342
|
-
...profile,
|
|
343
|
-
...composition,
|
|
344
|
-
...structural,
|
|
345
|
-
coverage_by_type,
|
|
346
|
-
},
|
|
347
|
-
};
|
|
348
|
-
}
|
|
349
|
-
catch {
|
|
350
|
-
return undefined;
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
/** Load the persisted audit census baseline when present and decodable. */
|
|
354
|
-
export async function loadGraphAuditBaseline(pmRoot) {
|
|
355
|
-
return decodeBaseline(await readFileIfExists(graphAuditBaselinePath(pmRoot)));
|
|
356
|
-
}
|
|
357
|
-
/** Atomically persist one audit census snapshot as the comparison baseline. */
|
|
358
|
-
export async function saveGraphAuditBaseline(pmRoot, snapshot) {
|
|
359
|
-
await writeFileAtomic(graphAuditBaselinePath(pmRoot), JSON.stringify(snapshot));
|
|
360
|
-
}
|
|
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]="19264e42-25fa-5c93-9b0d-3b18a1ab9783")}catch(e2){}})();import path from"node:path";import{readFileIfExists,removeFileIfExists,writeFileAtomic}from"../../core/fs/fs-utils.js";import{acquireLock}from"../../core/lock/lock.js";import{isSemanticContextKind}from"./governance.js";import{RELATIONSHIP_AUDIT_FINDING_CODES}from"./governance-contracts.js";import{validLifecycleSnapshot}from"./lifecycle-coverage.js";const GRAPH_DURABLE_CACHE_VERSION=2;const GRAPH_DURABLE_CACHE_MIN_ITEMS=500;const MAX_DURABLE_RESULTS=64;const DURABLE_GRAPH_CACHE_LOCK_ID="graph-durable-cache";function acquireDurableGraphCacheLock(pmRoot){return acquireLock(pmRoot,DURABLE_GRAPH_CACHE_LOCK_ID,30,`graph-cache:${process.pid}`,false,false,3e3)}function durableGraphCachePath(pmRoot){return path.join(pmRoot,"runtime","graph-cache.json")}function graphAuditBaselinePath(pmRoot){return path.join(pmRoot,"runtime","graph-audit-baseline.json")}function decodeEnvelope(raw){if(raw===null)return void 0;try{const parsed=JSON.parse(raw);if(typeof parsed!=="object"||parsed===null||parsed.version!==GRAPH_DURABLE_CACHE_VERSION||typeof parsed.fingerprint!=="string"||typeof parsed.saved_at!=="string"||typeof parsed.results!=="object"||parsed.results===null||Array.isArray(parsed.results))return void 0;return parsed}catch{return void 0}}async function openDurableGraphCache(pmRoot,fingerprint){const raw=await readFileIfExists(durableGraphCachePath(pmRoot));const envelope=decodeEnvelope(raw);const fresh=envelope?.fingerprint===fingerprint;return{exists:raw!==null,fresh,results:fresh?envelope.results:{}}}async function persistDurableGraphResult(pmRoot,fingerprint,view,queryKey,result){const release=await acquireDurableGraphCacheLock(pmRoot);try{const envelope=decodeEnvelope(await readFileIfExists(durableGraphCachePath(pmRoot)));const results=envelope?.fingerprint===fingerprint?envelope.results:{};delete results[queryKey];results[queryKey]=result;const keys=Object.keys(results);for(const stale of keys.slice(0,Math.max(0,keys.length-MAX_DURABLE_RESULTS)))delete results[stale];await writeFileAtomic(durableGraphCachePath(pmRoot),JSON.stringify({version:GRAPH_DURABLE_CACHE_VERSION,fingerprint,saved_at:new Date().toISOString(),results}));view.results=results}finally{await release()}}async function clearDurableGraphCache(pmRoot){const release=await acquireDurableGraphCacheLock(pmRoot);try{await removeFileIfExists(durableGraphCachePath(pmRoot))}finally{await release()}}async function durableGraphCacheStatus(pmRoot,fingerprint){const cachePath=durableGraphCachePath(pmRoot);const raw=await readFileIfExists(cachePath);const envelope=decodeEnvelope(raw);if(envelope===void 0)return{exists:raw!==null,fresh:false,entry_count:0};return{exists:true,fresh:envelope.fingerprint===fingerprint,entry_count:Object.keys(envelope.results).length,fingerprint:envelope.fingerprint.slice(0,12),saved_at:envelope.saved_at,bytes:Buffer.byteLength(raw,"utf8")}}function shouldPersistDurableGraphCache(itemCount,envelopeExists){return envelopeExists||itemCount>=GRAPH_DURABLE_CACHE_MIN_ITEMS}function isNonnegativeCountRecord(value){return isRecord(value)&&Object.values(value).every(isNonnegativeInteger)}function isRecord(value){return typeof value==="object"&&value!==null&&!Array.isArray(value)}function isNonnegativeInteger(value){return Number.isInteger(value)&&Number(value)>=0}function isUnitShare(value){return typeof value==="number"&&Number.isFinite(value)&&value>=0&&value<=1}function isOptionalValid(value,validate){return value===void 0||validate(value)}function isUnitShareRecord(value){return isRecord(value)&&Object.values(value).every(isUnitShare)}function isNonnegativeCoverageByTypeRecord(value){if(!isRecord(value))return false;return Object.values(value).every(entry=>isRecord(entry)&&[entry.active,entry.isolated,entry.degree_leq_one].every(isNonnegativeInteger))}function decodeInformativeProfile(profile,nodes,edges){const fields=["recorded_nodes","informative_edges","redundant_edges","ordering_contradiction_edges"];const presentCount=fields.filter(field=>profile[field]!==void 0).length;if(presentCount!==0&&presentCount!==fields.length)return void 0;if(!fields.every(field=>isOptionalValid(profile[field],isNonnegativeInteger)))return void 0;const decoded={recorded_nodes:profile.recorded_nodes??nodes,informative_edges:profile.informative_edges??edges,redundant_edges:profile.redundant_edges??0,ordering_contradiction_edges:profile.ordering_contradiction_edges??0};return decoded.recorded_nodes<=nodes&&decoded.informative_edges<=edges&&decoded.redundant_edges<=edges&&decoded.ordering_contradiction_edges<=edges?decoded:void 0}function hasValidStructuralFields(profile,countFields,rateFields){const introducedFields=[...countFields,...rateFields,"finding_subjects_by_code"];const presentCount=introducedFields.filter(field=>profile[field]!==void 0).length;if(presentCount!==0&&presentCount!==introducedFields.length)return false;return countFields.every(field=>isOptionalValid(profile[field],isNonnegativeInteger))&&rateFields.every(field=>isOptionalValid(profile[field],isNonnegativeInteger)&&(profile[field]===void 0||Number(profile[field])<=1e4))&&isOptionalValid(profile.finding_subjects_by_code,isNonnegativeCountRecord)}function decodeStructuralProfile(profile,affectedSubjectsByCode,nodes,edges){const informative=decodeInformativeProfile(profile,nodes,edges);if(informative===void 0)return void 0;const countFields=["articulation_points","bridge_edges","outcome_nodes","active_outcome_reachable_nodes","active_outcome_unreachable_nodes","terminal_nodes","terminal_outcome_reachable_nodes","terminal_outcome_unreachable_nodes","outcome_reachable_nodes","outcome_unreachable_nodes"];const rateFields=["active_outcome_reachability_basis_points","terminal_outcome_reachability_basis_points","outcome_reachability_basis_points"];if(!hasValidStructuralFields(profile,countFields,rateFields))return void 0;if(profile.edge_basis!==void 0&&profile.edge_basis!=="deduplicated_directed")return void 0;const findingSubjects=isNonnegativeCountRecord(profile.finding_subjects_by_code)?profile.finding_subjects_by_code:{};return{edge_basis:"deduplicated_directed",...informative,...Object.fromEntries(countFields.map(field=>[field,profile[field]??0])),...Object.fromEntries(rateFields.map(field=>[field,profile[field]??0])),finding_subjects_by_code:Object.fromEntries(RELATIONSHIP_AUDIT_FINDING_CODES.map(code=>[code,findingSubjects[code]??affectedSubjectsByCode[code]??0]))}}function decodeGraphComposition(edges,edgesByKind,edgeShareByKind,semanticEdgesValue,semanticEdgeShareValue){const values=[edgeShareByKind,semanticEdgesValue,semanticEdgeShareValue];const presentCount=values.filter(value=>value!==void 0).length;if(presentCount===0){return{edge_share_by_kind:{},semantic_edges:0,semantic_edge_share:0}}if(presentCount!==values.length||!isUnitShareRecord(edgeShareByKind)||!isNonnegativeInteger(semanticEdgesValue)||!isUnitShare(semanticEdgeShareValue)){return void 0}const edgeEntries=Object.entries(edgesByKind);if(edgeEntries.reduce((sum,[,count])=>sum+count,0)!==edges||Object.keys(edgeShareByKind).length!==edgeEntries.length||edgeEntries.some(([kind,count])=>edgeShareByKind[kind]!==(edges===0?0:count/edges))){return void 0}const semanticEdges=edgeEntries.reduce((sum,[kind,count])=>sum+(isSemanticContextKind(kind)?count:0),0);if(semanticEdgesValue!==semanticEdges||semanticEdgeShareValue!==(edges===0?0:semanticEdges/edges)){return void 0}return{edge_share_by_kind:edgeShareByKind,semantic_edges:semanticEdgesValue,semantic_edge_share:semanticEdgeShareValue}}function decodeBaseline(raw){if(raw===null)return void 0;try{const parsed=JSON.parse(raw);if(!isRecord(parsed))return void 0;const snapshot=parsed;const profile=snapshot.profile;if(typeof snapshot.saved_at!=="string")return void 0;if(typeof snapshot.fingerprint!=="string")return void 0;const affectedSubjectsByCode=snapshot.affected_subjects_by_code;if(!isNonnegativeCountRecord(affectedSubjectsByCode)){return void 0}if(!isRecord(profile)||!validLifecycleSnapshot(profile))return void 0;if(![profile.nodes,profile.edges,profile.active_nodes,profile.missing_nodes,profile.isolated_active_nodes,profile.degree_leq_one_active_nodes].every(isNonnegativeInteger)){return void 0}if(!isNonnegativeCountRecord(profile.edges_by_kind))return void 0;if(!isOptionalValid(profile.coverage_by_type,isNonnegativeCoverageByTypeRecord)){return void 0}const composition=decodeGraphComposition(profile.edges,profile.edges_by_kind,profile.edge_share_by_kind,profile.semantic_edges,profile.semantic_edge_share);if(composition===void 0)return void 0;const structural=decodeStructuralProfile(profile,affectedSubjectsByCode,profile.nodes,profile.edges);if(structural===void 0)return void 0;const{coverage_by_type={}}=profile;return{...snapshot,profile:{...profile,...composition,...structural,coverage_by_type}}}catch{return void 0}}async function loadGraphAuditBaseline(pmRoot){return decodeBaseline(await readFileIfExists(graphAuditBaselinePath(pmRoot)))}async function saveGraphAuditBaseline(pmRoot,snapshot){await writeFileAtomic(graphAuditBaselinePath(pmRoot),JSON.stringify(snapshot))}export{GRAPH_DURABLE_CACHE_MIN_ITEMS,GRAPH_DURABLE_CACHE_VERSION,clearDurableGraphCache,durableGraphCachePath,durableGraphCacheStatus,graphAuditBaselinePath,loadGraphAuditBaseline,openDurableGraphCache,persistDurableGraphResult,saveGraphAuditBaseline,shouldPersistDurableGraphCache};
|
|
361
2
|
//# sourceMappingURL=durable-cache.js.map
|
|
362
|
-
//# debugId=9e4aa41d-fca4-5e55-ab2b-d99f06d90ae2
|
|
@@ -1,35 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module sdk/graph/governance-contracts
|
|
3
|
-
*
|
|
4
|
-
* Shared, runtime-visible relationship-audit finding identifiers used by the
|
|
5
|
-
* live audit and backward-compatible durable baseline decoder. Keeping the
|
|
6
|
-
* tuple authoritative prevents the public type and persisted zero census from
|
|
7
|
-
* drifting when a finding family is added.
|
|
8
|
-
*/
|
|
9
|
-
/** Stable machine-readable relationship audit finding families. */
|
|
10
|
-
|
|
11
|
-
!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]="a8bc0ebd-e5e4-57f3-8e6c-417f9809eb72")}catch(e){}}();
|
|
12
|
-
export const RELATIONSHIP_AUDIT_FINDING_CODES = [
|
|
13
|
-
"missing_reference_active",
|
|
14
|
-
"missing_reference_terminal",
|
|
15
|
-
"legacy_no_blocker_sentinel",
|
|
16
|
-
"ordering_cycle",
|
|
17
|
-
"legacy_ordering_cycle",
|
|
18
|
-
"ordering_storage_contradiction",
|
|
19
|
-
"legacy_ordering_storage_contradiction",
|
|
20
|
-
"hierarchy_cycle",
|
|
21
|
-
"legacy_hierarchy_cycle",
|
|
22
|
-
"hierarchy_cardinality_violation",
|
|
23
|
-
"legacy_hierarchy_cardinality_violation",
|
|
24
|
-
"hierarchy_direction_violation",
|
|
25
|
-
"legacy_hierarchy_direction_violation",
|
|
26
|
-
"duplicate_edge",
|
|
27
|
-
"legacy_duplicate_edge",
|
|
28
|
-
"duplicate_dependency_row",
|
|
29
|
-
"legacy_duplicate_dependency_row",
|
|
30
|
-
"stale_lifecycle_block",
|
|
31
|
-
"isolated_active_node",
|
|
32
|
-
"sparse_active_node",
|
|
33
|
-
];
|
|
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]="896e1553-b127-532f-ac39-e0d47f29eebc")}catch(e2){}})();const RELATIONSHIP_AUDIT_FINDING_CODES=["missing_reference_active","missing_reference_terminal","legacy_no_blocker_sentinel","ordering_cycle","legacy_ordering_cycle","ordering_storage_contradiction","legacy_ordering_storage_contradiction","hierarchy_cycle","legacy_hierarchy_cycle","hierarchy_cardinality_violation","legacy_hierarchy_cardinality_violation","hierarchy_direction_violation","legacy_hierarchy_direction_violation","duplicate_edge","legacy_duplicate_edge","duplicate_dependency_row","legacy_duplicate_dependency_row","stale_lifecycle_block","isolated_active_node","sparse_active_node"];export{RELATIONSHIP_AUDIT_FINDING_CODES};
|
|
34
2
|
//# sourceMappingURL=governance-contracts.js.map
|
|
35
|
-
//# debugId=a8bc0ebd-e5e4-57f3-8e6c-417f9809eb72
|
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import type { RelationshipEdge, RelationshipOutcomeTraversal } from "../relationships.js";
|
|
16
16
|
import type { OrderingStorageContradiction, WorkspaceRelationshipAssembly } from "./assembly.js";
|
|
17
|
+
import { type RelationshipLifecycleCoverage } from "./lifecycle-coverage.js";
|
|
18
|
+
export type { RelationshipPopulationCoverage, RelationshipLifecycleCoverage } from "./lifecycle-coverage.js";
|
|
17
19
|
import { type RelationshipAuditFindingCode } from "./governance-contracts.js";
|
|
18
20
|
export type { RelationshipAuditFindingCode } from "./governance-contracts.js";
|
|
19
21
|
/** Severity ladder shared by every relationship audit finding. */
|
|
@@ -49,7 +51,11 @@ export interface RelationshipCoverageTypeProfile {
|
|
|
49
51
|
degree_leq_one: number;
|
|
50
52
|
}
|
|
51
53
|
/** Aggregate structural coverage metrics for one assembled workspace graph. */
|
|
52
|
-
export interface RelationshipCoverageProfile {
|
|
54
|
+
export interface RelationshipCoverageProfile extends RelationshipLifecycleCoverage {
|
|
55
|
+
/** Structural ordering acyclicity across all lifecycle states, independent of finding severity. */
|
|
56
|
+
ordering_acyclic: boolean;
|
|
57
|
+
/** Whether every ordering cycle is confined to terminal items. */
|
|
58
|
+
active_ordering_acyclic: boolean;
|
|
53
59
|
/** Total indexed nodes including materialized missing placeholders. */
|
|
54
60
|
nodes: number;
|
|
55
61
|
/** Tracker-recorded nodes, excluding synthesized missing and external placeholders. */
|
|
@@ -201,6 +207,12 @@ export interface RelationshipAuditDelta {
|
|
|
201
207
|
affected_subjects_by_code: Record<string, number>;
|
|
202
208
|
/** Signed structural profile deltas. */
|
|
203
209
|
profile: {
|
|
210
|
+
/** Whether both snapshots measured lifecycle census fields. */
|
|
211
|
+
lifecycle_comparable?: boolean;
|
|
212
|
+
/** Signed population deltas, absent for legacy baselines lacking this census. */
|
|
213
|
+
coverage_by_lifecycle?: RelationshipLifecycleCoverage["coverage_by_lifecycle"];
|
|
214
|
+
/** Signed raw-status population deltas, absent for legacy baselines. */
|
|
215
|
+
coverage_by_status?: RelationshipLifecycleCoverage["coverage_by_status"];
|
|
204
216
|
/** Node-count change including missing placeholders. */
|
|
205
217
|
nodes: number;
|
|
206
218
|
/** Tracker-recorded node-count change excluding synthesized placeholders. */
|