pi-daddy 0.22.0 → 0.23.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.
Files changed (362) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/contracts/daily-view/v1/README.md +114 -0
  3. package/contracts/daily-view/v1/fixtures/view.json +525 -0
  4. package/contracts/daily-view/v1/fixtures/view.txt +75 -0
  5. package/contracts/daily-view/v1/fixtures/work.jsonl +17 -0
  6. package/contracts/daily-view/v1/p03/README.md +26 -0
  7. package/contracts/daily-view/v1/p03/fixtures/retained-executions.json +241 -0
  8. package/contracts/daily-view/v1/p03/projection.schema.json +194 -0
  9. package/contracts/daily-view/v1/p03/provenance.json +21 -0
  10. package/contracts/dashboard-host/v1/README.md +176 -0
  11. package/contracts/debrief/v1/README.md +146 -0
  12. package/contracts/debrief/v1/intervention/README.md +32 -0
  13. package/contracts/debrief/v1/intervention/fixtures/artifact-3ee11136beb864f518252e5024dae9197421fbf97b6e981d3243c782b5c44bd0.txt +1 -0
  14. package/contracts/debrief/v1/intervention/fixtures/artifact-58905d872dd3c54a9705f67b05fa82edbad7af6476ae8993faf1a7b9fadfb905.txt +1 -0
  15. package/contracts/debrief/v1/intervention/fixtures/assessment.json +29 -0
  16. package/contracts/debrief/v1/intervention/fixtures/blind-view.json +20 -0
  17. package/contracts/debrief/v1/intervention/fixtures/choice.json +7 -0
  18. package/contracts/debrief/v1/intervention/fixtures/manifest.json +57 -0
  19. package/contracts/debrief/v1/intervention/fixtures/reveal.json +39 -0
  20. package/contracts/debrief/v1/provenance.json +89 -0
  21. package/contracts/debrief/v1/work-capture/README.md +38 -0
  22. package/contracts/debrief/v1/work-capture/fixtures/batch.json +17 -0
  23. package/contracts/debrief/v1/work-capture/fixtures/cases.json +184 -0
  24. package/contracts/debrief/v1/work-capture/fixtures/review.json +184 -0
  25. package/contracts/debrief/v1/work-capture/review-request.schema.json +41 -0
  26. package/contracts/debrief/v1/work-capture/work-case.schema.json +190 -0
  27. package/contracts/debrief/v2/README.md +71 -0
  28. package/contracts/debrief/v2/input-pin.json +66 -0
  29. package/contracts/debrief/v2/intervention-upstream.md +40 -0
  30. package/contracts/debrief/v2/work-signals-upstream.md +22 -0
  31. package/contracts/dispatch-control/v1/README.md +109 -0
  32. package/contracts/dispatch-control/v1/request.schema.json +19 -0
  33. package/contracts/effect-profile/v1/README.md +124 -0
  34. package/contracts/execution-retention/v1/README.md +109 -0
  35. package/contracts/execution-retention/v2/README.md +148 -0
  36. package/contracts/execution-retention/v2/fixtures/interrupted-native-bytes.json +91 -0
  37. package/contracts/execution-retention/v2/fixtures/missing-native-session.json +91 -0
  38. package/contracts/execution-retention/v2/fixtures/native-file-unknown-branch.json +91 -0
  39. package/contracts/execution-retention/v2/fixtures/native-id-without-bytes.json +91 -0
  40. package/contracts/execution-retention/v2/fixtures/native-live-branch.json +90 -0
  41. package/contracts/execution-retention/v2/fixtures/replaced-native-session.json +92 -0
  42. package/contracts/execution-retention/v2/fixtures/result-82c620cdfeb8ca6b858cf653d7f5e2eedca5315d6244216d60e8b36f03223d6a.bin +1 -0
  43. package/contracts/execution-retention/v2/fixtures/session-2ec1f134bc739984434f7fca689e1c3d1c39fce2dcadae709e9b6faedfcc4ac7.bin +3 -0
  44. package/contracts/execution-retention/v2/fixtures/session-9bdb4bd16a901da31580acf056bda525225259e15ec409e0410480109011772f.bin +3 -0
  45. package/contracts/execution-retention/v2/manifest.schema.json +858 -0
  46. package/contracts/experiment/v1/README.md +164 -0
  47. package/contracts/factory-order/v1/README.md +151 -0
  48. package/contracts/factory-order/v1/adoption-pin.json +8 -0
  49. package/contracts/intent-control/v1/README.md +135 -0
  50. package/contracts/intent-control/v1/request.schema.json +1096 -0
  51. package/contracts/intent-control/v2/README.md +34 -0
  52. package/contracts/intent-control/v2/request.schema.json +1070 -0
  53. package/contracts/ledger/v4/README.md +241 -0
  54. package/contracts/ledger/v4/fixtures/layout-options.json +428 -0
  55. package/contracts/ledger/v4/fixtures/work-acceptance.json +57 -0
  56. package/contracts/ledger/v4/fixtures/work-occurrence.json +44 -0
  57. package/contracts/ledger/v4/fixtures/work-revision.json +26 -0
  58. package/contracts/ledger/v4/fixtures/work-snapshot.json +73 -0
  59. package/contracts/ledger/v4/ledger-event.schema.json +162 -0
  60. package/contracts/ordinary-control/v1/README.md +59 -0
  61. package/contracts/producer-ipc/v1/README.md +137 -0
  62. package/dist/check-runner.d.ts +5 -0
  63. package/dist/check-runner.d.ts.map +1 -1
  64. package/dist/check-runner.js +16 -2
  65. package/dist/check-runner.js.map +1 -1
  66. package/dist/control-journal.d.ts +20 -0
  67. package/dist/control-journal.d.ts.map +1 -0
  68. package/dist/control-journal.js +73 -0
  69. package/dist/control-journal.js.map +1 -0
  70. package/dist/daily-view-input.d.ts +44 -0
  71. package/dist/daily-view-input.d.ts.map +1 -0
  72. package/dist/daily-view-input.js +68 -0
  73. package/dist/daily-view-input.js.map +1 -0
  74. package/dist/daily-view-render.d.ts +4 -0
  75. package/dist/daily-view-render.d.ts.map +1 -0
  76. package/dist/daily-view-render.js +41 -0
  77. package/dist/daily-view-render.js.map +1 -0
  78. package/dist/daily-view.d.ts +74 -0
  79. package/dist/daily-view.d.ts.map +1 -0
  80. package/dist/daily-view.js +170 -0
  81. package/dist/daily-view.js.map +1 -0
  82. package/dist/dashboard-cli.d.ts +26 -1
  83. package/dist/dashboard-cli.d.ts.map +1 -1
  84. package/dist/dashboard-cli.js +121 -3
  85. package/dist/dashboard-cli.js.map +1 -1
  86. package/dist/dashboard-harness.d.ts +19 -0
  87. package/dist/dashboard-harness.d.ts.map +1 -0
  88. package/dist/dashboard-harness.js +75 -0
  89. package/dist/dashboard-harness.js.map +1 -0
  90. package/dist/dashboard-herdr.d.ts.map +1 -1
  91. package/dist/dashboard-herdr.js +7 -2
  92. package/dist/dashboard-herdr.js.map +1 -1
  93. package/dist/dashboard-host-contract.d.ts +111 -0
  94. package/dist/dashboard-host-contract.d.ts.map +1 -0
  95. package/dist/dashboard-host-contract.js +14 -0
  96. package/dist/dashboard-host-contract.js.map +1 -0
  97. package/dist/dashboard-host-transport.d.ts +15 -0
  98. package/dist/dashboard-host-transport.d.ts.map +1 -0
  99. package/dist/dashboard-host-transport.js +122 -0
  100. package/dist/dashboard-host-transport.js.map +1 -0
  101. package/dist/dashboard-host.d.ts +149 -0
  102. package/dist/dashboard-host.d.ts.map +1 -0
  103. package/dist/dashboard-host.js +329 -0
  104. package/dist/dashboard-host.js.map +1 -0
  105. package/dist/dashboard-observation.d.ts +28 -0
  106. package/dist/dashboard-observation.d.ts.map +1 -0
  107. package/dist/dashboard-observation.js +86 -0
  108. package/dist/dashboard-observation.js.map +1 -0
  109. package/dist/debrief-contract.d.ts +65 -0
  110. package/dist/debrief-contract.d.ts.map +1 -0
  111. package/dist/debrief-contract.js +151 -0
  112. package/dist/debrief-contract.js.map +1 -0
  113. package/dist/debrief-fixture.d.ts +16 -0
  114. package/dist/debrief-fixture.d.ts.map +1 -0
  115. package/dist/debrief-fixture.js +41 -0
  116. package/dist/debrief-fixture.js.map +1 -0
  117. package/dist/debrief-host.d.ts +59 -0
  118. package/dist/debrief-host.d.ts.map +1 -0
  119. package/dist/debrief-host.js +49 -0
  120. package/dist/debrief-host.js.map +1 -0
  121. package/dist/debrief-render.d.ts +5 -0
  122. package/dist/debrief-render.d.ts.map +1 -0
  123. package/dist/debrief-render.js +65 -0
  124. package/dist/debrief-render.js.map +1 -0
  125. package/dist/debrief.d.ts +90 -0
  126. package/dist/debrief.d.ts.map +1 -0
  127. package/dist/debrief.js +263 -0
  128. package/dist/debrief.js.map +1 -0
  129. package/dist/delegate-types.d.ts +2 -0
  130. package/dist/delegate-types.d.ts.map +1 -1
  131. package/dist/delegate-types.js.map +1 -1
  132. package/dist/delegate.d.ts.map +1 -1
  133. package/dist/delegate.js +1 -0
  134. package/dist/delegate.js.map +1 -1
  135. package/dist/dispatch-control.d.ts +45 -0
  136. package/dist/dispatch-control.d.ts.map +1 -0
  137. package/dist/dispatch-control.js +76 -0
  138. package/dist/dispatch-control.js.map +1 -0
  139. package/dist/effect-profile-runtime.d.ts +40 -0
  140. package/dist/effect-profile-runtime.d.ts.map +1 -0
  141. package/dist/effect-profile-runtime.js +51 -0
  142. package/dist/effect-profile-runtime.js.map +1 -0
  143. package/dist/effect-profile.d.ts +40 -0
  144. package/dist/effect-profile.d.ts.map +1 -0
  145. package/dist/effect-profile.js +152 -0
  146. package/dist/effect-profile.js.map +1 -0
  147. package/dist/execution-retention.d.ts +90 -0
  148. package/dist/execution-retention.d.ts.map +1 -0
  149. package/dist/execution-retention.js +247 -0
  150. package/dist/execution-retention.js.map +1 -0
  151. package/dist/experiment-contract.d.ts +56 -0
  152. package/dist/experiment-contract.d.ts.map +1 -0
  153. package/dist/experiment-contract.js +80 -0
  154. package/dist/experiment-contract.js.map +1 -0
  155. package/dist/experiment-state.d.ts +22 -0
  156. package/dist/experiment-state.d.ts.map +1 -0
  157. package/dist/experiment-state.js +79 -0
  158. package/dist/experiment-state.js.map +1 -0
  159. package/dist/experiment-store.d.ts +28 -0
  160. package/dist/experiment-store.d.ts.map +1 -0
  161. package/dist/experiment-store.js +130 -0
  162. package/dist/experiment-store.js.map +1 -0
  163. package/dist/experiment.d.ts +65 -0
  164. package/dist/experiment.d.ts.map +1 -0
  165. package/dist/experiment.js +357 -0
  166. package/dist/experiment.js.map +1 -0
  167. package/dist/factory-contract.d.ts +79 -0
  168. package/dist/factory-contract.d.ts.map +1 -0
  169. package/dist/factory-contract.js +89 -0
  170. package/dist/factory-contract.js.map +1 -0
  171. package/dist/factory-migration.d.ts +20 -0
  172. package/dist/factory-migration.d.ts.map +1 -0
  173. package/dist/factory-migration.js +55 -0
  174. package/dist/factory-migration.js.map +1 -0
  175. package/dist/factory-order.d.ts +848 -0
  176. package/dist/factory-order.d.ts.map +1 -0
  177. package/dist/factory-order.js +83 -0
  178. package/dist/factory-order.js.map +1 -0
  179. package/dist/factory-registry.d.ts +121 -0
  180. package/dist/factory-registry.d.ts.map +1 -0
  181. package/dist/factory-registry.js +133 -0
  182. package/dist/factory-registry.js.map +1 -0
  183. package/dist/file-lock.d.ts +8 -2
  184. package/dist/file-lock.d.ts.map +1 -1
  185. package/dist/file-lock.js +78 -19
  186. package/dist/file-lock.js.map +1 -1
  187. package/dist/herdr-poll.d.ts +8 -0
  188. package/dist/herdr-poll.d.ts.map +1 -1
  189. package/dist/herdr-poll.js +23 -0
  190. package/dist/herdr-poll.js.map +1 -1
  191. package/dist/index.d.ts +20 -0
  192. package/dist/index.d.ts.map +1 -1
  193. package/dist/index.js +20 -0
  194. package/dist/index.js.map +1 -1
  195. package/dist/intent-application.d.ts +17 -0
  196. package/dist/intent-application.d.ts.map +1 -0
  197. package/dist/intent-application.js +113 -0
  198. package/dist/intent-application.js.map +1 -0
  199. package/dist/intent-control.d.ts +201 -0
  200. package/dist/intent-control.d.ts.map +1 -0
  201. package/dist/intent-control.js +110 -0
  202. package/dist/intent-control.js.map +1 -0
  203. package/dist/intent-scheduling.d.ts +9 -0
  204. package/dist/intent-scheduling.d.ts.map +1 -0
  205. package/dist/intent-scheduling.js +15 -0
  206. package/dist/intent-scheduling.js.map +1 -0
  207. package/dist/ledger-append.d.ts +15 -0
  208. package/dist/ledger-append.d.ts.map +1 -0
  209. package/dist/ledger-append.js +94 -0
  210. package/dist/ledger-append.js.map +1 -0
  211. package/dist/ledger.d.ts +11 -0
  212. package/dist/ledger.d.ts.map +1 -1
  213. package/dist/ledger.js +3 -7
  214. package/dist/ledger.js.map +1 -1
  215. package/dist/native-session-target.d.ts +9 -0
  216. package/dist/native-session-target.d.ts.map +1 -0
  217. package/dist/native-session-target.js +29 -0
  218. package/dist/native-session-target.js.map +1 -0
  219. package/dist/native-session.d.ts +59 -0
  220. package/dist/native-session.d.ts.map +1 -0
  221. package/dist/native-session.js +154 -0
  222. package/dist/native-session.js.map +1 -0
  223. package/dist/order-schedule.d.ts +37 -0
  224. package/dist/order-schedule.d.ts.map +1 -0
  225. package/dist/order-schedule.js +81 -0
  226. package/dist/order-schedule.js.map +1 -0
  227. package/dist/ordinary-children.d.ts +52 -0
  228. package/dist/ordinary-children.d.ts.map +1 -0
  229. package/dist/ordinary-children.js +93 -0
  230. package/dist/ordinary-children.js.map +1 -0
  231. package/dist/producer-ipc-contract.d.ts +29 -0
  232. package/dist/producer-ipc-contract.d.ts.map +1 -0
  233. package/dist/producer-ipc-contract.js +29 -0
  234. package/dist/producer-ipc-contract.js.map +1 -0
  235. package/dist/producer-ipc.d.ts +55 -0
  236. package/dist/producer-ipc.d.ts.map +1 -0
  237. package/dist/producer-ipc.js +143 -0
  238. package/dist/producer-ipc.js.map +1 -0
  239. package/dist/resource-budget.d.ts +334 -0
  240. package/dist/resource-budget.d.ts.map +1 -0
  241. package/dist/resource-budget.js +415 -0
  242. package/dist/resource-budget.js.map +1 -0
  243. package/dist/retention-contract.d.ts +73 -0
  244. package/dist/retention-contract.d.ts.map +1 -0
  245. package/dist/retention-contract.js +104 -0
  246. package/dist/retention-contract.js.map +1 -0
  247. package/dist/retention-json.d.ts +3 -0
  248. package/dist/retention-json.d.ts.map +1 -0
  249. package/dist/retention-json.js +32 -0
  250. package/dist/retention-json.js.map +1 -0
  251. package/dist/run-child.d.ts +4 -0
  252. package/dist/run-child.d.ts.map +1 -1
  253. package/dist/run-child.js +16 -2
  254. package/dist/run-child.js.map +1 -1
  255. package/dist/run-herdr.d.ts +6 -0
  256. package/dist/run-herdr.d.ts.map +1 -1
  257. package/dist/run-herdr.js +19 -6
  258. package/dist/run-herdr.js.map +1 -1
  259. package/dist/vendor/adoption.d.ts +129 -0
  260. package/dist/vendor/adoption.d.ts.map +1 -0
  261. package/dist/vendor/adoption.js +102 -0
  262. package/dist/vendor/adoption.js.map +1 -0
  263. package/dist/work-ledger-destination.d.ts +20 -0
  264. package/dist/work-ledger-destination.d.ts.map +1 -0
  265. package/dist/work-ledger-destination.js +131 -0
  266. package/dist/work-ledger-destination.js.map +1 -0
  267. package/dist/work-ledger-json.d.ts +25 -0
  268. package/dist/work-ledger-json.d.ts.map +1 -0
  269. package/dist/work-ledger-json.js +267 -0
  270. package/dist/work-ledger-json.js.map +1 -0
  271. package/dist/work-ledger-occurrences.d.ts +227 -0
  272. package/dist/work-ledger-occurrences.d.ts.map +1 -0
  273. package/dist/work-ledger-occurrences.js +115 -0
  274. package/dist/work-ledger-occurrences.js.map +1 -0
  275. package/dist/work-ledger-projection.d.ts +295 -0
  276. package/dist/work-ledger-projection.d.ts.map +1 -0
  277. package/dist/work-ledger-projection.js +237 -0
  278. package/dist/work-ledger-projection.js.map +1 -0
  279. package/dist/work-ledger-snapshot.d.ts +29 -0
  280. package/dist/work-ledger-snapshot.d.ts.map +1 -0
  281. package/dist/work-ledger-snapshot.js +267 -0
  282. package/dist/work-ledger-snapshot.js.map +1 -0
  283. package/dist/work-ledger-types.d.ts +261 -0
  284. package/dist/work-ledger-types.d.ts.map +1 -0
  285. package/dist/work-ledger-types.js +13 -0
  286. package/dist/work-ledger-types.js.map +1 -0
  287. package/dist/work-ledger-validation.d.ts +14 -0
  288. package/dist/work-ledger-validation.d.ts.map +1 -0
  289. package/dist/work-ledger-validation.js +226 -0
  290. package/dist/work-ledger-validation.js.map +1 -0
  291. package/dist/work-ledger.d.ts +43 -0
  292. package/dist/work-ledger.d.ts.map +1 -0
  293. package/dist/work-ledger.js +225 -0
  294. package/dist/work-ledger.js.map +1 -0
  295. package/extensions/delegate-chain.ts +1 -0
  296. package/extensions/delegation-native.ts +12 -0
  297. package/extensions/delegation.ts +4 -3
  298. package/extensions/execute-child.ts +34 -4
  299. package/extensions/grants.ts +2 -0
  300. package/extensions/ordinary-runtime.ts +14 -0
  301. package/extensions/run-delegation.ts +7 -7
  302. package/extensions/session.ts +3 -1
  303. package/package.json +78 -4
  304. package/src/check-runner.ts +20 -2
  305. package/src/control-journal.ts +26 -0
  306. package/src/daily-view-input.ts +59 -0
  307. package/src/daily-view-render.ts +44 -0
  308. package/src/daily-view.ts +152 -0
  309. package/src/dashboard-cli.ts +103 -4
  310. package/src/dashboard-harness.ts +28 -0
  311. package/src/dashboard-herdr.ts +7 -2
  312. package/src/dashboard-host-contract.ts +42 -0
  313. package/src/dashboard-host-transport.ts +38 -0
  314. package/src/dashboard-host.ts +168 -0
  315. package/src/dashboard-observation.ts +44 -0
  316. package/src/debrief-contract.ts +127 -0
  317. package/src/debrief-fixture.ts +29 -0
  318. package/src/debrief-host.ts +53 -0
  319. package/src/debrief-render.ts +49 -0
  320. package/src/debrief.ts +198 -0
  321. package/src/delegate-types.ts +2 -0
  322. package/src/delegate.ts +1 -0
  323. package/src/dispatch-control.ts +81 -0
  324. package/src/effect-profile-runtime.ts +46 -0
  325. package/src/effect-profile.ts +129 -0
  326. package/src/execution-retention.ts +230 -0
  327. package/src/experiment-contract.ts +66 -0
  328. package/src/experiment-state.ts +44 -0
  329. package/src/experiment-store.ts +90 -0
  330. package/src/experiment.ts +231 -0
  331. package/src/factory-contract.ts +47 -0
  332. package/src/factory-migration.ts +29 -0
  333. package/src/factory-order.ts +56 -0
  334. package/src/factory-registry.ts +60 -0
  335. package/src/file-lock.ts +47 -11
  336. package/src/herdr-poll.ts +18 -0
  337. package/src/index.ts +32 -0
  338. package/src/intent-application.ts +90 -0
  339. package/src/intent-control.ts +107 -0
  340. package/src/intent-scheduling.ts +14 -0
  341. package/src/ledger-append.ts +72 -0
  342. package/src/ledger.ts +3 -9
  343. package/src/native-session-target.ts +23 -0
  344. package/src/native-session.ts +139 -0
  345. package/src/order-schedule.ts +42 -0
  346. package/src/ordinary-children.ts +59 -0
  347. package/src/producer-ipc-contract.ts +26 -0
  348. package/src/producer-ipc.ts +107 -0
  349. package/src/resource-budget.ts +349 -0
  350. package/src/retention-contract.ts +84 -0
  351. package/src/retention-json.ts +20 -0
  352. package/src/run-child.ts +13 -2
  353. package/src/run-herdr.ts +11 -7
  354. package/src/vendor/adoption.ts +109 -0
  355. package/src/work-ledger-destination.ts +113 -0
  356. package/src/work-ledger-json.ts +228 -0
  357. package/src/work-ledger-occurrences.ts +99 -0
  358. package/src/work-ledger-projection.ts +262 -0
  359. package/src/work-ledger-snapshot.ts +246 -0
  360. package/src/work-ledger-types.ts +229 -0
  361. package/src/work-ledger-validation.ts +174 -0
  362. package/src/work-ledger.ts +186 -0
@@ -0,0 +1,176 @@
1
+ # Connected producer dashboard host v1 (local candidate)
2
+
3
+ This is the existing dashboard's explicit operational host, not another scheduler or learning-decision
4
+ store. It launches no models. Source through6212b9d is public draft PR35; subsequent ordinary-boundary
5
+ amendments are LOCAL ONLY. Original overall CHANGES-REQUESTED remains. No live/authenticated factory acceptance follows.
6
+
7
+ ## Additive original ordinary control and revision application
8
+
9
+ Optional `ordinaryDigest` pins the original port retrieved using `ordinaryChildrenFor(originalExtensionAPI)`
10
+ BEFORE dispatch. Pass it as `options.ordinary` and independently approve native requests via `authority.ordinary`.
11
+ `ordinary-cancel` carries the exact closed v1 request through this SAME host journal/CLI handler. It requests
12
+ original abort, never reconstructs a PID/pane or replaces a caller promise. Failed final acknowledgement
13
+ remains failure despite cancellation/complete bytes. Late opt-in coverage gaps and failed/unknown ordinary
14
+ control withhold presentation quiescence. Absent original ports cannot cancel; old configs are unchanged.
15
+ See `contracts/ordinary-control/v1/README.md` for limits. The legacy P11 bridge remains separately supported.
16
+
17
+ Existing `intent`/`intent-reconcile` also carry opt-in `intent-request-v2` / `revise-selection` through the
18
+ actual P01 controller: direct non-scope successors, not topology/owner/policy/effect expansion. No acceptance
19
+ transfer or duplicate effect. See `contracts/intent-control/v2/README.md`. These narrow formerly absent A
20
+ paths; unretained/crashed handles, wider revision domains and atomic authenticated live TUI steering remain
21
+ unqualified. No new trust/case/blind/control store or worker observation hook is introduced.
22
+
23
+ ### Original ordinary intent boundary
24
+
25
+ When ordinaryDigest is bound, intent application also requires the ORIGINAL ordinary port and separate
26
+ native approval. Busy direction is retained as `ordinary-intent-pending` in this existing journal without
27
+ P01 application. The original controller's bounded admission hold prevents new ordinary execution while
28
+ preserving running callers. Pending transport is historical request data, not application authority.
29
+ Only explicit `intent-reconcile`, after original ordinary and native resource quiescence, can apply it.
30
+ A hold spans awaited native append/sync and releases only after an explicit native applied/not-applied
31
+ receipt AND successful final host acknowledgement. Failed/unknown acknowledgement retains the hold even
32
+ with complete effect bytes; refresh, duplicate and reopen do not release it or replay an effect. Missing
33
+ original capability or late/unretained coverage is not reconstructed. No additional control database.
34
+ Older host writers lack this guard and must not be used to resume new pending ordinary operations.
35
+
36
+ ## Loaded artifacts and independent authority
37
+
38
+ `pi-daddy/dashboard-harness` exports `loadDashboardHarness(artifactRoot, manifest, privateParent)`.
39
+ The manifest is `DashboardHarnessArtifact`: version `dashboard-harness-artifact-v1`, exact sourceCommit
40
+ `1c02194d4a3709d14890a5fbbad91ff5f0151f65`, relative compiled `files` SHA256 map, canonical existing
41
+ `typeboxRoot` and its `typeboxPackageSha256`. This exact harness commit is a LOCAL dependency, not claimed
42
+ public. Compile actual source first; the loader neither compiles nor installs. The ordinary fixture's37
43
+ source bodies/provenance demonstrate the real adapters, generated P01/retention readers and core writers.
44
+
45
+ An approved artifact has `package.json` bytes `{"type":"module"}`, `core.js` re-exporting the actual
46
+ work-capture/work-signals/intervention/factory-calibration core modules, and the original relative module
47
+ layout under `packages/adapters/src/` and `packages/core/src/`. The callable entries are learning-journal,
48
+ trust-lifecycle, archive-policy/observer/checkpoint, archived-work, execution-retention-archive,
49
+ work-case-review, blind-intervention, evidence-archive, work-signal-observation/cases and work-case-archive.
50
+ The learning journal is a genuine named module export at this pin, not yet an adapters-root re-export.
51
+
52
+ The loader checks bounded regular non-group/other-writable bytes, copies at most128 files/8MiB into an
53
+ exclusive private directory, loads the real modules and rechecks bytes. Fresh paths avoid substituting an
54
+ old module-cache instance for changed disk bytes. It returns `{api, artifactDigest, directory, manifest}`.
55
+ Typebox remains the actual existing peer; package metadata is bound, not its whole source graph. This is
56
+ loaded artifact identity, NOT human/module authentication, code confinement or hostile same-UID resistance.
57
+ No arbitrary unreviewed module should be authorized merely because someone can compute its checksum.
58
+
59
+ `pi-daddy/dashboard-host` exports `createDashboardHost` / `openDashboardHost`. Supply the loaded `api`, exact
60
+ `DashboardHostConfig`, original budget binding, optional ORIGINAL `openExperiment` controller and an
61
+ independent current `authority()` callback. The callback returns host/config and whole request digest
62
+ allowlists, independent P01 context and native dispatch/experiment authorities. Request fields and files
63
+ never supply authority to that callback. Copying a controller/interface or supplying a pin-shaped string
64
+ cannot substitute for the original branded object. Structural host authority is still not authentication.
65
+
66
+ Creation is explicit and exclusive. Reconnect ONLY opens `trustDirectory/producer-host`; no caller-selected
67
+ replacement attention directory. The original trust lifecycle validates its archive-local registration,
68
+ policy identity and fixed store. Its predeclared attention policy must allow no more than FIVE questions.
69
+ Host config binds source policy, selected initial P01 snapshot, budget/experiment, author, initial case/blind
70
+ IDs and loaded artifact digest. Changed config/another policy/store needs new explicit authority; no reset.
71
+
72
+ ## Source → checkpoint → semantic daily view
73
+
74
+ Config sources have IDs and kind `work`, `facts` or `retention`. There may be at most one work source.
75
+ Explicit `observe` requests select one configured source and exact previous checkpoint; max32 sources.
76
+ No worker hooks, status messages, directory scan, automatic watcher or refresh-driven collection is added.
77
+ The journal claims the request BEFORE the actual harness ingestion. Policy path/SHA/root/expiry are checked
78
+ through real `archivePolicyBinding` and `ingestPolicySource`, not inferred from mtime or receipt shape.
79
+
80
+ - `facts`: an exact retained JSON/JSONL object containing genuine host-declared `WorkSignalFacts`; payload
81
+ `{sourceId, previousCheckpointId, facts:null}`. This does not make declarations authenticated truth.
82
+ - `work`: payload `{sourceId, previousCheckpointId, facts: <observed facts SOURCE MANIFEST ID>}`. Only an
83
+ already observed configured fact source is accepted, not caller replacement facts. The actual pinned P01
84
+ projector and `captureArchivedWorkSignals` bind scope/obligations and retain observation/case/linkage IDs.
85
+ Nomination failure preserves raw checkpoint plus semantic failure and never invents a successful case.
86
+ - `retention`: exact v2 policy with `contentPolicy:referenced-blobs`; facts:null. Real manifest/blob ingestion,
87
+ readback and `projectRetainedExecutions` feed the existing daily reader. Missing blobs stay gaps.
88
+
89
+ Frames re-read retained bytes and recompute projections. Native files do not prove an active TUI branch;
90
+ activeBranch remains null. Source SHA/checkpoints, unobserved sources, partial coverage, independently
91
+ supplied acceptance and declared facts remain separate. If control selection is unreadable, the initial
92
+ host declaration is labelled unavailable, acceptance is withheld, but explicit observation can still retain
93
+ incomplete bytes. Steering cannot use that fallback. Scope-changing intent requests update the actual
94
+ control selection; stale UI selection/CAS cannot overwrite it.
95
+
96
+ Only explicitly selected exact sources are semantically consumed. Reference-only/redacted bytes are not
97
+ masqueraded as exact replay. Ingestion/access policy expiry is enforced on these paths; no redactor,
98
+ credential-safe export approval UI or physical retention-duration deletion is invented here. Those remaining
99
+ P03.4 operations belong to a concrete separately supplied harness policy adapter. No history is deleted.
100
+
101
+ ## Attention, pause and actual presentation acknowledgement
102
+
103
+ The host's independent `presence()` returns `{present, closing, evidenceDigest, expiresAt}` or null.
104
+ It must be sourced/authorized outside worker metadata. Idle, PID, title and agent-end events do not populate
105
+ it. Missing, expired, changed or absent presence hides cards on read without writing; explicit `defer`
106
+ retains weekly deferral. Neither a declaration nor a socket path authenticates a human.
107
+
108
+ A `present` request includes `{userPresent,closing,evidenceDigest,dispatchRevision}`. It checks the real
109
+ resource pause at zero active reservations (and optional original experiment quiescence) before/after
110
+ opening the existing manual presenter. Selected case detector version/population must match the real trust
111
+ policy. Each actual case/blind card reserves attention through ORIGINAL `trust.expose` before checkpoint
112
+ CAS. Silent/retired/insufficient policy defers; partial/failed reservations are never refunded. The fixed
113
+ checkpoint cannot change card IDs or refill on answers/reconnect. Blind occupies one of five total slots.
114
+ Zero-card issues and explicit v2/v3 selection remain visible.
115
+
116
+ A successful preparation returns its debrief frame digest, **prepared-not-delivery**. The actual dashboard
117
+ can render that frame, then an independently approved `presented` request names the exact frame digest.
118
+ The host rechecks original presence and pause before recording its presentation acknowledgement. This is
119
+ host-acknowledged delivery, not independently verified human perception or globally atomic live-TUI pause.
120
+ Another authorized controller could change a boundary after a snapshot; reads hide stale presentations and
121
+ resume/control actions close the original presenter. No stronger atomic transport primitive is invented.
122
+
123
+ `debrief` payload is the existing explicit command line (`label 1 skip`, `choose none`, `reveal`, etc.).
124
+ The original selected-batch/case writer and immutable blind quality writer own decisions. The host journal
125
+ holds only request/attention/presentation transport state and references/digests, not a cloned decision
126
+ history. Failed label acknowledgement propagates through the actual dashboard action rather than being
127
+ lost in a void return. Reopen reads original quality; it neither votes nor reveals automatically.
128
+
129
+ ## Exact steering and original lifetimes
130
+
131
+ Requests are closed bounded `DashboardHostRequest` objects: version1.0, requestId, hostDigest,
132
+ expectedTip, selectionDigest, operation and payload. Use `dashboardHostRequestDigest` for independently
133
+ approved whole requests. Obtain tip/selectionDigest by reading `frame()`; reading them confers no authority.
134
+
135
+ - `dispatch`: original pause/resume `DispatchRequest` → resource controls. Native expected revision and
136
+ independently approved digest remain required. Busy reservations leave a durable pending barrier.
137
+ - `dispatch-reconcile`: explicit original request → existing reconcile; frame/refresh never calls it.
138
+ - `intent` / `intent-reconcile`: original `IntentRequest` → actual P01 scope/recorded alternative/priority
139
+ APIs and their original no owner/policy/effect expansion guards. General entity/topology expansion is
140
+ still outside the bounded adapter, not accepted merely by a UI action.
141
+ - `cancel`: `{dispatch:<legacy cancel-execution request>, cancellation:<ExperimentCancellation>}`. IDs,
142
+ current legacy revision, exact target and both independent approvals are checked. Cancellation invokes
143
+ ONLY the supplied original experiment controller, not a reopened PID/pane/terminal target. Reopen cannot
144
+ recover lost handles. This bridges the older protocol for the supported P11 controller, not arbitrary
145
+ live pi/Herdr or every ordinary child cancellation route.
146
+
147
+ Host journal CAS admits one exact request. Duplicate IDs read retained results without effects. A stale CAS
148
+ or immutable-ID mismatch rejected before any claim/effect leaves that in-memory host usable; it does not invent
149
+ unknown acknowledgement. Once a claim/effect may have happened, a required append/sync/close/release failure
150
+ remains failed/unknown even if bytes/effects exist. Best-effort host-failure
151
+ markers preserve that separately; their own persistence can fail. `reconcile()` is read-only, not a retry.
152
+ An unresolved claim/failure does not permit new dispatch, takeover, refund or unreceipted effect replay.
153
+ Original worker outcomes/accounting remain independent of host/control success.
154
+
155
+ ## Existing dashboard process/plugin
156
+
157
+ `serveDashboardHost(privateSocketPath, originalHost)` runs inside the owning process. The existing dashboard
158
+ uses `--host-socket /private/host.sock` or explicit `PI_DADDY_HOST_SOCKET`, carried by the existing Herdr plugin
159
+ open path. It makes read-only frame requests on refresh and forwards only explicit approved JSON action
160
+ lines. `--once --daily-json --host-socket ...` is a real read-only CLI path. Programmatic
161
+ `runDashboard(argv, env, {connected:host})` uses the same handlers. No new monitoring service or scheduler.
162
+
163
+ The Unix socket is bounded/private, at most4 clients,64KiB request/512KiB response and5s client deadlines.
164
+ Close drains admitted host requests, not arbitrary worker tasks. A disconnected/failed reply is unknown;
165
+ never retry an action automatically. Resource/experiment owners retain their own lifetime/drain duties.
166
+ Blocking filesystem I/O, hostile same-UID actors, deployed privacy consent, authenticated modules/humans,
167
+ arbitrary TUI targeting and real model/provider qualification remain distinct B/C limits.
168
+
169
+ ## Ordinary retention opt-in
170
+
171
+ Set `PI_GRANTS_RETAIN_NATIVE_SESSIONS=1` and an existing canonical private `PI_GRANTS_NATIVE_SESSION_ROOT`
172
+ in the ordinary host environment. Shared delegate/all/chain planning allocates a new per-execution directory
173
+ and passes its `--session` target into the recorded plan; model tool parameters cannot choose the path.
174
+ Invalid/reused/nonprivate targets refuse. Default children remain ephemeral. Existing asynchronous retention
175
+ captures available native bytes at the same execution seam; it does not create observer session entries,
176
+ claim final-source completeness, or infer an active TUI branch from a file tail.
@@ -0,0 +1,146 @@
1
+ # P08 manual debrief / label / blind view — integration contract for P10/P12/P13
2
+
3
+ Local implementation candidate, not overall acceptance or live qualification. This is the existing
4
+ pi-daddy dashboard/Herdr plugin path, not a new product. P04 read-only daily view and P05 intent controls
5
+ remain separate. Labels/choices never dispatch workers, alter grants/work acceptance, adopt a candidate
6
+ or establish causality.
7
+
8
+ ## Immutable actual inputs
9
+
10
+ `provenance.json` pins exact Git blob bytes:
11
+ - work-capture schema/review contract and seven-case/batch/review fixtures at harness
12
+ **4460af93c55aa3a52df262782cd339ad374113b8**;
13
+ - intervention manifest/assessment/public blind view/choice/reveal and actual retained synthetic artifacts at
14
+ **0475e1f5684e01992850c48aa14841751711701a**.
15
+
16
+ The vendored source documents and fixtures are unchanged. Original public zero-seed comparison fixtures
17
+ are not real blinding, live casting, authenticated human decisions or routing authority. The read path
18
+ validates closed schemas, case identities/reason-cost consistency, history digests/links and opaque artifact
19
+ membership plus actual bytes. Case/page/history callbacks must come from the genuine configured harness
20
+ owner; an arbitrary object/"author" field does not supply that provenance.
21
+
22
+ ## Existing render/action path
23
+
24
+ `dashboardFrame({cwd, debrief: presenter})` renders the actual validated presenter. `dashboardDebriefAction`
25
+ and the existing CLI's own input handler call its explicit actions. Neither uses worker prompts, terminal
26
+ transport, observer messages or P05 control APIs. `runDashboard(argv, env, {debrief: presenter})` accepts an
27
+ already configured/opened host presenter; it does **not** override a host's closed/deferred state.
28
+
29
+ For the standalone synthetic manual view:
30
+
31
+ ```sh
32
+ pi-daddy-dashboard --once --debrief-fixture --no-color
33
+ pi-daddy-dashboard --once --debrief-fixture --debrief-json
34
+ # Without --once, input belongs only to this dashboard:
35
+ # choose tie variant-... variant-...
36
+ # reveal
37
+ # close
38
+ # open
39
+ ```
40
+
41
+ `PI_DADDY_DEBRIEF_FIXTURE=1` selects that same clearly marked demo through the existing plugin-open seam and
42
+ participates in pane reuse identity. Existing plugin-open ledger/protocol prerequisites still apply; the
43
+ standalone fixture CLI does not waive those native host guards. No environment/module/file loader can inject a decision writer. CLI
44
+ fixture case labeling is **disabled**, because it has no genuine harness writer. Fixture-only blind actions
45
+ use a session-memory checkpoint and known synthetic mapping; restart persistence or real blinded study is
46
+ not claimed. The fixed first four case IDs plus one blind slot never paginate into extra questions.
47
+
48
+ Programmatic integration uses the real host API:
49
+
50
+ ```ts
51
+ const reviewer = createWorkCaseReviewer(harnessArchiveRoot, batchManifestId, verifiedOperatorIdentity);
52
+ const presenter = createDebriefPresenter({
53
+ scope: hostOwnedPresentationScope, operatorIdentity: verifiedOperatorIdentity, reviewer,
54
+ blind: genuineP12BlindPort, // optional: view/readArtifact/choose/reveal only
55
+ persistence: hostOwnedAttentionCheckpoint,
56
+ });
57
+ await presenter.open({mode:'manual', userPresent:true}); // explicit operator action, not agent_end
58
+ await runDashboard(args, env, {debrief: presenter});
59
+ ```
60
+
61
+ No second dashboard decision ledger is created. `reviewer.decide` writes only the harness-owned digest-bound
62
+ case history. P07's operator-selected capability is not a human authenticator; real identity remains the
63
+ host's responsibility. Callbacks are captured at construction, not resolved from incoming case metadata.
64
+
65
+ ## Five-slot attention budget and reopening
66
+
67
+ One `scope` must be independently bound by the host to the actual batch/operator/presentation interval, not
68
+ a pane title, file tail, repeated agent_end or a new window. The first explicit open reserves a fixed set:
69
+ **at most five total cards/questions**, not five cases plus a blind choice. A blind comparison takes one
70
+ slot, leaving four case cards. With seven incidents this leaves three unexposed/unresolved. All variants
71
+ within the one bounded blind question share its slot. Current implementation supports two to four eligible
72
+ variants, up to four retained artifacts each, 64 KiB per artifact and short marked previews.
73
+
74
+ Reservation is checkpointed and exact host readback is checked before exposure; a callback returning success
75
+ without retained matching state is not sufficient. Closing/rendering/answering/skipping never refunds slots,
76
+ advances the page or fills a vacated blind slot with another case. A host may choose `offset` for a new
77
+ explicit weekly/manual budget; it is pinned in the checkpoint and cannot change within the same scope. `budgetSpent` remains visible even while
78
+ closed; exhausted allowance defers new questions and reopens only the same slots. Missing/failed checkpoint
79
+ state is unknown, never a fresh allowance. Changed batch/blind identity refuses rather than remapping cards.
80
+ Unanswered cases remain unanswered in harness history. Skip/uncertain and unselected blind choice remain
81
+ unresolved, not agreement or a quality vote.
82
+
83
+ `DebriefPersistence` is a **host-owned attention/transport** interface:
84
+ - `durability: 'host-owned'` for the configured host, or `'fixture-memory'` only in explicit fixture mode;
85
+ - `load()` returns null only if genuinely never initialized, otherwise an exact `DebriefCheckpoint`;
86
+ - `compareAndSwap(expectedDigest, next)` must durably/atomically bind the scope and whole checkpoint before
87
+ returning. Missing/deleted/partial/rollback state, ambiguous commits and concurrent stale saves must refuse.
88
+ A host cannot report null for lost prior state and thereby mint a fresh pause budget.
89
+
90
+ The product does not install a persistence store. Its checkpoint contains fixed card IDs/public blind digest,
91
+ immutable pending review requests, quality choice and reveal-attempt state—**not authoritative case decisions**.
92
+ Case decisions are always rechecked against actual harness history, including the separately configured
93
+ operator identity for acknowledgement. The host must configure the same legitimate identity in reviewer
94
+ and presenter; missing identity disables labels, and a different author is never credited to this request. Tests use a separately configured owned
95
+ fixture-host checkpoint with the existing non-expiring lock and synced append; this is not a deployed host
96
+ service or hostile-filesystem/rollback qualification. Without a checkpoint, manual viewing is session-only
97
+ and real label/choice actions are unavailable. Reuse the same presenter to retain its session budget; a
98
+ process restart without genuine host restoration cannot claim per-pause continuity.
99
+
100
+ ## Explicit labels and unknown acknowledgement
101
+
102
+ `label({caseManifestId, priorDecisionId, disposition, note})` accepts only the real four-field P07 request and
103
+ only an exposed card. The CLI spelling is `label SLOT DISPOSITION NOTE`. The expected prior comes from the
104
+ shown snapshot, never silently advanced to overwrite a newer decision. One immutable request per card/pause
105
+ is saved before calling the genuine writer. Its replay calls history only; it never sends `decide` twice.
106
+ An exact current history record is required before displaying label-recorded. Unknown/failed/stale writer
107
+ acknowledgement is unresolved; `reconcile SLOT` reads the actual history without sending a label again.
108
+ A saved request whose writer was never reached remains unknown/unanswered; there is no blind automatic retry.
109
+ Corrections/new exposure require a separately governed host presentation, not unlimited questions this pause.
110
+
111
+ Dispositions: confirmed_defect, expected_behavior, exemplar, uncertain, skip. They are nominations/labels,
112
+ not scored-spec promotion, accepted work or agreement with a model. Render/schema success is not authority.
113
+
114
+ ## Quality before configuration/cost
115
+
116
+ Before choice, the comparison exposes only public opaque labels and verified artifact previews; blind manifest/assessment,
117
+ configuration/cost, arm IDs and filenames are not in the frame. Known A/B fixture captions are removed.
118
+ Arbitrary artifact text can still disclose identity: the UI explicitly warns rather than claiming perfect
119
+ blinding. Public fixture seeds/hashes may be independently linkable and must never be used for live blinding.
120
+
121
+ `choose({kind:'one'|'tie'|'none'|'insufficient',labels:[...]})` validates exact opaque membership, persists the
122
+ choice, then calls the actual blind interface. Reveal stays locked until that choice is acknowledged.
123
+ Choices lock once recorded by this presenter (stricter than permitting pre-reveal corrections). `reveal()`
124
+ persists the attempt before calling the private host method, validates the same choice/mapping, then displays
125
+ configuration/cost. Failed persistence reveals nothing. Reopening a new presenter with saved choice requires
126
+ an explicit same-choice confirmation against the restored blind port before reveal; the host must restore
127
+ its private seed/mapping. No new vote or changed post-reveal choice is allowed. No evaluation, causal claim,
128
+ automatic routing or adoption follows any choice.
129
+
130
+ ## Automatic/live status and remaining facts
131
+
132
+ **Automatic presentation is deliberately unqualified and deferred**, including a caller string claiming
133
+ verified-closing. There is no implemented verified suitable user closing pause/exposure-calibration-policy /
134
+ identity/durable-writer bridge. Repeated/transient agent_end, idle flags, file tails, busy work and absence
135
+ cannot authorize exposure. Busy/absent manual requests also defer. Existing host deferrals are not upgraded
136
+ by runDashboard. A <=5 page alone is not treated as proof of an attention budget.
137
+
138
+ Supported: actual existing manual render/action path, real pinned harness case writer and P12 primitive
139
+ integration in owned fixtures/programmatic ports, bounded checkpoint/reopen behavior, standalone frozen
140
+ CLI and fresh compiled plugin-command execution. Remaining: deployed genuine host writer/attention store,
141
+ verified automatic pause/policy/identity, private seed persistence, actual P12 live casting and live Herdr
142
+ qualification. Source fixture transpilation is not an installed harness package qualification.
143
+
144
+ P05 owned cancellation remains unfinished implementation work; general live steering remains unqualified.
145
+ P02/P04/P06 unsupported native/freshness/containment clauses remain. No worker messages, model/provider calls,
146
+ per-task model review, package lifecycle or publication is part of this implementation.
@@ -0,0 +1,32 @@
1
+ # Frozen intervention comparison primitives — P12 partial, P08 fixture input
2
+
3
+ This is a SEPARATE family from existing fixed-model `buildComparison`/`compare`. Their same-model/judge/input guards are unchanged. No model is launched here.
4
+
5
+ `freezeIntervention` binds an investigation digest, common scenario/rubric/fixture/held-out/harness/judge-policy inputs, mode, repetition/criterion/critical thresholds, resource metric and explicit candidate axes. Undeclared model/effort/skill/prompt/configuration changes reject. Multiple changed axes are a package intervention, not evidence of one variable's causal effect. LLM sampling is not claimed deterministic.
6
+
7
+ `assertInterventionRoles` is a pre-spend check over independently resolved HOST context. Missing roles and proposer/judge/subject canonical identity conflicts refuse. Same subjects may repeat across arms. It does not resolve providers, authenticate arbitrary context or qualify a delivery route. Do not derive qualification or expected evidence digests from incoming arm claims.
8
+
9
+ `assessIntervention` checks exact host-confirmed evidence digests and frozen input/cell policy. Delivery NOT-MEASURED/ERROR and missing/unknown/suspect cells keep the comparison incomplete; objective failure prevents judging/eligibility. Votes are retained per criterion. Actual output bytes must match per-cell/arm hashes; digests alone are missing evidence. Retained bytes are copied for later blind reads. Cheap failed arms cannot become eligible. Cheapest eligible is only a conditional measurement; routingDefault is always null and adoptionAuthorized false.
10
+
11
+ `interventionEvidenceFromResults` uses existing schema3 validation and retains complete source results/votes beside the summary. It requires recorded `source_hashes['intervention:manifest']` and `['intervention:inputs']`, matching model/mode/judge/plan, and supplied output bytes. It never stamps missing bindings onto historical runs. Multi-judge conversion is not yet supported rather than choosing a convenient panel vote. The orchestrator that records these bindings and qualifies actual execution remains integration work.
12
+
13
+ ## Blind view API
14
+
15
+ ```ts
16
+ const blind = createBlindComparison(manifest, recomputedAssessment);
17
+ const view = blind.view(); // opaque labels + artifact hashes + explicit clue limitation; no configuration/cost
18
+ const bytes = blind.readArtifact(label, artifactHash); // only retained bytes admitted to that label
19
+ blind.choose({kind:'one'|'tie'|'none'|'insufficient', labels:[/* opaque labels, or [] */]});
20
+ const revealed = blind.reveal(); // refuses before choice; different choice refuses after reveal
21
+ ```
22
+
23
+ An optional private seed supports fixtures/host-controlled restoration; real independent views need fresh private randomness, not a public fixed seed. Public view omits identity metadata, but arbitrary artifact text may reveal clues. The host must enforce user/judge identity, persist quality/seed/reveal state before exposure, and expose only the public view/read methods before choice. This in-memory API is not durable human authentication or proof a host did not leak the assessment/configuration. P08 must keep its total five-card budget and real pause/exposure boundaries.
24
+
25
+ `fixtures/` is generated by actual code from fixed synthetic evidence, retained Layout A/B bytes, fixture role identities and a public zero seed. It is NOT live qualification, real human blinding, efficacy or casting evidence. It supplies a concrete UI contract: blind-view.json before choice; choice.json; reveal.json only afterward.
26
+
27
+ Remaining P12: qualified model-backed orchestration, complete panel/durable blind workflow, verified role/receipt integration, applicable casting rows/uncertainty/revalidation and live P08 demonstration. Full acceptance and any routing/adoption default remain pending.
28
+
29
+ ```sh
30
+ node scripts/generate-intervention-fixture.mjs --check
31
+ node node_modules/vitest/vitest.mjs run packages/core/test/intervention.test.ts packages/core/test/intervention-results.test.ts packages/core/test/comparison.test.ts
32
+ ```
@@ -0,0 +1,29 @@
1
+ {
2
+ "manifestId": "a84186a1c1f272c80fe14387aeb3c8dd7242f6eacb6b76b0ef29a7343b254ffb",
3
+ "complete": true,
4
+ "arms": [
5
+ {
6
+ "armId": "a",
7
+ "state": "MEASURED",
8
+ "eligible": true,
9
+ "artifactDigests": [
10
+ "58905d872dd3c54a9705f67b05fa82edbad7af6476ae8993faf1a7b9fadfb905"
11
+ ],
12
+ "cost": 1,
13
+ "costUnit": "wall_ms"
14
+ },
15
+ {
16
+ "armId": "b",
17
+ "state": "MEASURED",
18
+ "eligible": true,
19
+ "artifactDigests": [
20
+ "3ee11136beb864f518252e5024dae9197421fbf97b6e981d3243c782b5c44bd0"
21
+ ],
22
+ "cost": 2,
23
+ "costUnit": "wall_ms"
24
+ }
25
+ ],
26
+ "cheapestEligible": "a",
27
+ "routingDefault": null,
28
+ "adoptionAuthorized": false
29
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "version": "blind-intervention-view-v1",
3
+ "cards": [
4
+ {
5
+ "label": "variant-4798fd88dc0c9767",
6
+ "artifactDigests": [
7
+ "58905d872dd3c54a9705f67b05fa82edbad7af6476ae8993faf1a7b9fadfb905"
8
+ ]
9
+ },
10
+ {
11
+ "label": "variant-5588a335bb82b8d5",
12
+ "artifactDigests": [
13
+ "3ee11136beb864f518252e5024dae9197421fbf97b6e981d3243c782b5c44bd0"
14
+ ]
15
+ }
16
+ ],
17
+ "limitations": [
18
+ "artifact-content-may-disclose-identity"
19
+ ]
20
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "kind": "tie",
3
+ "labels": [
4
+ "variant-4798fd88dc0c9767",
5
+ "variant-5588a335bb82b8d5"
6
+ ]
7
+ }
@@ -0,0 +1,57 @@
1
+ {
2
+ "arms": [
3
+ {
4
+ "configuration": {
5
+ "configuration": "35653d898fe8f4687defd9c18d0f6daaf43f2ae7d762e2c8aa3df7f1e68a3534",
6
+ "effort": "fixture",
7
+ "model": "fixture:a",
8
+ "prompt": "35653d898fe8f4687defd9c18d0f6daaf43f2ae7d762e2c8aa3df7f1e68a3534",
9
+ "skill": "35653d898fe8f4687defd9c18d0f6daaf43f2ae7d762e2c8aa3df7f1e68a3534"
10
+ },
11
+ "id": "a"
12
+ },
13
+ {
14
+ "configuration": {
15
+ "configuration": "35653d898fe8f4687defd9c18d0f6daaf43f2ae7d762e2c8aa3df7f1e68a3534",
16
+ "effort": "fixture",
17
+ "model": "fixture:b",
18
+ "prompt": "35653d898fe8f4687defd9c18d0f6daaf43f2ae7d762e2c8aa3df7f1e68a3534",
19
+ "skill": "35653d898fe8f4687defd9c18d0f6daaf43f2ae7d762e2c8aa3df7f1e68a3534"
20
+ },
21
+ "id": "b"
22
+ }
23
+ ],
24
+ "axes": [
25
+ "model"
26
+ ],
27
+ "cases": [
28
+ {
29
+ "criteria": 1,
30
+ "critical": false,
31
+ "id": "A1",
32
+ "reps": 1,
33
+ "threshold": 1
34
+ }
35
+ ],
36
+ "common": {
37
+ "fixtureSha256": "35653d898fe8f4687defd9c18d0f6daaf43f2ae7d762e2c8aa3df7f1e68a3534",
38
+ "harnessSha256": "35653d898fe8f4687defd9c18d0f6daaf43f2ae7d762e2c8aa3df7f1e68a3534",
39
+ "heldoutSha256": "35653d898fe8f4687defd9c18d0f6daaf43f2ae7d762e2c8aa3df7f1e68a3534",
40
+ "judgePolicySha256": "35653d898fe8f4687defd9c18d0f6daaf43f2ae7d762e2c8aa3df7f1e68a3534",
41
+ "mode": "force",
42
+ "rubricSha256": "35653d898fe8f4687defd9c18d0f6daaf43f2ae7d762e2c8aa3df7f1e68a3534",
43
+ "scenarioSha256": "35653d898fe8f4687defd9c18d0f6daaf43f2ae7d762e2c8aa3df7f1e68a3534"
44
+ },
45
+ "family": "intervention",
46
+ "investigationSha256": "35653d898fe8f4687defd9c18d0f6daaf43f2ae7d762e2c8aa3df7f1e68a3534",
47
+ "judge": "fixture:judge",
48
+ "proposer": "fixture:proposer",
49
+ "resourceMetric": "wall_ms",
50
+ "version": "intervention-comparison-v1",
51
+ "inputDigest": "dafb046cb29e1e8aaa3dc9bd1b8497427c69ef15228d81aaa6228c23c4fcce40",
52
+ "changedAxes": [
53
+ "model"
54
+ ],
55
+ "deterministicSampling": false,
56
+ "id": "a84186a1c1f272c80fe14387aeb3c8dd7242f6eacb6b76b0ef29a7343b254ffb"
57
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "manifestId": "a84186a1c1f272c80fe14387aeb3c8dd7242f6eacb6b76b0ef29a7343b254ffb",
3
+ "choice": {
4
+ "kind": "tie",
5
+ "labels": [
6
+ "variant-4798fd88dc0c9767",
7
+ "variant-5588a335bb82b8d5"
8
+ ]
9
+ },
10
+ "arms": [
11
+ {
12
+ "label": "variant-4798fd88dc0c9767",
13
+ "armId": "a",
14
+ "configuration": {
15
+ "configuration": "35653d898fe8f4687defd9c18d0f6daaf43f2ae7d762e2c8aa3df7f1e68a3534",
16
+ "effort": "fixture",
17
+ "model": "fixture:a",
18
+ "prompt": "35653d898fe8f4687defd9c18d0f6daaf43f2ae7d762e2c8aa3df7f1e68a3534",
19
+ "skill": "35653d898fe8f4687defd9c18d0f6daaf43f2ae7d762e2c8aa3df7f1e68a3534"
20
+ },
21
+ "cost": 1,
22
+ "costUnit": "wall_ms"
23
+ },
24
+ {
25
+ "label": "variant-5588a335bb82b8d5",
26
+ "armId": "b",
27
+ "configuration": {
28
+ "configuration": "35653d898fe8f4687defd9c18d0f6daaf43f2ae7d762e2c8aa3df7f1e68a3534",
29
+ "effort": "fixture",
30
+ "model": "fixture:b",
31
+ "prompt": "35653d898fe8f4687defd9c18d0f6daaf43f2ae7d762e2c8aa3df7f1e68a3534",
32
+ "skill": "35653d898fe8f4687defd9c18d0f6daaf43f2ae7d762e2c8aa3df7f1e68a3534"
33
+ },
34
+ "cost": 2,
35
+ "costUnit": "wall_ms"
36
+ }
37
+ ],
38
+ "routingDefault": null
39
+ }
@@ -0,0 +1,89 @@
1
+ {
2
+ "repository": "skill-harness",
3
+ "records": [
4
+ {
5
+ "commit": "4460af93c55aa3a52df262782cd339ad374113b8",
6
+ "source": "contracts/work-capture/v2/README.md",
7
+ "target": "work-capture/README.md",
8
+ "sha256": "9e33d02ad97c5333f8c6c1cf8c639690b3feb6283596f137860b0e00769f5d2c"
9
+ },
10
+ {
11
+ "commit": "4460af93c55aa3a52df262782cd339ad374113b8",
12
+ "source": "contracts/work-capture/v2/fixtures/batch.json",
13
+ "target": "work-capture/fixtures/batch.json",
14
+ "sha256": "23ba49a4312f27046b91b8b49d777f7d6992ecae964858917b9f143d5a4d70da"
15
+ },
16
+ {
17
+ "commit": "4460af93c55aa3a52df262782cd339ad374113b8",
18
+ "source": "contracts/work-capture/v2/fixtures/cases.json",
19
+ "target": "work-capture/fixtures/cases.json",
20
+ "sha256": "b8efcf0ca89fc34f82cf526b95fd61be010bd23bec4697bc6d54bba7b4cfda14"
21
+ },
22
+ {
23
+ "commit": "4460af93c55aa3a52df262782cd339ad374113b8",
24
+ "source": "contracts/work-capture/v2/fixtures/review.json",
25
+ "target": "work-capture/fixtures/review.json",
26
+ "sha256": "c87d4b91f82df1ee197d25c7a22dcf250791680157b4e0685b3528030e4a2402"
27
+ },
28
+ {
29
+ "commit": "4460af93c55aa3a52df262782cd339ad374113b8",
30
+ "source": "contracts/work-capture/v2/review-request.schema.json",
31
+ "target": "work-capture/review-request.schema.json",
32
+ "sha256": "1f0f8d156b56c5b1ed212e3f7ad470ac9b52568160ffa28fde07a9e53915ea11"
33
+ },
34
+ {
35
+ "commit": "4460af93c55aa3a52df262782cd339ad374113b8",
36
+ "source": "contracts/work-capture/v2/work-case.schema.json",
37
+ "target": "work-capture/work-case.schema.json",
38
+ "sha256": "b3b39d5ccec8a0ffb45dfdff317a2a27802ec337ad4aab9df6f08122dc3f6274"
39
+ },
40
+ {
41
+ "commit": "0475e1f5684e01992850c48aa14841751711701a",
42
+ "source": "contracts/intervention/v1/README.md",
43
+ "target": "intervention/README.md",
44
+ "sha256": "71cd78c8748516d7f7229f69905f0e34e51dead3e73fae13a39e984ed8db917f"
45
+ },
46
+ {
47
+ "commit": "0475e1f5684e01992850c48aa14841751711701a",
48
+ "source": "contracts/intervention/v1/fixtures/artifact-3ee11136beb864f518252e5024dae9197421fbf97b6e981d3243c782b5c44bd0.txt",
49
+ "target": "intervention/fixtures/artifact-3ee11136beb864f518252e5024dae9197421fbf97b6e981d3243c782b5c44bd0.txt",
50
+ "sha256": "3ee11136beb864f518252e5024dae9197421fbf97b6e981d3243c782b5c44bd0"
51
+ },
52
+ {
53
+ "commit": "0475e1f5684e01992850c48aa14841751711701a",
54
+ "source": "contracts/intervention/v1/fixtures/artifact-58905d872dd3c54a9705f67b05fa82edbad7af6476ae8993faf1a7b9fadfb905.txt",
55
+ "target": "intervention/fixtures/artifact-58905d872dd3c54a9705f67b05fa82edbad7af6476ae8993faf1a7b9fadfb905.txt",
56
+ "sha256": "58905d872dd3c54a9705f67b05fa82edbad7af6476ae8993faf1a7b9fadfb905"
57
+ },
58
+ {
59
+ "commit": "0475e1f5684e01992850c48aa14841751711701a",
60
+ "source": "contracts/intervention/v1/fixtures/assessment.json",
61
+ "target": "intervention/fixtures/assessment.json",
62
+ "sha256": "4099505170048292ccf3213893b9d8ca87cf4933c9ae199907c1d5fc5540dd78"
63
+ },
64
+ {
65
+ "commit": "0475e1f5684e01992850c48aa14841751711701a",
66
+ "source": "contracts/intervention/v1/fixtures/blind-view.json",
67
+ "target": "intervention/fixtures/blind-view.json",
68
+ "sha256": "eed28f68aab303a2b73a380a7de6804c58a64262e1f1ad76fcb29238445e9c83"
69
+ },
70
+ {
71
+ "commit": "0475e1f5684e01992850c48aa14841751711701a",
72
+ "source": "contracts/intervention/v1/fixtures/choice.json",
73
+ "target": "intervention/fixtures/choice.json",
74
+ "sha256": "f6d4cbe275ae3673a5d2ba04db8475409d2843ecb2dace6438d76dc64dfcc1df"
75
+ },
76
+ {
77
+ "commit": "0475e1f5684e01992850c48aa14841751711701a",
78
+ "source": "contracts/intervention/v1/fixtures/manifest.json",
79
+ "target": "intervention/fixtures/manifest.json",
80
+ "sha256": "26076b33bfc9a5d4976ace87f3569956a32419c1702f63ddab0963c3242f2e53"
81
+ },
82
+ {
83
+ "commit": "0475e1f5684e01992850c48aa14841751711701a",
84
+ "source": "contracts/intervention/v1/fixtures/reveal.json",
85
+ "target": "intervention/fixtures/reveal.json",
86
+ "sha256": "bdc44d7b528beeb3134b358c2af0aadd5089d650df66c8e1b22f016a9f3e471a"
87
+ }
88
+ ]
89
+ }