pi-session-mcp 0.8.3 → 0.12.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/.pi-session-mcp-cli/client-adapters/command.js +33 -0
- package/.pi-session-mcp-cli/client-adapters/mcp-verifier.js +198 -0
- package/.pi-session-mcp-cli/client-adapters/types.js +1 -0
- package/.pi-session-mcp-cli/config.js +29 -3
- package/.pi-session-mcp-cli/container-runtime.js +18 -0
- package/.pi-session-mcp-cli/doctor.js +370 -4
- package/.pi-session-mcp-cli/execution-modes.js +83 -0
- package/.pi-session-mcp-cli/execution-profile.js +1 -0
- package/.pi-session-mcp-cli/override-lock.js +4 -4
- package/.pi-session-mcp-cli/session-tools.js +45 -0
- package/.pi-session-mcp-cli/setup-platform.js +64 -36
- package/.pi-session-mcp-cli/setup-process.js +455 -0
- package/.pi-session-mcp-cli/skill-library.js +8 -4
- package/.pi-session-mcp-cli/turn-events.js +97 -0
- package/.pi-session-mcp-cli/writer-boundary.js +321 -0
- package/.pi-session-mcp-cli/writer-fence.js +50 -0
- package/.pi-session-mcp-cli/writer-lease.js +140 -0
- package/.pi-session-mcp-cli/writer-lifecycle.js +567 -0
- package/.pi-session-mcp-cli/writer-state.js +199 -0
- package/.pi-session-mcp-cli/writer-wrapper.js +14 -0
- package/CHANGELOG.md +527 -0
- package/README.md +8 -2
- package/dist/capabilities.d.ts +9 -1
- package/dist/capabilities.js +8 -3
- package/dist/child-stdio-transport.d.ts +21 -0
- package/dist/child-stdio-transport.js +88 -0
- package/dist/client-adapters/claude-code.js +3 -2
- package/dist/client-adapters/command.d.ts +8 -0
- package/dist/client-adapters/command.js +9 -1
- package/dist/client-adapters/mcp-verifier.d.ts +7 -0
- package/dist/client-adapters/mcp-verifier.js +21 -4
- package/dist/client-adapters/types.d.ts +5 -1
- package/dist/client-adapters/writer-registration.d.ts +16 -0
- package/dist/client-adapters/writer-registration.js +156 -0
- package/dist/config.d.ts +12 -1
- package/dist/config.js +29 -3
- package/dist/container-runtime.d.ts +2 -0
- package/dist/container-runtime.js +18 -0
- package/dist/doctor.d.ts +36 -2
- package/dist/doctor.js +370 -4
- package/dist/event-spool.d.ts +70 -0
- package/dist/event-spool.js +180 -0
- package/dist/execution-modes.d.ts +60 -0
- package/dist/execution-modes.js +83 -0
- package/dist/execution-profile.d.ts +2 -0
- package/dist/execution-profile.js +1 -0
- package/dist/main.js +63 -8
- package/dist/override-lock.d.ts +2 -0
- package/dist/override-lock.js +4 -4
- package/dist/pi-adapter.d.ts +31 -1
- package/dist/pi-adapter.js +12 -0
- package/dist/process-diagnostics.d.ts +1 -1
- package/dist/process-diagnostics.js +2 -1
- package/dist/refusal-server.d.ts +6 -0
- package/dist/refusal-server.js +46 -0
- package/dist/sdk-pi-adapter.js +16 -9
- package/dist/server.d.ts +3 -2
- package/dist/server.js +27 -53
- package/dist/session-registry.d.ts +32 -2
- package/dist/session-registry.js +61 -11
- package/dist/session-tools.d.ts +14 -5
- package/dist/session-tools.js +13 -9
- package/dist/setup-cli.d.ts +14 -0
- package/dist/setup-cli.js +132 -0
- package/dist/setup-command-guardian.js +9 -3
- package/dist/setup-hooks.d.ts +158 -0
- package/dist/setup-hooks.js +657 -0
- package/dist/setup-main.d.ts +1 -1
- package/dist/setup-main.js +18 -2
- package/dist/setup-modes.d.ts +18 -0
- package/dist/setup-modes.js +131 -0
- package/dist/setup-ownership.d.ts +1 -0
- package/dist/setup-ownership.js +11 -3
- package/dist/setup-platform.d.ts +9 -1
- package/dist/setup-platform.js +64 -36
- package/dist/setup-process.d.ts +23 -1
- package/dist/setup-process.js +88 -10
- package/dist/setup-writers.d.ts +42 -0
- package/dist/setup-writers.js +510 -0
- package/dist/setup.d.ts +4 -1
- package/dist/setup.js +23 -10
- package/dist/skill-library.d.ts +2 -0
- package/dist/skill-library.js +8 -4
- package/dist/tool-schemas.d.ts +339 -0
- package/dist/tool-schemas.js +49 -0
- package/dist/turn-events.d.ts +45 -0
- package/dist/turn-events.js +97 -0
- package/dist/wake-hook.d.ts +180 -0
- package/dist/wake-hook.js +638 -0
- package/dist/wake-main.d.ts +8 -0
- package/dist/wake-main.js +111 -0
- package/dist/writer-acceptance.d.ts +10 -0
- package/dist/writer-acceptance.js +192 -0
- package/dist/writer-boundary.d.ts +52 -0
- package/dist/writer-boundary.js +321 -0
- package/dist/writer-credentials.d.ts +29 -0
- package/dist/writer-credentials.js +85 -0
- package/dist/writer-fence.d.ts +12 -0
- package/dist/writer-fence.js +50 -0
- package/dist/writer-guard.d.ts +13 -0
- package/dist/writer-guard.js +54 -0
- package/dist/writer-launch.d.ts +29 -0
- package/dist/writer-launch.js +232 -0
- package/dist/writer-lease.d.ts +28 -0
- package/dist/writer-lease.js +140 -0
- package/dist/writer-lifecycle.d.ts +96 -0
- package/dist/writer-lifecycle.js +567 -0
- package/dist/writer-relay.d.ts +33 -0
- package/dist/writer-relay.js +359 -0
- package/dist/writer-state.d.ts +111 -0
- package/dist/writer-state.js +199 -0
- package/dist/writer-wrapper.d.ts +3 -0
- package/dist/writer-wrapper.js +14 -0
- package/docs/acceptance.md +1694 -1
- package/docs/adr/0003-post-mvp-maintenance.md +2 -2
- package/docs/adr/0006-pi-extension-allowlist.md +3 -1
- package/docs/adr/0008-coding-profile-isolation.md +295 -0
- package/docs/adr/0009-execution-modes.md +131 -0
- package/docs/adr/0010-read-only-extension-tools.md +68 -0
- package/docs/adr/0011-turn-events-and-controller-wake.md +173 -0
- package/docs/adr/0012-leased-writer-pool.md +357 -0
- package/docs/architecture.md +96 -8
- package/docs/client-setup-design.md +12 -8
- package/docs/client-setup.md +84 -2
- package/docs/doctor-design.md +48 -0
- package/docs/evaluation/2026-10-17-live-screening.md +121 -0
- package/docs/evaluation/2026-10-17-node-runtime-followup.md +33 -0
- package/docs/evaluation/2026-10-17-profile-evaluation-evidence.md +155 -0
- package/docs/evaluation/2026-10-17-test-coverage.md +127 -0
- package/docs/evaluation/README.md +123 -0
- package/docs/evaluation/client-reconnect-2026-10-17/README.md +41 -0
- package/docs/evaluation/client-reconnect-2026-10-17/checks.json +38 -0
- package/docs/evaluation/client-reconnect-2026-10-17/integrity.json +30 -0
- package/docs/evaluation/client-reconnect-2026-10-17/reconnect.json +57 -0
- package/docs/evaluation/client-reconnect-2026-10-17/registration-verification.json +389 -0
- package/docs/evaluation/client-reconnect-2026-10-17/review.json +10 -0
- package/docs/evaluation/controller-ledger-hooks-2026-10-26/README.md +115 -0
- package/docs/evaluation/evidence-2026-10-17/budget.proposed.json +13 -0
- package/docs/evaluation/evidence-2026-10-17/changed-files.txt +82 -0
- package/docs/evaluation/evidence-2026-10-17/checks.json +103 -0
- package/docs/evaluation/evidence-2026-10-17/comparison.json +247 -0
- package/docs/evaluation/evidence-2026-10-17/development-collection-failure.json +15 -0
- package/docs/evaluation/evidence-2026-10-17/full-attempt-default.json +19 -0
- package/docs/evaluation/evidence-2026-10-17/full-tests.json +17 -0
- package/docs/evaluation/evidence-2026-10-17/inventory.json +239 -0
- package/docs/evaluation/evidence-2026-10-17/manifest.json +359 -0
- package/docs/evaluation/evidence-2026-10-17/offline.json +1020 -0
- package/docs/evaluation/evidence-2026-10-17/ui-reference/T3-1280.png +0 -0
- package/docs/evaluation/evidence-2026-10-17/ui-reference/T3-375.png +0 -0
- package/docs/evaluation/evidence-2026-10-17/ui-reference/result.json +141 -0
- package/docs/evaluation/extension-ablation-2026-10-20/README.md +414 -0
- package/docs/evaluation/extension-ablation-2026-10-20/setup.md +140 -0
- package/docs/evaluation/extension-ablation-repeat-2026-10-21/README.md +142 -0
- package/docs/evaluation/extension-ablation-repeat-2026-10-21/setup.md +69 -0
- package/docs/evaluation/extension-audit-2026-10-17/README.md +149 -0
- package/docs/evaluation/extension-audit-2026-10-17/checks.json +38 -0
- package/docs/evaluation/extension-audit-2026-10-17/cursor-static-evidence.json +93 -0
- package/docs/evaluation/extension-audit-2026-10-17/installed-artifact-comparison.json +85 -0
- package/docs/evaluation/extension-audit-2026-10-17/installed-packages.json +100 -0
- package/docs/evaluation/extension-audit-2026-10-17/integrity.json +108 -0
- package/docs/evaluation/extension-audit-2026-10-17/navigation-cursor-registry.json +290 -0
- package/docs/evaluation/extension-audit-2026-10-17/navigation-static-evidence.json +185 -0
- package/docs/evaluation/extension-audit-2026-10-17/openwiki-headless-bindings.json +25 -0
- package/docs/evaluation/extension-audit-2026-10-17/openwiki-headless-cleanup.json +12 -0
- package/docs/evaluation/extension-audit-2026-10-17/openwiki-headless-probe.mjs +63 -0
- package/docs/evaluation/extension-audit-2026-10-17/openwiki-headless-reproduction.json +91 -0
- package/docs/evaluation/extension-audit-2026-10-17/openwiki-headless-result.json +83 -0
- package/docs/evaluation/extension-audit-2026-10-17/permission-cache-artifact-verification.json +24 -0
- package/docs/evaluation/extension-audit-2026-10-17/permission-cache-evidence.json +133 -0
- package/docs/evaluation/extension-audit-2026-10-17/permission-cache-report.md +64 -0
- package/docs/evaluation/extension-audit-2026-10-17/publication-export.json +10 -0
- package/docs/evaluation/extension-audit-2026-10-17/resolver-gates.json +51 -0
- package/docs/evaluation/extension-audit-2026-10-17/review.json +28 -0
- package/docs/evaluation/extension-audit-2026-10-17/run-openwiki-headless-probe.mjs +29 -0
- package/docs/evaluation/extension-audit-2026-10-17/summary.json +123 -0
- package/docs/evaluation/extension-audit-2026-10-17/web-openwiki-artifacts.json +29 -0
- package/docs/evaluation/extension-audit-2026-10-17/web-openwiki-evidence.json +116 -0
- package/docs/evaluation/extension-audit-2026-10-17/web-openwiki-report.md +113 -0
- package/docs/evaluation/extension-functions-2026-10-17/README.md +33 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/README.md +39 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/attempts/extension-functions-bridges-03dc1dad-9959-40df-b51c-7820991bf7e3.json +79 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/attempts/extension-functions-bridges-0c43651e-8c7d-4c7c-aa9b-5b5761141e3b.json +54 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/attempts/extension-functions-bridges-51247b13-87c1-4ec6-886b-82d922b0585a.json +89 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/attempts/extension-functions-bridges-5337f6bf-503f-4c45-aac0-43b142385a87.json +47 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/attempts/extension-functions-bridges-60285194-b1d1-4335-b616-6614941585df.json +46 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/attempts/extension-functions-bridges-6d2fbaa9-a720-4582-9be1-a95f4764786d.json +69 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/attempts/extension-functions-bridges-6fbb576c-d87d-478d-9c05-4b5ef3563598.json +125 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/attempts/extension-functions-bridges-730926d1-ef20-4b2d-ab74-7e542f1065e9.json +48 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/attempts/extension-functions-bridges-a1baa47a-5bbe-4a16-ade8-a350599eb911.json +48 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/attempts/extension-functions-bridges-bc1d69c7-784f-4ddb-9335-0d905330d568.json +91 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/attempts/extension-functions-bridges-d582757d-2859-4683-8310-ec158bf6d551.json +99 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/attempts/extension-functions-bridges-e6533a23-4933-4d6e-a250-b1b27f010d18.json +60 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/attempts.json +138 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/guard.mjs +74 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/integrity.json +86 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/openwiki-final.json +125 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/run.mjs +36 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/web-final.json +99 -0
- package/docs/evaluation/extension-functions-2026-10-17/bridges/worker.mjs +102 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/README.md +21 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/cache-function-evidence-2026-10-17T13-30-31-440Z-b1a47f88-8d86-4238-9ef8-af890d9ba74b.json +129 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/cache-function-evidence-2026-10-17T13-31-04-505Z-a3736add-73b8-4d77-8ea6-084ce8aa4599.json +129 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/cache-function-evidence-2026-10-17T13-31-15-654Z-b0197bff-8363-4d46-b84b-46d9ed67fc39.json +248 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/cache-function-evidence-2026-10-17T13-31-39-137Z-e373f24d-8a8c-46b0-86aa-9f687cfadb9b.json +278 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/cache-function-evidence-2026-10-17T13-32-05-324Z-f63095f1-755e-43fc-9d28-3cd1a9ff4f4d.json +251 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/cache-function-evidence-2026-10-17T13-32-25-191Z-fc9a83af-ceae-40d7-a737-8ef861ba7946.json +282 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/cache-function-evidence-2026-10-17T13-33-14-993Z-5e7eae34-09f0-4c80-9210-b8cc4d1acb5f.json +282 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/cache-function-evidence-2026-10-17T13-38-39-010Z-57cf6a26-f091-45de-8849-b616b303a46c.json +283 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/cache-function-evidence-2026-10-17T13-40-32-118Z-54528e43-ac07-4f9c-8f12-10c041130983.json +283 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/cache-function-evidence-2026-10-17T13-41-49-525Z-48195b6e-f20d-49a5-bd53-a732a0af10c1.json +324 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/cache-function-evidence-2026-10-17T13-42-18-175Z-215330e7-06a6-4666-af9c-2ecb214d8d71.json +324 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/integrity.json +165 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/probe.mjs +161 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipt-archive.json +150 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/commands-headless-3feeffc5-97bf-4079-8505-8119fab7956a.json +54 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/commands-headless-42e5eace-ad87-480a-94d9-448c1dd167b8.json +49 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/commands-headless-50f39f1c-8b48-442b-8d15-1f9c8f63bd81.json +49 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/commands-headless-8482b2b0-f600-488b-9f36-905e0125177a.json +54 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/payload-codex-bypass-128ffdce-6fd5-431b-8019-32b40ba4174d.json +42 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/payload-codex-bypass-3b572182-a737-471f-b9cb-b01d5da1752a.json +42 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/payload-codex-bypass-6c225370-2f47-4a0a-80d5-87d12f6c6fdc.json +37 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/payload-codex-bypass-b48399db-cbed-43de-9071-ac27c34e3757.json +37 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/payload-openai-3a8f52b6-c8d6-4d1c-844c-782a6624a29e.json +45 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/payload-openai-6fcdbc20-b14b-4b80-a4da-bf24078da8d2.json +50 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/payload-openai-a8d6f628-40e1-437e-b192-f7232a051a44.json +50 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/payload-openai-c3c39463-a2d6-4ff8-b985-8f6d1fb1aa02.json +45 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/stats-synthetic-a23c264f-151d-4ff0-aab4-bdbb2f6560d8.json +53 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/stats-synthetic-d8178bd3-6530-4915-9cf1-056a975bfbcd.json +53 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/stats-synthetic-e3985119-e101-459e-91cd-21a0905287ba.json +48 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/stats-synthetic-e7a40382-2d27-4db5-a133-dbe346a5dc60.json +48 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/warming-disabled-unknown-223d7adc-2dbc-4017-b1ec-0c38294320e2.json +41 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/warming-disabled-unknown-347a8548-d2e0-4846-a08e-b0399f8fd3b4.json +41 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/warming-disabled-unknown-49b45e2b-e2d2-456f-b73f-e6bc938b6378.json +46 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/warming-disabled-unknown-aaf432f2-bb91-41a7-b951-2d4316389632.json +46 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/warming-disabled-zero-204ab3e8-f1fe-4894-8fb0-08299deb4c21.json +41 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/warming-disabled-zero-9388d2df-fa15-479c-a4ef-2a774c366c0f.json +46 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/warming-disabled-zero-e0bb4742-214a-4b3f-88d2-44de54394e2f.json +46 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/receipts/warming-disabled-zero-f77e1e2d-742a-490f-9955-1dfb19f59c9c.json +41 -0
- package/docs/evaluation/extension-functions-2026-10-17/cache/runner.mjs +36 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/README.md +20 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-36-10-753Z-2bb4fff5-48cc-4f6b-ae1b-5cc1a07f610b.json +54 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-36-26-537Z-5adc4fb1-0008-4ef9-a106-aa372dabf061.json +56 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-36-32-362Z-30949c31-73a3-4dae-af81-68deded51543.json +56 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-36-38-494Z-8eec81b8-5576-48cb-b2fa-c279269db058.json +56 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-36-45-546Z-991647e5-7ea4-43c4-a90d-868e4ac38d83.json +56 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-37-02-277Z-2296fb35-e5cb-4bf1-9e83-7370bcb46bfe.json +56 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-37-28-390Z-e9c3d106-b4c9-4146-ae83-a2799c907fe5.json +56 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-37-37-371Z-8545c893-a8e3-4dc6-973b-81dfd97d798b.json +56 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-38-41-612Z-c57c4778-261d-4397-8a36-df9cc23ca629.json +58 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-38-51-661Z-0eb898de-7471-4f17-a308-5ef5d86421ff.json +58 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-38-55-412Z-8169d843-a9e7-48f4-88b1-3a90e1592df1.json +58 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-39-15-274Z-a5610333-e428-4cc6-9f5a-9206748ee512.json +58 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-39-39-506Z-d4c80a7b-76b4-4d11-bf0f-552d11b131b2.json +136 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-39-53-515Z-db409f47-8ee5-4354-b7f9-a258eb7e17d0.json +136 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/evidence-2026-10-17T13-42-04-909Z-01d70cb3-6897-46ca-b8aa-1c69d5b5c7fc.json +148 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/integrity.json +205 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/probe.mjs +151 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipt-archive.json +186 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-104e378f-8f82-4ae9-bffc-7f1d52e00e74.json +15 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-182a8009-c52a-4760-9768-9cba15fceb9c.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-1f07360d-046f-4f0c-b40f-6b57a027220c.json +65 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-256cb86e-40ae-4fec-a2d2-9b7f66cc4be8.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-2667d991-3133-44c3-b883-c401b3c14cb1.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-394fc425-ed51-408f-ab09-6d26aee0d48f.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-531d3f1d-c326-4914-b768-3d32103513b9.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-5c7d0d62-8290-494f-8729-5d60bc626ad7.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-64af1d94-ea73-481f-b827-dbf6755d8591.json +66 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-65fce696-864c-4247-960e-59f6d671cbf9.json +15 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-66acde31-19c7-4d3e-9814-ddeb2cffd373.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-79d220d0-fc0b-4cad-85cc-40b9e904fb97.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-a58f0281-71bc-4757-9d6f-e281f813135e.json +65 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-c2b61e4b-fd33-4969-ab29-118957ca5fbb.json +15 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/activation-and-resources-f61b5020-2c05-40ad-9cb8-590b22790186.json +15 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-0ee0df5a-299f-451c-96e3-5abcf8bfa999.json +45 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-169e5146-09a2-4231-8017-ebd8d4b75f0a.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-19d479f2-7162-463e-90de-2d89a13e59a3.json +15 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-1bd882bb-2403-4269-8335-90f9803f57b7.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-2ab9d418-68b2-4679-bf42-f31b6945ea5a.json +15 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-3a6aa7d7-b956-4fe5-9555-a2c63408c067.json +45 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-6333425f-0b46-4ced-a272-3d48895ee853.json +15 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-6eccb170-ff45-40e2-afc5-dfc0f77c229f.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-7f330c57-9c3f-4879-a1d0-67c4c5c36050.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-8d9de272-165c-4bb8-a147-d1b306388472.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-c1ffa69f-25fa-4f45-a691-af3bc422c089.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-c24ad0c8-5e7e-4d71-9b22-3e2708ce1626.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-c5a3140e-a28e-4264-9ee6-51b1310b3123.json +14 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-cdbb3dde-2441-46ae-9111-f2a299d45807.json +46 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/receipts/bridge-disabled-d68f774c-d1f0-4620-b334-301a20edffc3.json +15 -0
- package/docs/evaluation/extension-functions-2026-10-17/cursor/runner.mjs +147 -0
- package/docs/evaluation/extension-functions-2026-10-17/integrity.json +618 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/README.md +22 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/SHA256SUMS.txt +8 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempt.json +13 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-30-37-626Z-7ba0ce60-b805-4bf1-813f-80f0673c519d.json +50 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-31-06-997Z-0df6e689-b7f6-4daf-a730-724638c7e9bb.json +52 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-31-22-489Z-dfa50911-d117-400d-9ea3-76b224693c10.json +59 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-31-39-899Z-6792c0ef-c795-4136-98e2-b9a9b00489bd.json +59 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-31-58-555Z-e23d44fb-d2cb-42b6-b76b-f2ac53645401.json +59 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-32-18-734Z-3708117d-bca6-44a6-9f61-4339a67535ae.json +60 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-32-34-897Z-abbfb675-7120-46fc-8638-2dde943a3c51.json +114 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-33-30-753Z-f1965485-aa41-4a9a-b62e-267fc9d7686c.json +72 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-33-46-589Z-e3b46364-e0dd-4a95-91ce-c11f5192d83f.json +72 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-33-57-569Z-d296148e-2f64-4921-bad7-391d0f3cc61d.json +74 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-34-30-540Z-51791e8c-b2a7-4f93-bff6-9b0467aeba51.json +109 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-34-57-906Z-2c3e469c-6d89-4707-8bc6-e62dcfacdc7c.json +114 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-35-16-679Z-035260fc-f3d1-4c1c-9619-81f2aa2ced55.json +115 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-36-05-641Z-24ceb58d-441b-4ffe-9853-ef4d15eb8c81.json +73 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-37-00-445Z-1ca606b7-306f-41e9-8745-b53879c620bb.json +72 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-37-23-659Z-c958d5fc-5c17-46b9-abc0-87913f14fd4b.json +73 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-38-49-639Z-9e74ee3c-7cea-4d9e-832f-0b5068d161ec.json +112 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-39-53-463Z-5d834e9f-e247-4887-8200-dee41070567f.json +32 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-40-16-811Z-0be9d64c-a0d7-405c-b81a-12f8c6cfebac.json +33 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-40-36-020Z-412777d5-f352-4fa0-9a07-f017b5f04cbb.json +124 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-42-03-506Z-a0cca711-1300-4431-bfff-5814a409d0af.json +120 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-42-28-426Z-fb70da7e-4888-469a-b5cd-b74da52afa9f.json +112 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-42-41-596Z-c8e99863-70e2-40f1-a516-e9f41156ef44.json +71 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-44-06-279Z-39516e45-daf6-409b-b216-64179608cc2e.json +97 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-45-34-538Z-87ddef90-2fda-4211-a513-0516dec235f4.json +112 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-45-48-020Z-06f478f2-43c4-48a7-ac02-7e53d4df8aaf.json +112 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-46-00-807Z-a98cc49d-6cf6-4109-aa95-f2d36e8d35c3.json +97 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-46-34-183Z-77f75abc-9ec3-41b2-896f-b6f4a180dca8.json +160 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/attempts/isolated-extensions-results-2026-10-17T13-46-56-605Z-f46134c2-8523-4892-ab76-e88195d79ed2.json +163 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/child-guard.mjs +30 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/final-result.json +42 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/function-probe.mjs +521 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/function-runner.mjs +201 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/integrity.json +153 -0
- package/docs/evaluation/extension-functions-2026-10-17/navigation/receipt-archive.json +160 -0
- package/docs/evaluation/extension-functions-2026-10-17/review.json +27 -0
- package/docs/evaluation/extension-functions-2026-10-17/summary.json +102 -0
- package/docs/evaluation/extension-functions-2026-10-17/verification.json +103 -0
- package/docs/evaluation/isolation-acceptance-2026-10-18/README.md +106 -0
- package/docs/evaluation/isolation-acceptance-2026-10-18/auth-warmup.mjs +33 -0
- package/docs/evaluation/isolation-acceptance-2026-10-18/contained-agent-ro.json +433 -0
- package/docs/evaluation/isolation-acceptance-2026-10-18/contained.json +439 -0
- package/docs/evaluation/isolation-acceptance-2026-10-18/control.json +403 -0
- package/docs/evaluation/isolation-acceptance-2026-10-18/live.json +75 -0
- package/docs/evaluation/isolation-acceptance-2026-10-18/wrapper.sh +37 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/README.md +360 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/design.md +150 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/inventory.md +113 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/live/README.md +117 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/live/dry-run/dry-01-L1-A.json +202 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/live/dry-run/dry-02-L1-C.json +259 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/live/run/01-L1-A.json +169 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/live/run/02-L1-A.json +202 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/live/run/03-L1-C.json +256 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/live/run/approval.json +31 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/live/run-2/01-L1-C.json +256 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/live/run-2/02-L1-A.json +201 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/live/run-2/approval.json +16 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/live-plan.md +87 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/pre-registration.md +117 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-1/S1.json +361 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-1/S2.json +544 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-1/S3.json +470 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-1/S4.json +271 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-1/S5.json +271 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-1/S6.json +266 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-1/X6.json +29 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-1/summary.json +269 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-2/S1.json +391 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-2/S2.json +600 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-2/S3.json +519 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-2/S4.json +281 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-2/S5.json +294 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-2/S6.json +280 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-2/S8.json +280 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-2/X6.json +32 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-2/summary.json +307 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-3/S1.json +391 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-3/S2.json +600 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-3/S3.json +519 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-3/S4.json +281 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-3/S5.json +294 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-3/S6.json +280 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-3/S8.json +280 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-3/X6.json +32 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-3/summary.json +307 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-4/S1.json +409 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-4/S2.json +634 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-4/S3.json +537 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-4/S4.json +281 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-4/S5.json +294 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-4/S6.json +280 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-4/S8.json +280 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-4/X6.json +32 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-4/summary.json +307 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-5/S1.json +409 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-5/S2.json +634 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-5/S3.json +537 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-5/S4.json +281 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-5/S5.json +294 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-5/S6.json +280 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-5/S8.json +280 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-5/X6.json +32 -0
- package/docs/evaluation/ledger-event-bridge-2026-10-21/probe/attempt-5/summary.json +307 -0
- package/docs/evaluation/live-rescreen-2026-10-17/README.md +114 -0
- package/docs/evaluation/live-rescreen-2026-10-17/approval.json +18 -0
- package/docs/evaluation/live-rescreen-2026-10-17/approved-budget.json +13 -0
- package/docs/evaluation/live-rescreen-2026-10-17/approved-manifest.json +315 -0
- package/docs/evaluation/live-rescreen-2026-10-17/audit-rescreen.mjs +78 -0
- package/docs/evaluation/live-rescreen-2026-10-17/audit.json +152 -0
- package/docs/evaluation/live-rescreen-2026-10-17/backend-independent-checks.json +38 -0
- package/docs/evaluation/live-rescreen-2026-10-17/checks.json +54 -0
- package/docs/evaluation/live-rescreen-2026-10-17/execution.json +19 -0
- package/docs/evaluation/live-rescreen-2026-10-17/integrity.json +138 -0
- package/docs/evaluation/live-rescreen-2026-10-17/planning-ledger.json +26 -0
- package/docs/evaluation/live-rescreen-2026-10-17/review.json +16 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/comparison.json +177 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-1.claim +1 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-1.diagnostic.json +1 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-1.json +97 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-2.claim +1 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-2.json +104 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-2.patch +11 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-2.snapshot/contract.mjs +4 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-2.snapshot/package.json +1 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-3.claim +1 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-3.json +89 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-4.claim +1 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-4.json +104 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-4.patch +11 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-4.snapshot/contract.mjs +4 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-4.snapshot/package.json +1 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-5.claim +1 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-5.diagnostic.json +1 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-5.json +117 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runs/rescreen-6.json +53 -0
- package/docs/evaluation/live-rescreen-2026-10-17/runtime-observation.json +11 -0
- package/docs/evaluation/live-screening-2026-10-17/approval.json +13 -0
- package/docs/evaluation/live-screening-2026-10-17/approved-budget.json +13 -0
- package/docs/evaluation/live-screening-2026-10-17/approved-manifest.json +359 -0
- package/docs/evaluation/live-screening-2026-10-17/audit.json +143 -0
- package/docs/evaluation/live-screening-2026-10-17/integrity.json +148 -0
- package/docs/evaluation/live-screening-2026-10-17/inventory.json +239 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/comparison.json +247 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-1.claim +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-1.diagnostic.json +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-1.json +98 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-2.claim +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-2.json +104 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-2.patch +11 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-2.snapshot/contract.mjs +4 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-2.snapshot/package.json +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-3.claim +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-3.diagnostic.json +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-3.json +97 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-4.claim +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-4.json +104 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-4.patch +11 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-4.snapshot/contract.mjs +4 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-4.snapshot/package.json +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-5.claim +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-5.diagnostic.json +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-5.json +97 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-6.claim +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-6.json +104 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-6.patch +11 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-6.snapshot/contract.mjs +4 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-6.snapshot/package.json +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-7.claim +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-7.json +108 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-8.claim +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-8.diagnostic.json +1 -0
- package/docs/evaluation/live-screening-2026-10-17/runs/screen-8.json +116 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/README.md +124 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/ab-proposal.json +135 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-1/README.md +25 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-1/approved-budget.json +13 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-1/approved-decision.json +79 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-1/approved-manifest.json +271 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-1/token-live-result.json +546 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-2/README.md +22 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-2/approved-budget.json +13 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-2/approved-decision.json +80 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-2/approved-manifest.json +271 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-2/token-live-result.json +1663 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-3/README.md +23 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-3/approved-budget.json +13 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-3/approved-decision.json +71 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-3/approved-manifest.json +271 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-3/token-live-result.json +1748 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-4/README.md +25 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-4/arm-A/approved-budget.json +13 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-4/arm-A/approved-decision.json +71 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-4/arm-A/approved-manifest.json +271 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-4/arm-A/token-live-result.json +3019 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-4/arm-B/approved-budget.json +13 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-4/arm-B/approved-decision.json +71 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-4/arm-B/approved-manifest.json +271 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/probe/attempt-4/arm-B/token-live-result.json +2859 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/README.md +67 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r1-pair1-A/approved-budget.json +13 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r1-pair1-A/approved-decision.json +71 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r1-pair1-A/approved-manifest.json +271 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r1-pair1-A/token-live-result.json +3019 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r2-pair1-B/approved-budget.json +13 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r2-pair1-B/approved-decision.json +71 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r2-pair1-B/approved-manifest.json +271 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r2-pair1-B/token-live-result.json +2981 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r3-pair2-B/approved-budget.json +13 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r3-pair2-B/approved-decision.json +71 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r3-pair2-B/approved-manifest.json +271 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r3-pair2-B/token-live-result.json +2887 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r4-pair2-A/approved-budget.json +13 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r4-pair2-A/approved-decision.json +71 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r4-pair2-A/approved-manifest.json +271 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r4-pair2-A/token-live-result.json +3189 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r5-pair3-B/approved-budget.json +13 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r5-pair3-B/approved-decision.json +71 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r5-pair3-B/approved-manifest.json +271 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r5-pair3-B/token-live-result.json +2929 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r6-pair3-A/approved-budget.json +13 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r6-pair3-A/approved-decision.json +71 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r6-pair3-A/approved-manifest.json +271 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r6-pair3-A/token-live-result.json +3085 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r7-pair4-A/approved-budget.json +13 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r7-pair4-A/approved-decision.json +71 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r7-pair4-A/approved-manifest.json +271 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r7-pair4-A/token-live-result.json +3019 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r8-pair4-B/approved-budget.json +13 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r8-pair4-B/approved-decision.json +71 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r8-pair4-B/approved-manifest.json +271 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/r8-pair4-B/token-live-result.json +2925 -0
- package/docs/evaluation/m1-ab-proposal-2026-10-18/results/summary-rows.json +338 -0
- package/docs/evaluation/node24-followup-2026-10-17/README.md +55 -0
- package/docs/evaluation/node24-followup-2026-10-17/client-migration-review.json +20 -0
- package/docs/evaluation/node24-followup-2026-10-17/client-registration-migration.json +31 -0
- package/docs/evaluation/node24-followup-2026-10-17/client-registration-verification.json +389 -0
- package/docs/evaluation/node24-followup-2026-10-17/closure-checks.json +33 -0
- package/docs/evaluation/node24-followup-2026-10-17/cursor-headless-probe.mjs +259 -0
- package/docs/evaluation/node24-followup-2026-10-17/cursor-headless-report.md +39 -0
- package/docs/evaluation/node24-followup-2026-10-17/cursor-headless-result-attempt-2.json +49 -0
- package/docs/evaluation/node24-followup-2026-10-17/cursor-headless-result-attempt-3.json +76 -0
- package/docs/evaluation/node24-followup-2026-10-17/cursor-headless-result-attempt-4.json +108 -0
- package/docs/evaluation/node24-followup-2026-10-17/cursor-headless-result.json +12 -0
- package/docs/evaluation/node24-followup-2026-10-17/cursor-headless-run.mjs +96 -0
- package/docs/evaluation/node24-followup-2026-10-17/download.json +16 -0
- package/docs/evaluation/node24-followup-2026-10-17/extension-summary.json +97 -0
- package/docs/evaluation/node24-followup-2026-10-17/final-review.json +15 -0
- package/docs/evaluation/node24-followup-2026-10-17/install.json +10 -0
- package/docs/evaluation/node24-followup-2026-10-17/integrity.json +204 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-evidence.json +39 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-probe.mjs +277 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-report.md +35 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-19-48-378Z-b378dc9f-9ab8-4349-8892-78af8184f78f.json +151 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-20-22-821Z-85cfcba4-c05e-4c5a-9658-d8d70f5c8d1a.json +223 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-20-54-825Z-fd5d8373-6e29-4197-84bd-2e65251b4db8.json +207 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-21-44-636Z-488698ad-f8bf-4d7e-b85a-615275c32e5d.json +82 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-22-05-375Z-16f5d77c-32a2-4d0a-905a-e080b392316f.json +94 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-22-07-471Z-fcbe7c98-fed3-4120-a860-b2e3f9572836.json +63 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-22-17-638Z-45ec386d-3429-4a7c-a10e-8673c03861f0.json +63 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-22-22-485Z-1b08e134-667c-4416-8372-cb233939c48b.json +125 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-22-25-490Z-223fd05e-52f9-4996-88d7-3ec43a6ecdd9.json +125 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-23-42-291Z-f4af1e12-844e-4b2d-a090-9068e7626dd5.json +82 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-24-36-866Z-30770d13-c7ae-4309-921b-5c1b43050adb.json +52 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-25-05-378Z-2a5dffc1-3f3a-433a-823f-6e77964dcaee.json +53 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-25-15-842Z-798946f5-b9a5-4810-8a0c-35be6f40abb3.json +83 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-results-2026-10-17T09-25-19-099Z-89bd000d-bb51-4e3a-b713-51ff1ff4e38b.json +87 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-extensions-runner.mjs +172 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-install.json +121 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-package-lock.json +2321 -0
- package/docs/evaluation/node24-followup-2026-10-17/isolated-package.json +12 -0
- package/docs/evaluation/node24-followup-2026-10-17/launcher-review.json +17 -0
- package/docs/evaluation/node24-followup-2026-10-17/launcher-switch.json +28 -0
- package/docs/evaluation/node24-followup-2026-10-17/mcp-launcher-test.json +24 -0
- package/docs/evaluation/node24-followup-2026-10-17/migrate-client-node.mjs +129 -0
- package/docs/evaluation/node24-followup-2026-10-17/node-runtime-report.md +127 -0
- package/docs/evaluation/node24-followup-2026-10-17/node24-checks.json +44 -0
- package/docs/evaluation/node24-followup-2026-10-17/pi-launcher-test.json +13 -0
- package/docs/evaluation/node24-followup-2026-10-17/publication-export.json +11 -0
- package/docs/evaluation/node24-followup-2026-10-17/restore-launchers.mjs +26 -0
- package/docs/evaluation/node24-followup-2026-10-17/verify-client-node.mjs +36 -0
- package/docs/evaluation/permission-gates-2026-10-17/README.md +23 -0
- package/docs/evaluation/permission-gates-2026-10-17/attempts.json +53 -0
- package/docs/evaluation/permission-gates-2026-10-17/integrity.json +46 -0
- package/docs/evaluation/permission-gates-2026-10-17/permission-gate-probe.mjs +132 -0
- package/docs/evaluation/permission-gates-2026-10-17/permission-gate-worker.mjs +209 -0
- package/docs/evaluation/permission-gates-2026-10-17/permission-gates-result-final.json +53 -0
- package/docs/evaluation/permission-gates-2026-10-17/permission-gates-result-verified.json +54 -0
- package/docs/evaluation/permission-gates-2026-10-17/permission-gates-result.json +53 -0
- package/docs/evaluation/permission-gates-2026-10-17/review.json +19 -0
- package/docs/evaluation/permission-gates-2026-10-17/superseded-initial-receipt.json +40 -0
- package/docs/evaluation/pi-lens-registration-2026-10-19/README.md +90 -0
- package/docs/evaluation/pi-lens-registration-2026-10-19/probe.mjs +126 -0
- package/docs/evaluation/pi-lens-registration-2026-10-19/result.json +1 -0
- package/docs/evaluation/plan-continuation-2026-10-17/README.md +107 -0
- package/docs/evaluation/plan-continuation-2026-10-17/budget.proposed.json +13 -0
- package/docs/evaluation/plan-continuation-2026-10-17/checks.json +1048 -0
- package/docs/evaluation/plan-continuation-2026-10-17/integrity.json +58 -0
- package/docs/evaluation/plan-continuation-2026-10-17/inventory.json +239 -0
- package/docs/evaluation/plan-continuation-2026-10-17/manifest.proposed.json +315 -0
- package/docs/evaluation/plan-continuation-2026-10-17/next-stage-ledger.json +19 -0
- package/docs/evaluation/plan-continuation-2026-10-17/prepare-rescreen.mjs +30 -0
- package/docs/evaluation/plan-continuation-2026-10-17/prior-integrity.json +25 -0
- package/docs/evaluation/plan-continuation-2026-10-17/proposal-validation.json +14 -0
- package/docs/evaluation/plan-continuation-2026-10-17/receipt-contract-update.patch +40 -0
- package/docs/evaluation/plan-continuation-2026-10-17/review.json +8 -0
- package/docs/evaluation/plan-continuation-2026-10-17/source-delta.json +14 -0
- package/docs/evaluation/profile-evaluation.md +297 -0
- package/docs/evaluation/publication-2026-10-17/README.md +88 -0
- package/docs/evaluation/publication-2026-10-17/checks.json +117 -0
- package/docs/evaluation/publication-2026-10-17/integrity.json +21 -0
- package/docs/evaluation/publication-2026-10-17/publication-scan.json +63 -0
- package/docs/evaluation/publication-2026-10-17/review.json +21 -0
- package/docs/evaluation/s5-decision-inputs-2026-10-18/README.md +16 -0
- package/docs/evaluation/s5-decision-inputs-2026-10-18/bounded-wait.md +78 -0
- package/docs/evaluation/s5-decision-inputs-2026-10-18/claude-projection/README.md +151 -0
- package/docs/evaluation/s5-decision-inputs-2026-10-18/claude-projection/attempt-1/claude-projection.json +126 -0
- package/docs/evaluation/s5-decision-inputs-2026-10-18/claude-projection/attempt-2/claude-projection.json +1895 -0
- package/docs/evaluation/s5-decision-inputs-2026-10-18/claude-projection/attempt-3/claude-projection.json +1895 -0
- package/docs/evaluation/s5-decision-inputs-2026-10-18/claude-projection/attempt-4/claude-projection.json +1797 -0
- package/docs/evaluation/s5-decision-inputs-2026-10-18/claude-projection/attempt-5/claude-projection.json +1797 -0
- package/docs/evaluation/s5-decision-inputs-2026-10-18/worker-usage.md +63 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/README.md +212 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/binding.json +20 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/config-ev-off.json +43 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/config-ev-spool.json +43 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/config-l3.json +39 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/config-pre.json +31 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e-teardown-setup-remove.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e1-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e1-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e1-digest-ev-e1.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e1-leaks.json +131 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e1-oracle.json +74 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e1-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e1-setup-1-dryrun.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e1-setup-2-apply.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e1-setup-3-verify.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e2-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e2-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e2-digest-ev-e2l.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e2-digest-ev-e2s.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e2-leaks.json +205 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e2-oracle.json +110 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e2-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e3b-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e3b-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e3b-digest-ev-e3.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e3b-leaks.json +215 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e3b-oracle.json +79 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e3b-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e4-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e4-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e4-digest-ev-e4a.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e4-digest-ev-e4b.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e4-late-a.json +16 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e4-late-b.json +16 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e4-leaks.json +167 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e4-oracle.json +70 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e4-run.json +37 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e5-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e5-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e5-digest-ev-e5.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e5-leaks.json +82 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e5-oracle.json +60 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e5-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e5-server-env-names.txt +14 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e6b-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e6b-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e6b-digest-ev-e1.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e6b-leaks.json +156 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e6b-run.json +37 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e6b-setup-apply.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/e6b-teardown-remove.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/final-e-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/kit.sha256 +23 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l2-packed-off.json +1185 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l2-packed-spool.json +1334 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l2-wt-off.json +1185 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l2-wt-spool.json +1334 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv1-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv1-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv1-digest-cc-analysis.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv1-leaks.json +80 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv1-oracle.json +61 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv1-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv2-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv2-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv2-leaks.json +80 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv2-oracle-stage1.json +34 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv2-oracle-stage2.json +35 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv2-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv2-snapshot-stage1.txt +4 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv2-snapshot-stage2.txt +5 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv3-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv3-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv3-digest-cc-abort.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv3-leaks.json +82 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv3-oracle-flow.json +61 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv3-oracle-late.json +16 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cc-inv3-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-controller-skill-remove.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-controller-skill-setup.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv1-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv1-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv1-digest-cx-analysis.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv1-leaks.json +93 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv1-oracle.json +61 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv1-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv2-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv2-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv2-leaks.json +93 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv2-oracle-stage1.json +34 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv2-oracle-stage2.json +35 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv2-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv2-snapshot-stage1.txt +4 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv2-snapshot-stage2.txt +5 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv3-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv3-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv3-digest-cx-abort.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv3-leaks.json +95 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv3-oracle-flow.json +61 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv3-oracle-late.json +16 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/l3-cx-inv3-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0-digest-pre-analysis.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0-digest-pre-code.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0-leaks.json +86 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0-oracle.json +39 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0a-harness-fail-clean-10s.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0a-harness-fail-clean.json +15 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0a-harness-fail-digest-pre-analysis.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0a-harness-fail-digest-pre-code.json +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0a-harness-fail-leaks.json +47 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0a-harness-fail-oracle.json +39 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/p0a-harness-fail-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/regdigest-after-cc.json +6 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/regdigest-after-cx.json +6 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/regdigest-after-e.json +6 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/regdigest-before.json +6 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w1-control-apply.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w1-control-dryrun.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w1-provision-apply-attempt1.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w1-provision-apply-attempt2.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w1-provision-dryrun.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w1-writer-verify.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w2-leaks.json +130 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w2-oracle.txt +14 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w2-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w2b-oracle.txt +16 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w2c-oracle.txt +8 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w2d-oracle.txt +6 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w2r-leaks.json +130 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w2r-oracle.txt +3 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w2r-run.json +33 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w3-collect.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w3-finish.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w3r-collect.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w3r-finish.json +1 -0
- package/docs/evaluation/s7-live-acceptance-2026-10-24/evidence/w4-remove.json +1 -0
- package/docs/evaluation/subagent-probe-2026-10-26/README.md +132 -0
- package/docs/evaluation/subagent-probe-2026-10-26/results/K7.json +463 -0
- package/docs/evaluation/subagent-probe-2026-10-26/results/summary.json +50 -0
- package/docs/evaluation/test-coverage-2026-10-17.json +483 -0
- package/docs/evaluation/test-coverage-review-2026-10-17.json +22 -0
- package/docs/evaluation/test-coverage-verification-2026-10-17.json +31 -0
- package/docs/evaluation/token-footprint-2026-10-17/README.md +297 -0
- package/docs/evaluation/token-footprint-2026-10-17/baseline.json +25871 -0
- package/docs/evaluation/token-footprint-2026-10-17/calibration-2/README.md +24 -0
- package/docs/evaluation/token-footprint-2026-10-17/calibration-2/baseline.json +30346 -0
- package/docs/evaluation/token-footprint-2026-10-17/calibration-2/client-projection.json +2538 -0
- package/docs/evaluation/token-footprint-2026-10-17/calibration-2/live-approval/budget.json +13 -0
- package/docs/evaluation/token-footprint-2026-10-17/calibration-2/live-approval/decision.json +69 -0
- package/docs/evaluation/token-footprint-2026-10-17/calibration-2/live-approval/manifest.json +271 -0
- package/docs/evaluation/token-footprint-2026-10-17/calibration-2/live-package.json +785 -0
- package/docs/evaluation/token-footprint-2026-10-17/calibration-2/measurement.json +37956 -0
- package/docs/evaluation/token-footprint-2026-10-17/calibration-2/summary.json +119 -0
- package/docs/evaluation/token-footprint-2026-10-17/checks-final.json +273 -0
- package/docs/evaluation/token-footprint-2026-10-17/checks.json +190 -0
- package/docs/evaluation/token-footprint-2026-10-17/client-attempts/README.md +25 -0
- package/docs/evaluation/token-footprint-2026-10-17/client-attempts/attempt-4.json +2274 -0
- package/docs/evaluation/token-footprint-2026-10-17/client-attempts/pilot-1.json +77 -0
- package/docs/evaluation/token-footprint-2026-10-17/client-attempts/pilot-2.json +81 -0
- package/docs/evaluation/token-footprint-2026-10-17/client-attempts/pilot-3.json +121 -0
- package/docs/evaluation/token-footprint-2026-10-17/current-calibration/baseline.json +30346 -0
- package/docs/evaluation/token-footprint-2026-10-17/current-calibration/measurement.json +37956 -0
- package/docs/evaluation/token-footprint-2026-10-17/current-calibration/summary.json +119 -0
- package/docs/evaluation/token-footprint-2026-10-17/current-client-projection.json +2538 -0
- package/docs/evaluation/token-footprint-2026-10-17/follow-up.md +76 -0
- package/docs/evaluation/token-footprint-2026-10-17/integrity.json +171 -0
- package/docs/evaluation/token-footprint-2026-10-17/live-approval/README.md +36 -0
- package/docs/evaluation/token-footprint-2026-10-17/live-approval/budget.json +13 -0
- package/docs/evaluation/token-footprint-2026-10-17/live-approval/decision.json +69 -0
- package/docs/evaluation/token-footprint-2026-10-17/live-approval/manifest.json +271 -0
- package/docs/evaluation/token-footprint-2026-10-17/live-package.json +795 -0
- package/docs/evaluation/token-footprint-2026-10-17/live-proposal.json +427 -0
- package/docs/evaluation/token-footprint-2026-10-17/m1-pilot/README.md +75 -0
- package/docs/evaluation/token-footprint-2026-10-17/m1-pilot/attempt-1/approved-budget.json +13 -0
- package/docs/evaluation/token-footprint-2026-10-17/m1-pilot/attempt-1/approved-decision.json +69 -0
- package/docs/evaluation/token-footprint-2026-10-17/m1-pilot/attempt-1/approved-manifest.json +271 -0
- package/docs/evaluation/token-footprint-2026-10-17/m1-pilot/attempt-1/token-live-result.json +837 -0
- package/docs/evaluation/token-footprint-2026-10-17/m1-pilot/attempt-2/approved-budget.json +13 -0
- package/docs/evaluation/token-footprint-2026-10-17/m1-pilot/attempt-2/approved-decision.json +69 -0
- package/docs/evaluation/token-footprint-2026-10-17/m1-pilot/attempt-2/approved-manifest.json +271 -0
- package/docs/evaluation/token-footprint-2026-10-17/m1-pilot/attempt-2/token-live-result.json +985 -0
- package/docs/evaluation/token-footprint-2026-10-17/m1-pilot/attempt-3/approved-budget.json +13 -0
- package/docs/evaluation/token-footprint-2026-10-17/m1-pilot/attempt-3/approved-decision.json +69 -0
- package/docs/evaluation/token-footprint-2026-10-17/m1-pilot/attempt-3/approved-manifest.json +271 -0
- package/docs/evaluation/token-footprint-2026-10-17/m1-pilot/attempt-3/token-live-result.json +3055 -0
- package/docs/evaluation/token-footprint-2026-10-17/measurement.json +32476 -0
- package/docs/evaluation/token-footprint-2026-10-17/prior-calibration/README.md +20 -0
- package/docs/evaluation/token-footprint-2026-10-17/prior-calibration/integrity.json +40 -0
- package/docs/evaluation/token-footprint-2026-10-17/summary.json +119 -0
- package/docs/evaluation/tool-definitions-2026-10-18/README.md +204 -0
- package/docs/evaluation/tool-definitions-2026-10-18/codex-projection/after/client-projection.json +2853 -0
- package/docs/evaluation/tool-definitions-2026-10-18/codex-projection/before/client-projection.json +2853 -0
- package/docs/evaluation/tool-definitions-2026-10-18/compare-validation.mjs +64 -0
- package/docs/evaluation/tool-definitions-2026-10-18/diff-validation.mjs +13 -0
- package/docs/evaluation/tool-definitions-2026-10-18/measure-wire.mjs +31 -0
- package/docs/evaluation/worker-system-prompt-2026-10-26/README.md +95 -0
- package/docs/evaluation/worker-system-prompt-2026-10-26/probe.mjs +155 -0
- package/docs/execution-modes.md +388 -0
- package/docs/installation.md +246 -12
- package/docs/isolation-setup.md +258 -0
- package/docs/macos-setup-design.md +2 -2
- package/docs/pi-extensions-design.md +71 -16
- package/docs/releasing.md +12 -6
- package/docs/reviews/2026-10-18-adr-0008-decision-brief.md +53 -0
- package/docs/roadmap.md +320 -9
- package/docs/session-mcp.md +5 -1
- package/docs/skills.md +23 -0
- package/docs/sprints/2026-10-15-s4-decision.md +73 -4
- package/docs/sprints/2026-10-17-token-footprint.md +130 -0
- package/docs/sprints/2026-10-18-s5-maintenance-orchestration.md +202 -0
- package/docs/sprints/2026-10-21-s6-ledger-event-bridge.md +120 -0
- package/docs/sprints/2026-10-24-s7-stabilization-live-acceptance.md +173 -0
- package/docs/sprints/2026-10-24-s8-writer-migration.md +235 -0
- package/docs/sprints/2026-10-26-s10-orchestration-reliability.md +250 -0
- package/docs/sprints/2026-10-26-s11-orchestration-gaps.md +173 -0
- package/docs/threat-model.md +37 -6
- package/docs/tool-contracts.md +91 -9
- package/package.json +17 -11
- package/scripts/isolation-acceptance.mjs +709 -0
- package/scripts/isolation-probe.cjs +213 -0
- package/skills/pi-session-implementation/SKILL.md +13 -3
- package/skills/pi-session-orchestration/SKILL.md +50 -13
- package/skills/pi-session-orchestration/references/start-errors.md +12 -0
- package/skills/pi-session-review/SKILL.md +13 -5
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
// Bounded supervisor: publishes evidence only after the worker closes and its
|
|
2
|
+
// process group and temporary scope are observed clean.
|
|
3
|
+
import { randomUUID } from 'node:crypto';
|
|
4
|
+
import { spawn } from 'node:child_process';
|
|
5
|
+
import { mkdir, readFile, readdir, writeFile, lstat } from 'node:fs/promises';
|
|
6
|
+
import { dirname, join, resolve } from 'node:path';
|
|
7
|
+
import { fileURLToPath } from 'node:url';
|
|
8
|
+
|
|
9
|
+
const repo = process.cwd();
|
|
10
|
+
const node = process.execPath;
|
|
11
|
+
if (!node.includes('node-v24.22.0')) throw new Error('approved_node_24_22_0_required');
|
|
12
|
+
const dossier = dirname(fileURLToPath(import.meta.url));
|
|
13
|
+
const worker = join(dossier, 'permission-gate-worker.mjs');
|
|
14
|
+
const archivePath = process.argv[2] ? resolve(process.argv[2]) : join(dossier, 'permission-gates-result.json');
|
|
15
|
+
try { await lstat(archivePath); throw new Error('fresh_archive_path_required'); }
|
|
16
|
+
catch (error) { if (error?.code !== 'ENOENT') throw error; }
|
|
17
|
+
const tempHome = `/tmp/pi-permission-gate-supervisor-${randomUUID()}`;
|
|
18
|
+
const env = { HOME: tempHome, PATH: `${dirname(node)}:/usr/bin:/bin`, DO_NOT_TRACK: '1' };
|
|
19
|
+
await mkdir(tempHome, { mode: 0o700 });
|
|
20
|
+
const child = spawn(node, [worker], { cwd: repo, env, detached: true, stdio: ['ignore', 'pipe', 'ignore'] });
|
|
21
|
+
let output = '';
|
|
22
|
+
let outputOverflow = false;
|
|
23
|
+
let spawnFailed = false;
|
|
24
|
+
let terminal = null;
|
|
25
|
+
const timeoutMs = 45_000;
|
|
26
|
+
let escalation;
|
|
27
|
+
let timedOut = false;
|
|
28
|
+
const deadline = setTimeout(() => {
|
|
29
|
+
timedOut = true;
|
|
30
|
+
void signalGroup('SIGTERM');
|
|
31
|
+
escalation = setTimeout(() => { void signalGroup('SIGKILL'); }, 1_000);
|
|
32
|
+
}, timeoutMs);
|
|
33
|
+
child.stdout.on('data', (chunk) => {
|
|
34
|
+
if (outputOverflow) return;
|
|
35
|
+
if (Buffer.byteLength(output) + chunk.length > 65_536) {
|
|
36
|
+
outputOverflow = true;
|
|
37
|
+
void signalGroup('SIGKILL');
|
|
38
|
+
} else output += chunk;
|
|
39
|
+
});
|
|
40
|
+
terminal = await new Promise((resolvePromise) => {
|
|
41
|
+
child.once('error', () => { spawnFailed = true; resolvePromise({ code: null, signal: null }); });
|
|
42
|
+
child.once('exit', (code, signal) => resolvePromise({ code, signal }));
|
|
43
|
+
});
|
|
44
|
+
clearTimeout(deadline);
|
|
45
|
+
if (escalation) clearTimeout(escalation);
|
|
46
|
+
|
|
47
|
+
async function groupMembers(pgid) {
|
|
48
|
+
let entries;
|
|
49
|
+
try { entries = await readdir('/proc'); } catch { return null; }
|
|
50
|
+
const members = [];
|
|
51
|
+
for (const entry of entries) {
|
|
52
|
+
if (!/^\d+$/.test(entry)) continue;
|
|
53
|
+
try {
|
|
54
|
+
const stat = await readFile(`/proc/${entry}/stat`, 'utf8');
|
|
55
|
+
const close = stat.lastIndexOf(')');
|
|
56
|
+
if (close < 0) return null;
|
|
57
|
+
const fields = stat.slice(close + 2).trim().split(/\s+/);
|
|
58
|
+
if (Number(fields[2]) === pgid && fields[0] !== 'Z' && fields[0] !== 'X') members.push(Number(entry));
|
|
59
|
+
} catch { /* a process may exit while /proc is scanned */ }
|
|
60
|
+
}
|
|
61
|
+
return members;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
async function signalGroup(signal) {
|
|
65
|
+
try { process.kill(-child.pid, signal); } catch (error) { if (error?.code !== 'ESRCH') throw error; }
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
async function waitForGroupEmpty(ms) {
|
|
69
|
+
const end = Date.now() + ms;
|
|
70
|
+
while (Date.now() < end) {
|
|
71
|
+
const members = await groupMembers(child.pid);
|
|
72
|
+
if (members && members.length === 0) return true;
|
|
73
|
+
await new Promise((resolvePromise) => setTimeout(resolvePromise, 40));
|
|
74
|
+
}
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
let processGroupClean = await waitForGroupEmpty(1_500);
|
|
79
|
+
if (!processGroupClean) {
|
|
80
|
+
await signalGroup('SIGTERM');
|
|
81
|
+
processGroupClean = await waitForGroupEmpty(1_000);
|
|
82
|
+
}
|
|
83
|
+
if (!processGroupClean) {
|
|
84
|
+
await signalGroup('SIGKILL');
|
|
85
|
+
processGroupClean = await waitForGroupEmpty(1_500);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
let workerReceipt;
|
|
89
|
+
try {
|
|
90
|
+
const lines = output.trim().split('\n');
|
|
91
|
+
if (lines.length !== 1) throw new Error('receipt_line_count');
|
|
92
|
+
workerReceipt = JSON.parse(lines[0]);
|
|
93
|
+
} catch { workerReceipt = null; }
|
|
94
|
+
|
|
95
|
+
// Remove the supervisor-only HOME after the child has terminated.
|
|
96
|
+
let supervisorHomeRemoved = false;
|
|
97
|
+
try {
|
|
98
|
+
const { rm, stat } = await import('node:fs/promises');
|
|
99
|
+
await rm(tempHome, { recursive: true, force: false });
|
|
100
|
+
try { await stat(tempHome); } catch (error) { supervisorHomeRemoved = error?.code === 'ENOENT'; }
|
|
101
|
+
} catch { supervisorHomeRemoved = false; }
|
|
102
|
+
|
|
103
|
+
const processClean = !spawnFailed && !outputOverflow && !timedOut && terminal?.code === 0 && terminal?.signal === null && processGroupClean;
|
|
104
|
+
const cleanupClean = workerReceipt?.cleanup?.dispose_promise_resolved === true
|
|
105
|
+
&& workerReceipt?.cleanup?.fixture_session_shutdown_observed === true
|
|
106
|
+
&& workerReceipt?.cleanup?.temporary_scope_removed === true
|
|
107
|
+
&& supervisorHomeRemoved;
|
|
108
|
+
const pass = processClean && cleanupClean && workerReceipt?.status === 'PASS';
|
|
109
|
+
const receipt = {
|
|
110
|
+
...workerReceipt,
|
|
111
|
+
schema_version: '1.0.0',
|
|
112
|
+
status: pass ? 'PASS' : 'FAIL',
|
|
113
|
+
process_supervision: {
|
|
114
|
+
worker_exit_observed: terminal !== null,
|
|
115
|
+
worker_exit_code: terminal?.code ?? null,
|
|
116
|
+
worker_signal: terminal?.signal ?? null,
|
|
117
|
+
spawn_failed: spawnFailed,
|
|
118
|
+
timeout_ms: timeoutMs,
|
|
119
|
+
timeout_triggered: timedOut,
|
|
120
|
+
output_limit_exceeded: outputOverflow,
|
|
121
|
+
process_group_empty_observed: processGroupClean,
|
|
122
|
+
supervisor_home_removed: supervisorHomeRemoved,
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
const outputDir = resolve(repo, 'eval/results');
|
|
127
|
+
await mkdir(outputDir, { recursive: true });
|
|
128
|
+
const fileName = `permission-gates-${randomUUID()}.json`;
|
|
129
|
+
await writeFile(join(outputDir, fileName), JSON.stringify(receipt, null, 2) + '\n', { flag: 'wx', mode: 0o600 });
|
|
130
|
+
await writeFile(archivePath, JSON.stringify(receipt, null, 2) + '\n', { flag: 'wx', mode: 0o600 });
|
|
131
|
+
process.stdout.write(JSON.stringify({ status: receipt.status, evidence: `eval/results/${fileName}`, policy_checks: Object.keys(receipt.policy_checks ?? {}).length, in_memory_counter: receipt.synthetic_dispatch?.in_memory_counter ?? null, process_group_empty: processGroupClean, scope_removed: receipt.cleanup?.temporary_scope_removed ?? false }) + '\n');
|
|
132
|
+
if (!pass) process.exitCode = 1;
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
// Provider-free permission-policy and tool_call probe. The candidate package is
|
|
2
|
+
// loaded by the real Pi SDK adapter; the SDK's public ExtensionRunner seam is
|
|
3
|
+
// used to invoke its actual registered gate hook with synthetic events.
|
|
4
|
+
import assert from 'node:assert/strict';
|
|
5
|
+
import { randomUUID } from 'node:crypto';
|
|
6
|
+
import { cp, mkdir, mkdtemp, readFile, rm, symlink, writeFile } from 'node:fs/promises';
|
|
7
|
+
import { dirname, join, resolve } from 'node:path';
|
|
8
|
+
import { pathToFileURL } from 'node:url';
|
|
9
|
+
import net from 'node:net';
|
|
10
|
+
import tls from 'node:tls';
|
|
11
|
+
import http from 'node:http';
|
|
12
|
+
import https from 'node:https';
|
|
13
|
+
import dns from 'node:dns';
|
|
14
|
+
import dnsPromises from 'node:dns/promises';
|
|
15
|
+
import dgram from 'node:dgram';
|
|
16
|
+
import childProcess from 'node:child_process';
|
|
17
|
+
import { syncBuiltinESMExports } from 'node:module';
|
|
18
|
+
|
|
19
|
+
const repo = process.cwd();
|
|
20
|
+
const scope = await mkdtemp('/tmp/pi-permission-gates-');
|
|
21
|
+
const workspace = join(scope, 'workspace');
|
|
22
|
+
const agent = workspace;
|
|
23
|
+
const npmAgent = resolve(repo, 'eval/results/node24-extension-followup-04470d85-3a99-47e3-b356-ce96e77de0dd/extension-agent');
|
|
24
|
+
const packageRoot = join(npmAgent, 'npm/node_modules/@gotgenes/pi-permission-system');
|
|
25
|
+
const candidateMeta = JSON.parse(await readFile(join(packageRoot, 'package.json'), 'utf8'));
|
|
26
|
+
assert.equal(candidateMeta.version, '40.3.0');
|
|
27
|
+
process.env.HOME = scope;
|
|
28
|
+
process.env.PI_CODING_AGENT_DIR = agent;
|
|
29
|
+
process.env.PI_AUDIT_AGENT_DIR = agent;
|
|
30
|
+
process.env.XDG_CONFIG_HOME = join(scope, 'config');
|
|
31
|
+
process.env.XDG_CACHE_HOME = join(scope, 'cache');
|
|
32
|
+
process.env.XDG_DATA_HOME = join(scope, 'data');
|
|
33
|
+
process.env.DO_NOT_TRACK = '1';
|
|
34
|
+
const fixtureRoot = join(agent, 'npm/node_modules/pi-extension-fixture');
|
|
35
|
+
const companionRoot = join(agent, 'npm/node_modules/pi-permission-probe-companion');
|
|
36
|
+
let deniedNetwork = 0;
|
|
37
|
+
let deniedChildren = 0;
|
|
38
|
+
const blockNetwork = () => { deniedNetwork++; throw Object.assign(new Error('offline_network_denied'), { code: 'OFFLINE_NETWORK_DENIED' }); };
|
|
39
|
+
for (const [target, names] of [
|
|
40
|
+
[net, ['connect', 'createConnection']], [net.Socket.prototype, ['connect']], [tls, ['connect']],
|
|
41
|
+
[http, ['request', 'get']], [https, ['request', 'get']], [dns, ['lookup', 'resolve', 'resolve4', 'resolve6']],
|
|
42
|
+
[dnsPromises, ['lookup', 'resolve', 'resolve4', 'resolve6']],
|
|
43
|
+
[dnsPromises.Resolver.prototype, ['resolve', 'resolve4', 'resolve6']], [dgram, ['createSocket']],
|
|
44
|
+
]) for (const name of names) target[name] = blockNetwork;
|
|
45
|
+
globalThis.fetch = blockNetwork;
|
|
46
|
+
if ('WebSocket' in globalThis) globalThis.WebSocket = class { constructor() { blockNetwork(); } };
|
|
47
|
+
for (const name of ['spawn', 'spawnSync', 'exec', 'execSync', 'execFile', 'execFileSync', 'fork']) {
|
|
48
|
+
childProcess[name] = () => { deniedChildren++; throw Object.assign(new Error('offline_child_process_denied'), { code: 'OFFLINE_CHILD_PROCESS_DENIED' }); };
|
|
49
|
+
}
|
|
50
|
+
syncBuiltinESMExports();
|
|
51
|
+
let handle;
|
|
52
|
+
let guard;
|
|
53
|
+
let capturedSession;
|
|
54
|
+
let receipt;
|
|
55
|
+
let disposePromiseResolved = false;
|
|
56
|
+
let sessionShutdownObserved = false;
|
|
57
|
+
let scopeRemoved = false;
|
|
58
|
+
try {
|
|
59
|
+
await mkdir(join(scope, 'config'), { recursive: true, mode: 0o700 });
|
|
60
|
+
await mkdir(join(scope, 'cache'), { recursive: true, mode: 0o700 });
|
|
61
|
+
await mkdir(join(scope, 'data'), { recursive: true, mode: 0o700 });
|
|
62
|
+
await mkdir(join(workspace, 'extensions/pi-permission-system'), { recursive: true, mode: 0o700 });
|
|
63
|
+
await mkdir(join(companionRoot, 'node_modules/@gotgenes'), { recursive: true, mode: 0o700 });
|
|
64
|
+
await cp(join(repo, 'test/fixtures/pi-extension-fixture'), fixtureRoot, { recursive: true, errorOnExist: true });
|
|
65
|
+
await symlink(packageRoot, join(companionRoot, 'node_modules/@gotgenes/pi-permission-system'));
|
|
66
|
+
await writeFile(join(workspace, 'extensions/pi-permission-system/config.json'), JSON.stringify({ permission: {
|
|
67
|
+
'*': 'deny', read: 'allow', write: 'deny', bash: 'ask', fixture_tool: 'allow',
|
|
68
|
+
mcp: { '*': 'deny', 'fixture_server:fixture_read': 'allow' },
|
|
69
|
+
path: { '*': 'allow', '*.env': 'deny' }, external_directory: 'allow',
|
|
70
|
+
} }, null, 2) + '\n', { flag: 'wx', mode: 0o600 });
|
|
71
|
+
await writeFile(join(companionRoot, 'package.json'), JSON.stringify({ name: 'pi-permission-probe-companion', version: '1.0.0', type: 'module', pi: { extensions: ['./index.ts'] } }) + '\n', { flag: 'wx', mode: 0o600 });
|
|
72
|
+
await writeFile(join(companionRoot, 'index.ts'), `
|
|
73
|
+
import { getPermissionsService } from '@gotgenes/pi-permission-system';
|
|
74
|
+
export default function permissionProbe(pi) {
|
|
75
|
+
pi.on('session_start', (_event, ctx) => {
|
|
76
|
+
globalThis.__permissionProbeService = getPermissionsService(ctx.sessionManager.getSessionId());
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
`, { flag: 'wx', mode: 0o600 });
|
|
80
|
+
|
|
81
|
+
const build = join(repo, '.profile-eval/src');
|
|
82
|
+
const { installStdoutGuard } = await import(pathToFileURL(join(build, 'stdout-guard.js')));
|
|
83
|
+
const suppressed = [];
|
|
84
|
+
guard = installStdoutGuard({ report: (line) => suppressed.push(JSON.parse(line)) });
|
|
85
|
+
const { SdkPiSessionAdapter } = await import(pathToFileURL(join(build, 'sdk-pi-adapter.js')));
|
|
86
|
+
const { parseExtensionSpec } = await import(pathToFileURL(join(build, 'extension-spec.js')));
|
|
87
|
+
const { resolvePiExtension } = await import(pathToFileURL(join(build, 'pi-extensions.js')));
|
|
88
|
+
const fixtureSpec = parseExtensionSpec('npm:pi-extension-fixture@1.0.0');
|
|
89
|
+
const candidateSpec = parseExtensionSpec('npm:@gotgenes/pi-permission-system@40.3.0');
|
|
90
|
+
const companionSpec = parseExtensionSpec('npm:pi-permission-probe-companion@1.0.0');
|
|
91
|
+
assert.ok(fixtureSpec && candidateSpec && companionSpec);
|
|
92
|
+
const resolveExtension = (spec) => resolvePiExtension(spec, { agentDir: spec.name === '@gotgenes/pi-permission-system' ? npmAgent : agent });
|
|
93
|
+
const diagnostics = [];
|
|
94
|
+
const {
|
|
95
|
+
ModelRuntime,
|
|
96
|
+
createAgentSessionServices,
|
|
97
|
+
createAgentSessionFromServices,
|
|
98
|
+
createAgentSessionRuntime,
|
|
99
|
+
} = await import('@earendil-works/pi-coding-agent');
|
|
100
|
+
const adapter = new SdkPiSessionAdapter({
|
|
101
|
+
modelRuntimeFactory: () => ModelRuntime.create({ refreshOnCreate: false, allowModelNetwork: false, modelsPath: null, authPath: join(scope, 'absent-auth.json'), modelsStorePath: join(scope, 'absent-models.json') }),
|
|
102
|
+
resolveExtension,
|
|
103
|
+
extensionSdk: {
|
|
104
|
+
createServices: createAgentSessionServices,
|
|
105
|
+
createSessionFromServices: createAgentSessionFromServices,
|
|
106
|
+
createRuntime: async (factory, options) => {
|
|
107
|
+
const runtime = await createAgentSessionRuntime(factory, options);
|
|
108
|
+
// AgentSessionRuntime.session is a documented public getter. Capture
|
|
109
|
+
// the SDK result through the injected public adapter seam; never read
|
|
110
|
+
// private fields from the PiSessionAdapter handle.
|
|
111
|
+
capturedSession = runtime.session;
|
|
112
|
+
return runtime;
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
diagnosticSink: (item) => diagnostics.push({ stage: item.stage, code: item.code }),
|
|
116
|
+
});
|
|
117
|
+
const profile = {
|
|
118
|
+
alias: 'permission-gates-isolated', permissionProfile: 'coding', provider: 'fixture-ext', model: 'fixture-ext-model', thinkingLevel: 'off',
|
|
119
|
+
extensions: [fixtureSpec, candidateSpec, companionSpec], skills: [],
|
|
120
|
+
};
|
|
121
|
+
handle = await adapter.create({ cwd: workspace, executionProfile: profile });
|
|
122
|
+
assert.ok(capturedSession, 'public SDK runtime seam must expose its public session result');
|
|
123
|
+
const loaded = capturedSession.resourceLoader.getExtensions();
|
|
124
|
+
assert.equal(loaded.errors.length, 0);
|
|
125
|
+
assert.ok(capturedSession.getActiveToolNames().includes('fixture_tool'));
|
|
126
|
+
const service = globalThis.__permissionProbeService;
|
|
127
|
+
assert.ok(service, 'documented package root API must resolve the live node service');
|
|
128
|
+
|
|
129
|
+
const checks = {
|
|
130
|
+
general_allow: service.checkPermission('read').state,
|
|
131
|
+
general_deny: service.checkPermission('write').state,
|
|
132
|
+
path_allowed: service.checkPermission('path', join(workspace, 'notes.txt')).state,
|
|
133
|
+
path_denied: service.checkPermission('path', join(workspace, 'secrets.env')).state,
|
|
134
|
+
mcp_allowed: service.checkPermission('mcp', 'fixture_server:fixture_read').state,
|
|
135
|
+
mcp_unmatched: service.checkPermission('mcp', 'unknown_server:unknown_tool').state,
|
|
136
|
+
headless_ask: service.checkPermission('bash', 'echo synthetic').state,
|
|
137
|
+
};
|
|
138
|
+
assert.deepEqual(checks, { general_allow: 'allow', general_deny: 'deny', path_allowed: 'allow', path_denied: 'deny', mcp_allowed: 'allow', mcp_unmatched: 'deny', headless_ask: 'ask' });
|
|
139
|
+
|
|
140
|
+
const runner = capturedSession.extensionRunner;
|
|
141
|
+
const extensionContext = runner.createContext();
|
|
142
|
+
assert.equal(extensionContext.hasUI, false, 'print adapter must expose no dialog-capable UI');
|
|
143
|
+
let syntheticExecutorCounter = 0;
|
|
144
|
+
async function fakeDispatch(toolName, input, id) {
|
|
145
|
+
const decision = await runner.emitToolCall({ type: 'tool_call', toolName, input, toolCallId: id });
|
|
146
|
+
const reachedSyntheticExecutor = !decision?.block;
|
|
147
|
+
if (reachedSyntheticExecutor) syntheticExecutorCounter++;
|
|
148
|
+
return { decision: decision ?? {}, reachedSyntheticExecutor };
|
|
149
|
+
}
|
|
150
|
+
const allowed = await fakeDispatch('fixture_tool', {}, 'synthetic-allow');
|
|
151
|
+
const denied = await fakeDispatch('write', { path: join(workspace, 'out.txt'), content: 'synthetic' }, 'synthetic-deny');
|
|
152
|
+
const ask = await fakeDispatch('bash', { command: 'echo synthetic' }, 'synthetic-ask');
|
|
153
|
+
const unknown = await fakeDispatch('not_registered', {}, 'synthetic-unregistered');
|
|
154
|
+
assert.equal(allowed.reachedSyntheticExecutor, true);
|
|
155
|
+
assert.equal(denied.reachedSyntheticExecutor, false);
|
|
156
|
+
assert.equal(ask.reachedSyntheticExecutor, false, 'headless ask must fail closed');
|
|
157
|
+
assert.equal(unknown.reachedSyntheticExecutor, false, 'unregistered tool must fail closed');
|
|
158
|
+
assert.equal(syntheticExecutorCounter, 1, 'only the allowed call reaches the in-memory synthetic counter');
|
|
159
|
+
assert.equal(deniedNetwork, 0);
|
|
160
|
+
assert.equal(deniedChildren, 0);
|
|
161
|
+
|
|
162
|
+
receipt = {
|
|
163
|
+
schema_version: '1.0.0', kind: 'pi-permission-system-policy-hook-probe', status: 'PASS',
|
|
164
|
+
package: `${candidateMeta.name}@${candidateMeta.version}`, node: process.versions.node,
|
|
165
|
+
loading: 'real SDK adapter and actual candidate package entry',
|
|
166
|
+
hook: 'public AgentSession.extensionRunner.emitToolCall() invoked the registered actual tool_call handler',
|
|
167
|
+
policy_checks: checks,
|
|
168
|
+
synthetic_dispatch: {
|
|
169
|
+
allowed_tool_reached_counter: allowed.reachedSyntheticExecutor,
|
|
170
|
+
denied_write_blocked: Boolean(denied.decision.block),
|
|
171
|
+
headless_ask_blocked: Boolean(ask.decision.block),
|
|
172
|
+
unregistered_tool_blocked: Boolean(unknown.decision.block),
|
|
173
|
+
in_memory_counter: syntheticExecutorCounter,
|
|
174
|
+
},
|
|
175
|
+
harness_model_prompts_submitted: 0, provider_calls: 0,
|
|
176
|
+
ui_mode: 'print', has_dialog_capable_ui: extensionContext.hasUI,
|
|
177
|
+
denied_network_attempts: deniedNetwork, denied_child_process_attempts: deniedChildren,
|
|
178
|
+
stdout_suppressed_writes: suppressed.reduce((sum, row) => sum + row.writes, 0),
|
|
179
|
+
diagnostics: diagnostics.map((row) => row.code), evidence_id: randomUUID(),
|
|
180
|
+
limits: [
|
|
181
|
+
'An in-memory synthetic counter advances only after an unblocked hook result. No actual executor was attached or invoked; no operating-system command, file write, MCP connection, or external tool was executed.',
|
|
182
|
+
'These checks cover deterministic policy resolution and registered-hook mediation under a provider-free SDK harness. They do not prove operating-system sandboxing, collector or inner-method enforcement, live UI behavior, MCP transport enforcement, or interactive-client integration.',
|
|
183
|
+
],
|
|
184
|
+
};
|
|
185
|
+
} finally {
|
|
186
|
+
if (handle) {
|
|
187
|
+
try {
|
|
188
|
+
await handle.dispose();
|
|
189
|
+
disposePromiseResolved = true;
|
|
190
|
+
} catch { /* Cleanup status remains failed and prevents a PASS receipt. */ }
|
|
191
|
+
sessionShutdownObserved = globalThis.__piExtensionFixtureEvents?.includes('session_shutdown') ?? false;
|
|
192
|
+
}
|
|
193
|
+
delete globalThis.__permissionProbeService;
|
|
194
|
+
guard?.flush();
|
|
195
|
+
try {
|
|
196
|
+
await rm(scope, { recursive: true, force: false });
|
|
197
|
+
scopeRemoved = true;
|
|
198
|
+
} catch { scopeRemoved = false; }
|
|
199
|
+
if (receipt) {
|
|
200
|
+
receipt.cleanup = {
|
|
201
|
+
dispose_promise_resolved: disposePromiseResolved,
|
|
202
|
+
fixture_session_shutdown_observed: sessionShutdownObserved,
|
|
203
|
+
temporary_scope_removed: scopeRemoved,
|
|
204
|
+
};
|
|
205
|
+
receipt.status = disposePromiseResolved && sessionShutdownObserved && scopeRemoved ? 'PASS' : 'FAIL';
|
|
206
|
+
guard.transportStdout.write(JSON.stringify(receipt) + '\n');
|
|
207
|
+
if (receipt.status !== 'PASS') process.exitCode = 1;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "1.0.0",
|
|
3
|
+
"kind": "pi-permission-system-policy-hook-probe",
|
|
4
|
+
"status": "PASS",
|
|
5
|
+
"package": "@gotgenes/pi-permission-system@40.3.0",
|
|
6
|
+
"node": "24.22.0",
|
|
7
|
+
"loading": "real SDK adapter and actual candidate package entry",
|
|
8
|
+
"hook": "public AgentSession.extensionRunner.emitToolCall() invoked the registered actual tool_call handler",
|
|
9
|
+
"policy_checks": {
|
|
10
|
+
"general_allow": "allow",
|
|
11
|
+
"general_deny": "deny",
|
|
12
|
+
"path_allowed": "allow",
|
|
13
|
+
"path_denied": "deny",
|
|
14
|
+
"mcp_allowed": "allow",
|
|
15
|
+
"mcp_unmatched": "deny",
|
|
16
|
+
"headless_ask": "ask"
|
|
17
|
+
},
|
|
18
|
+
"synthetic_dispatch": {
|
|
19
|
+
"allowed_tool_reached_counter": true,
|
|
20
|
+
"denied_write_blocked": true,
|
|
21
|
+
"headless_ask_blocked": true,
|
|
22
|
+
"unregistered_tool_blocked": true,
|
|
23
|
+
"in_memory_counter": 1
|
|
24
|
+
},
|
|
25
|
+
"harness_model_prompts_submitted": 0,
|
|
26
|
+
"provider_calls": 0,
|
|
27
|
+
"ui_mode": "print",
|
|
28
|
+
"has_dialog_capable_ui": false,
|
|
29
|
+
"denied_network_attempts": 0,
|
|
30
|
+
"denied_child_process_attempts": 0,
|
|
31
|
+
"stdout_suppressed_writes": 0,
|
|
32
|
+
"diagnostics": [],
|
|
33
|
+
"evidence_id": "ba5b1b0d-d6a0-4b90-b05a-a254fb7c1b9a",
|
|
34
|
+
"limits": [
|
|
35
|
+
"An in-memory synthetic counter advances only after an unblocked hook result. No actual executor was attached or invoked; no operating-system command, file write, MCP connection, or external tool was executed.",
|
|
36
|
+
"These checks cover deterministic policy resolution and registered-hook mediation under a provider-free SDK harness. They do not prove operating-system sandboxing, collector or inner-method enforcement, live UI behavior, MCP transport enforcement, or interactive-client integration."
|
|
37
|
+
],
|
|
38
|
+
"cleanup": {
|
|
39
|
+
"dispose_promise_resolved": true,
|
|
40
|
+
"fixture_session_shutdown_observed": true,
|
|
41
|
+
"temporary_scope_removed": true
|
|
42
|
+
},
|
|
43
|
+
"process_supervision": {
|
|
44
|
+
"worker_exit_observed": true,
|
|
45
|
+
"worker_exit_code": 0,
|
|
46
|
+
"worker_signal": null,
|
|
47
|
+
"spawn_failed": false,
|
|
48
|
+
"timeout_ms": 45000,
|
|
49
|
+
"output_limit_exceeded": false,
|
|
50
|
+
"process_group_empty_observed": true,
|
|
51
|
+
"supervisor_home_removed": true
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "1.0.0",
|
|
3
|
+
"kind": "pi-permission-system-policy-hook-probe",
|
|
4
|
+
"status": "PASS",
|
|
5
|
+
"package": "@gotgenes/pi-permission-system@40.3.0",
|
|
6
|
+
"node": "24.22.0",
|
|
7
|
+
"loading": "real SDK adapter and actual candidate package entry",
|
|
8
|
+
"hook": "public AgentSession.extensionRunner.emitToolCall() invoked the registered actual tool_call handler",
|
|
9
|
+
"policy_checks": {
|
|
10
|
+
"general_allow": "allow",
|
|
11
|
+
"general_deny": "deny",
|
|
12
|
+
"path_allowed": "allow",
|
|
13
|
+
"path_denied": "deny",
|
|
14
|
+
"mcp_allowed": "allow",
|
|
15
|
+
"mcp_unmatched": "deny",
|
|
16
|
+
"headless_ask": "ask"
|
|
17
|
+
},
|
|
18
|
+
"synthetic_dispatch": {
|
|
19
|
+
"allowed_tool_reached_counter": true,
|
|
20
|
+
"denied_write_blocked": true,
|
|
21
|
+
"headless_ask_blocked": true,
|
|
22
|
+
"unregistered_tool_blocked": true,
|
|
23
|
+
"in_memory_counter": 1
|
|
24
|
+
},
|
|
25
|
+
"harness_model_prompts_submitted": 0,
|
|
26
|
+
"provider_calls": 0,
|
|
27
|
+
"ui_mode": "print",
|
|
28
|
+
"has_dialog_capable_ui": false,
|
|
29
|
+
"denied_network_attempts": 0,
|
|
30
|
+
"denied_child_process_attempts": 0,
|
|
31
|
+
"stdout_suppressed_writes": 0,
|
|
32
|
+
"diagnostics": [],
|
|
33
|
+
"evidence_id": "38d814fd-395d-458c-8e92-ca134c3fc721",
|
|
34
|
+
"limits": [
|
|
35
|
+
"An in-memory synthetic counter advances only after an unblocked hook result. No actual executor was attached or invoked; no operating-system command, file write, MCP connection, or external tool was executed.",
|
|
36
|
+
"These checks cover deterministic policy resolution and registered-hook mediation under a provider-free SDK harness. They do not prove operating-system sandboxing, collector or inner-method enforcement, live UI behavior, MCP transport enforcement, or interactive-client integration."
|
|
37
|
+
],
|
|
38
|
+
"cleanup": {
|
|
39
|
+
"dispose_promise_resolved": true,
|
|
40
|
+
"fixture_session_shutdown_observed": true,
|
|
41
|
+
"temporary_scope_removed": true
|
|
42
|
+
},
|
|
43
|
+
"process_supervision": {
|
|
44
|
+
"worker_exit_observed": true,
|
|
45
|
+
"worker_exit_code": 0,
|
|
46
|
+
"worker_signal": null,
|
|
47
|
+
"spawn_failed": false,
|
|
48
|
+
"timeout_ms": 45000,
|
|
49
|
+
"timeout_triggered": false,
|
|
50
|
+
"output_limit_exceeded": false,
|
|
51
|
+
"process_group_empty_observed": true,
|
|
52
|
+
"supervisor_home_removed": true
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "1.0.0",
|
|
3
|
+
"kind": "pi-permission-system-policy-hook-probe",
|
|
4
|
+
"status": "PASS",
|
|
5
|
+
"package": "@gotgenes/pi-permission-system@40.3.0",
|
|
6
|
+
"node": "24.22.0",
|
|
7
|
+
"loading": "real SDK adapter and actual candidate package entry",
|
|
8
|
+
"hook": "public AgentSession.extensionRunner.emitToolCall() invoked the registered actual tool_call handler",
|
|
9
|
+
"policy_checks": {
|
|
10
|
+
"general_allow": "allow",
|
|
11
|
+
"general_deny": "deny",
|
|
12
|
+
"path_allowed": "allow",
|
|
13
|
+
"path_denied": "deny",
|
|
14
|
+
"mcp_allowed": "allow",
|
|
15
|
+
"mcp_unmatched": "deny",
|
|
16
|
+
"headless_ask": "ask"
|
|
17
|
+
},
|
|
18
|
+
"synthetic_dispatch": {
|
|
19
|
+
"allowed_tool_reached_counter": true,
|
|
20
|
+
"denied_write_blocked": true,
|
|
21
|
+
"headless_ask_blocked": true,
|
|
22
|
+
"unregistered_tool_blocked": true,
|
|
23
|
+
"in_memory_counter": 1
|
|
24
|
+
},
|
|
25
|
+
"harness_model_prompts_submitted": 0,
|
|
26
|
+
"provider_calls": 0,
|
|
27
|
+
"ui_mode": "print",
|
|
28
|
+
"has_dialog_capable_ui": false,
|
|
29
|
+
"denied_network_attempts": 0,
|
|
30
|
+
"denied_child_process_attempts": 0,
|
|
31
|
+
"stdout_suppressed_writes": 0,
|
|
32
|
+
"diagnostics": [],
|
|
33
|
+
"evidence_id": "a522f14a-9b44-49dd-b738-d39c56571910",
|
|
34
|
+
"limits": [
|
|
35
|
+
"An in-memory synthetic counter advances only after an unblocked hook result. No actual executor was attached or invoked; no operating-system command, file write, MCP connection, or external tool was executed.",
|
|
36
|
+
"These checks cover deterministic policy resolution and registered-hook mediation under a provider-free SDK harness. They do not prove operating-system sandboxing, collector or inner-method enforcement, live UI behavior, MCP transport enforcement, or interactive-client integration."
|
|
37
|
+
],
|
|
38
|
+
"cleanup": {
|
|
39
|
+
"dispose_promise_resolved": true,
|
|
40
|
+
"fixture_session_shutdown_observed": true,
|
|
41
|
+
"temporary_scope_removed": true
|
|
42
|
+
},
|
|
43
|
+
"process_supervision": {
|
|
44
|
+
"worker_exit_observed": true,
|
|
45
|
+
"worker_exit_code": 0,
|
|
46
|
+
"worker_signal": null,
|
|
47
|
+
"spawn_failed": false,
|
|
48
|
+
"timeout_ms": 45000,
|
|
49
|
+
"output_limit_exceeded": false,
|
|
50
|
+
"process_group_empty_observed": true,
|
|
51
|
+
"supervisor_home_removed": true
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kind": "independent-read-only-permission-gate-review",
|
|
3
|
+
"status": "PASS",
|
|
4
|
+
"blocking_findings": [],
|
|
5
|
+
"reviewed_scope": [
|
|
6
|
+
"permission-gate-worker.mjs",
|
|
7
|
+
"permission-gate-probe.mjs",
|
|
8
|
+
"permission-gates-result-final.json"
|
|
9
|
+
],
|
|
10
|
+
"conclusion": "Public SDK runtime/session and extension-runner APIs are used; the actual candidate hook is invoked with SDK context. Scoped temporary state, zero model turns and observed cleanup are supported. The synthetic counter is not a tool executor and does not prove executor enforcement.",
|
|
11
|
+
"earlier_findings_resolved": [
|
|
12
|
+
"Replaced private adapter-handle access with injected public runtime capture.",
|
|
13
|
+
"Clarified synthetic counter and harness-only zero-prompt claims.",
|
|
14
|
+
"Publication follows disposal, process exit/group and temporary-scope cleanup."
|
|
15
|
+
],
|
|
16
|
+
"reviewer_mutations": 0,
|
|
17
|
+
"reviewer_provider_calls": 0,
|
|
18
|
+
"final_controller_check": "Explicit timeout flag was added and the final successful probe rerun after this read-only review."
|
|
19
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "1.0.0",
|
|
3
|
+
"kind": "pi-permission-system-policy-hook-probe",
|
|
4
|
+
"status": "SUPERSEDED",
|
|
5
|
+
"package": "@gotgenes/pi-permission-system@40.3.0",
|
|
6
|
+
"node": "24.22.0",
|
|
7
|
+
"loading": "real SDK adapter and actual candidate package entry",
|
|
8
|
+
"hook": "public AgentSession.extensionRunner.emitToolCall() invoked the registered actual tool_call handler",
|
|
9
|
+
"policy_checks": {
|
|
10
|
+
"general_allow": "allow",
|
|
11
|
+
"general_deny": "deny",
|
|
12
|
+
"path_allowed": "allow",
|
|
13
|
+
"path_denied": "deny",
|
|
14
|
+
"mcp_allowed": "allow",
|
|
15
|
+
"mcp_unmatched": "deny",
|
|
16
|
+
"headless_ask": "ask"
|
|
17
|
+
},
|
|
18
|
+
"synthetic_dispatch": {
|
|
19
|
+
"allowed_tool_reached_counter": true,
|
|
20
|
+
"denied_write_blocked": true,
|
|
21
|
+
"headless_ask_blocked": true,
|
|
22
|
+
"unregistered_tool_blocked": true,
|
|
23
|
+
"in_memory_counter": 1
|
|
24
|
+
},
|
|
25
|
+
"harness_model_prompts_submitted": 0,
|
|
26
|
+
"provider_calls": 0,
|
|
27
|
+
"ui_mode": "print",
|
|
28
|
+
"has_dialog_capable_ui": false,
|
|
29
|
+
"denied_network_attempts": 0,
|
|
30
|
+
"denied_child_process_attempts": 0,
|
|
31
|
+
"stdout_suppressed_writes": 0,
|
|
32
|
+
"diagnostics": [],
|
|
33
|
+
"evidence_id": "71f99101-ebb7-467e-915f-c5d4779cbb95",
|
|
34
|
+
"limits": [
|
|
35
|
+
"An in-memory synthetic counter advances only after an unblocked hook result. No actual executor was attached or invoked; no operating-system command, file write, MCP connection, or external tool was executed.",
|
|
36
|
+
"These checks cover deterministic policy resolution and registered-hook mediation under a provider-free SDK harness. They do not prove operating-system sandboxing, collector or inner-method enforcement, live UI behavior, MCP transport enforcement, or interactive-client integration."
|
|
37
|
+
],
|
|
38
|
+
"superseded_reason": "The initial run accessed handle.session even though that property is private on the evaluation adapter handle. Results are retained as historical diagnostic evidence and replaced by the public extensionSdk capture run.",
|
|
39
|
+
"superseded_by": "permission-gates-result.json"
|
|
40
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# pi-lens registration gate — 2026-10-19
|
|
2
|
+
|
|
3
|
+
## Result: PASS
|
|
4
|
+
|
|
5
|
+
With `pi-lens@4.4.3` and `@earendil-works/pi-coding-agent@1.3.0`, both
|
|
6
|
+
`symbol_search` and `project_report` are registered **during extension load,
|
|
7
|
+
before `bindExtensions`**. Both remain registered and are active after bind in
|
|
8
|
+
the coding tool profile. The registered set does not change across bind. The
|
|
9
|
+
lazy-registration stop condition is not hit; this gate permits the remaining
|
|
10
|
+
implementation work.
|
|
11
|
+
|
|
12
|
+
The exact one-line output is in [`result.json`](result.json). Its arrays are
|
|
13
|
+
sorted, flattened tool names from the two loaded extensions:
|
|
14
|
+
|
|
15
|
+
| Extension | Tools after load | Tools after bind |
|
|
16
|
+
| --- | --- | --- |
|
|
17
|
+
| `pi-extension-fixture@1.0.0` | `fixture_tool` | `fixture_tool` |
|
|
18
|
+
| `pi-lens@4.4.3` | `ast_grep_outline`, `ast_grep_replace`, `ast_grep_search`, `effective_config`, `lens_diagnostic_mark`, `lens_diagnostics`, `lsp_navigation`, `module_report`, `pi_lens_activate_tools`, `project_report`, `read_enclosing`, `read_symbol`, `symbol_search` | Identical to load |
|
|
19
|
+
|
|
20
|
+
`activeCoding` records the actual post-bind active tool names, not merely the
|
|
21
|
+
requested set. Some pi-lens tools are registered but inactive after bind;
|
|
22
|
+
`symbol_search` and `project_report` are both active.
|
|
23
|
+
|
|
24
|
+
## Method and safety
|
|
25
|
+
|
|
26
|
+
- Starting repository commit: `d7897fae470379536d895cf2850a305cc07de373`, branch
|
|
27
|
+
`feat/read-only-extension-tools`. Runtime: Node.js `v26.11.1`.
|
|
28
|
+
- Installed the exact pi-lens version into a throwaway agent directory's
|
|
29
|
+
`npm/node_modules/pi-lens`, with lifecycle scripts, audit and funding checks
|
|
30
|
+
disabled. Transitive versions were resolved by npm, not pinned by this record.
|
|
31
|
+
This install was the only permitted network operation.
|
|
32
|
+
- Used only SDK package-root imports: `ModelRuntime`, `SettingsManager`,
|
|
33
|
+
`SessionManager`, `createAgentSessionServices`,
|
|
34
|
+
`createAgentSessionFromServices`, and `createAgentSessionRuntime`.
|
|
35
|
+
This follows the adapter's load → create → bind sequence without changing the
|
|
36
|
+
adapter. The coding set starts with all seven built-ins plus the loaded tools.
|
|
37
|
+
- Copied the repository fixture to the throwaway agent's npm layout. Its offline
|
|
38
|
+
provider (`fixture-ext` / `fixture-ext-model`) supplies model metadata only.
|
|
39
|
+
No prompt, tool execution, command dispatch, or provider turn was started.
|
|
40
|
+
- Before extension loading, replaced the public runtime model-call methods with
|
|
41
|
+
counting throwers. The fixture's stream event is also checked. Success requires
|
|
42
|
+
zero provider and child-process attempts.
|
|
43
|
+
- Before SDK import, denied `fetch`, WebSocket, net, TLS, HTTP(S), and DNS entry
|
|
44
|
+
points as in the earlier cursor evaluation probe; counted **0 network
|
|
45
|
+
attempts**. Denied child-process entry points as well to prevent subprocess
|
|
46
|
+
network bypass. These are in-process guards, not a general OS sandbox or a
|
|
47
|
+
claim about every possible native networking API.
|
|
48
|
+
- Cleared inherited environment variables before SDK import. Redirected HOME,
|
|
49
|
+
XDG state, temporary files, credentials storage and Pi's agent directory to the
|
|
50
|
+
throwaway tree; disabled catalog refresh and model networking. No personal Pi,
|
|
51
|
+
Claude or Codex directories were used. Workspace was an empty throwaway
|
|
52
|
+
directory, `projectTrusted: false`, matching production trust policy.
|
|
53
|
+
In-memory settings/session history and disabled resource discovery avoid
|
|
54
|
+
personal/project configuration, skills, prompts, themes and context files.
|
|
55
|
+
- Suppressed third-party stdout/stderr (the fixture intentionally emits stdout)
|
|
56
|
+
so the probe emits only its JSON result and records no incidental paths.
|
|
57
|
+
Disposed the session runtime, including shutdown hooks. Removed the throwaway
|
|
58
|
+
tree after recording and checking the result.
|
|
59
|
+
|
|
60
|
+
## Reproduction
|
|
61
|
+
|
|
62
|
+
Run from this clone with its installed SDK 1.3.0 and Node.js 22.19.0 or newer:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
agentDir=$(mktemp -d "$HOME/.cache/pi-lens-probe.XXXXXX")
|
|
66
|
+
mkdir -p "$agentDir/home" "$agentDir/tmp"
|
|
67
|
+
touch "$agentDir/user.npmrc" "$agentDir/global.npmrc"
|
|
68
|
+
env -i PATH="$PATH" HOME="$agentDir/home" TMPDIR="$agentDir/tmp" \
|
|
69
|
+
npm_config_cache="$agentDir/npm-cache" \
|
|
70
|
+
npm_config_userconfig="$agentDir/user.npmrc" \
|
|
71
|
+
npm_config_globalconfig="$agentDir/global.npmrc" \
|
|
72
|
+
npm install --ignore-scripts --no-audit --no-fund \
|
|
73
|
+
--prefix "$agentDir/npm" pi-lens@4.4.3
|
|
74
|
+
node --check docs/evaluation/pi-lens-registration-2026-10-19/probe.mjs
|
|
75
|
+
node docs/evaluation/pi-lens-registration-2026-10-19/probe.mjs "$agentDir" \
|
|
76
|
+
> docs/evaluation/pi-lens-registration-2026-10-19/result.json
|
|
77
|
+
rm -rf -- "$agentDir"
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Observed checks: syntax check exit 0; probe exit 0 with one JSON line. The probe
|
|
81
|
+
was run twice (the second run included the strengthened pre-load model-call
|
|
82
|
+
guards), with identical tool arrays and network count. Result assertions passed:
|
|
83
|
+
load and bound sets equal; both required names present at both stages and active;
|
|
84
|
+
network attempts zero. No general test suite or live/provider acceptance was run:
|
|
85
|
+
this is a provider-free registration gate only.
|
|
86
|
+
|
|
87
|
+
An initial installation command used `/dev/null` for both npm config paths and
|
|
88
|
+
failed before configuration resolution (`double-loading config`). Retrying with
|
|
89
|
+
two distinct empty config files succeeded (15 packages installed). No lifecycle
|
|
90
|
+
scripts ran in either attempt.
|