Files
Netcatty/docs/plugin-platform/policy-ai-integration.md
T

12 KiB

Permission-policy and AI acceptance candidate

This records frozen 020 and its predecessor evidence. For the later managed- window Ask correction, use the isolated Ask integration record. 020 native Default Allow/Stop/Deny/restore/themes passed; Ask had no visible dialog and timed out with zero new model requests. Ask acceptance/cancel and the content-read matrix remain unrun until that new candidate is checked.

Use the dedicated integration/plugin-policy-ai-acceptance branch. Its Draft PR records the exact published head and aggregate CI. Frozen #3997 at 677aac33b1eec9dbd4a367417a49c964cdea63e7 remains the historical native baseline; neither that branch nor main is changed by this integration.

This is a candidate for parent-coordinated acceptance. It is not a claim of completed native acceptance, deployment readiness or permission activation.

Preserved inputs

Input Exact checkpoint Integration
Frozen integration 677aac33b1eec9dbd4a367417a49c964cdea63e7 Starting point; includes stream/source/Host/settings and prior terminal history
Permission policy #4000 79a9bd6df1c17fd8a5238aba31d7a8b4cda184b9 Initial ordinary merge 9aa899059 preserved 2eee561; follow-up ordinary merge cfa13680e preserves the authoritative scope/sensitivity copy and tests
AI #3986 d33c0193ccaedc1a10aed9da495f040250121bef Ordinary merge 5d2ff1cb8; cold-start wiring, themed sample and Node 22 warning-drain test correction
Terminal production #3996 8e7c28fe1bdbcdd76816d33ec926ba8e60eefe64 Preserve the prior renderer eligibility/publication path; policy-owned interaction changes remain from #4000

Diagnostic #3999 and its tests/docs-only 3fdaa357 continuation are not merged. No terminal runtime fix is required by the fixture-classification finding. Database protocol and fixed SQL remain solely in the minimal examples.

Direct integration decisions

The initial merge conflict was components/PluginAIContextHost.test.tsx. The combined test keeps policy's absence of a second native content-sharing review and AI's actual main allowlist, two-provider synchronization, streamed result, Stop/lock cleanup and empty SDK-error assertion. The Node 22 warning drain is retained. The obsolete forced-review cancellation branch is superseded by the current in-app Ask/cancellation tests; no transport assertion is dropped.

No production file needed a manual conflict resolution. Policy production files remain identical to the policy input; the three AI startup wiring files and sample assets remain identical to d33c0193. The stream service/router and prior terminal renderer eligibility/publication files are unchanged from frozen 677.

Integration commit 7d8a354404d68071d0924532ffe74c713ace6cb9 updates two stale disclosure assertions in PluginPackageManager.test.tsx and PluginMarketplace.interaction.test.tsx. They expected the old words not a grant; the new assertions require default Allow, Ask/Deny controls and retained host validation/resource scope. Existing escaping, advanced-authority, source and README-failure assertions remain intact. Production copy is unchanged.

The later authoritative 79a9bd6 policy merge overlapped those two tests. Their final contents are byte-identical to 79a9bd6: all three earlier policy assertions remain, together with the owner's additional unbounded-resource, sensitivity, escaping/source-order and advanced-authority checks. No assertion was dropped. This follow-up imports the owner's five-locale wording changes; it makes no manual production conflict edit and leaves the shared AI test intact.

Checks and retained failures

Local check Result
Registered runtime 695 tests: 694 passed, one native skip, zero failed/cancelled
Contract/SDK/CLI 91 passed
Offline examples Five passed, one explicit Docker opt-in skip
Serial mounted AI/permission/selected-summary/Host/provider/panel group at 7856 31 passed
Final settings, terminal interaction, cold-start host and locale group 90 passed
Contract/capability/Codex generation and drift Passed
Full lint Zero errors, seven existing warnings
Production build Passed; Vite 35.50 seconds
Five sample archives Validated; repeat builds byte-identical

The initial settings group records 34 passes and two failures on the stale copy assertions. That run is retained separately from the corrected 36/36 result.

Policy input test CI 40443396430 first received an explicit runner shutdown. The parent requested one retry; this integration task did not duplicate it. Retry Linux job 121992430185 passed registered runtime (694/one skip) and examples (five/one skip), then failed those same two not a grant assertions: settings group 33 passed/two failed. It did not reach the full suite. The candidate includes the isolated test correction above; do not relabel the input CI as passing. Both input Windows jobs and policy package CI passed. Parent reports the independent policy correction reviews scoped clean, including both P2s and the three UI findings, with 71 focused/synthetic checks.

The policy owner subsequently corrected these tests in predecessor da4e80946d2f3fb48f205aae2a732252b2f51fca. Its test CI passed 15,342 cases with 50 skipped and no failures/cancellations, and its four-platform package CI passed. The final 79a9bd6 wording head's test CI passed; its package workflow is tracked separately in the Draft PR. No input retry was duplicated here.

Integration predecessor 7856c664c3c2255a21badef2758bb29311b27a01 passed its test CI: 15,344 passed, 50 skipped, zero failed/cancelled, plus both Windows jobs and native automated checks. Its four-platform packages also passed. These are retained predecessor results; the new exact head needs its own aggregate CI.

