create-principles-disciple 1.93.0 → 1.95.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/console/dist/server/config/WorkspaceConfigStore.js +2 -1
- package/console/dist/server/config/pd-config-store.d.ts +40 -1
- package/console/dist/server/config/pd-config-store.js +170 -1
- package/console/dist/server/index.js +28 -10
- package/console/dist/server/models/ApprovalsConsoleModel.js +4 -12
- package/console/dist/server/models/EvidenceChainConsoleModel.d.ts +0 -2
- package/console/dist/server/models/EvidenceChainConsoleModel.js +36 -2
- package/console/dist/server/models/HealthCheckModel.js +5 -3
- package/console/dist/server/models/IntentDecisionModel.d.ts +66 -0
- package/console/dist/server/models/IntentDecisionModel.js +207 -0
- package/console/dist/server/models/IntentPageModel.d.ts +18 -0
- package/console/dist/server/models/IntentPageModel.js +90 -0
- package/console/dist/server/models/PrinciplesConsoleModel.d.ts +2 -0
- package/console/dist/server/models/PrinciplesConsoleModel.js +37 -1
- package/console/dist/server/models/WorkspaceService.d.ts +0 -28
- package/console/dist/server/models/WorkspaceService.js +0 -115
- package/console/dist/server/routes/config.js +55 -1
- package/console/dist/server/routes/feedback-reports.js +1 -1
- package/console/dist/server/routes/intent-decisions.d.ts +33 -0
- package/console/dist/server/routes/intent-decisions.js +499 -0
- package/console/dist/server/routes/intent.d.ts +3 -0
- package/console/dist/server/routes/intent.js +35 -0
- package/console/dist/server/routes/principles.js +67 -1
- package/console/dist/server/routes/update.d.ts +0 -1
- package/console/dist/server/routes/update.js +14 -11
- package/console/dist/ui/App.js +2 -7
- package/console/dist/ui/api.d.ts +44 -18
- package/console/dist/ui/api.js +44 -5
- package/console/dist/ui/components/layout/app-sidebar.js +2 -1
- package/console/dist/ui/components/ui/badge.d.ts +1 -1
- package/console/dist/ui/components/ui/button.d.ts +1 -1
- package/console/dist/ui/components/ui/shiny-text.d.ts +28 -0
- package/console/dist/ui/components/ui/shiny-text.js +46 -0
- package/console/dist/ui/i18n/en.json +167 -3
- package/console/dist/ui/i18n/zh-CN.json +167 -3
- package/console/dist/ui/pages/activation/ActivationPage.js +2 -1
- package/console/dist/ui/pages/control-center/ControlCenterPage.js +28 -2
- package/console/dist/ui/pages/control-center/EmpathyObserverCostHint.d.ts +28 -0
- package/console/dist/ui/pages/control-center/EmpathyObserverCostHint.js +38 -0
- package/console/dist/ui/pages/debt/DebtPage.js +219 -2
- package/console/dist/ui/pages/focus/FocusPage.js +2 -1
- package/console/dist/ui/pages/intent/IntentPage.d.ts +1 -0
- package/console/dist/ui/pages/intent/IntentPage.js +147 -0
- package/console/dist/ui/pages/pain/PainPage.js +234 -4
- package/console/dist/ui/pages/pain/pain-card-helpers.d.ts +75 -0
- package/console/dist/ui/pages/pain/pain-card-helpers.js +78 -0
- package/console/dist/ui/pages/principles/PrinciplesPage.js +2 -1
- package/console/dist/ui/utils/validators.d.ts +163 -0
- package/console/dist/ui/utils/validators.js +433 -0
- package/console/dist/web/assets/app.css +138 -0
- package/console/dist/web/assets/app.js +3124 -1288
- package/console/package.json +3 -0
- package/core/dist/index.d.ts +2 -2
- package/core/dist/index.d.ts.map +1 -1
- package/core/dist/index.js +1 -1
- package/core/dist/index.js.map +1 -1
- package/core/dist/principle-tree-ledger.d.ts +55 -4
- package/core/dist/principle-tree-ledger.d.ts.map +1 -1
- package/core/dist/principle-tree-ledger.js +472 -13
- package/core/dist/principle-tree-ledger.js.map +1 -1
- package/core/dist/prompt-builder/__tests__/model-config.test.d.ts +2 -0
- package/core/dist/prompt-builder/__tests__/model-config.test.d.ts.map +1 -0
- package/core/dist/prompt-builder/__tests__/model-config.test.js +158 -0
- package/core/dist/prompt-builder/__tests__/model-config.test.js.map +1 -0
- package/core/dist/prompt-builder/__tests__/prompt-builder-core.test.js +58 -0
- package/core/dist/prompt-builder/__tests__/prompt-builder-core.test.js.map +1 -1
- package/core/dist/prompt-builder/__tests__/xml-escape.test.d.ts +2 -0
- package/core/dist/prompt-builder/__tests__/xml-escape.test.d.ts.map +1 -0
- package/core/dist/prompt-builder/__tests__/xml-escape.test.js +42 -0
- package/core/dist/prompt-builder/__tests__/xml-escape.test.js.map +1 -0
- package/core/dist/prompt-builder/empathy-keyword-matching.d.ts.map +1 -1
- package/core/dist/prompt-builder/empathy-keyword-matching.js +9 -6
- package/core/dist/prompt-builder/empathy-keyword-matching.js.map +1 -1
- package/core/dist/prompt-builder/index.d.ts +3 -0
- package/core/dist/prompt-builder/index.d.ts.map +1 -1
- package/core/dist/prompt-builder/index.js +2 -0
- package/core/dist/prompt-builder/index.js.map +1 -1
- package/core/dist/prompt-builder/model-config.d.ts +42 -0
- package/core/dist/prompt-builder/model-config.d.ts.map +1 -0
- package/core/dist/prompt-builder/model-config.js +84 -0
- package/core/dist/prompt-builder/model-config.js.map +1 -0
- package/core/dist/prompt-builder/size-guard.d.ts +1 -0
- package/core/dist/prompt-builder/size-guard.d.ts.map +1 -1
- package/core/dist/prompt-builder/size-guard.js +21 -0
- package/core/dist/prompt-builder/size-guard.js.map +1 -1
- package/core/dist/prompt-builder/types.d.ts +2 -0
- package/core/dist/prompt-builder/types.d.ts.map +1 -1
- package/core/dist/prompt-builder/xml-escape.d.ts +12 -0
- package/core/dist/prompt-builder/xml-escape.d.ts.map +1 -0
- package/core/dist/prompt-builder/xml-escape.js +19 -0
- package/core/dist/prompt-builder/xml-escape.js.map +1 -0
- package/core/dist/runtime-v2/__tests__/architecture-regression.test.js +205 -48
- package/core/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.d.ts +2 -0
- package/core/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.js +284 -0
- package/core/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.js.map +1 -0
- package/core/dist/runtime-v2/__tests__/pain-signal-bridge-result-shaping.test.d.ts +2 -0
- package/core/dist/runtime-v2/__tests__/pain-signal-bridge-result-shaping.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/__tests__/pain-signal-bridge-result-shaping.test.js +500 -0
- package/core/dist/runtime-v2/__tests__/pain-signal-bridge-result-shaping.test.js.map +1 -0
- package/core/dist/runtime-v2/__tests__/pain-signal-observability.test.js +7 -5
- package/core/dist/runtime-v2/__tests__/pain-signal-observability.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/pi-artifact-store.test.js +11 -0
- package/core/dist/runtime-v2/__tests__/pi-artifact-store.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/proven-channel-baseline.test.js +15 -2
- package/core/dist/runtime-v2/__tests__/proven-channel-baseline.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/schema-float-precision.test.d.ts +2 -0
- package/core/dist/runtime-v2/__tests__/schema-float-precision.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/__tests__/schema-float-precision.test.js +290 -0
- package/core/dist/runtime-v2/__tests__/schema-float-precision.test.js.map +1 -0
- package/core/dist/runtime-v2/__tests__/schema-orphan-detection.test.d.ts +2 -0
- package/core/dist/runtime-v2/__tests__/schema-orphan-detection.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/__tests__/schema-orphan-detection.test.js +158 -0
- package/core/dist/runtime-v2/__tests__/schema-orphan-detection.test.js.map +1 -0
- package/core/dist/runtime-v2/activation/__tests__/approval-store-extended.test.js +15 -1
- package/core/dist/runtime-v2/activation/__tests__/approval-store-extended.test.js.map +1 -1
- package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store-fk.test.d.ts +2 -0
- package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store-fk.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store-fk.test.js +62 -0
- package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store-fk.test.js.map +1 -0
- package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store.test.js +12 -2
- package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store.test.js.map +1 -1
- package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store-fk.test.d.ts +2 -0
- package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store-fk.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store-fk.test.js +56 -0
- package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store-fk.test.js.map +1 -0
- package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store.test.js +8 -0
- package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store.test.js.map +1 -1
- package/core/dist/runtime-v2/activation/__tests__/story-a-acceptance.test.js +20 -0
- package/core/dist/runtime-v2/activation/__tests__/story-a-acceptance.test.js.map +1 -1
- package/core/dist/runtime-v2/activation/sqlite-activation-state-store.d.ts.map +1 -1
- package/core/dist/runtime-v2/activation/sqlite-activation-state-store.js +6 -0
- package/core/dist/runtime-v2/activation/sqlite-activation-state-store.js.map +1 -1
- package/core/dist/runtime-v2/activation/sqlite-approval-store.d.ts.map +1 -1
- package/core/dist/runtime-v2/activation/sqlite-approval-store.js +86 -32
- package/core/dist/runtime-v2/activation/sqlite-approval-store.js.map +1 -1
- package/core/dist/runtime-v2/activation/writers/__tests__/rule-host-writer.test.js +65 -1
- package/core/dist/runtime-v2/activation/writers/__tests__/rule-host-writer.test.js.map +1 -1
- package/core/dist/runtime-v2/activation/writers/rule-host-writer.d.ts.map +1 -1
- package/core/dist/runtime-v2/activation/writers/rule-host-writer.js +33 -11
- package/core/dist/runtime-v2/activation/writers/rule-host-writer.js.map +1 -1
- package/core/dist/runtime-v2/bridge-result-shaper.d.ts +53 -0
- package/core/dist/runtime-v2/bridge-result-shaper.d.ts.map +1 -0
- package/core/dist/runtime-v2/bridge-result-shaper.js +117 -0
- package/core/dist/runtime-v2/bridge-result-shaper.js.map +1 -0
- package/core/dist/runtime-v2/detection/__tests__/detection-funnel-policy.test.d.ts +13 -0
- package/core/dist/runtime-v2/detection/__tests__/detection-funnel-policy.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/detection/__tests__/detection-funnel-policy.test.js +111 -0
- package/core/dist/runtime-v2/detection/__tests__/detection-funnel-policy.test.js.map +1 -0
- package/core/dist/runtime-v2/detection/detection-funnel-policy.d.ts +103 -0
- package/core/dist/runtime-v2/detection/detection-funnel-policy.d.ts.map +1 -0
- package/core/dist/runtime-v2/detection/detection-funnel-policy.js +135 -0
- package/core/dist/runtime-v2/detection/detection-funnel-policy.js.map +1 -0
- package/core/dist/runtime-v2/detection/index.d.ts +10 -0
- package/core/dist/runtime-v2/detection/index.d.ts.map +1 -0
- package/core/dist/runtime-v2/detection/index.js +9 -0
- package/core/dist/runtime-v2/detection/index.js.map +1 -0
- package/core/dist/runtime-v2/diagnostician/__tests__/diag-rootcause-output.test.js +134 -15
- package/core/dist/runtime-v2/diagnostician/__tests__/diag-rootcause-output.test.js.map +1 -1
- package/core/dist/runtime-v2/diagnostician/__tests__/intent-tension-schema.test.d.ts +18 -0
- package/core/dist/runtime-v2/diagnostician/__tests__/intent-tension-schema.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/diagnostician/__tests__/intent-tension-schema.test.js +251 -0
- package/core/dist/runtime-v2/diagnostician/__tests__/intent-tension-schema.test.js.map +1 -0
- package/core/dist/runtime-v2/diagnostician/__tests__/rootcause-prompt-builder.test.js +73 -0
- package/core/dist/runtime-v2/diagnostician/__tests__/rootcause-prompt-builder.test.js.map +1 -1
- package/core/dist/runtime-v2/diagnostician/diag-rootcause-output.d.ts +98 -0
- package/core/dist/runtime-v2/diagnostician/diag-rootcause-output.d.ts.map +1 -1
- package/core/dist/runtime-v2/diagnostician/diag-rootcause-output.js +131 -0
- package/core/dist/runtime-v2/diagnostician/diag-rootcause-output.js.map +1 -1
- package/core/dist/runtime-v2/diagnostician/rootcause-prompt-builder.d.ts +8 -0
- package/core/dist/runtime-v2/diagnostician/rootcause-prompt-builder.d.ts.map +1 -1
- package/core/dist/runtime-v2/diagnostician/rootcause-prompt-builder.js +66 -3
- package/core/dist/runtime-v2/diagnostician/rootcause-prompt-builder.js.map +1 -1
- package/core/dist/runtime-v2/diagnostician-output.d.ts +23 -0
- package/core/dist/runtime-v2/diagnostician-output.d.ts.map +1 -1
- package/core/dist/runtime-v2/diagnostician-output.js +16 -0
- package/core/dist/runtime-v2/diagnostician-output.js.map +1 -1
- package/core/dist/runtime-v2/diagnostician-prompt-builder.d.ts +32 -0
- package/core/dist/runtime-v2/diagnostician-prompt-builder.d.ts.map +1 -1
- package/core/dist/runtime-v2/diagnostician-prompt-builder.js.map +1 -1
- package/core/dist/runtime-v2/evidence-triage/__tests__/observation-resolver.test.d.ts +12 -0
- package/core/dist/runtime-v2/evidence-triage/__tests__/observation-resolver.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/__tests__/observation-resolver.test.js +181 -0
- package/core/dist/runtime-v2/evidence-triage/__tests__/observation-resolver.test.js.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.js +104 -1
- package/core/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.js.map +1 -1
- package/core/dist/runtime-v2/evidence-triage/index.d.ts +3 -0
- package/core/dist/runtime-v2/evidence-triage/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/evidence-triage/index.js +3 -0
- package/core/dist/runtime-v2/evidence-triage/index.js.map +1 -1
- package/core/dist/runtime-v2/evidence-triage/observation-resolver.d.ts +128 -0
- package/core/dist/runtime-v2/evidence-triage/observation-resolver.d.ts.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/observation-resolver.js +203 -0
- package/core/dist/runtime-v2/evidence-triage/observation-resolver.js.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/source-descriptors.d.ts +1 -1
- package/core/dist/runtime-v2/evidence-triage/source-descriptors.js +1 -1
- package/core/dist/runtime-v2/evidence-triage/triage-policy.d.ts +4 -0
- package/core/dist/runtime-v2/evidence-triage/triage-policy.d.ts.map +1 -1
- package/core/dist/runtime-v2/evidence-triage/triage-policy.js +66 -9
- package/core/dist/runtime-v2/evidence-triage/triage-policy.js.map +1 -1
- package/core/dist/runtime-v2/evidence-triage/types.d.ts +14 -0
- package/core/dist/runtime-v2/evidence-triage/types.d.ts.map +1 -1
- package/core/dist/runtime-v2/evidence-triage/types.js.map +1 -1
- package/core/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js +56 -4
- package/core/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js.map +1 -1
- package/core/dist/runtime-v2/feature-flags/__tests__/intent-engineering-flag.test.d.ts +2 -0
- package/core/dist/runtime-v2/feature-flags/__tests__/intent-engineering-flag.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/feature-flags/__tests__/intent-engineering-flag.test.js +30 -0
- package/core/dist/runtime-v2/feature-flags/__tests__/intent-engineering-flag.test.js.map +1 -0
- package/core/dist/runtime-v2/feature-flags/feature-flag-contract.d.ts.map +1 -1
- package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js +11 -2
- package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
- package/core/dist/runtime-v2/feature-flags/plugin-surface-registry.d.ts.map +1 -1
- package/core/dist/runtime-v2/feature-flags/plugin-surface-registry.js +0 -9
- package/core/dist/runtime-v2/feature-flags/plugin-surface-registry.js.map +1 -1
- package/core/dist/runtime-v2/feedback/__tests__/redact-sensitive.test.d.ts +15 -0
- package/core/dist/runtime-v2/feedback/__tests__/redact-sensitive.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/feedback/__tests__/redact-sensitive.test.js +450 -0
- package/core/dist/runtime-v2/feedback/__tests__/redact-sensitive.test.js.map +1 -0
- package/core/dist/runtime-v2/feedback/__tests__/render-github-url.test.d.ts +13 -0
- package/core/dist/runtime-v2/feedback/__tests__/render-github-url.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/feedback/__tests__/render-github-url.test.js +243 -0
- package/core/dist/runtime-v2/feedback/__tests__/render-github-url.test.js.map +1 -0
- package/core/dist/runtime-v2/feedback/__tests__/safe-stringify.test.d.ts +12 -0
- package/core/dist/runtime-v2/feedback/__tests__/safe-stringify.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/feedback/__tests__/safe-stringify.test.js +172 -0
- package/core/dist/runtime-v2/feedback/__tests__/safe-stringify.test.js.map +1 -0
- package/core/dist/runtime-v2/index.d.ts +15 -6
- package/core/dist/runtime-v2/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/index.js +15 -4
- package/core/dist/runtime-v2/index.js.map +1 -1
- package/core/dist/runtime-v2/intent/__tests__/intent-decision-record.test.d.ts +2 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-decision-record.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-decision-record.test.js +185 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-decision-record.test.js.map +1 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-doc.test.d.ts +2 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-doc.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-doc.test.js +91 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-doc.test.js.map +1 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-friction-block.test.d.ts +2 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-friction-block.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-friction-block.test.js +168 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-friction-block.test.js.map +1 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-patch-proposal.test.d.ts +2 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-patch-proposal.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-patch-proposal.test.js +121 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-patch-proposal.test.js.map +1 -0
- package/core/dist/runtime-v2/intent/index.d.ts +6 -0
- package/core/dist/runtime-v2/intent/index.d.ts.map +1 -0
- package/core/dist/runtime-v2/intent/index.js +6 -0
- package/core/dist/runtime-v2/intent/index.js.map +1 -0
- package/core/dist/runtime-v2/intent/intent-decision-record.d.ts +125 -0
- package/core/dist/runtime-v2/intent/intent-decision-record.d.ts.map +1 -0
- package/core/dist/runtime-v2/intent/intent-decision-record.js +21 -0
- package/core/dist/runtime-v2/intent/intent-decision-record.js.map +1 -0
- package/core/dist/runtime-v2/intent/intent-doc-reader-port.d.ts +95 -0
- package/core/dist/runtime-v2/intent/intent-doc-reader-port.d.ts.map +1 -0
- package/core/dist/runtime-v2/intent/intent-doc-reader-port.js +43 -0
- package/core/dist/runtime-v2/intent/intent-doc-reader-port.js.map +1 -0
- package/core/dist/runtime-v2/intent/intent-doc.d.ts +19 -0
- package/core/dist/runtime-v2/intent/intent-doc.d.ts.map +1 -0
- package/core/dist/runtime-v2/intent/intent-doc.js +70 -0
- package/core/dist/runtime-v2/intent/intent-doc.js.map +1 -0
- package/core/dist/runtime-v2/intent/intent-friction-block.d.ts +63 -0
- package/core/dist/runtime-v2/intent/intent-friction-block.d.ts.map +1 -0
- package/core/dist/runtime-v2/intent/intent-friction-block.js +129 -0
- package/core/dist/runtime-v2/intent/intent-friction-block.js.map +1 -0
- package/core/dist/runtime-v2/intent/intent-patch-proposal.d.ts +42 -0
- package/core/dist/runtime-v2/intent/intent-patch-proposal.d.ts.map +1 -0
- package/core/dist/runtime-v2/intent/intent-patch-proposal.js +81 -0
- package/core/dist/runtime-v2/intent/intent-patch-proposal.js.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/__fixtures__/intent-tension-cases.d.ts +54 -0
- package/core/dist/runtime-v2/internalization/__tests__/__fixtures__/intent-tension-cases.d.ts.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/__fixtures__/intent-tension-cases.js +219 -0
- package/core/dist/runtime-v2/internalization/__tests__/__fixtures__/intent-tension-cases.js.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/c2-live-runner-chain.test.d.ts +2 -0
- package/core/dist/runtime-v2/internalization/__tests__/c2-live-runner-chain.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/c2-live-runner-chain.test.js +306 -0
- package/core/dist/runtime-v2/internalization/__tests__/c2-live-runner-chain.test.js.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/diag-rootcause-intent-tension.test.d.ts +2 -0
- package/core/dist/runtime-v2/internalization/__tests__/diag-rootcause-intent-tension.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/diag-rootcause-intent-tension.test.js +360 -0
- package/core/dist/runtime-v2/internalization/__tests__/diag-rootcause-intent-tension.test.js.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/diag-router-intent-tension.test.d.ts +2 -0
- package/core/dist/runtime-v2/internalization/__tests__/diag-router-intent-tension.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/diag-router-intent-tension.test.js +333 -0
- package/core/dist/runtime-v2/internalization/__tests__/diag-router-intent-tension.test.js.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/intent-tension-cases.test.d.ts +2 -0
- package/core/dist/runtime-v2/internalization/__tests__/intent-tension-cases.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/intent-tension-cases.test.js +113 -0
- package/core/dist/runtime-v2/internalization/__tests__/intent-tension-cases.test.js.map +1 -0
- package/core/dist/runtime-v2/internalization/diag-rootcause-runner.d.ts +13 -0
- package/core/dist/runtime-v2/internalization/diag-rootcause-runner.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/diag-rootcause-runner.js +42 -0
- package/core/dist/runtime-v2/internalization/diag-rootcause-runner.js.map +1 -1
- package/core/dist/runtime-v2/internalization/diag-router-runner.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/diag-router-runner.js +27 -0
- package/core/dist/runtime-v2/internalization/diag-router-runner.js.map +1 -1
- package/core/dist/runtime-v2/internalization/index.d.ts +0 -16
- package/core/dist/runtime-v2/internalization/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/index.js +0 -8
- package/core/dist/runtime-v2/internalization/index.js.map +1 -1
- package/core/dist/runtime-v2/pain-gate/__tests__/pain-diagnostic-gate-policy.test.d.ts +15 -0
- package/core/dist/runtime-v2/pain-gate/__tests__/pain-diagnostic-gate-policy.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/pain-gate/__tests__/pain-diagnostic-gate-policy.test.js +179 -0
- package/core/dist/runtime-v2/pain-gate/__tests__/pain-diagnostic-gate-policy.test.js.map +1 -0
- package/core/dist/runtime-v2/pain-gate/index.d.ts +10 -0
- package/core/dist/runtime-v2/pain-gate/index.d.ts.map +1 -0
- package/core/dist/runtime-v2/pain-gate/index.js +9 -0
- package/core/dist/runtime-v2/pain-gate/index.js.map +1 -0
- package/core/dist/runtime-v2/pain-gate/pain-diagnostic-gate-policy.d.ts +121 -0
- package/core/dist/runtime-v2/pain-gate/pain-diagnostic-gate-policy.d.ts.map +1 -0
- package/core/dist/runtime-v2/pain-gate/pain-diagnostic-gate-policy.js +157 -0
- package/core/dist/runtime-v2/pain-gate/pain-diagnostic-gate-policy.js.map +1 -0
- package/core/dist/runtime-v2/pain-signal-bridge.d.ts.map +1 -1
- package/core/dist/runtime-v2/pain-signal-bridge.js +14 -88
- package/core/dist/runtime-v2/pain-signal-bridge.js.map +1 -1
- package/core/dist/runtime-v2/pain-signal-observability.d.ts.map +1 -1
- package/core/dist/runtime-v2/pain-signal-observability.js +272 -61
- package/core/dist/runtime-v2/pain-signal-observability.js.map +1 -1
- package/core/dist/runtime-v2/pain-signal-runtime-factory.d.ts +12 -0
- package/core/dist/runtime-v2/pain-signal-runtime-factory.d.ts.map +1 -1
- package/core/dist/runtime-v2/pain-signal-runtime-factory.js +1 -1
- package/core/dist/runtime-v2/pain-signal-runtime-factory.js.map +1 -1
- package/core/dist/runtime-v2/pain-to-principle-service.d.ts +6 -0
- package/core/dist/runtime-v2/pain-to-principle-service.d.ts.map +1 -1
- package/core/dist/runtime-v2/pain-to-principle-service.js +2 -0
- package/core/dist/runtime-v2/pain-to-principle-service.js.map +1 -1
- package/core/dist/runtime-v2/principle-tree/ledger-codec.js.map +1 -1
- package/core/dist/runtime-v2/proven-channel-baseline.js +1 -1
- package/core/dist/runtime-v2/proven-channel-baseline.js.map +1 -1
- package/core/dist/runtime-v2/store/artifact/__tests__/sqlite-pi-artifact-store-fk.test.d.ts +2 -0
- package/core/dist/runtime-v2/store/artifact/__tests__/sqlite-pi-artifact-store-fk.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/store/artifact/__tests__/sqlite-pi-artifact-store-fk.test.js +55 -0
- package/core/dist/runtime-v2/store/artifact/__tests__/sqlite-pi-artifact-store-fk.test.js.map +1 -0
- package/core/dist/runtime-v2/store/artifact/sqlite-pi-artifact-store.d.ts.map +1 -1
- package/core/dist/runtime-v2/store/artifact/sqlite-pi-artifact-store.js +6 -0
- package/core/dist/runtime-v2/store/artifact/sqlite-pi-artifact-store.js.map +1 -1
- package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.d.ts +2 -0
- package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.js +272 -0
- package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.js.map +1 -0
- package/core/dist/runtime-v2/store/intent/index.d.ts +6 -0
- package/core/dist/runtime-v2/store/intent/index.d.ts.map +1 -0
- package/core/dist/runtime-v2/store/intent/index.js +5 -0
- package/core/dist/runtime-v2/store/intent/index.js.map +1 -0
- package/core/dist/runtime-v2/store/intent/sqlite-intent-decision-store.d.ts +51 -0
- package/core/dist/runtime-v2/store/intent/sqlite-intent-decision-store.d.ts.map +1 -0
- package/core/dist/runtime-v2/store/intent/sqlite-intent-decision-store.js +306 -0
- package/core/dist/runtime-v2/store/intent/sqlite-intent-decision-store.js.map +1 -0
- package/core/dist/runtime-v2/store/sqlite-connection-pragma.test.js +14 -3
- package/core/dist/runtime-v2/store/sqlite-connection-pragma.test.js.map +1 -1
- package/core/dist/runtime-v2/store/sqlite-connection-schema-version.test.d.ts +2 -0
- package/core/dist/runtime-v2/store/sqlite-connection-schema-version.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/store/sqlite-connection-schema-version.test.js +72 -0
- package/core/dist/runtime-v2/store/sqlite-connection-schema-version.test.js.map +1 -0
- package/core/dist/runtime-v2/store/sqlite-connection.d.ts +27 -0
- package/core/dist/runtime-v2/store/sqlite-connection.d.ts.map +1 -1
- package/core/dist/runtime-v2/store/sqlite-connection.js +124 -12
- package/core/dist/runtime-v2/store/sqlite-connection.js.map +1 -1
- package/core/dist/runtime-v2/types/event-payload.d.ts +1 -20
- package/core/dist/runtime-v2/types/event-payload.d.ts.map +1 -1
- package/core/dist/runtime-v2/types/event-payload.js +0 -12
- package/core/dist/runtime-v2/types/event-payload.js.map +1 -1
- package/core/dist/runtime-v2/types/event-types.d.ts +5 -61
- package/core/dist/runtime-v2/types/event-types.d.ts.map +1 -1
- package/core/dist/runtime-v2/types/event-types.js +2 -36
- package/core/dist/runtime-v2/types/event-types.js.map +1 -1
- package/core/dist/runtime-v2/types/evidence-chain-contract.d.ts +63 -0
- package/core/dist/runtime-v2/types/evidence-chain-contract.d.ts.map +1 -1
- package/core/dist/runtime-v2/types/evidence-chain-contract.js +234 -9
- package/core/dist/runtime-v2/types/evidence-chain-contract.js.map +1 -1
- package/core/dist/runtime-v2/types/index.d.ts +5 -5
- package/core/dist/runtime-v2/types/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/types/index.js +7 -3
- package/core/dist/runtime-v2/types/index.js.map +1 -1
- package/core/dist/runtime-v2/types/ledger-store.d.ts +30 -30
- package/core/dist/runtime-v2/types/ledger-store.d.ts.map +1 -1
- package/core/dist/runtime-v2/types/ledger-store.js +10 -5
- package/core/dist/runtime-v2/types/ledger-store.js.map +1 -1
- package/core/dist/runtime-v2/types/pain-signal.d.ts +2 -2
- package/core/dist/runtime-v2/types/pain-signal.js +2 -2
- package/core/dist/workflow-funnel-loader.d.ts +2 -2
- package/core/dist/workflow-funnel-loader.d.ts.map +1 -1
- package/dist/installer.d.ts.map +1 -1
- package/dist/installer.js +16 -0
- package/dist/installer.js.map +1 -1
- package/dist/mvp-config.d.ts +0 -10
- package/dist/mvp-config.d.ts.map +1 -1
- package/dist/mvp-config.js +0 -65
- package/dist/mvp-config.js.map +1 -1
- package/package.json +1 -1
- package/pd-cli/dist/commands/__tests__/intent-flag-wiring.test.d.ts +9 -0
- package/pd-cli/dist/commands/__tests__/intent-flag-wiring.test.d.ts.map +1 -0
- package/pd-cli/dist/commands/__tests__/intent-flag-wiring.test.js +166 -0
- package/pd-cli/dist/commands/__tests__/intent-flag-wiring.test.js.map +1 -0
- package/pd-cli/dist/commands/intent.d.ts +59 -0
- package/pd-cli/dist/commands/intent.d.ts.map +1 -0
- package/pd-cli/dist/commands/intent.js +350 -0
- package/pd-cli/dist/commands/intent.js.map +1 -0
- package/pd-cli/dist/commands/mvp-smoke.js +1 -1
- package/pd-cli/dist/commands/mvp-smoke.js.map +1 -1
- package/pd-cli/dist/commands/rulecode.js +1 -1
- package/pd-cli/dist/commands/rulecode.js.map +1 -1
- package/pd-cli/dist/commands/runtime-canary.d.ts.map +1 -1
- package/pd-cli/dist/commands/runtime-canary.js +10 -11
- package/pd-cli/dist/commands/runtime-canary.js.map +1 -1
- package/pd-cli/dist/commands/runtime-init.d.ts +43 -0
- package/pd-cli/dist/commands/runtime-init.d.ts.map +1 -0
- package/pd-cli/dist/commands/runtime-init.js +264 -0
- package/pd-cli/dist/commands/runtime-init.js.map +1 -0
- package/pd-cli/dist/commands/runtime-internalization-queue.d.ts.map +1 -1
- package/pd-cli/dist/commands/runtime-internalization-queue.js +13 -16
- package/pd-cli/dist/commands/runtime-internalization-queue.js.map +1 -1
- package/pd-cli/dist/commands/runtime-internalization-run-once.d.ts.map +1 -1
- package/pd-cli/dist/commands/runtime-internalization-run-once.js +3 -0
- package/pd-cli/dist/commands/runtime-internalization-run-once.js.map +1 -1
- package/pd-cli/dist/commands/runtime-internalization-run-rulehost.d.ts.map +1 -1
- package/pd-cli/dist/commands/runtime-internalization-run-rulehost.js +61 -7
- package/pd-cli/dist/commands/runtime-internalization-run-rulehost.js.map +1 -1
- package/pd-cli/dist/commands/runtime.js +1 -1
- package/pd-cli/dist/commands/runtime.js.map +1 -1
- package/pd-cli/dist/index.js +92 -34
- package/pd-cli/dist/index.js.map +1 -1
- package/pd-cli/dist/services/__tests__/rulehost-readiness.test.d.ts +2 -0
- package/pd-cli/dist/services/__tests__/rulehost-readiness.test.d.ts.map +1 -0
- package/pd-cli/dist/services/__tests__/rulehost-readiness.test.js +314 -0
- package/pd-cli/dist/services/__tests__/rulehost-readiness.test.js.map +1 -0
- package/pd-cli/dist/services/__tests__/runtime-adapter-resolver.test.js +20 -12
- package/pd-cli/dist/services/__tests__/runtime-adapter-resolver.test.js.map +1 -1
- package/pd-cli/dist/services/demo-story-a-runner.d.ts.map +1 -1
- package/pd-cli/dist/services/demo-story-a-runner.js +6 -0
- package/pd-cli/dist/services/demo-story-a-runner.js.map +1 -1
- package/pd-cli/dist/services/rulehost-readiness.d.ts +62 -0
- package/pd-cli/dist/services/rulehost-readiness.d.ts.map +1 -0
- package/pd-cli/dist/services/rulehost-readiness.js +214 -0
- package/pd-cli/dist/services/rulehost-readiness.js.map +1 -0
- package/pd-cli/dist/services/runtime-adapter-resolver.d.ts +1 -1
- package/pd-cli/dist/services/runtime-adapter-resolver.js +3 -3
- package/pd-cli/dist/services/runtime-adapter-resolver.js.map +1 -1
- package/pd-cli/package.json +1 -0
- package/plugin/dist/commands/evolution-status.js +0 -2
- package/plugin/dist/commands/pain.js +2 -0
- package/plugin/dist/core/control-ui-db.d.ts +11 -0
- package/plugin/dist/core/control-ui-db.js +40 -16
- package/plugin/dist/core/detection-funnel.d.ts +25 -11
- package/plugin/dist/core/detection-funnel.js +32 -80
- package/plugin/dist/core/event-log.d.ts +1 -3
- package/plugin/dist/core/event-log.js +5 -21
- package/plugin/dist/core/evolution-reducer.d.ts +0 -8
- package/plugin/dist/core/evolution-reducer.js +9 -19
- package/plugin/dist/core/intent-doc-reader-adapter.d.ts +28 -0
- package/plugin/dist/core/intent-doc-reader-adapter.js +56 -0
- package/plugin/dist/core/intent-doc-reader.d.ts +80 -0
- package/plugin/dist/core/intent-doc-reader.js +189 -0
- package/plugin/dist/core/pain-diagnostic-gate.d.ts +37 -28
- package/plugin/dist/core/pain-diagnostic-gate.js +53 -89
- package/plugin/dist/core/pain.d.ts +0 -63
- package/plugin/dist/core/pain.js +0 -167
- package/plugin/dist/core/paths.d.ts +0 -1
- package/plugin/dist/core/paths.js +2 -1
- package/plugin/dist/core/principle-tree-ledger.d.ts +27 -79
- package/plugin/dist/core/principle-tree-ledger.js +39 -524
- package/plugin/dist/core/reflection/reflection-context.d.ts +2 -2
- package/plugin/dist/core/schema/migrations/001-init-trajectory.js +3 -6
- package/plugin/dist/core/schema/schema-definitions.js +4 -9
- package/plugin/dist/core/trajectory.d.ts +16 -16
- package/plugin/dist/core/trajectory.js +338 -311
- package/plugin/dist/core/workspace-context.d.ts +2 -3
- package/plugin/dist/hooks/after-tool-call-helpers.d.ts +4 -1
- package/plugin/dist/hooks/after-tool-call-helpers.js +13 -17
- package/plugin/dist/hooks/gate-block-helper.js +57 -17
- package/plugin/dist/hooks/lifecycle.js +3 -6
- package/plugin/dist/hooks/llm.js +66 -26
- package/plugin/dist/hooks/pain.d.ts +3 -1
- package/plugin/dist/hooks/pain.js +124 -49
- package/plugin/dist/hooks/prompt-helpers.d.ts +105 -0
- package/plugin/dist/hooks/prompt-helpers.js +288 -0
- package/plugin/dist/hooks/prompt-types.d.ts +74 -0
- package/plugin/dist/hooks/prompt-types.js +12 -0
- package/plugin/dist/hooks/prompt.d.ts +7 -38
- package/plugin/dist/hooks/prompt.js +433 -338
- package/plugin/dist/hooks/raw-observation-adapter.d.ts +9 -50
- package/plugin/dist/hooks/raw-observation-adapter.js +9 -164
- package/plugin/dist/hooks/raw-observation-types.d.ts +6 -57
- package/plugin/dist/hooks/raw-observation-types.js +5 -9
- package/plugin/dist/hooks/triage-adapter.js +6 -26
- package/plugin/dist/hooks/trigger-cooldown-tracker.d.ts +12 -0
- package/plugin/dist/hooks/trigger-cooldown-tracker.js +25 -0
- package/plugin/dist/index.d.ts +3 -1
- package/plugin/dist/index.js +9 -5
- package/plugin/dist/service/evolution-worker.js +6 -64
- package/plugin/dist/service/runtime-summary-service.d.ts +0 -2
- package/plugin/dist/service/runtime-summary-service.js +1 -5
- package/plugin/dist/service/subagent-workflow/workflow-store.d.ts +14 -0
- package/plugin/dist/service/subagent-workflow/workflow-store.js +91 -2
- package/plugin/dist/types/event-types.d.ts +1 -1
- package/plugin/package.json +6 -3
- package/plugin/scripts/acceptance-test.mjs +3 -3
- package/plugin/scripts/sync-plugin.mjs +33 -22
- package/plugin/templates/langs/en/skills/pd-cli-operator/SKILL.md +20 -11
- package/plugin/templates/langs/en/skills/pd-runtime-v2/SKILL.md +10 -0
- package/plugin/templates/langs/zh/skills/pd-cli-operator/SKILL.md +20 -11
- package/plugin/templates/langs/zh/skills/pd-runtime-v2/SKILL.md +10 -0
- package/console/dist/server/config/feature-flags.d.ts +0 -25
- package/console/dist/server/config/feature-flags.js +0 -101
- package/pd-cli/dist/commands/central-sync.d.ts +0 -10
- package/pd-cli/dist/commands/central-sync.d.ts.map +0 -1
- package/pd-cli/dist/commands/central-sync.js +0 -32
- package/pd-cli/dist/commands/central-sync.js.map +0 -1
- package/pd-cli/dist/services/feature-flag-loader.d.ts +0 -6
- package/pd-cli/dist/services/feature-flag-loader.d.ts.map +0 -1
- package/pd-cli/dist/services/feature-flag-loader.js +0 -53
- package/pd-cli/dist/services/feature-flag-loader.js.map +0 -1
- package/plugin/dist/core/observability.d.ts +0 -40
- package/plugin/dist/core/observability.js +0 -164
- package/plugin/dist/core/principle-tree-ledger-adapter.d.ts +0 -32
- package/plugin/dist/core/principle-tree-ledger-adapter.js +0 -125
- package/plugin/dist/hooks/subagent.d.ts +0 -9
- package/plugin/dist/hooks/subagent.js +0 -122
- package/plugin/dist/service/central-database.d.ts +0 -138
- package/plugin/dist/service/central-database.js +0 -731
- package/plugin/dist/service/central-sync-service.d.ts +0 -8
- package/plugin/dist/service/central-sync-service.js +0 -71
- package/plugin/scripts/validate-live-path.ts +0 -480
|
@@ -195,6 +195,16 @@ const REQUIRED_SOURCE_FILES = [
|
|
|
195
195
|
'activation/approval-completion-service.ts',
|
|
196
196
|
// PRI-431: L2 principle reader (pure logic, extracted from pd-cli + plugin duplicates)
|
|
197
197
|
'build-l2-principle-reader.ts',
|
|
198
|
+
// PRI-446: pure logic migrated from openclaw-plugin into core
|
|
199
|
+
'evidence-triage/observation-resolver.ts',
|
|
200
|
+
'pain-gate/pain-diagnostic-gate-policy.ts',
|
|
201
|
+
'pain-gate/index.ts',
|
|
202
|
+
'detection/detection-funnel-policy.ts',
|
|
203
|
+
'detection/index.ts',
|
|
204
|
+
// PRI-470: IntentDecisionRecord durable store + types (SPEC §21.7)
|
|
205
|
+
'intent/intent-decision-record.ts',
|
|
206
|
+
'store/intent/sqlite-intent-decision-store.ts',
|
|
207
|
+
'store/intent/index.ts',
|
|
198
208
|
];
|
|
199
209
|
// ── PRI-212: Plugin core anti-growth guard ────────────────────────────────────
|
|
200
210
|
//
|
|
@@ -247,6 +257,9 @@ const KNOWN_PLUGIN_CORE_FILES = new Set([
|
|
|
247
257
|
'schema/migration-runner.ts',
|
|
248
258
|
'rule-host.ts',
|
|
249
259
|
'principle-training-state.ts',
|
|
260
|
+
// PRI-446: now a thin adapter delegating pure decision logic to
|
|
261
|
+
// runtime-v2/pain-gate/pain-diagnostic-gate-policy.ts. Kept here because it
|
|
262
|
+
// owns the cooldown Map + SystemLogger + Date.now side effects.
|
|
250
263
|
'pain-diagnostic-gate.ts',
|
|
251
264
|
'hygiene/tracker.ts',
|
|
252
265
|
'schema/migrations/002-init-central.ts',
|
|
@@ -289,6 +302,9 @@ const KNOWN_PLUGIN_CORE_FILES = new Set([
|
|
|
289
302
|
'dictionary.ts',
|
|
290
303
|
'thinking-os-parser.ts',
|
|
291
304
|
'system-logger.ts',
|
|
305
|
+
// PRI-446: now a thin shell wiring DetectionFunnelCore (core runtime-v2/detection)
|
|
306
|
+
// with crypto.createHash + PainDictionary. Kept here because it owns the
|
|
307
|
+
// crypto + dictionary I/O boundary.
|
|
292
308
|
'detection-funnel.ts',
|
|
293
309
|
'risk-calculator.ts',
|
|
294
310
|
'migration.ts',
|
|
@@ -298,6 +314,10 @@ const KNOWN_PLUGIN_CORE_FILES = new Set([
|
|
|
298
314
|
'empathy-keyword-matcher.ts',
|
|
299
315
|
'pain-lifecycle.ts',
|
|
300
316
|
'session-tracker.ts',
|
|
317
|
+
// PRI-459: now a thin re-export adapter over @principles/core/principle-tree-ledger.
|
|
318
|
+
// Kept in the plugin baseline so existing relative imports (./principle-tree-ledger.js)
|
|
319
|
+
// still resolve. No parsing/serialization/mutation logic may live here — enforced by
|
|
320
|
+
// tests/ledger-schema-diff.test.ts.
|
|
301
321
|
'principle-tree-ledger.ts',
|
|
302
322
|
'evolution-logger.ts',
|
|
303
323
|
'evolution-engine.ts',
|
|
@@ -309,6 +329,13 @@ const KNOWN_PLUGIN_CORE_FILES = new Set([
|
|
|
309
329
|
'pd-config-loader.ts',
|
|
310
330
|
// PRI-346: Pure function for checking conversation access config (extracted for circular import avoidance)
|
|
311
331
|
'config-health.ts',
|
|
332
|
+
// PRI-467: Plugin I/O boundary — reads .principles/INTENT.md with TTL+mtime cache,
|
|
333
|
+
// delegates parsing/validation/hashing to @principles/core. Never throws.
|
|
334
|
+
'intent-doc-reader.ts',
|
|
335
|
+
// PRI-468: Plugin adapter implementing core IntentDocReader port — pure type
|
|
336
|
+
// mapping from safeReadIntentDoc result to the core-owned IntentDocReadResult.
|
|
337
|
+
// No new I/O; delegates to intent-doc-reader.ts above.
|
|
338
|
+
'intent-doc-reader-adapter.ts',
|
|
312
339
|
// ── Test Files ──────────────────────────────────────────────────────────
|
|
313
340
|
'__tests__/focus-history.test.ts',
|
|
314
341
|
'principle-compiler/__tests__/compiler-replay-gate.test.ts',
|
|
@@ -350,7 +377,7 @@ describe('PRI-212 plugin core anti-growth guard', () => {
|
|
|
350
377
|
expect.fail(msg);
|
|
351
378
|
}
|
|
352
379
|
});
|
|
353
|
-
it('known baseline count is self-consistent (
|
|
380
|
+
it('known baseline count is self-consistent (93 files)', async () => {
|
|
354
381
|
// Sanity check: if the baseline grows, update this number.
|
|
355
382
|
// Prevents accidental baseline bloat from going unnoticed.
|
|
356
383
|
// See docs/reviews/plugin-core-inventory-2026-05.md §7
|
|
@@ -361,7 +388,14 @@ describe('PRI-212 plugin core anti-growth guard', () => {
|
|
|
361
388
|
// model-training-registry.ts, model-deployment-registry.ts,
|
|
362
389
|
// shadow-observation-registry.ts (98 → 93)
|
|
363
390
|
// PRI-449: Removed external-training-contract.ts (93 → 92)
|
|
364
|
-
|
|
391
|
+
// PRI-446: pain-diagnostic-gate.ts and detection-funnel.ts remain at 92 —
|
|
392
|
+
// they are now thin adapters delegating pure logic to core, but still live
|
|
393
|
+
// in plugin src/core/ and own I/O side effects, so they stay classified.
|
|
394
|
+
// PRI-467: Added intent-doc-reader.ts (92 → 93) — plugin I/O boundary for
|
|
395
|
+
// reading .principles/INTENT.md with TTL+mtime cache for prompt injection.
|
|
396
|
+
// PRI-468: Added intent-doc-reader-adapter.ts (93 → 94) — plugin adapter
|
|
397
|
+
// implementing core IntentDocReader port (pure type mapping, no new I/O).
|
|
398
|
+
expect(KNOWN_PLUGIN_CORE_FILES.size).toBe(94);
|
|
365
399
|
});
|
|
366
400
|
});
|
|
367
401
|
const REQUIRED_TEST_FILES = [
|
|
@@ -441,6 +475,11 @@ const REQUIRED_TEST_FILES = [
|
|
|
441
475
|
'../internalization/__tests__/diag-chain-e2e.test.ts',
|
|
442
476
|
// PRI-431
|
|
443
477
|
'build-l2-principle-reader.test.ts',
|
|
478
|
+
// PRI-469
|
|
479
|
+
'evidence-chain-intent-tension.test.ts',
|
|
480
|
+
// PRI-470: IntentDecisionRecord types + SQLite store
|
|
481
|
+
'../intent/__tests__/intent-decision-record.test.ts',
|
|
482
|
+
'../store/intent/__tests__/sqlite-intent-decision-store.test.ts',
|
|
444
483
|
];
|
|
445
484
|
const REQUIRED_DOC_FILES = [];
|
|
446
485
|
for (const file of REQUIRED_SOURCE_FILES) {
|
|
@@ -506,6 +545,8 @@ describe('runtime-v2 public API (index.ts barrel)', () => {
|
|
|
506
545
|
'buildL2PrincipleReaderFromLedger',
|
|
507
546
|
// LLM output hardening — shared utility
|
|
508
547
|
'stripFabricatedCorePrincipleIds',
|
|
548
|
+
// PRI-470: IntentDecisionRecord durable SQLite store
|
|
549
|
+
'SqliteIntentDecisionStore',
|
|
509
550
|
];
|
|
510
551
|
for (const name of REQUIRED_EXPORTS) {
|
|
511
552
|
it(`exports ${name}`, async () => {
|
|
@@ -597,6 +638,30 @@ describe('PRI-42 internalization boundary', () => {
|
|
|
597
638
|
expect(src).not.toContain('../../../openclaw-plugin');
|
|
598
639
|
}
|
|
599
640
|
});
|
|
641
|
+
it('PRI-446: pain-gate has zero openclaw-plugin imports', async () => {
|
|
642
|
+
const { existsSync, readdirSync, readFileSync } = await import('node:fs');
|
|
643
|
+
const { resolve, join } = await import('node:path');
|
|
644
|
+
const dir = resolve(__dirname, '..', 'pain-gate');
|
|
645
|
+
expect(existsSync(dir)).toBe(true);
|
|
646
|
+
const files = readdirSync(dir).filter((f) => f.endsWith('.ts') && !f.endsWith('.test.ts'));
|
|
647
|
+
for (const file of files) {
|
|
648
|
+
const src = readFileSync(join(dir, file), 'utf-8');
|
|
649
|
+
expect(src).not.toContain('openclaw-plugin');
|
|
650
|
+
expect(src).not.toContain('../../../openclaw-plugin');
|
|
651
|
+
}
|
|
652
|
+
});
|
|
653
|
+
it('PRI-446: detection has zero openclaw-plugin imports', async () => {
|
|
654
|
+
const { existsSync, readdirSync, readFileSync } = await import('node:fs');
|
|
655
|
+
const { resolve, join } = await import('node:path');
|
|
656
|
+
const dir = resolve(__dirname, '..', 'detection');
|
|
657
|
+
expect(existsSync(dir)).toBe(true);
|
|
658
|
+
const files = readdirSync(dir).filter((f) => f.endsWith('.ts') && !f.endsWith('.test.ts'));
|
|
659
|
+
for (const file of files) {
|
|
660
|
+
const src = readFileSync(join(dir, file), 'utf-8');
|
|
661
|
+
expect(src).not.toContain('openclaw-plugin');
|
|
662
|
+
expect(src).not.toContain('../../../openclaw-plugin');
|
|
663
|
+
}
|
|
664
|
+
});
|
|
600
665
|
it('plugin does not re-define RuleHost contract types locally', async () => {
|
|
601
666
|
const { existsSync, readFileSync } = await import('node:fs');
|
|
602
667
|
const { resolve } = await import('node:path');
|
|
@@ -1598,6 +1663,16 @@ describe('PRI-75/PRI-74/PRI-81 prompt-builder core boundary', () => {
|
|
|
1598
1663
|
// Must NOT have the old multi-line fallback block with attitudeDirective interpolation
|
|
1599
1664
|
expect(src).not.toMatch(/## 【CONTEXT SECTIONS】\n\n\[WARNING: Context sections stripped/);
|
|
1600
1665
|
});
|
|
1666
|
+
it('plugin prompt-helpers.ts imports escapeXml from core, not reimplemented', async () => {
|
|
1667
|
+
const { readFileSync } = await import('node:fs');
|
|
1668
|
+
const { resolve } = await import('node:path');
|
|
1669
|
+
const src = readFileSync(resolve(__dirname, '../../../../openclaw-plugin/src/hooks/prompt-helpers.ts'), 'utf-8');
|
|
1670
|
+
// Must import escapeXml from core
|
|
1671
|
+
expect(src).toContain('@principles/core/prompt-builder');
|
|
1672
|
+
expect(src).toMatch(/import\s*\{[^}]*escapeXml[^}]*\}\s*from\s*['"]@principles\/core\/prompt-builder['"]/);
|
|
1673
|
+
// Must NOT reimplement escapeXml inline
|
|
1674
|
+
expect(src).not.toMatch(/\b(function\s+escapeXml\s*\(|const\s+escapeXml\s*=\s*(?:async\s*)?(?:\([^)]*\)|[a-zA-Z_$][\w$]*)\s*=>)/);
|
|
1675
|
+
});
|
|
1601
1676
|
it('plugin empathy-keyword-matcher.ts is a thin adapter (re-exports from core)', async () => {
|
|
1602
1677
|
const { readFileSync } = await import('node:fs');
|
|
1603
1678
|
const { resolve } = await import('node:path');
|
|
@@ -1755,6 +1830,19 @@ describe('PRI-111 ArtificerRunner boundary', () => {
|
|
|
1755
1830
|
expect(src).toContain('ArtificerRuleOutputSchema');
|
|
1756
1831
|
});
|
|
1757
1832
|
});
|
|
1833
|
+
// ── PRI-458: PhilosopherRunner barrel boundary (MVP-Quiet) ─────────────────────
|
|
1834
|
+
describe('PRI-458 PhilosopherRunner barrel boundary', () => {
|
|
1835
|
+
it('BARREL_EXPORTS: internalization/index.ts does NOT export PhilosopherRunner (PRI-458 MVP-Quiet)', async () => {
|
|
1836
|
+
// PRI-458: PhilosopherRunner is de-surfaced from the internal barrel (MVP-Quiet).
|
|
1837
|
+
// It remains in runtime-v2/index.ts (public barrel) because rulehost-pipeline-runner.ts
|
|
1838
|
+
// imports it from there (EP-02 exception).
|
|
1839
|
+
const { readFileSync } = await import('node:fs');
|
|
1840
|
+
const { resolve } = await import('node:path');
|
|
1841
|
+
const src = readFileSync(resolve(__dirname, '..', 'internalization', 'index.ts'), 'utf-8');
|
|
1842
|
+
expect(src).not.toContain("from './philosopher-runner.js'");
|
|
1843
|
+
expect(src).not.toContain("from './philosopher-output.js'");
|
|
1844
|
+
});
|
|
1845
|
+
});
|
|
1758
1846
|
// ── PRI-EVAL: EvaluatorRunner boundary guards ──────────────────────────────────
|
|
1759
1847
|
describe('PRI-EVAL EvaluatorRunner boundary', () => {
|
|
1760
1848
|
it('evaluator source files exist in internalization directory', async () => {
|
|
@@ -1795,13 +1883,17 @@ describe('PRI-EVAL EvaluatorRunner boundary', () => {
|
|
|
1795
1883
|
expect(src).not.toContain('node:fs');
|
|
1796
1884
|
expect(src).not.toContain('node:cron');
|
|
1797
1885
|
});
|
|
1798
|
-
it('BARREL_EXPORTS: internalization/index.ts
|
|
1886
|
+
it('BARREL_EXPORTS: internalization/index.ts does NOT export EvaluatorRunner (PRI-458 MVP-Quiet)', async () => {
|
|
1887
|
+
// PRI-458: EvaluatorRunner is de-surfaced from the internal barrel (MVP-Quiet).
|
|
1888
|
+
// It remains in runtime-v2/index.ts (public barrel) because rulehost-pipeline-runner.ts
|
|
1889
|
+
// imports it from there (EP-02 exception). These negative assertions lock the boundary:
|
|
1890
|
+
// if someone re-aggregates the evaluator exports into this barrel, the test will fail.
|
|
1799
1891
|
const { readFileSync } = await import('node:fs');
|
|
1800
1892
|
const { resolve } = await import('node:path');
|
|
1801
1893
|
const src = readFileSync(resolve(__dirname, '..', 'internalization', 'index.ts'), 'utf-8');
|
|
1802
|
-
expect(src).toContain('
|
|
1803
|
-
expect(src).toContain('
|
|
1804
|
-
expect(src).toContain('
|
|
1894
|
+
expect(src).not.toContain("from './evaluator-runner.js'");
|
|
1895
|
+
expect(src).not.toContain("from './evaluator-output.js'");
|
|
1896
|
+
expect(src).not.toContain("from './evaluator-prompt-builder.js'");
|
|
1805
1897
|
});
|
|
1806
1898
|
it('SCHEMA_REGISTRY: pi-ai-runtime-adapter.ts registers evaluator-output-v1 schema', async () => {
|
|
1807
1899
|
const { readFileSync } = await import('node:fs');
|
|
@@ -1851,13 +1943,16 @@ describe('PRI-RR RolloutReviewerRunner boundary', () => {
|
|
|
1851
1943
|
expect(src).not.toContain('node:fs');
|
|
1852
1944
|
expect(src).not.toContain('node:cron');
|
|
1853
1945
|
});
|
|
1854
|
-
it('BARREL_EXPORTS: internalization/index.ts
|
|
1946
|
+
it('BARREL_EXPORTS: internalization/index.ts does NOT export RolloutReviewerRunner (PRI-458 MVP-Quiet)', async () => {
|
|
1947
|
+
// PRI-458: RolloutReviewerRunner is de-surfaced from the internal barrel (MVP-Quiet).
|
|
1948
|
+
// It remains in runtime-v2/index.ts (public barrel) because runtime-internalization-run-once.ts
|
|
1949
|
+
// imports it from there and package.json has no deep import path available (EP-02 exception).
|
|
1855
1950
|
const { readFileSync } = await import('node:fs');
|
|
1856
1951
|
const { resolve } = await import('node:path');
|
|
1857
1952
|
const src = readFileSync(resolve(__dirname, '..', 'internalization', 'index.ts'), 'utf-8');
|
|
1858
|
-
expect(src).toContain('
|
|
1859
|
-
expect(src).toContain('
|
|
1860
|
-
expect(src).toContain('
|
|
1953
|
+
expect(src).not.toContain("from './rollout-reviewer-runner.js'");
|
|
1954
|
+
expect(src).not.toContain("from './rollout-reviewer-output.js'");
|
|
1955
|
+
expect(src).not.toContain("from './rollout-reviewer-prompt-builder.js'");
|
|
1861
1956
|
});
|
|
1862
1957
|
it('SCHEMA_REGISTRY: pi-ai-runtime-adapter.ts registers rollout-reviewer-output-v1 schema', async () => {
|
|
1863
1958
|
const { readFileSync } = await import('node:fs');
|
|
@@ -2127,12 +2222,14 @@ describe('PRI-117 Nocturnal god-class freeze', () => {
|
|
|
2127
2222
|
expect(src).not.toContain('invokeStubScribe');
|
|
2128
2223
|
}
|
|
2129
2224
|
});
|
|
2130
|
-
it('RUNTIME_V2_USES_PEER_RUNNERS: DreamerRunner/
|
|
2225
|
+
it('RUNTIME_V2_USES_PEER_RUNNERS: DreamerRunner/ScribeRunner/ArtificerRunner are the canonical MVP-Core entry points', async () => {
|
|
2226
|
+
// PRI-458: narrowed to MVP-Core runners only. PhilosopherRunner (MVP-Quiet)
|
|
2227
|
+
// remains in runtime-v2/index.ts for rulehost-pipeline-runner.ts compatibility
|
|
2228
|
+
// but is no longer asserted as a canonical entry point.
|
|
2131
2229
|
const { readFileSync } = await import('node:fs');
|
|
2132
2230
|
const { resolve } = await import('node:path');
|
|
2133
2231
|
const src = readFileSync(resolve(__dirname, '..', 'index.ts'), 'utf-8');
|
|
2134
2232
|
expect(src).toContain('DreamerRunner');
|
|
2135
|
-
expect(src).toContain('PhilosopherRunner');
|
|
2136
2233
|
expect(src).toContain('ScribeRunner');
|
|
2137
2234
|
expect(src).toContain('ArtificerRunner');
|
|
2138
2235
|
});
|
|
@@ -2878,7 +2975,7 @@ describe('PRI-225: No unsafe type assertions on untrusted metadata arrays', () =
|
|
|
2878
2975
|
// ── PRI-239: Feature flag registry architecture boundary ──────────────────
|
|
2879
2976
|
//
|
|
2880
2977
|
// Core: packages/principles-core/src/runtime-v2/feature-flags/feature-flag-contract.ts
|
|
2881
|
-
// I/O Loader: packages/pd-cli/src/services/feature-flag-loader.ts
|
|
2978
|
+
// I/O Loader: packages/pd-cli/src/services/pd-config-loader.ts (PRI-460: replaced feature-flag-loader.ts)
|
|
2882
2979
|
// CLI Command: packages/pd-cli/src/commands/runtime-features.ts
|
|
2883
2980
|
// Consumption: packages/pd-cli/src/commands/runtime-canary.ts (GFI check)
|
|
2884
2981
|
describe('PRI-239: Feature flag registry architecture boundary', () => {
|
|
@@ -2900,10 +2997,10 @@ describe('PRI-239: Feature flag registry architecture boundary', () => {
|
|
|
2900
2997
|
expect(src).not.toContain('InternalizationOrchestrator');
|
|
2901
2998
|
expect(src).not.toContain('SqliteConnection');
|
|
2902
2999
|
});
|
|
2903
|
-
it('IO_LOADER_OUTSIDE_CORE: I/O loader exists at pd-cli/src/services/
|
|
3000
|
+
it('IO_LOADER_OUTSIDE_CORE: I/O loader exists at pd-cli/src/services/pd-config-loader.ts', async () => {
|
|
2904
3001
|
const { existsSync } = await import('node:fs');
|
|
2905
3002
|
const { resolve } = await import('node:path');
|
|
2906
|
-
expect(existsSync(resolve(__dirname, '../../../../pd-cli/src/services/
|
|
3003
|
+
expect(existsSync(resolve(__dirname, '../../../../pd-cli/src/services/pd-config-loader.ts'))).toBe(true);
|
|
2907
3004
|
});
|
|
2908
3005
|
it('CLI_COMMAND_OUTSIDE_CORE: CLI command exists at pd-cli/src/commands/runtime-features.ts', async () => {
|
|
2909
3006
|
const { existsSync } = await import('node:fs');
|
|
@@ -2918,12 +3015,12 @@ describe('PRI-239: Feature flag registry architecture boundary', () => {
|
|
|
2918
3015
|
expect(src).not.toContain('nocturnal-arbiter');
|
|
2919
3016
|
expect(src).not.toContain('nocturnal-service');
|
|
2920
3017
|
});
|
|
2921
|
-
it('CONSUMPTION_WIRED: runtime-canary.ts imports
|
|
3018
|
+
it('CONSUMPTION_WIRED: runtime-canary.ts imports canonical PD config loader', async () => {
|
|
2922
3019
|
const { readFileSync } = await import('node:fs');
|
|
2923
3020
|
const { resolve } = await import('node:path');
|
|
2924
3021
|
const src = readFileSync(resolve(__dirname, '../../../../pd-cli/src/commands/runtime-canary.ts'), 'utf-8');
|
|
2925
|
-
expect(src).toContain('
|
|
2926
|
-
expect(src).toContain('
|
|
3022
|
+
expect(src).toContain('pd-config-loader');
|
|
3023
|
+
expect(src).toContain('loadPdConfig');
|
|
2927
3024
|
});
|
|
2928
3025
|
});
|
|
2929
3026
|
describe('PRI-304: PD-Owned Config Contract barrel exports and purity', () => {
|
|
@@ -3121,33 +3218,31 @@ describe('PRI-443: pure module boundary guards', () => {
|
|
|
3121
3218
|
expect(src).not.toMatch(/export\s+type\s+\{\s*LedgerTreeStore\s*\}\s*from\s*['"]\.\.\/principle-tree-ledger\.js['"]/);
|
|
3122
3219
|
});
|
|
3123
3220
|
});
|
|
3124
|
-
|
|
3125
|
-
//
|
|
3126
|
-
//
|
|
3127
|
-
|
|
3128
|
-
|
|
3129
|
-
|
|
3130
|
-
|
|
3131
|
-
//
|
|
3132
|
-
//
|
|
3133
|
-
|
|
3134
|
-
'
|
|
3135
|
-
|
|
3136
|
-
|
|
3137
|
-
|
|
3138
|
-
|
|
3139
|
-
|
|
3140
|
-
|
|
3141
|
-
|
|
3142
|
-
|
|
3143
|
-
|
|
3144
|
-
|
|
3145
|
-
|
|
3146
|
-
|
|
3147
|
-
|
|
3148
|
-
|
|
3149
|
-
'runtime-v2/schema-conformance-read-model.ts',
|
|
3150
|
-
]);
|
|
3221
|
+
describe('PRI-450 / PRI-462: core I/O seam registry guard', () => {
|
|
3222
|
+
// Registry lives at packages/principles-core/io-seam-registry.json
|
|
3223
|
+
// (3 levels up from __tests__: __tests__ → runtime-v2 → src → principles-core)
|
|
3224
|
+
const registryPath = pathSync.resolve(__dirname, '..', '..', '..', 'io-seam-registry.json');
|
|
3225
|
+
const registryRaw = fsSync.readFileSync(registryPath, 'utf-8');
|
|
3226
|
+
const registry = JSON.parse(registryRaw);
|
|
3227
|
+
// Runtime-validate the registry shape (Runtime Contract Rule 1+2: treat
|
|
3228
|
+
// parsed JSON as unknown, validate with typeof/Array.isArray before access).
|
|
3229
|
+
// `as` is used only for type narrowing AFTER runtime checks, not to bypass them.
|
|
3230
|
+
function isValidRegistry(v) {
|
|
3231
|
+
if (typeof v !== 'object' || v === null || !Object.hasOwn(v, 'seams'))
|
|
3232
|
+
return false;
|
|
3233
|
+
const { seams } = v;
|
|
3234
|
+
if (!Array.isArray(seams))
|
|
3235
|
+
return false;
|
|
3236
|
+
return seams.every((s) => typeof s === 'object' && s !== null &&
|
|
3237
|
+
typeof s.name === 'string' &&
|
|
3238
|
+
typeof s.description === 'string' &&
|
|
3239
|
+
Array.isArray(s.files) &&
|
|
3240
|
+
s.files.every((f) => typeof f === 'string'));
|
|
3241
|
+
}
|
|
3242
|
+
// Flatten all registry files into a Set (relative to packages/principles-core/src/).
|
|
3243
|
+
const ALLOWED_IO_FILES = new Set(isValidRegistry(registry)
|
|
3244
|
+
? registry.seams.flatMap((s) => s.files)
|
|
3245
|
+
: []);
|
|
3151
3246
|
// Extract all import module paths from source code.
|
|
3152
3247
|
// Handles: import ... from 'mod', import 'mod' (side-effect), and multiline imports.
|
|
3153
3248
|
// Reuses the same pattern proven in the PRI-215 extractImportModulePaths helper.
|
|
@@ -3186,7 +3281,52 @@ describe('PRI-450: core I/O whitelist guard', () => {
|
|
|
3186
3281
|
}
|
|
3187
3282
|
}
|
|
3188
3283
|
}
|
|
3189
|
-
|
|
3284
|
+
// ── Registry validity (PRI-462) ───────────────────────────────────────────
|
|
3285
|
+
it('io-seam-registry.json is valid: seams array with name/description/files', () => {
|
|
3286
|
+
expect(isValidRegistry(registry)).toBe(true);
|
|
3287
|
+
if (!isValidRegistry(registry))
|
|
3288
|
+
return; // type narrowing
|
|
3289
|
+
expect(registry.seams.length).toBeGreaterThan(0);
|
|
3290
|
+
for (const seam of registry.seams) {
|
|
3291
|
+
expect(seam.name.length).toBeGreaterThan(0);
|
|
3292
|
+
expect(seam.description.length).toBeGreaterThan(0);
|
|
3293
|
+
expect(seam.files.length).toBeGreaterThan(0);
|
|
3294
|
+
}
|
|
3295
|
+
});
|
|
3296
|
+
it('registry has no duplicate files across seams', () => {
|
|
3297
|
+
if (!isValidRegistry(registry)) {
|
|
3298
|
+
// isValidRegistry test above will fail with details; skip here.
|
|
3299
|
+
expect(isValidRegistry(registry)).toBe(true);
|
|
3300
|
+
return;
|
|
3301
|
+
}
|
|
3302
|
+
const seen = new Set();
|
|
3303
|
+
const dupes = [];
|
|
3304
|
+
for (const seam of registry.seams) {
|
|
3305
|
+
for (const f of seam.files) {
|
|
3306
|
+
if (seen.has(f))
|
|
3307
|
+
dupes.push(f);
|
|
3308
|
+
seen.add(f);
|
|
3309
|
+
}
|
|
3310
|
+
}
|
|
3311
|
+
expect(dupes).toEqual([]);
|
|
3312
|
+
});
|
|
3313
|
+
it('every seam description explains why the I/O is allowed (non-trivial)', () => {
|
|
3314
|
+
if (!isValidRegistry(registry)) {
|
|
3315
|
+
expect(isValidRegistry(registry)).toBe(true);
|
|
3316
|
+
return;
|
|
3317
|
+
}
|
|
3318
|
+
const weak = [];
|
|
3319
|
+
for (const seam of registry.seams) {
|
|
3320
|
+
// Description must be at least 20 chars — a single word like "legacy" is
|
|
3321
|
+
// not an explanation. This forces maintainers to write a real rationale.
|
|
3322
|
+
if (seam.description.trim().length < 20) {
|
|
3323
|
+
weak.push(`${seam.name}: "${seam.description}"`);
|
|
3324
|
+
}
|
|
3325
|
+
}
|
|
3326
|
+
expect(weak).toEqual([]);
|
|
3327
|
+
});
|
|
3328
|
+
// ── Registry ↔ production files (PRI-450, EP-02) ──────────────────────────
|
|
3329
|
+
it('core/src/ production files: only registry-listed files import fs/path', () => {
|
|
3190
3330
|
const coreSrcDir = pathSync.resolve(__dirname, '..', '..');
|
|
3191
3331
|
const allFiles = [];
|
|
3192
3332
|
collectTsFiles(coreSrcDir, allFiles);
|
|
@@ -3200,9 +3340,13 @@ describe('PRI-450: core I/O whitelist guard', () => {
|
|
|
3200
3340
|
}
|
|
3201
3341
|
}
|
|
3202
3342
|
}
|
|
3203
|
-
|
|
3343
|
+
if (violations.length > 0) {
|
|
3344
|
+
throw new Error(`Found ${violations.length} file(s) importing fs/path that are NOT in io-seam-registry.json.\n` +
|
|
3345
|
+
`Add them to the appropriate seam in packages/principles-core/io-seam-registry.json.\n` +
|
|
3346
|
+
`Violations:\n ` + violations.join('\n '));
|
|
3347
|
+
}
|
|
3204
3348
|
});
|
|
3205
|
-
it('
|
|
3349
|
+
it('registry-listed files all exist on disk', () => {
|
|
3206
3350
|
const coreSrcDir = pathSync.resolve(__dirname, '..', '..');
|
|
3207
3351
|
const missing = [];
|
|
3208
3352
|
for (const relPath of ALLOWED_IO_FILES) {
|
|
@@ -3213,6 +3357,19 @@ describe('PRI-450: core I/O whitelist guard', () => {
|
|
|
3213
3357
|
}
|
|
3214
3358
|
expect(missing).toEqual([]);
|
|
3215
3359
|
});
|
|
3360
|
+
// ── Registry ↔ ESLint exemption (PRI-462, EP-06 single source of truth) ───
|
|
3361
|
+
//
|
|
3362
|
+
// ESLint's no-restricted-imports exemption list must be DERIVED from the
|
|
3363
|
+
// registry, not hand-maintained. This test verifies eslint.config.js
|
|
3364
|
+
// references the registry file, proving the two stay in sync.
|
|
3365
|
+
it('eslint.config.js derives fs/path exemption from the registry (no shadow list)', () => {
|
|
3366
|
+
const eslintPath = pathSync.resolve(__dirname, '..', '..', '..', '..', '..', 'eslint.config.js');
|
|
3367
|
+
const eslintSrc = fsSync.readFileSync(eslintPath, 'utf-8');
|
|
3368
|
+
// The eslint config must read the registry JSON — if this reference is
|
|
3369
|
+
// removed, someone has reintroduced a hand-maintained shadow list.
|
|
3370
|
+
expect(eslintSrc).toContain('io-seam-registry.json');
|
|
3371
|
+
});
|
|
3372
|
+
// ── Helper unit tests ─────────────────────────────────────────────────────
|
|
3216
3373
|
it('importsFsOrPath detects sub-path imports (fs/promises) and side-effect imports', () => {
|
|
3217
3374
|
// Sub-path import
|
|
3218
3375
|
expect(importsFsOrPath(`import { mkdir } from 'node:fs/promises';`)).toBe(true);
|