create-principles-disciple 1.145.1 → 1.145.4

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.
Files changed (173) hide show
  1. package/_release/product-identity.json +2 -2
  2. package/codex-adapter/dist/worker/workspace-worker.js +2 -1
  3. package/codex-adapter/package.json +1 -1
  4. package/console/dist/server/config/pd-config-store.js +3 -0
  5. package/console/dist/server/models/ApprovalsGroupedConsoleModel.js +4 -4
  6. package/console/dist/ui/i18n/en.json +17 -16
  7. package/console/dist/ui/i18n/zh-CN.json +17 -16
  8. package/console/dist/ui/pages/focus/FocusPage.js +9 -5
  9. package/console/dist/ui/pages/focus/OwnerDecisionCard.js +1 -1
  10. package/console/dist/ui/pages/principles/PrincipleDetailPage.js +10 -4
  11. package/console/dist/ui/pages/principles/PrinciplesPage.js +1 -1
  12. package/console/dist/ui/utils/reading-layout.d.ts +19 -0
  13. package/console/dist/ui/utils/reading-layout.js +46 -0
  14. package/console/dist/web/assets/app.js +30 -28
  15. package/core/dist/runtime-v2/index.d.ts +13 -3
  16. package/core/dist/runtime-v2/index.d.ts.map +1 -1
  17. package/core/dist/runtime-v2/index.js +6 -1
  18. package/core/dist/runtime-v2/index.js.map +1 -1
  19. package/core/dist/runtime-v2/internalization/artificer-prompt-builder.d.ts +25 -6
  20. package/core/dist/runtime-v2/internalization/artificer-prompt-builder.d.ts.map +1 -1
  21. package/core/dist/runtime-v2/internalization/artificer-prompt-builder.js +21 -7
  22. package/core/dist/runtime-v2/internalization/artificer-prompt-builder.js.map +1 -1
  23. package/core/dist/runtime-v2/internalization/artificer-run-correlation.d.ts +82 -0
  24. package/core/dist/runtime-v2/internalization/artificer-run-correlation.d.ts.map +1 -0
  25. package/core/dist/runtime-v2/internalization/artificer-run-correlation.js +79 -0
  26. package/core/dist/runtime-v2/internalization/artificer-run-correlation.js.map +1 -0
  27. package/core/dist/runtime-v2/internalization/artificer-runner.d.ts +16 -2
  28. package/core/dist/runtime-v2/internalization/artificer-runner.d.ts.map +1 -1
  29. package/core/dist/runtime-v2/internalization/artificer-runner.js +89 -9
  30. package/core/dist/runtime-v2/internalization/artificer-runner.js.map +1 -1
  31. package/core/dist/runtime-v2/internalization/consumer-evidence-preflight.d.ts +141 -0
  32. package/core/dist/runtime-v2/internalization/consumer-evidence-preflight.d.ts.map +1 -0
  33. package/core/dist/runtime-v2/internalization/consumer-evidence-preflight.js +284 -0
  34. package/core/dist/runtime-v2/internalization/consumer-evidence-preflight.js.map +1 -0
  35. package/core/dist/runtime-v2/internalization/evidence-readiness.d.ts +170 -0
  36. package/core/dist/runtime-v2/internalization/evidence-readiness.d.ts.map +1 -0
  37. package/core/dist/runtime-v2/internalization/evidence-readiness.js +335 -0
  38. package/core/dist/runtime-v2/internalization/evidence-readiness.js.map +1 -0
  39. package/core/dist/runtime-v2/internalization/owner-evidence-recovery.d.ts +190 -0
  40. package/core/dist/runtime-v2/internalization/owner-evidence-recovery.d.ts.map +1 -0
  41. package/core/dist/runtime-v2/internalization/owner-evidence-recovery.js +488 -0
  42. package/core/dist/runtime-v2/internalization/owner-evidence-recovery.js.map +1 -0
  43. package/core/dist/runtime-v2/internalization/owner-retry.d.ts +23 -1
  44. package/core/dist/runtime-v2/internalization/owner-retry.d.ts.map +1 -1
  45. package/core/dist/runtime-v2/internalization/owner-retry.js +19 -3
  46. package/core/dist/runtime-v2/internalization/owner-retry.js.map +1 -1
  47. package/core/dist/runtime-v2/internalization/peer-runner-contracts.d.ts +16 -1
  48. package/core/dist/runtime-v2/internalization/peer-runner-contracts.d.ts.map +1 -1
  49. package/core/dist/runtime-v2/internalization/peer-runner-contracts.js.map +1 -1
  50. package/core/dist/runtime-v2/internalization/pitask-metadata.d.ts +44 -0
  51. package/core/dist/runtime-v2/internalization/pitask-metadata.d.ts.map +1 -1
  52. package/core/dist/runtime-v2/internalization/pitask-metadata.js +75 -0
  53. package/core/dist/runtime-v2/internalization/pitask-metadata.js.map +1 -1
  54. package/core/dist/runtime-v2/recovery-actions-log.d.ts +55 -0
  55. package/core/dist/runtime-v2/recovery-actions-log.d.ts.map +1 -1
  56. package/core/dist/runtime-v2/recovery-actions-log.js +84 -3
  57. package/core/dist/runtime-v2/recovery-actions-log.js.map +1 -1
  58. package/core/dist/runtime-v2/recovery-sweep-service.d.ts +116 -1
  59. package/core/dist/runtime-v2/recovery-sweep-service.d.ts.map +1 -1
  60. package/core/dist/runtime-v2/recovery-sweep-service.js +252 -13
  61. package/core/dist/runtime-v2/recovery-sweep-service.js.map +1 -1
  62. package/core/dist/runtime-v2/runtime-state-handle.d.ts +8 -0
  63. package/core/dist/runtime-v2/runtime-state-handle.d.ts.map +1 -1
  64. package/core/dist/runtime-v2/runtime-state-handle.js +1 -0
  65. package/core/dist/runtime-v2/runtime-state-handle.js.map +1 -1
  66. package/core/dist/runtime-v2/store/runtime-state-manager.d.ts +16 -1
  67. package/core/dist/runtime-v2/store/runtime-state-manager.d.ts.map +1 -1
  68. package/core/dist/runtime-v2/store/runtime-state-manager.js +7 -2
  69. package/core/dist/runtime-v2/store/runtime-state-manager.js.map +1 -1
  70. package/core/dist/runtime-v2/store/task/memory-task-store.d.ts +7 -1
  71. package/core/dist/runtime-v2/store/task/memory-task-store.d.ts.map +1 -1
  72. package/core/dist/runtime-v2/store/task/memory-task-store.js +16 -1
  73. package/core/dist/runtime-v2/store/task/memory-task-store.js.map +1 -1
  74. package/core/dist/runtime-v2/store/task/sqlite-task-store.d.ts +7 -1
  75. package/core/dist/runtime-v2/store/task/sqlite-task-store.d.ts.map +1 -1
  76. package/core/dist/runtime-v2/store/task/sqlite-task-store.js +31 -2
  77. package/core/dist/runtime-v2/store/task/sqlite-task-store.js.map +1 -1
  78. package/core/dist/runtime-v2/store/task/task-store.d.ts +19 -5
  79. package/core/dist/runtime-v2/store/task/task-store.d.ts.map +1 -1
  80. package/core/dist/telemetry-event.d.ts +2 -2
  81. package/core/dist/telemetry-event.d.ts.map +1 -1
  82. package/core/dist/telemetry-event.js +13 -0
  83. package/core/dist/telemetry-event.js.map +1 -1
  84. package/core/package.json +5 -1
  85. package/dist/installer.d.ts +1 -1
  86. package/dist/installer.d.ts.map +1 -1
  87. package/dist/installer.js +5 -1
  88. package/dist/installer.js.map +1 -1
  89. package/dist/installers/workbuddy-host-installer.d.ts +16 -3
  90. package/dist/installers/workbuddy-host-installer.d.ts.map +1 -1
  91. package/dist/installers/workbuddy-host-installer.js +62 -11
  92. package/dist/installers/workbuddy-host-installer.js.map +1 -1
  93. package/dist/manifest-host-union.d.ts +23 -0
  94. package/dist/manifest-host-union.d.ts.map +1 -0
  95. package/dist/manifest-host-union.js +22 -0
  96. package/dist/manifest-host-union.js.map +1 -0
  97. package/dist/uninstaller.d.ts +2 -1
  98. package/dist/uninstaller.d.ts.map +1 -1
  99. package/dist/uninstaller.js +7 -1
  100. package/dist/uninstaller.js.map +1 -1
  101. package/host-runtime/dist/behavior-example-pack-assembler.d.ts +41 -0
  102. package/host-runtime/dist/behavior-example-pack-assembler.js +243 -0
  103. package/host-runtime/dist/behavior-history.d.ts +6 -0
  104. package/host-runtime/dist/behavior-history.js +76 -0
  105. package/host-runtime/dist/index.d.ts +3 -0
  106. package/host-runtime/dist/index.js +3 -0
  107. package/host-runtime/dist/internalization-consumer-cycle.d.ts +12 -1
  108. package/host-runtime/dist/internalization-consumer-cycle.js +141 -16
  109. package/host-runtime/dist/workspace-behavior-evidence.d.ts +3 -0
  110. package/host-runtime/dist/workspace-behavior-evidence.js +74 -0
  111. package/host-runtime/dist/workspace-telemetry-emitter.js +13 -0
  112. package/host-runtime/package.json +10 -2
  113. package/install-layout/dist/index.d.ts +40 -1
  114. package/install-layout/dist/index.js +88 -6
  115. package/install-layout/package.json +1 -1
  116. package/package.json +3 -3
  117. package/pd-cli/dist/commands/runtime-internalization-audit-artificer-evidence.d.ts +44 -0
  118. package/pd-cli/dist/commands/runtime-internalization-audit-artificer-evidence.d.ts.map +1 -0
  119. package/pd-cli/dist/commands/runtime-internalization-audit-artificer-evidence.js +138 -0
  120. package/pd-cli/dist/commands/runtime-internalization-audit-artificer-evidence.js.map +1 -0
  121. package/pd-cli/dist/commands/runtime-internalization-evidence.d.ts +71 -0
  122. package/pd-cli/dist/commands/runtime-internalization-evidence.d.ts.map +1 -0
  123. package/pd-cli/dist/commands/runtime-internalization-evidence.js +405 -0
  124. package/pd-cli/dist/commands/runtime-internalization-evidence.js.map +1 -0
  125. package/pd-cli/dist/commands/runtime-internalization-run-once.d.ts.map +1 -1
  126. package/pd-cli/dist/commands/runtime-internalization-run-once.js +22 -1
  127. package/pd-cli/dist/commands/runtime-internalization-run-once.js.map +1 -1
  128. package/pd-cli/dist/commands/runtime-internalization-run-rulehost.d.ts.map +1 -1
  129. package/pd-cli/dist/commands/runtime-internalization-run-rulehost.js +45 -4
  130. package/pd-cli/dist/commands/runtime-internalization-run-rulehost.js.map +1 -1
  131. package/pd-cli/dist/commands/runtime-recovery-failed-task.d.ts +22 -0
  132. package/pd-cli/dist/commands/runtime-recovery-failed-task.d.ts.map +1 -0
  133. package/pd-cli/dist/commands/runtime-recovery-failed-task.js +470 -0
  134. package/pd-cli/dist/commands/runtime-recovery-failed-task.js.map +1 -0
  135. package/pd-cli/dist/commands/runtime-recovery-failed-tasks.d.ts +24 -0
  136. package/pd-cli/dist/commands/runtime-recovery-failed-tasks.d.ts.map +1 -1
  137. package/pd-cli/dist/commands/runtime-recovery-failed-tasks.js +4 -1
  138. package/pd-cli/dist/commands/runtime-recovery-failed-tasks.js.map +1 -1
  139. package/pd-cli/dist/index.js +13 -0
  140. package/pd-cli/dist/index.js.map +1 -1
  141. package/pd-cli/dist/services/artificer-evidence-audit.d.ts +156 -0
  142. package/pd-cli/dist/services/artificer-evidence-audit.d.ts.map +1 -0
  143. package/pd-cli/dist/services/artificer-evidence-audit.js +321 -0
  144. package/pd-cli/dist/services/artificer-evidence-audit.js.map +1 -0
  145. package/pd-cli/dist/services/rulehost-pipeline-runner.d.ts.map +1 -1
  146. package/pd-cli/dist/services/rulehost-pipeline-runner.js +17 -3
  147. package/pd-cli/dist/services/rulehost-pipeline-runner.js.map +1 -1
  148. package/pd-cli/package.json +1 -1
  149. package/plugin/dist/bundle.js +545 -541
  150. package/plugin/dist/core/behavior-example-pack-assembler.d.ts +4 -32
  151. package/plugin/dist/core/rule-context-assembler.d.ts +0 -9
  152. package/plugin/dist/openclaw.plugin.json +1 -1
  153. package/plugin/dist/rulehost-evidence.js +27 -27
  154. package/plugin/openclaw.plugin.json +1 -1
  155. package/plugin/package.json +1 -1
  156. package/release-manager/dist/installer.d.ts +1 -1
  157. package/release-manager/dist/installer.d.ts.map +1 -1
  158. package/release-manager/dist/installer.js +5 -1
  159. package/release-manager/dist/installer.js.map +1 -1
  160. package/release-manager/dist/installers/workbuddy-host-installer.d.ts +16 -3
  161. package/release-manager/dist/installers/workbuddy-host-installer.d.ts.map +1 -1
  162. package/release-manager/dist/installers/workbuddy-host-installer.js +62 -11
  163. package/release-manager/dist/installers/workbuddy-host-installer.js.map +1 -1
  164. package/release-manager/dist/manifest-host-union.d.ts +23 -0
  165. package/release-manager/dist/manifest-host-union.d.ts.map +1 -0
  166. package/release-manager/dist/manifest-host-union.js +22 -0
  167. package/release-manager/dist/manifest-host-union.js.map +1 -0
  168. package/release-manager/dist/uninstaller.d.ts +2 -1
  169. package/release-manager/dist/uninstaller.d.ts.map +1 -1
  170. package/release-manager/dist/uninstaller.js +7 -1
  171. package/release-manager/dist/uninstaller.js.map +1 -1
  172. package/release-manager/package.json +2 -2
  173. package/workbuddy-adapter/package.json +1 -1
