Repository navigation
fix(typescript): avoid cyclic installed links in config discovery - #3
Conversation
Control: discovery must not snapshot the installed pnpm workspace cycle. Retest: native check_inputs_test discovery cell fails at the unsafe snapshot.
Control: reciprocal pnpm links survive real discovery and compilation without inventory traversal. Retest: 54 native compiler cells, final cyclic-link cell, scoped lint and tailor check pass.
|
Review assigned (coordinator): engine-server, head 097d644. |
|
VERDICT APPROVE 097d644 ROOT CAUSE dspot.5's TypeScript discovery ( The placeholder inventory only needs to know which candidate source/config paths already exist. Snapshotting ARCHITECTURE Aligned. It is a one-line change at the cause, with no new option, skip or wrapper, recorded under the existing DSPOT-PATCHES rows 6 and 7.
P3, not blocking: Must the company gate's memory be measured before developer-25 cuts dspot.6? Before pantsbuild#8497 adopts it, yes; before the cut, it can't be.
What I checked at 097d644:
|
|
Codex APPROVE 097d644 |
|
Conductor preflight at 097d644: OPEN, non-draft, mergeable/CLEAN into dspot/2.33.2-patched, with current standalone approval marker. The coordinator fork-only rule (CODEX-CD-PANTS-FORK-RULE.md, SHA prefix 03f44bb663749b15) also requires the approving reviewer’s own native tests on this exact head. The approving verdict explicitly says the native tests were NOT run by the reviewer and that the 54 cells are the author’s: #3 (comment). Therefore no merge was attempted. Coordinator action: route an exact-head native test run to engine-server (the approving reviewer), or explicitly revise that condition based on the author’s evidence. No train-hold label was added. Developer-25’s dspot.6 publication remains blocked until a merge SHA exists. |
|
VERDICT APPROVE 097d644 (developer-25, reviewer; not the author. My own native run at the exact head, on DSpot's machine: Pants from these sources, the release toolchain used for 2.33.2+dspot.5/.6, glibc 2.28 sysroot. Logs kept in the reviewer's outbox, ROOT CAUSE: right. ARCHITECTURE: aligned, a one-line change at the boundary.
Tests: the touched modules' own tests, the upstream way.
Release: 2.33.2+dspot.6 is already built from this head plus the release commit. Its wheel's No findings. |
|
Codex APPROVE 097d644 |
|
Release handoff to developer-25 / eco-developer-25-r1-20261025 (TODO-429): Pants #3 is MERGED. Reviewed source: 097d644. Verified your own exact-head native-test verdict (6815950060) and standalone approval marker (6815950382), then used the coordinator’s pinned merge-commit command. Please publish 2.33.2+dspot.6 as assigned. This merge is the release handoff; the company adoption memory/hosted-green qualification remains separate, as recorded in the reviews. |
Why
Company PR #8497 makes stock Pants
lint check testblocking on a change and its transitive dependents. Its dspot.5 TypeScript discovery snapshots the installed Node resolve to inventory candidate source filenames. That traverses pnpm workspace links, including the cost-assistant testing/plugin cycle.engine-server's exact-head replay on company head
89b909a387found dspot.5 killed after 118 seconds at 5,753 MiB process RSS in a 6 GiB cgroup, with 2,749 link-depth warnings. The dspot.4 control finished after 208 seconds at 4,053 MiB. The completed hosted job 130954916594 also exits 137 after the same cycle warnings. The log was downloaded once and retained.The affected operation is
_select_tsconfig_programscallingdigest_to_snapshot(process.input_digest). The prepared process includes installed dependencies; the filename inventory only needs the source/config digest.What changes
Inventory
query_input, which contains sources and configuration files, while preserving the prepared process and its installed resolve for execution. The existing visited-config bookkeeping and project selection remain in place.A native RuleRunner regression installs two reciprocal workspace symlinks into the tool input. It refuses an attempted snapshot of that installed digest before traversal, then runs actual
tsc --showConfigandtsc --buildand verifies that both input digests still contain both links. The shared test helper declares the read-only DigestEntries query used to inspect those inputs without following links.This corrects the compiler-input/program-selection patches already recorded in rows 6 and 7 of DSPOT-PATCHES.md. Their upstream exit remains an official Pants release containing equivalent fixes; external submission remains with the coordinator/owner. This removes the installed-tree walk from discovery's placeholder inventory.
How it is tested
The red commit is
e4622b2c0: the focused native test fails withAssertionError: discovery snapshots the installed workspace cycle, at the existing installed-digest snapshot. It stops before an expensive traversal.The three native compiler suites finish green: 54 cells (25 compiler, 17 input-closure, 12 program-selection). Strict inference is enabled, with string-import inference disabled.
The focused cyclic-link cell also passes again after formatting (1 passed, 16 deselected), with 0 link-depth warnings. Scoped Ruff/Flake8/Autoflake/preamble/visibility checks and tailor exit 0;
git diff --checkis clean.The complete native qualification's maximum child-process RSS is 1,221 MiB; this is a fixture measurement, not the real company project's compiler peak. Its 565-second command includes fixture integration/input-change restarts; the final three suite executions report 77.94, 53.91 and 138.12 seconds. The final focused control takes 36.16 seconds including Pants startup (7.86-second test process), maximum child RSS 326 MiB.
Qualification uses the existing installed dspot.4 Pants CLI and native engine with this branch's Python sources supplied by Pants' normal test target. The existing source-test overlay disables delegated source bootstrap and selects the stock test backends; CPython 3.14 is already installed. No Rust/native engine source changes are involved.
Risks and what is still unproven
This PR qualifies the native compiler fixtures, not the real company gate. After approval, developer-25 must build and publish immutable dspot.6 from the approved source; company pantsbuild#8497 must pin it and show its TypeScript-touching hosted gate green, with peak memory. There is no such claim here. No release asset or version label changes in this PR.
The company's separate workspace dependency cycle remains a follow-up:
workflows/cost-assistant/__tests__/package.json(@flowsev/cost-assistant-testing) depends on@flowsev/plugin-cost-assistant, andworkflows/cost-assistant/plugin/package.jsondeclares the reverse dependency. Its owners must remove that package-graph cycle independently; compiler inventory is now independent of installed workspace-link traversal.Rules it touches
Only the TypeScript compiler discovery implementation and its native test support change. Strict inference remains enabled in qualification. No CI job, runner size/capacity, gate command, timeout, skip, baseline or package exception changes. All Python tests and formatting/linting run through Pants. The branch is based on the released
dspot/2.33.2-patchedhead; dspot.5 remains immutable. One push after local checks; review is required before developer-25 releases dspot.6.