onto-mcp 0.3.0
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/.onto/authority/core-lens-registry.yaml +134 -0
- package/.onto/authority/core-lexicon.yaml +1562 -0
- package/.onto/authority/diagnostic-codes.yaml +94 -0
- package/.onto/domains/accounting/competency_qs.md +384 -0
- package/.onto/domains/accounting/concepts.md +186 -0
- package/.onto/domains/accounting/conciseness_rules.md +160 -0
- package/.onto/domains/accounting/dependency_rules.md +239 -0
- package/.onto/domains/accounting/domain_scope.md +213 -0
- package/.onto/domains/accounting/extension_cases.md +416 -0
- package/.onto/domains/accounting/logic_rules.md +226 -0
- package/.onto/domains/accounting/structure_spec.md +298 -0
- package/.onto/domains/accounting-kr/competency_qs.md +562 -0
- package/.onto/domains/accounting-kr/concepts.md +187 -0
- package/.onto/domains/accounting-kr/conciseness_rules.md +125 -0
- package/.onto/domains/accounting-kr/dependency_rules.md +93 -0
- package/.onto/domains/accounting-kr/domain_scope.md +140 -0
- package/.onto/domains/accounting-kr/extension_cases.md +343 -0
- package/.onto/domains/accounting-kr/logic_rules.md +160 -0
- package/.onto/domains/accounting-kr/structure_spec.md +85 -0
- package/.onto/domains/business/competency_qs.md +263 -0
- package/.onto/domains/business/concepts.md +200 -0
- package/.onto/domains/business/conciseness_rules.md +135 -0
- package/.onto/domains/business/dependency_rules.md +113 -0
- package/.onto/domains/business/domain_scope.md +240 -0
- package/.onto/domains/business/extension_cases.md +249 -0
- package/.onto/domains/business/logic_rules.md +134 -0
- package/.onto/domains/business/structure_spec.md +114 -0
- package/.onto/domains/finance/competency_qs.md +362 -0
- package/.onto/domains/finance/concepts.md +194 -0
- package/.onto/domains/finance/conciseness_rules.md +155 -0
- package/.onto/domains/finance/dependency_rules.md +171 -0
- package/.onto/domains/finance/domain_scope.md +215 -0
- package/.onto/domains/finance/extension_cases.md +350 -0
- package/.onto/domains/finance/logic_rules.md +191 -0
- package/.onto/domains/finance/structure_spec.md +182 -0
- package/.onto/domains/llm-native-development/competency_qs.md +430 -0
- package/.onto/domains/llm-native-development/concepts.md +242 -0
- package/.onto/domains/llm-native-development/conciseness_rules.md +163 -0
- package/.onto/domains/llm-native-development/dependency_rules.md +216 -0
- package/.onto/domains/llm-native-development/domain_scope.md +197 -0
- package/.onto/domains/llm-native-development/extension_cases.md +474 -0
- package/.onto/domains/llm-native-development/logic_rules.md +123 -0
- package/.onto/domains/llm-native-development/prompt_interface.md +49 -0
- package/.onto/domains/llm-native-development/structure_spec.md +245 -0
- package/.onto/domains/market-intelligence/competency_qs.md +274 -0
- package/.onto/domains/market-intelligence/concepts.md +233 -0
- package/.onto/domains/market-intelligence/conciseness_rules.md +165 -0
- package/.onto/domains/market-intelligence/dependency_rules.md +197 -0
- package/.onto/domains/market-intelligence/domain_scope.md +231 -0
- package/.onto/domains/market-intelligence/extension_cases.md +425 -0
- package/.onto/domains/market-intelligence/logic_rules.md +247 -0
- package/.onto/domains/market-intelligence/structure_spec.md +209 -0
- package/.onto/domains/ontology/competency_qs.md +394 -0
- package/.onto/domains/ontology/concepts.md +172 -0
- package/.onto/domains/ontology/conciseness_rules.md +134 -0
- package/.onto/domains/ontology/dependency_rules.md +125 -0
- package/.onto/domains/ontology/domain_scope.md +114 -0
- package/.onto/domains/ontology/extension_cases.md +501 -0
- package/.onto/domains/ontology/logic_rules.md +114 -0
- package/.onto/domains/ontology/problem_framing_profile.md +67 -0
- package/.onto/domains/ontology/structure_spec.md +115 -0
- package/.onto/domains/palantir-foundry/RESEARCH_NOTES.md +911 -0
- package/.onto/domains/palantir-foundry/competency_qs.md +191 -0
- package/.onto/domains/palantir-foundry/competitive_comparison.md +329 -0
- package/.onto/domains/palantir-foundry/concepts.md +197 -0
- package/.onto/domains/palantir-foundry/conciseness_rules.md +245 -0
- package/.onto/domains/palantir-foundry/dependency_rules.md +135 -0
- package/.onto/domains/palantir-foundry/domain_scope.md +395 -0
- package/.onto/domains/palantir-foundry/extension_cases.md +210 -0
- package/.onto/domains/palantir-foundry/logic_rules.md +172 -0
- package/.onto/domains/palantir-foundry/structure_spec.md +291 -0
- package/.onto/domains/software-engineering/competency_qs.md +538 -0
- package/.onto/domains/software-engineering/concepts.md +238 -0
- package/.onto/domains/software-engineering/conciseness_rules.md +167 -0
- package/.onto/domains/software-engineering/dependency_rules.md +216 -0
- package/.onto/domains/software-engineering/domain_scope.md +183 -0
- package/.onto/domains/software-engineering/extension_cases.md +551 -0
- package/.onto/domains/software-engineering/logic_rules.md +240 -0
- package/.onto/domains/software-engineering/problem_framing_profile.md +68 -0
- package/.onto/domains/software-engineering/structure_spec.md +185 -0
- package/.onto/domains/ui-design/competency_qs.md +567 -0
- package/.onto/domains/ui-design/concepts.md +194 -0
- package/.onto/domains/ui-design/conciseness_rules.md +190 -0
- package/.onto/domains/ui-design/dependency_rules.md +323 -0
- package/.onto/domains/ui-design/domain_scope.md +340 -0
- package/.onto/domains/ui-design/extension_cases.md +563 -0
- package/.onto/domains/ui-design/logic_rules.md +349 -0
- package/.onto/domains/ui-design/structure_spec.md +252 -0
- package/.onto/domains/visual-design/competency_qs.md +472 -0
- package/.onto/domains/visual-design/concepts.md +147 -0
- package/.onto/domains/visual-design/conciseness_rules.md +186 -0
- package/.onto/domains/visual-design/dependency_rules.md +282 -0
- package/.onto/domains/visual-design/domain_scope.md +290 -0
- package/.onto/domains/visual-design/extension_cases.md +480 -0
- package/.onto/domains/visual-design/logic_rules.md +232 -0
- package/.onto/domains/visual-design/structure_spec.md +213 -0
- package/.onto/principles/llm-native-development-guideline.md +401 -0
- package/.onto/principles/llm-runtime-interface-principles.md +665 -0
- package/.onto/principles/non-specialist-communication-guideline.md +74 -0
- package/.onto/principles/ontology-as-code-guideline.md +243 -0
- package/.onto/principles/ontology-as-code-naming-charter.md +130 -0
- package/.onto/principles/product-locality-principle.md +129 -0
- package/.onto/principles/productization-charter.md +569 -0
- package/.onto/processes/evolve/material-kind-adapter-contract.md +113 -0
- package/.onto/processes/reconstruct/reconstruct-boundary-contract.md +366 -0
- package/.onto/processes/reconstruct/source-profile-contract.md +107 -0
- package/.onto/processes/reconstruct/source-profiles/code.md +72 -0
- package/.onto/processes/reconstruct/source-profiles/database.md +74 -0
- package/.onto/processes/reconstruct/source-profiles/document.md +71 -0
- package/.onto/processes/reconstruct/source-profiles/spreadsheet.md +79 -0
- package/.onto/processes/review/binding-contract.md +270 -0
- package/.onto/processes/review/execution-preparation-artifacts.md +281 -0
- package/.onto/processes/review/interpretation-contract.md +245 -0
- package/.onto/processes/review/issue-stance-deliberation-contract.md +761 -0
- package/.onto/processes/review/lens-prompt-contract.md +402 -0
- package/.onto/processes/review/lens-registry.md +127 -0
- package/.onto/processes/review/pre-dispatch-contracts.md +428 -0
- package/.onto/processes/review/productized-live-path.md +398 -0
- package/.onto/processes/review/prompt-execution-runner-contract.md +187 -0
- package/.onto/processes/review/record-contract.md +427 -0
- package/.onto/processes/review/record-field-mapping.md +337 -0
- package/.onto/processes/review/review-context-manifest-contract.md +356 -0
- package/.onto/processes/review/review-execution-ux-contract.md +809 -0
- package/.onto/processes/review/review-target-profile-contract.md +259 -0
- package/.onto/processes/review/shared-phenomenon-contract.md +129 -0
- package/.onto/processes/review/synthesize-prompt-contract.md +343 -0
- package/.onto/processes/shared/target-material-kind-contract.md +198 -0
- package/.onto/roles/axiology.md +81 -0
- package/.onto/roles/conciseness.md +36 -0
- package/.onto/roles/coverage.md +34 -0
- package/.onto/roles/dependency.md +37 -0
- package/.onto/roles/evolution.md +35 -0
- package/.onto/roles/logic.md +104 -0
- package/.onto/roles/pragmatics.md +32 -0
- package/.onto/roles/semantics.md +36 -0
- package/.onto/roles/structure.md +33 -0
- package/.onto/roles/synthesize.md +92 -0
- package/AGENTS.md +240 -0
- package/CLAUDE.md +39 -0
- package/README.md +287 -0
- package/bin/onto +92 -0
- package/dist/cli.js +101 -0
- package/dist/core-api/reconstruct-api.js +222 -0
- package/dist/core-api/review-api.js +1271 -0
- package/dist/core-runtime/cli/assemble-review-record.js +431 -0
- package/dist/core-runtime/cli/bootstrap-review-binding.js +186 -0
- package/dist/core-runtime/cli/codex-nested-dispatch.js +226 -0
- package/dist/core-runtime/cli/codex-nested-dispatch.test.js +390 -0
- package/dist/core-runtime/cli/codex-nested-teamlead-executor.js +464 -0
- package/dist/core-runtime/cli/codex-nested-teamlead-executor.test.js +335 -0
- package/dist/core-runtime/cli/codex-review-unit-executor.js +228 -0
- package/dist/core-runtime/cli/complete-review-session.js +64 -0
- package/dist/core-runtime/cli/complexity-assessment.js +153 -0
- package/dist/core-runtime/cli/coordinator-helpers.js +583 -0
- package/dist/core-runtime/cli/coordinator-state-machine-deliberation.test.js +167 -0
- package/dist/core-runtime/cli/coordinator-state-machine.js +794 -0
- package/dist/core-runtime/cli/e2e-codex-multi-agent-fixes.test.js +615 -0
- package/dist/core-runtime/cli/e2e-start-review-session.test.js +312 -0
- package/dist/core-runtime/cli/health.js +44 -0
- package/dist/core-runtime/cli/inline-http-review-unit-executor.js +656 -0
- package/dist/core-runtime/cli/inline-http-review-unit-executor.test.js +567 -0
- package/dist/core-runtime/cli/materialize-review-execution-preparation.js +104 -0
- package/dist/core-runtime/cli/materialize-review-prompt-packets.js +952 -0
- package/dist/core-runtime/cli/migrate-session-roots.js +118 -0
- package/dist/core-runtime/cli/mock-review-unit-executor.js +285 -0
- package/dist/core-runtime/cli/onto-tools.js +369 -0
- package/dist/core-runtime/cli/prepare-review-session.js +272 -0
- package/dist/core-runtime/cli/render-review-final-output.js +350 -0
- package/dist/core-runtime/cli/repo-layout-migration-replace.smoke.test.js +106 -0
- package/dist/core-runtime/cli/review-invoke-auto-resolution.test.js +268 -0
- package/dist/core-runtime/cli/review-invoke-coordinator-topology.test.js +136 -0
- package/dist/core-runtime/cli/review-invoke-resolver-caching.test.js +201 -0
- package/dist/core-runtime/cli/review-invoke-topology-dispatch.test.js +192 -0
- package/dist/core-runtime/cli/review-invoke.js +2030 -0
- package/dist/core-runtime/cli/run-review-prompt-execution.js +2152 -0
- package/dist/core-runtime/cli/session-root-guard.js +168 -0
- package/dist/core-runtime/cli/spawn-watcher.js +173 -0
- package/dist/core-runtime/cli/spawn-watcher.test.js +457 -0
- package/dist/core-runtime/cli/start-review-session.js +68 -0
- package/dist/core-runtime/cli/strip-wrapping-code-fence.js +56 -0
- package/dist/core-runtime/cli/strip-wrapping-code-fence.test.js +79 -0
- package/dist/core-runtime/cli/teamcreate-lens-deliberation-executor.js +412 -0
- package/dist/core-runtime/cli/teamcreate-lens-deliberation-executor.test.js +351 -0
- package/dist/core-runtime/cli/topology-executor-mapping.js +139 -0
- package/dist/core-runtime/cli/topology-executor-mapping.test.js +173 -0
- package/dist/core-runtime/cli/write-review-interpretation.js +81 -0
- package/dist/core-runtime/config/onto-config-cli.js +278 -0
- package/dist/core-runtime/config/onto-config-key-path.js +288 -0
- package/dist/core-runtime/config/onto-config-key-path.test.js +195 -0
- package/dist/core-runtime/config/onto-config-preview.js +108 -0
- package/dist/core-runtime/config/onto-config-preview.test.js +132 -0
- package/dist/core-runtime/discovery/config-chain.js +118 -0
- package/dist/core-runtime/discovery/config-chain.test.js +103 -0
- package/dist/core-runtime/discovery/config-profile.js +199 -0
- package/dist/core-runtime/discovery/config-profile.test.js +233 -0
- package/dist/core-runtime/discovery/host-detection.js +33 -0
- package/dist/core-runtime/discovery/host-detection.test.js +186 -0
- package/dist/core-runtime/discovery/installation-paths.js +21 -0
- package/dist/core-runtime/discovery/installation-paths.test.js +65 -0
- package/dist/core-runtime/discovery/lens-registry.js +60 -0
- package/dist/core-runtime/discovery/lens-registry.test.js +81 -0
- package/dist/core-runtime/discovery/onto-home.js +71 -0
- package/dist/core-runtime/discovery/path-normalization.js +28 -0
- package/dist/core-runtime/discovery/path-normalization.test.js +22 -0
- package/dist/core-runtime/discovery/plugin-path.js +72 -0
- package/dist/core-runtime/discovery/plugin-path.test.js +95 -0
- package/dist/core-runtime/discovery/project-root.js +47 -0
- package/dist/core-runtime/discovery/settings-chain.js +353 -0
- package/dist/core-runtime/discovery/walk-up.js +17 -0
- package/dist/core-runtime/evolve/adapters/code-product/compile/compile-defense.js +344 -0
- package/dist/core-runtime/evolve/adapters/code-product/compile/compile-defense.test.js +915 -0
- package/dist/core-runtime/evolve/adapters/code-product/compile/compile.js +564 -0
- package/dist/core-runtime/evolve/adapters/code-product/compile/compile.test.js +708 -0
- package/dist/core-runtime/evolve/adapters/code-product/parsers/brief-parser.js +165 -0
- package/dist/core-runtime/evolve/adapters/code-product/parsers/brief-parser.test.js +227 -0
- package/dist/core-runtime/evolve/adapters/code-product/validators/validate.js +59 -0
- package/dist/core-runtime/evolve/adapters/code-product/validators/validate.test.js +205 -0
- package/dist/core-runtime/evolve/adapters/methodology/adapter.js +16 -0
- package/dist/core-runtime/evolve/adapters/methodology/adapter.test.js +9 -0
- package/dist/core-runtime/evolve/adapters/methodology/perspectives/authority-consistency.js +298 -0
- package/dist/core-runtime/evolve/adapters/methodology/perspectives/authority-consistency.test.js +70 -0
- package/dist/core-runtime/evolve/adapters/methodology/scope-types/process.js +46 -0
- package/dist/core-runtime/evolve/adapters/methodology/scope-types/process.test.js +73 -0
- package/dist/core-runtime/evolve/adapters/registry.js +47 -0
- package/dist/core-runtime/evolve/adapters/registry.test.js +67 -0
- package/dist/core-runtime/evolve/cli.js +256 -0
- package/dist/core-runtime/evolve/commands/align.js +194 -0
- package/dist/core-runtime/evolve/commands/align.test.js +82 -0
- package/dist/core-runtime/evolve/commands/apply.js +161 -0
- package/dist/core-runtime/evolve/commands/apply.test.js +138 -0
- package/dist/core-runtime/evolve/commands/close.js +39 -0
- package/dist/core-runtime/evolve/commands/close.test.js +99 -0
- package/dist/core-runtime/evolve/commands/defer.js +40 -0
- package/dist/core-runtime/evolve/commands/defer.test.js +134 -0
- package/dist/core-runtime/evolve/commands/draft.js +323 -0
- package/dist/core-runtime/evolve/commands/draft.test.js +178 -0
- package/dist/core-runtime/evolve/commands/e2e-evolve-full-cycle.test.js +208 -0
- package/dist/core-runtime/evolve/commands/error-messages.js +125 -0
- package/dist/core-runtime/evolve/commands/error-messages.test.js +167 -0
- package/dist/core-runtime/evolve/commands/propose-align.js +222 -0
- package/dist/core-runtime/evolve/commands/propose-align.test.js +136 -0
- package/dist/core-runtime/evolve/commands/reconstruct.js +330 -0
- package/dist/core-runtime/evolve/commands/reconstruct.test.js +278 -0
- package/dist/core-runtime/evolve/commands/shared.js +22 -0
- package/dist/core-runtime/evolve/commands/stale-check.js +103 -0
- package/dist/core-runtime/evolve/commands/stale-check.test.js +84 -0
- package/dist/core-runtime/evolve/commands/start.js +887 -0
- package/dist/core-runtime/evolve/commands/start.test.js +396 -0
- package/dist/core-runtime/evolve/config/project-config.js +99 -0
- package/dist/core-runtime/evolve/config/project-config.test.js +170 -0
- package/dist/core-runtime/evolve/renderers/align-packet.js +280 -0
- package/dist/core-runtime/evolve/renderers/align-packet.test.js +332 -0
- package/dist/core-runtime/evolve/renderers/draft-packet.js +303 -0
- package/dist/core-runtime/evolve/renderers/draft-packet.test.js +377 -0
- package/dist/core-runtime/evolve/renderers/format.js +5 -0
- package/dist/core-runtime/evolve/renderers/scope-md.js +237 -0
- package/dist/core-runtime/evolve/renderers/scope-md.test.js +306 -0
- package/dist/core-runtime/govern/cli.js +369 -0
- package/dist/core-runtime/govern/cli.test.js +314 -0
- package/dist/core-runtime/govern/drift-engine.js +103 -0
- package/dist/core-runtime/govern/drift-engine.test.js +319 -0
- package/dist/core-runtime/govern/promote-principle.js +206 -0
- package/dist/core-runtime/govern/promote-principle.test.js +368 -0
- package/dist/core-runtime/govern/queue.js +81 -0
- package/dist/core-runtime/govern/types.js +16 -0
- package/dist/core-runtime/install/cli.js +530 -0
- package/dist/core-runtime/install/detect.js +128 -0
- package/dist/core-runtime/install/detect.test.js +155 -0
- package/dist/core-runtime/install/gitignore-update.js +74 -0
- package/dist/core-runtime/install/gitignore-update.test.js +64 -0
- package/dist/core-runtime/install/install-integration.test.js +373 -0
- package/dist/core-runtime/install/prompts.js +389 -0
- package/dist/core-runtime/install/prompts.test.js +293 -0
- package/dist/core-runtime/install/types.js +26 -0
- package/dist/core-runtime/install/validation.js +295 -0
- package/dist/core-runtime/install/validation.test.js +313 -0
- package/dist/core-runtime/install/writer.js +254 -0
- package/dist/core-runtime/install/writer.test.js +218 -0
- package/dist/core-runtime/learning/extractor.js +461 -0
- package/dist/core-runtime/learning/feedback.js +179 -0
- package/dist/core-runtime/learning/health-report.js +165 -0
- package/dist/core-runtime/learning/health-report.test.js +169 -0
- package/dist/core-runtime/learning/loader.js +388 -0
- package/dist/core-runtime/learning/loader.test.js +102 -0
- package/dist/core-runtime/learning/promote/apply-state.js +240 -0
- package/dist/core-runtime/learning/promote/audit-obligation.js +195 -0
- package/dist/core-runtime/learning/promote/collector.js +432 -0
- package/dist/core-runtime/learning/promote/degraded-state.js +125 -0
- package/dist/core-runtime/learning/promote/domain-doc-proposer.js +166 -0
- package/dist/core-runtime/learning/promote/e2e-promote.test.js +6385 -0
- package/dist/core-runtime/learning/promote/health-snapshot.js +150 -0
- package/dist/core-runtime/learning/promote/insight-reclassifier.js +544 -0
- package/dist/core-runtime/learning/promote/judgment-auditor.js +517 -0
- package/dist/core-runtime/learning/promote/panel-reviewer.js +1158 -0
- package/dist/core-runtime/learning/promote/promote-executor.js +1675 -0
- package/dist/core-runtime/learning/promote/promoter.js +307 -0
- package/dist/core-runtime/learning/promote/retirement.js +122 -0
- package/dist/core-runtime/learning/promote/types.js +23 -0
- package/dist/core-runtime/learning/prompt-sections.js +51 -0
- package/dist/core-runtime/learning/shared/artifact-registry-init.js +45 -0
- package/dist/core-runtime/learning/shared/artifact-registry.js +254 -0
- package/dist/core-runtime/learning/shared/audit-obligation-kernel.js +73 -0
- package/dist/core-runtime/learning/shared/audit-state.js +99 -0
- package/dist/core-runtime/learning/shared/duplicate-check.js +28 -0
- package/dist/core-runtime/learning/shared/llm-caller.js +831 -0
- package/dist/core-runtime/learning/shared/llm-caller.test.js +601 -0
- package/dist/core-runtime/learning/shared/llm-tool-loop.js +393 -0
- package/dist/core-runtime/learning/shared/mode.js +25 -0
- package/dist/core-runtime/learning/shared/paths.js +84 -0
- package/dist/core-runtime/learning/shared/paths.test.js +79 -0
- package/dist/core-runtime/learning/shared/patterns.js +37 -0
- package/dist/core-runtime/learning/shared/recoverability.js +355 -0
- package/dist/core-runtime/learning/shared/recovery-context.js +374 -0
- package/dist/core-runtime/learning/shared/scope.js +1 -0
- package/dist/core-runtime/learning/shared/semantic-classifier.js +94 -0
- package/dist/core-runtime/learning/shared/specs/apply-execution-state-spec.js +42 -0
- package/dist/core-runtime/learning/shared/specs/audit-state-spec.js +37 -0
- package/dist/core-runtime/learning/shared/specs/backup-metadata-spec.js +39 -0
- package/dist/core-runtime/learning/shared/specs/emergency-log-spec.js +41 -0
- package/dist/core-runtime/learning/shared/specs/layout-version-spec.js +38 -0
- package/dist/core-runtime/learning/shared/specs/promote-decisions-spec.js +43 -0
- package/dist/core-runtime/learning/shared/specs/promote-report-spec.js +113 -0
- package/dist/core-runtime/learning/shared/specs/prune-log-spec.js +36 -0
- package/dist/core-runtime/learning/shared/specs/recovery-resolution-spec.js +48 -0
- package/dist/core-runtime/learning/shared/specs/restore-manifest-spec.js +43 -0
- package/dist/core-runtime/learning/shared/specs/spec-helpers.js +64 -0
- package/dist/core-runtime/learning/usage-tracker.js +190 -0
- package/dist/core-runtime/learning/usage-tracker.test.js +176 -0
- package/dist/core-runtime/llm/llm-caller.js +649 -0
- package/dist/core-runtime/llm/llm-tool-loop.js +401 -0
- package/dist/core-runtime/llm/model-switcher.js +62 -0
- package/dist/core-runtime/logger.js +22 -0
- package/dist/core-runtime/onboard/detect-review-axes.js +122 -0
- package/dist/core-runtime/onboard/detect-review-axes.test.js +127 -0
- package/dist/core-runtime/onboard/write-review-block.js +188 -0
- package/dist/core-runtime/onboard/write-review-block.test.js +240 -0
- package/dist/core-runtime/readers/brownfield-builder.js +150 -0
- package/dist/core-runtime/readers/brownfield-builder.test.js +136 -0
- package/dist/core-runtime/readers/code-chunk-collector.js +53 -0
- package/dist/core-runtime/readers/code-chunk-collector.test.js +136 -0
- package/dist/core-runtime/readers/file-utils.js +240 -0
- package/dist/core-runtime/readers/file-utils.test.js +146 -0
- package/dist/core-runtime/readers/lexicon-citation-check.js +93 -0
- package/dist/core-runtime/readers/lexicon-citation-check.test.js +77 -0
- package/dist/core-runtime/readers/mcp-figma.js +30 -0
- package/dist/core-runtime/readers/mcp-figma.test.js +82 -0
- package/dist/core-runtime/readers/mcp-generic.js +31 -0
- package/dist/core-runtime/readers/mcp-generic.test.js +76 -0
- package/dist/core-runtime/readers/ontology-index.js +148 -0
- package/dist/core-runtime/readers/ontology-index.test.js +245 -0
- package/dist/core-runtime/readers/ontology-query.js +168 -0
- package/dist/core-runtime/readers/ontology-query.test.js +311 -0
- package/dist/core-runtime/readers/ontology-resolve.js +48 -0
- package/dist/core-runtime/readers/ontology-resolve.test.js +48 -0
- package/dist/core-runtime/readers/patterns/index.js +7 -0
- package/dist/core-runtime/readers/review-log.js +213 -0
- package/dist/core-runtime/readers/review-log.test.js +313 -0
- package/dist/core-runtime/readers/scan-local.js +102 -0
- package/dist/core-runtime/readers/scan-local.test.js +102 -0
- package/dist/core-runtime/readers/scan-tarball.js +121 -0
- package/dist/core-runtime/readers/scan-tarball.test.js +283 -0
- package/dist/core-runtime/readers/scan-vault.js +34 -0
- package/dist/core-runtime/readers/scan-vault.test.js +81 -0
- package/dist/core-runtime/readers/types.js +42 -0
- package/dist/core-runtime/readers/types.test.js +94 -0
- package/dist/core-runtime/readers/viewpoint-collectors.js +229 -0
- package/dist/core-runtime/reconstruct/artifact-types.js +1 -0
- package/dist/core-runtime/reconstruct/directive-validation.js +123 -0
- package/dist/core-runtime/reconstruct/materialize-preparation.js +251 -0
- package/dist/core-runtime/reconstruct/record.js +198 -0
- package/dist/core-runtime/reconstruct/run.js +578 -0
- package/dist/core-runtime/reconstruct/seed-candidate-validation.js +356 -0
- package/dist/core-runtime/reconstruct/source-observations.js +62 -0
- package/dist/core-runtime/reconstruct/source-profiles.js +73 -0
- package/dist/core-runtime/release-channel/release-channel.js +90 -0
- package/dist/core-runtime/review/artifact-types.js +13 -0
- package/dist/core-runtime/review/citation-audit.js +204 -0
- package/dist/core-runtime/review/citation-audit.test.js +165 -0
- package/dist/core-runtime/review/controlled-lens-deliberation.js +125 -0
- package/dist/core-runtime/review/execution-plan-resolver.js +247 -0
- package/dist/core-runtime/review/execution-plan-resolver.test.js +243 -0
- package/dist/core-runtime/review/execution-topology-resolver-axis-first.test.js +246 -0
- package/dist/core-runtime/review/execution-topology-resolver.js +401 -0
- package/dist/core-runtime/review/execution-topology-resolver.test.js +315 -0
- package/dist/core-runtime/review/failure-records.js +57 -0
- package/dist/core-runtime/review/inline-context-embedder.js +141 -0
- package/dist/core-runtime/review/inline-context-embedder.test.js +154 -0
- package/dist/core-runtime/review/issue-artifact-runtime.js +859 -0
- package/dist/core-runtime/review/legacy-mode-policy.js +88 -0
- package/dist/core-runtime/review/lens-completion-policy.js +17 -0
- package/dist/core-runtime/review/materializers-effort-persist.test.js +79 -0
- package/dist/core-runtime/review/materializers.js +963 -0
- package/dist/core-runtime/review/ontology-path-classifier.js +179 -0
- package/dist/core-runtime/review/ontology-path-classifier.test.js +216 -0
- package/dist/core-runtime/review/packet-boundary-policy.js +215 -0
- package/dist/core-runtime/review/packet-boundary-policy.test.js +107 -0
- package/dist/core-runtime/review/participating-lens-paths.js +61 -0
- package/dist/core-runtime/review/participating-lens-paths.test.js +73 -0
- package/dist/core-runtime/review/review-artifact-utils.js +287 -0
- package/dist/core-runtime/review/review-config-legacy-translate.js +244 -0
- package/dist/core-runtime/review/review-config-legacy-translate.test.js +161 -0
- package/dist/core-runtime/review/review-config-validator.js +289 -0
- package/dist/core-runtime/review/review-config-validator.test.js +236 -0
- package/dist/core-runtime/review/review-execution-profile.js +193 -0
- package/dist/core-runtime/review/review-execution-route.js +52 -0
- package/dist/core-runtime/review/review-progress-contract.js +123 -0
- package/dist/core-runtime/review/review-record-validation.js +251 -0
- package/dist/core-runtime/review/review-result-classification.js +379 -0
- package/dist/core-runtime/review/review-state-machine.js +39 -0
- package/dist/core-runtime/review/route-visibility.js +125 -0
- package/dist/core-runtime/review/shape-pipeline-audit.test.js +311 -0
- package/dist/core-runtime/review/shape-to-topology-id.js +117 -0
- package/dist/core-runtime/review/shape-to-topology-id.test.js +132 -0
- package/dist/core-runtime/review/topology-shape-derivation.js +155 -0
- package/dist/core-runtime/review/topology-shape-derivation.test.js +195 -0
- package/dist/core-runtime/scope-runtime/constants.js +12 -0
- package/dist/core-runtime/scope-runtime/constraint-pool.js +166 -0
- package/dist/core-runtime/scope-runtime/constraint-pool.test.js +674 -0
- package/dist/core-runtime/scope-runtime/domain-validation-log.js +135 -0
- package/dist/core-runtime/scope-runtime/domain-validation-log.test.js +156 -0
- package/dist/core-runtime/scope-runtime/eval-persistence.js +65 -0
- package/dist/core-runtime/scope-runtime/eval-persistence.test.js +84 -0
- package/dist/core-runtime/scope-runtime/event-pipeline.js +64 -0
- package/dist/core-runtime/scope-runtime/event-pipeline.test.js +450 -0
- package/dist/core-runtime/scope-runtime/event-store.js +39 -0
- package/dist/core-runtime/scope-runtime/event-store.test.js +95 -0
- package/dist/core-runtime/scope-runtime/gate-guard.js +348 -0
- package/dist/core-runtime/scope-runtime/gate-guard.test.js +1047 -0
- package/dist/core-runtime/scope-runtime/hash.js +4 -0
- package/dist/core-runtime/scope-runtime/hash.test.js +33 -0
- package/dist/core-runtime/scope-runtime/id.js +4 -0
- package/dist/core-runtime/scope-runtime/id.test.js +17 -0
- package/dist/core-runtime/scope-runtime/reducer.js +297 -0
- package/dist/core-runtime/scope-runtime/reducer.test.js +759 -0
- package/dist/core-runtime/scope-runtime/scope-manager.js +161 -0
- package/dist/core-runtime/scope-runtime/state-machine.js +309 -0
- package/dist/core-runtime/scope-runtime/state-machine.test.js +704 -0
- package/dist/core-runtime/scope-runtime/types.js +116 -0
- package/dist/core-runtime/scope-runtime/types.test.js +69 -0
- package/dist/core-runtime/target-material-kind.js +256 -0
- package/dist/core-runtime/translate/render-for-user.js +169 -0
- package/dist/core-runtime/translate/render-for-user.test.js +122 -0
- package/dist/mcp/server.js +1011 -0
- package/dist/mcp/tool-schemas.js +93 -0
- package/dist/providers/capability-contract.js +1 -0
- package/package.json +68 -0
- package/settings.example.json +33 -0
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
import { resolveTransition } from "./state-machine.js";
|
|
2
|
+
import { MAX_COMPILE_RETRIES, MAX_EXPLORATION_ROUNDS } from "./constants.js";
|
|
3
|
+
import { findConstraint, isConstraintsResolved } from "./constraint-pool.js";
|
|
4
|
+
// ─── Actor validation mapping ───
|
|
5
|
+
/**
|
|
6
|
+
* Allowed actors per event type.
|
|
7
|
+
*
|
|
8
|
+
* Events not listed here are allowed for ALL actors (gradual adoption).
|
|
9
|
+
* This mapping encodes the intended actor constraints:
|
|
10
|
+
* - user: human PO actions (scope creation, locking, decisions)
|
|
11
|
+
* - system: automated pipeline actions (grounding, compile, surface generation)
|
|
12
|
+
* - agent: AI-driven actions (apply, validation, constraint discovery/decisions)
|
|
13
|
+
*/
|
|
14
|
+
export const ACTOR_MAPPING = {
|
|
15
|
+
// User-initiated events
|
|
16
|
+
"scope.created": new Set(["user"]),
|
|
17
|
+
"scope.closed": new Set(["user"]),
|
|
18
|
+
"surface.confirmed": new Set(["user"]),
|
|
19
|
+
"align.locked": new Set(["user"]),
|
|
20
|
+
// User or agent decisions
|
|
21
|
+
"constraint.decision_recorded": new Set(["user", "agent"]),
|
|
22
|
+
"constraint.clarify_resolved": new Set(["user", "agent"]),
|
|
23
|
+
// System-initiated pipeline events (user allowed for gradual adoption)
|
|
24
|
+
"grounding.started": new Set(["system", "user"]),
|
|
25
|
+
"grounding.completed": new Set(["system", "user"]),
|
|
26
|
+
"compile.started": new Set(["system", "user"]),
|
|
27
|
+
"compile.completed": new Set(["system", "user"]),
|
|
28
|
+
"surface.generated": new Set(["system", "user"]),
|
|
29
|
+
// Agent-driven actions (user allowed for gradual adoption)
|
|
30
|
+
"apply.started": new Set(["agent", "user"]),
|
|
31
|
+
"apply.completed": new Set(["agent", "user"]),
|
|
32
|
+
"validation.started": new Set(["agent", "user"]),
|
|
33
|
+
"validation.completed": new Set(["agent", "user"]),
|
|
34
|
+
// Mixed actors
|
|
35
|
+
"constraint.discovered": new Set(["system", "agent", "user"]),
|
|
36
|
+
"align.proposed": new Set(["system", "user"]),
|
|
37
|
+
"align.revised": new Set(["system", "user"]),
|
|
38
|
+
"exploration.started": new Set(["agent", "system"]),
|
|
39
|
+
"exploration.round_completed": new Set(["agent", "system"]),
|
|
40
|
+
"exploration.phase_transitioned": new Set(["agent", "system"]),
|
|
41
|
+
};
|
|
42
|
+
// ─── Events that reference a constraint_id ───
|
|
43
|
+
const CONSTRAINT_REF_EVENTS = new Set([
|
|
44
|
+
"constraint.decision_recorded",
|
|
45
|
+
"constraint.clarify_requested",
|
|
46
|
+
"constraint.clarify_resolved",
|
|
47
|
+
"constraint.invalidated",
|
|
48
|
+
"surface.change_required",
|
|
49
|
+
]);
|
|
50
|
+
// ─── Events blocked during convergence ───
|
|
51
|
+
const CONVERGENCE_BLOCKED_EVENTS = new Set([
|
|
52
|
+
"align.revised",
|
|
53
|
+
"surface.revision_applied",
|
|
54
|
+
]);
|
|
55
|
+
// ─── Main validation function ───
|
|
56
|
+
/**
|
|
57
|
+
* Validate an event before appending to the event store.
|
|
58
|
+
*
|
|
59
|
+
* Checks rules in order:
|
|
60
|
+
* 1. State transition authorization (state machine matrix)
|
|
61
|
+
* 2. Referential integrity (constraint_id existence)
|
|
62
|
+
* 3. Required override validation (rationale required)
|
|
63
|
+
* 3b. Required constraint invalidation protection [GC-017]
|
|
64
|
+
* 4. Convergence blocking (revise blocked after convergence.blocked)
|
|
65
|
+
* 5a. Apply gate (apply_enabled in config)
|
|
66
|
+
* 5c. Pre-Apply Review gate (pre_apply.review_completed required before apply)
|
|
67
|
+
* 5b. Compile retry limit (compile.started blocked after 3 gap_found cycles)
|
|
68
|
+
*
|
|
69
|
+
* On success, returns the determined next_state (resolving conditional targets).
|
|
70
|
+
* On failure, returns the reason for rejection.
|
|
71
|
+
*/
|
|
72
|
+
export function validateEvent(state, newEvent, options) {
|
|
73
|
+
const eventType = newEvent.type;
|
|
74
|
+
// ── Special case: scope.created is a bootstrap event ──
|
|
75
|
+
// Not in the state machine matrix. Allowed only when no events exist yet.
|
|
76
|
+
if (eventType === "scope.created") {
|
|
77
|
+
if (state.latest_revision === 0) {
|
|
78
|
+
return { allowed: true, next_state: "draft" };
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
allowed: false,
|
|
82
|
+
reason: `scope.created is only allowed as the first event (current revision: ${state.latest_revision})`,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
// ── Rule 0: Actor validation ──
|
|
86
|
+
const allowedActors = ACTOR_MAPPING[eventType];
|
|
87
|
+
if (allowedActors && !allowedActors.has(newEvent.actor)) {
|
|
88
|
+
return {
|
|
89
|
+
allowed: false,
|
|
90
|
+
reason: `Actor denied: "${newEvent.actor}" is not allowed for "${eventType}". Allowed: ${[...allowedActors].join(", ")}`,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
// ── Rule 1: State transition authorization ──
|
|
94
|
+
const outcome = resolveTransition(state.current_state, eventType);
|
|
95
|
+
if (!outcome.allowed) {
|
|
96
|
+
return {
|
|
97
|
+
allowed: false,
|
|
98
|
+
reason: `Transition denied: "${state.current_state}" does not allow "${eventType}"`,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
// ── Rule 2: Referential integrity ──
|
|
102
|
+
if (CONSTRAINT_REF_EVENTS.has(eventType)) {
|
|
103
|
+
const constraintId = extractConstraintId(newEvent);
|
|
104
|
+
if (constraintId !== undefined) {
|
|
105
|
+
const entry = findConstraint(state.constraint_pool, constraintId);
|
|
106
|
+
if (!entry) {
|
|
107
|
+
return {
|
|
108
|
+
allowed: false,
|
|
109
|
+
reason: `Referential integrity: constraint_id "${constraintId}" not found in pool`,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
// ── Rule 3: Required override validation ──
|
|
113
|
+
if (eventType === "constraint.decision_recorded" ||
|
|
114
|
+
eventType === "constraint.clarify_resolved") {
|
|
115
|
+
const decision = newEvent.payload.decision;
|
|
116
|
+
if (entry.severity === "required" &&
|
|
117
|
+
decision === "override") {
|
|
118
|
+
const rationale = newEvent.payload.rationale;
|
|
119
|
+
if (!rationale || rationale.trim() === "") {
|
|
120
|
+
return {
|
|
121
|
+
allowed: false,
|
|
122
|
+
reason: `Required constraint "${constraintId}" with override decision requires non-empty rationale`,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// ── Rule 3b: Required constraint invalidation protection [GC-017] ──
|
|
128
|
+
if (eventType === "constraint.invalidated" &&
|
|
129
|
+
entry.severity === "required" &&
|
|
130
|
+
newEvent.actor === "system") {
|
|
131
|
+
return {
|
|
132
|
+
allowed: false,
|
|
133
|
+
reason: `Required constraint "${constraintId}" cannot be invalidated by system alone. User confirmation is required.`,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// ── Rule 4: Convergence blocking ──
|
|
139
|
+
if (state.convergence_blocked &&
|
|
140
|
+
CONVERGENCE_BLOCKED_EVENTS.has(eventType)) {
|
|
141
|
+
return {
|
|
142
|
+
allowed: false,
|
|
143
|
+
reason: `Convergence blocked: cannot "${eventType}" until convergence.action_taken is recorded`,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
// ── Rule 5a: Apply gate — requires apply_enabled in .sprint-kit.yaml ──
|
|
147
|
+
if (eventType === "apply.started" && options?.apply_enabled !== true) {
|
|
148
|
+
return {
|
|
149
|
+
allowed: false,
|
|
150
|
+
reason: "Apply gate: apply 단계를 실행하려면 .sprint-kit.yaml에 apply_enabled: true를 추가하세요.",
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
// ── Rule 5c: Pre-Apply Review gate — apply requires pre_apply.review_completed ──
|
|
154
|
+
if (eventType === "apply.started" && !state.pre_apply_completed) {
|
|
155
|
+
return {
|
|
156
|
+
allowed: false,
|
|
157
|
+
reason: "Apply gate: Pre-Apply Review가 완료되어야 합니다. pre_apply.review_completed 이벤트가 먼저 기록되어야 합니다.",
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
// ── Rule 5d: PRD Review gate — apply requires prd.review_completed ──
|
|
161
|
+
if (eventType === "apply.started" && !state.prd_review_completed) {
|
|
162
|
+
return {
|
|
163
|
+
allowed: false,
|
|
164
|
+
reason: "Apply gate: PRD 다관점 리뷰가 완료되어야 합니다. prd.review_completed 이벤트가 먼저 기록되어야 합니다.",
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
// ── Rule 5b: Compile retry limit ──
|
|
168
|
+
if (eventType === "compile.started" &&
|
|
169
|
+
state.retry_count_compile >= MAX_COMPILE_RETRIES) {
|
|
170
|
+
return {
|
|
171
|
+
allowed: false,
|
|
172
|
+
reason: `Compile retry limit exceeded (${state.retry_count_compile} gap_found cycles). Consider scope.deferred or redirect.to_align.`,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
// ── Rule 6: target.locked requires all constraints resolved ──
|
|
176
|
+
if (eventType === "target.locked" && !isConstraintsResolved(state.constraint_pool)) {
|
|
177
|
+
const { summary } = state.constraint_pool;
|
|
178
|
+
const reasons = [];
|
|
179
|
+
if (summary.undecided > 0)
|
|
180
|
+
reasons.push(`미결정 ${summary.undecided}건`);
|
|
181
|
+
if (summary.clarify_pending > 0)
|
|
182
|
+
reasons.push(`clarify 대기 ${summary.clarify_pending}건`);
|
|
183
|
+
return {
|
|
184
|
+
allowed: false,
|
|
185
|
+
reason: `Target lock 불가: ${reasons.join(", ")}. 모든 constraint 결정이 완료되어야 합니다.`,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
// ── Rule 7: Exploration round limit ──
|
|
189
|
+
if (eventType === "exploration.round_completed" &&
|
|
190
|
+
state.exploration_progress &&
|
|
191
|
+
state.exploration_progress.total_rounds >= MAX_EXPLORATION_ROUNDS) {
|
|
192
|
+
return {
|
|
193
|
+
allowed: false,
|
|
194
|
+
reason: `Exploration round limit exceeded (${state.exploration_progress.total_rounds} rounds). align.proposed로 진행하거나 scope.deferred를 고려하세요.`,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
// ── Rule 8: Exploration sequence integrity ──
|
|
198
|
+
// Rule 8a (align.proposed during exploration) is now handled structurally by MATRIX:
|
|
199
|
+
// exploring state allows align.proposed; grounded state allows align.proposed.
|
|
200
|
+
// Protocol determines when agent should record align.proposed.
|
|
201
|
+
// Rule 8b: exploration.round_completed/phase_transitioned require exploration.started
|
|
202
|
+
// MATRIX enforces this structurally (only exploring state allows these events).
|
|
203
|
+
// This rule provides a clearer error message.
|
|
204
|
+
if ((eventType === "exploration.round_completed" ||
|
|
205
|
+
eventType === "exploration.phase_transitioned") &&
|
|
206
|
+
!state.exploration_progress) {
|
|
207
|
+
return {
|
|
208
|
+
allowed: false,
|
|
209
|
+
reason: `exploration.started 이벤트가 먼저 기록되어야 합니다.`,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
// Rule 8c: exploration.started blocked when exploration already in progress
|
|
213
|
+
if (eventType === "exploration.started" &&
|
|
214
|
+
state.exploration_progress &&
|
|
215
|
+
!state.exploration_progress.completed_at) {
|
|
216
|
+
return {
|
|
217
|
+
allowed: false,
|
|
218
|
+
reason: `Exploration이 이미 진행 중입니다 (Phase ${state.exploration_progress.current_phase}/6). 완료 후 재시작 가능합니다.`,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
// ── Resolve next state (handle conditional targets) ──
|
|
222
|
+
const next_state = resolveNextState(outcome, state, newEvent);
|
|
223
|
+
return { allowed: true, next_state };
|
|
224
|
+
}
|
|
225
|
+
// ─── Conditional target resolution ───
|
|
226
|
+
/**
|
|
227
|
+
* Determine the actual next state when conditional_targets exist.
|
|
228
|
+
*
|
|
229
|
+
* Handles two cases:
|
|
230
|
+
* 1. surface_confirmed + constraint decision/clarify/invalidated
|
|
231
|
+
* → constraints_resolved if all constraints are now resolved
|
|
232
|
+
* 2. applied + validation.completed
|
|
233
|
+
* → validated (pass), constraints_resolved (fail), or grounded (fail+stale)
|
|
234
|
+
*/
|
|
235
|
+
function resolveNextState(outcome, state, event) {
|
|
236
|
+
if (!outcome.conditional_targets || outcome.conditional_targets.length === 0) {
|
|
237
|
+
return outcome.next_state;
|
|
238
|
+
}
|
|
239
|
+
const eventType = event.type;
|
|
240
|
+
// Case 1: surface_confirmed → constraints_resolved (conditional)
|
|
241
|
+
if (state.current_state === "surface_confirmed" &&
|
|
242
|
+
(eventType === "constraint.decision_recorded" ||
|
|
243
|
+
eventType === "constraint.clarify_resolved" ||
|
|
244
|
+
eventType === "constraint.invalidated")) {
|
|
245
|
+
// Simulate: apply this event to the pool, then check resolution
|
|
246
|
+
const simulatedPool = simulateConstraintEvent(state, event);
|
|
247
|
+
if (isConstraintsResolved(simulatedPool)) {
|
|
248
|
+
return "constraints_resolved";
|
|
249
|
+
}
|
|
250
|
+
return "surface_confirmed";
|
|
251
|
+
}
|
|
252
|
+
// Case 2: applied + validation.completed → validated / constraints_resolved / grounded
|
|
253
|
+
if (state.current_state === "applied" &&
|
|
254
|
+
eventType === "validation.completed") {
|
|
255
|
+
const p = event.payload;
|
|
256
|
+
// stale → grounded (regardless of pass/fail)
|
|
257
|
+
if (state.stale) {
|
|
258
|
+
return "grounded";
|
|
259
|
+
}
|
|
260
|
+
if (p.result === "pass") {
|
|
261
|
+
return "validated";
|
|
262
|
+
}
|
|
263
|
+
// fail + target issue → constraints_resolved
|
|
264
|
+
return "constraints_resolved";
|
|
265
|
+
}
|
|
266
|
+
// Default: use matrix default
|
|
267
|
+
return outcome.next_state;
|
|
268
|
+
}
|
|
269
|
+
// ─── Helpers ───
|
|
270
|
+
/**
|
|
271
|
+
* Simulate applying a constraint event to get an updated pool.
|
|
272
|
+
* Used for conditional target resolution without mutating the original pool.
|
|
273
|
+
*/
|
|
274
|
+
function simulateConstraintEvent(state, event) {
|
|
275
|
+
// Deep clone the constraints array to avoid mutation
|
|
276
|
+
const clonedConstraints = state.constraint_pool.constraints.map((c) => ({
|
|
277
|
+
...c,
|
|
278
|
+
}));
|
|
279
|
+
const eventType = event.type;
|
|
280
|
+
if (eventType === "constraint.decision_recorded") {
|
|
281
|
+
const p = event.payload;
|
|
282
|
+
const entry = clonedConstraints.find((c) => c.constraint_id === p.constraint_id);
|
|
283
|
+
if (entry) {
|
|
284
|
+
entry.status = "decided";
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
else if (eventType === "constraint.clarify_resolved") {
|
|
288
|
+
const p = event.payload;
|
|
289
|
+
const entry = clonedConstraints.find((c) => c.constraint_id === p.constraint_id);
|
|
290
|
+
if (entry) {
|
|
291
|
+
entry.status = "decided";
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
else if (eventType === "constraint.invalidated") {
|
|
295
|
+
const p = event.payload;
|
|
296
|
+
const entry = clonedConstraints.find((c) => c.constraint_id === p.constraint_id);
|
|
297
|
+
if (entry) {
|
|
298
|
+
entry.status = "invalidated";
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
// Recompute summary
|
|
302
|
+
let decided = 0;
|
|
303
|
+
let clarify_pending = 0;
|
|
304
|
+
let invalidated = 0;
|
|
305
|
+
let undecided = 0;
|
|
306
|
+
let required = 0;
|
|
307
|
+
let recommended = 0;
|
|
308
|
+
for (const c of clonedConstraints) {
|
|
309
|
+
if (c.severity === "required")
|
|
310
|
+
required++;
|
|
311
|
+
else
|
|
312
|
+
recommended++;
|
|
313
|
+
switch (c.status) {
|
|
314
|
+
case "decided":
|
|
315
|
+
decided++;
|
|
316
|
+
break;
|
|
317
|
+
case "clarify_pending":
|
|
318
|
+
clarify_pending++;
|
|
319
|
+
break;
|
|
320
|
+
case "invalidated":
|
|
321
|
+
invalidated++;
|
|
322
|
+
break;
|
|
323
|
+
case "undecided":
|
|
324
|
+
undecided++;
|
|
325
|
+
break;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
return {
|
|
329
|
+
constraints: clonedConstraints,
|
|
330
|
+
summary: {
|
|
331
|
+
total: clonedConstraints.length,
|
|
332
|
+
required,
|
|
333
|
+
recommended,
|
|
334
|
+
decided,
|
|
335
|
+
clarify_pending,
|
|
336
|
+
invalidated,
|
|
337
|
+
undecided,
|
|
338
|
+
},
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
/** Extract constraint_id from event payload, if present. */
|
|
342
|
+
function extractConstraintId(event) {
|
|
343
|
+
const payload = event.payload;
|
|
344
|
+
if (typeof payload.constraint_id === "string") {
|
|
345
|
+
return payload.constraint_id;
|
|
346
|
+
}
|
|
347
|
+
return undefined;
|
|
348
|
+
}
|