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.
- package/CHANGELOG.md +30 -0
- package/contracts/daily-view/v1/README.md +114 -0
- package/contracts/daily-view/v1/fixtures/view.json +525 -0
- package/contracts/daily-view/v1/fixtures/view.txt +75 -0
- package/contracts/daily-view/v1/fixtures/work.jsonl +17 -0
- package/contracts/daily-view/v1/p03/README.md +26 -0
- package/contracts/daily-view/v1/p03/fixtures/retained-executions.json +241 -0
- package/contracts/daily-view/v1/p03/projection.schema.json +194 -0
- package/contracts/daily-view/v1/p03/provenance.json +21 -0
- package/contracts/dashboard-host/v1/README.md +176 -0
- package/contracts/debrief/v1/README.md +146 -0
- package/contracts/debrief/v1/intervention/README.md +32 -0
- package/contracts/debrief/v1/intervention/fixtures/artifact-3ee11136beb864f518252e5024dae9197421fbf97b6e981d3243c782b5c44bd0.txt +1 -0
- package/contracts/debrief/v1/intervention/fixtures/artifact-58905d872dd3c54a9705f67b05fa82edbad7af6476ae8993faf1a7b9fadfb905.txt +1 -0
- package/contracts/debrief/v1/intervention/fixtures/assessment.json +29 -0
- package/contracts/debrief/v1/intervention/fixtures/blind-view.json +20 -0
- package/contracts/debrief/v1/intervention/fixtures/choice.json +7 -0
- package/contracts/debrief/v1/intervention/fixtures/manifest.json +57 -0
- package/contracts/debrief/v1/intervention/fixtures/reveal.json +39 -0
- package/contracts/debrief/v1/provenance.json +89 -0
- package/contracts/debrief/v1/work-capture/README.md +38 -0
- package/contracts/debrief/v1/work-capture/fixtures/batch.json +17 -0
- package/contracts/debrief/v1/work-capture/fixtures/cases.json +184 -0
- package/contracts/debrief/v1/work-capture/fixtures/review.json +184 -0
- package/contracts/debrief/v1/work-capture/review-request.schema.json +41 -0
- package/contracts/debrief/v1/work-capture/work-case.schema.json +190 -0
- package/contracts/debrief/v2/README.md +71 -0
- package/contracts/debrief/v2/input-pin.json +66 -0
- package/contracts/debrief/v2/intervention-upstream.md +40 -0
- package/contracts/debrief/v2/work-signals-upstream.md +22 -0
- package/contracts/dispatch-control/v1/README.md +109 -0
- package/contracts/dispatch-control/v1/request.schema.json +19 -0
- package/contracts/effect-profile/v1/README.md +124 -0
- package/contracts/execution-retention/v1/README.md +109 -0
- package/contracts/execution-retention/v2/README.md +148 -0
- package/contracts/execution-retention/v2/fixtures/interrupted-native-bytes.json +91 -0
- package/contracts/execution-retention/v2/fixtures/missing-native-session.json +91 -0
- package/contracts/execution-retention/v2/fixtures/native-file-unknown-branch.json +91 -0
- package/contracts/execution-retention/v2/fixtures/native-id-without-bytes.json +91 -0
- package/contracts/execution-retention/v2/fixtures/native-live-branch.json +90 -0
- package/contracts/execution-retention/v2/fixtures/replaced-native-session.json +92 -0
- package/contracts/execution-retention/v2/fixtures/result-82c620cdfeb8ca6b858cf653d7f5e2eedca5315d6244216d60e8b36f03223d6a.bin +1 -0
- package/contracts/execution-retention/v2/fixtures/session-2ec1f134bc739984434f7fca689e1c3d1c39fce2dcadae709e9b6faedfcc4ac7.bin +3 -0
- package/contracts/execution-retention/v2/fixtures/session-9bdb4bd16a901da31580acf056bda525225259e15ec409e0410480109011772f.bin +3 -0
- package/contracts/execution-retention/v2/manifest.schema.json +858 -0
- package/contracts/experiment/v1/README.md +164 -0
- package/contracts/factory-order/v1/README.md +151 -0
- package/contracts/factory-order/v1/adoption-pin.json +8 -0
- package/contracts/intent-control/v1/README.md +135 -0
- package/contracts/intent-control/v1/request.schema.json +1096 -0
- package/contracts/intent-control/v2/README.md +34 -0
- package/contracts/intent-control/v2/request.schema.json +1070 -0
- package/contracts/ledger/v4/README.md +241 -0
- package/contracts/ledger/v4/fixtures/layout-options.json +428 -0
- package/contracts/ledger/v4/fixtures/work-acceptance.json +57 -0
- package/contracts/ledger/v4/fixtures/work-occurrence.json +44 -0
- package/contracts/ledger/v4/fixtures/work-revision.json +26 -0
- package/contracts/ledger/v4/fixtures/work-snapshot.json +73 -0
- package/contracts/ledger/v4/ledger-event.schema.json +162 -0
- package/contracts/ordinary-control/v1/README.md +59 -0
- package/contracts/producer-ipc/v1/README.md +137 -0
- package/dist/check-runner.d.ts +5 -0
- package/dist/check-runner.d.ts.map +1 -1
- package/dist/check-runner.js +16 -2
- package/dist/check-runner.js.map +1 -1
- package/dist/control-journal.d.ts +20 -0
- package/dist/control-journal.d.ts.map +1 -0
- package/dist/control-journal.js +73 -0
- package/dist/control-journal.js.map +1 -0
- package/dist/daily-view-input.d.ts +44 -0
- package/dist/daily-view-input.d.ts.map +1 -0
- package/dist/daily-view-input.js +68 -0
- package/dist/daily-view-input.js.map +1 -0
- package/dist/daily-view-render.d.ts +4 -0
- package/dist/daily-view-render.d.ts.map +1 -0
- package/dist/daily-view-render.js +41 -0
- package/dist/daily-view-render.js.map +1 -0
- package/dist/daily-view.d.ts +74 -0
- package/dist/daily-view.d.ts.map +1 -0
- package/dist/daily-view.js +170 -0
- package/dist/daily-view.js.map +1 -0
- package/dist/dashboard-cli.d.ts +26 -1
- package/dist/dashboard-cli.d.ts.map +1 -1
- package/dist/dashboard-cli.js +121 -3
- package/dist/dashboard-cli.js.map +1 -1
- package/dist/dashboard-harness.d.ts +19 -0
- package/dist/dashboard-harness.d.ts.map +1 -0
- package/dist/dashboard-harness.js +75 -0
- package/dist/dashboard-harness.js.map +1 -0
- package/dist/dashboard-herdr.d.ts.map +1 -1
- package/dist/dashboard-herdr.js +7 -2
- package/dist/dashboard-herdr.js.map +1 -1
- package/dist/dashboard-host-contract.d.ts +111 -0
- package/dist/dashboard-host-contract.d.ts.map +1 -0
- package/dist/dashboard-host-contract.js +14 -0
- package/dist/dashboard-host-contract.js.map +1 -0
- package/dist/dashboard-host-transport.d.ts +15 -0
- package/dist/dashboard-host-transport.d.ts.map +1 -0
- package/dist/dashboard-host-transport.js +122 -0
- package/dist/dashboard-host-transport.js.map +1 -0
- package/dist/dashboard-host.d.ts +149 -0
- package/dist/dashboard-host.d.ts.map +1 -0
- package/dist/dashboard-host.js +329 -0
- package/dist/dashboard-host.js.map +1 -0
- package/dist/dashboard-observation.d.ts +28 -0
- package/dist/dashboard-observation.d.ts.map +1 -0
- package/dist/dashboard-observation.js +86 -0
- package/dist/dashboard-observation.js.map +1 -0
- package/dist/debrief-contract.d.ts +65 -0
- package/dist/debrief-contract.d.ts.map +1 -0
- package/dist/debrief-contract.js +151 -0
- package/dist/debrief-contract.js.map +1 -0
- package/dist/debrief-fixture.d.ts +16 -0
- package/dist/debrief-fixture.d.ts.map +1 -0
- package/dist/debrief-fixture.js +41 -0
- package/dist/debrief-fixture.js.map +1 -0
- package/dist/debrief-host.d.ts +59 -0
- package/dist/debrief-host.d.ts.map +1 -0
- package/dist/debrief-host.js +49 -0
- package/dist/debrief-host.js.map +1 -0
- package/dist/debrief-render.d.ts +5 -0
- package/dist/debrief-render.d.ts.map +1 -0
- package/dist/debrief-render.js +65 -0
- package/dist/debrief-render.js.map +1 -0
- package/dist/debrief.d.ts +90 -0
- package/dist/debrief.d.ts.map +1 -0
- package/dist/debrief.js +263 -0
- package/dist/debrief.js.map +1 -0
- package/dist/delegate-types.d.ts +2 -0
- package/dist/delegate-types.d.ts.map +1 -1
- package/dist/delegate-types.js.map +1 -1
- package/dist/delegate.d.ts.map +1 -1
- package/dist/delegate.js +1 -0
- package/dist/delegate.js.map +1 -1
- package/dist/dispatch-control.d.ts +45 -0
- package/dist/dispatch-control.d.ts.map +1 -0
- package/dist/dispatch-control.js +76 -0
- package/dist/dispatch-control.js.map +1 -0
- package/dist/effect-profile-runtime.d.ts +40 -0
- package/dist/effect-profile-runtime.d.ts.map +1 -0
- package/dist/effect-profile-runtime.js +51 -0
- package/dist/effect-profile-runtime.js.map +1 -0
- package/dist/effect-profile.d.ts +40 -0
- package/dist/effect-profile.d.ts.map +1 -0
- package/dist/effect-profile.js +152 -0
- package/dist/effect-profile.js.map +1 -0
- package/dist/execution-retention.d.ts +90 -0
- package/dist/execution-retention.d.ts.map +1 -0
- package/dist/execution-retention.js +247 -0
- package/dist/execution-retention.js.map +1 -0
- package/dist/experiment-contract.d.ts +56 -0
- package/dist/experiment-contract.d.ts.map +1 -0
- package/dist/experiment-contract.js +80 -0
- package/dist/experiment-contract.js.map +1 -0
- package/dist/experiment-state.d.ts +22 -0
- package/dist/experiment-state.d.ts.map +1 -0
- package/dist/experiment-state.js +79 -0
- package/dist/experiment-state.js.map +1 -0
- package/dist/experiment-store.d.ts +28 -0
- package/dist/experiment-store.d.ts.map +1 -0
- package/dist/experiment-store.js +130 -0
- package/dist/experiment-store.js.map +1 -0
- package/dist/experiment.d.ts +65 -0
- package/dist/experiment.d.ts.map +1 -0
- package/dist/experiment.js +357 -0
- package/dist/experiment.js.map +1 -0
- package/dist/factory-contract.d.ts +79 -0
- package/dist/factory-contract.d.ts.map +1 -0
- package/dist/factory-contract.js +89 -0
- package/dist/factory-contract.js.map +1 -0
- package/dist/factory-migration.d.ts +20 -0
- package/dist/factory-migration.d.ts.map +1 -0
- package/dist/factory-migration.js +55 -0
- package/dist/factory-migration.js.map +1 -0
- package/dist/factory-order.d.ts +848 -0
- package/dist/factory-order.d.ts.map +1 -0
- package/dist/factory-order.js +83 -0
- package/dist/factory-order.js.map +1 -0
- package/dist/factory-registry.d.ts +121 -0
- package/dist/factory-registry.d.ts.map +1 -0
- package/dist/factory-registry.js +133 -0
- package/dist/factory-registry.js.map +1 -0
- package/dist/file-lock.d.ts +8 -2
- package/dist/file-lock.d.ts.map +1 -1
- package/dist/file-lock.js +78 -19
- package/dist/file-lock.js.map +1 -1
- package/dist/herdr-poll.d.ts +8 -0
- package/dist/herdr-poll.d.ts.map +1 -1
- package/dist/herdr-poll.js +23 -0
- package/dist/herdr-poll.js.map +1 -1
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -1
- package/dist/intent-application.d.ts +17 -0
- package/dist/intent-application.d.ts.map +1 -0
- package/dist/intent-application.js +113 -0
- package/dist/intent-application.js.map +1 -0
- package/dist/intent-control.d.ts +201 -0
- package/dist/intent-control.d.ts.map +1 -0
- package/dist/intent-control.js +110 -0
- package/dist/intent-control.js.map +1 -0
- package/dist/intent-scheduling.d.ts +9 -0
- package/dist/intent-scheduling.d.ts.map +1 -0
- package/dist/intent-scheduling.js +15 -0
- package/dist/intent-scheduling.js.map +1 -0
- package/dist/ledger-append.d.ts +15 -0
- package/dist/ledger-append.d.ts.map +1 -0
- package/dist/ledger-append.js +94 -0
- package/dist/ledger-append.js.map +1 -0
- package/dist/ledger.d.ts +11 -0
- package/dist/ledger.d.ts.map +1 -1
- package/dist/ledger.js +3 -7
- package/dist/ledger.js.map +1 -1
- package/dist/native-session-target.d.ts +9 -0
- package/dist/native-session-target.d.ts.map +1 -0
- package/dist/native-session-target.js +29 -0
- package/dist/native-session-target.js.map +1 -0
- package/dist/native-session.d.ts +59 -0
- package/dist/native-session.d.ts.map +1 -0
- package/dist/native-session.js +154 -0
- package/dist/native-session.js.map +1 -0
- package/dist/order-schedule.d.ts +37 -0
- package/dist/order-schedule.d.ts.map +1 -0
- package/dist/order-schedule.js +81 -0
- package/dist/order-schedule.js.map +1 -0
- package/dist/ordinary-children.d.ts +52 -0
- package/dist/ordinary-children.d.ts.map +1 -0
- package/dist/ordinary-children.js +93 -0
- package/dist/ordinary-children.js.map +1 -0
- package/dist/producer-ipc-contract.d.ts +29 -0
- package/dist/producer-ipc-contract.d.ts.map +1 -0
- package/dist/producer-ipc-contract.js +29 -0
- package/dist/producer-ipc-contract.js.map +1 -0
- package/dist/producer-ipc.d.ts +55 -0
- package/dist/producer-ipc.d.ts.map +1 -0
- package/dist/producer-ipc.js +143 -0
- package/dist/producer-ipc.js.map +1 -0
- package/dist/resource-budget.d.ts +334 -0
- package/dist/resource-budget.d.ts.map +1 -0
- package/dist/resource-budget.js +415 -0
- package/dist/resource-budget.js.map +1 -0
- package/dist/retention-contract.d.ts +73 -0
- package/dist/retention-contract.d.ts.map +1 -0
- package/dist/retention-contract.js +104 -0
- package/dist/retention-contract.js.map +1 -0
- package/dist/retention-json.d.ts +3 -0
- package/dist/retention-json.d.ts.map +1 -0
- package/dist/retention-json.js +32 -0
- package/dist/retention-json.js.map +1 -0
- package/dist/run-child.d.ts +4 -0
- package/dist/run-child.d.ts.map +1 -1
- package/dist/run-child.js +16 -2
- package/dist/run-child.js.map +1 -1
- package/dist/run-herdr.d.ts +6 -0
- package/dist/run-herdr.d.ts.map +1 -1
- package/dist/run-herdr.js +19 -6
- package/dist/run-herdr.js.map +1 -1
- package/dist/vendor/adoption.d.ts +129 -0
- package/dist/vendor/adoption.d.ts.map +1 -0
- package/dist/vendor/adoption.js +102 -0
- package/dist/vendor/adoption.js.map +1 -0
- package/dist/work-ledger-destination.d.ts +20 -0
- package/dist/work-ledger-destination.d.ts.map +1 -0
- package/dist/work-ledger-destination.js +131 -0
- package/dist/work-ledger-destination.js.map +1 -0
- package/dist/work-ledger-json.d.ts +25 -0
- package/dist/work-ledger-json.d.ts.map +1 -0
- package/dist/work-ledger-json.js +267 -0
- package/dist/work-ledger-json.js.map +1 -0
- package/dist/work-ledger-occurrences.d.ts +227 -0
- package/dist/work-ledger-occurrences.d.ts.map +1 -0
- package/dist/work-ledger-occurrences.js +115 -0
- package/dist/work-ledger-occurrences.js.map +1 -0
- package/dist/work-ledger-projection.d.ts +295 -0
- package/dist/work-ledger-projection.d.ts.map +1 -0
- package/dist/work-ledger-projection.js +237 -0
- package/dist/work-ledger-projection.js.map +1 -0
- package/dist/work-ledger-snapshot.d.ts +29 -0
- package/dist/work-ledger-snapshot.d.ts.map +1 -0
- package/dist/work-ledger-snapshot.js +267 -0
- package/dist/work-ledger-snapshot.js.map +1 -0
- package/dist/work-ledger-types.d.ts +261 -0
- package/dist/work-ledger-types.d.ts.map +1 -0
- package/dist/work-ledger-types.js +13 -0
- package/dist/work-ledger-types.js.map +1 -0
- package/dist/work-ledger-validation.d.ts +14 -0
- package/dist/work-ledger-validation.d.ts.map +1 -0
- package/dist/work-ledger-validation.js +226 -0
- package/dist/work-ledger-validation.js.map +1 -0
- package/dist/work-ledger.d.ts +43 -0
- package/dist/work-ledger.d.ts.map +1 -0
- package/dist/work-ledger.js +225 -0
- package/dist/work-ledger.js.map +1 -0
- package/extensions/delegate-chain.ts +1 -0
- package/extensions/delegation-native.ts +12 -0
- package/extensions/delegation.ts +4 -3
- package/extensions/execute-child.ts +34 -4
- package/extensions/grants.ts +2 -0
- package/extensions/ordinary-runtime.ts +14 -0
- package/extensions/run-delegation.ts +7 -7
- package/extensions/session.ts +3 -1
- package/package.json +78 -4
- package/src/check-runner.ts +20 -2
- package/src/control-journal.ts +26 -0
- package/src/daily-view-input.ts +59 -0
- package/src/daily-view-render.ts +44 -0
- package/src/daily-view.ts +152 -0
- package/src/dashboard-cli.ts +103 -4
- package/src/dashboard-harness.ts +28 -0
- package/src/dashboard-herdr.ts +7 -2
- package/src/dashboard-host-contract.ts +42 -0
- package/src/dashboard-host-transport.ts +38 -0
- package/src/dashboard-host.ts +168 -0
- package/src/dashboard-observation.ts +44 -0
- package/src/debrief-contract.ts +127 -0
- package/src/debrief-fixture.ts +29 -0
- package/src/debrief-host.ts +53 -0
- package/src/debrief-render.ts +49 -0
- package/src/debrief.ts +198 -0
- package/src/delegate-types.ts +2 -0
- package/src/delegate.ts +1 -0
- package/src/dispatch-control.ts +81 -0
- package/src/effect-profile-runtime.ts +46 -0
- package/src/effect-profile.ts +129 -0
- package/src/execution-retention.ts +230 -0
- package/src/experiment-contract.ts +66 -0
- package/src/experiment-state.ts +44 -0
- package/src/experiment-store.ts +90 -0
- package/src/experiment.ts +231 -0
- package/src/factory-contract.ts +47 -0
- package/src/factory-migration.ts +29 -0
- package/src/factory-order.ts +56 -0
- package/src/factory-registry.ts +60 -0
- package/src/file-lock.ts +47 -11
- package/src/herdr-poll.ts +18 -0
- package/src/index.ts +32 -0
- package/src/intent-application.ts +90 -0
- package/src/intent-control.ts +107 -0
- package/src/intent-scheduling.ts +14 -0
- package/src/ledger-append.ts +72 -0
- package/src/ledger.ts +3 -9
- package/src/native-session-target.ts +23 -0
- package/src/native-session.ts +139 -0
- package/src/order-schedule.ts +42 -0
- package/src/ordinary-children.ts +59 -0
- package/src/producer-ipc-contract.ts +26 -0
- package/src/producer-ipc.ts +107 -0
- package/src/resource-budget.ts +349 -0
- package/src/retention-contract.ts +84 -0
- package/src/retention-json.ts +20 -0
- package/src/run-child.ts +13 -2
- package/src/run-herdr.ts +11 -7
- package/src/vendor/adoption.ts +109 -0
- package/src/work-ledger-destination.ts +113 -0
- package/src/work-ledger-json.ts +228 -0
- package/src/work-ledger-occurrences.ts +99 -0
- package/src/work-ledger-projection.ts +262 -0
- package/src/work-ledger-snapshot.ts +246 -0
- package/src/work-ledger-types.ts +229 -0
- package/src/work-ledger-validation.ts +174 -0
- 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 @@
|
|
|
1
|
+
Synthetic Layout B
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Synthetic Layout A
|
|
@@ -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,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
|
+
}
|