AI input test CI and package CI passed. Parent reports its three isolated changes scoped clean. Its prior 9ca Node 22 warning-observer failure remains documented in ai-provider-startup.md; the warning drain does not ignore errors or remove the empty-error assertion. Frozen 677's earlier unexplained MCP assertion remains separate history.

This executor used locked dependencies with install scripts disabled, then the standard repository dependency patches. The official pinned Electron binary installed through its documented proxy support and executes in Node mode. No native-header download, alternate mirror, native shim, HOME change or sandbox change was used. Normal native postinstall/rebuild, local full-suite success and local desktop packaging are not claimed. Exact candidate CI is the aggregate full-suite and platform-packaging verification surface.

Exact packages and provenance

The machine-readable package record contains complete IDs, versions, required features, permission/resource declarations, archive and content hashes, and frozen-baseline comparisons. All five versions are 0.1.0.

Sample SHA-256 Comparison with frozen 677
Assistant 7943d4c3800914fe0acd3d0f3a3d7f7c1910c212a5dc58a044871a6a82485274 Matches the AI owner's new themed archive; only README.md, panel.css and panel.js differ from 677
Owned database f01c6a24382897d4b0bf4130941274abacb9a9a963f9b56ecaceb2c020f36874 Byte-identical
Rfam aaca586669db454e91d61487e576ed524d1b7190eed182bc2cd0035e59caa0d3 Byte-identical
Host actions cf04f82dfe25ab5cda6f5f3dad0a8fb06c37bedf9924f556bee2b8402e542ef2 Byte-identical
Terminal draft 4c9c2388b7f891156192a0b5ab7b23291beba3555e7ec8cf24fbe2dfe1242d5e Byte-identical

After the authoritative 79 follow-up, all five archives were rebuilt twice, validated and compared byte for byte with the 7856 candidate: all five remain identical. No sample permission/resource declaration changed. The host's new policy changes effective authorization behavior; identical package bytes do not certify that new host behavior. The old Assistant c7d784d5 archive remains historical evidence, not the themed archive. No handoff archive was activated by this coding executor. The owner-identical Assistant README retains earlier permission-review wording; use this candidate's Allow/Ask/Deny procedure below for acceptance. That packaged copy is a documentation limitation, not a requirement for repeated dialogs.

Native preparation and remaining gates

Use the exact candidate head from its Draft PR in a separate disposable native checkout/profile. Keep normal platform sandbox/helper settings. Build and hash:

npm ci
npm run build
node examples/plugins/assistant/build.mjs
node packages/plugin-cli/dist/cli.js pack examples/plugins/assistant/.package --out /tmp/assistant.ncpkg
node examples/plugins/database-minimal/prepare.mjs tcp://10.77.0.20:3306 /tmp/database-owned.ncpkg
node examples/plugins/database-rfam-readonly/prepare.mjs tcp://mysql-rfam-public.ebi.ac.uk:4497 /tmp/database-rfam-readonly.ncpkg
node packages/plugin-cli/dist/cli.js pack examples/plugins/host-actions --out /tmp/host-actions.ncpkg
node examples/plugins/terminal-selection-draft/prepare.mjs /tmp/terminal-selection-draft.ncpkg

Validate each archive with the plugin CLI and compare against the machine record. The owned DB address is packaging-only. A different approved fixture endpoint requires a new archive and hash. Preparation does not dial either endpoint.

  • Verify default Allow for declared supported capabilities without a mandatory first-install permission checklist or repeated permission-only dialogs. Verify per-plugin Ask/Deny, one scoped Ask receipt, readable host-selected labels, lifecycle invalidation and redacted audit. Preserve necessary target selection and inert draft editing, exact resources, source isolation and sandboxing.
  • Verify the assistant's cold startup through the normal host without opening the AI sidebar. Native inference on frozen 677 returned unavailable; the independent startup regression did not establish that native error's cause. Use only the deterministic synthetic provider and Note recipe, with current policy semantics. Native success is not claimed before that recheck.
  • Frozen 677 Host core passed per parent; old consent recordings describe the prior policy. They do not certify the new permission implementation.
  • Terminal's source-level finding is fixture-sensitive-input fail-closed: fixture-A> is untrusted; fixture@owned-A:~$ is confirmed shell. Parent reports corrected-fixture solo/split core passed on unmodified 677. Focus remained unreliable/unverified, and QA sent one Enter in A during a palette attempt. Do not claim global zero input or full terminal native acceptance. Keep the inert draft's no-PTY-dispatch property distinct from that QA action. Exclude diagnostic instrumentation. Prior-policy results do not certify the new policy; the next native priority is final-policy and cold-start AI QA.
  • Native Rfam's single baseline run failed with sanitized -32014 socket error before connect resolved. Auth/SELECT were not reached; transport causality and auth/TLS compatibility remain unverified. No probe/fallback or restriction change is authorized by this coding task. Owned DB fixture prerequisites and parent coordination remain separate.
  • Record exact head, hashes, ordered prompt/operation outcomes, screenshots and video for the new candidate. Hosting/distribution/deployment remain pending; no main merge, Ready transition or release is part of this handoff.