test: prove generated installer lifecycle - #8
Conversation
|
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0bb308e119
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| assert.deepEqual( | ||
| [...receipt.files].sort(), | ||
| ["agent-bundle.manifest.json", ...manifest.files.map((file) => file.path)].sort(), | ||
| ); |
There was a problem hiding this comment.
Compare the actual installed inventory to the manifest
When the generated installer copies an unexpected or stale file but still populates receipt.files from the manifest, this assertion passes because it compares two metadata lists rather than inspecting the installed directory. Since this test is intended to prove that only manifest files are installed, recursively enumerate the installation tree (excluding the receipt itself) and compare that inventory with the manifest.
Useful? React with 👍 / 👎.
Context
PR #7 had already squash-merged before the installer-test and foundational-sequencing grounding arrived. Rewriting merged
mainwould add risk and restore the legacy path temporarily, so this proof-only follow-up completes the requested behavior without reintroducing any handwritten installer or host manifest.Foundational sequence
The resulting tree follows the requested dependency order:
install.mjs,INSTALL.md, rootplugin.json,.cursor-plugin/,.claude-plugin/,.codex-plugin/, and legacy installer test. No parallel legacy surface remains.src/, selected onlycursor+ the assumed Grok Botportablepath, and compiled the sidecar/launcher into the artifact.0bb308ein this PR restorestest/install.test.jsas a behavior-level proof against the generatedartifact/install.mjs.This PR intentionally has one coherent commit: the generated-installer proof. The earlier phases cannot be retroactively split into commits after GitHub created merge commit
67b46416fd7410099e33716232a0b96a2a230c02.What the proof observes
npm testbuilds first, thentest/install.test.jsexecutes the generated installer in isolated temporary homes and asserts:Already installed;The packed clean-consumer proof now also clears inherited Agent Bundle state overrides and pins XDG state inside its temporary home.
Verification
npm run checkpassed:A poisoned
AGENT_BUNDLE_STATE_ROOTrun also passed, proving the tests do not write outside their temporary homes. Independent Fable review found no remaining material risk.Scope
The Applier /
missing_attach_apiwiring is intentionally unchanged. It is a separate coordination capability and would spread special-case behavior across the server, picker, and external Applier rather than deepen the generated install surface.The old handwritten
install.mjsremains deleted. Agent Bundle is the sole owner:agent-bundle buildemitsartifact/install.mjs, and both install proofs execute that generated file or its package-bound equivalent.