Repository navigation
fix(distcheck): stop the node flow's integration guard restating a retired layout - #999
Conversation
`node_flow_test.py`'s skip guard restates the staged-artifact layout instead of asking the gate, and the layout it restates was deleted in #739 -- so the guard raises `AttributeError: 'Platform' object has no attribute 'bin_name'` before it can skip, and the node flow's only real-subprocess coverage has not run since. Assert the contract that removes the restating: `run()`'s prerequisite is exactly `staged_addon_path()`'s output. `staged_addon_path` does not exist yet, so this collection-errors. Refs #996
…uires The node flow's integration guard restated the staged-artifact layout, and #739 deleted the layout it restated -- `bundled-cli-<slug>` and `Platform.bin_name` -- so it raised `AttributeError` before reaching the skip it feeds. Re-deriving the current layout in a second place would be the same drift again, one rename later, so export the path instead: `staged_addon_path()` is the flow's one build prerequisite, and `run()` and the guard both call it. Also correct the two places still describing the retired standalone-CLI sub-package: `gate.py`'s module docstring and README's `node` bullet now say `@dirsql/lib-<slug>` / `loadNativeCore()`, matching what `run()` packs. Fixes #996
Validation transcriptRed/green. The RED commit (8db8b13) was pushed alone and CI was observed red for the right reason — run 32417247161, both coverage jobs:
The raise → skip → pass transition, observed directly as #996 asks (
The command #996 names as a hard red for anyone running it now comes back clean: (the one skip is Manual exercise of the user-visible entry point, per AGENTS.md: That is the real Gates run locally (all clean): Why mutation reports "0 mutant(s) tested" on this diffThat is a real zero, not a misfire. The added lines are a docstring, Two invocation notes for whoever runs these next, both of which cost time here:
One thing found and deliberately not folded in
Left alone: #996 scopes itself to items 1–4, removing it touches a second module pair, and a prior pass evidently looked straight at it and chose to keep it. Flagging rather than filing, since whether the mirror should track Generated by Claude Code |
Fixes #996
Problem
internals/distcheck/tests/integration/node_flow_test.pybuilds its skip guard from two identifiers #739 deleted (bundled-cli-<slug>andPlatform.bin_name), so the attribute lookup blows up before the skip it feeds:Reproduced verbatim on
mainbefore touching anything. The node flow's only real-subprocess coverage has not executed since #739.Change
The root cause is that the guard restates the gate's prerequisite instead of asking for it. So rather than re-deriving the current layout in a second place (which is the same drift again, one rename later),
gate.pyexports the path:staged_addon_path(ts_pkg, host)— the one build prerequisite, used byrun()and by the integration guard. A layout change now moves one expression, andgate_test.pypins thatrun()'s prerequisite is the helper's output.node_flow_test.pyguards onstaged_addon_path(_TS, host);npm/pnpmguard kept.gate.pydocstring andREADME.md:34corrected from the retired@dirsql/cli-<slug>/resolve-binary.tswording to@dirsql/lib-<slug>/loadNativeCore().On the issue's open question for item (3) — a docstring-only edit to
src/trippingcolocated-test's co-change sub-check: taken as the "land it alongside agate_test.pychange that earns its own keep" branch. The new assertion is not ceremony for the gate; nothing previously tiedrun()'s prerequisite to anything a caller could reference, which is what let the drift happen.Validation
Raise → skip → pass transition observed directly, as #996 asks:
AttributeError: 'Platform' object has no attribute 'bin_name'(hard red)pnpm buildSKIPPED [1] staged addon absent (pnpm build in packages/ts)pnpm build1 passed— realnpm pack/pnpm pack/npm install/dirsql --versionGate runs and the full local command list are in a comment below.
E2E Verification
N/A - repo tooling only— no change underpackages/*/src,packages/ts/napi, orpackages/rust. No attestation receipt is owed (internals/distcheckis in no e2e scope).packages/python/e2e-attestations/<branch>.jsonreceipt written ifpackages/pythonchanged — not changedpackages/ts/e2e-attestations/<branch>.jsonreceipt written ifpackages/tschanged — not changedChangelog / Migrations
internals/is not a changelog root (_ROOTS = ("packages", "plugins")inchangelog_gate/decide.py), and nothing published changes.PARITY.mdunaffected — no SDK public API touched.Generated by Claude Code