Repository navigation
mtcollins1 runner offer at measured one-socket shape + census meminfo reader - #13252
gunbai-bot[bot] wants to merge 13 commits into
Conversation
…very host host_cpu_admitted_width divided altra_max_m12830_catalog cores for any HostIdentity, so a host with a different part or socket count inherited 128 cores from the board spec. It now folds the threads of every CpuProcessor in the host's gunbc.ci_fleet offer (gunbc.fleet_intent compute_host_cpu_threads). Every enrolled host carries one M128-30, so no current width moves; a host with no offer admits zero, which admit_or_refuse_zero_width refuses by name. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…hreadCount (review 75298) host_cpu_admitted_width returns HostCpuWidthResolution; an absent offer is CpuWidthOfferAbsent, carried out of gunbc_runner_committed_width as RunnerWidthUnresolved WidthComputeOfferAbsent and reported by host_width_axes as an unmeasured cores axis, never a zero inside the minimum. compute_host_cpu_threads returns HardwareThreadCount and the per-slot quotient is measure_fit_count_floor in the carrier. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…reader, residency row - gunbc.host_memory_observation host_usable_ram_from_capture: the capture envelope's meminfo section -> HostUsableRamMeasured (provenance names machine and run), typed refusal per non-read. - gunbc.ci_fleet mtcollins1_offer: one processor at the measured 80-thread one-socket width; no nominal memory devices; not enrolled until the MemTotal row, overhead row and width-chain facts land. - gunbc.session_residency: mtcollins1 SessionsOperatorDeclaredAbsent (operator ruling 2026-10-03). - ResourceUnread SectionAbsent renamed ResourceSectionAbsent: the reader is the first closure to join it with HostCaptureSectionReading SectionAbsent, and the resolver refuses the duplicate variant. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…st_identity (#13175) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…InClosure The floor's unimported-bare-provider gate reported them RosterStale on this branch: the names now bind inside the file's own import closure, so the pair was never debt for the gate to carry. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…tity (#13209) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ements The previous roster commit copied the whole file from a tree based on an older main, which reverted ten rows main had since retired (the floor reported RosterRetirementChanged). The file is now main's version with only this branch's 21 fabric_witness_run_test ResolvesInClosure retirements applied. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…s (facts-record seam, #13268) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Head b74b7c6 merges main (#13268's facts-record seam) and adds the end-to-end claims. All 9 claims in
|
…capture census_meminfo_reading parses the capture's meminfo section once; host_usable_ram_from_capture projects MemTotal and host_fixed_overhead_from_capture projects MemTotal - MemAvailable through host_overhead_upper_bound (a census boot is the quiescent read that bound's note asks for). The end-to-end accept claim now reads overhead from the same designed receipt instead of a designed allowance, so the census boot is the single enrolment trigger. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
At 9cb4551, one census receipt now yields both memory rows. |
…qualification peak is admitted gunbc.runner_slot_allocation HostWidthFacts gains workspace: HostWorkspaceStanding. host_workspace_standing reads the host's backing (mtcollins1: RamBackedTmpfs, the route row moved to gunbc.runner_throughput_qualification so the allocation module can read it without a cycle) and, for a slot-charged backing, the workspace-inclusive peak through aggregate_memory over the host's recorded qualification runs. committed_width_of refuses WidthWorkspacePeakUnestablished unless that peak is PeakWithinSlotHigh. selected_slot and slot_quota_threads move from gunbc.runner_throughput_selection to the allocation module (one projection, both consumers). Every disk-backed host is unaffected. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
At 73db6ac the tmpfs workspace is modeled in the slot envelope, no longer only noted in a comment.
|
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: 73db6acaae
ℹ️ 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".
| fn recorded_qualification_runs_for(host: HostIdentity) -> List<ObservedRunnerQualificationRun> { | ||
| filter(recorded_qualification_runs, r => (r.host as String) == (host as String)) |
There was a problem hiding this comment.
Match recorded runs to the full qualification subject
Once a run is recorded, this filter accepts every run from the host regardless of workload revision, runtime image, effective slot properties, or workspace locus. host_workspace_standing passes these runs directly to aggregate_memory without the subject_join enforced by assess_runner_throughput, so an old or NVMe-backed run with a low peak can yield PeakWithinSlotHigh and unblock committed_width_of for the RAM-backed tmpfs configuration even though that configuration was never qualified. Filter or assess runs against the complete selected subject before using their peaks for admission.
Useful? React with 👍 / 👎.
| } else if (host as String) == (operator_host_mtcollins1 as String) { | ||
| SessionsOperatorDeclaredAbsent { | ||
| reason: "operator ruling 2026-10-03, relayed by eager-gull-22: mtcollins1 is admitted only as a diskless, netbooted, ephemeral CI runner host, so no persistent interactive session lives on it. NOT observed: this follows from the ruling, not from a count of sessions.slice. DISSOLVES ON a persistent install on mtcollins1 or any session placement there; either one reopens this row as unobserved." | ||
| } |
There was a problem hiding this comment.
Include the new override in the declared-absence census
Adding this third SessionsOperatorDeclaredAbsent row leaves operator_declared_absent_host_count() filtering only srv1–srv4, so it still returns 2 and the existing witness remains green. After srv3 and srv4 gain observations, that census will report zero—and its scaffold can appear discharged—even while mtcollins1 still has an unobserved, capacity-granting override. Include mtcollins1 in that roster and update the expectation, or track this row under a separate typed dissolution condition.
Useful? React with 👍 / 👎.
|
Closed without folding in the v1 closeout bankruptcy (#13641). Waits on a census boot measurement that doesn't exist. Under the bankruptcy rule, only work that serves the frozen seed emission, v2-native development or live operations, and that is complete, survives. The branch is kept for archaeology; no follow-up obligation is created. — sent from neat-wolf-604 |
…ived) (#13692) * Re-derive mtcollins1's one-socket runner offer from census meminfo, not a copied width. The offer carries the measured 80-thread socket; usable RAM and overhead are read from a capture envelope; committed_width_of divides that envelope by gunbc.runner_slot_desired. Enrolment stays a frontier until a wet census receipt exists. Co-authored-by: Cursor <cursoragent@cursor.com> * Type mtcollins1's Q80-30 catalog bind as TranscribedUncited, not a deduced part. The measured fact is 80 threads; model number and Hertz wait on a census read of socket 0 (review 78456). Co-authored-by: Cursor <cursoragent@cursor.com> * Drop the Q80-30 established-boolean; the standing is cited_figure_read_obligation. Review 78464: the helper restated the canonical accessor and was only called from its witness. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Leg 4 of node adhoc-da1df2b9-c50, parts (a)+(b) plus the residency row. Stacked on #13197, so the diff includes its two commits until that lands. Draft until the operator's one-socket census boot produces a meminfo receipt.
What lands
gunbc.host_memory_observationhost_usable_ram_from_capture. It reads the capture envelope'smeminfosection (viahost_capture_section_reading) and parses it withobserve_memory. The result isHostUsableRamMeasured(MemTotal × 1024 bytes), and the provenance names the machine and the run. Each kind of non-read refuses with its own cause: absent, pending, malformed, nonzero exit, unparsed. No mtcollins1 row is added togunbc_ci_host_usable_ram_for; that row is the reader applied to the real receipt, so the wet number drops in with no new code.gunbc.ci_fleetmtcollins1_offer. It has ONE processor, per the operator ruling of 2026-10-03 that admits mtcollins1 with socket 1 out. It lists no memory devices, so no nominal capacity enters. The part row (Q80-30) is recorded as a bet: it was chosen because its 80 threads equal the measured count.gunbc.session_residencygives mtcollins1SessionsOperatorDeclaredAbsent, from the operator ruling of 2026-10-03 relayed by eager-gull-22. Dissolves on a persistent install or any session placement.ResourceUnreadSectionAbsent→ResourceSectionAbsent. The reader is the first closure that joins it withHostCaptureSectionReadingSectionAbsent, and the resolver refuses duplicate variants (measured).Evidence (
test.claim.mtcollins1_runner_offer_witness; all evaluatedtrueviagunbc runat c683acf on BuildBuddy)census_meminfo_receipt_reads_as_measured_usable_ram: the inhabitance claim on the real reader route, with a supplied receipt.census_meminfo_RED_non_reads_refuse_by_causemtcollins1_RED_nominal_dram_total_reaches_neither_offer_nor_readermtcollins1_offer_cpu_width_equals_the_measured_one_socket_reading: checks against every one-socket boot that recorded a CPU reading inmtcollins1_socket1_investigation_boots.mtcollins1_RED_both_sockets_disagrees_with_the_measured_reading: 160 vs the measured 80.mtcollins1_carries_no_sessions_and_owes_no_reservationtest.claim.machine_intake.host_resource_observation_witnessstill hold after the rename.Declared frontier (not in this PR)
mtcollins1_offeris not infleet_intent_offers. Enrolment, and an end-to-end placement-accepts witness, wait on three things:gunbc.managed_hosthas no measured-silicon field yet (it is cut 1 ofdocs/plans/managed-host-untangle.md), so this PR imports the mtcollins1 census modules directly in the witness. The offer will read through that seam once it exists.🤖 Generated with Claude Code