@sema-agent/server 7.131.0 → 7.133.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/MIGRATION.md +575 -0
- package/README.md +12 -9
- package/README.zh-CN.md +9 -6
- package/USAGE.md +326 -98
- package/deploy/sema-up/README.md +19 -1
- package/deploy/sema-up/chart/templates/server-v4pro.yaml +5 -2
- package/deploy/sema-up/chart/templates/server.yaml +5 -2
- package/deploy/sema-up/stack/compose.yaml +3 -0
- package/deploy/sema-up/stack/sema-stack-cluster.yaml +4 -2
- package/dist/adoption/plan.d.ts +3 -2
- package/dist/adoption/plan.js +7 -5
- package/dist/adoption/runner.js +3 -10
- package/dist/adoption/sql.d.ts +3 -2
- package/dist/adoption/sql.js +3 -5
- package/dist/adoption/wire.d.ts +4 -1
- package/dist/adoption/wire.js +1 -0
- package/dist/approval-ask-audit-store.d.ts +31 -13
- package/dist/approval-ask-audit-store.js +272 -74
- package/dist/approval-ask-machine.d.ts +15 -0
- package/dist/approval-ask-machine.js +6 -0
- package/dist/approval-ask-retention.d.ts +136 -0
- package/dist/approval-ask-retention.js +102 -0
- package/dist/approval-card.d.ts +82 -20
- package/dist/approval-card.js +46 -16
- package/dist/approval-deny-reasons.d.ts +1 -1
- package/dist/approval.d.ts +9 -0
- package/dist/approval.js +24 -3
- package/dist/audit.d.ts +33 -19
- package/dist/audit.js +12 -16
- package/dist/auth-bridge.d.ts +4 -0
- package/dist/auth-bridge.js +10 -11
- package/dist/bake-runner/main.js +3 -2
- package/dist/boot/deferred-sandbox-path-env.js +1 -1
- package/dist/boot/deployment-mods.d.ts +31 -0
- package/dist/boot/deployment-mods.js +26 -0
- package/dist/boot/execution-env.d.ts +1 -1
- package/dist/boot/execution-env.js +27 -12
- package/dist/boot/execution-lane.js +11 -0
- package/dist/boot/leader.js +2 -0
- package/dist/boot/memory-boundary.d.ts +2 -2
- package/dist/boot/memory-boundary.js +2 -2
- package/dist/boot/memory-consolidation.d.ts +5 -4
- package/dist/boot/memory-consolidation.js +7 -6
- package/dist/boot/org-delivery.d.ts +28 -0
- package/dist/boot/org-delivery.js +20 -0
- package/dist/boot/read-deny-anchor-audit.d.ts +17 -0
- package/dist/boot/read-deny-anchor-audit.js +36 -0
- package/dist/boot/reapers.d.ts +3 -0
- package/dist/boot/reapers.js +21 -1
- package/dist/boot/resolve-spec.d.ts +4 -5
- package/dist/boot/resolve-spec.js +74 -123
- package/dist/boot/runner-deps.d.ts +19 -8
- package/dist/boot/runner-deps.js +15 -2
- package/dist/boot/session-faces.d.ts +2 -7
- package/dist/boot/session-faces.js +4 -2
- package/dist/boot/stage-02-web-admin-pull.js +4 -1
- package/dist/boot/stage-03-store-backend.d.ts +1 -1
- package/dist/boot/stage-03-store-backend.js +2 -2
- package/dist/boot/stage-04-stores.d.ts +1 -1
- package/dist/boot/stage-05-execution-env.d.ts +4 -4
- package/dist/boot/stage-05-execution-env.js +7 -10
- package/dist/boot/stage-06-runners.d.ts +4 -2
- package/dist/boot/stage-06-runners.js +11 -7
- package/dist/boot/stage-07-capability-layer.d.ts +4 -2
- package/dist/boot/stage-07-capability-layer.js +27 -6
- package/dist/boot/stage-08-reapers.d.ts +4 -2
- package/dist/boot/stage-08-reapers.js +2 -2
- package/dist/boot/stage-09-leader.d.ts +6 -9
- package/dist/boot/stage-10-http-server.d.ts +6 -9
- package/dist/boot/stage-10-http-server.js +7 -9
- package/dist/boot/stores.d.ts +1 -1
- package/dist/boot/stores.js +7 -8
- package/dist/boot/web-admin.d.ts +4 -3
- package/dist/boot/web-admin.js +186 -98
- package/dist/boot/workflow-orchestration.d.ts +2 -0
- package/dist/boot/workflow-orchestration.js +2 -1
- package/dist/brain.js +25 -25
- package/dist/breaker-key.d.ts +6 -0
- package/dist/breaker-key.js +29 -0
- package/dist/budget.js +5 -4
- package/dist/caller-text-echo.d.ts +23 -0
- package/dist/caller-text-echo.js +21 -0
- package/dist/capabilities/brand-identity.d.ts +26 -0
- package/dist/capabilities/brand-identity.js +27 -0
- package/dist/capabilities/center-plugins.d.ts +7 -0
- package/dist/capabilities/center-plugins.js +1 -1
- package/dist/capabilities/center-prompts.d.ts +32 -59
- package/dist/capabilities/center-prompts.js +18 -32
- package/dist/capabilities/composite-members.d.ts +1 -1
- package/dist/capabilities/composite-members.js +1 -1
- package/dist/capabilities/engine-capabilities.js +2 -1
- package/dist/capabilities/execution-lane.js +2 -2
- package/dist/capabilities/hands-lane.d.ts +30 -6
- package/dist/capabilities/hands-lane.js +11 -1
- package/dist/capabilities/mcp-probe.d.ts +48 -3
- package/dist/capabilities/mcp-probe.js +47 -135
- package/dist/capabilities/scenarios.d.ts +95 -45
- package/dist/capabilities/scenarios.js +53 -38
- package/dist/capabilities/skills.d.ts +19 -4
- package/dist/capabilities/skills.js +30 -10
- package/dist/capability-facts.d.ts +34 -4
- package/dist/capability-facts.js +28 -2
- package/dist/center-config-tier.d.ts +69 -0
- package/dist/center-config-tier.js +42 -0
- package/dist/checkpoint-identity.d.ts +16 -0
- package/dist/checkpoint-identity.js +19 -0
- package/dist/config-catalog.d.ts +17 -10
- package/dist/config-catalog.js +47 -32
- package/dist/config-d-migration.d.ts +3 -1
- package/dist/config-d-migration.js +2 -2
- package/dist/config-dir-trust.d.ts +114 -0
- package/dist/config-dir-trust.js +388 -0
- package/dist/config-invariants.d.ts +18 -5
- package/dist/config-invariants.js +35 -3
- package/dist/config-lkg.d.ts +9 -9
- package/dist/config-lkg.js +20 -4
- package/dist/config-provider.d.ts +9 -2
- package/dist/config-provider.js +18 -6
- package/dist/config-types.d.ts +75 -20
- package/dist/config-types.js +8 -0
- package/dist/config.d.ts +13 -0
- package/dist/config.js +137 -62
- package/dist/delegated-session-owner.d.ts +185 -0
- package/dist/delegated-session-owner.js +119 -0
- package/dist/device-protocol.d.ts +5 -3
- package/dist/device-protocol.js +1 -1
- package/dist/device-ws-hub.js +21 -2
- package/dist/device-ws-protocol.d.ts +70 -6
- package/dist/device-ws-protocol.js +50 -22
- package/dist/elicitation.js +3 -2
- package/dist/entry-problems.d.ts +34 -0
- package/dist/entry-problems.js +14 -0
- package/dist/env-name-allowlist-knobs.d.ts +12 -2
- package/dist/env-name-allowlist-knobs.js +5 -4
- package/dist/exec-bounds.d.ts +15 -3
- package/dist/exec-bounds.js +4 -0
- package/dist/execution-lane-caps.d.ts +56 -10
- package/dist/execution-lane-caps.js +50 -0
- package/dist/field-conflict.d.ts +43 -0
- package/dist/field-conflict.js +20 -0
- package/dist/fleet/fleet-bus.d.ts +80 -6
- package/dist/fleet/fleet-bus.js +41 -9
- package/dist/hooks/classic-stations.d.ts +91 -0
- package/dist/hooks/classic-stations.js +27 -0
- package/dist/hooks/command-spawn.d.ts +57 -0
- package/dist/hooks/command-spawn.js +139 -0
- package/dist/hooks/hook-llm.d.ts +8 -5
- package/dist/hooks/hook-llm.js +79 -36
- package/dist/hooks/hook-runner.d.ts +349 -95
- package/dist/hooks/hook-runner.js +855 -568
- package/dist/hooks/hook-source.d.ts +44 -0
- package/dist/hooks/hook-source.js +40 -0
- package/dist/http/active-run-conflict.d.ts +5 -13
- package/dist/http/active-run-conflict.js +17 -27
- package/dist/http/admission.d.ts +8 -2
- package/dist/http/admission.js +188 -101
- package/dist/http/approval-sweeps.js +99 -21
- package/dist/http/caller-trust.d.ts +77 -0
- package/dist/http/caller-trust.js +143 -0
- package/dist/http/checkpoint-ctx.d.ts +41 -24
- package/dist/http/checkpoint-ctx.js +23 -16
- package/dist/http/claimed-run.d.ts +14 -0
- package/dist/http/claimed-run.js +15 -0
- package/dist/http/device-placement.d.ts +2 -4
- package/dist/http/device-placement.js +7 -11
- package/dist/http/dispatch.d.ts +0 -4
- package/dist/http/dispatch.js +15 -13
- package/dist/http/durable-run-leg.d.ts +6 -33
- package/dist/http/durable-run-leg.js +36 -10
- package/dist/http/health-self-report.d.ts +7 -5
- package/dist/http/health-self-report.js +4 -18
- package/dist/http/owner-access.d.ts +56 -0
- package/dist/http/owner-access.js +42 -0
- package/dist/http/principal-gate.d.ts +70 -28
- package/dist/http/principal-gate.js +61 -15
- package/dist/http/readiness.d.ts +11 -5
- package/dist/http/readiness.js +10 -3
- package/dist/http/refusal-body.d.ts +21 -0
- package/dist/http/refusal-body.js +4 -0
- package/dist/http/request-guards.d.ts +43 -23
- package/dist/http/request-guards.js +53 -17
- package/dist/http/resume-ctx-read.d.ts +2 -5
- package/dist/http/resume-ctx-read.js +7 -4
- package/dist/http/resume-legs.d.ts +28 -4
- package/dist/http/resume-legs.js +169 -91
- package/dist/http/retired-service-deps.d.ts +43 -0
- package/dist/http/retired-service-deps.js +18 -0
- package/dist/http/route-ctx.d.ts +44 -28
- package/dist/http/route-ctx.js +4 -0
- package/dist/http/route-table.js +2 -0
- package/dist/http/routes/a2a-serve.js +3 -4
- package/dist/http/routes/admin-config-refresh.js +1 -1
- package/dist/http/routes/admin-drain.js +1 -1
- package/dist/http/routes/admin-memory-optout.js +5 -1
- package/dist/http/routes/adoption.js +2 -9
- package/dist/http/routes/approvals-assistant.js +49 -48
- package/dist/http/routes/background.js +3 -2
- package/dist/http/routes/capabilities.js +21 -5
- package/dist/http/routes/config-catalog.d.ts +3 -3
- package/dist/http/routes/config-catalog.js +1 -1
- package/dist/http/routes/devices.js +3 -17
- package/dist/http/routes/diagnostics.js +6 -2
- package/dist/http/routes/images.js +6 -7
- package/dist/http/routes/leader.js +1 -8
- package/dist/http/routes/mcp-reconnect.d.ts +1 -1
- package/dist/http/routes/mcp-reconnect.js +3 -2
- package/dist/http/routes/memory-bundle.js +1 -1
- package/dist/http/routes/memory-compliance.js +1 -1
- package/dist/http/routes/memory-consolidation.js +1 -1
- package/dist/http/routes/memory-origin.js +1 -1
- package/dist/http/routes/memory-policy.d.ts +1 -1
- package/dist/http/routes/memory-policy.js +3 -2
- package/dist/http/routes/notify-wake.js +8 -21
- package/dist/http/routes/observability.js +2 -2
- package/dist/http/routes/principal-inbox.d.ts +39 -0
- package/dist/http/routes/principal-inbox.js +76 -0
- package/dist/http/routes/retention-ops.js +2 -9
- package/dist/http/routes/rules.js +5 -18
- package/dist/http/routes/runs.d.ts +5 -0
- package/dist/http/routes/runs.js +34 -107
- package/dist/http/routes/session-sync.js +15 -26
- package/dist/http/routes/sessions.js +30 -40
- package/dist/http/routes/shared-memory.js +2 -13
- package/dist/http/routes/side-query.js +8 -7
- package/dist/http/routes/tasks.js +67 -21
- package/dist/http/routes/workflows.d.ts +351 -0
- package/dist/http/routes/workflows.js +153 -119
- package/dist/http/send.d.ts +33 -10
- package/dist/http/send.js +21 -4
- package/dist/http/server.d.ts +27 -18
- package/dist/http/server.js +34 -6
- package/dist/http/stored-body-replay.js +17 -4
- package/dist/http/submit-ctx.d.ts +25 -0
- package/dist/http/submit-ctx.js +40 -0
- package/dist/http/submit-replay.d.ts +4 -3
- package/dist/http/submit-replay.js +5 -4
- package/dist/http/wire-types.d.ts +11 -8
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -2
- package/dist/lane-home-probe.d.ts +112 -0
- package/dist/lane-home-probe.js +101 -0
- package/dist/leader/endpoint.d.ts +4 -1
- package/dist/leader/endpoint.js +11 -10
- package/dist/limit-refusal.d.ts +59 -0
- package/dist/limit-refusal.js +15 -0
- package/dist/main.js +1 -1
- package/dist/mcp-assertion-header.d.ts +32 -19
- package/dist/mcp-assertion-header.js +10 -9
- package/dist/mcp-tool-faces.d.ts +5 -0
- package/dist/mcp-tool-faces.js +6 -4
- package/dist/memory-project-layer.d.ts +37 -0
- package/dist/memory-project-layer.js +46 -0
- package/dist/memory-scope.d.ts +24 -17
- package/dist/memory-scope.js +24 -8
- package/dist/memory-sync-client.d.ts +27 -13
- package/dist/memory-sync-client.js +107 -18
- package/dist/model-entry-refusal.d.ts +9 -1
- package/dist/model-entry-refusal.js +6 -1
- package/dist/model-plane-face.d.ts +51 -0
- package/dist/model-plane-face.js +24 -0
- package/dist/model-provider.d.ts +44 -12
- package/dist/model-provider.js +21 -2
- package/dist/model-route-endpoint.d.ts +9 -12
- package/dist/model-route-endpoint.js +8 -11
- package/dist/model-route-env.d.ts +22 -0
- package/dist/model-route-env.js +2 -0
- package/dist/model-route-gap.d.ts +60 -30
- package/dist/model-route-gap.js +21 -15
- package/dist/observability/corrupt-read-seat.d.ts +7 -0
- package/dist/observability/corrupt-read-seat.js +9 -0
- package/dist/observability/cost-taxonomy.d.ts +7 -7
- package/dist/observability/err-text.d.ts +6 -0
- package/dist/observability/err-text.js +18 -4
- package/dist/observability/fail-open.d.ts +76 -14
- package/dist/observability/fail-open.js +76 -14
- package/dist/observability/metrics.js +4 -1
- package/dist/observability/prompt-manifest.d.ts +33 -82
- package/dist/observability/prompt-manifest.js +122 -17
- package/dist/observability/run-terminal.js +14 -6
- package/dist/observability/secret-env-scrub.d.ts +13 -1
- package/dist/observability/secret-env-scrub.js +13 -1
- package/dist/observability/tool-trace.d.ts +16 -21
- package/dist/observability/tool-trace.js +58 -49
- package/dist/operator-ask.d.ts +10 -0
- package/dist/operator-ask.js +3 -0
- package/dist/orchestration/workflow-agent-session-index.d.ts +12 -12
- package/dist/orchestration/workflow-agent-session-index.js +9 -13
- package/dist/orchestration/workflow-completion-inbox.d.ts +42 -15
- package/dist/orchestration/workflow-completion-inbox.js +13 -0
- package/dist/orchestration/workflow-notify-journal.d.ts +13 -32
- package/dist/orchestration/workflow-notify-journal.js +27 -34
- package/dist/orchestration/workflow-park-decision.d.ts +89 -0
- package/dist/orchestration/workflow-park-decision.js +118 -0
- package/dist/org-delivery-gate.d.ts +81 -0
- package/dist/org-delivery-gate.js +59 -0
- package/dist/panel-tool-names.d.ts +23 -0
- package/dist/panel-tool-names.js +8 -0
- package/dist/parked-decide.d.ts +39 -6
- package/dist/parked-decide.js +98 -51
- package/dist/parked-revive-surface.d.ts +9 -2
- package/dist/parked-revive-surface.js +11 -8
- package/dist/per-task-image.d.ts +7 -1
- package/dist/per-task-image.js +3 -3
- package/dist/permission-rule-list.d.ts +1 -1
- package/dist/permission-rule-list.js +2 -2
- package/dist/plain-string-record.d.ts +25 -0
- package/dist/plain-string-record.js +32 -0
- package/dist/plugins/approval-ask-store-file.d.ts +16 -1
- package/dist/plugins/approval-ask-store-file.js +21 -0
- package/dist/plugins/approval-ask-store-memory.d.ts +18 -1
- package/dist/plugins/approval-ask-store-memory.js +34 -2
- package/dist/plugins/approval-ask-store-sql.d.ts +25 -0
- package/dist/plugins/approval-ask-store-sql.js +37 -1
- package/dist/plugins/blob-backend.d.ts +83 -15
- package/dist/plugins/blob-backend.js +68 -15
- package/dist/plugins/breaker-state-sql.d.ts +2 -2
- package/dist/plugins/breaker-state-sql.js +4 -4
- package/dist/plugins/caching-session-store.d.ts +3 -0
- package/dist/plugins/caching-session-store.js +3 -0
- package/dist/plugins/checkpoint-store-sql.d.ts +28 -4
- package/dist/plugins/checkpoint-store-sql.js +59 -28
- package/dist/plugins/file-history-store-sql.d.ts +5 -2
- package/dist/plugins/file-history-store-sql.js +3 -1
- package/dist/plugins/file-run-store.d.ts +5 -13
- package/dist/plugins/file-run-store.js +9 -0
- package/dist/plugins/fork-routing-session-store.d.ts +9 -1
- package/dist/plugins/fork-routing-session-store.js +12 -1
- package/dist/plugins/host-platform.d.ts +2 -0
- package/dist/plugins/host-platform.js +2 -1
- package/dist/plugins/k8s-bg-scripts.d.ts +11 -0
- package/dist/plugins/k8s-bg-scripts.js +22 -0
- package/dist/plugins/local-checkpoint-store.d.ts +2 -0
- package/dist/plugins/local-checkpoint-store.js +11 -3
- package/dist/plugins/local-session-store.d.ts +1 -1
- package/dist/plugins/local-session-store.js +1 -1
- package/dist/plugins/local-session-window.d.ts +39 -0
- package/dist/plugins/local-session-window.js +54 -0
- package/dist/plugins/mailbox-recipient-lifecycle.d.ts +3 -2
- package/dist/plugins/mailbox-store-sql.d.ts +30 -48
- package/dist/plugins/mailbox-store-sql.js +77 -52
- package/dist/plugins/memory-embedder-fingerprint.js +2 -1
- package/dist/plugins/memory-run-store.d.ts +5 -13
- package/dist/plugins/memory-run-store.js +8 -0
- package/dist/plugins/one-time-migrations.d.ts +245 -93
- package/dist/plugins/one-time-migrations.js +668 -207
- package/dist/plugins/org-delivery-quota-store.d.ts +123 -0
- package/dist/plugins/org-delivery-quota-store.js +228 -0
- package/dist/plugins/permission-rule-store-sql.d.ts +13 -7
- package/dist/plugins/permission-rule-store-sql.js +4 -18
- package/dist/plugins/pg-pool.js +39 -7
- package/dist/plugins/pg-session-storage.d.ts +20 -8
- package/dist/plugins/pg-session-storage.js +34 -21
- package/dist/plugins/remote-env-adb.d.ts +12 -12
- package/dist/plugins/remote-env-adb.js +21 -6
- package/dist/plugins/remote-env-device.js +3 -0
- package/dist/plugins/remote-env-e2b.d.ts +1 -1
- package/dist/plugins/remote-env-e2b.js +21 -9
- package/dist/plugins/remote-env-host.d.ts +9 -9
- package/dist/plugins/remote-env-host.js +10 -32
- package/dist/plugins/remote-env-k8s.d.ts +103 -38
- package/dist/plugins/remote-env-k8s.js +288 -95
- package/dist/plugins/remote-env-local-docker.d.ts +27 -13
- package/dist/plugins/remote-env-local-docker.js +82 -11
- package/dist/plugins/remote-env-ssh.d.ts +21 -12
- package/dist/plugins/remote-env-ssh.js +117 -5
- package/dist/plugins/remote-shell.d.ts +0 -1
- package/dist/plugins/remote-shell.js +1 -2
- package/dist/plugins/retention-store-sql.js +6 -2
- package/dist/plugins/run-store-sql.d.ts +16 -14
- package/dist/plugins/run-store-sql.js +22 -2
- package/dist/plugins/schema-consistency.d.ts +54 -0
- package/dist/plugins/schema-consistency.js +52 -0
- package/dist/plugins/schema-indexes.js +2 -0
- package/dist/plugins/send-user-file.js +2 -2
- package/dist/plugins/session-epoch-anchor.d.ts +39 -0
- package/dist/plugins/session-epoch-anchor.js +22 -0
- package/dist/plugins/session-store.d.ts +18 -8
- package/dist/plugins/session-store.js +15 -4
- package/dist/plugins/shared-memory-store-sql.d.ts +9 -3
- package/dist/plugins/shared-memory-store-sql.js +5 -16
- package/dist/plugins/sql-driver.d.ts +205 -1
- package/dist/plugins/sql-driver.js +325 -13
- package/dist/plugins/sql-errors.d.ts +64 -0
- package/dist/plugins/sql-errors.js +57 -0
- package/dist/plugins/store-backend.d.ts +36 -1
- package/dist/plugins/store-backend.js +42 -15
- package/dist/plugins/store-contracts.d.ts +42 -0
- package/dist/plugins/store-contracts.js +1 -0
- package/dist/plugins/tidb-pool.d.ts +6 -1
- package/dist/plugins/tidb-pool.js +44 -10
- package/dist/plugins/tidb-session-storage.d.ts +8 -11
- package/dist/plugins/tidb-session-storage.js +6 -16
- package/dist/plugins/tidb-session-store.d.ts +24 -4
- package/dist/plugins/tidb-session-store.js +29 -5
- package/dist/plugins/workflow-journal-store-sql.d.ts +73 -19
- package/dist/plugins/workflow-journal-store-sql.js +19 -6
- package/dist/plugins/workflow-run-store-sql.d.ts +30 -8
- package/dist/plugins/workflow-run-store-sql.js +50 -9
- package/dist/posture-source.d.ts +18 -10
- package/dist/posture-source.js +4 -1
- package/dist/project-identity.d.ts +45 -6
- package/dist/project-identity.js +162 -8
- package/dist/project-layer-key.d.ts +28 -0
- package/dist/project-layer-key.js +29 -0
- package/dist/prompts-domain-validate.d.ts +17 -61
- package/dist/prompts-domain-validate.js +9 -119
- package/dist/question.js +3 -2
- package/dist/read-deny-entry.d.ts +25 -0
- package/dist/read-deny-entry.js +12 -0
- package/dist/read-face-posture.d.ts +37 -11
- package/dist/read-face-posture.js +32 -3
- package/dist/request-key-closure.d.ts +9 -2
- package/dist/request-key-closure.js +11 -5
- package/dist/request-value-closure.d.ts +5 -0
- package/dist/request-value-closure.js +11 -3
- package/dist/rule-entry-list.d.ts +38 -11
- package/dist/rule-entry-list.js +106 -30
- package/dist/rules-consent.js +3 -4
- package/dist/run-acceptance.d.ts +19 -3
- package/dist/run-acceptance.js +13 -1
- package/dist/run-local.js +54 -24
- package/dist/runs.d.ts +15 -8
- package/dist/runs.js +35 -1
- package/dist/runtime-caps-resolver.d.ts +16 -6
- package/dist/runtime-caps-resolver.js +18 -5
- package/dist/sandbox-pkg-source.d.ts +19 -1
- package/dist/sandbox-pkg-source.js +29 -7
- package/dist/security.d.ts +87 -9
- package/dist/security.js +52 -9
- package/dist/server-secret-env.d.ts +44 -18
- package/dist/server-secret-env.js +49 -8
- package/dist/session-error-wire.d.ts +19 -2
- package/dist/session-error-wire.js +5 -1
- package/dist/session-incarnation.d.ts +15 -5
- package/dist/session-incarnation.js +16 -9
- package/dist/session-titled-frame.d.ts +33 -0
- package/dist/session-titled-frame.js +4 -0
- package/dist/session-titler.d.ts +9 -1
- package/dist/session-titler.js +27 -6
- package/dist/spec-fields.d.ts +28 -16
- package/dist/spec-fields.js +66 -54
- package/dist/sql-engine-posture.d.ts +31 -4
- package/dist/sql-engine-posture.js +36 -1
- package/dist/stored-request-tool-axes-m19.d.ts +19 -4
- package/dist/stored-request-tool-axes-m19.js +30 -2
- package/dist/task-a2a.d.ts +9 -1
- package/dist/task-a2a.js +73 -47
- package/dist/task-cwd.d.ts +1 -1
- package/dist/task-mcp.d.ts +46 -58
- package/dist/task-mcp.js +82 -107
- package/dist/task-settings.d.ts +95 -108
- package/dist/task-settings.js +77 -98
- package/dist/text-bidi.d.ts +1 -48
- package/dist/text-bidi.js +3 -5
- package/dist/tighten-only-seats.d.ts +150 -0
- package/dist/tighten-only-seats.js +196 -0
- package/dist/tool-approval.d.ts +304 -88
- package/dist/tool-approval.js +623 -239
- package/dist/trace/core-keyset-guard.d.ts +122 -20
- package/dist/trace/engine-notice-wire.d.ts +11 -3
- package/dist/trace/engine-notice-wire.js +8 -1
- package/dist/trace/exit-seat.d.ts +28 -0
- package/dist/trace/exit-seat.js +76 -0
- package/dist/trace/ledger-events.d.ts +6 -3
- package/dist/trace/ledger-sink.js +4 -1
- package/dist/trace/model-segment.js +1 -1
- package/dist/trace/project.d.ts +98 -17
- package/dist/trace/project.js +98 -50
- package/dist/trace/projection-table.d.ts +100 -0
- package/dist/trace/projection-table.js +130 -0
- package/dist/trace/redact.d.ts +54 -0
- package/dist/trace/redact.js +778 -152
- package/dist/trace/self-minted-wire.d.ts +345 -1
- package/dist/trace/self-minted-wire.js +117 -1
- package/dist/trace/wire-projection-faces.d.ts +377 -3
- package/dist/trace/wire-projection-faces.js +164 -1
- package/dist/url-refusal.js +2 -0
- package/dist/web-admin-client/apply-effective.d.ts +12 -0
- package/dist/web-admin-client/apply-effective.js +56 -5
- package/dist/web-admin-client/candidate-gate.d.ts +6 -6
- package/dist/web-admin-client/candidate-gate.js +3 -3
- package/dist/web-admin-client/facade.d.ts +1 -1
- package/dist/web-admin-client/facade.js +1 -1
- package/dist/web-admin-client/http-client.js +0 -6
- package/dist/web-admin-client/read-face.js +5 -9
- package/dist/web-admin-client/read-warnings.d.ts +13 -0
- package/dist/web-admin-client/read-warnings.js +10 -0
- package/dist/web-admin-client/skills-mcp.d.ts +3 -0
- package/dist/web-admin-client/skills-mcp.js +11 -9
- package/dist/web-admin-client/types.d.ts +2 -3
- package/dist/workspace-cache.d.ts +35 -0
- package/dist/workspace-cache.js +36 -0
- package/dist/workspace-space.d.ts +3 -2
- package/dist/workspace-space.js +2 -0
- package/docs/DEVICE-EXECUTOR-PROTOCOL.md +65 -10
- package/package.json +8 -4
- package/scripts/drain-check-local.mjs +34 -1
- package/scripts/drain-check.mysql.sql +30 -2
- package/scripts/drain-check.pg.sql +29 -2
- package/dist/capabilities/memory-notice.d.ts +0 -138
- package/dist/capabilities/memory-notice.js +0 -64
- package/dist/capabilities/prompt.d.ts +0 -17
- package/dist/capabilities/prompt.js +0 -6
- package/dist/mcp-content-origin.d.ts +0 -34
- package/dist/mcp-content-origin.js +0 -10
- package/dist/tool-axis-words.d.ts +0 -27
- package/dist/tool-axis-words.js +0 -9
- package/dist/wire-name-bound.d.ts +0 -14
- package/dist/wire-name-bound.js +0 -13
|
@@ -11,9 +11,8 @@
|
|
|
11
11
|
* 占位日期)—— 不计到期;抬 `package.json` 到那一版的发布准备提交把两格回填成发布日 / +30 天。到期门同时是回填门:`package.json` 版本
|
|
12
12
|
* **≥** 某条未发布形的 `introducedIn` 而两格仍是 `null` ⇒ 红(发布准备提交就是回填时刻,忘了就当场红;版本更低 = 还在开发,不红)。
|
|
13
13
|
* 最后一条删掉时,整个文件连同 `StoreBackend.runOneTimeMigrations()`(npm 公面上的接口成员)、`NO_SQL_MIGRATIONS`、
|
|
14
|
-
* `logOneTimeMigrations` / `runAndLogOneTimeMigrations`、三只后端与两只测试夹具上的实现、`boot/stores.ts` 的调用点一起删 ——
|
|
15
|
-
* (
|
|
16
|
-
* 删最后一条的车要把它搬进启动期对账(`schema-consistency.ts` 一族)并保住它先于一切建表与改写的位置(现位:`store-backend.ts` 里 SQL 两后端的 `ensureSchema()` 自身,探针先于它的第一条 CREATE),不要随文件删掉。
|
|
14
|
+
* `logOneTimeMigrations` / `runAndLogOneTimeMigrations`、三只后端与两只测试夹具上的实现、`boot/stores.ts` 的调用点一起删 —— 零例外:本文件里只有带窗的迁移与它们自己的
|
|
15
|
+
* 帮手(两只在场探针、锁腿、方言适配器);没有窗的东西(跳版升级的库的拒启臂)住在起服对账一族(`schema-consistency.ts`),不在这里。
|
|
17
16
|
* 其余文件一律只写「窗口见本文件登记表」,不各写一个日期或版本 —— S-590 之前本文件头写死了一个删除版本号(7.75.0),
|
|
18
17
|
* 连同 11 个文件里的复述共 23 行;那一版过去了 28 个 minor 也没删,7.93.5 反倒往本文件里又加了 M4。
|
|
19
18
|
*
|
|
@@ -25,21 +24,10 @@
|
|
|
25
24
|
* ⇒ 换成本段:**升一次级把存量字节改完,兼容臂当场删干净**。代价是每一条在它的窗内每次启动都要跑一遍(第二次起全是
|
|
26
25
|
* 零命中的空转);收益是窗关之后可以把那一条连同它的 SQL 一起删,而读腿从引入那一版起就只有**一种**读法。
|
|
27
26
|
*
|
|
28
|
-
* ## 已退役的 M1–M3
|
|
27
|
+
* ## 已退役的 M1–M3
|
|
29
28
|
* 退役的整树快照索引表(M1)、退役的单座 steering 列(M2)、被上游改了名的闭集词 `unresolvable` → `ancestor_marked`(M3)三条的改写、计数与读数
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* M3 当年的「本版是否已在这只库上跑过」标记本来就是这两件退役 schema 的在场(7.74.0 之前的每一版 DDL 都建表与列,7.74.0 起都不再建;能写下旧拼法的
|
|
33
|
-
* 7.64.0–7.71.0 恒带两者),所以**旧拼法不另扫**:一条对账本 `task_event` 的无索引整表扫正是当年被判不许成为每次启动固定开销的东西
|
|
34
|
-
* (账本是全站最大的表,PG 池级 `statement_timeout` 会把它切成拒启、每次启动重演)。两件任一在场 ⇒ 这只库没有经过带迁移的版本 ⇒ 旧拼法的改写同样没跑过 ⇒ 拒句一并点名。
|
|
35
|
-
* 出路:先在 7.125.x(最后一个带这三条迁移的版)上起服一次让它们跑完,再升。
|
|
36
|
-
* **判据一只、读一处**:判据只有 {@link assertRetiredSchemaAbsent} 一只,唯一的读处是**探针口**({@link assertRetiredSchemaAbsentOnPool}):库一连上就探,先于 `ensureSchema()`
|
|
37
|
-
* 发出的任何一条 CREATE —— 一次会拒的起服不许先在库里建出几十张本版新表(`task_run` 还带着新列),否则拒句里「没动过库」就是假话,而按拒句指路去 7.125.x 起服的人会撞上
|
|
38
|
-
* 「库比 7.125.x 新」的第二道拒。探针与建表的先后只写在 `store-backend.ts` 里 SQL 两后端的 `ensureSchema()` 自身(装配处包一次)。迁移段入口({@link runSqlOneTimeMigrations})**不再问**这一问:
|
|
39
|
-
* 它只在 `ensureSchema()` 之后被起服序列调用,一个事实不在两处各读一遍;嵌入方走公开序列 `createStoreBackend()` → `ensureSchema()` → `runOneTimeMigrations()` 即得到这一问,零动作。
|
|
40
|
-
* 残余(如实):运维在第一次起带迁移的版本之前就把两件退役 schema 都手工删掉的库,残留的旧拼法由门记录的读腿接住 —— 7.129.0 起(core 7.51.0 #1731)
|
|
41
|
-
* 那只读腿按 core 的档案读法读,`unresolvable` 是 core 退役词注册表里的词 ⇒ 记录原词原样读回、不改写(`trace/project.ts` `screenedGate`);local 文件车道
|
|
42
|
-
* 没有表与列,没有这一问的探针 —— 引擎 File 店里已决 checkpoint 的记录按契约物理不可变,本仓没有合法缝改写它们(下游不改上游盘上格式),同由那条读腿接住。
|
|
29
|
+
* 窗关后已全部删码,登记行一并删。跳过了它们直接升的库由起服对账一族的拒启臂接住(`schema-consistency.ts` 头注「第二道对账」一节:两件退役 schema
|
|
30
|
+
* 任一在场 ⇒ 拒启、点名出路;先于一切建表)—— 那一道没有窗,所以不在本文件里。本段入口({@link runSqlOneTimeMigrations})不问这一问。
|
|
43
31
|
*
|
|
44
32
|
* ## 窗内的迁移(逐条的失败方向刻意不同)
|
|
45
33
|
* · **M4 审计明细里的 JSON 文本 `null`** —— S-550 把 `device_audit.detail` 的读回收进唯一属主并判形之后,
|
|
@@ -134,19 +122,20 @@
|
|
|
134
122
|
* `readSessionRulesShape` 读成它自己的文法,`compileSessionRuleBucket` 在那种文法下编译 `toolAllow`,归 `earlier_grammar` 的条目(文法 0 里拼写不是它所指名字的条目
|
|
135
123
|
* —— `Bash(rm:*)` / `Edit(src/**)` / `Bash(*)`:什么都不放行,文法 1 里是一条放行规则)删掉,其余原样,盖 `grammar: SESSION_RULES_GRAMMAR` —— 文法 0 与 1 在引擎里只差
|
|
136
124
|
* 这一条子句,所以改写后的行是引擎对原行读法的逐调用同义重述(名单保持在场:删到空 = 在场的空名单,什么都不放行)。**每一行**都改写(只盖戳的也写):改写之后
|
|
137
|
-
*
|
|
138
|
-
* (
|
|
125
|
+
* 部署里零无戳行,除下一条留下的行(引擎 7.52.0 #1790 起文法 0 里的 `*` 也是 `earlier_grammar` 惰性条目、只作废它自己 —— 与别的读不出的 allow 条目同一条判:删、盖戳;7.129.0–7.131.x 引擎把带 `*` 的名单整张读成作废,本步对那种行曾不改写、只点名,那一臂随引擎修正退役)。
|
|
126
|
+
* **盖戳前先问引擎读者**(S-1691,引擎 7.52.0 [ref]):行的 `toolDeny` 里有 `unreadableDenyEntries` 答的条目(引擎在这一行的文法里读成「不是任何一条规则」:空串、`-deploy`、非 ASCII 名、`(` 前带不可见空白 ……
|
|
127
|
+
* 7.129.0–7.131.x 的写口收下过)⇒ 引擎对这一行的**每一次工具调用都拒**(读成更少的规则是 fail-open,引擎不这么读),并按行自带的旧文法通告(`config.session_rules_earlier_grammar`,只对戳早于当前文法的行发)。
|
|
128
|
+
* 盖成当前文法戳什么都解不开,只让那条通告消失 ⇒ **整行不改写、不盖戳、不删任何条目**(同行 toolAllow 里该删的条目也不动 —— 不盖戳的行不做半截改写),收据点名(键 / 会话 / 条目 + 引擎读者对每条的原因词),
|
|
129
|
+
* 一行一条 warn `session_rule_row_unreadable_deny`;出路是 operator 按新文法改写那一行或删会话(MIGRATION 写了)。**其余 `toolDeny` 一个字节不动、不点名**:引擎读得出的 deny 条目在每个文法下读法相同
|
|
130
|
+
* (含只是没有对应工具的名字,如 `BASH`:那是引擎名审计的事,不是读不出)。本仓只问、不判 —— 读者只有引擎的 `unreadableDenyEntries`,不复刻它的条目读法。
|
|
139
131
|
* 本仓零自铸文法判断、零 `readRuleEntry` 直调(修前的 `oldGrammarReadingOf` 按条目种类自铸三分类,是第二只文法读者)。按原文 CAS 回写(MySQL 协议两边
|
|
140
132
|
* `CAST(… AS BINARY)`),`rev` / `gen` 不动;有被删条目的行一条 warn `session_rule_row_old_grammar_entries`(键哈希 / 会话 / 被删的条目,过脱敏器)。
|
|
141
133
|
* 这一拍没有别的写者(旧副本找不到 `rules`,本版副本在起服锁上等)。
|
|
142
134
|
* **终名只在每一行都判完之后出现**:`rules` 先改成进行中的名 `rule_entries_old_grammar`(旧副本从此找不到列),判读在这个名下跑(幂等:已改写的行再判零动作),
|
|
143
135
|
* 判完才改成 `rule_entries`。于是判读没走完 —— 抛了、或进程被杀 —— 列都停在进行中的名,下一次起服从它续判(已带戳的行引擎按它的戳读:零 `earlier_grammar`、
|
|
144
136
|
* 已有戳 ⇒ 零动作);没有「改回」臂(一条自己也可能失败的补偿),也没有「改名即终名」的窄窗(被杀后下一次起服把没判的行当新文法行读)。
|
|
145
|
-
* **收据随提交落,不随成功落**:一行改写提交(CAS 命中)
|
|
146
|
-
*
|
|
147
|
-
* ({@link runAndLogOneTimeMigrations})。理由:被删的条目没有第二次被报出来的机会 —— 下一次起服续判时那一行已是新形、没有可删的条目,零命中。只盖戳的改写不记:
|
|
148
|
-
* 戳不丢任何信息,重来再判零动作。
|
|
149
|
-
* 如实的残余:改写与那一行日志之间进程被杀、或一条改写的确认在连接上丢了 —— 收据没有耐久载体(不为一条短命的迁移另建迁移账表,见 M4 一节的同一条论证)。
|
|
137
|
+
* **收据随提交落,不随成功落**:一行改写提交(CAS 命中)的那一刻,它被删的条目就记进本次起服的那一只收据账({@link MigrationReceipts},每一条迁移同一只,见「收据账」一节);
|
|
138
|
+
* 只盖戳的改写不记:戳不丢任何信息,重来再判零动作。
|
|
150
139
|
* ③ **存量命令桶只点名、不改写**:新文法写不出旧命令桶的拒 —— 旧桶(引擎 7.50.x 粗命令名策略,`defaultAction: "deny"`)对读不成「一条命令名」的命令行
|
|
151
140
|
* 一律拒(`/bin/rm …`、管道、`&&`),`Bash(rm:*)` 只按命令名判、放过 `/bin/rm`。任何改写都是放宽(`commandDeny`)或改变放行面(`commandAllow`),
|
|
152
141
|
* 不由本仓替人做。⇒ 退役桶**一个字节不动**,读回照旧 `corrupt`(引擎形读法点名那只桶;与引擎文件店对同一形同判 —— 每一种店一个结局),
|
|
@@ -179,6 +168,10 @@
|
|
|
179
168
|
* 窗 = 发布日 + 30 天 = 停驻行的终局兜底窗缺省(`APPROVAL_TERMINAL_BACKSTOP_MS` 缺省 30 天)—— 与 M7 / M12 同一条论证。没有起服读数(它不写库)。
|
|
180
169
|
* 窗按**发布日**算、停驻行的期限按**停驻时刻**算 ⇒ 三类部署会有升级前停驻的行活过窗、窗关后回到「整条不进」:发布后才升级的部署(发布日到它升级那天之间
|
|
181
170
|
* 停驻的行)、把 `APPROVAL_TERMINAL_BACKSTOP_MS` 调长的部署、滚动升级里仍跑 7.129.x 的副本在窗内新写的行。与 M7 / M18 一样如实登记,不为它们加长窗。
|
|
171
|
+
* **A2A 一面**(core 7.53.0 #1835 提货批,同一只重读座、同一个窗,不另立迁移号):请求体 `a2aPeers[].toolAxes` 的判官也换成了引擎的 `readToolAxes`,7.131.x 的 A2A 读者
|
|
172
|
+
* 对每只 skill 的记录只挑三个轴、多余成员静默忽略 ⇒ 续跑重放腿同一只重读座按 **7.131.x 的 A2A 读法**重读一次(重读座按面分读者:两面升级前的读法不同 ——
|
|
173
|
+
* 7.131.x 的 A2A 读者对已知轴写坏是整条丢对端,重读照旧整条丢,不把 7.131.x 当时没挂上的对端救活),真挂上的对端一行 `a2a_tool_axes_read_as_before_upgrade`。窗仍按 7.130.0 的发布日算 ——
|
|
174
|
+
* 7.131.x 停驻、窗关(2026-11-15)之后才续跑的 A2A 行回到「整条不进」,与上一句三类部署同一处如实登记。
|
|
182
175
|
* **它是上游字段标准的限时例外**:引擎对 `toolAxes` 的标准是「坏键不丢、坏词不默认」(core `mcp-server-spec.d.ts`),窗内这一臂恰恰剔坏留好 ——
|
|
183
176
|
* 依据是持久数据律(存量数据不能「变红」,只许一次性迁移、窗关删码),只对升级前已经按这种读法跑过的存量体,且对运维响亮。新提交与部署腿不受它影响。
|
|
184
177
|
* · **M20 续跑重放腿上的存量 `settings.hooks`**(7.131.0)—— hooks 配置的唯一读者是契约包的 `classifyHooksConfig`(经 `parseHooksConfig`);升级前的读者(12.x zod 面)对两形照收:
|
|
@@ -190,14 +183,96 @@
|
|
|
190
183
|
* 「确属未知」按该条目自己的 `type` 取契约字段名表(不用各型字段的并集,表由契约类型面穷举)。拒因里混进别的(真坏的守卫条目、点名了本型契约字段的拒因 …)⇒ 不迁移,整份照拒。
|
|
191
184
|
* 窗关之后 ⇒ 续跑整份不采纳,fail-open 登记 `server.hooks.resume-reader-refused` 照打(可见);fresh 腿不受影响(受理面照 400)。没有起服读数(它不写库)。
|
|
192
185
|
* 窗 = 发布日 + 30 天 = 停驻行的终局兜底窗缺省 —— 与 M19 同一条论证与同三类逃出窗的部署(发布后才升级的、调长了 `APPROVAL_TERMINAL_BACKSTOP_MS` 的、滚动升级里旧副本在窗内新写的行),如实登记。
|
|
186
|
+
* · **M21 停驻行补齐引擎今天在铸点写的两格**(7.132.0)—— 两件,同一次 pending 候选扫描、同一个窗:
|
|
187
|
+
* ① **问答卡词**:引擎 7.49.0(本仓 7.126.0 提货)起,问答工具的审批卡在门上带卡词 `gate.approvalCard: "question"`(引擎的规则:调用名是问答工具 ⇒ `question`);
|
|
188
|
+
* 之前停驻、升级时还挂着的问答行门上没有这个词。本仓「这一行是不是一问」有两个读者:到期分法与队列行读卡(core `facetOf`:无卡 ⇒ 不是一问 ⇒ SLA 拒扫、
|
|
189
|
+
* 显示通用卡),决断口读待决动作的工具名(是一问 ⇒ `approve` 必须带 `answer`)—— 同一行两处去向不一致。⇒ **一次性改写**:审批门型 ∧ 门上没有 `approvalCard`
|
|
190
|
+
* 这个键 ∧ 待决动作是问答工具的审批的 pending 行,门上补 `approvalCard: "question"`(就是引擎今天在铸点会写的那个词),其余字节原样;不留「无卡按工具名
|
|
191
|
+
* 回推」的长住读臂(那正是 core 拒绝的第二个判官)。**引擎行摘要封过的行一个字节不改写**(带 `requirementsDigest` 的 v10 行:`gate.approvalCard` 是摘要
|
|
192
|
+
* 覆盖的成员,改了 = 续跑判 `damaged`;7.49.0 起的引擎同版铸卡与摘要,封过的问答行按构造都已带卡)—— 计数 `parkedQuestionRowsLeftAsWritten`、不猜。
|
|
193
|
+
* ② **`gate_kind` 列**:每次停驻都把门型反范式成这一列(SLA 分法、门型绑定的取行都按它),NULL = 写入时没有门型 —— 自 7.x 的 checkpoint 重建与写口恒盖以来
|
|
194
|
+
* 按构造不可达;仍有的话从门子树回填 core 登记的门型,门子树里读不出登记门型的行引擎续不了(`pauseOf` 拒)⇒ 置 expired(与到期收割同一个终态)。之后
|
|
195
|
+
* 运维待批队列行的 `gateKind` **恒在场**(读口对 NULL 门型的行不列、计数 —— 与决断口同一个读法,不按缺键投出去)。
|
|
196
|
+
* 改写按原文 CAS(MySQL 协议两边 `CAST(… AS BINARY)`,PG `text` 等值)+ `status = 'pending'`,第二跑零命中。**够不到的一格(如实登记)**:local 车道的停驻行在
|
|
197
|
+
* 引擎自己的 File 店里(盘上格式归引擎,本仓没有合法缝改写)⇒ 那里的存量问答行照旧按「无卡」读(显示通用卡、到期 SLA 拒扫、决断口按工具名要 `answer`);
|
|
198
|
+
* 那一车道的队列行门型从文档读(引擎恒写),没有可回填的列。窗 = 发布日 + 30 天 = 停驻行的终局兜底窗缺省(与 M19 同一条论证与同三类逃出窗的部署)。
|
|
199
|
+
* · **M22 盘上 LKG 信封 formatVersion 4 → 5**(7.132.0)—— 不在店里(与 M13 / M15 同为非店迁移):中心提示层收成一种 wire 形(`{ schemaVersion: 2, artifact }`),
|
|
200
|
+
* 4 及更早的载荷若带 prompts,那是 13.x 的两轴 wire(引擎当期不读)。`config-lkg.ts` `loadLkg` 读回 4(及迁到 4 的 2 / 3)时:载荷带 prompts ⇒ 不读回
|
|
201
|
+
* (拒因点名版本与键);不带 ⇒ 载荷零改动读回,读回方按 5 写回原位,启动日志 `config_lkg_migrated` 一行。规则在 `config-lkg.ts` 顶注 formatVersion 5 一段与
|
|
202
|
+
* `migrateV4Lkg`。没有读数键(它不写库)。
|
|
203
|
+
* · **M23 存量 placed 子代行的属主**(7.133.0)—— 7.132.x 及以前两只 SQL 店建委派子代的 placed 行时属主恒 NULL,会话面的属主谓词对 NULL 放行 ⇒ 谁拿到子代的会话 id
|
|
204
|
+
* (父客户端在子代帧的 `transcriptId` 上收到)谁就读得到整段转录。7.133.0 起建行那一笔按委派继承律写属主(`src/delegated-session-owner.ts`,律的唯一属主),
|
|
205
|
+
* 属主为 NULL 的 placed 行只对 fleet 调用方放行(无主放行臂的唯一判据 `security.ts` 的 `ownerlessRowOpen`,常设的读面律,不随本条删);存量行 ⇒ **每次起服的幂等回填**,
|
|
206
|
+
* 判据与建行逐字同一只(`judgeDelegatedOwner`,属主 = 判断时见证到的):根会话的行在 ⇒ 它的属主(根无主 ⇒ 子代仍无主,不写);根行不在 ⇒ 父会话的行;都不在(孤行)⇒
|
|
207
|
+
* 哨兵属主 `_orphan:<id>`(保留主体前缀,任何已验身份都不等于它 —— 不留 NULL,宁可没人能读),计数 + 起服一行 warn `placed_session_owners_orphaned` 点名条数。记下的根 / 父是空串 ⇒ 读作没有那一格。
|
|
208
|
+
* **单趟**:按 `session_id` 键集分页扫 `placement_kind IS NOT NULL ∧ owner IS NULL` 的行,每一页一条语句连读根 / 父两行(属主、住客、是不是 placed 行;连接键套
|
|
209
|
+
* `NULLIF(…, '')`);回写 = 认领句(`CLAIM_OWNERLESS_PLACED_SQL`:只 CAS 子行自己 —— 扫描读到的化身 + `owner IS NULL` + `placement_kind IS NOT NULL`;扫描与回写之间根 / 父被删、
|
|
210
|
+
* 同 id 重建、换住客,写进去的仍是扫描那一读见证到的属主;这一行自己被删、同 id 换了住客或已被别的写者写过 ⇒ 零命中,下一次起服按那时的律重判);
|
|
211
|
+
* 化身为空的行(子代或来源行)⇒ 响亮拒(全仓「读到空化身」同一条律)。读数三格:写成的(`placedSessionOwnersInherited` / `placedSessionOwnersOrphaned`)与
|
|
212
|
+
* **残余** `placedSessionOwnersRemaining` = 律这一读判不出、因为它读到的来源本身还是一只无主的委派子代行的行(根已删、父是同样待回填的行,且排在它之后或在同一页里)。
|
|
213
|
+
* 残余非零 ⇒ 读数行 warn;**不拒启、不重扫**:本文件的每一条在窗内每次起服都跑(「窗」一节),残余行只对 fleet 调用方放行(读面律),由之后起服的本条(一次至少再定下一层)
|
|
214
|
+
* 或这一行的下一次停驻(停驻挂点按同一条律认领,`delegated-session-owner.ts` 的 `settleDelegatedOwner`)定下。根无主的子代(律就让它无主)不是残余,每次起服照样被扫到、照样不写。
|
|
215
|
+
* **够不到的一格(如实登记)**:local 车道没有 placed 行(引擎 File 店不实现 placement,子代住私店),本条不碰 local 的会话边档;local 店也不记委派树、
|
|
216
|
+
* 不认领 ⇒ 经晋升腿进 local 宿主店的升级前子代行仍无主,它们再次停驻时停驻挂点照「属主不是律给的那一只 ⇒ 拒」处置(收口 = local 的 placement 协议;随包文字的补偿:
|
|
217
|
+
* local 带身份的部署升级前先把停驻待批的审批处理完)。窗 = 发布日 + 30 天(与 M19 / M21 同一条论证:
|
|
218
|
+
* 窗关时缺省部署上升级前的子代转录已被联合收割按 `BG_AGENT_RETENTION_MS` 收走;调长了留存的部署、滚动升级里旧副本在窗内新写的行如实登记,不为它们加长窗)。
|
|
219
|
+
* · **M24 workflow journal 的属主 scope 搬家**(7.133.0)—— 7.132.x 及以前 `workflow_journal` 的 scope 是**每一行**上的一列:读面按它判,写面(按
|
|
220
|
+
* `(run_id, ordinal)` 的 upsert)从不判它 ⇒ 别的 scope 的 append 落新序数插进一条 run、落既有序数覆盖属主的结果。7.133.0 起一条 run 的属主 scope 只记在
|
|
221
|
+
* `workflow_journal_owner` 一行(主键 `run_id`,带认领时新铸的 `incarnation`),店的写面与读面经同一只谓词判;journal 行上不再有 scope 列,改带写下它的那只
|
|
222
|
+
* 属主记录的 `incarnation`,且它是主键的一段:`(run_id, incarnation, ordinal)`(一行只属于写下它的那只属主记录,`workflow-journal-store-sql.ts` 顶注)。
|
|
223
|
+
* 主键换形 ⇒ 与 M9 同一种做法 —— **复制 + 原子换名**。存量库(正表上 scope 列在场 = 没经过本条)⇒ ① 上一次换名之前被打断留下的暂存表删掉重来(正表在换名
|
|
224
|
+
* 之前一个字节不动,暂存表只是它的不完整拷贝)② **回填属主**:每条还没有属主记录的 run 一行 —— scope = 该 run **最小序数**那一行的 scope(主键
|
|
225
|
+
* `(run_id, ordinal)` 保证恰一行;引擎按序铸序数,最小序数就是这条 run 最先记下的那一步),`incarnation` = 常量 `M24_OWNER_INCARNATION`(令牌只需在同一
|
|
226
|
+
* run_id 的先后几只记录之间不同:回填的是它已知的第一只,之后的认领铸随机令牌),`appended_at_ms` = 该 run 最晚的 `created_at_ms`(属主记录自己的 GC 时钟,
|
|
227
|
+
* 不早于它的任何一行);带 `NOT EXISTS`,续跑只补缺的 ③ 数跨 scope 行(scope ≠ 属主的行 —— 旧写面放进来的别的 scope 的写;新形里不可表示,不搬)
|
|
228
|
+
* ④ 照**中央 DDL 的同一条语句**换表名建暂存表 `workflow_journal_m24`,按旧主键键集分批(每批 `result` 字节有界、各自提交)搬与属主同 scope 的行(带属主记录的令牌)⑤ **原子换名**:TiDB 一条
|
|
229
|
+
* `RENAME TABLE 正 TO 待删, 暂存 TO 正` 后删待删旧表;PG 两条换名、删旧表与主键约束名改回常规名在同一个事务里 —— 换名提交那一刻跨 scope 行随旧表一起消失,计数进读数 +
|
|
230
|
+
* 起服一行 warn `workflow_journal_foreign_scope_rows_removed`。正表上 scope 列不在 ⇒ `current`(新库 / 第二跑;TiDB 上一次换名之后被打断 ⇒ 只补删待删旧表)。写它们的 scope 失去那几条 resume 重放,退化为活跑。破坏性的换名排在「破坏性步骤」一节。滚动升级:换名之后仍在跑的 ≤7.132.x 副本的 journal 语句点名
|
|
231
|
+
* 不存在的列、响亮失败(先停光旧副本再起新,`docs/DEPLOY-PREREQS.md` 的 7.133.0 SQL 后端一节);复制之后、换名之前旧副本写进旧表的行随旧表删掉(那几步续跑时活跑)。
|
|
232
|
+
* local 车道的店是 core 的 File 店(属主 = 每条 run 的 journal 文件首行)⇒ `file-store` / 0 / 0。
|
|
233
|
+
*
|
|
234
|
+
* · **M25 单用户记忆项目层换键形**(7.133.0)—— 不在店里、不在起服里(与 M10 同为**窗内才存在的行为臂**,但它是改写):项目层键从 `repo:<sha256(项目根)[:24]>`
|
|
235
|
+
* (7.98.0–7.132.x)换成带主体、跨设备的 `userrepo:<属主段>/<档>.<摘要>`(文法 `project-layer-key.ts`)。退役键是路径哈希、反推不出路径 ⇒ 起服没法枚举改写;
|
|
236
|
+
* 改为**每个项目第一次跑任务时**由项目层准备一步(`memory-project-layer.ts` `createMemoryProjectLayers`)把该 checkout 的 `repo:` 层经 core `migrateScope`
|
|
237
|
+
* 折进新键(File 与两只 SQL 孪生同一条;id 保留、CAS,冲突留原地下次再试)。同一窗同删的另一半:同步客户端腿的旧游标文件 `sync-cursor-<peer>.json`(只按 peer 分区)
|
|
238
|
+
* 第一轮收编为同步层的新游标(`memory-sync-client.ts` `adoptLegacyCursor`)。本条不写起服读数(`reportKeys` 空,与 M7 / M10 同形);折了什么由运行期 info
|
|
239
|
+
* `memory_project_layer_folded` / `memory_sync_cursor_adopted` 说。常设的另一条律(`r` 档时本 checkout 的 `p` 档折进当前档)不是迁移,不随本条删。
|
|
240
|
+
* · **M26 删掉退役的共享断路器表 `circuit_breaker`**(7.133.0)—— 断路器键的路由段从 baseUrl **原串**换成路由身份的摘要(铸点与形 `breaker-key.ts`),
|
|
241
|
+
* 新一代键写**新表** `breaker_state`(中央 DDL 建)。旧表 `circuit_breaker` 的行是旧键(`<provider>:<id>@<baseUrl>`,网关根原串 query 可带凭据),
|
|
242
|
+
* 新代码不读不写它、它也没有 TTL 腿 ⇒ 不删就永远在共享库里。**整只删表**(`DROP TABLE IF EXISTS circuit_breaker`,不看任何一行的内容):
|
|
243
|
+
* 不从键的形去推断哪一行是旧的,也不碰新表里的活状态。断路器状态是秒级的建议性活数据,所以不做「旧键改写成新键」;新表从空开始、按阈值重新计数。
|
|
244
|
+
* 幂等与本段每一条同:第二次起服表已不在 ⇒ 零动作。滚动升级窗里还在跑的旧副本写旧表会失败(建议性写穿,吞掉并计数 —— 它们退回各自进程内的
|
|
245
|
+
* 断路器);窗里重启的旧副本按自己的 DDL 重建空的旧表,下一次新副本起服再删。读数 = 删掉的退役表数(0 / 1),一行键都不进日志。
|
|
246
|
+
* local 车道没有这张表(断路器是进程内的)⇒ 恒 0。
|
|
247
|
+
* · **M27 收件箱里判官拒的键的行**(7.133.0)—— 收件箱的键列本版只有一只判官 `mailboxKeyProblem`(`mailbox-store-sql.ts`:良构 Unicode ∧ 无控制字符 ∧
|
|
248
|
+
* UTF-8 ≤ 190 字节 ∧ scope 非空),律是「判官拒的键没有箱」:两方言每一只入口对它答「箱不在」(`reap` 对候选扫描交回的被拒句柄同样跳过),会话删除的打标 / 丢箱
|
|
249
|
+
* 两步也不再碰它。7.132.x 及以前的 PostgreSQL 孪生只拒 NUL 与孤立代理 ⇒ 带别的控制字符(HTAB …)的主体 / 会话 handle 写下过箱(可信主体头收 HTAB、
|
|
250
|
+
* JWT `sub` 收任何控制字符);MySQL 协议孪生 7.132.x 已拒控制字符与超宽键(更早版本写下的同删)。那样的行在新律下谁都够不着、正文永久留库 ⇒ **一次性删除**:
|
|
251
|
+
* 三张表(`mailbox` / `mailbox_message` / `mailbox_tombstone`,在场的才扫 —— 收件箱表由店在本段之后建,新库上三张都还不在)按 `(scope_key, handle)` 键集分页扫键
|
|
252
|
+
* (只取两只键列,正文不出库),键读回进程问**同一只判官**(`storedMailboxKeyless`:TiDB 的原字节先无损读成串,不是 UTF-8 的字节 —— 没有任何串编码成它 —— 判不良构;
|
|
253
|
+
* SQL 里不重述判据,两份判据迟早分叉),判官拒的那只键按 `drop` 的
|
|
254
|
+
* 锁序与语句逐表删(`MAILBOX_KEYED_TABLES` / `mailboxKeyDeleteSql`),参数是读回的原字节。删掉的行数进读数 `mailboxRejectedKeyRowsRemoved`(一只键都不进日志)。
|
|
255
|
+
* 幂等:只按判官挑,第二次起服零命中;每句自动提交、不包事务 —— 被打断就由下一次起服接着删剩下的。**不在本条之内(如实登记)**:① lease owner 列 —— 它不是
|
|
256
|
+
* 箱的键;判官拒的 owner 持不了租(`ack` / `releaseLease` 照「不是持租者」答、`claimLease` 抛),存量那一格随租约到期失效;② MySQL 协议上带孤立代理的主体
|
|
257
|
+
* 在升级前写下的箱 —— 驱动把孤立代理换成 U+FFFD 的三字节,库里的键与字面带 U+FFFD 的那只主体的键逐字节相同,判官收这只键 ⇒ 不删(挑出来就得删掉一只律认为
|
|
258
|
+
* 存在的箱)。local 车道用引擎自己的 File 信箱(盘上格式归引擎)⇒ 恒 0。
|
|
259
|
+
*
|
|
260
|
+
* ## 收据账(一次起服一只,每一条迁移同一只)
|
|
261
|
+
* 每一步把它**已提交**的改写 / 删除与点名读数当场记进同一只收据账({@link MigrationReceipts}):计数随每次提交累加、行随每次提交追加、形读数在那一步落定时写。走完 ⇒
|
|
262
|
+
* 账就是读数,起服日志打一行 `one_time_migrations_applied` + 逐行的那几种;任何一步失败 ⇒ 账里有动过的格就随拒因交出({@link OneTimeMigrationInterruptedError}),起服日志在抛之前
|
|
263
|
+
* 用**同一只打印口**打一行 `one_time_migrations_interrupted`(读数键与读数行同一只投影)+ 逐行的那几种({@link runAndLogOneTimeMigrations})。理由:提交了的改写下一次起服再扫是
|
|
264
|
+
* 零命中 —— 被改写 / 被删的行、它们的计数只有「改写发生的那一拍」说得出。没有任何一格动过就失败 ⇒ 原错误原样抛。
|
|
265
|
+
* 如实的残余:提交与那一行日志之间进程被杀、或一条提交的确认在连接上丢了 —— 收据没有耐久载体(不为短命的迁移另建迁移账表,见 M4 一节的同一条论证)。
|
|
193
266
|
*
|
|
194
267
|
* ## 幂等
|
|
195
268
|
* 改写的几条都可重复跑(M4:`detail IS NOT NULL AND … = 'null'`;M5:列在场探针 + `WHERE incarnation = ''`;M6:`WHERE error_code IS NULL`;
|
|
196
|
-
* M8 / M18:字样扫描 + CAS 回写 —— 写过的行不再命中;M17 的改写只在改名那一拍跑,第二跑列名已是新名 ⇒
|
|
269
|
+
* M8 / M18:字样扫描 + CAS 回写 —— 写过的行不再命中;M17 的改写只在改名那一拍跑,第二跑列名已是新名 ⇒ 零读零写;续判时已带戳的行零动作;
|
|
270
|
+
* M24:正表 scope 列在场探针 —— 换名之后只补收尾(删待删旧表),换名之前被打断则暂存表删掉重建、回填只补缺的属主记录(`NOT EXISTS`);
|
|
271
|
+
* M27:只按判官挑 —— 删过的键不再被扫到)。并发起动由 {@link runSqlOneTimeMigrations} 的 advisory 锁 + 每步的后置条件判据兜住(见那里)。
|
|
197
272
|
*/
|
|
198
273
|
import type { Pool as MysqlPool } from "mysql2/promise";
|
|
199
274
|
import type { Pool as PgPool } from "pg";
|
|
200
|
-
import {
|
|
275
|
+
import { type AllowEntryInertReason, type GateKind } from "@sema-agent/core";
|
|
201
276
|
import { type UndurableScopeRuleRow, type UnreadableRuleBucket } from "./permission-rule-store-sql.js";
|
|
202
277
|
/** 迁移读数(启动日志一行写全;测试按它断言,不靠日志文本)。 */
|
|
203
278
|
export interface OneTimeMigrationReport {
|
|
@@ -233,13 +308,43 @@ export interface OneTimeMigrationReport {
|
|
|
233
308
|
readonly sessionRuleColumn: "renamed" | "current" | "no-table" | "file-store";
|
|
234
309
|
/** M17:带退役命令桶的行 —— 退役桶一个字节不动,读回 `corrupt`;一行一条 warn 点名(不带规则正文)。每次起服都报,直到有人改写或删掉它。 */
|
|
235
310
|
readonly sessionRuleRowsWithRetiredBuckets: readonly SessionRuleRowRetiredBuckets[];
|
|
236
|
-
/** M17:改名那一拍(`sessionRuleColumn: "renamed"`)按引擎的条目读法判过、两种文法下读法不同的行 —— toolAllow 里被剔的条目(行已按原文 CAS 回写)
|
|
237
|
-
*
|
|
311
|
+
/** M17:改名那一拍(`sessionRuleColumn: "renamed"`)按引擎的条目读法判过、两种文法下读法不同的行 —— toolAllow 里被剔的条目(行已按原文 CAS 回写);
|
|
312
|
+
* 一行一条 warn 点名。只在改名那一拍有;第二跑起恒空(列名已是新名,行由本版的写者按新文法写)。 */
|
|
238
313
|
readonly sessionRuleRowsWithOldGrammarEntries: readonly SessionRuleRowOldGrammarEntries[];
|
|
314
|
+
/** M17:改名那一拍(`sessionRuleColumn: "renamed"`)里 toolDeny 带引擎读成「不是任何一条规则」的条目的行 —— 整行**不改写、不盖戳**(原样留),一行一条 warn 点名(条目 + 引擎读者的原因词)。
|
|
315
|
+
* 只在改名那一拍有;第二跑起恒空。这种行引擎本来就每一次调用都拒、并按行自带的旧文法通告(`config.session_rules_earlier_grammar`);出路是 operator 改写或删会话。 */
|
|
316
|
+
readonly sessionRuleRowsWithUnreadableDeny: readonly SessionRuleRowUnreadableDeny[];
|
|
239
317
|
/** M18:本次把 `approval_ask.card_json` 上引擎 7.51.0 退役的两个词改写掉的卡行数(SQL 独有;local 恒 0)。非零 = 真写了存量行。 */
|
|
240
318
|
readonly retiredCardWordAskRowsRewritten: number;
|
|
241
319
|
/** M18:带字样、但 `approval_ask.card_json` 的 JSON 读不懂 ⇒ 没改写的卡行数(留给读者自己的坏行臂;非零 = 运维该看一眼这些行)。SQL 独有;local 恒 0。 */
|
|
242
320
|
readonly retiredCardWordRowsUnreadable: number;
|
|
321
|
+
/** M21:本次给门上没有卡词的存量问答停驻行写上 `question` 的行数(SQL 独有;local 恒 0)。非零 = 真写了存量行。 */
|
|
322
|
+
readonly parkedQuestionCardsWritten: number;
|
|
323
|
+
/** M21:该补卡词、却没补的问答停驻行数 —— 引擎行摘要封过(带 `requirementsDigest`,改了 = 续跑判 damaged)或整只文档读不懂;一个字节没动(非零 = 运维该看一眼)。SQL 独有;local 恒 0。 */
|
|
324
|
+
readonly parkedQuestionRowsLeftAsWritten: number;
|
|
325
|
+
/** M21:本次从门子树回填 `gate_kind` 列的停驻行数(SQL 独有;local 恒 0 —— 那一车道的门型从文档读)。非零 = 真写了存量行。 */
|
|
326
|
+
readonly parkedRowGateKindsBackfilled: number;
|
|
327
|
+
/** M21:`gate_kind` 为 NULL、门子树里读不出一只 core 登记门型的停驻行 —— 引擎续不了(`pauseOf` 拒)⇒ 置 expired 的行数(SQL 独有;local 恒 0)。非零 = 真改了存量行。 */
|
|
328
|
+
readonly parkedRowsUnresumableExpired: number;
|
|
329
|
+
/** M23:本次给属主为 NULL 的存量 placed 子代行写上委派树属主(根的,根行不在取父的)的行数(SQL 独有;local 恒 0)。非零 = 真写了存量行。 */
|
|
330
|
+
readonly placedSessionOwnersInherited: number;
|
|
331
|
+
/** M23:写上了谁都不匹配的属主的存量 placed 子代行 —— 根 / 父两行都已不在(孤行哨兵),或继承自这样一只祖先(同一只哨兵);没有任何调用方能读它们,运维可手工改属主。
|
|
332
|
+
* 行数(SQL 独有;local 恒 0)。非零 ⇒ 另一行 warn 点名条数。 */
|
|
333
|
+
readonly placedSessionOwnersOrphaned: number;
|
|
334
|
+
/** M23:这一次起服留着无主的存量 placed 子代行 —— 律这一读判不出,因为它读到的来源本身还是一只无主的委派子代行(根已删、父待回填)。它们只对 fleet 调用方
|
|
335
|
+
* 放行(读面律),由之后起服的本条或它的下一次停驻定下。根无主的子代(律就让它无主)不算。行数(SQL 独有;local 恒 0)。非零 ⇒ 读数行 warn(不拒启)。 */
|
|
336
|
+
readonly placedSessionOwnersRemaining: number;
|
|
337
|
+
/** M24:workflow journal 的属主 scope —— `moved` = 本次把行上的 scope 列搬进 `workflow_journal_owner`(回填 + 删跨 scope 行 + 删列);`current` = 早已是新形
|
|
338
|
+
* (新库 / 第二跑:`workflow_journal` 上没有 scope 列);`file-store` = local 车道(core 的 File 店,属主 = 每条 run 的 journal 文件首行)。 */
|
|
339
|
+
readonly workflowJournalScopeColumn: "moved" | "current" | "file-store";
|
|
340
|
+
/** M24:本次回填的属主行数(每条还没有属主行的 run 一行)。非零 = 这次迁移真写了存量库。 */
|
|
341
|
+
readonly workflowJournalOwnersBackfilled: number;
|
|
342
|
+
/** M24:本次删掉的跨 scope 行数(scope ≠ 那条 run 属主的 journal 行 —— 旧写面放进来的别的 scope 的写)。非零 ⇒ 另一行 warn 点名条数。 */
|
|
343
|
+
readonly workflowJournalForeignScopeRowsRemoved: number;
|
|
344
|
+
/** M26:本次删掉的退役断路器表数(`circuit_breaker`;0 / 1,SQL 独有,local 恒 0)。只有计数 —— 旧形键带着 URL,一行都不读。 */
|
|
345
|
+
readonly retiredBreakerTablesDropped: number;
|
|
346
|
+
/** M27:本次从收件箱三张表(盒 / 消息 / 墓碑)删掉的、键(scope / handle)过不了收件箱键判官的行数(SQL 独有,local 恒 0)。只有计数 —— 键是主体与会话 handle,一只都不进日志。 */
|
|
347
|
+
readonly mailboxRejectedKeyRowsRemoved: number;
|
|
243
348
|
}
|
|
244
349
|
/** 退役的两只命令桶(引擎 7.51.0 起不是桶;只给 M17 点名认)。 */
|
|
245
350
|
export type RetiredSessionRuleBucket = "commandAllow" | "commandDeny";
|
|
@@ -253,36 +358,54 @@ export interface SessionRuleRowRetiredBuckets {
|
|
|
253
358
|
export interface SessionRuleRowOldGrammarEntries {
|
|
254
359
|
readonly policyKey: string;
|
|
255
360
|
readonly sessionId: string;
|
|
256
|
-
/** toolAllow 里删掉的条目:引擎在行自己的文法(0)里读成 `earlier_grammar` ——
|
|
361
|
+
/** toolAllow 里删掉的条目:引擎在行自己的文法(0)里读成 `earlier_grammar` —— 拼写不是它所指的名字(或 `*`),什么都不放行;当前文法里是一条放行规则 ——
|
|
257
362
|
* 删掉后盖戳的行是引擎对原行读法的逐调用同义重述。 */
|
|
258
363
|
readonly toolAllowDropped: readonly string[];
|
|
259
|
-
/** 在场 = 这一行没改写也没盖戳:引擎在它的文法里把 toolAllow 整张读成作废(名单里有 `*`),其余条目的读法被遮住(见 {@link OldGrammarEntries.wildcardMasked})。 */
|
|
260
|
-
readonly wildcardMasked?: true;
|
|
261
364
|
}
|
|
262
|
-
/**
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
* · `renamed` —— 终名由本次起服发布了(下一次起服读到的是 `current`)。
|
|
267
|
-
*/
|
|
268
|
-
export interface SessionRuleReceipts {
|
|
269
|
-
rows: SessionRuleRowOldGrammarEntries[];
|
|
270
|
-
renamed: boolean;
|
|
365
|
+
/** 引擎 `unreadableDenyEntries` 的一条读数:条目原样 + 引擎读者的原因词(`earlier_grammar` = 行自带的文法早于引擎当前文法、当前文法读不出它;`grammar` = 当前文法读不出它)。 */
|
|
366
|
+
export interface UnreadableDenyEntry {
|
|
367
|
+
readonly entry: string;
|
|
368
|
+
readonly reason: AllowEntryInertReason;
|
|
271
369
|
}
|
|
272
|
-
/**
|
|
273
|
-
export
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
readonly
|
|
370
|
+
/** M17 被留下的一行(键是单向哈希;只带读不出的那几条 deny 条目,过本仓唯一脱敏器 —— 其余规则正文不出店)。 */
|
|
371
|
+
export interface SessionRuleRowUnreadableDeny {
|
|
372
|
+
readonly policyKey: string;
|
|
373
|
+
readonly sessionId: string;
|
|
374
|
+
/** toolDeny 里引擎读成「不是任何一条规则」的条目与读者的话。这一行没被改写、没盖戳:引擎对它每一次工具调用都拒,直到有人按新文法改写。 */
|
|
375
|
+
readonly toolDenyUnreadable: readonly UnreadableDenyEntry[];
|
|
376
|
+
/** 同一行还带的退役命令桶(同一只判据 {@link retiredSessionRuleBucketsOf};缺席 = 没有)。带桶的行会话规则的 `PUT` 读不了(读前快照读成 `corrupt`,operator 也一样),
|
|
377
|
+
* 出路只能是在库里按新文法改写那一行(`rev` / `gen` 不动)或删会话 —— 与退役桶那条点名同一条出路。 */
|
|
378
|
+
readonly retiredBuckets?: readonly RetiredSessionRuleBucket[];
|
|
278
379
|
}
|
|
380
|
+
/** 三个形读数(M5 列 / M9 主键 / M17 列名)—— 那一步**落定**之前收据账里缺席(读数行要它们齐;被打断的那一行只带已落定的)。 */
|
|
381
|
+
type ShapeReadingKey = "sessionIncarnationColumn" | "workflowParkIndexKey" | "sessionRuleColumn" | "workflowJournalScopeColumn";
|
|
279
382
|
/**
|
|
280
|
-
*
|
|
281
|
-
*
|
|
383
|
+
* 读数的「已记下的那些」形:形读数可缺席(那一步还没落定),其余每一键与 {@link OneTimeMigrationReport} 同名同形。读数行({@link logOneTimeMigrations})与
|
|
384
|
+
* 被打断的那一行({@link logOneTimeMigrationsInterrupted})读同一只投影({@link readingFields}),拒因({@link OneTimeMigrationInterruptedError})带的也是这一形。
|
|
385
|
+
*/
|
|
386
|
+
export type OneTimeMigrationReadings = Omit<OneTimeMigrationReport, ShapeReadingKey> & Partial<Pick<OneTimeMigrationReport, ShapeReadingKey>>;
|
|
387
|
+
/** 只读数组 → 可追加数组(收据账的行表随提交追加)。 */
|
|
388
|
+
type Appendable<T> = {
|
|
389
|
+
-readonly [K in keyof T]: T[K] extends ReadonlyArray<infer E> ? E[] : T[K];
|
|
390
|
+
};
|
|
391
|
+
/**
|
|
392
|
+
* 🔴 S-1594 —— **一次起服的迁移收据账(唯一一只)**:每一步把它**已提交**的改写 / 删除与点名读数当场记进来 —— 计数随每次提交累加、行随每次提交追加、
|
|
393
|
+
* 形读数在那一步落定时写。走完 ⇒ 它就是读数({@link completedReport});任何一步抛 ⇒ 它随拒因交出({@link OneTimeMigrationInterruptedError}),
|
|
394
|
+
* 起服日志在抛之前用同一只打印口打出来({@link runAndLogOneTimeMigrations})。理由:提交了的改写下一次起服再扫是零命中 —— 被改写 / 被删的行、它们的计数
|
|
395
|
+
* 只有「改写发生的那一拍」说得出;只记成功的读数,等于让一次被打断的起服把这一拍之前全部提交的事实都丢掉。
|
|
396
|
+
* 只盖戳的 M17 改写不记(戳不丢信息,重来再判零动作)。如实的残余:提交与那一行日志之间进程被杀、或一条提交的确认在连接上丢了 —— 收据没有耐久载体
|
|
397
|
+
* (不为短命的迁移另建迁移账表,见头注 M4 一节的同一条论证)。
|
|
398
|
+
*/
|
|
399
|
+
export type MigrationReceipts = Appendable<OneTimeMigrationReadings>;
|
|
400
|
+
/** 一本空收据账(迁移段每次起服一本;每一步往里记)。 */
|
|
401
|
+
export declare function buildMigrationReceipts(): MigrationReceipts;
|
|
402
|
+
/**
|
|
403
|
+
* 一次起服的迁移在**已提交**一些改写之后失败了:原错误在 `cause` 与句子里原样在场,收据账抛那一刻的读数在 `receipts`(结构化,{@link OneTimeMigrationReadings})与句子尾
|
|
404
|
+
* (同一份读数的人读形)。收据账里没有任何一格动过就失败的路径不包这只错(原错误原样抛)。起服调用点({@link runAndLogOneTimeMigrations})在抛之前把 `receipts` 打进日志。
|
|
282
405
|
*/
|
|
283
406
|
export declare class OneTimeMigrationInterruptedError extends Error {
|
|
284
|
-
readonly receipts:
|
|
285
|
-
constructor(cause: unknown, receipts:
|
|
407
|
+
readonly receipts: OneTimeMigrationReadings;
|
|
408
|
+
constructor(cause: unknown, receipts: OneTimeMigrationReadings);
|
|
286
409
|
}
|
|
287
410
|
/**
|
|
288
411
|
* S-590 —— 一条一次性迁移的窗(登记表的一行;纯数据)。字段注写着每个值的取证方式,改一行之前照着重核。
|
|
@@ -318,24 +441,13 @@ export declare const ONE_TIME_MIGRATIONS: readonly OneTimeMigrationWindow[];
|
|
|
318
441
|
* 只给**窗内才生效的行为臂**用(M10 的认领、M19 / M20 的续跑重读):那种臂过了窗就停,不等删码车 —— 删码因此是零行为变化,而窗只写在本表这一处。
|
|
319
442
|
*/
|
|
320
443
|
export declare function migrationWindowOpen(window: Pick<OneTimeMigrationWindow, "removableAfter">, today: string): boolean;
|
|
321
|
-
/** local 车道上 SQL 独有的几条(M4 / M5 / M8 / M9 / M11 / M17 / M18)的读数(M6 两车道都有,local 腿的读数由 `LocalBackend.runOneTimeMigrations` 现算):那几张表 / 列在文件底座上从来不存在 ⇒ 如实答 absent / 0。 */
|
|
444
|
+
/** local 车道上 SQL 独有的几条(M4 / M5 / M8 / M9 / M11 / M17 / M18 / M21 / M23 / M24 / M26 / M27)的读数(M6 两车道都有,local 腿的读数由 `LocalBackend.runOneTimeMigrations` 现算):那几张表 / 列在文件底座上从来不存在 ⇒ 如实答 absent / 0。 */
|
|
322
445
|
export declare const NO_SQL_MIGRATIONS: Omit<OneTimeMigrationReport, "holderDeathCodeRowsBackfilled">;
|
|
323
446
|
/** 启动期的日志口(logger 的子集)。两级各有其用,见 {@link logOneTimeMigrations}。 */
|
|
324
447
|
export interface MigrationLogSink {
|
|
325
448
|
warn(msg: string, meta?: Record<string, unknown>): void;
|
|
326
449
|
info(msg: string, meta?: Record<string, unknown>): void;
|
|
327
450
|
}
|
|
328
|
-
/**
|
|
329
|
-
* 跳版升级的库的拒启:退役 schema(快照索引表 / 单座列)任一仍在。**具名类型**:锚类型不锚文案(日志消费端与测试按 `code` / 类型分派);
|
|
330
|
-
* 码取列册探针同一个 `config.schema_mismatch`,运维面一个拒启码一个读法。拒句点名在场的坐标、说明第三条(旧拼法改写)同样没跑过、给出路。
|
|
331
|
-
* 继承 {@link StoreBootRefusalError}:这是一句**确定**的拒启表态(再等也等不来另一个答案)—— `ensureSchema()` 里它不被 SQL 开库的等待窗重试、不被改写成「库打不开」的拒句。
|
|
332
|
-
*/
|
|
333
|
-
export declare class RetiredSchemaPresentError extends StoreBootRefusalError {
|
|
334
|
-
readonly found: readonly string[];
|
|
335
|
-
/** 机读码(与列册探针的拒启同一个)。 */
|
|
336
|
-
readonly code = "config.schema_mismatch";
|
|
337
|
-
constructor(found: readonly string[]);
|
|
338
|
-
}
|
|
339
451
|
/** 方言无关的最小查询口(两方言的返回形不同,由下面两只适配器收平)。`params` 只给带值的语句用(M5 的回填:会话 id 是
|
|
340
452
|
* 调用方自选的任意串,不许内插进 SQL 文本);占位符形由调用方按方言写(`?` / `$n`)。 */
|
|
341
453
|
export interface MigrationDb {
|
|
@@ -344,23 +456,6 @@ export interface MigrationDb {
|
|
|
344
456
|
/** 执行并回报受影响行数(DDL 返回 0)。 */
|
|
345
457
|
exec(sql: string, params?: readonly unknown[]): Promise<number>;
|
|
346
458
|
}
|
|
347
|
-
/** 探针口的池参数:方言与它的池一起走(判别联合 ⇒ 不靠调用方断言「这个池是哪种」)。 */
|
|
348
|
-
export type RetiredSchemaProbeTarget = {
|
|
349
|
-
readonly dialect: "tidb";
|
|
350
|
-
readonly pool: MysqlPool;
|
|
351
|
-
} | {
|
|
352
|
-
readonly dialect: "pg";
|
|
353
|
-
readonly pool: PgPool;
|
|
354
|
-
};
|
|
355
|
-
/**
|
|
356
|
-
* **探针口**(退役 schema 唯一的读处):库一连上、**任何 DDL 之前**探一遍,在场 ⇒ 抛 {@link RetiredSchemaPresentError}。本仓唯一调用点 =
|
|
357
|
-
* `store-backend.ts` 的 `withRetiredSchemaProbe`(SQL 两后端的 `ensureSchema()` 自身:探针先于建表的先后只写在那一处,不在两方言各写一遍)。**不在包根上**:
|
|
358
|
-
* 嵌入方经公开序列的 `ensureSchema()` 得到这一问,不需要自己排序列。
|
|
359
|
-
*
|
|
360
|
-
* 不取 `ensureSchema` 那把 advisory 锁:本口纯读(两条目录探针),不改任何东西,与别的副本正在跑的建表 / 迁移互不相干 —— 它们之间的先后不影响本口的判据
|
|
361
|
-
* (退役 schema 只会被 7.125.x 的迁移删去、不会被谁凭空建回)。用完即还连接,拒启时连接也已归还。
|
|
362
|
-
*/
|
|
363
|
-
export declare function assertRetiredSchemaAbsentOnPool(target: RetiredSchemaProbeTarget): Promise<void>;
|
|
364
459
|
/**
|
|
365
460
|
* SQL 两后端的一次性迁移。**调用点只有一个**(boot/stores.ts,在 `ensureSchema` 之后、任何路由装配
|
|
366
461
|
* 之前)—— 拒启在那一刻仍然是拒启(还没开始服务),而 `ensureSchema` 那条通道的契约是「只发 CREATE」
|
|
@@ -374,13 +469,30 @@ export declare function assertRetiredSchemaAbsentOnPool(target: RetiredSchemaPro
|
|
|
374
469
|
* 每条改表 DDL 的成功判据仍是它的**后置条件**({@link execUntil}),「另一个副本抢先把同一张表换了形」不会把滚动升级变成启动失败循环。
|
|
375
470
|
*
|
|
376
471
|
* ## 次序(codex r1 [medium] 同轮)
|
|
377
|
-
* 非破坏改写(M4–M9、M18:改值不丢信息 / 加法 DDL / 复制 + 换名)在前,破坏性步骤(M11
|
|
378
|
-
* M11 自己半途失败时,拒因自带已删的行(`purgeUndurableScopeRows`)——
|
|
472
|
+
* 非破坏改写(M4–M9、M18:改值不丢信息 / 加法 DDL / 复制 + 换名)在前,破坏性步骤(M11 的删行、M24 丢下跨 scope 行的换名)排在最后;
|
|
473
|
+
* M11 自己半途失败时,拒因自带已删的行(`purgeUndurableScopeRows`)—— 否则重试看不见已删的行,证据永久消失;M24 的丢行计数在换名提交之后进收据账。
|
|
379
474
|
*
|
|
380
|
-
* 本函数**不问**退役 schema:带着它的库在更早处就被 `ensureSchema()` 自身拒掉了(
|
|
475
|
+
* 本函数**不问**退役 schema:带着它的库在更早处就被 `ensureSchema()` 自身拒掉了(起服对账一族 `schema-consistency.ts` 的探针口,先于建表);走公开序列
|
|
381
476
|
* `createStoreBackend()` → `ensureSchema()` → `runOneTimeMigrations()` 的嵌入方与本服务的起服序列一样,有这一问、零动作。
|
|
382
477
|
*/
|
|
383
478
|
export declare function runSqlOneTimeMigrations(dialect: "tidb" | "pg", pool: MysqlPool | PgPool): Promise<OneTimeMigrationReport>;
|
|
479
|
+
/**
|
|
480
|
+
* M24(7.133.0)—— workflow journal 的属主 scope 从逐行列搬进 `workflow_journal_owner` 一行,journal 行改按 `(run_id, incarnation, ordinal)` 记。规则与理由在
|
|
481
|
+
* 头注 M24 段;这里只写各步为什么这样写。
|
|
482
|
+
*
|
|
483
|
+
* **判据 = 正表上 scope 列在不在**(旧形的标志;新形里没有这一列)。不在 ⇒ 新形:只补收尾(上一次在 TiDB 换名之后、删旧表之前被打断留下的待删旧表),读数 `current`。
|
|
484
|
+
* 在 ⇒ 旧形,**正表在换名之前一个字节不动**:
|
|
485
|
+
* ① 残留的暂存表(上一次换名之前被打断)删掉重来 —— 它只是正表的一份不完整拷贝。
|
|
486
|
+
* ② **回填属主**(`INSERT … SELECT`,两方言同一句):每条 run 取**最小序数**那一行 —— 旧主键 `(run_id, ordinal)` 保证每条 run 恰一行,于是一条语句里不会对同一个
|
|
487
|
+
* run_id 插两次;`appended_at_ms` 取该 run 最晚的 `created_at_ms`(属主记录的 GC 时钟因此不早于它的任何一行)。`NOT EXISTS`:续跑只补缺的,已在的属主记录一个字节不改。
|
|
488
|
+
* ③ 数跨 scope 行(scope ≠ 属主):它们不搬 —— 新形里一条 run 只有一个 scope;它们只可能是旧写面放进来的别的 scope 的写(读它们的只有写它们的那个 scope 的
|
|
489
|
+
* resume,丢掉 = 那几步退化为活跑)。计数在换名提交之后才进收据账(那一刻它们才真的随旧表消失)。
|
|
490
|
+
* ④ 照**中央 DDL 的同一条语句**换表名建暂存表(不手抄第二份),按旧主键键集分批 `INSERT … SELECT` 搬与属主同 scope 的行、带属主记录的令牌(新主键下不会撞键:旧主键唯一 ×
|
|
491
|
+
* 每条 run 一只属主;每批字节有界、各自提交 —— 整表一条语句会撞 TiDB 的事务总量上限,见 {@link M24_COPY_BATCH_BYTES})。
|
|
492
|
+
* ⑤ **原子换名**:TiDB 一条 `RENAME TABLE 正 TO 待删, 暂存 TO 正`,之后删待删旧表;PG 两条换名、删旧表与主键约束名改回常规名在**同一个事务**里({@link execAtomically})
|
|
493
|
+
* —— 中途死 = 整段回滚,盘上回到「正表旧形 + 暂存表」,下一次起动从 ① 重来。每一条 DDL 按后置条件收敛({@link execUntil} / {@link execAtomically})。
|
|
494
|
+
*/
|
|
495
|
+
export declare function moveWorkflowJournalScope(db: MigrationDb, dialect: "tidb" | "pg", receipts: MigrationReceipts): Promise<void>;
|
|
384
496
|
/**
|
|
385
497
|
* M17 —— 一份存量规则体带哪几只退役命令桶(纯函数,点名判据):只认**对象上自有**的 `commandAllow` / `commandDeny` 键(不论值形 —— 坏形的退役桶照样是退役桶);
|
|
386
498
|
* 不是对象 / 没有这两个键 / 条目文字里出现同名字样 ⇒ 空。不改写:新文法写不出旧命令桶的拒(头注 M17 段 ③)。
|
|
@@ -388,14 +500,14 @@ export declare function runSqlOneTimeMigrations(dialect: "tidb" | "pg", pool: My
|
|
|
388
500
|
export declare function retiredSessionRuleBucketsOf(body: unknown): readonly RetiredSessionRuleBucket[];
|
|
389
501
|
/** M17 —— 一份存量规则体按引擎在它自己的文法里的读法改写成当前文法的同一句话({@link oldGrammarEntriesOf} 的读数)。 */
|
|
390
502
|
export interface OldGrammarEntries {
|
|
391
|
-
/** toolAllow 里删掉的条目(引擎的 `earlier_grammar` 读数;见 {@link SessionRuleRowOldGrammarEntries.toolAllowDropped})。 */
|
|
503
|
+
/** toolAllow 里删掉的条目(引擎的 `earlier_grammar` 读数;见 {@link SessionRuleRowOldGrammarEntries.toolAllowDropped})。行因 {@link toolDenyUnreadable} 整行不动时恒空(没写 ⇒ 没删)。 */
|
|
392
504
|
readonly toolAllowDropped: readonly string[];
|
|
505
|
+
/** toolDeny 里引擎 `unreadableDenyEntries` 读成「不是任何一条规则」的条目(条目 + 引擎读者的原因词)。**非空 ⇒ 这一行不改写、不盖戳**({@link rewritten} 缺席):
|
|
506
|
+
* 这种行引擎对每一次工具调用都拒(读成更少的规则是 fail-open,引擎不这么读),并按行自带的旧文法通告;盖成当前文法戳只会让通告消失、行照旧拒一切。缺席 = 没有这样的条目。 */
|
|
507
|
+
readonly toolDenyUnreadable?: readonly UnreadableDenyEntry[];
|
|
393
508
|
/** 这一行要落的新体 —— 被删条目去掉、其余键原样(退役命令桶也原样)、`grammar: SESSION_RULES_GRAMMAR`;在场 = 要写。缺席 = 零动作:行已带戳且没有可删的条目
|
|
394
|
-
* (上一次没走完的判读已改写过的行)
|
|
509
|
+
* (上一次没走完的判读已改写过的行)。 */
|
|
395
510
|
readonly rewritten?: Record<string, unknown>;
|
|
396
|
-
/** 在场 = 引擎在这一行自己的文法里把 `toolAllow` 整张读成作废(`wildcard_all`:名单里有 `*`),遮住了其余条目在那种文法里各算什么 ——
|
|
397
|
-
* 本函数因此**不改写、不盖戳**(改写会把被遮住的条目定成当前文法的规则;引擎修正文法 0 的 `*` 读法后,留在原文法里的行自动读真),只点名。 */
|
|
398
|
-
readonly wildcardMasked?: true;
|
|
399
511
|
}
|
|
400
512
|
/**
|
|
401
513
|
* M17 —— 一行存量规则(体 + 它的 `rev`)的改写判读(纯函数,判据只有引擎的):
|
|
@@ -403,7 +515,9 @@ export interface OldGrammarEntries {
|
|
|
403
515
|
* 而改写的是同一行其余的桶 —— 人按出路删掉退役桶的那一刻,行已是当前文法的真话);
|
|
404
516
|
* · `toolAllow` 经 `compileSessionRuleBucket` 在那种文法下编译,归 `earlier_grammar` 的条目删掉(文法 0 与 1 在引擎里只差这一条子句:拼写不是它所指名字的 allow 条目
|
|
405
517
|
* 在文法 0 里什么都不放行、在文法 1 里是一条放行规则),名单**保持在场**(在场的空 `toolAllow` 引擎读作「什么都不放行」);别的桶一个字节不动;
|
|
406
|
-
* ·
|
|
518
|
+
* · **盖戳前先问引擎读者**(S-1691):行的 `toolDeny` 里有 `unreadableDenyEntries` 答的条目(引擎在这一行的文法里读成「不是任何一条规则」)⇒ **整行不改写、不盖戳、不删任何条目**,
|
|
519
|
+
* 条目与读者的原因词随 {@link OldGrammarEntries.toolDenyUnreadable} 交出(收据点名)。引擎对这种行本来就拒一切 —— 本函数只问、不判:不复刻引擎的条目读者,不替运维删条目或改写。
|
|
520
|
+
* · 新体盖 `grammar: SESSION_RULES_GRAMMAR`:无戳行每一行都写(改写之后部署里零无戳行 —— 除上一条留下的行);已带戳且没有可删条目的行零动作(幂等)。
|
|
407
521
|
* 读不出形(不是对象、有别的非桶键、桶不是一列字符串、坏戳 / 比引擎新的戳)⇒ `undefined`,不判(读回照旧 `corrupt`)。本函数零处读 / 比较戳的数值:
|
|
408
522
|
* 「有没有戳」是形读法自己判戳之前的同一问;条目在哪种文法下算什么只有引擎读。
|
|
409
523
|
*/
|
|
@@ -413,12 +527,13 @@ export declare function oldGrammarEntriesOf(body: unknown, rev: number): OldGram
|
|
|
413
527
|
* ① 旧名 `rules` 在 ⇒ 改成进行中的名 `rule_entries_old_grammar`(≤7.128.x 副本从此找不到列,响亮失败;MySQL 协议方言 `CHANGE COLUMN`,定义内插 `SESSION_RULES_COLUMN`
|
|
414
528
|
* 同一串;PG `RENAME COLUMN`);
|
|
415
529
|
* ② 进行中的名在 ⇒ 改写它下面的每一行({@link judgeOldGrammarRows}:这个名下的行只可能是 ≤7.128.x 写的无戳行,或上一次没走完的判读已改写过的带戳行 —— 再判零动作),
|
|
416
|
-
* 判完才改成终名 `rule_entries`;判读抛了 ⇒
|
|
530
|
+
* 判完才改成终名 `rule_entries`;判读抛了 ⇒ 原样上抛,列停在进行中的名,下一次起服从这里续。**收据随提交落**:有被删条目的改写提交的那一刻记进迁移段那一只收据账 ——
|
|
417
531
|
* 本函数之后的任何一步(含终名改名本身、其后的退役桶扫描、`migrateOn` 里排在它后面的迁移)失败,收据都由 `migrateOn` 外层随拒因带出去;
|
|
418
532
|
* ③ 带退役命令桶的行每次起服在终名下逐页扫、逐行点名(文字预筛 + {@link retiredSessionRuleBucketsOf} 精判)—— 退役桶一个字节不动(读回照旧 `corrupt`)。
|
|
419
|
-
*
|
|
533
|
+
* 读数都记在收据账上(`sessionRuleColumn` 在落定时写:表不在(中央 DDL 之前被调到)⇒ `no-table`,不编读数;`renamed` = 本次把终名发布出来(含从进行中的名续判到底的那一次),
|
|
534
|
+
* 终名改名提交之后才写;`current` = 起服时已是终名);点名的行随扫到追加。
|
|
420
535
|
*/
|
|
421
|
-
export declare function migrateSessionRuleGrammar(db: MigrationDb, dialect: "tidb" | "pg", receipts:
|
|
536
|
+
export declare function migrateSessionRuleGrammar(db: MigrationDb, dialect: "tidb" | "pg", receipts: MigrationReceipts): Promise<void>;
|
|
422
537
|
/** M8 一行改写的结论:改写后的文本 / 这一行不用动 / 读不懂(解析错误原样交出,调用方计数进读数)。 */
|
|
423
538
|
export type ShadowedRuleRewrite = {
|
|
424
539
|
readonly kind: "rewrite";
|
|
@@ -448,20 +563,57 @@ export type RetiredCardWordsRowRewrite = {
|
|
|
448
563
|
};
|
|
449
564
|
/** M18 —— `approval_ask.card_json` 一行的改写(纯函数;导出给钉用):信封里 `card` 两座上的退役词按 `retired-card-words.ts` 那一只改写。 */
|
|
450
565
|
export declare function migrateRetiredCardWordsInCardJson(text: string): RetiredCardWordsRowRewrite;
|
|
566
|
+
/** M21 一行的修补方案({@link parkedRowRepairOf} 的读数)。 */
|
|
567
|
+
export interface ParkedRowRepair {
|
|
568
|
+
/** 要回填进 `gate_kind` 列的门型:列是 NULL、门子树里有一只 core 登记的门型。缺席 = 不回填。 */
|
|
569
|
+
readonly gateKind?: GateKind;
|
|
570
|
+
/** 要给门写上问答卡词:审批门型 ∧ 门上没有 `approvalCard` 这个键 ∧ 待决动作是问答工具(按名,与决断口同一个名)的审批。 */
|
|
571
|
+
readonly questionCard: boolean;
|
|
572
|
+
/** 列是 NULL、门子树里读不出一只 core 登记的门型 —— 引擎续不了它(`pauseOf` 拒),也进不了任何一条按门型分的腿。 */
|
|
573
|
+
readonly unresumable: boolean;
|
|
574
|
+
}
|
|
575
|
+
/**
|
|
576
|
+
* M21 一行的判读(纯函数;导出给钉用)。输入 = 行上的 `gate_kind` 列、文档里的 `gate` / `pendingAction` 两棵子树(读不出 ⇒ `undefined`)。
|
|
577
|
+
* 门型取列(写入时从同一只门反范式下来的那一格);列是 NULL 才读门子树。门上已有任何卡词(含集外词)⇒ 不写:那不是「缺席」,集外词由读者自己的计数臂接住。
|
|
578
|
+
*/
|
|
579
|
+
export declare function parkedRowRepairOf(gateKindCell: unknown, gate: unknown, pendingAction: unknown): ParkedRowRepair;
|
|
580
|
+
/**
|
|
581
|
+
* M21 —— 停驻行补齐引擎今天在铸点写的两格(规则、为什么、够不到的一格见头注 M21 段)。只扫 `status = 'pending'` 的候选行(`gate_kind` 为 NULL,或审批门型且
|
|
582
|
+
* 待决工具列是问答工具 —— 两列都是写入时从同一份文档反范式下来的;列只做预筛,判读读文档的子树),按 `token` 键集分页,每行只看一次:
|
|
583
|
+
* · 回填门型:`UPDATE … SET gate_kind = ? WHERE token = ? AND status = 'pending' AND gate_kind IS NULL`(第二跑零命中);
|
|
584
|
+
* · 续不了(列 NULL ∧ 门子树里读不出登记门型):`UPDATE … SET status = 'expired', decided_at_ms = ?`,同一守卫 —— 与到期收割同一个终态(停驻的 run 行由既有收割腿收);
|
|
585
|
+
* · 补卡词:读整只文档一次 —— 带 `requirementsDigest`(引擎行摘要封过,`gate.approvalCard` 是它覆盖的成员)或读不懂 ⇒ 一个字节不动、计进 `parkedQuestionRowsLeftAsWritten`;
|
|
586
|
+
* 否则门上加 `approvalCard: "question"`、其余字节原样,经写腿的同一只编码器回写,按原文 CAS(MySQL 协议两边 `CAST(… AS BINARY)`,PG `text` 等值)+ `status = 'pending'`。
|
|
587
|
+
* 每一次提交当场记进收据账。
|
|
588
|
+
*/
|
|
589
|
+
export declare function repairParkedRows(db: MigrationDb, dialect: "tidb" | "pg", receipts: MigrationReceipts): Promise<void>;
|
|
590
|
+
/**
|
|
591
|
+
* M23 —— 存量 placed 子代行的属主回填,**每次起服单趟、幂等**(规则、为什么、够不到的一格见头注 M23 段):键集分页扫完 placed ∧ 属主 NULL 的行,每一行按唯一判据判
|
|
592
|
+
* (`judgeDelegatedOwner`,建行那一笔与停驻挂点同一只:来源顺序根、父;属主 = 这一读见证到的):
|
|
593
|
+
* · 判出属主 ⇒ {@link CLAIM_OWNERLESS_PLACED_SQL}(只 CAS 子行自己,绑扫描读到的化身;与停驻挂点的认领**同一句、同一份绑参**;第二跑零命中);写成的按属主计进
|
|
594
|
+
* `placedSessionOwnersOrphaned`(谁都不匹配:孤行哨兵,或继承自孤行祖先的同一只哨兵)或 `placedSessionOwnersInherited`,每一次提交当场记进收据账;零命中(这一行在扫描之后
|
|
595
|
+
* 被写过 / 删过 / 换了住客)⇒ 不计,下一次起服按那时的律重判;
|
|
596
|
+
* · 判出无主:读到的来源本身是一只 placed 行(还没定下的委派子代行)⇒ 计进 `placedSessionOwnersRemaining`(残余);来源是普通会话(根无主)⇒ 律就让它无主,不计;
|
|
597
|
+
* · 扫到的任何一行化身为空 ⇒ 响亮拒(不论判不判得出属主;来源行同一条律)。
|
|
598
|
+
* 不重扫、不拒启:残余由下一次起服或那一行的下一次停驻定下,期间只对 fleet 调用方放行(头注 M23 段)。
|
|
599
|
+
*/
|
|
600
|
+
export declare function inheritPlacedSessionOwners(db: MigrationDb, dialect: "tidb" | "pg", receipts: MigrationReceipts): Promise<void>;
|
|
451
601
|
/**
|
|
452
602
|
* 启动日志的读数行。零命中(第二跑起的常态)也照发 —— 「跑过了、什么都没改」与「压根没跑」必须可分辨。
|
|
453
603
|
*
|
|
454
|
-
* 🔴
|
|
604
|
+
* 🔴 **级别按「这次真动了没有」分**({@link changedAnything}):动了 ⇒ `warn`(有人的持久数据被改写/删除了,运维该看见一次);
|
|
455
605
|
* 没动 ⇒ `info`。把恒常的空转也发成 warn 会训练运维忽略 warn —— 那是在为了本段的可见性去损耗整条告警轴。
|
|
606
|
+
* 汇总行之后逐行的那几种由 {@link logReceiptRows} 打(被打断的起服走同一只)。
|
|
456
607
|
*/
|
|
457
608
|
export declare function logOneTimeMigrations(log: MigrationLogSink, backend: string, report: OneTimeMigrationReport): void;
|
|
458
609
|
/**
|
|
459
610
|
* **起服调用点用的那一只**(`boot/stores.ts`;嵌入方走公开序列自己调 `runOneTimeMigrations()` 时拿到的是 {@link OneTimeMigrationInterruptedError} 本身,收据在 `receipts`):
|
|
460
|
-
* 跑迁移、成功则打读数行({@link logOneTimeMigrations});被打断(
|
|
611
|
+
* 跑迁移、成功则打读数行({@link logOneTimeMigrations});被打断(已提交了改写)则**先把收据打进日志再抛**,抛的就是迁移段那只错。
|
|
461
612
|
* 其余失败原样抛、不多打一行。
|
|
462
613
|
*/
|
|
463
614
|
export declare function runAndLogOneTimeMigrations(log: MigrationLogSink, backend: {
|
|
464
615
|
readonly kind: string;
|
|
465
616
|
runOneTimeMigrations(): Promise<OneTimeMigrationReport>;
|
|
466
617
|
}): Promise<void>;
|
|
618
|
+
export {};
|
|
467
619
|
//# sourceMappingURL=one-time-migrations.d.ts.map
|