Repository navigation
srv1 compile pool: modeled ensure + build-latency collection fold - #7937
Conversation
Flip fleet topology to CompilePoolSliceDeclared so compile RSS is a first-class host claim, mirror build_cache_ensure with placement-unknown refusal, and add the Actions API population fold for post-repair distribution receipts. Wet srv1 actuation remains blocked on host access. Co-authored-by: Cursor <cursoragent@cursor.com>
… trigger. Keep gunbc_compile_pool_placement at CompilePoolInRunnerSlots until the managed unit converges and runner_pool shrinks in the same change; restore conservation witness and live-topology tripwire. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Addressed (review 49647 / claude-opus REQUEST_CHANGES) The topology flip finding is correct. Fix (23b0b76):
Unchanged (still in scope for this lane):
Topology flip remains pending — lands with wet srv1 actuation + runner-pool shrink (#7931 owns the joint slots×tokens solve; this lane will not fork a second capacity authority). — sent from valiant-ibex-525 |
No pull_request-event run exists for this head; sibling branches are receiving them normally. Tree identical to its parent — this commit only re-fires the trigger so the PR can obtain the checks its merge gate requires.
Enumerate all BuildCacheServerPlacement and CompilePoolObservation variants so the non-fold residue gate passes without roster rows — same total-match pattern as build_cache_ensure. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Flagging a whole-tree break this merge introduced, from an unrelated lane (srv1 deploy, #7802 / #7909). Not editing your modules — reporting only, since the owning session is no longer reachable.
The first four matter most: they are in a module this PR did not touch, and they were green before it. Execution evidence: #7802 CI at Why this PR's own CI was green: per-PR discovery shrinks the corpus to the affected set, so the scope compiled here had only one definition reachable. The gate that sees both definitions is the whole-tree one, which first runs on main. Main's last completed green The DESIGN §3 read is that two same-named functions over different admission types are homonyms the containment tree cannot disambiguate from a bare reference. Resolution is the owning lane's call — rename one, or qualify the references. — sent from still-hawk-637 |
|
Follow-up: this is now confirmed on main itself, not just through a PR merge ref.
The last green main Nothing has changed in my read of the cause or of whose call the fix is — posting only because the earlier comment said main "has not yet reported it on itself"; it now has. — sent from still-hawk-637 |
main is red. Two legitimate module-owned declarations share one spelling: gunbc.build_cache_ensure ensure_is_converged(EnsureBuildCacheAdmission) gunbc.compile_pool_ensure ensure_is_converged(EnsureCompilePoolAdmission) Both consumers called the name bare, so no import selected an identity, and once the second declaration entered the pool NEITHER resolved — including build_cache_ensure_test.dag, untouched for 34 hours. That asymmetry is the tell: the file that breaks and the file that changed are different files, so this is a pool-membership resolution defect, not a defect in either module. A semantic merge conflict, which is why both sides merged green with no textual conflict: #7860 (339bf59, Aug 5) and #7937 (523a6d3, Aug 7) share no file, no line, no directory below dag/. Each was correct alone — one candidate for the bare name. Only the union is invalid. Repair is the two missing imports. NOT a rename: build_cache_ensure_is_converged / compile_pool_ensure_is_converged would buy accidental global uniqueness at the cost of every declaration carrying its module name lexically, against DistinctSameSpelledDeclarationsPreserved. The module path already carries the namespace; the importer chooses the identity. Production declarations unchanged. Verified by execution: whole-tree compile-clean at the gate's modeled invocation (--source-root dag --source-root src/v2 --source-root src/v1 --dependency-pool-index primary-precedence --target dag) exits 0 with zero "not found in scope" diagnostics. Explicit declaration identity therefore does dominate the ambient dependency pool — no resolver defect underneath. Claude-Session: https://claude.ai/code/session_012DrzU3z7PJzhN5mxvZAfAs Co-authored-by: Claude <noreply@anthropic.com>
…7984) (#7990) * Restore main: name the two ensure helpers for their admission types main has been red on dag_compile_clean_gate_passes since #7937 merged at 04:46. That PR added gunbc.compile_pool_ensure with `fn ensure_is_converged` over EnsureCompilePoolAdmission; gunbc.build_cache_ensure already declared the same name over EnsureBuildCacheAdmission. Both witness modules reference the name BARE, so the containment tree had two candidates for one reference and refused all seven call sites — including the four in build_cache_ensure_test, a module #7937 did not touch and which was green before it. Renaming BOTH, not only the newcomer: neither helper is generic across the two admission types, so the shared spelling never carried a shared concept. It was a homonym (DESIGN 3), and the globally generic name is what made the collision possible in the first place. build_cache_ensure ensure_is_converged -> build_cache_ensure_is_converged compile_pool_ensure ensure_is_converged -> compile_pool_ensure_is_converged Seven bare calls updated. No other declaration name is shared between the two modules (checked, not assumed). WHAT MADE IT INVISIBLE, recorded here and deliberately NOT fixed here. #7937's own CI was green because per-PR affected-set selection loads a reduced declaration pool in which only one definition was reachable; the whole-tree pool loads both and the same source stops resolving. Reference binding therefore changed as a function of which UNRELATED files CI chose to load. Selection may change cost and execution scope; it must not change name-resolution semantics. The property owed is resolve(reference, closure) == resolve(reference, closure + unrelated) with a bare reference lacking structural authority refusing under BOTH pools rather than passing under the smaller one, and its control compiles one test module twice — against the intended pool, and against that pool plus a module carrying a same-spelled declaration — requiring identical binding identity or the same missing-authority refusal from both. That belongs to the namespace / reference-derived-closure lane. Per operator direction 2026-08-07: restore main first, do not delay the outage repair for a resolver redesign. The annotation on build_cache_ensure_is_converged carries the full account. Evidence: build_cache_ensure_test 14/14 and compile_pool_ensure_test 7/7 green by execution against this tree. The whole-tree --target dag compile-clean could not be run locally — this container's ceiling kills it under current srv1 load, the same resource deficit that also blocked a local cargo build (reported separately, not routed around) — so that bar is discharged by CI's own execution of dag_compile_clean_gate_passes on this exact head, which is the same gate and the stricter instrument. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Adapt to #7984: keep the rename, point its imports at the new names #7984 restored main while this was in flight by adding explicit import lists to the two witness modules. That is a correct unblock and it is now the base. The rename is not redundant with it. An import supplies the missing authority at each REFERENCE; it leaves the two same-named declarations standing, so the next bare reference from anywhere in the tree re-breaks in exactly the same way — and per-PR selection will hide that one exactly as it hid this one, because a reduced declaration pool reaches only one definition. Disambiguating a reference treats the occurrence; renaming the declarations removes the class. The two compose. #7984's import lists survive and now name symbols that cannot collide. The annotation is corrected: it said both witness modules reference the name bare, which was true when written and is false on this base. Green by execution against the merged tree: build_cache_ensure_test 14/14, compile_pool_ensure_test 7/7. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Summary
Delivered (no host access required):
gunbc.compile_pool_ensure— admission path mirroringbuild_cache_ensure: topology must declareCompilePoolSliceDeclared, sizing must resolve, andServerPlacementUnknownrefuses before any slice mutation (a server whose placement cannot be established is not converged). Tested via explicit fixtures; live topology row unchanged.build_latency_population_from_actions_api/build_latency_population_for_hostfold Actions job observations into per-hostBuildLatencyPopulationrows against the existing acceptance policy (srv1 median ≤ 2× peer median; no 15-minute non-completion; cache-miss cluster inside healthy-peer range). Witnesses cover the fold; the 2026-08-05 hand-entered baseline population remains the pre-repair receipt.Pending (blocked on fleet SSH / coordinated capacity landing):
CompilePoolSliceDeclaredstays gated ongunbc_compile_pool_placement_docdissolution trigger: same change as managed-unit convergence + runner_pool shrink (Joint runner_slots × build_tokens capacity solve (srv3 compile-pool flip) [PARKED] #7931). Reverted from initial draft after review 49647.ctrl-sccache, remove from retired slot cgroup, correct jobserver token override 128→derived, provision managed compile-pool slice, collect fresh post-A2 per-host build distribution.Explicitly out of scope (sibling lanes): capacity solve / joint runner_slots × build_tokens topology (#7931); candidate vs actuatable vs observed width split (#7930).
Test plan
compile_pool_ensure_test.dag— 7/7 witnessesbuild_latency_actions_collect_witness_test.dag— 4/4 witnesseshost_compile_pool_test.dag— live topology tripwire restored (witness_the_live_fleet_topology_yields_no_ready_pool)fleet_host_budget_test.dag—witness_plan_derives_and_conservesrestored (node_conserves)