@@ -25,12 +25,101 @@ export interface FailedTaskRecoveryResult {
25
25
  attemptCount: number;
26
26
  maxAttempts: number;
27
27
  forceApplied: boolean;
28
+ /** Attempt budget before the recovery reset (PRI-991; additive, optional). */
29
+ previousAttemptCount?: number;
30
+ previousMaxAttempts?: number;
28
31
  }
32
+ /**
33
+ * PRI-991 — read-only precheck for recovering ONE failed task. Pure read:
34
+ * no mutation, no audit, no telemetry. Consumed by the CLI dry-run AND as
35
+ * the confirm path's pre-mutation guard.
36
+ */
37
+ export interface FailedTaskRecoveryInspection {
38
+ taskId: string;
39
+ found: boolean;
40
+ taskKind?: string;
41
+ status?: string;
42
+ attemptCount?: number;
43
+ maxAttempts?: number;
44
+ isExhausted?: boolean;
45
+ /** `isExhausted` — recovering requires the explicit `resetBudget` opt-in. */
46
+ budgetResetRequired?: boolean;
47
+ /** Active (unexpired) lease on the task row. */
48
+ leaseConflict?: boolean;
49
+ leaseOwner?: string | null;
50
+ leaseExpiresAt?: string | null;
51
+ /** Parsed pi_metadata carries a completionIntent with status 'pending'. */
52
+ completionIntentPending?: boolean;
53
+ /** Kind is in the recoverable set (runner kinds + diagnostician). */
54
+ kindRecoverable?: boolean;
55
+ /** All guards pass — a confirm with the right budget flag would recover. */
56
+ eligible: boolean;
57
+ /** Stable refusal/eligibility code (FR-06). */
58
+ reasonCode: string;
59
+ nextAction?: string;
60
+ }
61
+ /**
62
+ * PRI-991 — structured outcome of the strict single-task recovery. Every
63
+ * non-recovered variant leaves the task row untouched (single CAS write).
64
+ */
65
+ export type SingleTaskRecoveryOutcome = {
66
+ status: 'not_found';
67
+ } | {
68
+ status: 'kind_not_recoverable';
69
+ taskKind: string;
70
+ } | {
71
+ status: 'not_failed';
72
+ taskKind: string;
73
+ previousStatus: string;
74
+ } | {
75
+ status: 'invalid_task_metadata';
76
+ taskKind: string;
77
+ } | {
78
+ status: 'lease_conflict';
79
+ taskKind: string;
80
+ leaseOwner: string;
81
+ leaseExpiresAt: string;
82
+ } | {
83
+ status: 'completion_intent_pending';
84
+ taskKind: string;
85
+ } | {
86
+ status: 'budget_exhausted';
87
+ taskKind: string;
88
+ attemptCount: number;
89
+ maxAttempts: number;
90
+ nextAction: string;
91
+ } | {
92
+ status: 'conflict';
93
+ taskKind: string;
94
+ previousStatus: string;
95
+ } | {
96
+ status: 'recovered';
97
+ taskKind: string;
98
+ previousStatus: string;
99
+ previousAttemptCount: number;
100
+ previousMaxAttempts: number;
101
+ newMaxAttempts: number;
102
+ budgetResetApplied: boolean;
103
+ /**
104
+ * PRI-991 (P1-03): id of the durable audit fact embedded in the task's
105
+ * own metadata by the SAME conditional UPDATE that moved the task to
106
+ * pending. The recovery_actions.jsonl line must carry the same id; the
107
+ * CLI's --repair-audit mode re-projects from this fact.
108
+ */
109
+ actionId: string;
110
+ };
29
111
  export interface RecoverySweepService {
30
112
  detectExpiredLeases(): Promise<string[]>;
31
113
  recoverTask(taskId: string): Promise<RecoveryResult | null>;
32
114
  detectFailedTasks(): Promise<FailedTaskRecoveryInfo[]>;
33
115
  recoverFailedTask(taskId: string, force?: boolean): Promise<FailedTaskRecoveryResult | null>;
116
+ /** PRI-991: read-only single-task recovery precheck. */
117
+ inspectFailedTaskRecovery(taskId: string): Promise<FailedTaskRecoveryInspection>;
118
+ /** PRI-991: strict single-task recovery (guards + CAS + opt-in budget reset). */
119
+ recoverSingleFailedTask(taskId: string, opts?: {
120
+ resetBudget?: boolean;
121
+ operator?: string;
122
+ }): Promise<SingleTaskRecoveryOutcome>;
34
123
  /**
35
124
  * Governance Recovery Actions v1: Owner authority reset for a
36
125
  * needs_human_review task (→ pending, clears runnerDecision +
@@ -54,8 +143,34 @@ export interface RecoverySweepServiceHandle {
54
143
  * Returns null (no mutation) when the task is absent or not in `failed`
55
144
  * status; throws `input_invalid` when the budget is exhausted and force is
56
145
  * not supplied.
146
+ *
147
+ * PRI-991: the mutation is now a CAS
148
+ * (`updateTaskIfDiagnosticJsonUnchanged` with `expectedStatus: 'failed'`)
149
+ * over the caller's read snapshot — a concurrent writer that moved the task
150
+ * out of `failed` (or mutated its metadata) between this read and write
151
+ * loses the race and yields null instead of a double recovery. Observable
152
+ * batch behavior is unchanged (null already meant "skipped").
153
+ */
154
+ export declare function recoverFailedTask(stateManager: Pick<RuntimeStateHandle['stateManager'], 'getTask' | 'updateTaskIfDiagnosticJsonUnchanged'>, taskId: string, force?: boolean): Promise<FailedTaskRecoveryResult | null>;
155
+ /**
156
+ * PRI-991 — read-only inspection of ONE task for single-task recovery.
157
+ * Guards, in refusal-priority order: existence → kind legality → status
158
+ * (`failed` only) → active lease → pending completion intent → budget.
159
+ * Malformed metadata never blocks the inspection (it only makes the intent
160
+ * guard unprovable — the CAS still protects the mutation).
161
+ */
162
+ export declare function inspectFailedTaskRecovery(stateManager: Pick<RuntimeStateHandle['stateManager'], 'getTask' | 'updateTaskIfDiagnosticJsonUnchanged'>, taskId: string): Promise<FailedTaskRecoveryInspection>;
163
+ /**
164
+ * PRI-991 — strict single-task recovery. Same mutation authority as
165
+ * `recoverFailedTask` (shared patch builder + CAS), plus the guards the
166
+ * batch path deliberately does not enforce: exact-task kind legality, active
167
+ * lease refusal, pending completion intent refusal, and the budget reset as
168
+ * an explicit `resetBudget` opt-in (structured refusal instead of a throw).
57
169
  */
58
- export declare function recoverFailedTask(stateManager: RuntimeStateHandle['stateManager'], taskId: string, force?: boolean): Promise<FailedTaskRecoveryResult | null>;
170
+ export declare function recoverSingleFailedTask(stateManager: Pick<RuntimeStateHandle['stateManager'], 'getTask' | 'updateTaskIfDiagnosticJsonUnchanged'>, taskId: string, opts?: {
171
+ resetBudget?: boolean;
172
+ operator?: string;
173
+ }): Promise<SingleTaskRecoveryOutcome>;
59
174
  export declare function createRecoverySweepService(opts: {
60
175
  workspaceDir: string;
61
176
  }): Promise<RecoverySweepServiceHandle>;
@@ -1 +1 @@
1
- {"version":3,"file":"recovery-sweep-service.d.ts","sourceRoot":"","sources":["../../src/runtime-v2/recovery-sweep-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAI1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAE1E,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC5D,iBAAiB,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC;IACvD,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAAC;IAC7F;;;;;OAKG;IACH,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACxE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,oBAAoB,CAAC;IAC9B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,kBAAkB,CAAC,cAAc,CAAC,EAChD,MAAM,EAAE,MAAM,EACd,KAAK,UAAQ,GACZ,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAmC1C;AA8CD,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,GAC7B,OAAO,CAAC,0BAA0B,CAAC,CAOrC"}
1
+ {"version":3,"file":"recovery-sweep-service.d.ts","sourceRoot":"","sources":["../../src/runtime-v2/recovery-sweep-service.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,85 @@
1
1
  import { createRuntimeStateHandle } from './runtime-state-handle.js';
2
2
  import { PDRuntimeError } from './error-categories.js';
3
3
  import { isRunnerKind } from './internalization/peer-runner-contracts.js';
4
+ import { hydratePITaskRecord, mergePITaskMetadata, createPITaskDiagnosticJson, FAILED_TASK_RECOVERY_RETENTION } from './internalization/pitask-metadata.js';
4
5
  import { ownerRetryNeedsHumanReviewTask } from './internalization/owner-retry.js';
6
+ import * as crypto from 'crypto';
7
+ /** TaskRecord.diagnosticJson is optional — normalize to the store's null contract. */
8
+ function readRawDiagnosticJson(task) {
9
+ return typeof task.diagnosticJson === 'string' ? task.diagnosticJson : null;
10
+ }
11
+ function assessRecoveryMetadataGuard(task) {
12
+ const raw = readRawDiagnosticJson(task);
13
+ if (raw === null || raw.trim() === '')
14
+ return { state: 'absent' };
15
+ let parsed;
16
+ try {
17
+ parsed = JSON.parse(raw);
18
+ }
19
+ catch {
20
+ return { state: 'invalid' };
21
+ }
22
+ const hasPiMetadata = typeof parsed === 'object'
23
+ && parsed !== null
24
+ && !Array.isArray(parsed)
25
+ && Object.hasOwn(parsed, 'pi_metadata');
26
+ if (!hasPiMetadata)
27
+ return { state: 'absent' };
28
+ const piTask = hydratePITaskRecord(task);
29
+ if (piTask === null)
30
+ return { state: 'invalid' };
31
+ return { state: 'valid', piTask };
32
+ }
33
+ /** PRI-991 (P1-04): the FULL decision snapshot joins the conditional UPDATE. */
34
+ function failedRecoveryPreconditions(task, expectedStatus) {
35
+ return {
36
+ expectedStatus,
37
+ expectedAttemptCount: task.attemptCount,
38
+ expectedMaxAttempts: task.maxAttempts,
39
+ expectedLeaseOwner: task.leaseOwner ?? null,
40
+ expectedLeaseExpiresAt: task.leaseExpiresAt ?? null,
41
+ };
42
+ }
43
+ /** PRI-991 (P1-03): active (unexpired) lease check shared by inspect + recover. */
44
+ function hasActiveLease(task) {
45
+ const owner = task.leaseOwner ?? null;
46
+ const expiresAt = task.leaseExpiresAt ?? null;
47
+ if (owner === null || expiresAt === null)
48
+ return { active: false };
49
+ const expiryMs = new Date(expiresAt).getTime();
50
+ if (Number.isNaN(expiryMs) || expiryMs <= Date.now())
51
+ return { active: false };
52
+ return { active: true, owner, expiresAt };
53
+ }
54
+ /**
55
+ * ONE patch builder for the failed→pending reset — the legacy batch path and
56
+ * the strict single-task path share this so the mutation content has exactly
57
+ * one authority (P4). Budget semantics: exhausted + reset → maxAttempts =
58
+ * max(maxAttempts, attemptCount) + 3, attemptCount 0; otherwise maxAttempts
59
+ * unchanged, attemptCount 0. lastError / lease / resultRef cleared; runs,
60
+ * artifacts are NEVER touched. The strict path additionally injects the
61
+ * durable audit fact via `diagnosticJson` (P1-03) — the batch path keeps the
62
+ * metadata payload untouched.
63
+ */
64
+ function buildFailedRecoveryPatch(task, resetBudget) {
65
+ const isExhausted = task.attemptCount >= task.maxAttempts;
66
+ const newMaxAttempts = isExhausted && resetBudget
67
+ ? Math.max(task.maxAttempts, task.attemptCount) + 3
68
+ : task.maxAttempts;
69
+ return {
70
+ isExhausted,
71
+ newMaxAttempts,
72
+ patch: {
73
+ status: 'pending',
74
+ attemptCount: 0,
75
+ maxAttempts: newMaxAttempts,
76
+ lastError: null,
77
+ leaseOwner: null,
78
+ leaseExpiresAt: null,
79
+ resultRef: null,
80
+ },
81
+ };
82
+ }
5
83
  /**
6
84
  * Recover a failed task to `pending` — the single recovery authority for the
7
85
  * failed→pending reset semantics (PRI-674), shared by the recovery sweep
@@ -12,6 +90,13 @@ import { ownerRetryNeedsHumanReviewTask } from './internalization/owner-retry.js
12
90
  * Returns null (no mutation) when the task is absent or not in `failed`
13
91
  * status; throws `input_invalid` when the budget is exhausted and force is
14
92
  * not supplied.
93
+ *
94
+ * PRI-991: the mutation is now a CAS
95
+ * (`updateTaskIfDiagnosticJsonUnchanged` with `expectedStatus: 'failed'`)
96
+ * over the caller's read snapshot — a concurrent writer that moved the task
97
+ * out of `failed` (or mutated its metadata) between this read and write
98
+ * loses the race and yields null instead of a double recovery. Observable
99
+ * batch behavior is unchanged (null already meant "skipped").
15
100
  */
16
101
  export async function recoverFailedTask(stateManager, taskId, force = false) {
17
102
  const task = await stateManager.getTask(taskId);
@@ -19,22 +104,16 @@ export async function recoverFailedTask(stateManager, taskId, force = false) {
19
104
  return null;
20
105
  if (task.status !== 'failed')
21
106
  return null;
22
- const isExhausted = task.attemptCount >= task.maxAttempts;
107
+ const { isExhausted, patch } = buildFailedRecoveryPatch(task, force);
23
108
  if (isExhausted && !force) {
24
109
  throw new PDRuntimeError('input_invalid', `Task ${taskId} has exhausted max attempts (${task.attemptCount}/${task.maxAttempts}). Use force to recover.`);
25
110
  }
26
- const newMaxAttempts = isExhausted && force
27
- ? Math.max(task.maxAttempts, task.attemptCount) + 3
28
- : task.maxAttempts;
29
- const updated = await stateManager.updateTask(taskId, {
30
- status: 'pending',
31
- attemptCount: 0,
32
- maxAttempts: newMaxAttempts,
33
- lastError: null,
34
- leaseOwner: null,
35
- leaseExpiresAt: null,
36
- resultRef: null,
37
- });
111
+ // PRI-991 (P1-04): the batch path joins the same full decision snapshot —
112
+ // a concurrent budget/lease writer defeats the recovery instead of being
113
+ // silently overwritten. Observable behavior unchanged (null → "skipped").
114
+ const updated = await stateManager.updateTaskIfDiagnosticJsonUnchanged(taskId, readRawDiagnosticJson(task), patch, failedRecoveryPreconditions(task, 'failed'));
115
+ if (!updated)
116
+ return null;
38
117
  return {
39
118
  taskId: updated.taskId,
40
119
  previousStatus: 'failed',
@@ -42,6 +121,160 @@ export async function recoverFailedTask(stateManager, taskId, force = false) {
42
121
  attemptCount: updated.attemptCount,
43
122
  maxAttempts: updated.maxAttempts,
44
123
  forceApplied: isExhausted && force,
124
+ previousAttemptCount: task.attemptCount,
125
+ previousMaxAttempts: task.maxAttempts,
126
+ };
127
+ }
128
+ /**
129
+ * PRI-991 — read-only inspection of ONE task for single-task recovery.
130
+ * Guards, in refusal-priority order: existence → kind legality → status
131
+ * (`failed` only) → active lease → pending completion intent → budget.
132
+ * Malformed metadata never blocks the inspection (it only makes the intent
133
+ * guard unprovable — the CAS still protects the mutation).
134
+ */
135
+ export async function inspectFailedTaskRecovery(stateManager, taskId) {
136
+ const task = await stateManager.getTask(taskId);
137
+ if (!task) {
138
+ return {
139
+ taskId,
140
+ found: false,
141
+ eligible: false,
142
+ reasonCode: 'task_not_found',
143
+ nextAction: 'Verify the exact taskId in this workspace (pd runtime internalization queue --json); prefixes and wildcards are never matched',
144
+ };
145
+ }
146
+ const kindRecoverable = isRunnerKind(task.taskKind) || task.taskKind === 'diagnostician';
147
+ const leaseCheck = hasActiveLease(task);
148
+ const leaseConflict = leaseCheck.active;
149
+ const isExhausted = task.attemptCount >= task.maxAttempts;
150
+ const isFailed = task.status === 'failed';
151
+ const metadataGuard = assessRecoveryMetadataGuard(task);
152
+ const completionIntentPending = metadataGuard.state === 'valid' && metadataGuard.piTask.completionIntent?.status === 'pending';
153
+ const base = {
154
+ taskId,
155
+ found: true,
156
+ taskKind: task.taskKind,
157
+ status: task.status,
158
+ attemptCount: task.attemptCount,
159
+ maxAttempts: task.maxAttempts,
160
+ isExhausted,
161
+ budgetResetRequired: isExhausted,
162
+ leaseConflict,
163
+ leaseOwner: task.leaseOwner ?? null,
164
+ leaseExpiresAt: task.leaseExpiresAt ?? null,
165
+ completionIntentPending,
166
+ kindRecoverable,
167
+ };
168
+ if (!kindRecoverable) {
169
+ return { ...base, eligible: false, reasonCode: 'kind_not_recoverable', nextAction: `Task kind '${task.taskKind}' has no failed-task recovery entry` };
170
+ }
171
+ if (!isFailed) {
172
+ return { ...base, eligible: false, reasonCode: 'not_failed', nextAction: `Task is '${task.status}', not 'failed' — nothing to recover` };
173
+ }
174
+ // PRI-991 (P1-02): corrupted governance payload fails closed BEFORE any
175
+ // other guard can be interpreted — a corrupt record must never read as
176
+ // "no pending intent" (the guard itself must not be bypassable). The
177
+ // metadataGuard was computed above (single assessment, shared with the
178
+ // completionIntentPending projection).
179
+ if (metadataGuard.state === 'invalid') {
180
+ return { ...base, eligible: false, reasonCode: 'invalid_task_metadata', nextAction: 'The task pi_metadata is present but fails validation (parsePITaskMetadata/hydratePITaskRecord) — inspect and repair the diagnostic payload before recovering' };
181
+ }
182
+ if (leaseConflict) {
183
+ return { ...base, eligible: false, reasonCode: 'lease_conflict', nextAction: 'Wait for the lease to expire (the per-cycle recovery sweep will reclaim it), then retry' };
184
+ }
185
+ if (metadataGuard.state === 'valid' && metadataGuard.piTask.completionIntent?.status === 'pending') {
186
+ return { ...base, eligible: false, reasonCode: 'completion_intent_pending', nextAction: 'A runner verdict completion intent is still pending — let the runner resume it, or resolve it via the governance focus before recovering' };
187
+ }
188
+ if (isExhausted) {
189
+ return { ...base, eligible: true, reasonCode: 'eligible_budget_reset_required', nextAction: 'Recoverable with an explicit budget reset: rerun with --confirm --reset-budget' };
190
+ }
191
+ return { ...base, eligible: true, reasonCode: 'eligible', nextAction: 'Recoverable: rerun with --confirm' };
192
+ }
193
+ /**
194
+ * PRI-991 — strict single-task recovery. Same mutation authority as
195
+ * `recoverFailedTask` (shared patch builder + CAS), plus the guards the
196
+ * batch path deliberately does not enforce: exact-task kind legality, active
197
+ * lease refusal, pending completion intent refusal, and the budget reset as
198
+ * an explicit `resetBudget` opt-in (structured refusal instead of a throw).
199
+ */
200
+ export async function recoverSingleFailedTask(stateManager, taskId, opts = {}) {
201
+ const task = await stateManager.getTask(taskId);
202
+ if (!task)
203
+ return { status: 'not_found' };
204
+ if (!isRunnerKind(task.taskKind) && task.taskKind !== 'diagnostician') {
205
+ return { status: 'kind_not_recoverable', taskKind: task.taskKind };
206
+ }
207
+ if (task.status !== 'failed') {
208
+ return { status: 'not_failed', taskKind: task.taskKind, previousStatus: task.status };
209
+ }
210
+ // PRI-991 (P1-02): corrupted governance payload fails closed — identical
211
+ // judgment to inspectFailedTaskRecovery (T02-G), evaluated at mutation time.
212
+ const metadataGuard = assessRecoveryMetadataGuard(task);
213
+ if (metadataGuard.state === 'invalid') {
214
+ return { status: 'invalid_task_metadata', taskKind: task.taskKind };
215
+ }
216
+ const leaseCheck = hasActiveLease(task);
217
+ if (leaseCheck.active) {
218
+ return { status: 'lease_conflict', taskKind: task.taskKind, leaseOwner: leaseCheck.owner, leaseExpiresAt: leaseCheck.expiresAt };
219
+ }
220
+ if (metadataGuard.state === 'valid' && metadataGuard.piTask.completionIntent?.status === 'pending') {
221
+ return { status: 'completion_intent_pending', taskKind: task.taskKind };
222
+ }
223
+ const { isExhausted, newMaxAttempts, patch } = buildFailedRecoveryPatch(task, opts.resetBudget === true);
224
+ if (isExhausted && opts.resetBudget !== true) {
225
+ return {
226
+ status: 'budget_exhausted',
227
+ taskKind: task.taskKind,
228
+ attemptCount: task.attemptCount,
229
+ maxAttempts: task.maxAttempts,
230
+ nextAction: 'Rerun with --reset-budget to explicitly reset the attempt budget (run history and failure reasons are preserved)',
231
+ };
232
+ }
233
+ // PRI-991 (P1-03): the audit fact rides the SAME conditional UPDATE as the
234
+ // status change (crash-durable). The JSONL is a projection of this fact,
235
+ // never its source of truth. Only hydratable payloads carry the record —
236
+ // legacy absent-metadata payloads stay byte-identical (documented
237
+ // reliability boundary: their JSONL projection has no row-fact fallback).
238
+ // r2 P1-01: the operator-provided label is part of the durable fact (an
239
+ // unprojected recovery must be repairable WITH its operator attribution);
240
+ // it remains a label, never an authenticated identity.
241
+ // r2 P1-02: the fact is APPENDED to the per-task array (bounded retention)
242
+ // — a second recovery must never destroy an unprojected prior fact.
243
+ const actionId = crypto.randomUUID();
244
+ if (metadataGuard.state === 'valid') {
245
+ const priorRecords = metadataGuard.piTask.failedTaskRecoveries ?? [];
246
+ const merged = mergePITaskMetadata(metadataGuard.piTask, {
247
+ failedTaskRecoveries: [
248
+ ...priorRecords,
249
+ {
250
+ actionId,
251
+ recoveredAt: new Date().toISOString(),
252
+ operator: opts.operator?.trim() ? opts.operator.trim() : null,
253
+ previousStatus: 'failed',
254
+ previousAttemptCount: task.attemptCount,
255
+ previousMaxAttempts: task.maxAttempts,
256
+ newMaxAttempts,
257
+ budgetResetApplied: isExhausted && opts.resetBudget === true,
258
+ },
259
+ ].slice(-FAILED_TASK_RECOVERY_RETENTION),
260
+ });
261
+ patch.diagnosticJson = createPITaskDiagnosticJson(merged);
262
+ }
263
+ // PRI-991 (P1-04): every field the decision depended on joins the WHERE
264
+ // clause — a concurrent budget/lease/metadata writer defeats the recovery.
265
+ const updated = await stateManager.updateTaskIfDiagnosticJsonUnchanged(taskId, readRawDiagnosticJson(task), patch, failedRecoveryPreconditions(task, 'failed'));
266
+ if (!updated) {
267
+ return { status: 'conflict', taskKind: task.taskKind, previousStatus: task.status };
268
+ }
269
+ return {
270
+ status: 'recovered',
271
+ taskKind: task.taskKind,
272
+ previousStatus: 'failed',
273
+ previousAttemptCount: task.attemptCount,
274
+ previousMaxAttempts: task.maxAttempts,
275
+ newMaxAttempts: updated.maxAttempts,
276
+ budgetResetApplied: isExhausted && opts.resetBudget === true,
277
+ actionId,
45
278
  };
46
279
  }
47
280
  class RecoverySweepServiceImpl {
@@ -76,6 +309,12 @@ class RecoverySweepServiceImpl {
76
309
  async recoverFailedTask(taskId, force = false) {
77
310
  return recoverFailedTask(this.stateManager, taskId, force);
78
311
  }
312
+ async inspectFailedTaskRecovery(taskId) {
313
+ return inspectFailedTaskRecovery(this.stateManager, taskId);
314
+ }
315
+ async recoverSingleFailedTask(taskId, opts = {}) {
316
+ return recoverSingleFailedTask(this.stateManager, taskId, opts);
317
+ }
79
318
  async recoverNeedsHumanReviewTask(taskId) {
80
319
  return ownerRetryNeedsHumanReviewTask(this.stateManager, taskId);
81
320
  }
@@ -1 +1 @@
1
- {"version":3,"file":"recovery-sweep-service.js","sourceRoot":"","sources":["../../src/runtime-v2/recovery-sweep-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAGrE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC1E,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAkDlF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,YAAgD,EAChD,MAAc,EACd,KAAK,GAAG,KAAK;IAEb,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE1C,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW,CAAC;IAC1D,IAAI,WAAW,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,cAAc,CACtB,eAAe,EACf,QAAQ,MAAM,gCAAgC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW,0BAA0B,CAC9G,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,WAAW,IAAI,KAAK;QACzC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;QACnD,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;IAErB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,MAAM,EAAE;QACpD,MAAM,EAAE,SAAS;QACjB,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,cAAc;QAC3B,SAAS,EAAE,IAAI;QACf,UAAU,EAAE,IAAI;QAChB,cAAc,EAAE,IAAI;QACpB,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;IAEH,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,cAAc,EAAE,QAAQ;QACxB,SAAS,EAAE,OAAO,CAAC,MAAM;QACzB,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,YAAY,EAAE,WAAW,IAAI,KAAK;KACnC,CAAC;AACJ,CAAC;AAED,MAAM,wBAAwB;IACC,YAAY;IAAzC,YAA6B,YAAgD;4BAAhD,YAAY;IAAuC,CAAC;IAEjF,KAAK,CAAC,mBAAmB;QACvB,OAAO,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAc;QAC9B,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5E,OAAO,WAAW;YAChB,uEAAuE;YACvE,uEAAuE;YACvE,yEAAyE;YACzE,mEAAmE;aAClE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,eAAe,CAAC;aACvE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACT,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,YAAY,EAAE,CAAC,CAAC,YAAY;YAC5B,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,WAAW,EAAE,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,WAAW;YAC5C,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAI;SAC7B,CAAC,CAAC,CAAC;IACR,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,MAAc,EAAE,KAAK,GAAG,KAAK;QACnD,OAAO,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,2BAA2B,CAAC,MAAc;QAC9C,OAAO,8BAA8B,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACnE,CAAC;IAED,qEAAqE;IACrE,KAAK,CAAC,KAAK;QACT,yDAAyD;IAC3D,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,IAA8B;IAE9B,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IACnF,MAAM,OAAO,GAAG,IAAI,wBAAwB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAClE,OAAO;QACL,OAAO;QACP,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"recovery-sweep-service.js","sourceRoot":"","sources":["../../src/runtime-v2/recovery-sweep-service.ts"],"names":[],"mappings":"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"}
@@ -6,5 +6,13 @@ export interface RuntimeStateHandle {
6
6
  export declare function createRuntimeStateHandle(opts: {
7
7
  workspaceDir: string;
8
8
  readonly?: boolean;
9
+ /**
10
+ * PRI-991 (P1-01): when false, a missing state.db is never created — the
11
+ * open fails loudly instead. Strictly-readonly inspection paths (dry-run)
12
+ * combine `readonly: true` with `bootstrapIfMissing: false` so the handle
13
+ * cannot create files, directories, WAL journals or schema as a side
14
+ * effect. Default true (backward compatible).
15
+ */
16
+ bootstrapIfMissing?: boolean;
9
17
  }): Promise<RuntimeStateHandle>;
10
18
  //# sourceMappingURL=runtime-state-handle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-state-handle.d.ts","sourceRoot":"","sources":["../../src/runtime-v2/runtime-state-handle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAEvE,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,mBAAmB,CAAC;IAClC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,wBAAsB,wBAAwB,CAAC,IAAI,EAAE;IACnD,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA2B9B"}
1
+ {"version":3,"file":"runtime-state-handle.d.ts","sourceRoot":"","sources":["../../src/runtime-v2/runtime-state-handle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAEvE,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,mBAAmB,CAAC;IAClC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,wBAAsB,wBAAwB,CAAC,IAAI,EAAE;IACnD,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA4B9B"}
@@ -3,6 +3,7 @@ export async function createRuntimeStateHandle(opts) {
3
3
  const stateManager = new RuntimeStateManager({
4
4
  workspaceDir: opts.workspaceDir,
5
5
  readonly: opts.readonly ?? false,
6
+ bootstrapIfMissing: opts.bootstrapIfMissing,
6
7
  });
7
8
  let closed = false;
8
9
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-state-handle.js","sourceRoot":"","sources":["../../src/runtime-v2/runtime-state-handle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAOvE,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,IAG9C;IACC,MAAM,YAAY,GAAG,IAAI,mBAAmB,CAAC;QAC3C,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK;KACjC,CAAC,CAAC;IAEH,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,wEAAwE;QAC1E,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,OAAO;QACL,YAAY;QACZ,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,IAAI,MAAM;gBAAE,OAAO;YACnB,MAAM,GAAG,IAAI,CAAC;YACd,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;QAC7B,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"runtime-state-handle.js","sourceRoot":"","sources":["../../src/runtime-v2/runtime-state-handle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAOvE,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,IAW9C;IACC,MAAM,YAAY,GAAG,IAAI,mBAAmB,CAAC;QAC3C,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK;QAChC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;KAC5C,CAAC,CAAC;IAEH,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,wEAAwE;QAC1E,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,OAAO;QACL,YAAY;QACZ,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,IAAI,MAAM;gBAAE,OAAO;YACnB,MAAM,GAAG,IAAI,CAAC;YACd,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;QAC7B,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -47,6 +47,12 @@ export interface RuntimeStateManagerOptions {
47
47
  retryPolicyConfig?: RetryPolicyConfig;
48
48
  /** Open DB in readonly mode — skips schema init/migration, no writes allowed */
49
49
  readonly?: boolean;
50
+ /**
51
+ * PRI-991 (P1-01): when false, a missing state.db is NEVER bootstrapped —
52
+ * readonly callers fail loudly instead of silently creating databases.
53
+ * Default true (backward compatible). Forwarded to SqliteConnection.
54
+ */
55
+ bootstrapIfMissing?: boolean;
50
56
  }
51
57
  export declare class RuntimeStateManager {
52
58
  private readonly options;
@@ -133,8 +139,17 @@ export declare class RuntimeStateManager {
133
139
  * Narrow CAS (PRI-629): apply patch only when the task's diagnostic_json is
134
140
  * still byte-equal to expectedDiagnosticJson. Returns null on precondition
135
141
  * failure — caller re-reads and re-evaluates (idempotent-or-conflict).
142
+ * PRI-983: `options.expectedStatus` additionally requires the task to still
143
+ * sit in that status (SPEC-PD-IAER-001 §6.3) — arbitrates content-neutral
144
+ * authority resets under concurrent writers.
136
145
  */
137
- updateTaskIfDiagnosticJsonUnchanged(taskId: string, expectedDiagnosticJson: string | null, patch: TaskStoreUpdatePatch): Promise<TaskRecord | null>;
146
+ updateTaskIfDiagnosticJsonUnchanged(taskId: string, expectedDiagnosticJson: string | null, patch: TaskStoreUpdatePatch, options?: {
147
+ readonly expectedStatus?: string;
148
+ readonly expectedAttemptCount?: number;
149
+ readonly expectedMaxAttempts?: number;
150
+ readonly expectedLeaseOwner?: string | null;
151
+ readonly expectedLeaseExpiresAt?: string | null;
152
+ }): Promise<TaskRecord | null>;
138
153
  /**
139
154
  * Atomically records an Owner decision only while both the task metadata and
140
155
  * every artifact row used by its evidence snapshot remain unchanged.
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-state-manager.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/store/runtime-state-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-state-manager.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/store/runtime-state-manager.ts"],"names":[],"mappings":"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"}
@@ -42,6 +42,7 @@ export class RuntimeStateManager {
42
42
  this._connection = new SqliteConnectionClass({
43
43
  workspaceDir: this.options.workspaceDir,
44
44
  readonly: this.options.readonly,
45
+ bootstrapIfMissing: this.options.bootstrapIfMissing,
45
46
  });
46
47
  this._taskStore = new SqliteTaskStore(this._connection);
47
48
  this._runStore = new SqliteRunStore(this._connection);
@@ -329,10 +330,14 @@ export class RuntimeStateManager {
329
330
  * Narrow CAS (PRI-629): apply patch only when the task's diagnostic_json is
330
331
  * still byte-equal to expectedDiagnosticJson. Returns null on precondition
331
332
  * failure — caller re-reads and re-evaluates (idempotent-or-conflict).
333
+ * PRI-983: `options.expectedStatus` additionally requires the task to still
334
+ * sit in that status (SPEC-PD-IAER-001 §6.3) — arbitrates content-neutral
335
+ * authority resets under concurrent writers.
332
336
  */
333
- async updateTaskIfDiagnosticJsonUnchanged(taskId, expectedDiagnosticJson, patch) {
337
+ // eslint-disable-next-line @typescript-eslint/max-params -- the 4th parameter is a CAS PRECONDITION (SPEC-PD-IAER-001 §6.3), not write payload: folding it into the patch type would let it leak into TaskRecord on unconditional updateTask paths.
338
+ async updateTaskIfDiagnosticJsonUnchanged(taskId, expectedDiagnosticJson, patch, options) {
334
339
  this.assertInitialized();
335
- return this._taskStore.updateTaskIfDiagnosticJsonUnchanged(taskId, expectedDiagnosticJson, patch);
340
+ return this._taskStore.updateTaskIfDiagnosticJsonUnchanged(taskId, expectedDiagnosticJson, patch, options);
336
341
  }
337
342
  /**
338
343
  * Atomically records an Owner decision only while both the task metadata and