create-principles-disciple 1.144.26 → 1.145.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/_release/product-identity.json +2 -2
- package/codex-adapter/dist/codex-evidence-recorder.js +8 -2
- package/codex-adapter/dist/index.d.ts +2 -2
- package/codex-adapter/dist/index.js +1 -1
- package/codex-adapter/dist/ingestion/admission.js +16 -0
- package/codex-adapter/dist/ingestion/codex-version.d.ts +10 -4
- package/codex-adapter/dist/ingestion/codex-version.js +10 -4
- package/codex-adapter/dist/ingestion/explicit-owner-statement.d.ts +48 -0
- package/codex-adapter/dist/ingestion/explicit-owner-statement.js +123 -0
- package/codex-adapter/dist/ingestion/ingestion.js +50 -1
- package/codex-adapter/dist/pd-hook.js +66 -3
- package/codex-adapter/dist/worker/workspace-worker.d.ts +14 -0
- package/codex-adapter/dist/worker/workspace-worker.js +194 -11
- package/codex-adapter/package.json +2 -2
- package/console/dist/server/models/ApprovalsConsoleModel.d.ts +2 -2
- package/console/dist/server/models/ApprovalsConsoleModel.js +1 -1
- package/console/dist/server/models/ApprovalsGroupedConsoleModel.js +1 -1
- package/console/dist/server/models/PrinciplesConsoleModel.d.ts +26 -1
- package/console/dist/server/models/PrinciplesConsoleModel.js +18 -1
- package/console/dist/server/routes/activations.js +4 -4
- package/console/dist/server/routes/approvals.js +2 -2
- package/console/dist/server/routes/failed-tasks.d.ts +9 -0
- package/console/dist/server/routes/failed-tasks.js +116 -7
- package/console/dist/server/routes/principles.js +73 -1
- package/console/dist/shared/prompt-injection-contract.d.ts +1 -1
- package/console/dist/ui/api.d.ts +5 -5
- package/console/dist/ui/i18n/en.json +13 -2
- package/console/dist/ui/i18n/zh-CN.json +13 -2
- package/console/dist/ui/pages/activation/ActivationPage.js +2 -1
- package/console/dist/ui/pages/failed-tasks/FailedTasksPage.js +42 -4
- package/console/dist/ui/pages/focus/FocusPage.js +3 -3
- package/console/dist/ui/pages/principles/PrinciplesPage.js +7 -2
- package/console/dist/ui/utils/validators.d.ts +6 -2
- package/console/dist/ui/utils/validators.js +19 -4
- package/console/dist/web/assets/app.css +26 -0
- package/console/dist/web/assets/app.js +24 -24
- package/console/package.json +4 -4
- package/core/dist/host/host-installer.d.ts +3 -1
- package/core/dist/host/host-installer.d.ts.map +1 -1
- package/core/dist/host/host-installer.js.map +1 -1
- package/core/dist/runtime-v2/admission-gate.d.ts +8 -0
- package/core/dist/runtime-v2/admission-gate.d.ts.map +1 -1
- package/core/dist/runtime-v2/admission-gate.js +3 -2
- package/core/dist/runtime-v2/admission-gate.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 +16 -1
- package/core/dist/runtime-v2/config/pd-config-defaults.js.map +1 -1
- package/core/dist/runtime-v2/context-payload.d.ts +43 -3
- package/core/dist/runtime-v2/context-payload.d.ts.map +1 -1
- package/core/dist/runtime-v2/context-payload.js +15 -1
- package/core/dist/runtime-v2/context-payload.js.map +1 -1
- package/core/dist/runtime-v2/evidence-guards.d.ts +6 -0
- package/core/dist/runtime-v2/evidence-guards.d.ts.map +1 -1
- package/core/dist/runtime-v2/evidence-guards.js +11 -0
- package/core/dist/runtime-v2/evidence-guards.js.map +1 -1
- package/core/dist/runtime-v2/evolution/evolution-types.d.ts +4 -4
- package/core/dist/runtime-v2/evolution/evolution-types.d.ts.map +1 -1
- package/core/dist/runtime-v2/evolution/evolution-types.js +1 -1
- package/core/dist/runtime-v2/evolution/evolution-types.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 +6 -0
- package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
- package/core/dist/runtime-v2/feature-flags/feature-flag-lifecycle.d.ts.map +1 -1
- package/core/dist/runtime-v2/feature-flags/feature-flag-lifecycle.js +8 -0
- package/core/dist/runtime-v2/feature-flags/feature-flag-lifecycle.js.map +1 -1
- package/core/dist/runtime-v2/index.d.ts +5 -2
- package/core/dist/runtime-v2/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/index.js +3 -1
- package/core/dist/runtime-v2/index.js.map +1 -1
- package/core/dist/runtime-v2/internalization/adversarial-feedback.d.ts +3 -1
- package/core/dist/runtime-v2/internalization/adversarial-feedback.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/adversarial-feedback.js +10 -1
- package/core/dist/runtime-v2/internalization/adversarial-feedback.js.map +1 -1
- package/core/dist/runtime-v2/internalization/evaluator-output.d.ts +11 -0
- package/core/dist/runtime-v2/internalization/evaluator-output.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/evaluator-output.js +10 -0
- package/core/dist/runtime-v2/internalization/evaluator-output.js.map +1 -1
- package/core/dist/runtime-v2/internalization/evaluator-prompt-builder.d.ts +3 -3
- package/core/dist/runtime-v2/internalization/evaluator-prompt-builder.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/evaluator-prompt-builder.js +49 -5
- package/core/dist/runtime-v2/internalization/evaluator-prompt-builder.js.map +1 -1
- package/core/dist/runtime-v2/internalization/evaluator-runner.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/evaluator-runner.js +13 -16
- package/core/dist/runtime-v2/internalization/evaluator-runner.js.map +1 -1
- package/core/dist/runtime-v2/internalization/owner-decision-review.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/owner-decision-review.js +5 -1
- package/core/dist/runtime-v2/internalization/owner-decision-review.js.map +1 -1
- package/core/dist/runtime-v2/internalization/owner-review.d.ts +2 -2
- package/core/dist/runtime-v2/internalization/owner-review.js +2 -2
- package/core/dist/runtime-v2/internalization/scribe-output.d.ts +12 -0
- package/core/dist/runtime-v2/internalization/scribe-output.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/scribe-output.js +20 -0
- package/core/dist/runtime-v2/internalization/scribe-output.js.map +1 -1
- package/core/dist/runtime-v2/internalization/scribe-prompt-builder.d.ts +32 -1
- package/core/dist/runtime-v2/internalization/scribe-prompt-builder.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/scribe-prompt-builder.js +38 -1
- package/core/dist/runtime-v2/internalization/scribe-prompt-builder.js.map +1 -1
- package/core/dist/runtime-v2/internalization-queue-read-model.d.ts +6 -0
- package/core/dist/runtime-v2/internalization-queue-read-model.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization-queue-read-model.js +8 -1
- package/core/dist/runtime-v2/internalization-queue-read-model.js.map +1 -1
- package/core/dist/runtime-v2/intervention-evidence-normalizer.d.ts.map +1 -1
- package/core/dist/runtime-v2/intervention-evidence-normalizer.js +10 -3
- package/core/dist/runtime-v2/intervention-evidence-normalizer.js.map +1 -1
- package/core/dist/runtime-v2/pain-ingress.d.ts +1 -1
- package/core/dist/runtime-v2/pain-ingress.d.ts.map +1 -1
- package/core/dist/runtime-v2/pain-signal-bridge.d.ts +68 -2
- package/core/dist/runtime-v2/pain-signal-bridge.d.ts.map +1 -1
- package/core/dist/runtime-v2/pain-signal-bridge.js +541 -18
- package/core/dist/runtime-v2/pain-signal-bridge.js.map +1 -1
- package/core/dist/runtime-v2/pain-signal-runtime-factory.d.ts.map +1 -1
- package/core/dist/runtime-v2/pain-signal-runtime-factory.js +4 -0
- package/core/dist/runtime-v2/pain-signal-runtime-factory.js.map +1 -1
- package/core/dist/runtime-v2/product-telemetry/snapshot-contract.d.ts +2 -2
- package/core/dist/runtime-v2/product-telemetry/snapshot-contract.d.ts.map +1 -1
- package/core/dist/runtime-v2/product-telemetry/snapshot-contract.js +2 -2
- package/core/dist/runtime-v2/product-telemetry/snapshot-contract.js.map +1 -1
- package/core/dist/runtime-v2/store/candidate/admission-document.d.ts +90 -0
- package/core/dist/runtime-v2/store/candidate/admission-document.d.ts.map +1 -0
- package/core/dist/runtime-v2/store/candidate/admission-document.js +142 -0
- package/core/dist/runtime-v2/store/candidate/admission-document.js.map +1 -0
- package/core/dist/runtime-v2/store/candidate/candidate-store.d.ts +53 -0
- package/core/dist/runtime-v2/store/candidate/candidate-store.d.ts.map +1 -1
- package/core/dist/runtime-v2/store/candidate/memory-candidate-store.d.ts +35 -0
- package/core/dist/runtime-v2/store/candidate/memory-candidate-store.d.ts.map +1 -1
- package/core/dist/runtime-v2/store/candidate/memory-candidate-store.js +48 -0
- package/core/dist/runtime-v2/store/candidate/memory-candidate-store.js.map +1 -1
- package/core/dist/runtime-v2/store/candidate/sqlite-candidate-store.d.ts +44 -0
- package/core/dist/runtime-v2/store/candidate/sqlite-candidate-store.d.ts.map +1 -1
- package/core/dist/runtime-v2/store/candidate/sqlite-candidate-store.js +136 -0
- package/core/dist/runtime-v2/store/candidate/sqlite-candidate-store.js.map +1 -1
- package/core/dist/runtime-v2/store/context/sqlite-context-assembler.js.map +1 -1
- package/core/dist/runtime-v2/store/intervention-evidence-schema.js +1 -1
- package/core/dist/runtime-v2/store/runtime-state-manager.d.ts +65 -0
- package/core/dist/runtime-v2/store/runtime-state-manager.d.ts.map +1 -1
- package/core/dist/runtime-v2/store/runtime-state-manager.js +46 -0
- package/core/dist/runtime-v2/store/runtime-state-manager.js.map +1 -1
- package/core/dist/runtime-v2/store/sqlite-connection.d.ts.map +1 -1
- package/core/dist/runtime-v2/store/sqlite-connection.js +42 -0
- package/core/dist/runtime-v2/store/sqlite-connection.js.map +1 -1
- package/core/dist/runtime-v2/store/sqlite-intervention-evidence-store.d.ts +1 -1
- package/core/dist/runtime-v2/store/sqlite-intervention-evidence-store.d.ts.map +1 -1
- package/core/dist/runtime-v2/store/sqlite-intervention-evidence-store.js.map +1 -1
- package/core/dist/runtime-v2/store/task/sqlite-family-reopen.d.ts +19 -0
- package/core/dist/runtime-v2/store/task/sqlite-family-reopen.d.ts.map +1 -0
- package/core/dist/runtime-v2/store/task/sqlite-family-reopen.js +36 -0
- package/core/dist/runtime-v2/store/task/sqlite-family-reopen.js.map +1 -0
- package/core/dist/runtime-v2/store/task/sqlite-task-store.d.ts +23 -0
- package/core/dist/runtime-v2/store/task/sqlite-task-store.d.ts.map +1 -1
- package/core/dist/runtime-v2/store/task/sqlite-task-store.js +50 -0
- package/core/dist/runtime-v2/store/task/sqlite-task-store.js.map +1 -1
- package/core/dist/runtime-v2/task-status.d.ts +3 -1
- package/core/dist/runtime-v2/task-status.d.ts.map +1 -1
- package/core/dist/runtime-v2/task-status.js +1 -1
- package/core/dist/runtime-v2/task-status.js.map +1 -1
- package/core/dist/runtime-v2/trajectory-schema.d.ts.map +1 -1
- package/core/dist/runtime-v2/trajectory-schema.js +11 -0
- package/core/dist/runtime-v2/trajectory-schema.js.map +1 -1
- package/core/dist/runtime-v2/types/event-types.d.ts +2 -2
- package/core/dist/runtime-v2/types/event-types.d.ts.map +1 -1
- package/core/dist/runtime-v2/types/event-types.js +1 -1
- package/core/dist/runtime-v2/types/event-types.js.map +1 -1
- package/core/dist/runtime-v2/types/evidence-chain-contract.d.ts +1 -1
- package/core/dist/runtime-v2/types/evidence-chain-contract.d.ts.map +1 -1
- package/core/dist/runtime-v2/types/evidence-chain-contract.js +2 -2
- package/core/dist/runtime-v2/types/evidence-chain-contract.js.map +1 -1
- package/core/dist/runtime-v2/types/intervention-evidence-contract.d.ts +3 -3
- package/core/dist/runtime-v2/types/intervention-evidence-contract.d.ts.map +1 -1
- package/core/dist/runtime-v2/types/intervention-evidence-contract.js +1 -0
- package/core/dist/runtime-v2/types/intervention-evidence-contract.js.map +1 -1
- package/core/dist/telemetry-event.d.ts +2 -2
- package/core/dist/telemetry-event.d.ts.map +1 -1
- package/core/dist/telemetry-event.js +4 -0
- package/core/dist/telemetry-event.js.map +1 -1
- package/core/dist/trajectory-types.d.ts +2 -2
- package/core/dist/trajectory-types.d.ts.map +1 -1
- package/core/package.json +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +84 -8
- package/dist/index.js.map +1 -1
- package/dist/installer.d.ts +42 -11
- package/dist/installer.d.ts.map +1 -1
- package/dist/installer.js +140 -36
- package/dist/installer.js.map +1 -1
- package/dist/installers/index.d.ts +18 -7
- package/dist/installers/index.d.ts.map +1 -1
- package/dist/installers/index.js +13 -4
- package/dist/installers/index.js.map +1 -1
- package/dist/installers/workbuddy-host-installer.d.ts +246 -0
- package/dist/installers/workbuddy-host-installer.d.ts.map +1 -0
- package/dist/installers/workbuddy-host-installer.js +1419 -0
- package/dist/installers/workbuddy-host-installer.js.map +1 -0
- package/dist/mvp-config.d.ts +24 -0
- package/dist/mvp-config.d.ts.map +1 -1
- package/dist/mvp-config.js +36 -0
- package/dist/mvp-config.js.map +1 -1
- package/dist/prompts.d.ts +13 -0
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +45 -8
- package/dist/prompts.js.map +1 -1
- package/dist/uninstaller.d.ts +1 -1
- package/dist/uninstaller.d.ts.map +1 -1
- package/dist/uninstaller.js +29 -4
- package/dist/uninstaller.js.map +1 -1
- package/host-runtime/dist/governance-signal-admission.d.ts +63 -0
- package/host-runtime/dist/governance-signal-admission.js +322 -53
- package/host-runtime/dist/host-liveness-contract.js +7 -1
- package/host-runtime/dist/index.d.ts +1 -0
- package/host-runtime/dist/index.js +5 -1
- package/host-runtime/dist/internalization-consumer-cycle.d.ts +12 -0
- package/host-runtime/dist/internalization-consumer-cycle.js +43 -1
- package/host-runtime/dist/intervention-evidence-ingress.d.ts +1 -1
- package/host-runtime/dist/product-telemetry/service.js +1 -1
- package/host-runtime/dist/production-pain-evidence.d.ts +59 -1
- package/host-runtime/dist/production-pain-evidence.js +200 -17
- package/host-runtime/dist/prompt-activation-deliverability.js +5 -4
- package/host-runtime/dist/prompt-injection-event-evidence.d.ts +1 -1
- package/host-runtime/dist/prompt-injection-event-evidence.js +5 -1
- package/host-runtime/dist/prompt-injection-projection.d.ts +14 -5
- package/host-runtime/dist/prompt-injection-projection.js +30 -16
- package/host-runtime/dist/workbuddy-worker-status.d.ts +24 -0
- package/host-runtime/dist/workbuddy-worker-status.js +52 -0
- package/host-runtime/package.json +3 -3
- package/install-layout/dist/index.d.ts +18 -1
- package/install-layout/dist/index.js +15 -2
- package/install-layout/package.json +1 -1
- package/package.json +6 -5
- package/pd-cli/dist/commands/candidate.d.ts.map +1 -1
- package/pd-cli/dist/commands/candidate.js +44 -4
- package/pd-cli/dist/commands/candidate.js.map +1 -1
- package/pd-cli/dist/commands/codex-worker.d.ts.map +1 -1
- package/pd-cli/dist/commands/codex-worker.js +30 -1
- package/pd-cli/dist/commands/codex-worker.js.map +1 -1
- package/pd-cli/dist/commands/config-doctor.d.ts.map +1 -1
- package/pd-cli/dist/commands/config-doctor.js +19 -4
- package/pd-cli/dist/commands/config-doctor.js.map +1 -1
- package/pd-cli/dist/commands/diagnose.d.ts.map +1 -1
- package/pd-cli/dist/commands/diagnose.js +4 -1
- package/pd-cli/dist/commands/diagnose.js.map +1 -1
- package/pd-cli/dist/commands/health-codex-install.d.ts +85 -0
- package/pd-cli/dist/commands/health-codex-install.d.ts.map +1 -0
- package/pd-cli/dist/commands/health-codex-install.js +207 -0
- package/pd-cli/dist/commands/health-codex-install.js.map +1 -0
- package/pd-cli/dist/commands/health-codex.d.ts.map +1 -1
- package/pd-cli/dist/commands/health-codex.js +78 -0
- package/pd-cli/dist/commands/health-codex.js.map +1 -1
- package/pd-cli/dist/commands/pain-list.d.ts +3 -2
- package/pd-cli/dist/commands/pain-list.d.ts.map +1 -1
- package/pd-cli/dist/commands/pain-list.js +10 -10
- package/pd-cli/dist/commands/pain-list.js.map +1 -1
- package/pd-cli/dist/commands/pain-record.d.ts +2 -0
- package/pd-cli/dist/commands/pain-record.d.ts.map +1 -1
- package/pd-cli/dist/commands/pain-record.js +36 -0
- package/pd-cli/dist/commands/pain-record.js.map +1 -1
- package/pd-cli/dist/commands/pain-retry.d.ts +6 -0
- package/pd-cli/dist/commands/pain-retry.d.ts.map +1 -1
- package/pd-cli/dist/commands/pain-retry.js +152 -5
- package/pd-cli/dist/commands/pain-retry.js.map +1 -1
- package/pd-cli/dist/commands/runtime-activation.d.ts +1 -1
- package/pd-cli/dist/commands/runtime-activation.d.ts.map +1 -1
- package/pd-cli/dist/commands/runtime-activation.js +3 -3
- package/pd-cli/dist/commands/runtime-activation.js.map +1 -1
- package/pd-cli/dist/commands/workbuddy-worker.d.ts +19 -0
- package/pd-cli/dist/commands/workbuddy-worker.d.ts.map +1 -0
- package/pd-cli/dist/commands/workbuddy-worker.js +168 -0
- package/pd-cli/dist/commands/workbuddy-worker.js.map +1 -0
- package/pd-cli/dist/index.js +29 -1
- package/pd-cli/dist/index.js.map +1 -1
- package/pd-cli/dist/resolve-workspace.d.ts +14 -2
- package/pd-cli/dist/resolve-workspace.d.ts.map +1 -1
- package/pd-cli/dist/resolve-workspace.js +88 -21
- package/pd-cli/dist/resolve-workspace.js.map +1 -1
- package/pd-cli/dist/services/admission-write-gate.d.ts +24 -0
- package/pd-cli/dist/services/admission-write-gate.d.ts.map +1 -0
- package/pd-cli/dist/services/admission-write-gate.js +41 -0
- package/pd-cli/dist/services/admission-write-gate.js.map +1 -0
- package/pd-cli/dist/services/pd-config-loader.d.ts +39 -7
- package/pd-cli/dist/services/pd-config-loader.d.ts.map +1 -1
- package/pd-cli/dist/services/pd-config-loader.js +111 -18
- package/pd-cli/dist/services/pd-config-loader.js.map +1 -1
- package/pd-cli/dist/services/rulehost-pipeline-runner.d.ts +10 -0
- package/pd-cli/dist/services/rulehost-pipeline-runner.d.ts.map +1 -1
- package/pd-cli/dist/services/rulehost-pipeline-runner.js +59 -4
- package/pd-cli/dist/services/rulehost-pipeline-runner.js.map +1 -1
- package/pd-cli/package.json +4 -3
- package/plugin/dist/bundle.js +564 -509
- package/plugin/dist/governance-audit.js +1 -1
- package/plugin/dist/openclaw.plugin.json +1 -1
- package/plugin/dist/rulehost-evidence.js +1 -1
- package/plugin/openclaw.plugin.json +1 -1
- package/plugin/package.json +3 -3
- package/release-manager/dist/index.d.ts.map +1 -1
- package/release-manager/dist/index.js +84 -8
- package/release-manager/dist/index.js.map +1 -1
- package/release-manager/dist/installer.d.ts +42 -11
- package/release-manager/dist/installer.d.ts.map +1 -1
- package/release-manager/dist/installer.js +140 -36
- package/release-manager/dist/installer.js.map +1 -1
- package/release-manager/dist/installers/index.d.ts +18 -7
- package/release-manager/dist/installers/index.d.ts.map +1 -1
- package/release-manager/dist/installers/index.js +13 -4
- package/release-manager/dist/installers/index.js.map +1 -1
- package/release-manager/dist/installers/workbuddy-host-installer.d.ts +246 -0
- package/release-manager/dist/installers/workbuddy-host-installer.d.ts.map +1 -0
- package/release-manager/dist/installers/workbuddy-host-installer.js +1419 -0
- package/release-manager/dist/installers/workbuddy-host-installer.js.map +1 -0
- package/release-manager/dist/mvp-config.d.ts +24 -0
- package/release-manager/dist/mvp-config.d.ts.map +1 -1
- package/release-manager/dist/mvp-config.js +36 -0
- package/release-manager/dist/mvp-config.js.map +1 -1
- package/release-manager/dist/prompts.d.ts +13 -0
- package/release-manager/dist/prompts.d.ts.map +1 -1
- package/release-manager/dist/prompts.js +45 -8
- package/release-manager/dist/prompts.js.map +1 -1
- package/release-manager/dist/uninstaller.d.ts +1 -1
- package/release-manager/dist/uninstaller.d.ts.map +1 -1
- package/release-manager/dist/uninstaller.js +29 -4
- package/release-manager/dist/uninstaller.js.map +1 -1
- package/release-manager/package.json +5 -4
- package/workbuddy-adapter/dist/codec/index.d.ts +2 -0
- package/workbuddy-adapter/dist/codec/index.js +2 -0
- package/workbuddy-adapter/dist/codec/input-decoder.d.ts +30 -0
- package/workbuddy-adapter/dist/codec/input-decoder.js +232 -0
- package/workbuddy-adapter/dist/codec/output-encoder.d.ts +62 -0
- package/workbuddy-adapter/dist/codec/output-encoder.js +75 -0
- package/workbuddy-adapter/dist/host-adapter.d.ts +33 -0
- package/workbuddy-adapter/dist/host-adapter.js +23 -0
- package/workbuddy-adapter/dist/index.d.ts +16 -0
- package/workbuddy-adapter/dist/index.js +16 -0
- package/workbuddy-adapter/dist/pd-hook.d.ts +17 -0
- package/workbuddy-adapter/dist/pd-hook.js +505 -0
- package/workbuddy-adapter/dist/tool-semantics.d.ts +22 -0
- package/workbuddy-adapter/dist/tool-semantics.js +33 -0
- package/workbuddy-adapter/dist/workbuddy-evidence-recorder.d.ts +50 -0
- package/workbuddy-adapter/dist/workbuddy-evidence-recorder.js +238 -0
- package/workbuddy-adapter/dist/worker/workspace-worker.d.ts +41 -0
- package/workbuddy-adapter/dist/worker/workspace-worker.js +219 -0
- package/workbuddy-adapter/dist/workspace-resolution.d.ts +15 -0
- package/workbuddy-adapter/dist/workspace-resolution.js +53 -0
- package/workbuddy-adapter/package.json +62 -0
- package/workbuddy-adapter/plugin/.codebuddy-plugin/plugin.json +6 -0
- package/workbuddy-adapter/plugin/hooks/hooks.json +62 -0
- package/workbuddy-adapter/plugin/scripts/wrapper.cjs +79 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Candidate admission document — SPEC-CODEX-PAIN-CLOSURE-001 CR-03 (PRI-958).
|
|
3
|
+
*
|
|
4
|
+
* The persisted admission disposition of a principle candidate, owned by the
|
|
5
|
+
* candidate store (`principle_candidates.admission_json`). Structure:
|
|
6
|
+
*
|
|
7
|
+
* - `evaluations`: APPEND-ONLY history of full-gate evaluations. A
|
|
8
|
+
* re-evaluation with the same material fingerprint + policy version
|
|
9
|
+
* reuses the existing entry (idempotent); genuinely new material or
|
|
10
|
+
* policy appends a new version and moves `currentEvaluationId`. Old
|
|
11
|
+
* decisions are never overwritten (A15: history stays queryable).
|
|
12
|
+
* - `currentEvaluationId`: pointer to the evaluation that governs intake
|
|
13
|
+
* eligibility right now.
|
|
14
|
+
* - `processing`: an INDEPENDENT progress domain (worker continuation
|
|
15
|
+
* attempts / next-retry / blocked state). It never mutates admission
|
|
16
|
+
* history; history never claims processing completed.
|
|
17
|
+
*
|
|
18
|
+
* This is NOT an approval fact and does not replace the Ledger / approval /
|
|
19
|
+
* activation authorities — it records "what the admission gate decided, on
|
|
20
|
+
* which material, when". Telemetry and console read it; they do not write it.
|
|
21
|
+
*
|
|
22
|
+
* No Owner statement text is ever copied into this document — only a
|
|
23
|
+
* fingerprint of the statement content (classification summary).
|
|
24
|
+
*/
|
|
25
|
+
import { createHash } from 'node:crypto';
|
|
26
|
+
export const CANDIDATE_ADMISSION_SCHEMA_VERSION = 1;
|
|
27
|
+
export const MAX_ADMISSION_EVALUATIONS = 20;
|
|
28
|
+
export const MAX_ADMISSION_JSON_CHARS = 96_000;
|
|
29
|
+
/** Static policy identity of the current full admission gate. */
|
|
30
|
+
export const ADMISSION_POLICY_VERSION = 'admission-gate@cr-03';
|
|
31
|
+
export function parseAdmissionDocument(raw) {
|
|
32
|
+
if (raw === null || raw === undefined)
|
|
33
|
+
return { ok: true, document: null };
|
|
34
|
+
if (typeof raw !== 'string' || raw.length === 0)
|
|
35
|
+
return { ok: true, document: null };
|
|
36
|
+
let parsed;
|
|
37
|
+
try {
|
|
38
|
+
parsed = JSON.parse(raw);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return { ok: false, document: null, reason: 'admission_json_unparseable' };
|
|
42
|
+
}
|
|
43
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
44
|
+
return { ok: false, document: null, reason: 'admission_json_not_an_object' };
|
|
45
|
+
}
|
|
46
|
+
const record = parsed;
|
|
47
|
+
if (record.schemaVersion !== CANDIDATE_ADMISSION_SCHEMA_VERSION) {
|
|
48
|
+
return { ok: false, document: null, reason: `admission_json_unsupported_schema_version:${String(record.schemaVersion)}` };
|
|
49
|
+
}
|
|
50
|
+
if (!Array.isArray(record.evaluations) || record.evaluations.length > MAX_ADMISSION_EVALUATIONS) {
|
|
51
|
+
return { ok: false, document: null, reason: 'admission_json_evaluations_invalid' };
|
|
52
|
+
}
|
|
53
|
+
for (const evaluation of record.evaluations) {
|
|
54
|
+
if (typeof evaluation !== 'object' || evaluation === null)
|
|
55
|
+
return { ok: false, document: null, reason: 'admission_json_evaluation_invalid' };
|
|
56
|
+
const entry = evaluation;
|
|
57
|
+
if (typeof entry.evaluationId !== 'string'
|
|
58
|
+
|| (entry.decision !== 'admitted' && entry.decision !== 'needs_evidence' && entry.decision !== 'deferred')
|
|
59
|
+
|| typeof entry.reason !== 'string' || typeof entry.nextAction !== 'string'
|
|
60
|
+
|| typeof entry.evaluatedAt !== 'string' || typeof entry.policyVersion !== 'string'
|
|
61
|
+
|| typeof entry.materialFingerprint !== 'string') {
|
|
62
|
+
return { ok: false, document: null, reason: 'admission_json_evaluation_invalid' };
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const currentId = record.currentEvaluationId;
|
|
66
|
+
if (currentId !== null && typeof currentId !== 'string') {
|
|
67
|
+
return { ok: false, document: null, reason: 'admission_json_current_evaluation_id_invalid' };
|
|
68
|
+
}
|
|
69
|
+
const { processing } = record;
|
|
70
|
+
if (processing !== undefined
|
|
71
|
+
&& (typeof processing !== 'object' || processing === null || typeof processing.state !== 'string')) {
|
|
72
|
+
return { ok: false, document: null, reason: 'admission_json_processing_invalid' };
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
ok: true,
|
|
76
|
+
document: {
|
|
77
|
+
schemaVersion: CANDIDATE_ADMISSION_SCHEMA_VERSION,
|
|
78
|
+
evaluations: record.evaluations,
|
|
79
|
+
currentEvaluationId: currentId ?? null,
|
|
80
|
+
...(processing !== undefined ? { processing: processing } : {}),
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
export function serializeAdmissionDocument(document) {
|
|
85
|
+
const json = JSON.stringify(document);
|
|
86
|
+
if (json.length > MAX_ADMISSION_JSON_CHARS)
|
|
87
|
+
return { ok: false, reason: 'admission_json_size_exceeded' };
|
|
88
|
+
return { ok: true, json };
|
|
89
|
+
}
|
|
90
|
+
export function fingerprintMaterial(parts) {
|
|
91
|
+
return createHash('sha256').update(parts.join('\u0000')).digest('hex');
|
|
92
|
+
}
|
|
93
|
+
export function fingerprintStatement(statementText) {
|
|
94
|
+
return createHash('sha256').update(statementText).digest('hex');
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Append (or idempotently reuse) one full-gate evaluation. Reuse requires the
|
|
98
|
+
* same material fingerprint AND policy version — a changed material or policy
|
|
99
|
+
* MUST produce a new version; the previous decision/reason/evaluatedAt stay
|
|
100
|
+
* intact in history and `currentEvaluationId` moves forward only.
|
|
101
|
+
*/
|
|
102
|
+
export function appendAdmissionEvaluation(existing, evaluation) {
|
|
103
|
+
if (existing === null) {
|
|
104
|
+
const document = {
|
|
105
|
+
schemaVersion: CANDIDATE_ADMISSION_SCHEMA_VERSION,
|
|
106
|
+
evaluations: [evaluation],
|
|
107
|
+
currentEvaluationId: evaluation.evaluationId,
|
|
108
|
+
};
|
|
109
|
+
return { status: 'appended', document, evaluation };
|
|
110
|
+
}
|
|
111
|
+
const reused = existing.evaluations.find((entry) => entry.materialFingerprint === evaluation.materialFingerprint && entry.policyVersion === evaluation.policyVersion);
|
|
112
|
+
if (reused !== undefined) {
|
|
113
|
+
const document = { ...existing, currentEvaluationId: reused.evaluationId };
|
|
114
|
+
return { status: 'reused', document, evaluation: reused };
|
|
115
|
+
}
|
|
116
|
+
if (existing.evaluations.length >= MAX_ADMISSION_EVALUATIONS) {
|
|
117
|
+
return { status: 'refused', reason: 'admission_history_exceeded' };
|
|
118
|
+
}
|
|
119
|
+
const document = {
|
|
120
|
+
...existing,
|
|
121
|
+
evaluations: [...existing.evaluations, evaluation],
|
|
122
|
+
currentEvaluationId: evaluation.evaluationId,
|
|
123
|
+
};
|
|
124
|
+
return { status: 'appended', document, evaluation };
|
|
125
|
+
}
|
|
126
|
+
export function currentEvaluation(document) {
|
|
127
|
+
if (document === null || document.currentEvaluationId === null)
|
|
128
|
+
return null;
|
|
129
|
+
return document.evaluations.find((entry) => entry.evaluationId === document.currentEvaluationId) ?? null;
|
|
130
|
+
}
|
|
131
|
+
export function withProcessing(document, processing) {
|
|
132
|
+
if (document === null) {
|
|
133
|
+
return {
|
|
134
|
+
schemaVersion: CANDIDATE_ADMISSION_SCHEMA_VERSION,
|
|
135
|
+
evaluations: [],
|
|
136
|
+
currentEvaluationId: null,
|
|
137
|
+
processing,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
return { ...document, processing };
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=admission-document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admission-document.js","sourceRoot":"","sources":["../../../../src/runtime-v2/store/candidate/admission-document.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* CandidateStore — abstract interface for principle candidate queries.
|
|
3
3
|
*/
|
|
4
4
|
import type { RecommendationKind } from '../../diagnostician-output.js';
|
|
5
|
+
import type { AdmissionEvaluationRecord, AdmissionProcessingRecord, CandidateAdmissionDocument } from './admission-document.js';
|
|
5
6
|
export interface CandidateRecord {
|
|
6
7
|
candidateId: string;
|
|
7
8
|
artifactId: string;
|
|
@@ -57,5 +58,57 @@ export interface CandidateStore {
|
|
|
57
58
|
* or its current status did not match `expectedStatus`.
|
|
58
59
|
*/
|
|
59
60
|
transitionCandidateStatus(candidateId: string, expectedStatus: CandidateRecord['status'], newStatus: CandidateRecord['status']): Promise<boolean>;
|
|
61
|
+
/**
|
|
62
|
+
* SPEC-CODEX-PAIN-CLOSURE-001 CR-03: read the persisted admission document.
|
|
63
|
+
* NULL when the column is empty (pre-CR-03 records — "历史准入处置未记录").
|
|
64
|
+
* Unparseable JSON returns { ok: false, reason } — callers must fail loud,
|
|
65
|
+
* never treat a corrupt document as absent.
|
|
66
|
+
*/
|
|
67
|
+
getAdmissionDocument(candidateId: string): Promise<{
|
|
68
|
+
ok: true;
|
|
69
|
+
document: CandidateAdmissionDocument | null;
|
|
70
|
+
} | {
|
|
71
|
+
ok: false;
|
|
72
|
+
reason: string;
|
|
73
|
+
}>;
|
|
74
|
+
/**
|
|
75
|
+
* Persist one full-gate evaluation (append-only history, idempotent by
|
|
76
|
+
* material fingerprint + policy version, current pointer moves forward).
|
|
77
|
+
* Returns the resulting document and whether the entry was appended/reused.
|
|
78
|
+
*/
|
|
79
|
+
appendAdmissionEvaluation(candidateId: string, evaluation: AdmissionEvaluationRecord): Promise<{
|
|
80
|
+
status: 'appended' | 'reused';
|
|
81
|
+
document: CandidateAdmissionDocument;
|
|
82
|
+
} | {
|
|
83
|
+
status: 'refused';
|
|
84
|
+
reason: string;
|
|
85
|
+
}>;
|
|
86
|
+
/**
|
|
87
|
+
* Update ONLY the independent processing-progress domain. Never touches
|
|
88
|
+
* evaluation history.
|
|
89
|
+
*/
|
|
90
|
+
updateAdmissionProcessing(candidateId: string, processing: AdmissionProcessingRecord): Promise<boolean>;
|
|
91
|
+
/**
|
|
92
|
+
* SPEC §9.1: the diagnosis post-processing backlog (router-candidate aware,
|
|
93
|
+
* orphan-inclusive). See SqliteCandidateStore for the resolution contract.
|
|
94
|
+
*/
|
|
95
|
+
listDiagnosisPostProcessingBacklog(options: {
|
|
96
|
+
limit: number;
|
|
97
|
+
nowIso?: string;
|
|
98
|
+
}): {
|
|
99
|
+
eligible: {
|
|
100
|
+
candidateId: string;
|
|
101
|
+
taskId: string;
|
|
102
|
+
status: string;
|
|
103
|
+
createdAt: string;
|
|
104
|
+
processingState: string | null;
|
|
105
|
+
}[];
|
|
106
|
+
corrupt: {
|
|
107
|
+
candidateId: string;
|
|
108
|
+
taskId: string;
|
|
109
|
+
status: string;
|
|
110
|
+
createdAt: string;
|
|
111
|
+
}[];
|
|
112
|
+
};
|
|
60
113
|
}
|
|
61
114
|
//# sourceMappingURL=candidate-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"candidate-store.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/store/candidate/candidate-store.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"candidate-store.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/store/candidate/candidate-store.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,KAAK,EACV,yBAAyB,EACzB,yBAAyB,EACzB,0BAA0B,EAC3B,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,wBAAwB,EAAE,MAAM,CAAC;IACjC;;;;;;;OAOG;IACH,kBAAkB,EAAE,kBAAkB,CAAC;IACvC;;;;;;;;;OASG;IACH,qBAAqB,EAAE,MAAM,CAAC;IAC9B,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IAC3C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAElE;;OAEG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IAEnE;;;OAGG;IACH,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE;QAAE,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3G;;;;;OAKG;IACH,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,eAAe,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,eAAe,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAElJ;;;;;OAKG;IACH,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAChD;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,0BAA0B,GAAG,IAAI,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAC1F,CAAC;IAEF;;;;OAIG;IACH,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,yBAAyB,GAAG,OAAO,CAC5F;QAAE,MAAM,EAAE,UAAU,GAAG,QAAQ,CAAC;QAAC,QAAQ,EAAE,0BAA0B,CAAA;KAAE,GAAG;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAChH,CAAC;IAEF;;;OAGG;IACH,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,yBAAyB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAExG;;;OAGG;IACH,kCAAkC,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG;QAC/E,QAAQ,EAAE;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,EAAE,CAAC;QACvH,OAAO,EAAE;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KACvF,CAAC;CAEH"}
|
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
* CandidateStore — in-memory test double using a Map.
|
|
3
3
|
*/
|
|
4
4
|
import type { CandidateRecord, CandidateStore } from './candidate-store.js';
|
|
5
|
+
import { type AdmissionEvaluationRecord, type AdmissionProcessingRecord, type CandidateAdmissionDocument } from './admission-document.js';
|
|
5
6
|
export declare class MemoryCandidateStore implements CandidateStore {
|
|
6
7
|
private readonly candidates;
|
|
8
|
+
private readonly admissions;
|
|
7
9
|
/**
|
|
8
10
|
* Returns candidates filtered directly by taskId field.
|
|
9
11
|
* Note: SQLite version JOINs tasks→runs→commits→candidates.
|
|
@@ -16,6 +18,39 @@ export declare class MemoryCandidateStore implements CandidateStore {
|
|
|
16
18
|
status: CandidateRecord['status'];
|
|
17
19
|
}): Promise<boolean>;
|
|
18
20
|
transitionCandidateStatus(candidateId: string, expectedStatus: CandidateRecord['status'], newStatus: CandidateRecord['status']): Promise<boolean>;
|
|
21
|
+
getAdmissionDocument(candidateId: string): Promise<{
|
|
22
|
+
ok: true;
|
|
23
|
+
document: CandidateAdmissionDocument | null;
|
|
24
|
+
} | {
|
|
25
|
+
ok: false;
|
|
26
|
+
reason: string;
|
|
27
|
+
}>;
|
|
28
|
+
appendAdmissionEvaluation(candidateId: string, evaluation: AdmissionEvaluationRecord): Promise<{
|
|
29
|
+
status: 'appended' | 'reused';
|
|
30
|
+
document: CandidateAdmissionDocument;
|
|
31
|
+
} | {
|
|
32
|
+
status: 'refused';
|
|
33
|
+
reason: string;
|
|
34
|
+
}>;
|
|
35
|
+
updateAdmissionProcessing(candidateId: string, processing: AdmissionProcessingRecord): Promise<boolean>;
|
|
36
|
+
listDiagnosisPostProcessingBacklog(options: {
|
|
37
|
+
limit: number;
|
|
38
|
+
nowIso?: string;
|
|
39
|
+
}): {
|
|
40
|
+
eligible: {
|
|
41
|
+
candidateId: string;
|
|
42
|
+
taskId: string;
|
|
43
|
+
status: string;
|
|
44
|
+
createdAt: string;
|
|
45
|
+
processingState: string | null;
|
|
46
|
+
}[];
|
|
47
|
+
corrupt: {
|
|
48
|
+
candidateId: string;
|
|
49
|
+
taskId: string;
|
|
50
|
+
status: string;
|
|
51
|
+
createdAt: string;
|
|
52
|
+
}[];
|
|
53
|
+
};
|
|
19
54
|
insert(record: CandidateRecord): void;
|
|
20
55
|
clear(): void;
|
|
21
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-candidate-store.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/store/candidate/memory-candidate-store.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-candidate-store.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/store/candidate/memory-candidate-store.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAGL,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAChC,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,oBAAqB,YAAW,cAAc;IACzD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsC;IACjE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwD;IAEnF;;;;;OAKG;IACG,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAEtE;IAEK,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAEvE;IAEK,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE;QAAE,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAK/G;IAEK,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,eAAe,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,eAAe,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAKtJ;IAEK,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CACtD;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,0BAA0B,GAAG,IAAI,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAC1F,CAGA;IAEK,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,yBAAyB,GAAG,OAAO,CAClG;QAAE,MAAM,EAAE,UAAU,GAAG,QAAQ,CAAC;QAAC,QAAQ,EAAE,0BAA0B,CAAA;KAAE,GAAG;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAChH,CAOA;IAEK,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,yBAAyB,GAAG,OAAO,CAAC,OAAO,CAAC,CAK5G;IAED,kCAAkC,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG;QAC/E,QAAQ,EAAE;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,EAAE,CAAC;QACvH,OAAO,EAAE;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KACvF,CAoBA;IAED,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAEpC;IAED,KAAK,IAAI,IAAI,CAGZ;CACF"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { appendAdmissionEvaluation, withProcessing, } from './admission-document.js';
|
|
1
2
|
export class MemoryCandidateStore {
|
|
2
3
|
candidates = new Map();
|
|
4
|
+
admissions = new Map();
|
|
3
5
|
/**
|
|
4
6
|
* Returns candidates filtered directly by taskId field.
|
|
5
7
|
* Note: SQLite version JOINs tasks→runs→commits→candidates.
|
|
@@ -26,11 +28,57 @@ export class MemoryCandidateStore {
|
|
|
26
28
|
this.candidates.set(candidateId, { ...existing, status: newStatus });
|
|
27
29
|
return true;
|
|
28
30
|
}
|
|
31
|
+
async getAdmissionDocument(candidateId) {
|
|
32
|
+
if (!this.candidates.has(candidateId))
|
|
33
|
+
return { ok: false, reason: 'candidate_not_found' };
|
|
34
|
+
return { ok: true, document: this.admissions.get(candidateId) ?? null };
|
|
35
|
+
}
|
|
36
|
+
async appendAdmissionEvaluation(candidateId, evaluation) {
|
|
37
|
+
if (!this.candidates.has(candidateId))
|
|
38
|
+
return { status: 'refused', reason: 'candidate_not_found' };
|
|
39
|
+
const existing = this.admissions.get(candidateId) ?? null;
|
|
40
|
+
const result = appendAdmissionEvaluation(existing, evaluation);
|
|
41
|
+
if (result.status === 'refused')
|
|
42
|
+
return result;
|
|
43
|
+
this.admissions.set(candidateId, result.document);
|
|
44
|
+
return { status: result.status, document: result.document };
|
|
45
|
+
}
|
|
46
|
+
async updateAdmissionProcessing(candidateId, processing) {
|
|
47
|
+
if (!this.candidates.has(candidateId))
|
|
48
|
+
return false;
|
|
49
|
+
const existing = this.admissions.get(candidateId) ?? null;
|
|
50
|
+
this.admissions.set(candidateId, withProcessing(existing, processing));
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
listDiagnosisPostProcessingBacklog(options) {
|
|
54
|
+
const nowMs = options.nowIso !== undefined ? Date.parse(options.nowIso) : Date.now();
|
|
55
|
+
const eligible = [];
|
|
56
|
+
const corrupt = [];
|
|
57
|
+
for (const candidate of this.candidates.values()) {
|
|
58
|
+
const document = this.admissions.get(candidate.candidateId) ?? null;
|
|
59
|
+
const state = document?.processing?.state ?? null;
|
|
60
|
+
const terminal = state === 'complete' || state === 'awaiting_owner' || state === 'exhausted';
|
|
61
|
+
if (terminal)
|
|
62
|
+
continue;
|
|
63
|
+
const openProcessing = document !== null
|
|
64
|
+
&& (state === 'not_started' || state === 'in_progress')
|
|
65
|
+
&& (document.processing?.nextRetryAt === undefined || Date.parse(document.processing.nextRetryAt) <= nowMs);
|
|
66
|
+
if (document === null && (candidate.status === 'pending' || candidate.status === 'consumed')) {
|
|
67
|
+
eligible.push({ candidateId: candidate.candidateId, taskId: candidate.taskId, status: candidate.status, createdAt: candidate.createdAt, processingState: null });
|
|
68
|
+
}
|
|
69
|
+
else if (openProcessing) {
|
|
70
|
+
eligible.push({ candidateId: candidate.candidateId, taskId: candidate.taskId, status: candidate.status, createdAt: candidate.createdAt, processingState: state });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
eligible.sort((a, b) => a.createdAt.localeCompare(b.createdAt));
|
|
74
|
+
return { eligible: eligible.slice(0, options.limit), corrupt };
|
|
75
|
+
}
|
|
29
76
|
insert(record) {
|
|
30
77
|
this.candidates.set(record.candidateId, record);
|
|
31
78
|
}
|
|
32
79
|
clear() {
|
|
33
80
|
this.candidates.clear();
|
|
81
|
+
this.admissions.clear();
|
|
34
82
|
}
|
|
35
83
|
}
|
|
36
84
|
//# sourceMappingURL=memory-candidate-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-candidate-store.js","sourceRoot":"","sources":["../../../../src/runtime-v2/store/candidate/memory-candidate-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"memory-candidate-store.js","sourceRoot":"","sources":["../../../../src/runtime-v2/store/candidate/memory-candidate-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { SqliteConnection } from '../sqlite-connection.js';
|
|
2
2
|
import type { CandidateRecord, CandidateStore } from './candidate-store.js';
|
|
3
|
+
import { type AdmissionEvaluationRecord, type AdmissionProcessingRecord, type CandidateAdmissionDocument } from './admission-document.js';
|
|
3
4
|
export declare class SqliteCandidateStore implements CandidateStore {
|
|
4
5
|
private readonly connection;
|
|
5
6
|
constructor(connection: SqliteConnection);
|
|
@@ -9,5 +10,48 @@ export declare class SqliteCandidateStore implements CandidateStore {
|
|
|
9
10
|
status: CandidateRecord['status'];
|
|
10
11
|
}): Promise<boolean>;
|
|
11
12
|
transitionCandidateStatus(candidateId: string, expectedStatus: CandidateRecord['status'], newStatus: CandidateRecord['status']): Promise<boolean>;
|
|
13
|
+
/**
|
|
14
|
+
* SPEC §9.1 (review P1): the diagnosis post-processing backlog. Candidates
|
|
15
|
+
* of SUCCEEDED diagnostician tasks whose admission/intake/seeding never
|
|
16
|
+
* completed — INCLUDING candidates committed by the diag_router SUBTASK
|
|
17
|
+
* (resolved to the diagnostician parent through subtask.inputRef) and
|
|
18
|
+
* legacy consumed-but-unseeded orphans (admission_json NULL + consumed).
|
|
19
|
+
* Terminal processing states are excluded. `taskId` is always the PARENT
|
|
20
|
+
* diagnostician task (the resume entry reads the original pain input from
|
|
21
|
+
* the parent and the router output from the subtask run).
|
|
22
|
+
*/
|
|
23
|
+
listDiagnosisPostProcessingBacklog(options: {
|
|
24
|
+
limit: number;
|
|
25
|
+
nowIso?: string;
|
|
26
|
+
}): {
|
|
27
|
+
eligible: {
|
|
28
|
+
candidateId: string;
|
|
29
|
+
taskId: string;
|
|
30
|
+
status: string;
|
|
31
|
+
createdAt: string;
|
|
32
|
+
processingState: string | null;
|
|
33
|
+
}[];
|
|
34
|
+
corrupt: {
|
|
35
|
+
candidateId: string;
|
|
36
|
+
taskId: string;
|
|
37
|
+
status: string;
|
|
38
|
+
createdAt: string;
|
|
39
|
+
}[];
|
|
40
|
+
};
|
|
41
|
+
getAdmissionDocument(candidateId: string): Promise<{
|
|
42
|
+
ok: true;
|
|
43
|
+
document: CandidateAdmissionDocument | null;
|
|
44
|
+
} | {
|
|
45
|
+
ok: false;
|
|
46
|
+
reason: string;
|
|
47
|
+
}>;
|
|
48
|
+
appendAdmissionEvaluation(candidateId: string, evaluation: AdmissionEvaluationRecord): Promise<{
|
|
49
|
+
status: 'appended' | 'reused';
|
|
50
|
+
document: CandidateAdmissionDocument;
|
|
51
|
+
} | {
|
|
52
|
+
status: 'refused';
|
|
53
|
+
reason: string;
|
|
54
|
+
}>;
|
|
55
|
+
updateAdmissionProcessing(candidateId: string, processing: AdmissionProcessingRecord): Promise<boolean>;
|
|
12
56
|
}
|
|
13
57
|
//# sourceMappingURL=sqlite-candidate-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-candidate-store.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/store/candidate/sqlite-candidate-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"sqlite-candidate-store.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/store/candidate/sqlite-candidate-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE5E,OAAO,EAKL,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAChC,MAAM,yBAAyB,CAAC;AAoCjC,qBAAa,oBAAqB,YAAW,cAAc;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU;IAAvC,YAA6B,UAAU,EAAE,gBAAgB,EAAI;IAEvD,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CActE;IAEK,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CASvE;IAEK,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE;QAAE,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAgB/G;IAEK,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,eAAe,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,eAAe,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAatJ;IAED;;;;;;;;;OASG;IACH,kCAAkC,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG;QAC/E,QAAQ,EAAE;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,EAAE,CAAC;QACvH,OAAO,EAAE;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KACvF,CAoDA;IAEK,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CACtD;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,0BAA0B,GAAG,IAAI,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAC1F,CAKA;IAEK,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,yBAAyB,GAAG,OAAO,CAClG;QAAE,MAAM,EAAE,UAAU,GAAG,QAAQ,CAAC;QAAC,QAAQ,EAAE,0BAA0B,CAAA;KAAE,GAAG;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAChH,CAuCA;IAEK,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,yBAAyB,GAAG,OAAO,CAAC,OAAO,CAAC,CAqB5G;CACF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { resolveRecommendationKind } from './recommendation-kind-resolver.js';
|
|
2
|
+
import { appendAdmissionEvaluation, parseAdmissionDocument, serializeAdmissionDocument, withProcessing, } from './admission-document.js';
|
|
2
3
|
function mapRow(r) {
|
|
3
4
|
return {
|
|
4
5
|
candidateId: r.candidate_id,
|
|
@@ -80,5 +81,140 @@ export class SqliteCandidateStore {
|
|
|
80
81
|
.run(newStatus, candidateId, expectedStatus);
|
|
81
82
|
return info.changes > 0;
|
|
82
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* SPEC §9.1 (review P1): the diagnosis post-processing backlog. Candidates
|
|
86
|
+
* of SUCCEEDED diagnostician tasks whose admission/intake/seeding never
|
|
87
|
+
* completed — INCLUDING candidates committed by the diag_router SUBTASK
|
|
88
|
+
* (resolved to the diagnostician parent through subtask.inputRef) and
|
|
89
|
+
* legacy consumed-but-unseeded orphans (admission_json NULL + consumed).
|
|
90
|
+
* Terminal processing states are excluded. `taskId` is always the PARENT
|
|
91
|
+
* diagnostician task (the resume entry reads the original pain input from
|
|
92
|
+
* the parent and the router output from the subtask run).
|
|
93
|
+
*/
|
|
94
|
+
listDiagnosisPostProcessingBacklog(options) {
|
|
95
|
+
const db = this.connection.getDb();
|
|
96
|
+
const nowIso = options.nowIso ?? new Date().toISOString();
|
|
97
|
+
// SPEC review round-4 P1: json_extract throws on malformed admission_json
|
|
98
|
+
// and would fail the WHOLE backlog scan. json_valid() filters without
|
|
99
|
+
// throwing: eligible rows need a parseable (or absent) document; corrupt
|
|
100
|
+
// rows are surfaced SEPARATELY as a candidate-level queryable blocker —
|
|
101
|
+
// never deleted, never treated as unrecorded, and never eligible for
|
|
102
|
+
// governance writes (the shared write gate independently refuses them).
|
|
103
|
+
const eligible = db.prepare(`
|
|
104
|
+
SELECT pc.candidate_id AS candidateId,
|
|
105
|
+
COALESCE(parent.task_id, ct.task_id) AS taskId,
|
|
106
|
+
pc.status AS status,
|
|
107
|
+
pc.created_at AS createdAt,
|
|
108
|
+
json_extract(pc.admission_json, '$.processing.state') AS processingState
|
|
109
|
+
FROM principle_candidates pc
|
|
110
|
+
JOIN tasks ct ON ct.task_id = pc.task_id
|
|
111
|
+
LEFT JOIN tasks parent
|
|
112
|
+
ON parent.task_id = ct.input_ref AND parent.task_kind = 'diagnostician'
|
|
113
|
+
WHERE COALESCE(parent.task_kind, ct.task_kind) = 'diagnostician'
|
|
114
|
+
AND COALESCE(parent.status, ct.status) = 'succeeded'
|
|
115
|
+
AND (pc.admission_json IS NULL OR json_valid(pc.admission_json) = 1)
|
|
116
|
+
AND (
|
|
117
|
+
(pc.admission_json IS NULL AND pc.status IN ('pending', 'consumed'))
|
|
118
|
+
OR (
|
|
119
|
+
pc.admission_json IS NOT NULL
|
|
120
|
+
AND COALESCE(json_extract(pc.admission_json, '$.processing.state'), 'not_started') IN ('not_started', 'in_progress')
|
|
121
|
+
AND (
|
|
122
|
+
json_extract(pc.admission_json, '$.processing.nextRetryAt') IS NULL
|
|
123
|
+
OR json_extract(pc.admission_json, '$.processing.nextRetryAt') <= ?
|
|
124
|
+
)
|
|
125
|
+
)
|
|
126
|
+
)
|
|
127
|
+
ORDER BY pc.created_at ASC
|
|
128
|
+
LIMIT ?
|
|
129
|
+
`).all(nowIso, options.limit);
|
|
130
|
+
const corrupt = db.prepare(`
|
|
131
|
+
SELECT pc.candidate_id AS candidateId,
|
|
132
|
+
COALESCE(parent.task_id, ct.task_id) AS taskId,
|
|
133
|
+
pc.status AS status,
|
|
134
|
+
pc.created_at AS createdAt
|
|
135
|
+
FROM principle_candidates pc
|
|
136
|
+
JOIN tasks ct ON ct.task_id = pc.task_id
|
|
137
|
+
LEFT JOIN tasks parent
|
|
138
|
+
ON parent.task_id = ct.input_ref AND parent.task_kind = 'diagnostician'
|
|
139
|
+
WHERE COALESCE(parent.task_kind, ct.task_kind) = 'diagnostician'
|
|
140
|
+
AND COALESCE(parent.status, ct.status) = 'succeeded'
|
|
141
|
+
AND pc.admission_json IS NOT NULL AND json_valid(pc.admission_json) = 0
|
|
142
|
+
ORDER BY pc.created_at ASC
|
|
143
|
+
|
|
144
|
+
`).all();
|
|
145
|
+
return { eligible, corrupt };
|
|
146
|
+
}
|
|
147
|
+
async getAdmissionDocument(candidateId) {
|
|
148
|
+
const db = this.connection.getDb();
|
|
149
|
+
const row = db.prepare('SELECT admission_json FROM principle_candidates WHERE candidate_id = ?').get(candidateId);
|
|
150
|
+
if (row === undefined)
|
|
151
|
+
return { ok: false, reason: 'candidate_not_found' };
|
|
152
|
+
return parseAdmissionDocument(row.admission_json);
|
|
153
|
+
}
|
|
154
|
+
async appendAdmissionEvaluation(candidateId, evaluation) {
|
|
155
|
+
const db = this.connection.getDb();
|
|
156
|
+
// SPEC review S3: read-modify-write under BEGIN IMMEDIATE so two
|
|
157
|
+
// processes (worker + CLI) can never interleave read→read→write→write
|
|
158
|
+
// and drop an evaluation or clobber the processing domain. The single
|
|
159
|
+
// write authority stays this store; the idempotency contract is
|
|
160
|
+
// unchanged (same fingerprint+policy reuses).
|
|
161
|
+
let outcome = { status: 'refused', reason: 'admission_append_not_executed' };
|
|
162
|
+
const applyAppend = db.transaction(() => {
|
|
163
|
+
const read = db.prepare('SELECT admission_json FROM principle_candidates WHERE candidate_id = ?').get(candidateId);
|
|
164
|
+
if (read === undefined) {
|
|
165
|
+
outcome = { status: 'refused', reason: 'candidate_not_found' };
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
const parsed = parseAdmissionDocument(read.admission_json);
|
|
169
|
+
if (!parsed.ok) {
|
|
170
|
+
outcome = { status: 'refused', reason: parsed.reason ?? 'admission_json_invalid' };
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
const result = appendAdmissionEvaluation(parsed.document, evaluation);
|
|
174
|
+
if (result.status === 'refused') {
|
|
175
|
+
outcome = result;
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
const serialized = serializeAdmissionDocument(result.document);
|
|
179
|
+
if (!serialized.ok) {
|
|
180
|
+
outcome = { status: 'refused', reason: serialized.reason };
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
const info = db.prepare('UPDATE principle_candidates SET admission_json = ? WHERE candidate_id = ?')
|
|
184
|
+
.run(serialized.json, candidateId);
|
|
185
|
+
if (info.changes === 0) {
|
|
186
|
+
outcome = { status: 'refused', reason: 'candidate_not_found' };
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
outcome = { status: result.status, document: result.document };
|
|
190
|
+
});
|
|
191
|
+
applyAppend.immediate();
|
|
192
|
+
return outcome;
|
|
193
|
+
}
|
|
194
|
+
async updateAdmissionProcessing(candidateId, processing) {
|
|
195
|
+
const db = this.connection.getDb();
|
|
196
|
+
// SPEC review S3: same BEGIN IMMEDIATE read-modify-write as
|
|
197
|
+
// appendAdmissionEvaluation — processing updates and evaluation appends
|
|
198
|
+
// from different processes serialize here instead of overwriting each
|
|
199
|
+
// other (evaluation history is never lost, processing state never reset).
|
|
200
|
+
let updated = false;
|
|
201
|
+
const applyProcessing = db.transaction(() => {
|
|
202
|
+
const read = db.prepare('SELECT admission_json FROM principle_candidates WHERE candidate_id = ?').get(candidateId);
|
|
203
|
+
if (read === undefined)
|
|
204
|
+
return;
|
|
205
|
+
const parsed = parseAdmissionDocument(read.admission_json);
|
|
206
|
+
if (!parsed.ok)
|
|
207
|
+
return;
|
|
208
|
+
const document = withProcessing(parsed.document, processing);
|
|
209
|
+
const serialized = serializeAdmissionDocument(document);
|
|
210
|
+
if (!serialized.ok)
|
|
211
|
+
return;
|
|
212
|
+
const info = db.prepare('UPDATE principle_candidates SET admission_json = ? WHERE candidate_id = ?')
|
|
213
|
+
.run(serialized.json, candidateId);
|
|
214
|
+
updated = info.changes > 0;
|
|
215
|
+
});
|
|
216
|
+
applyProcessing.immediate();
|
|
217
|
+
return updated;
|
|
218
|
+
}
|
|
83
219
|
}
|
|
84
220
|
//# sourceMappingURL=sqlite-candidate-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-candidate-store.js","sourceRoot":"","sources":["../../../../src/runtime-v2/store/candidate/sqlite-candidate-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"sqlite-candidate-store.js","sourceRoot":"","sources":["../../../../src/runtime-v2/store/candidate/sqlite-candidate-store.ts"],"names":[],"mappings":"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"}
|