@sema-agent/server 7.146.0 → 7.147.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 +384 -0
- package/README.md +1 -1
- package/README.zh-CN.md +1 -1
- package/USAGE.md +170 -66
- package/deploy/facts/lanes.json +7 -0
- package/deploy/sema-up/README.md +2 -2
- package/deploy/sema-up/chart/templates/_helpers.tpl +22 -0
- package/deploy/sema-up/chart/templates/server-v4pro.yaml +5 -4
- package/deploy/sema-up/chart/templates/server.yaml +5 -4
- package/deploy/sema-up/chart/values.yaml +1 -1
- package/deploy/sema-up/cluster-up.sh +2 -1
- package/deploy/sema-up/lib/flagshape.sh +4 -0
- package/deploy/sema-up/lib/lanes.json +2 -5
- package/deploy/sema-up/sema-up.sh +12 -9
- package/deploy/sema-up/stack/compose.yaml +5 -4
- package/deploy/sema-up/stack/sema-stack-cluster.yaml +4 -3
- package/dist/approval-card.d.ts +4 -4
- package/dist/approval.d.ts +3 -3
- package/dist/audit.js +2 -2
- package/dist/bench/s1/live-deps.js +3 -1
- package/dist/boot/crash-last.js +2 -1
- package/dist/boot/device-lane.js +5 -5
- package/dist/boot/engine-lease.d.ts +12 -11
- package/dist/boot/execution-env.d.ts +2 -1
- package/dist/boot/execution-env.js +45 -33
- package/dist/boot/execution-lane.d.ts +37 -9
- package/dist/boot/execution-lane.js +74 -20
- package/dist/boot/exit-boundary.d.ts +1 -1
- package/dist/boot/exit-last.js +2 -1
- package/dist/boot/governance-seams.d.ts +2 -2
- package/dist/boot/leader.js +1 -1
- package/dist/boot/memory-boundary.d.ts +11 -11
- package/dist/boot/memory-boundary.js +3 -3
- package/dist/boot/memory-consolidation.d.ts +13 -24
- package/dist/boot/memory-consolidation.js +0 -13
- package/dist/boot/org-memory.js +3 -2
- package/dist/boot/parked-revive-gate.d.ts +1 -1
- package/dist/boot/parked-revive-gate.js +1 -1
- package/dist/boot/reapers.js +1 -1
- package/dist/boot/resolve-spec.js +91 -111
- package/dist/boot/retention-lane.d.ts +4 -42
- package/dist/boot/session-faces.d.ts +1 -0
- package/dist/boot/session-faces.js +8 -2
- package/dist/boot/stage-01-config.d.ts +1 -1
- package/dist/boot/stage-01-config.js +6 -2
- package/dist/boot/stage-02-web-admin-pull.d.ts +1 -1
- package/dist/boot/stage-02-web-admin-pull.js +10 -8
- package/dist/boot/stage-03-store-backend.d.ts +1 -1
- package/dist/boot/stage-04-stores.d.ts +1 -1
- package/dist/boot/stage-05-execution-env.d.ts +2 -2
- package/dist/boot/stage-05-execution-env.js +3 -3
- package/dist/boot/stage-06-runners.d.ts +3 -3
- package/dist/boot/stage-06-runners.js +1 -3
- package/dist/boot/stage-07-capability-layer.d.ts +3 -3
- package/dist/boot/stage-07-capability-layer.js +4 -9
- package/dist/boot/stage-08-reapers.d.ts +3 -3
- package/dist/boot/stage-09-leader.d.ts +4 -3
- package/dist/boot/stage-10-http-server.d.ts +4 -3
- package/dist/boot/stage-10-http-server.js +2 -1
- package/dist/boot/stores.d.ts +9 -0
- package/dist/boot/stores.js +18 -7
- package/dist/boot/web-admin.js +3 -3
- package/dist/capabilities/center-plugins.d.ts +2 -0
- package/dist/capabilities/center-plugins.js +6 -2
- package/dist/capabilities/composite-members.d.ts +1 -0
- package/dist/capabilities/composite-members.js +1 -0
- package/dist/capabilities/execution-lane.d.ts +7 -7
- package/dist/capabilities/execution-lane.js +2 -2
- package/dist/capabilities/hands-lane.d.ts +1 -1
- package/dist/capabilities/scenarios.d.ts +32 -18
- package/dist/capabilities/scenarios.js +13 -9
- package/dist/capabilities/settings-contract.d.ts +29 -0
- package/dist/capabilities/settings-contract.js +14 -0
- package/dist/capabilities/skills.d.ts +5 -5
- package/dist/capability-facts.d.ts +38 -0
- package/dist/capability-facts.js +34 -1
- package/dist/center-credential-renewer.js +3 -2
- package/dist/config-catalog.js +6 -5
- package/dist/config-invariants.d.ts +18 -3
- package/dist/config-invariants.js +36 -19
- package/dist/config-lkg.d.ts +1 -1
- package/dist/config-lkg.js +5 -6
- package/dist/config-provider.js +2 -0
- package/dist/config-types.d.ts +190 -186
- package/dist/config.d.ts +68 -5
- package/dist/config.js +80 -54
- package/dist/degenerate-instrument.js +1 -1
- package/dist/deploy-facts.js +3 -2
- package/dist/deployment-shape.d.ts +21 -12
- package/dist/deployment-shape.js +24 -6
- package/dist/env-facts.d.ts +7 -5
- package/dist/env-facts.js +10 -6
- package/dist/execution-config-root.d.ts +5 -5
- package/dist/execution-config-root.js +5 -5
- package/dist/execution-env-purpose.d.ts +14 -0
- package/dist/execution-env-purpose.js +29 -0
- package/dist/execution-lane-caps.d.ts +49 -86
- package/dist/execution-lane-caps.js +52 -62
- package/dist/execution-placement.d.ts +18 -2
- package/dist/execution-placement.js +19 -0
- package/dist/file-history-disclosure.d.ts +2 -2
- package/dist/fleet/drain-entry.d.ts +17 -10
- package/dist/fleet/drain-entry.js +1 -1
- package/dist/fleet/serving-lease.js +3 -4
- package/dist/history-anchor.d.ts +22 -0
- package/dist/history-anchor.js +14 -0
- package/dist/hooks/command-spawn.d.ts +1 -4
- package/dist/hooks/command-spawn.js +0 -11
- package/dist/hooks/hook-runner.d.ts +52 -8
- package/dist/hooks/hook-runner.js +160 -36
- package/dist/http/approval-sweeps.d.ts +2 -5
- package/dist/http/approval-sweeps.js +3 -2
- package/dist/http/checkpoint-ctx.d.ts +17 -0
- package/dist/http/checkpoint-ctx.js +6 -0
- package/dist/http/claim-latency.d.ts +10 -0
- package/dist/http/claim-latency.js +12 -0
- package/dist/http/dispatch.js +1 -1
- package/dist/http/durable-run-leg.js +2 -1
- package/dist/http/execution-context.d.ts +3 -1
- package/dist/http/execution-context.js +4 -0
- package/dist/http/memory-compliance-failure-reply.d.ts +1 -1
- package/dist/http/memory-compliance-failure-reply.js +3 -0
- package/dist/http/memory-store-refusal-reply.d.ts +3 -3
- package/dist/http/memory-store-refusal-reply.js +3 -0
- package/dist/http/owner-access.d.ts +11 -0
- package/dist/http/owner-access.js +7 -4
- package/dist/http/principal-gate.d.ts +3 -14
- package/dist/http/principal-gate.js +0 -13
- package/dist/http/request-guards.d.ts +1 -1
- package/dist/http/resume-legs.d.ts +7 -10
- package/dist/http/resume-legs.js +79 -50
- package/dist/http/rewind-files-reply.d.ts +34 -0
- package/dist/http/rewind-files-reply.js +36 -0
- package/dist/http/route-ctx.d.ts +32 -16
- package/dist/http/route-table.js +2 -0
- package/dist/http/routes/approvals-assistant.js +5 -25
- package/dist/http/routes/capabilities.js +8 -2
- package/dist/http/routes/devices.js +1 -1
- package/dist/http/routes/memory-origin.d.ts +1 -1
- package/dist/http/routes/notify-wake.js +2 -1
- package/dist/http/routes/projects.d.ts +70 -0
- package/dist/http/routes/projects.js +86 -0
- package/dist/http/routes/rules.js +30 -2
- package/dist/http/routes/runs.js +8 -8
- package/dist/http/routes/session-sync.js +27 -10
- package/dist/http/routes/sessions.d.ts +7 -1
- package/dist/http/routes/sessions.js +104 -2
- package/dist/http/routes/tasks.js +9 -3
- package/dist/http/server.d.ts +24 -10
- package/dist/http/server.js +17 -6
- package/dist/http/stored-body-replay.d.ts +5 -3
- package/dist/http/stored-body-replay.js +10 -1
- package/dist/http/wire-types.d.ts +19 -10
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/instruction-source-notice.d.ts +1 -1
- package/dist/memory-embedder-reembed.d.ts +38 -0
- package/dist/memory-embedder-reembed.js +20 -0
- package/dist/memory-incident-sink.d.ts +0 -28
- package/dist/memory-incident-sink.js +5 -0
- package/dist/memory-scope.d.ts +2 -2
- package/dist/memory-scope.js +1 -1
- package/dist/memory-store-refusal.d.ts +17 -4
- package/dist/memory-store-refusal.js +1 -1
- package/dist/memory-sync-client.d.ts +2 -0
- package/dist/memory-sync-client.js +13 -11
- package/dist/memory-sync.js +1 -1
- package/dist/model-compat.d.ts +35 -21
- package/dist/model-compat.js +49 -21
- package/dist/model-entry-refusal.d.ts +11 -1
- package/dist/model-entry-refusal.js +7 -0
- package/dist/namespaced-rule-name.d.ts +18 -1
- package/dist/namespaced-rule-name.js +12 -0
- package/dist/observability/fail-open.d.ts +17 -9
- package/dist/observability/fail-open.js +17 -9
- package/dist/observability/metrics.d.ts +2 -0
- package/dist/observability/metrics.js +2 -0
- package/dist/observability/secret-env-scrub.d.ts +30 -4
- package/dist/observability/secret-env-scrub.js +15 -3
- package/dist/orchestration/workflow-agent-session-index.d.ts +7 -12
- package/dist/orchestration/workflow-agent-session-index.js +1 -6
- package/dist/orchestration/workflow-completion-inbox.d.ts +26 -6
- package/dist/orchestration/workflow-completion-inbox.js +63 -45
- package/dist/org-memory-admission.d.ts +5 -2
- package/dist/org-memory-admission.js +25 -10
- package/dist/parked-decide.d.ts +33 -26
- package/dist/parked-decide.js +36 -44
- package/dist/plugins/approval-ask-store-file.d.ts +10 -2
- package/dist/plugins/approval-ask-store-file.js +37 -4
- package/dist/plugins/approval-ask-store-memory.d.ts +5 -3
- package/dist/plugins/approval-ask-store-memory.js +11 -2
- package/dist/plugins/approval-ask-store-sql.d.ts +3 -0
- package/dist/plugins/approval-ask-store-sql.js +3 -1
- package/dist/plugins/blob-backend.d.ts +38 -195
- package/dist/plugins/blob-backend.js +33 -229
- package/dist/plugins/caching-session-store.d.ts +9 -4
- package/dist/plugins/checkpoint-index-columns.d.ts +1 -1
- package/dist/plugins/checkpoint-index-columns.js +3 -2
- package/dist/plugins/checkpoint-store-face.d.ts +1 -1
- package/dist/plugins/device-store-sql.d.ts +2 -2
- package/dist/plugins/device-store-sql.js +5 -10
- package/dist/plugins/execution-lane-rename-m40.d.ts +20 -0
- package/dist/plugins/execution-lane-rename-m40.js +10 -0
- package/dist/plugins/execution-placement-sql.d.ts +63 -88
- package/dist/plugins/execution-placement-sql.js +94 -54
- package/dist/plugins/file-run-store.d.ts +26 -12
- package/dist/plugins/file-run-store.js +63 -63
- package/dist/plugins/imported-layer-root-retirement.d.ts +17 -8
- package/dist/plugins/imported-layer-root-retirement.js +4 -8
- package/dist/plugins/inbox-payload-column.d.ts +14 -0
- package/dist/plugins/inbox-payload-column.js +13 -0
- package/dist/plugins/local-checkpoint-store.d.ts +5 -0
- package/dist/plugins/local-checkpoint-store.js +11 -7
- package/dist/plugins/local-data-dir-modes-m39.d.ts +48 -0
- package/dist/plugins/local-data-dir-modes-m39.js +182 -0
- package/dist/plugins/local-engine-high-water.d.ts +11 -0
- package/dist/plugins/local-engine-high-water.js +59 -0
- package/dist/plugins/local-session-store.d.ts +91 -25
- package/dist/plugins/local-session-store.js +124 -45
- package/dist/plugins/local-task-attachment-store.d.ts +2 -0
- package/dist/plugins/local-task-attachment-store.js +10 -11
- package/dist/plugins/memory-embedder-fingerprint.d.ts +33 -10
- package/dist/plugins/memory-embedder-fingerprint.js +52 -12
- package/dist/plugins/memory-embedder.d.ts +1 -1
- package/dist/plugins/memory-embedder.js +2 -2
- package/dist/plugins/memory-engine-pg.d.ts +4 -3
- package/dist/plugins/memory-engine-pg.js +4 -4
- package/dist/plugins/memory-engine-sql-apply.d.ts +13 -4
- package/dist/plugins/memory-engine-sql-apply.js +1 -1
- package/dist/plugins/memory-engine-tidb.d.ts +8 -5
- package/dist/plugins/memory-engine-tidb.js +7 -8
- package/dist/plugins/one-time-migrations.d.ts +145 -35
- package/dist/plugins/one-time-migrations.js +272 -120
- package/dist/plugins/owner-only-file-mode.d.ts +29 -0
- package/dist/plugins/owner-only-file-mode.js +141 -0
- package/dist/plugins/permission-rule-store-file.d.ts +8 -8
- package/dist/plugins/permission-rule-store-file.js +14 -2
- package/dist/plugins/pg-pool.d.ts +2 -1
- package/dist/plugins/pg-pool.js +11 -4
- package/dist/plugins/release-version.d.ts +20 -0
- package/dist/plugins/release-version.js +28 -0
- package/dist/plugins/remote-env-adb.d.ts +20 -4
- package/dist/plugins/remote-env-adb.js +39 -11
- package/dist/plugins/remote-env-e2b.d.ts +12 -3
- package/dist/plugins/remote-env-e2b.js +6 -4
- package/dist/plugins/remote-env-host.d.ts +9 -1
- package/dist/plugins/remote-env-host.js +6 -5
- package/dist/plugins/remote-env-k8s.d.ts +5 -2
- package/dist/plugins/remote-env-k8s.js +15 -4
- package/dist/plugins/remote-env-local-docker.d.ts +4 -1
- package/dist/plugins/remote-env-local-docker.js +3 -3
- package/dist/plugins/remote-env-ssh.d.ts +8 -2
- package/dist/plugins/remote-env-ssh.js +26 -24
- package/dist/plugins/remote-shell.d.ts +59 -30
- package/dist/plugins/remote-shell.js +175 -62
- package/dist/plugins/retention-declaration.d.ts +37 -0
- package/dist/plugins/retention-declaration.js +9 -0
- package/dist/plugins/retention-deployment.d.ts +126 -0
- package/dist/plugins/retention-deployment.js +88 -0
- package/dist/plugins/retention-lane-store-sql.d.ts +74 -4
- package/dist/plugins/retention-lane-store-sql.js +103 -1
- package/dist/plugins/retention-sql.d.ts +29 -0
- package/dist/plugins/retention-sql.js +8 -0
- package/dist/plugins/schema-consistency.d.ts +0 -6
- package/dist/plugins/schema-consistency.js +1 -2
- package/dist/plugins/schema-ensure-legs.d.ts +1 -1
- package/dist/plugins/schema-ensure-legs.js +11 -1
- package/dist/plugins/session-ext-table.d.ts +74 -0
- package/dist/plugins/session-ext-table.js +121 -0
- package/dist/plugins/session-fork.d.ts +1 -1
- package/dist/plugins/session-row-sql.d.ts +8 -7
- package/dist/plugins/session-row-sql.js +15 -7
- package/dist/plugins/session-store-sql.d.ts +131 -0
- package/dist/plugins/session-store-sql.js +298 -0
- package/dist/plugins/session-workspace-cell.d.ts +2 -2
- package/dist/plugins/session-workspace-cell.js +2 -2
- package/dist/plugins/shared-memory-store-sql.d.ts +10 -0
- package/dist/plugins/shared-memory-store-sql.js +13 -13
- package/dist/plugins/snapshot-bucket-presence.js +1 -1
- package/dist/plugins/sql-driver.d.ts +23 -7
- package/dist/plugins/sql-driver.js +41 -8
- package/dist/plugins/sql-errors.d.ts +5 -2
- package/dist/plugins/sql-errors.js +4 -0
- package/dist/plugins/store-backend.d.ts +35 -8
- package/dist/plugins/store-backend.js +184 -62
- package/dist/plugins/store-contracts.d.ts +9 -2
- package/dist/plugins/store-contracts.js +1 -0
- package/dist/plugins/task-attachment-store.d.ts +6 -8
- package/dist/plugins/task-attachment-store.js +15 -10
- package/dist/plugins/task-list-store-sql.d.ts +1 -1
- package/dist/plugins/text-column-capacity.d.ts +21 -0
- package/dist/plugins/text-column-capacity.js +5 -0
- package/dist/plugins/tidb-pool.d.ts +3 -2
- package/dist/plugins/tidb-pool.js +19 -31
- package/dist/plugins/user-input-ledger-sql.d.ts +1 -1
- package/dist/read-face-posture.d.ts +6 -6
- package/dist/read-face-posture.js +2 -2
- package/dist/request-value-closure.d.ts +5 -5
- package/dist/request-value-closure.js +1 -1
- package/dist/rules-consent.d.ts +41 -13
- package/dist/rules-consent.js +101 -53
- package/dist/run-local.js +17 -13
- package/dist/runs.d.ts +48 -30
- package/dist/runs.js +26 -16
- package/dist/runtime-caps-resolver.d.ts +15 -8
- package/dist/runtime-caps-resolver.js +14 -10
- package/dist/sealed-key-layout.d.ts +2 -3
- package/dist/sealed-key-layout.js +0 -1
- package/dist/sealed-key.js +7 -5
- package/dist/security.d.ts +5 -3
- package/dist/sema-config-dir.js +2 -2
- package/dist/server-secret-env.d.ts +2 -0
- package/dist/service-version.d.ts +2 -1
- package/dist/service-version.js +2 -2
- package/dist/session-error-wire.d.ts +1 -1
- package/dist/session-incarnation.d.ts +8 -5
- package/dist/session-resident-background.d.ts +85 -32
- package/dist/session-resident-background.js +75 -7
- package/dist/session-row.d.ts +1 -1
- package/dist/session-sync-kernel.d.ts +1 -1
- package/dist/session-workspace.d.ts +11 -2
- package/dist/session-workspace.js +5 -0
- package/dist/sighup-idle.d.ts +1 -1
- package/dist/store-posture.d.ts +2 -1
- package/dist/stored-request-hooks-m20.d.ts +3 -2
- package/dist/stored-request-hooks-m20.js +19 -14
- package/dist/stores-sql/blob-index-sql.d.ts +148 -0
- package/dist/stores-sql/blob-index-sql.js +154 -0
- package/dist/stores-sql/checkpoint-store-sql.d.ts +1 -1
- package/dist/stores-sql/checkpoint-store-sql.js +11 -27
- package/dist/{plugins → stores-sql}/file-history-store-sql.d.ts +23 -11
- package/dist/{plugins → stores-sql}/file-history-store-sql.js +23 -18
- package/dist/{plugins → stores-sql}/pg-session-storage.d.ts +23 -76
- package/dist/{plugins → stores-sql}/pg-session-storage.js +80 -209
- package/dist/{plugins → stores-sql}/retention-store-sql.d.ts +123 -217
- package/dist/{plugins → stores-sql}/retention-store-sql.js +66 -190
- package/dist/{plugins → stores-sql}/session-event-payload.d.ts +1 -1
- package/dist/{plugins → stores-sql}/session-event-payload.js +1 -1
- package/dist/stores-sql/session-policy-store-sql.d.ts +1 -1
- package/dist/stores-sql/session-write-hooks.d.ts +59 -0
- package/dist/stores-sql/session-write-hooks.js +2 -0
- package/dist/{plugins → stores-sql}/tidb-session-storage.d.ts +10 -11
- package/dist/{plugins → stores-sql}/tidb-session-storage.js +10 -21
- package/dist/{plugins → stores-sql}/tidb-session-store.d.ts +32 -122
- package/dist/{plugins → stores-sql}/tidb-session-store.js +71 -171
- package/dist/stores-sql/tool-result-store-sql.d.ts +1 -1
- package/dist/stores-sql/tool-result-store-sql.js +1 -1
- package/dist/stores-sql/windowed-session-storage.d.ts +56 -0
- package/dist/stores-sql/windowed-session-storage.js +61 -0
- package/dist/task-a2a.d.ts +7 -1
- package/dist/task-a2a.js +15 -14
- package/dist/task-cwd.d.ts +11 -3
- package/dist/task-cwd.js +17 -1
- package/dist/task-mcp.d.ts +10 -2
- package/dist/task-mcp.js +13 -16
- package/dist/task-settings.d.ts +9 -4
- package/dist/task-settings.js +17 -6
- package/dist/tool-approval.d.ts +21 -8
- package/dist/tool-approval.js +10 -6
- package/dist/trace/core-keyset-guard.d.ts +9 -3
- package/dist/trace/engine-notice-wire.d.ts +1 -1
- package/dist/trace/engine-notice-wire.js +2 -0
- package/dist/trace/exit-seat.d.ts +23 -1
- package/dist/trace/exit-seat.js +3 -0
- package/dist/trace/project.d.ts +33 -16
- package/dist/trace/project.js +12 -9
- package/dist/trace/redact.d.ts +1 -1
- package/dist/trace/redact.js +61 -73
- package/dist/trace/self-minted-wire.d.ts +263 -10
- package/dist/trace/self-minted-wire.js +90 -2
- package/dist/trace/sema-provenance.d.ts +45 -41
- package/dist/trace/sema-provenance.js +81 -10
- package/dist/trace/task-notification-facets.d.ts +70 -2
- package/dist/trace/task-notification-facets.js +71 -1
- package/dist/trace/wire-projection-faces.d.ts +38 -2
- package/dist/trace/wire-projection-faces.js +26 -1
- package/dist/unread-request-members.d.ts +66 -0
- package/dist/unread-request-members.js +41 -0
- package/dist/user-input-ledger.d.ts +2 -2
- package/dist/web-admin-client/apply-effective.js +22 -26
- package/dist/web-admin-client/candidate-gate.d.ts +35 -3
- package/dist/web-admin-client/candidate-gate.js +53 -5
- package/dist/web-admin-client/center-request.d.ts +4 -1
- package/dist/web-admin-client/center-request.js +2 -1
- package/dist/web-admin-client/effective-keys.js +0 -1
- package/dist/web-admin-client/facade.d.ts +1 -1
- package/dist/web-admin-client/http-client.d.ts +1 -0
- package/dist/web-admin-client/http-client.js +17 -9
- package/dist/web-admin-client/restart-signal.js +5 -2
- package/dist/web-admin-client/skills-mcp.d.ts +20 -6
- package/dist/web-admin-client/skills-mcp.js +26 -21
- package/dist/web-admin-client/types.d.ts +34 -49
- package/docs/DEVICE-EXECUTOR-PROTOCOL.md +2 -2
- package/package.json +13 -12
- package/scripts/drain-check-local.mjs +2 -28
- package/scripts/drain-check.mysql.sql +2 -18
- package/scripts/drain-check.pg.sql +2 -18
- package/wire-changes/server@7.147.0.json +813 -0
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
* ⇒ 换成本段:**升一次级把存量字节改完,兼容臂当场删干净**。代价是每一条在它的窗内每次启动都要跑一遍(第二次起全是
|
|
25
25
|
* 零命中的空转);收益是窗关之后可以把那一条连同它的 SQL 一起删,而读腿从引入那一版起就只有**一种**读法。
|
|
26
26
|
*
|
|
27
|
-
* ## 已退役的 M1–
|
|
27
|
+
* ## 已退役的 M1–M9 与 M14
|
|
28
28
|
* 退役的整树快照索引表(M1)、退役的单座 steering 列(M2)、被上游改了名的闭集词 `unresolvable` → `ancestor_marked`(M3)三条的改写、计数与读数
|
|
29
29
|
* 窗关后已全部删码,登记行一并删。跳过了它们直接升的库由起服对账一族的拒启臂接住(`schema-consistency.ts` 头注「第二道对账」一节:两件退役 schema
|
|
30
30
|
* 任一在场 ⇒ 拒启、点名出路;先于一切建表)—— 那一道没有窗,所以不在本文件里。本段入口({@link runSqlOneTimeMigrations})不问这一问。
|
|
@@ -36,27 +36,25 @@
|
|
|
36
36
|
* 出路是运维给那些行各填一只互不相同的随机令牌,或删会话(MIGRATION 写了升级序)。
|
|
37
37
|
* LKG 的 formatVersion 1 迁移(M14:7.98.0 及以前写在默认路径的旧缓存文件迁进身份箱;非店迁移,不写库)同样已删码(本版提前于窗关删),登记行一并删;它没有自己的拒启臂 —— 那是缓存文件、不是数据:
|
|
38
38
|
* `CONFIG_LKG_PATH` 指到旧文件 ⇒ `loadLkg` 的 1 臂答 `config_lkg_unusable`(env 兜底),默认路径上的旧文件名不是身份箱的文件名形、不再被读,中心可达时第一份干净候选照常写出身份箱。
|
|
39
|
-
* M6 / M7 / M8 同样已删码(
|
|
39
|
+
* M6 / M7 / M8 同样已删码(7.146.0 删;三条的窗 2026-11-04 … 2026-11-05 关,发版日前都已关),登记行一并删。逐条写跳过了它直接升的库(以及滚动升级窗里旧副本新写的旧形行)由谁接住:
|
|
40
40
|
* ① run 死亡判决码回填(M6;连同 SQL 行映射里的读侧半场):没有响亮臂 —— 只有句子、码列为空的 `failed` 行(只有 ≤7.115.x 的写者铸得出;7.116.0 起的写者恒同写码)不再被判成持有者死亡:
|
|
41
41
|
* 用户输入受理账本的收敛判词(`user-input-ledger.ts` `judgeOpen`)把它落到「其余」臂 `leg_over`(补落 `settled{leg_end}`、不告知),那条 run 上丢掉的 steer 不再告诉用户;`GET /v1/runs/:id` 上 `errorCode` 缺席、只剩 `error` 句子。
|
|
42
42
|
* ② 停驻行 allow 读法记号的拒臂(M7):不写库,删的是 allow 读法记号的写点与「按记号判」的读法;拒臂留为按写者版本的**永久门**(`http/checkpoint-ctx.ts` 顶注「allow 读法问」)——
|
|
43
43
|
* 体里带非空 allow、而行的写者版本证不出 ≥ 7.117.0(缺席 / 读不出 / 更早)⇒ 续跑重放拒 409 `checkpoint.unsupported_version`(响亮,出路 = 取消后作为新任务重提)。
|
|
44
44
|
* 这一门不随窗走:日历窗关不证明旧行不在。已存行上的记号键原样留着、无人读;7.117.0–7.123.x 写下、带非空 allow 的行(有记号、没有写者版本)同样拒 —— 证据只认写者版本一个源。
|
|
45
|
-
* 反向的一格(如实登记)
|
|
46
|
-
* CC settings 常带它)时照它自己的一问判,由那一版答 409 `checkpoint.unsupported_version`(带写者 / 读者两版本键;响亮,出路 =
|
|
45
|
+
* 反向的一格(如实登记):7.146.0 起写下的行不再带这只记号,滚动升级 / 回滚窗里仍跑 7.145.x 及以前的副本读到**任何**体里带非空 allow 的 7.146.0 起的行(提交体从壳透传的
|
|
46
|
+
* CC settings 常带它)时照它自己的一问判,由那一版答 409 `checkpoint.unsupported_version`(带写者 / 读者两版本键;响亮,出路 = 由 7.146.0 及以后的副本续跑)。
|
|
47
47
|
* ③ 停驻行披露位换名(M8):没有响亮臂 —— 仍带旧键 `shadowedRule` 的停驻行在运维待批队列上只缺结构化披露 `allowRuleShadowed`;旧键的文本仍经脱敏叶表「认不得的键按内容脱敏」一条
|
|
48
48
|
* 脱敏后原样显示(`observability/run-terminal.ts` `redactRiskDescriptor`),卡上 `message` 里引擎写好的那句话不受影响。
|
|
49
|
+
* M9(park 指针索引改主键;7.147.0 删,窗 2026-11-06 关,发版日前已关)连同它的读侧半场同样已删码,登记行一并删 —— 同一件事「引擎 7.43 及以前写下的 workflow 子代停驻记录」的写半场与读半场同窗同删。逐条写跳过了它直接升的库由谁接住:
|
|
50
|
+
* ④ park 指针索引改主键(M9;`workflow_agent_session` 的主键 `(session_id)` → `(session_id, run_id)` 的复制 + 原子换名,以及路由里「点名它的条目没有持有者位」的专读臂与随包排空判据 `workflow-park-holder`):
|
|
51
|
+
* 没有响亮的起服臂 —— 仍是旧主键(只有 `session_id`)的库(跳过了带本条的版本直接升)上,指针写口(`SqlWorkflowAgentSessionIndex.ensurePointers`,冲突目标 `(session_id, run_id)`)两方言各自落败:
|
|
52
|
+
* TiDB / MySQL 的 `REPLACE INTO` 按单列主键整行替换 —— 同一个子会话只剩后写的一枚指针,续跑链 / 分叉里后写的记录覆盖先写的,判决只看得到一条记录(分叉判不出、链尾可能被更早的记录盖掉);
|
|
53
|
+
* PostgreSQL 的冲突目标没有可仲裁的唯一约束 ⇒ 写失败(响亮)。出路:运维手工照中央 DDL 重建这张表即可(它是派生投影,丢了只丢升级那一刻还停驻着的旧卡的指针)。读侧半场删后,升级那一刻还停驻着、点名它的条目
|
|
54
|
+
* 没有持有者位(引擎 7.43 及以前写下)的存量卡路由判 `none` ⇒ 落 legacy 腿,答 409 `conflict.resume_context_unavailable`(响亮;成因是子会话没有续跑上下文,不再是
|
|
55
|
+
* `decide.workflow_parks_unreadable`),出路不变(续跑发起它的那条 workflow run);随包排空判据没了,没有机器读数可数这些卡。
|
|
49
56
|
*
|
|
50
57
|
* ## 窗内的迁移(逐条的失败方向刻意不同)
|
|
51
|
-
* · **M9 park 指针索引改主键**(7.118.0,core 7.44.0 [ref])—— `workflow_agent_session` 的主键由 `(session_id)` 改成 `(session_id, run_id)`:
|
|
52
|
-
* 停驻持有者有了引擎写的位(`parkedBy` / `generation`)之后,判决要看到点名同一个子会话的每一条记录(续跑链 / 分叉),单列主键下后写覆盖先写。
|
|
53
|
-
* 表是派生投影 ⇒ **复制 + 原子换名**:照中央 DDL 建新形暂存表 → 一条 `INSERT … SELECT` 整表复制 → 正表换成待删名、暂存表换成正表名、删待删旧表
|
|
54
|
-
* (TiDB 一条 `RENAME TABLE`;PG 一个事务)→ 补建索引(旧行就是指针,新读法从记录判,不存在第二种读法)。**暂存表在场 = 上一次没走完**(唯一判据,
|
|
55
|
-
* 与正表在不在无关 —— 起服的中央 DDL 先于本段,正表可能是它刚建的空表):收尾 = 暂存表并进正表、删暂存表、再删待删旧表;旧行始终在库里
|
|
56
|
-
* (`reshapeWorkflowParkIndex` 头注)。「一次」的标记 = 主键宽度(两列且暂存表不在 ⇒ 跳过,只补收尾)。local 车道是账本(一行 = 一条 run 的
|
|
57
|
-
* 指针集),没有主键可改 ⇒ `file-ledger` / 0。
|
|
58
|
-
* **读侧半场**(同一行、同一窗,不另起登记行):升级那一刻还停驻着、由引擎 7.43 及以前写下的 workflow 子代卡 —— 路由里的 `older_engine` 读臂
|
|
59
|
-
* (点名它的条目没有持有者位 ⇒ 响亮拒、指路续跑)与随包排空判据 `workflow-park-holder`(升级前把这些卡数清);窗关随本条一起删(登记表 M9 的 `removal`)。
|
|
60
58
|
* · **M10 local 车道会话属主落盘**(7.119.0)—— local 店的属主从进程内存搬进会话边档(与化身同一格,`LocalSessionStore` 头注);SQL 两孪生的属主
|
|
61
59
|
* 一直是 `session_meta.owner` 列,没有可迁的东西。存量:7.118.x 及更早写下的边档那一格只有化身、**没有属主事实** —— 迁移**不伪造**它
|
|
62
60
|
* (起服时没有 principal,把它判给任何人都是编造)。本条是一只**窗内才生效的行为臂**:窗开着时,带 principal 的第一次提交(attach)认领
|
|
@@ -162,10 +160,10 @@
|
|
|
162
160
|
* 条目 / 匹配器上**契约不认识的字段里藏着守卫迹象**(未知字段被剥掉,同份里真在拦的 `PreToolUse` 钩子照拦)与 JSON 写出的 **`__proto__` 事件键**(被跳过)。现读者对这两形整份拒,
|
|
163
161
|
* 续跑重放腿重放的是升级前存下的体 ⇒ 停驻任务续跑后整份 hooks 不采纳、守卫不再拦。与 M19 同形:不改写存下的字节,是一只**窗内才生效的行为臂** —— 窗开着时(运行期读本表 M20 行的
|
|
164
162
|
* `removableAfter`,见 {@link migrationWindowOpen}),**只在续跑重放腿**、**只在会采纳 hooks 的单用户车道**、**只对读者拒因全部属这两形**的存体:把读者点名的那一块(条目 / 匹配器)里按类型确属未知的键
|
|
165
|
-
* 一次全剥(12.x 读者对一个条目本来就是剥掉全部未知字段、保留其余),剩下的文档**重新过同一只读者**,过了就采纳;整次重读恰一行运维 warn `hooks_read_as_before_upgrade`(点名 sessionId 与被剥的坐标)。
|
|
166
|
-
* **不复制旧读者**:`stored-request-hooks-m20.ts` 不判值形、不判整份是否合法(那是读者的答案)
|
|
167
|
-
*
|
|
168
|
-
* 窗关之后 ⇒
|
|
163
|
+
* 一次全剥(12.x 读者对一个条目本来就是剥掉全部未知字段、保留其余),连同被点名的不透明列(导出字段表里类为 `any` 的列,如 `cloud`:契约原样带、不读值,值里藏迹象与未知字段同病;别的不透明列不动),剩下的文档**重新过同一只读者**,过了就采纳;整次重读恰一行运维 warn `hooks_read_as_before_upgrade`(点名 sessionId 与被剥的坐标)。
|
|
164
|
+
* **不复制旧读者**:`stored-request-hooks-m20.ts` 不判值形、不判整份是否合法(那是读者的答案),只做「读者点名了哪些块、这一块里哪些键按它的类型确属未知(或是被点名的不透明列)、剥掉再问一次,剥到读者受理为止」;
|
|
165
|
+
* 「确属未知」与列类按该条目自己的 `type` 读契约导出的字段表那一行(不用各型字段的并集)。拒因里混进别的(真坏的守卫条目、点名了本型契约读值字段的拒因 …)⇒ 不迁移,整份照拒。
|
|
166
|
+
* 窗关之后 ⇒ 这份存体续跑被拒(「请求成员读不出」判据,`unread-request-members.ts`:409 `resume_blocked_by_policy`,卡仍待决;7.147.0 起,此前是整份不采纳照跑);fresh 腿不受影响(受理面照 400)。没有起服读数(它不写库)。
|
|
169
167
|
* 窗 = 发布日 + 30 天 = 停驻行的终局兜底窗缺省 —— 与 M19 同一条论证与同三类逃出窗的部署(发布后才升级的、调长了 `APPROVAL_TERMINAL_BACKSTOP_MS` 的、滚动升级里旧副本在窗内新写的行),如实登记。
|
|
170
168
|
* · **M21 停驻行补齐引擎今天在铸点写的两格**(7.132.0)—— 两件,同一次 pending 候选扫描、同一个窗:
|
|
171
169
|
* ① **问答卡词**:引擎 7.49.0(本仓 7.126.0 提货)起,问答工具的审批卡在门上带卡词 `gate.approvalCard: "question"`(引擎的规则:调用名是问答工具 ⇒ `question`);
|
|
@@ -204,7 +202,7 @@
|
|
|
204
202
|
* `(run_id, ordinal)` 的 upsert)从不判它 ⇒ 别的 scope 的 append 落新序数插进一条 run、落既有序数覆盖属主的结果。7.133.0 起一条 run 的属主 scope 只记在
|
|
205
203
|
* `workflow_journal_owner` 一行(主键 `run_id`,带认领时新铸的 `incarnation`),店的写面与读面经同一只谓词判;journal 行上不再有 scope 列,改带写下它的那只
|
|
206
204
|
* 属主记录的 `incarnation`,且它是主键的一段:`(run_id, incarnation, ordinal)`(一行只属于写下它的那只属主记录,`workflow-journal-store-sql.ts` 顶注)。
|
|
207
|
-
* 主键换形 ⇒
|
|
205
|
+
* 主键换形 ⇒ **复制 + 原子换名**。存量库(正表上 scope 列在场 = 没经过本条)⇒ ① 上一次换名之前被打断留下的暂存表删掉重来(正表在换名
|
|
208
206
|
* 之前一个字节不动,暂存表只是它的不完整拷贝)② **回填属主**:每条还没有属主记录的 run 一行 —— scope = 该 run **最小序数**那一行的 scope(主键
|
|
209
207
|
* `(run_id, ordinal)` 保证恰一行;引擎按序铸序数,最小序数就是这条 run 最先记下的那一步),`incarnation` = 常量 `M24_OWNER_INCARNATION`(令牌只需在同一
|
|
210
208
|
* run_id 的先后几只记录之间不同:回填的是它已知的第一只,之后的认领铸随机令牌),`appended_at_ms` = 该 run 最晚的 `created_at_ms`(属主记录自己的 GC 时钟,
|
|
@@ -356,13 +354,39 @@
|
|
|
356
354
|
* 恰一行运维 warn `settings_env_credentials_dropped`(按命中类计数,不带键名与值),任务照续;存体续跑预判窗内不拦。窗关之后 ⇒ 预判与 `resolveSpec` 同一只判据拒
|
|
357
355
|
* (续跑口 409 `resume_blocked_by_policy`,`blockedBy` = 本码),删码因此是零行为变化。窗 = 发布日 + 30 天 = 停驻行的终局兜底窗缺省(与 M19 / M20 同一条论证与同三类逃出窗的部署:
|
|
358
356
|
* 发布后才升级的、调长了 `APPROVAL_TERMINAL_BACKSTOP_MS` 的、滚动升级里旧副本在窗内新写的行),另一类如实登记:窗内续跑过、又停驻到窗外的任务,写回的存体仍带那些条目(本条零写)。没有起服读数(它不写库)。
|
|
357
|
+
* · **M39 local 数据根下升级前 0755 的店目录一次收紧成 0700**(7.147.0)—— 数据根建目录自本版起只经 core 的 `ensureDir`(创建即 `0o700`);升级前由裸 `mkdirSync` 铸成 `0755` 的目录
|
|
358
|
+
* (run 店的 `runs/<taskId>` · `space-commits`、checkpoint 店的 `checkpoint-ctx` · `.tmp`、附件店的 `attachments`,以及数据根下的 `scratchpad` · `plugin-cache` · `<记忆引擎根>/sync-cursors`)对已存在的目录 `ensureDir` 什么也不做,会永远留着,
|
|
359
|
+
* 而里面的文件多半是 `0600` —— 组 / 他人读不了文件、却列得出文件名。起服、任何读者之前(`LocalBackend.runOneTimeMigrations` 排在最前)从数据根逐段往下 `lstat` 每一只名册目录(名册 = 各店导出的目录路径函数的读数):
|
|
360
|
+
* 路径上任一段是符号链接 ⇒ 整条不走、进披露行;普通文件不碰,不在不建,模式里没有组 / 他人位不收紧,有 ⇒ 先 `O_NOFOLLOW` 取 fd,再核这只 fd 就是根内那条路径上的目录(物理路径按段在持锁的物理根之下 + inode 相等 + 路上无链接),过核才对它 `fchmod 0o700`;
|
|
361
|
+
* 数据根自身不动,名册外的目录不碰(名册与判据只写在 `local-data-dir-modes-m39.ts`)。
|
|
362
|
+
* 恰一行起服提示 `local_data_dir_modes_tightened`(计数 + 例子;经可缺席的告警座,生产形是 warn 级)。**收紧失败 = 响亮,不拒启**:历史暴露不是本版引入的,进程能写只是改不了模式(不是属主),拒启把加固变停服;新写下的文件仍属主独占(附件店自本版起也是 `0600`)——
|
|
363
|
+
* 逐目录点名进 warn `local_data_dir_mode_refused`(经不可缺席的披露口,窗内每次起服再报)。幂等:第二次起服零命中零写。没有读数键(它不写库)。local 独有;SQL 车道没有这些目录。
|
|
364
|
+
* · **M40 没有执行环境的车道的存词 `in-process` → `none`**(7.147.0)—— 本版起每个部署都声明车道(`REMOTE_EXEC`),没有执行环境的那一条叫 `none`;本版之前没声明车道的部署在
|
|
365
|
+
* 出处 / 放置格里存下的词是它的旧名,本版的车道闭集里没有它(读口一律响亮拒,补句点名本条,`execution-lane-rename-m40.ts`)。改值不丢信息,四处:SQL 两方言的
|
|
366
|
+
* `approval_ask.execution_lane` 与会话的 `execution_lane`(`session_meta` 上;M41 搬过之后在 `session_ext` 上 —— 三张表逐张读形,列在哪张改哪张)(本段**第一步**,先于任何写:列不在 ⇒ 那一张零动作 —— 跳版升上来的库由 M32 加列、按声明车道回填,不会再铸旧词);
|
|
367
|
+
* local 的会话元数据边档(`session-incarnations.json` 的 `[会话].execution.lane`,**排在严格边档对账之前** —— `LocalBackend.ensureSchema()` 第一步,否则旧词先撞严格拒)
|
|
368
|
+
* 与问账日志(排在 M32 的 local 问回填之前,一次压实重写整本)。**版本围栏(停-迁-起)**:旧副本不认 `none`、新读者不认旧词,列形不变 ⇒ 混跑没有列检查拦得住。
|
|
369
|
+
* SQL:还有旧词行要改 ∧ 本库上仍有 run 在心跳(`task_run` 的 `running` 行在 `REAP_RUN_STALE_SEC` 之内更新过 —— 收割器判活的同一条谓词)⇒ 拒启
|
|
370
|
+
* (`config.execution_lane_rename_refused`,一行没改;拒句给最新心跳时刻与「全停之后何时再起」);没有旧词行 ⇒ 零动作、可滚动。local:数据根的起服锁(core `FileStorageBackend` 的 `LOCK`)
|
|
371
|
+
* 本来就只许一个进程 ⇒ 不另设守卫。读数 `executionLaneWordsRenamed`(四处合计)。幂等:第二次起服零命中零写。
|
|
372
|
+
* · **M41 会话的部署格搬出引擎座表**(7.147.0)—— 引擎座表 `session_meta` 只带引擎的列;本服务记在会话上的十二格(标题 / 置顶 / 换源通告基线 / 位置与项目 / 执行放置七列 / fork 键)
|
|
373
|
+
* 自本版起住旁表 `session_ext`(一会话一行,外键 `ON DELETE CASCADE` 随会话行走;建表、列定义、补行与级联能力探针的唯一属主 `session-ext-table.ts`,起服在本段之前已建表并证过级联)。
|
|
374
|
+
* SQL 两方言,三步,每一步先读形再判:① `session_meta` 上仍在的部署格列(十二列里在场的那几列)按会话 id 键集分页、每一行都搬(不按格挑:上一次留下的旁表行被改回根行的值),upsert 进旁表
|
|
375
|
+
* (`ON DUPLICATE KEY UPDATE` / `ON CONFLICT DO UPDATE`:旁表那一行的这几格 = 根行上的值;中断后重跑同一句同一结果);② 逐行核对(每一列 null 安全相等,旁表行不在 = 缺省)——
|
|
376
|
+
* 有一行不等 ⇒ 拒启 `config.session_ext_move_refused`(`copy_mismatch`,点名那只会话;一列没删,下一次起服重搬);③ **一句** `ALTER TABLE session_meta DROP COLUMN …` 删掉在场的全部部署格列
|
|
377
|
+
* (按后置条件收敛:那几列都不在)。旁表形的库(本版新建、或已搬过)⇒ 零动作。**版本围栏(停-迁-起)**:旧副本对这十二格的每一笔写在删列之后都撞未知列,
|
|
378
|
+
* 搬与删之间落下的写会丢 ⇒ 还有列要搬 ∧ 本库上仍有 run 在心跳(与 M40 同一条判活谓词)⇒ 拒启(`live_runs`,一字节没写;本段第二步,紧随 M40,先于任何别的写)。
|
|
379
|
+
* **M32 × M41 的序与读表**:迁移段里 M32 先、M41 后。M32 读两种形 —— 八列在 `session_meta` 上(7.139–7.146 形:M32 全程写根行,随后 M41 连同别的格一起搬进旁表)
|
|
380
|
+
* 或部署格已在旁表(本条之后 / 新库)。旁表形里 M32 的加列 / 回填 / 收尾标记(② ④ ④b ⑥)都不跑(切换早已收尾;回填前提的拒随之不判),剩 ⓪(旧版副本建回的空退役表删掉)、围栏,
|
|
381
|
+
* 与围栏拒句「采旧」造出的中途表 ③ ⑤ —— ③ 写执行格当下的家(旁表:先补行、再覆盖,`migrateDeviceBindingsOntoSideTableStatements`)。删码不改语义:本条删码时 M32 若还在,改成恒旁表形(见登记行)。
|
|
382
|
+
* 读数 `sessionExtRowsMoved` / `sessionMetaColumnsDropped`。幂等:第二次起服零命中零写。local 车道没有这两张表(会话格一直在会话元数据边档里)⇒ 恒零。
|
|
359
383
|
*
|
|
360
384
|
* ## 收据账(一次起服一只,每一条迁移同一只)
|
|
361
385
|
* 每一步把它**已提交**的改写 / 删除与点名读数当场记进同一只收据账({@link MigrationReceipts}):计数随每次提交累加、行随每次提交追加、形读数在那一步落定时写。走完 ⇒
|
|
362
386
|
* 账就是读数,起服日志打一行 `one_time_migrations_applied` + 逐行的那几种;任何一步失败 ⇒ 账里有动过的格就随拒因交出({@link OneTimeMigrationInterruptedError}),起服日志在抛之前
|
|
363
387
|
* 用**同一只打印口**打一行 `one_time_migrations_interrupted`(读数键与读数行同一只投影)+ 逐行的那几种({@link runAndLogOneTimeMigrations})。理由:提交了的改写下一次起服再扫是
|
|
364
388
|
* 零命中 —— 被改写 / 被删的行、它们的计数只有「改写发生的那一拍」说得出。没有任何一格动过就失败 ⇒ 原错误原样抛。
|
|
365
|
-
* 如实的残余:提交与那一行日志之间进程被杀、或一条提交的确认在连接上丢了 —— 收据没有耐久载体(不为短命的迁移另建迁移账表:有 schema 形可当「跑过了」标记的几条用它自己的形 ——
|
|
389
|
+
* 如实的残余:提交与那一行日志之间进程被杀、或一条提交的确认在连接上丢了 —— 收据没有耐久载体(不为短命的迁移另建迁移账表:有 schema 形可当「跑过了」标记的几条用它自己的形 —— M17 的列名、M24 的 scope 列;改值类的几条没有这种标记,为它们造一张账表 / 一个旋钮,就是给一条短命的迁移留一份长命的状态)。
|
|
366
390
|
*
|
|
367
391
|
* ## 幂等
|
|
368
392
|
* 改写的几条都可重复跑(M18:字样扫描 + CAS 回写 —— 写过的行不再命中;M17 的改写只在改名那一拍跑,第二跑列名已是新名 ⇒ 零读零写;续判时已带戳的行零动作;
|
|
@@ -381,11 +405,6 @@ import { type ImportedLayerRootAllowRetired, type ImportedLayerRootBucketSkipped
|
|
|
381
405
|
import { type LocalPlacementBackfillSeat, type UnusableArchiveWord } from "../execution-placement.js";
|
|
382
406
|
/** 迁移读数(启动日志一行写全;测试按它断言,不靠日志文本)。 */
|
|
383
407
|
export interface OneTimeMigrationReport {
|
|
384
|
-
/** M9:workflow park 指针索引的主键 —— `reshaped` = 本次把只有 `session_id` 的主键改成 `(session_id, run_id)`;`current` = 早已是新形
|
|
385
|
-
* (新库 / 第二跑);`file-ledger` = local 文件车道(账本一行本来就是一条 run 的指针集,没有主键可改)。 */
|
|
386
|
-
readonly workflowParkIndexKey: "reshaped" | "current" | "file-ledger";
|
|
387
|
-
/** M9:改形时原样搬进新表的指针行数(`current` / `file-ledger` 时恒 0)。非零 = 这次迁移真重建了一张表,运维该看见一次。 */
|
|
388
|
-
readonly workflowParkIndexRowsCarried: number;
|
|
389
408
|
/** M11:本次从持久规则桶里删掉的、scope 不被引擎 durable 谓词收的行(一行一条,启动日志逐行 warn;local 车道恒空,见头注 M11 段)。 */
|
|
390
409
|
readonly undurableScopeRuleRows: readonly UndurableScopeRuleRow[];
|
|
391
410
|
/** M11:连续争不过在线写者、留到下一次起服的桶数(那期间坏行照旧由引擎读侧丢并告知;非零 ⇒ warn)。 */
|
|
@@ -455,6 +474,12 @@ export interface OneTimeMigrationReport {
|
|
|
455
474
|
readonly executionPlacementsBackfilled: number;
|
|
456
475
|
/** M32 ④b:本次回填了出处车道的问行数(车道未回填的问行 ⇒ 根会话放置的车道,无放置 / 无会话行 ⇒ 表唯一项)。SQL 与 local(问账日志一次压实)都有。非零 = 真写了存量行。 */
|
|
457
476
|
readonly askExecutionLanesBackfilled: number;
|
|
477
|
+
/** M40:本次把存下的车道词 `in-process` 改成 `none` 的行 / 格数(SQL:问行 + 会话行;local:会话元数据格 + 问账日志的问)。SQL 与 local 都有。非零 = 真写了存量行。 */
|
|
478
|
+
readonly executionLaneWordsRenamed: number;
|
|
479
|
+
/** M41:本次从 `session_meta` 搬进旁表 `session_ext` 的会话行数(每一行;旁表形的库恒 0)。SQL 独有;local 恒 0。非零 = 真写了存量行。 */
|
|
480
|
+
readonly sessionExtRowsMoved: number;
|
|
481
|
+
/** M41:本次从 `session_meta` 删掉的部署格列数(一句 ALTER 一起删;0 或在场的那几列)。SQL 独有;local 恒 0。非零 = 真改了表形。 */
|
|
482
|
+
readonly sessionMetaColumnsDropped: number;
|
|
458
483
|
/** M32 local 腿:该回填放置、却读不出的会话 —— 有 run、存档读不出(会话头读不出 / 结构走不通 / 读存档文件时抛了别的故障:权限 / 磁盘 I/O / 超大)。一个字节没写,起服不挡:
|
|
459
484
|
* 该会话的请求照旧答存档的故障;存档修好(从留存副本恢复,或权限 / 磁盘修好)后的下一次起服照常补放置。点名行数组(会话 id + 故障词,`storage` 再带 errno),一行一条 warn,每次起服都报直到处置。SQL 独有的反面:SQL 没有这一形(行就是会话);SQL 恒空。 */
|
|
460
485
|
readonly executionPlacementSessionsUnreadable: readonly ExecutionPlacementSessionUnreadable[];
|
|
@@ -479,6 +504,9 @@ export interface OneTimeMigrationReport {
|
|
|
479
504
|
readonly importedLayerRootAllowsRetired: readonly ImportedLayerRootAllowRetired[];
|
|
480
505
|
/** M36:这次没能读 / 没能写的桶(闭集四词:读不出 / 写它的那一步里桶被并发删掉 / 没有写面或写面拒 / 并发争不过),一桶一条 warn;后两种那几行照旧放行,每次起服都点名直到处置。 */
|
|
481
506
|
readonly importedLayerRootBucketsSkipped: readonly ImportedLayerRootBucketSkipped[];
|
|
507
|
+
/** M36:店在场却叫不出属主、本步因此没读的桶数(File 店:引擎列桶口按目录与导入记录都叫不出名字的那些;SQL 恒 0 —— 规则表的每一行都带属主)。
|
|
508
|
+
* 非零 ⇒ 每次起服 warn 一行:本步的普查缺了这么多只,不是它们是空的。 */
|
|
509
|
+
readonly importedLayerRootBucketsUnnamed: number;
|
|
482
510
|
}
|
|
483
511
|
/** 退役的两只命令桶(引擎 7.51.0 起不是桶;只给 M17 点名认)。 */
|
|
484
512
|
export type RetiredSessionRuleBucket = "commandAllow" | "commandDeny";
|
|
@@ -547,8 +575,8 @@ export interface LocalArchiveUnreadable {
|
|
|
547
575
|
/** 读的时候抛的那只故障带串型 `code` 时在场(`EACCES` / `EIO` / `corrupt_session` …);盘上路径与故障句不出店。 */
|
|
548
576
|
readonly errno?: string;
|
|
549
577
|
}
|
|
550
|
-
/**
|
|
551
|
-
type ShapeReadingKey = "
|
|
578
|
+
/** 两个形读数(M17 列名 / M24 scope 列)—— 那一步**落定**之前收据账里缺席(读数行要它们齐;被打断的那一行只带已落定的)。 */
|
|
579
|
+
type ShapeReadingKey = "sessionRuleColumn" | "workflowJournalScopeColumn";
|
|
552
580
|
/**
|
|
553
581
|
* 读数的「已记下的那些」形:形读数可缺席(那一步还没落定),其余每一键与 {@link OneTimeMigrationReport} 同名同形。读数行({@link logOneTimeMigrations})与
|
|
554
582
|
* 被打断的那一行({@link logOneTimeMigrationsInterrupted})读同一只投影({@link readingFields}),拒因({@link OneTimeMigrationInterruptedError})带的也是这一形。
|
|
@@ -582,7 +610,7 @@ export declare class OneTimeMigrationInterruptedError extends Error {
|
|
|
582
610
|
* 规则(窗长 30 天、窗关后的第一个 minor 删码、门怎么判)在本文件头注「窗」一节,只写那一次。
|
|
583
611
|
*/
|
|
584
612
|
export interface OneTimeMigrationWindow {
|
|
585
|
-
/** 本文件里的条目名(头注「窗内的迁移」的
|
|
613
|
+
/** 本文件里的条目名(头注「窗内的迁移」的 M10…)。 */
|
|
586
614
|
readonly id: string;
|
|
587
615
|
/** 引入这条迁移的版本 = 第一只含其代码的发布 tag(取证:`git log -S '<该条的常量名>' -- src/plugins/one-time-migrations.ts`
|
|
588
616
|
* 找引入提交 → `git tag --contains <提交> --sort=creatordate` 取最早)。 */
|
|
@@ -617,8 +645,8 @@ export declare function migrationWindowOpen(window: Pick<OneTimeMigrationWindow,
|
|
|
617
645
|
* 还没有日期可写)⇒ 响亮抛,不铸一句带空日期的句子。
|
|
618
646
|
*/
|
|
619
647
|
export declare function migrationWindowEnd(id: string): string;
|
|
620
|
-
/** local 车道上 SQL 独有的几条(
|
|
621
|
-
export declare const NO_SQL_MIGRATIONS: Omit<OneTimeMigrationReport, "executionPlacementsBackfilled" | "askExecutionLanesBackfilled" | "executionPlacementSessionsUnreadable" | "localArchiveRowFactsBackfilled" | "localArchivesAnonymized" | "localArchivesKeptStamped" | "localArchivesUnreadable" | "localArchiveSnapshotsRecovered" | "askJournalRecordsUpgraded" | "importedLayerRootAllowsRetired" | "importedLayerRootBucketsSkipped">;
|
|
648
|
+
/** local 车道上 SQL 独有的几条(M11 / M17 / M18 / M21 / M23 / M24 / M26 / M27 / M29)的读数(M32 的回填两车道都有、M33 只在 local,local 腿的读数由 `LocalBackend.runOneTimeMigrations` 现算):那几张表 / 列在文件底座上从来不存在 ⇒ 如实答 absent / 0。 */
|
|
649
|
+
export declare const NO_SQL_MIGRATIONS: Omit<OneTimeMigrationReport, "executionPlacementsBackfilled" | "askExecutionLanesBackfilled" | "executionLaneWordsRenamed" | "executionPlacementSessionsUnreadable" | "localArchiveRowFactsBackfilled" | "localArchivesAnonymized" | "localArchivesKeptStamped" | "localArchivesUnreadable" | "localArchiveSnapshotsRecovered" | "askJournalRecordsUpgraded" | "importedLayerRootAllowsRetired" | "importedLayerRootBucketsSkipped" | "importedLayerRootBucketsUnnamed">;
|
|
622
650
|
/** 启动期的日志口(logger 的子集)。两级各有其用,见 {@link logOneTimeMigrations}。 */
|
|
623
651
|
export interface MigrationLogSink {
|
|
624
652
|
warn(msg: string, meta?: Record<string, unknown>): void;
|
|
@@ -645,7 +673,7 @@ export interface MigrationDb {
|
|
|
645
673
|
* 每条改表 DDL 的成功判据仍是它的**后置条件**({@link execUntil}),「另一个副本抢先把同一张表换了形」不会把滚动升级变成启动失败循环。
|
|
646
674
|
*
|
|
647
675
|
* ## 次序(codex r1 [medium] 同轮)
|
|
648
|
-
* 非破坏改写(
|
|
676
|
+
* 非破坏改写(M18:改值不丢信息)在前,破坏性步骤(M11 的删行、M24 丢下跨 scope 行的换名)排在最后;
|
|
649
677
|
* M11 自己半途失败时,拒因自带已删的行(`purgeUndurableScopeRows`)—— 否则重试看不见已删的行,证据永久消失;M24 的丢行计数在换名提交之后进收据账。
|
|
650
678
|
*
|
|
651
679
|
* 本函数**不问**退役 schema:带着它的库在更早处就被 `ensureSchema()` 自身拒掉了(起服对账一族 `schema-consistency.ts` 的探针口,先于建表);走公开序列
|
|
@@ -656,7 +684,77 @@ export interface MigrationDb {
|
|
|
656
684
|
* 判官不在两处各写一份。
|
|
657
685
|
*/
|
|
658
686
|
export declare function createSqlImportedLayerRootSource(exec: Parameters<typeof listRuleBucketOwners>[0]): ImportedLayerRootRetirementSource;
|
|
659
|
-
export declare function runSqlOneTimeMigrations(dialect: SqlDialect, pool: MysqlPool | PgPool, input:
|
|
687
|
+
export declare function runSqlOneTimeMigrations(dialect: SqlDialect, pool: MysqlPool | PgPool, input: SqlOneTimeMigrationInput): Promise<OneTimeMigrationReport>;
|
|
688
|
+
/** M40 的拒启码(停-迁-起守卫)。 */
|
|
689
|
+
export declare const EXECUTION_LANE_RENAME_REFUSED_CODE = "config.execution_lane_rename_refused";
|
|
690
|
+
/**
|
|
691
|
+
* M40 的起服拒:还有旧词行要改,而本库上仍有 run 在心跳 —— 一只更早版本的副本还在服务,改完之后它还会写下旧词(新读者拒读)。具名类型 + 机读码 + 两只读数;
|
|
692
|
+
* 继承 {@link StoreBootRefusalError}:SQL 开库的等待窗不重试它(确定的拒启表态)。一行没改(它是本段第一步,先于任何写)。
|
|
693
|
+
*/
|
|
694
|
+
export declare class ExecutionLaneRenameRefusedError extends StoreBootRefusalError {
|
|
695
|
+
/** 带旧词的行数(两张表合计)。 */
|
|
696
|
+
readonly pendingRows: number;
|
|
697
|
+
/** 判活窗内心跳过的 `running` run 数。 */
|
|
698
|
+
readonly liveRuns: number;
|
|
699
|
+
/** 全停之后可以再起的最早时刻(ISO;= 最新心跳 + 判活窗 —— 那时收割谓词也判它们为死)。 */
|
|
700
|
+
readonly restartAfter: string;
|
|
701
|
+
readonly code = "config.execution_lane_rename_refused";
|
|
702
|
+
constructor(
|
|
703
|
+
/** 带旧词的行数(两张表合计)。 */
|
|
704
|
+
pendingRows: number,
|
|
705
|
+
/** 判活窗内心跳过的 `running` run 数。 */
|
|
706
|
+
liveRuns: number,
|
|
707
|
+
/** 全停之后可以再起的最早时刻(ISO;= 最新心跳 + 判活窗 —— 那时收割谓词也判它们为死)。 */
|
|
708
|
+
restartAfter: string, detail: string);
|
|
709
|
+
}
|
|
710
|
+
/**
|
|
711
|
+
* M40 local 两腿的起服拒:旧词在场、读得出,而改写落不了盘(会话元数据边档的原子替换 / 问账日志的压实失败 —— `EPERM` / `EACCES` / `EROFS` / `ENOSPC` …)。
|
|
712
|
+
* 既有数据上的一次性迁移失败 = 拒启,不是「这台机器存不了盘」:继承 {@link StoreBootRefusalError} ⇒ 隐式 local 的降级臂不吞(吞了 = 带着空内存店起服,
|
|
713
|
+
* 既有会话与审批不见,新状态只在内存里)。盘上字节原样(原子替换失败 ⇒ 旧文件不动)。码与守卫拒同一个(M40 没有走完);具名类型分开,因为出路不同。
|
|
714
|
+
*/
|
|
715
|
+
export declare class ExecutionLaneRenameWriteRefusedError extends StoreBootRefusalError {
|
|
716
|
+
/** 落不了盘的那只文件(绝对路径)。 */
|
|
717
|
+
readonly file: string;
|
|
718
|
+
readonly code = "config.execution_lane_rename_refused";
|
|
719
|
+
/** 原错码(`EPERM` / `EACCES` / …);故障不带 errno ⇒ 缺席。 */
|
|
720
|
+
readonly errno: string | undefined;
|
|
721
|
+
constructor(
|
|
722
|
+
/** 落不了盘的那只文件(绝对路径)。 */
|
|
723
|
+
file: string, cause: unknown);
|
|
724
|
+
}
|
|
725
|
+
/** M40 的输入:判活窗(毫秒)= 本部署的 `REAP_RUN_STALE_SEC` —— 收割器判「这条 run 的持有者还活着」用的同一个窗。 */
|
|
726
|
+
export interface ExecutionLaneRenameInput {
|
|
727
|
+
readonly liveRunWindowMs: number;
|
|
728
|
+
}
|
|
729
|
+
/** SQL 一次性迁移段的输入(各条目自己的那一半;删码车删掉它那一半)。 */
|
|
730
|
+
export type SqlOneTimeMigrationInput = ExecutionPlacementSwitchInput & ExecutionLaneRenameInput;
|
|
731
|
+
/**
|
|
732
|
+
* M40 ⓪ —— 带 `execution_lane` 列的表上的旧词改成新名(问行表 + 会话的那一列所在的表:M41 搬之前在 `session_meta`、之后在 `session_ext`;一句 UPDATE 一张表;幂等:第二跑零命中)。列不在的表零动作(跳版升上来的库:M32 稍后加列、按声明车道回填,不会再铸旧词)。
|
|
733
|
+
* 还有旧词行 ⇒ 先过停-迁-起守卫({@link refuseWhileRunsHeartbeat});没有 ⇒ 不读 run 表、零写(没跑过无车道部署的库可滚动升级)。
|
|
734
|
+
*/
|
|
735
|
+
export declare function renameRetiredExecutionLaneWordsM40(db: MigrationDb, dialect: SqlDialect, receipts: {
|
|
736
|
+
executionLaneWordsRenamed: number;
|
|
737
|
+
}, input: ExecutionLaneRenameInput): Promise<void>;
|
|
738
|
+
/** M41 的拒启码(确定的拒启表态;与 `config.schema_mismatch` 同一族)。 */
|
|
739
|
+
export declare const SESSION_EXT_MOVE_REFUSED_CODE = "config.session_ext_move_refused";
|
|
740
|
+
/** 拒因闭集:`live_runs` = 还有列要搬而本库上仍有 run 在心跳(停-迁-起);`copy_mismatch` = 搬完核对有一行不等(一列没删)。 */
|
|
741
|
+
export type SessionExtMoveRefusalReason = "live_runs" | "copy_mismatch";
|
|
742
|
+
/** M41 的起服拒。具名类型 + 机读码 + 拒因;继承 {@link StoreBootRefusalError}:SQL 开库的等待窗不重试它。 */
|
|
743
|
+
export declare class SessionExtMoveRefusedError extends StoreBootRefusalError {
|
|
744
|
+
readonly reason: SessionExtMoveRefusalReason;
|
|
745
|
+
readonly code = "config.session_ext_move_refused";
|
|
746
|
+
constructor(reason: SessionExtMoveRefusalReason, detail: string);
|
|
747
|
+
}
|
|
748
|
+
/**
|
|
749
|
+
* M41 ⓪′ —— 停-迁-起守卫(紧随 M40 的守卫,先于任何别的写):还有部署格列要搬 ∧ 本库上仍有 run 在心跳 ⇒ 拒 `live_runs`,一字节没写。
|
|
750
|
+
* 旁表形 ⇒ 零动作(不读 run 表)。
|
|
751
|
+
*/
|
|
752
|
+
export declare function refuseSessionExtMoveWhileRunsHeartbeat(db: MigrationDb, dialect: SqlDialect, input: ExecutionLaneRenameInput): Promise<void>;
|
|
753
|
+
/**
|
|
754
|
+
* M41(规则与理由见头注 M41 段):① 搬(键集分页 upsert)→ ② 逐行核对 → ③ 一句删列。旁表形 ⇒ 零动作。中断 ⇒ 下一次起服从头重跑:① 的 upsert 是「旁表这几格 = 根行上的值」,
|
|
755
|
+
* 重跑同一结果;② 只读;③ 按后置条件收敛(那几列都不在)。排在迁移段最后(M32 之后:M32 读 / 写 `session_meta` 上的八列;M23 改的是引擎列)。导出给真库钉驱动「中断后续跑」。
|
|
756
|
+
*/
|
|
757
|
+
export declare function moveSessionCellsToSideTable(db: MigrationDb, dialect: SqlDialect, receipts: MigrationReceipts): Promise<void>;
|
|
660
758
|
/**
|
|
661
759
|
* M34 —— 问账行成因两列(判据与形见头注 M34 段)。三步,每一步先读形再判,DDL 按后置条件收敛({@link execUntil}),中断 ⇒ 下一次起服从首个未满足的后置条件续:
|
|
662
760
|
* ① `denied_reason` 在 ⇒ 改名成 `ending_cause`(后置条件:旧名不在 ∧ 新名在)—— 改名让滚动窗里的旧副本对这张表的每一条读写响亮失败;
|
|
@@ -670,7 +768,7 @@ export declare function splitApprovalAskCauseColumns(db: MigrationDb, dialect: S
|
|
|
670
768
|
/** M32 的起服拒码(确定的拒启表态:再等也等不来另一个答案;不是线上 wire 码,与 `config.schema_mismatch` 同一族)。 */
|
|
671
769
|
export declare const EXECUTION_PLACEMENT_SWITCH_REFUSED_CODE = "config.execution_placement_switch_refused";
|
|
672
770
|
/** 拒因闭集:`fence` = 切换开始之后退役绑定表里又出现了行(旧版副本 / 手工写下的);`backfill_ambiguous` = 车道表不止一项而还有要回填的存量。 */
|
|
673
|
-
export type ExecutionPlacementSwitchRefusalReason = "fence" | "backfill_ambiguous";
|
|
771
|
+
export type ExecutionPlacementSwitchRefusalReason = "fence" | "backfill_ambiguous" | "unknown_lane";
|
|
674
772
|
/**
|
|
675
773
|
* M32 的起服拒(DDL 前探针与迁移段同一只错误)。具名类型 + 机读码 + 拒因:日志消费端与测试按 `code` / `reason` 分派,不锚文案。
|
|
676
774
|
* 继承 {@link StoreBootRefusalError}:SQL 开库的等待窗不重试它(确定的拒启表态)。
|
|
@@ -710,12 +808,24 @@ export interface LocalPlacementBackfill {
|
|
|
710
808
|
* 车道表不是一元而还有 absent 的 ⇒ 与 SQL 同一只拒(`backfill_ambiguous`),一个字节没写。起服时调(`LocalBackend.runOneTimeMigrations`,任何读者之前;数据根独占)。
|
|
711
809
|
*/
|
|
712
810
|
export declare function backfillLocalExecutionPlacements(sessionIds: Iterable<string>, seat: LocalPlacementBackfillSeat, input: ExecutionPlacementSwitchInput): Promise<LocalPlacementBackfill>;
|
|
811
|
+
/** M32 ④b local 腿的两种拒(`FileApprovalAskStore.backfillExecutionLanes` 交给调用方铸句):缺车道的问在多元车道表下没有唯一答案 / 记下的词不是车道词。 */
|
|
812
|
+
export type LocalAskLaneBackfillRefusal = {
|
|
813
|
+
readonly kind: "backfill_ambiguous";
|
|
814
|
+
readonly pending: number;
|
|
815
|
+
} | {
|
|
816
|
+
readonly kind: "unknown_lane";
|
|
817
|
+
readonly asks: readonly {
|
|
818
|
+
readonly askId: string;
|
|
819
|
+
readonly word: string;
|
|
820
|
+
}[];
|
|
821
|
+
};
|
|
713
822
|
/**
|
|
714
|
-
* M32 ④b 的 **local 腿**:问账日志里升级前写下的问(
|
|
715
|
-
*
|
|
823
|
+
* M32 ④b 的 **local 腿**:问账日志里升级前写下的问(出处车道**缺席**)记成车道表的唯一项,一次压实重写整本账(`FileApprovalAskStore.backfillExecutionLanes`)。
|
|
824
|
+
* 只填缺席:**记下了而不是车道词**的问 ⇒ 响亮拒(`unknown_lane`,点名问 id 与词)—— 拿部署此刻的车道盖掉它,就是替这条问改了出处(SQL 腿的读口对同一形同样拒)。
|
|
825
|
+
* 车道表不是一元而还有缺车道的问 ⇒ 与 SQL 同一只拒(`backfill_ambiguous`)。两种拒都一个字节没写。返回回填数。起服时调(与 ④ 的 local 腿同位,任何读者之前;M40 的改名先于它)。
|
|
716
826
|
*/
|
|
717
827
|
export declare function backfillLocalAskExecutionLanes(store: {
|
|
718
|
-
backfillExecutionLanes(lanes: readonly ExecutionLane[], refuse: (
|
|
828
|
+
backfillExecutionLanes(lanes: readonly ExecutionLane[], refuse: (refusal: LocalAskLaneBackfillRefusal) => never): number;
|
|
719
829
|
}, input: ExecutionPlacementSwitchInput): number;
|
|
720
830
|
/**
|
|
721
831
|
* M24(7.133.0)—— workflow journal 的属主 scope 从逐行列搬进 `workflow_journal_owner` 一行,journal 行改按 `(run_id, incarnation, ordinal)` 记。规则与理由在
|