Skip to content

ci(verify): pin config path + strip AIRMCP_* so the gate measures the starter default#287

Merged
heznpc merged 1 commit into
mainfrom
fix/verify-package-clean-room-2026-06-10
Jun 9, 2026
Merged

ci(verify): pin config path + strip AIRMCP_* so the gate measures the starter default#287
heznpc merged 1 commit into
mainfrom
fix/verify-package-clean-room-2026-06-10

Conversation

@heznpc

@heznpc heznpc commented Jun 9, 2026

Copy link
Copy Markdown
Owner

verify:package booted the installed tarball with the host's full env
(...process.env + AIRMCP_TEST_MODE=1), so it inherited ~/.config/airmcp/
config.json and any exported AIRMCP_*. On a dev box whose config disables
modules, the gate measured a polluted surface — and could false-fail its

=100 floor — instead of the starter default a fresh npx -y airmcp user
gets.

Apply the same pollution-free discipline as the clean-room recipe, but
surgically: strip every AIRMCP_* from the inherited env and pin
AIRMCP_CONFIG_PATH to a guaranteed-absent file so loadConfig falls through
to the STARTER preset (loadFileConfig → fileExists:false). Non-AIRMCP env
(PATH/HOME/npm_config_*) is kept so npx and the npm cache keep working on
any runner; AIRMCP_TEST_MODE=1 is re-set to stay symmetric with smoke-mcp /
mcp-validate. HOME is left intact — config determinism comes from the pinned
path, not HOME isolation — so the inspector download stays cache-warm.

Gate behavior unchanged (>=100 floor + required core tools); only the
measurement is now host-independent. Verified locally: this machine's
module-disabling config previously skewed it; the gate now reports 111
tools deterministically, matching the ~111 starter figure in README.

… starter default

verify:package booted the installed tarball with the host's full env
(...process.env + AIRMCP_TEST_MODE=1), so it inherited ~/.config/airmcp/
config.json and any exported AIRMCP_*. On a dev box whose config disables
modules, the gate measured a polluted surface — and could false-fail its
>=100 floor — instead of the starter default a fresh `npx -y airmcp` user
gets.

Apply the same pollution-free discipline as the clean-room recipe, but
surgically: strip every AIRMCP_* from the inherited env and pin
AIRMCP_CONFIG_PATH to a guaranteed-absent file so loadConfig falls through
to the STARTER preset (loadFileConfig → fileExists:false). Non-AIRMCP env
(PATH/HOME/npm_config_*) is kept so npx and the npm cache keep working on
any runner; AIRMCP_TEST_MODE=1 is re-set to stay symmetric with smoke-mcp /
mcp-validate. HOME is left intact — config determinism comes from the pinned
path, not HOME isolation — so the inspector download stays cache-warm.

Gate behavior unchanged (>=100 floor + required core tools); only the
measurement is now host-independent. Verified locally: this machine's
module-disabling config previously skewed it; the gate now reports 111
tools deterministically, matching the ~111 starter figure in README.
@heznpc heznpc enabled auto-merge (squash) June 9, 2026 19:23
@heznpc heznpc merged commit fb4faa6 into main Jun 9, 2026
4 of 5 checks passed
@heznpc heznpc deleted the fix/verify-package-clean-room-2026-06-10 branch June 9, 2026 19:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant