create-principles-disciple 1.91.0 → 1.93.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/README.md +1 -1
- package/console/dist/server/config/AuthConfig.js +6 -0
- package/console/dist/server/index.js +31 -16
- package/console/dist/server/models/ApprovalsGroupedConsoleModel.js +6 -3
- package/console/dist/server/models/ConsoleLifecycleDatasource.js +1 -1
- package/console/dist/server/routes/activations.js +4 -0
- package/console/dist/server/routes/approvals.js +24 -4
- package/console/dist/server/routes/feedback-reports.js +7 -5
- package/console/dist/server/routes/lifecycle.js +6 -1
- package/console/dist/server/routes/principles.js +10 -2
- package/console/dist/server/routes/workspaces.js +4 -0
- package/console/dist/ui/components/ui/charts.js +4 -1
- package/console/dist/ui/components/ui/markdown.js +9 -5
- package/console/dist/ui/i18n/en.json +1 -2
- package/console/dist/ui/i18n/zh-CN.json +1 -2
- package/console/dist/ui/utils/enum-labels.js +4 -2
- package/console/dist/web/assets/app.js +8 -8
- package/core/dist/index.d.ts +0 -1
- package/core/dist/index.d.ts.map +1 -1
- package/core/dist/index.js +0 -2
- package/core/dist/index.js.map +1 -1
- package/core/dist/pain-signal.d.ts +11 -71
- package/core/dist/pain-signal.d.ts.map +1 -1
- package/core/dist/pain-signal.js +10 -120
- package/core/dist/pain-signal.js.map +1 -1
- package/core/dist/principle-tree-ledger.d.ts +4 -87
- package/core/dist/principle-tree-ledger.d.ts.map +1 -1
- package/core/dist/principle-tree-ledger.js +51 -148
- package/core/dist/principle-tree-ledger.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/activation-types-helpers.test.js +6 -14
- package/core/dist/runtime-v2/__tests__/activation-types-helpers.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/architecture-regression.test.js +180 -70
- package/core/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/barrel-io-cleanup.test.d.ts +12 -0
- package/core/dist/runtime-v2/__tests__/barrel-io-cleanup.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/__tests__/barrel-io-cleanup.test.js +46 -0
- package/core/dist/runtime-v2/__tests__/barrel-io-cleanup.test.js.map +1 -0
- package/core/dist/runtime-v2/__tests__/intake-to-internalization-bridge.test.js +1 -2
- package/core/dist/runtime-v2/__tests__/intake-to-internalization-bridge.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/internalization-orchestrator.test.js +8 -8
- package/core/dist/runtime-v2/__tests__/internalization-orchestrator.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/internalization-peer-runner-contracts.test.js +45 -80
- package/core/dist/runtime-v2/__tests__/internalization-peer-runner-contracts.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/internalization-state-machine.test.js +31 -130
- package/core/dist/runtime-v2/__tests__/internalization-state-machine.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/io-deletion.test.d.ts +12 -0
- package/core/dist/runtime-v2/__tests__/io-deletion.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/__tests__/io-deletion.test.js +92 -0
- package/core/dist/runtime-v2/__tests__/io-deletion.test.js.map +1 -0
- package/core/dist/runtime-v2/__tests__/ledger-codec.test.d.ts +2 -0
- package/core/dist/runtime-v2/__tests__/ledger-codec.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/__tests__/ledger-codec.test.js +429 -0
- package/core/dist/runtime-v2/__tests__/ledger-codec.test.js.map +1 -0
- package/core/dist/runtime-v2/__tests__/ledger-store.test.d.ts +2 -0
- package/core/dist/runtime-v2/__tests__/ledger-store.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/__tests__/ledger-store.test.js +65 -0
- package/core/dist/runtime-v2/__tests__/ledger-store.test.js.map +1 -0
- package/core/dist/runtime-v2/__tests__/pain-signal-observability.test.js +146 -0
- package/core/dist/runtime-v2/__tests__/pain-signal-observability.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/pain-signal-unification.test.d.ts +2 -0
- package/core/dist/runtime-v2/__tests__/pain-signal-unification.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/__tests__/pain-signal-unification.test.js +150 -0
- package/core/dist/runtime-v2/__tests__/pain-signal-unification.test.js.map +1 -0
- package/core/dist/runtime-v2/__tests__/pain-to-principle-service.test.js +0 -1
- package/core/dist/runtime-v2/__tests__/pain-to-principle-service.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/pitask-metadata.test.js +4 -4
- package/core/dist/runtime-v2/__tests__/pitask-metadata.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/proven-channel-baseline.test.js +2 -5
- package/core/dist/runtime-v2/__tests__/proven-channel-baseline.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/story-a-demo.test.js +2 -2
- package/core/dist/runtime-v2/__tests__/story-a-demo.test.js.map +1 -1
- package/core/dist/runtime-v2/activation/__tests__/activation-dispatcher.test.js +7 -10
- package/core/dist/runtime-v2/activation/__tests__/activation-dispatcher.test.js.map +1 -1
- package/core/dist/runtime-v2/activation/__tests__/approval-queue.test.js +1 -3
- package/core/dist/runtime-v2/activation/__tests__/approval-queue.test.js.map +1 -1
- package/core/dist/runtime-v2/activation/__tests__/approval-store-extended.test.js +4 -4
- package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store.test.js +6 -6
- package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store.test.js.map +1 -1
- package/core/dist/runtime-v2/activation/activation-dispatcher.d.ts.map +1 -1
- package/core/dist/runtime-v2/activation/activation-dispatcher.js +0 -1
- package/core/dist/runtime-v2/activation/activation-dispatcher.js.map +1 -1
- package/core/dist/runtime-v2/activation/activation-types.d.ts.map +1 -1
- package/core/dist/runtime-v2/activation/activation-types.js +0 -1
- package/core/dist/runtime-v2/activation/activation-types.js.map +1 -1
- package/core/dist/runtime-v2/adapter/__tests__/test-double-runtime-adapter.test.js +199 -0
- package/core/dist/runtime-v2/adapter/__tests__/test-double-runtime-adapter.test.js.map +1 -1
- package/core/dist/runtime-v2/adapter/pi-ai-runtime-adapter.d.ts.map +1 -1
- package/core/dist/runtime-v2/adapter/pi-ai-runtime-adapter.js +0 -2
- package/core/dist/runtime-v2/adapter/pi-ai-runtime-adapter.js.map +1 -1
- package/core/dist/runtime-v2/config/__tests__/pd-config-agent-binding.test.js +0 -7
- package/core/dist/runtime-v2/config/__tests__/pd-config-agent-binding.test.js.map +1 -1
- package/core/dist/runtime-v2/config/__tests__/pd-config-contract.test.js +5 -6
- package/core/dist/runtime-v2/config/__tests__/pd-config-contract.test.js.map +1 -1
- package/core/dist/runtime-v2/config/__tests__/pd-config-redaction-deep.test.js +0 -1
- package/core/dist/runtime-v2/config/__tests__/pd-config-redaction-deep.test.js.map +1 -1
- package/core/dist/runtime-v2/config/__tests__/pd-config-validation-edge-cases.test.js +0 -1
- package/core/dist/runtime-v2/config/__tests__/pd-config-validation-edge-cases.test.js.map +1 -1
- package/core/dist/runtime-v2/config/pd-config-defaults.d.ts.map +1 -1
- package/core/dist/runtime-v2/config/pd-config-defaults.js +0 -1
- package/core/dist/runtime-v2/config/pd-config-defaults.js.map +1 -1
- package/core/dist/runtime-v2/config/pd-config-types.d.ts +1 -1
- package/core/dist/runtime-v2/config/pd-config-types.d.ts.map +1 -1
- package/core/dist/runtime-v2/config/pd-config-types.js +0 -1
- package/core/dist/runtime-v2/config/pd-config-types.js.map +1 -1
- package/core/dist/runtime-v2/diagnostician/__tests__/diag-rootcause-output.test.js +156 -0
- package/core/dist/runtime-v2/diagnostician/__tests__/diag-rootcause-output.test.js.map +1 -1
- 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 +0 -2
- package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
- package/core/dist/runtime-v2/index.d.ts +2 -9
- package/core/dist/runtime-v2/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/index.js +5 -6
- package/core/dist/runtime-v2/index.js.map +1 -1
- package/core/dist/runtime-v2/internalization/__tests__/diag-chain-e2e.test.js +0 -3
- package/core/dist/runtime-v2/internalization/__tests__/diag-chain-e2e.test.js.map +1 -1
- package/core/dist/runtime-v2/internalization/__tests__/internalization-job-graph.test.js +4 -36
- package/core/dist/runtime-v2/internalization/__tests__/internalization-job-graph.test.js.map +1 -1
- package/core/dist/runtime-v2/internalization/__tests__/peer-runner-lineage-injection.test.js +0 -1
- package/core/dist/runtime-v2/internalization/__tests__/peer-runner-lineage-injection.test.js.map +1 -1
- package/core/dist/runtime-v2/internalization/__tests__/queue-actionability.test.js +0 -15
- package/core/dist/runtime-v2/internalization/__tests__/queue-actionability.test.js.map +1 -1
- package/core/dist/runtime-v2/internalization/index.d.ts +1 -7
- package/core/dist/runtime-v2/internalization/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/index.js +1 -4
- package/core/dist/runtime-v2/internalization/index.js.map +1 -1
- package/core/dist/runtime-v2/internalization/internalization-job-graph.d.ts +7 -18
- package/core/dist/runtime-v2/internalization/internalization-job-graph.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/internalization-job-graph.js +7 -24
- package/core/dist/runtime-v2/internalization/internalization-job-graph.js.map +1 -1
- package/core/dist/runtime-v2/internalization/internalization-state-machine.d.ts +3 -2
- package/core/dist/runtime-v2/internalization/internalization-state-machine.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/internalization-state-machine.js +4 -3
- package/core/dist/runtime-v2/internalization/internalization-state-machine.js.map +1 -1
- package/core/dist/runtime-v2/internalization/peer-runner-contracts.d.ts +6 -6
- package/core/dist/runtime-v2/internalization/peer-runner-contracts.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/peer-runner-contracts.js +0 -3
- package/core/dist/runtime-v2/internalization/peer-runner-contracts.js.map +1 -1
- package/core/dist/runtime-v2/principle-tree/ledger-codec.d.ts +30 -0
- package/core/dist/runtime-v2/principle-tree/ledger-codec.d.ts.map +1 -0
- package/core/dist/runtime-v2/principle-tree/ledger-codec.js +154 -0
- package/core/dist/runtime-v2/principle-tree/ledger-codec.js.map +1 -0
- package/core/dist/runtime-v2/recovery-sweep-service.d.ts.map +1 -1
- package/core/dist/runtime-v2/recovery-sweep-service.js +2 -2
- package/core/dist/runtime-v2/recovery-sweep-service.js.map +1 -1
- package/core/dist/runtime-v2/store/candidate/__tests__/recommendation-kind-resolver.test.js +1 -1
- package/core/dist/runtime-v2/store/candidate/__tests__/recommendation-kind-resolver.test.js.map +1 -1
- package/core/dist/runtime-v2/types/index.d.ts +2 -0
- package/core/dist/runtime-v2/types/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/types/index.js +1 -0
- package/core/dist/runtime-v2/types/index.js.map +1 -1
- package/core/dist/runtime-v2/types/ledger-store.d.ts +101 -0
- package/core/dist/runtime-v2/types/ledger-store.d.ts.map +1 -0
- package/core/dist/runtime-v2/types/ledger-store.js +15 -0
- package/core/dist/runtime-v2/types/ledger-store.js.map +1 -0
- package/core/dist/runtime-v2/types/pain-signal.d.ts +5 -3
- package/core/dist/runtime-v2/types/pain-signal.d.ts.map +1 -1
- package/core/dist/runtime-v2/types/pain-signal.js +23 -3
- package/core/dist/runtime-v2/types/pain-signal.js.map +1 -1
- package/core/package.json +3 -3
- package/dist/installer.d.ts.map +1 -1
- package/dist/installer.js +42 -5
- package/dist/installer.js.map +1 -1
- package/dist/mvp-config.d.ts +1 -1
- package/dist/mvp-config.d.ts.map +1 -1
- package/dist/mvp-config.js +4 -8
- package/dist/mvp-config.js.map +1 -1
- package/dist/utils/env.d.ts.map +1 -1
- package/dist/utils/env.js +10 -4
- package/dist/utils/env.js.map +1 -1
- package/package.json +1 -1
- package/pd-cli/dist/commands/__tests__/legacy-cleanup.test.js +11 -3
- package/pd-cli/dist/commands/__tests__/legacy-cleanup.test.js.map +1 -1
- package/pd-cli/dist/commands/build-trajectory-evidence.d.ts.map +1 -1
- package/pd-cli/dist/commands/build-trajectory-evidence.js +11 -5
- package/pd-cli/dist/commands/build-trajectory-evidence.js.map +1 -1
- package/pd-cli/dist/commands/candidate.d.ts.map +1 -1
- package/pd-cli/dist/commands/candidate.js +2 -1
- package/pd-cli/dist/commands/candidate.js.map +1 -1
- package/pd-cli/dist/commands/health.d.ts.map +1 -1
- package/pd-cli/dist/commands/health.js +2 -1
- package/pd-cli/dist/commands/health.js.map +1 -1
- package/pd-cli/dist/commands/runtime-activation.js.map +1 -1
- package/pd-cli/dist/commands/runtime-internalization-integrity.d.ts.map +1 -1
- package/pd-cli/dist/commands/runtime-internalization-integrity.js +3 -1
- package/pd-cli/dist/commands/runtime-internalization-integrity.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 -61
- package/pd-cli/dist/commands/runtime-internalization-run-once.js.map +1 -1
- package/pd-cli/dist/commands/runtime-uat.d.ts.map +1 -1
- package/pd-cli/dist/commands/runtime-uat.js +4 -1
- package/pd-cli/dist/commands/runtime-uat.js.map +1 -1
- package/pd-cli/dist/legacy/session-history-import.js +7 -5
- package/pd-cli/dist/legacy/session-history-import.js.map +1 -1
- package/pd-cli/dist/services/__tests__/runtime-adapter-resolver.test.js +13 -2
- package/pd-cli/dist/services/__tests__/runtime-adapter-resolver.test.js.map +1 -1
- package/pd-cli/dist/services/pain-flood-simulation-runner.d.ts.map +1 -1
- package/pd-cli/dist/services/pain-flood-simulation-runner.js +6 -2
- package/pd-cli/dist/services/pain-flood-simulation-runner.js.map +1 -1
- package/pd-cli/dist/services/runtime-adapter-resolver.d.ts.map +1 -1
- package/pd-cli/dist/services/runtime-adapter-resolver.js +6 -4
- package/pd-cli/dist/services/runtime-adapter-resolver.js.map +1 -1
- package/plugin/dist/commands/capabilities.js +3 -2
- package/plugin/dist/commands/disable-impl.js +1 -1
- package/plugin/dist/commands/focus.js +10 -2
- package/plugin/dist/commands/rollback-impl.js +1 -1
- package/plugin/dist/commands/thinking-os.js +5 -1
- package/plugin/dist/core/correction-cue-learner.js +2 -0
- package/plugin/dist/core/event-log.js +17 -10
- package/plugin/dist/core/focus-history.js +1 -1
- package/plugin/dist/core/hygiene/tracker.js +3 -3
- package/plugin/dist/core/principle-compiler/compiler.js +2 -0
- package/plugin/dist/core/replay-engine.js +1 -1
- package/plugin/dist/core/rule-host.js +3 -1
- package/plugin/dist/core/schema/schema-definitions.js +3 -0
- package/plugin/dist/core/thinking-os-parser.js +13 -4
- package/plugin/dist/core/trajectory-types.d.ts +5 -0
- package/plugin/dist/core/trajectory.d.ts +1 -0
- package/plugin/dist/core/trajectory.js +29 -8
- package/plugin/dist/hooks/after-tool-call-helpers.d.ts +5 -0
- package/plugin/dist/hooks/after-tool-call-helpers.js +64 -0
- package/plugin/dist/hooks/llm.d.ts +8 -0
- package/plugin/dist/hooks/llm.js +30 -0
- package/plugin/dist/hooks/trajectory-collector.d.ts +20 -4
- package/plugin/dist/hooks/trajectory-collector.js +95 -156
- package/plugin/dist/hooks/trajectory-evidence.js +6 -2
- package/plugin/dist/index.js +7 -2
- package/plugin/dist/openclaw-sdk.d.ts +5 -1
- package/plugin/dist/service/evolution-worker.js +7 -3
- package/plugin/dist/service/internalization-auto-consumer-service.js +2 -1
- package/plugin/dist/service/runtime-summary-service.js +8 -1
- package/plugin/dist/service/workflow-watchdog.js +2 -1
- package/plugin/dist/utils/retry.js +7 -2
- package/plugin/dist/utils/session-key.js +4 -1
- package/core/dist/io.d.ts +0 -35
- package/core/dist/io.d.ts.map +0 -1
- package/core/dist/io.js +0 -95
- package/core/dist/io.js.map +0 -1
- package/core/dist/runtime-v2/__tests__/trainer-output-validator.test.d.ts +0 -2
- package/core/dist/runtime-v2/__tests__/trainer-output-validator.test.d.ts.map +0 -1
- package/core/dist/runtime-v2/__tests__/trainer-output-validator.test.js +0 -257
- package/core/dist/runtime-v2/__tests__/trainer-output-validator.test.js.map +0 -1
- package/core/dist/runtime-v2/__tests__/trainer-runner-vslice.test.d.ts +0 -2
- package/core/dist/runtime-v2/__tests__/trainer-runner-vslice.test.d.ts.map +0 -1
- package/core/dist/runtime-v2/__tests__/trainer-runner-vslice.test.js +0 -514
- package/core/dist/runtime-v2/__tests__/trainer-runner-vslice.test.js.map +0 -1
- package/core/dist/runtime-v2/internalization/__tests__/trainer-prompt-builder.test.d.ts +0 -2
- package/core/dist/runtime-v2/internalization/__tests__/trainer-prompt-builder.test.d.ts.map +0 -1
- package/core/dist/runtime-v2/internalization/__tests__/trainer-prompt-builder.test.js +0 -141
- package/core/dist/runtime-v2/internalization/__tests__/trainer-prompt-builder.test.js.map +0 -1
- package/core/dist/runtime-v2/internalization/trainer-output.d.ts +0 -122
- package/core/dist/runtime-v2/internalization/trainer-output.d.ts.map +0 -1
- package/core/dist/runtime-v2/internalization/trainer-output.js +0 -223
- package/core/dist/runtime-v2/internalization/trainer-output.js.map +0 -1
- package/core/dist/runtime-v2/internalization/trainer-prompt-builder.d.ts +0 -24
- package/core/dist/runtime-v2/internalization/trainer-prompt-builder.d.ts.map +0 -1
- package/core/dist/runtime-v2/internalization/trainer-prompt-builder.js +0 -57
- package/core/dist/runtime-v2/internalization/trainer-prompt-builder.js.map +0 -1
- package/core/dist/runtime-v2/internalization/trainer-runner.d.ts +0 -76
- package/core/dist/runtime-v2/internalization/trainer-runner.d.ts.map +0 -1
- package/core/dist/runtime-v2/internalization/trainer-runner.js +0 -540
- package/core/dist/runtime-v2/internalization/trainer-runner.js.map +0 -1
- package/plugin/dist/core/external-training-contract.d.ts +0 -276
- package/plugin/dist/core/external-training-contract.js +0 -269
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"principle-tree-ledger.js","sourceRoot":"","sources":["../src/principle-tree-ledger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"principle-tree-ledger.js","sourceRoot":"","sources":["../src/principle-tree-ledger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAe7B,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,oEAAoE;AACpE,OAAO,EACL,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,eAAe,GAChB,MAAM,6CAA6C,CAAC;AAgBrD,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B,MAAM,uBAAuB,GAAG,+BAA+B,CAAC;AAEhE,8EAA8E;AAC9E,8CAA8C;AAC9C,8EAA8E;AAC9E,EAAE;AACF,6EAA6E;AAC7E,4EAA4E;AAC5E,+BAA+B;AAC/B,EAAE;AACF,2EAA2E;AAC3E,4EAA4E;AAE5E,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEhC,SAAS,mBAAmB,CAAC,QAAgB,EAAE,IAAY;IACzD,MAAM,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAClC,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAExC,IAAI,SAA4B,CAAC;IACjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,kBAAkB,EAAE,OAAO,EAAE,EAAE,CAAC;QAC9D,IAAI,CAAC;YACH,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACjC,OAAO;QACT,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,GAAG,GAAY,CAAC;YACzB,MAAM,EAAC,IAAI,EAAC,GAAI,GAAyB,CAAC;YAC1C,8CAA8C;YAC9C,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC9D,IAAI,OAAO,GAAG,kBAAkB,GAAG,CAAC,EAAE,CAAC;oBACrC,MAAM,KAAK,GAAG,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;oBAC1D,6DAA6D;oBAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;oBACrC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;wBAC9B,IAAI,CAAC;4BAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;wBAAC,CAAC;wBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;oBACxD,CAAC;gBACH,CAAC;gBACD,SAAS;YACX,CAAC;YACD,0CAA0C;YAC1C,MAAM;QACR,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,IAAI,CAAC;QAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,SAAS,IAAI,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;AACrE,CAAC;AAED,8EAA8E;AAC9E,0DAA0D;AAC1D,8EAA8E;AAE9E,SAAS,iBAAiB,CAAC,QAAgB;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAgB;IAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,CAAC;IACxD,CAAC;IACD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACtC,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,CAAC;QACxD,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAC;QAC9C,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,CAAC;IACxD,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,+DAA+D;AAC/D,8EAA8E;AAE9E;;;GAGG;AACH,SAAS,YAAY,CAAI,QAAgB,EAAE,MAAuC;IAChF,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,mBAAmB,CAAC,QAAQ,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;IACtD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,kBAAkB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,KAAwB;IACnE,YAAY,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE;QACjC,OAAO,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;QAC5C,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAC5B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAgB,EAAE,SAA0B;IAC/E,OAAO,YAAY,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;QACtC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,WAAmB,EAAE,OAAiC;IACtG,OAAO,YAAY,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;QACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,WAAW,IAAI,CAAC,CAAC;QACpF,MAAM,IAAI,GAAoB;YAC5B,GAAG,QAAQ;YACX,GAAG,OAAO;YACV,EAAE,EAAE,WAAW;YACf,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO;YAC5E,yBAAyB,EAAE,OAAO,CAAC,yBAAyB;gBAC1D,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,yBAAyB;YACzF,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;gBAC5C,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB;SAC5E,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,QAAgB,EAAE,WAAmB,EAAE,OAA8B;IAC/G,OAAO,YAAY,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;QACtC,MAAM,IAAI,GAA0B,EAAE,GAAG,OAAO,EAAE,WAAW,EAAE,CAAC;QAChE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -39,7 +39,7 @@ describe('makeIdempotencyKey', () => {
|
|
|
39
39
|
});
|
|
40
40
|
it('handles all valid channels', () => {
|
|
41
41
|
const channels = [
|
|
42
|
-
'prompt', 'defer_archive', 'skill', 'code_tool_hook',
|
|
42
|
+
'prompt', 'defer_archive', 'skill', 'code_tool_hook',
|
|
43
43
|
];
|
|
44
44
|
for (const channel of channels) {
|
|
45
45
|
const key = makeIdempotencyKey('art-001', channel);
|
|
@@ -73,9 +73,6 @@ describe('isLowRiskChannel', () => {
|
|
|
73
73
|
it('returns false for code_tool_hook channel', () => {
|
|
74
74
|
expect(isLowRiskChannel('code_tool_hook')).toBe(false);
|
|
75
75
|
});
|
|
76
|
-
it('returns false for model_training channel', () => {
|
|
77
|
-
expect(isLowRiskChannel('model_training')).toBe(false);
|
|
78
|
-
});
|
|
79
76
|
it('LOW_RISK_CHANNELS contains exactly prompt and defer_archive', () => {
|
|
80
77
|
expect(LOW_RISK_CHANNELS).toHaveLength(2);
|
|
81
78
|
expect(LOW_RISK_CHANNELS).toContain('prompt');
|
|
@@ -83,7 +80,7 @@ describe('isLowRiskChannel', () => {
|
|
|
83
80
|
});
|
|
84
81
|
it('isLowRiskChannel matches LOW_RISK_CHANNELS membership', () => {
|
|
85
82
|
const allChannels = [
|
|
86
|
-
'prompt', 'defer_archive', 'skill', 'code_tool_hook',
|
|
83
|
+
'prompt', 'defer_archive', 'skill', 'code_tool_hook',
|
|
87
84
|
];
|
|
88
85
|
for (const channel of allChannels) {
|
|
89
86
|
expect(isLowRiskChannel(channel)).toBe(LOW_RISK_CHANNELS.includes(channel));
|
|
@@ -107,16 +104,12 @@ describe('getChannelRiskLevel', () => {
|
|
|
107
104
|
it('returns high for code_tool_hook channel', () => {
|
|
108
105
|
expect(getChannelRiskLevel('code_tool_hook')).toBe('high');
|
|
109
106
|
});
|
|
110
|
-
it('returns critical for model_training channel', () => {
|
|
111
|
-
expect(getChannelRiskLevel('model_training')).toBe('critical');
|
|
112
|
-
});
|
|
113
107
|
it('returns high for unknown channel (safe default)', () => {
|
|
114
108
|
expect(getChannelRiskLevel('unknown')).toBe('high');
|
|
115
109
|
});
|
|
116
110
|
it('HIGH_RISK_CHANNEL_MAP has correct entries', () => {
|
|
117
111
|
expect(HIGH_RISK_CHANNEL_MAP.skill).toBe('medium');
|
|
118
112
|
expect(HIGH_RISK_CHANNEL_MAP.code_tool_hook).toBe('high');
|
|
119
|
-
expect(HIGH_RISK_CHANNEL_MAP.model_training).toBe('critical');
|
|
120
113
|
});
|
|
121
114
|
it('getChannelRiskLevel returns low for LOW_RISK_CHANNELS', () => {
|
|
122
115
|
for (const channel of LOW_RISK_CHANNELS) {
|
|
@@ -128,13 +121,12 @@ describe('getChannelRiskLevel', () => {
|
|
|
128
121
|
expect(getChannelRiskLevel(channel)).toBe(riskLevel);
|
|
129
122
|
}
|
|
130
123
|
});
|
|
131
|
-
it('risk levels are ordered: low < medium < high
|
|
124
|
+
it('risk levels are ordered: low < medium < high', () => {
|
|
132
125
|
// This is a semantic ordering test, not a numeric comparison
|
|
133
|
-
const levels = ['low', 'medium', 'high'
|
|
126
|
+
const levels = ['low', 'medium', 'high'];
|
|
134
127
|
expect(getChannelRiskLevel('prompt')).toBe(levels[0]);
|
|
135
128
|
expect(getChannelRiskLevel('skill')).toBe(levels[1]);
|
|
136
129
|
expect(getChannelRiskLevel('code_tool_hook')).toBe(levels[2]);
|
|
137
|
-
expect(getChannelRiskLevel('model_training')).toBe(levels[3]);
|
|
138
130
|
});
|
|
139
131
|
});
|
|
140
132
|
// ── mapConfidenceToLabel Tests ───────────────────────────────────────────────
|
|
@@ -211,12 +203,12 @@ describe('constants', () => {
|
|
|
211
203
|
});
|
|
212
204
|
it('all InternalizationChannel values are covered', () => {
|
|
213
205
|
const allChannels = [
|
|
214
|
-
'prompt', 'defer_archive', 'skill', 'code_tool_hook',
|
|
206
|
+
'prompt', 'defer_archive', 'skill', 'code_tool_hook',
|
|
215
207
|
];
|
|
216
208
|
// Every channel should have a defined risk level
|
|
217
209
|
for (const channel of allChannels) {
|
|
218
210
|
const riskLevel = getChannelRiskLevel(channel);
|
|
219
|
-
expect(['low', 'medium', 'high'
|
|
211
|
+
expect(['low', 'medium', 'high']).toContain(riskLevel);
|
|
220
212
|
}
|
|
221
213
|
});
|
|
222
214
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activation-types-helpers.test.js","sourceRoot":"","sources":["../../../src/runtime-v2/__tests__/activation-types-helpers.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,mCAAmC,EACnC,wBAAwB,GACzB,MAAM,gCAAgC,CAAC;AAIxC,iFAAiF;AAEjF,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACxE,MAAM,CAAC,kBAAkB,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACxF,MAAM,CAAC,kBAAkB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,kBAAkB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACxF,MAAM,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAClG,MAAM,CAAC,kBAAkB,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,0EAA0E;QAC1E,MAAM,CAAC,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,QAAQ,GAA6B;YACzC,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,gBAAgB
|
|
1
|
+
{"version":3,"file":"activation-types-helpers.test.js","sourceRoot":"","sources":["../../../src/runtime-v2/__tests__/activation-types-helpers.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
* Add entries here whenever a new service/read-model boundary is established.
|
|
6
6
|
*/
|
|
7
7
|
import { describe, it, expect, beforeAll } from 'vitest';
|
|
8
|
+
import * as fsSync from 'fs';
|
|
9
|
+
import * as pathSync from 'path';
|
|
8
10
|
// ── Source-file existence ──────────────────────────────────────────────────
|
|
9
11
|
const REQUIRED_SOURCE_FILES = [
|
|
10
12
|
'pain-to-principle-service.ts',
|
|
@@ -271,7 +273,6 @@ const KNOWN_PLUGIN_CORE_FILES = new Set([
|
|
|
271
273
|
'focus-history.ts',
|
|
272
274
|
'training-program.ts',
|
|
273
275
|
'replay-engine.ts',
|
|
274
|
-
'external-training-contract.ts',
|
|
275
276
|
'merge-gate-audit.ts',
|
|
276
277
|
'control-ui-db.ts',
|
|
277
278
|
'thinking-models.ts',
|
|
@@ -359,7 +360,8 @@ describe('PRI-212 plugin core anti-growth guard', () => {
|
|
|
359
360
|
// PRI-448: Removed local-worker-routing.ts, promotion-gate.ts,
|
|
360
361
|
// model-training-registry.ts, model-deployment-registry.ts,
|
|
361
362
|
// shadow-observation-registry.ts (98 → 93)
|
|
362
|
-
|
|
363
|
+
// PRI-449: Removed external-training-contract.ts (93 → 92)
|
|
364
|
+
expect(KNOWN_PLUGIN_CORE_FILES.size).toBe(92);
|
|
363
365
|
});
|
|
364
366
|
});
|
|
365
367
|
const REQUIRED_TEST_FILES = [
|
|
@@ -1865,70 +1867,6 @@ describe('PRI-RR RolloutReviewerRunner boundary', () => {
|
|
|
1865
1867
|
expect(src).toContain('RolloutReviewerOutputV1Schema');
|
|
1866
1868
|
});
|
|
1867
1869
|
});
|
|
1868
|
-
// ── PRI-116: TrainerRunner boundary guards ──────────────────────────────────
|
|
1869
|
-
describe('PRI-116 TrainerRunner boundary', () => {
|
|
1870
|
-
it('trainer source files exist in internalization directory', async () => {
|
|
1871
|
-
const { existsSync } = await import('node:fs');
|
|
1872
|
-
const { resolve } = await import('node:path');
|
|
1873
|
-
expect(existsSync(resolve(__dirname, '..', 'internalization', 'trainer-runner.ts'))).toBe(true);
|
|
1874
|
-
expect(existsSync(resolve(__dirname, '..', 'internalization', 'trainer-output.ts'))).toBe(true);
|
|
1875
|
-
expect(existsSync(resolve(__dirname, '..', 'internalization', 'trainer-prompt-builder.ts'))).toBe(true);
|
|
1876
|
-
});
|
|
1877
|
-
it('trainer test file exists', async () => {
|
|
1878
|
-
const { existsSync } = await import('node:fs');
|
|
1879
|
-
const { resolve } = await import('node:path');
|
|
1880
|
-
expect(existsSync(resolve(__dirname, 'trainer-runner-vslice.test.ts'))).toBe(true);
|
|
1881
|
-
});
|
|
1882
|
-
it('CORE_NO_FORBIDDEN_IMPORTS: trainer-output.ts has no openclaw-plugin, fs, path imports', async () => {
|
|
1883
|
-
const { readFileSync } = await import('node:fs');
|
|
1884
|
-
const { resolve } = await import('node:path');
|
|
1885
|
-
const src = readFileSync(resolve(__dirname, '..', 'internalization', 'trainer-output.ts'), 'utf-8');
|
|
1886
|
-
expect(src).not.toContain('openclaw-plugin');
|
|
1887
|
-
expect(src).not.toContain('node:fs');
|
|
1888
|
-
expect(src).not.toContain('node:path');
|
|
1889
|
-
});
|
|
1890
|
-
it('CORE_NO_FORBIDDEN_IMPORTS: trainer-runner.ts has no openclaw-plugin, RolloutReviewerRunner, nocturnal-trinity imports', async () => {
|
|
1891
|
-
const { readFileSync } = await import('node:fs');
|
|
1892
|
-
const { resolve } = await import('node:path');
|
|
1893
|
-
const src = readFileSync(resolve(__dirname, '..', 'internalization', 'trainer-runner.ts'), 'utf-8');
|
|
1894
|
-
expect(src).not.toContain('openclaw-plugin');
|
|
1895
|
-
expect(src).not.toContain('RolloutReviewerRunner');
|
|
1896
|
-
expect(src).not.toContain('nocturnal-trinity');
|
|
1897
|
-
expect(src).not.toContain('InternalizationOrchestrator');
|
|
1898
|
-
expect(src).not.toContain('createTask');
|
|
1899
|
-
expect(src).not.toContain('enqueueTask');
|
|
1900
|
-
});
|
|
1901
|
-
it('CORE_NO_SCHEDULING: trainer-runner.ts has no node:fs, node:cron imports', async () => {
|
|
1902
|
-
const { readFileSync } = await import('node:fs');
|
|
1903
|
-
const { resolve } = await import('node:path');
|
|
1904
|
-
const src = readFileSync(resolve(__dirname, '..', 'internalization', 'trainer-runner.ts'), 'utf-8');
|
|
1905
|
-
expect(src).not.toContain('node:fs');
|
|
1906
|
-
expect(src).not.toContain('node:cron');
|
|
1907
|
-
});
|
|
1908
|
-
it('BARREL_EXPORTS: internalization/index.ts exports TrainerRunner and TrainerOutput', async () => {
|
|
1909
|
-
const { readFileSync } = await import('node:fs');
|
|
1910
|
-
const { resolve } = await import('node:path');
|
|
1911
|
-
const src = readFileSync(resolve(__dirname, '..', 'internalization', 'index.ts'), 'utf-8');
|
|
1912
|
-
expect(src).toContain('TrainerRunner');
|
|
1913
|
-
expect(src).toContain('TrainerOutput');
|
|
1914
|
-
expect(src).toContain('DefaultTrainerValidator');
|
|
1915
|
-
});
|
|
1916
|
-
it('BARREL_EXPORTS: runtime-v2/index.ts exports TrainerRunner and TrainerOutput', async () => {
|
|
1917
|
-
const { readFileSync } = await import('node:fs');
|
|
1918
|
-
const { resolve } = await import('node:path');
|
|
1919
|
-
const src = readFileSync(resolve(__dirname, '..', 'index.ts'), 'utf-8');
|
|
1920
|
-
expect(src).toContain('TrainerRunner');
|
|
1921
|
-
expect(src).toContain('TrainerOutput');
|
|
1922
|
-
expect(src).toContain('DefaultTrainerValidator');
|
|
1923
|
-
});
|
|
1924
|
-
it('SCHEMA_REGISTRY: pi-ai-runtime-adapter.ts registers trainer-output-v1 schema', async () => {
|
|
1925
|
-
const { readFileSync } = await import('node:fs');
|
|
1926
|
-
const { resolve } = await import('node:path');
|
|
1927
|
-
const src = readFileSync(resolve(__dirname, '..', 'adapter', 'pi-ai-runtime-adapter.ts'), 'utf-8');
|
|
1928
|
-
expect(src).toContain('trainer-output-v1');
|
|
1929
|
-
expect(src).toContain('TrainerOutputV1Schema');
|
|
1930
|
-
});
|
|
1931
|
-
});
|
|
1932
1870
|
describe('PRI-114: correction-proposal boundary', () => {
|
|
1933
1871
|
it('CORE_PURE: correction-proposal.ts has zero infrastructure imports', async () => {
|
|
1934
1872
|
const { readFileSync } = await import('node:fs');
|
|
@@ -2491,7 +2429,8 @@ describe('PRI-139 L1 Hard Cap & LRU Eviction', () => {
|
|
|
2491
2429
|
it('LedgerPrinciple includes lastTriggeredAt field', async () => {
|
|
2492
2430
|
const { readFileSync } = await import('node:fs');
|
|
2493
2431
|
const { resolve } = await import('node:path');
|
|
2494
|
-
|
|
2432
|
+
// PRI-443: type moved to pure module
|
|
2433
|
+
const src = readFileSync(resolve(__dirname, '..', 'types', 'ledger-store.ts'), 'utf-8');
|
|
2495
2434
|
expect(src).toContain('lastTriggeredAt');
|
|
2496
2435
|
});
|
|
2497
2436
|
it('PruningHealthSummary includes activeL1Count and l1Cap fields', async () => {
|
|
@@ -3086,11 +3025,18 @@ describe('PRI-416: type single-ownership guards', () => {
|
|
|
3086
3025
|
});
|
|
3087
3026
|
it('HybridLedgerStore is defined exactly once in core/src/', () => {
|
|
3088
3027
|
const hits = findDefinitions(/export\s+interface\s+HybridLedgerStore\s*\{/);
|
|
3089
|
-
expect(hits).toEqual(['
|
|
3028
|
+
expect(hits).toEqual(['runtime-v2/types/ledger-store.ts']);
|
|
3090
3029
|
});
|
|
3091
|
-
it('atomicWriteFileSync is
|
|
3030
|
+
it('atomicWriteFileSync is NOT exported from any core/src/ file (PRI-443 Phase 4)', () => {
|
|
3031
|
+
// After PRI-443 Phase 4, atomicWriteFileSync is inlined as a PRIVATE helper
|
|
3032
|
+
// inside principle-tree-ledger.ts. It must NOT be exported from core.
|
|
3092
3033
|
const hits = findDefinitions(/export\s+function\s+atomicWriteFileSync\s*\(/);
|
|
3093
|
-
expect(hits).toEqual([
|
|
3034
|
+
expect(hits).toEqual([]);
|
|
3035
|
+
});
|
|
3036
|
+
it('atomicWriteFileSync is defined exactly once as a private function in principle-tree-ledger.ts (PRI-443 Phase 4)', () => {
|
|
3037
|
+
// The function is now a private (non-exported) helper inlined in principle-tree-ledger.ts
|
|
3038
|
+
const hits = findDefinitions(/function\s+atomicWriteFileSync\s*\(/);
|
|
3039
|
+
expect(hits).toEqual(['principle-tree-ledger.ts']);
|
|
3094
3040
|
});
|
|
3095
3041
|
});
|
|
3096
3042
|
// ── PRI-416: Barrel Cap Guards ────────────────────────────────────────────────
|
|
@@ -3118,4 +3064,168 @@ describe('PRI-416: barrel cap guards', () => {
|
|
|
3118
3064
|
expect(exportLines.length).toBeLessThanOrEqual(BARREL_MAX_EXPORT_LINES);
|
|
3119
3065
|
});
|
|
3120
3066
|
});
|
|
3067
|
+
// ── PRI-443: Pure module boundary guards ──────────────────────────────────────
|
|
3068
|
+
//
|
|
3069
|
+
// Phases 1-3 extracted pure types/codecs/schema out of I/O modules. These guards
|
|
3070
|
+
// ensure those pure modules never regress to importing fs/path, and that the
|
|
3071
|
+
// runtime-v2 barrel never re-exports I/O functions from principle-tree-ledger.
|
|
3072
|
+
describe('PRI-443: pure module boundary guards', () => {
|
|
3073
|
+
const FORBIDDEN_PURE_IMPORTS = [
|
|
3074
|
+
"from 'fs'",
|
|
3075
|
+
'from "fs"',
|
|
3076
|
+
"from 'node:fs'",
|
|
3077
|
+
'from "node:fs"',
|
|
3078
|
+
"from 'path'",
|
|
3079
|
+
'from "path"',
|
|
3080
|
+
"from 'node:path'",
|
|
3081
|
+
'from "node:path"',
|
|
3082
|
+
];
|
|
3083
|
+
async function readSrc(relPath) {
|
|
3084
|
+
const fsMod = await import('fs'); // eslint-disable-line @typescript-eslint/consistent-type-imports
|
|
3085
|
+
const pathMod = await import('path'); // eslint-disable-line @typescript-eslint/consistent-type-imports
|
|
3086
|
+
const full = pathMod.resolve(__dirname, '..', relPath);
|
|
3087
|
+
return fsMod.readFileSync(full, 'utf-8');
|
|
3088
|
+
}
|
|
3089
|
+
it('runtime-v2/types/ledger-store.ts has zero fs/path imports (pure types module)', async () => {
|
|
3090
|
+
const src = await readSrc('types/ledger-store.ts');
|
|
3091
|
+
for (const pat of FORBIDDEN_PURE_IMPORTS) {
|
|
3092
|
+
expect(src).not.toContain(pat);
|
|
3093
|
+
}
|
|
3094
|
+
});
|
|
3095
|
+
it('runtime-v2/principle-tree/ledger-codec.ts has zero fs/path imports (pure codec module)', async () => {
|
|
3096
|
+
const src = await readSrc('principle-tree/ledger-codec.ts');
|
|
3097
|
+
for (const pat of FORBIDDEN_PURE_IMPORTS) {
|
|
3098
|
+
expect(src).not.toContain(pat);
|
|
3099
|
+
}
|
|
3100
|
+
});
|
|
3101
|
+
it('runtime-v2/types/pain-signal.ts has zero fs/path imports (pure schema module)', async () => {
|
|
3102
|
+
const src = await readSrc('types/pain-signal.ts');
|
|
3103
|
+
for (const pat of FORBIDDEN_PURE_IMPORTS) {
|
|
3104
|
+
expect(src).not.toContain(pat);
|
|
3105
|
+
}
|
|
3106
|
+
});
|
|
3107
|
+
it('runtime-v2/index.ts barrel does NOT export I/O functions from principle-tree-ledger', async () => {
|
|
3108
|
+
const src = await readSrc('index.ts');
|
|
3109
|
+
// I/O functions must not be re-exported through the pure-types barrel.
|
|
3110
|
+
expect(src).not.toMatch(/export\s+\{[^}]*\bloadLedger\b[^}]*\}\s*from\s*['"]\.\.\/principle-tree-ledger/);
|
|
3111
|
+
expect(src).not.toMatch(/export\s+\{[^}]*\bsaveLedger\b[^}]*\}\s*from\s*['"]\.\.\/principle-tree-ledger/);
|
|
3112
|
+
expect(src).not.toMatch(/export\s+\{[^}]*\bgetLedgerFilePathPublic\b[^}]*\}\s*from\s*['"]\.\.\/principle-tree-ledger/);
|
|
3113
|
+
expect(src).not.toMatch(/export\s+\{[^}]*\bupdatePrinciple\b[^}]*\}\s*from\s*['"]\.\.\/principle-tree-ledger/);
|
|
3114
|
+
expect(src).not.toMatch(/export\s+\{[^}]*\batomicWriteFileSync\b[^}]*\}\s*from\s*['"]\.\.\/principle-tree-ledger/);
|
|
3115
|
+
});
|
|
3116
|
+
it('runtime-v2/index.ts barrel re-exports LedgerTreeStore type from pure types module, not from principle-tree-ledger', async () => {
|
|
3117
|
+
const src = await readSrc('index.ts');
|
|
3118
|
+
// The type must come from the pure types module (./types/ledger-store.js),
|
|
3119
|
+
// NOT from the I/O module (../principle-tree-ledger.js).
|
|
3120
|
+
expect(src).toMatch(/export\s+type\s+\{\s*LedgerTreeStore\s*\}\s*from\s*['"]\.\/types\/ledger-store\.js['"]/);
|
|
3121
|
+
expect(src).not.toMatch(/export\s+type\s+\{\s*LedgerTreeStore\s*\}\s*from\s*['"]\.\.\/principle-tree-ledger\.js['"]/);
|
|
3122
|
+
});
|
|
3123
|
+
});
|
|
3124
|
+
// ── PRI-450: Core I/O whitelist guard ──────────────────────────────────────────
|
|
3125
|
+
//
|
|
3126
|
+
// Scans all production (.ts, non-test) files under packages/principles-core/src/
|
|
3127
|
+
// for fs/path imports and verifies they match an explicit whitelist. Any new file
|
|
3128
|
+
// that needs I/O must be added to ALLOWED_IO_FILES here — otherwise CI fails.
|
|
3129
|
+
// This forces developers to explain "why does this file need I/O?" in their PR.
|
|
3130
|
+
describe('PRI-450: core I/O whitelist guard', () => {
|
|
3131
|
+
// Whitelist of production files allowed to import fs/path.
|
|
3132
|
+
// Paths are relative to packages/principles-core/src/.
|
|
3133
|
+
const ALLOWED_IO_FILES = new Set([
|
|
3134
|
+
'principle-tree-ledger.ts',
|
|
3135
|
+
'evolution-store.ts',
|
|
3136
|
+
'trajectory-store.ts',
|
|
3137
|
+
'workflow-funnel-loader.ts',
|
|
3138
|
+
'runtime-v2/store/sqlite-connection.ts',
|
|
3139
|
+
'runtime-v2/store/runtime-state-manager.ts',
|
|
3140
|
+
'runtime-v2/adapter/openclaw-cli-runtime-adapter.ts',
|
|
3141
|
+
'runtime-v2/candidate-audit.ts',
|
|
3142
|
+
'runtime-v2/pain-signal-observability.ts',
|
|
3143
|
+
'runtime-v2/internalization-chain-integrity-read-model.ts',
|
|
3144
|
+
'runtime-v2/internalization-integrity-remediation.ts',
|
|
3145
|
+
'runtime-v2/operator-health-read-model.ts',
|
|
3146
|
+
'runtime-v2/pain-chain-read-model.ts',
|
|
3147
|
+
'runtime-v2/pruning-read-model.ts',
|
|
3148
|
+
'runtime-v2/pruning-review-log.ts',
|
|
3149
|
+
'runtime-v2/schema-conformance-read-model.ts',
|
|
3150
|
+
]);
|
|
3151
|
+
// Extract all import module paths from source code.
|
|
3152
|
+
// Handles: import ... from 'mod', import 'mod' (side-effect), and multiline imports.
|
|
3153
|
+
// Reuses the same pattern proven in the PRI-215 extractImportModulePaths helper.
|
|
3154
|
+
function extractImportPaths(src) {
|
|
3155
|
+
const paths = [];
|
|
3156
|
+
for (const m of src.matchAll(/import\s+[\s\S]*?from\s+['"]([^'"]+)['"]/g)) {
|
|
3157
|
+
if (m[1] != null)
|
|
3158
|
+
paths.push(m[1]);
|
|
3159
|
+
}
|
|
3160
|
+
for (const m of src.matchAll(/import\s+['"]([^'"]+)['"]/g)) {
|
|
3161
|
+
if (m[1] != null && !paths.includes(m[1]))
|
|
3162
|
+
paths.push(m[1]);
|
|
3163
|
+
}
|
|
3164
|
+
return paths;
|
|
3165
|
+
}
|
|
3166
|
+
// Check if any import path references fs or path (including sub-paths like fs/promises).
|
|
3167
|
+
function importsFsOrPath(src) {
|
|
3168
|
+
const paths = extractImportPaths(src);
|
|
3169
|
+
return paths.some((p) => p === 'fs' || p.startsWith('fs/') ||
|
|
3170
|
+
p === 'node:fs' || p.startsWith('node:fs/') ||
|
|
3171
|
+
p === 'path' || p.startsWith('path/') ||
|
|
3172
|
+
p === 'node:path' || p.startsWith('node:path/'));
|
|
3173
|
+
}
|
|
3174
|
+
function collectTsFiles(dir, acc) {
|
|
3175
|
+
const entries = fsSync.readdirSync(dir, { withFileTypes: true });
|
|
3176
|
+
for (const entry of entries) {
|
|
3177
|
+
const fullPath = pathSync.join(dir, entry.name);
|
|
3178
|
+
if (entry.isDirectory()) {
|
|
3179
|
+
collectTsFiles(fullPath, acc);
|
|
3180
|
+
}
|
|
3181
|
+
else if (entry.isFile() &&
|
|
3182
|
+
entry.name.endsWith('.ts') &&
|
|
3183
|
+
!entry.name.endsWith('.test.ts') &&
|
|
3184
|
+
!entry.name.endsWith('.spec.ts')) {
|
|
3185
|
+
acc.push(fullPath);
|
|
3186
|
+
}
|
|
3187
|
+
}
|
|
3188
|
+
}
|
|
3189
|
+
it('core/src/ production files: only whitelisted files import fs/path', () => {
|
|
3190
|
+
const coreSrcDir = pathSync.resolve(__dirname, '..', '..');
|
|
3191
|
+
const allFiles = [];
|
|
3192
|
+
collectTsFiles(coreSrcDir, allFiles);
|
|
3193
|
+
const violations = [];
|
|
3194
|
+
for (const filePath of allFiles) {
|
|
3195
|
+
const content = fsSync.readFileSync(filePath, 'utf-8');
|
|
3196
|
+
if (importsFsOrPath(content)) {
|
|
3197
|
+
const relPath = pathSync.relative(coreSrcDir, filePath).replace(/\\/g, '/');
|
|
3198
|
+
if (!ALLOWED_IO_FILES.has(relPath)) {
|
|
3199
|
+
violations.push(relPath);
|
|
3200
|
+
}
|
|
3201
|
+
}
|
|
3202
|
+
}
|
|
3203
|
+
expect(violations).toEqual([]);
|
|
3204
|
+
});
|
|
3205
|
+
it('ALLOWED_IO_FILES whitelist entries all exist on disk', () => {
|
|
3206
|
+
const coreSrcDir = pathSync.resolve(__dirname, '..', '..');
|
|
3207
|
+
const missing = [];
|
|
3208
|
+
for (const relPath of ALLOWED_IO_FILES) {
|
|
3209
|
+
const fullPath = pathSync.join(coreSrcDir, ...relPath.split('/'));
|
|
3210
|
+
if (!fsSync.existsSync(fullPath)) {
|
|
3211
|
+
missing.push(relPath);
|
|
3212
|
+
}
|
|
3213
|
+
}
|
|
3214
|
+
expect(missing).toEqual([]);
|
|
3215
|
+
});
|
|
3216
|
+
it('importsFsOrPath detects sub-path imports (fs/promises) and side-effect imports', () => {
|
|
3217
|
+
// Sub-path import
|
|
3218
|
+
expect(importsFsOrPath(`import { mkdir } from 'node:fs/promises';`)).toBe(true);
|
|
3219
|
+
expect(importsFsOrPath(`import { posix } from 'path/posix';`)).toBe(true);
|
|
3220
|
+
// Side-effect import
|
|
3221
|
+
expect(importsFsOrPath(`import 'fs';`)).toBe(true);
|
|
3222
|
+
expect(importsFsOrPath(`import "node:path";`)).toBe(true);
|
|
3223
|
+
// Standard import
|
|
3224
|
+
expect(importsFsOrPath(`import * as fs from 'fs';`)).toBe(true);
|
|
3225
|
+
expect(importsFsOrPath(`import { resolve } from 'node:path';`)).toBe(true);
|
|
3226
|
+
// Non-fs/path imports
|
|
3227
|
+
expect(importsFsOrPath(`import { foo } from 'bar';`)).toBe(false);
|
|
3228
|
+
expect(importsFsOrPath(``)).toBe(false);
|
|
3229
|
+
});
|
|
3230
|
+
});
|
|
3121
3231
|
//# sourceMappingURL=architecture-regression.test.js.map
|