Skip to content

mtcollins1 runner offer at measured one-socket shape + census meminfo reader - #13252

Closed
gunbai-bot[bot] wants to merge 13 commits into
mainfrom
session/fierce-hawk-431-mtc1-offer
Closed

gunbai-bot[bot] wants to merge 13 commits into
mainfrom
session/fierce-hawk-431-mtc1-offer

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

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

  • (a) Census reader: gunbc.host_memory_observation host_usable_ram_from_capture. It reads the capture envelope's meminfo section (via host_capture_section_reading) and parses it with observe_memory. The result is HostUsableRamMeasured (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 to gunbc_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.
  • (b) Offer: gunbc.ci_fleet mtcollins1_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.
  • Residency: gunbc.session_residency gives mtcollins1 SessionsOperatorDeclaredAbsent, from the operator ruling of 2026-10-03 relayed by eager-gull-22. Dissolves on a persistent install or any session placement.
  • Rename: ResourceUnread SectionAbsent → ResourceSectionAbsent. The reader is the first closure that joins it with HostCaptureSectionReading SectionAbsent, and the resolver refuses duplicate variants (measured).

Evidence (test.claim.mtcollins1_runner_offer_witness; all evaluated true via gunbc run at 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_cause
  • mtcollins1_RED_nominal_dram_total_reaches_neither_offer_nor_reader
  • mtcollins1_offer_cpu_width_equals_the_measured_one_socket_reading: checks against every one-socket boot that recorded a CPU reading in mtcollins1_socket1_investigation_boots.
  • mtcollins1_RED_both_sockets_disagrees_with_the_measured_reading: 160 vs the measured 80.
  • mtcollins1_carries_no_sessions_and_owes_no_reservation
  • All 16 claims in test.claim.machine_intake.host_resource_observation_witness still hold after the rename.

Declared frontier (not in this PR)

mtcollins1_offer is not in fleet_intent_offers. Enrolment, and an end-to-end placement-accepts witness, wait on three things:

  1. the census MemTotal row, read from the receipt by this reader;
  2. a fixed-overhead row for mtcollins1;
  3. the width chain reading a supplied facts record. That is the next PR, after CPU admission axis reads each host's offer, not one catalog row #13197, and it is also where the RAM-backed tmpfs workspace gets charged inside slot memory.

gunbc.managed_host has no measured-silicon field yet (it is cut 1 of docs/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

Brian Searls and others added 6 commits October 4, 2026 03:31
…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>
Brian Searls and others added 5 commits October 4, 2026 16:19
…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>
@gunbai-bot

gunbai-bot Bot commented Oct 5, 2026

Copy link
Copy Markdown
Contributor Author

Head b74b7c6 merges main (#13268's facts-record seam) and adds the end-to-end claims. All 9 claims in test.claim.mtcollins1_runner_offer_witness evaluated true on BuildBuddy at this head.

  • mtcollins1_placement_accepts_the_offer_over_supplied_one_socket_facts: host_deployment_standing_given accepts mtcollins1_offer with derived runner_count=4. The record is mtcollins1's production host_width_facts, so session (the real residency row), control plane, served claims, disk and shakedown slot are all real. Three fields are supplied:
    • cpu: the offer's measured 80-thread width;
    • usable_ram: host_usable_ram_from_capture over a DESIGNED meminfo receipt (MemTotal 131000000 kB), the same route the wet receipt will take;
    • fixed overhead: a designed 8 GiB allowance, because mtcollins1 has no overhead row yet.
  • mtcollins1_RED_placement_refuses_until_usable_ram_is_measured: the same record with today's real RAM standing (unmeasured) refuses UsableRamUnavailable.
    The width 4 is a function of the designed RAM and overhead and is not a prediction. Still a draft: it waits for the census receipt (MemTotal row) and an overhead row; enrolment comes after both.

…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>
@gunbai-bot

gunbai-bot Bot commented Oct 5, 2026

Copy link
Copy Markdown
Contributor Author

At 9cb4551, one census receipt now yields both memory rows. census_meminfo_reading parses the capture's meminfo section once. host_usable_ram_from_capture takes MemTotal from it, and host_fixed_overhead_from_capture takes MemTotal − MemAvailable through host_overhead_upper_bound, the same bound srv3's row uses; a census boot is the quiescent read that bound's note asks for. The accept claim now reads overhead from the same designed receipt, so the designed allowance is gone. It still derives runner_count=4, and the new census_meminfo_receipt_reads_as_measured_fixed_overhead holds. All 10 claims evaluated true on BuildBuddy. Enrolment frontier: ONE trigger, the census boot's meminfo receipt. The RAM-backed tmpfs workspace charge is still open, and must land before enrolment.

…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>
@gunbai-bot

gunbai-bot Bot commented Oct 5, 2026

Copy link
Copy Markdown
Contributor Author

At 73db6ac the tmpfs workspace is modeled in the slot envelope, no longer only noted in a comment.

  • HostWidthFacts.workspace: HostWorkspaceStanding. Its production value, host_workspace_standing, reads the host's backing and, for a slot-charged (RamBackedTmpfs) backing, the workspace-inclusive peak through gunbc.runner_throughput_qualification aggregate_memory over the host's recorded qualification runs. No runs are recorded yet, so the value is MemoryUnread.
  • committed_width_of refuses WidthWorkspacePeakUnestablished unless that peak is PeakWithinSlotHigh. Disk-backed hosts are unaffected: the probe still gives srv1=10 srv2=unresolved srv3=17 srv4=17.
  • To avoid an import cycle: the mtcollins1_qualification_workspace_backing row (with its note) moves to gunbc.runner_throughput_qualification, and selected_slot and slot_quota_threads move to gunbc.runner_slot_allocation. Each still has a single definition.
  • New RED mtcollins1_RED_tmpfs_host_with_no_qualification_peak_refuses: the same supplied facts with the production workspace standing refuse by type, in both width and placement. The accept claim now supplies a designed peak within the high and still derives runner_count=4.
  • Frontier, in order: (1) census boot → RAM and overhead; (2) wet qualification receipt → workspace-inclusive peak.
    19 claims evaluated true on BuildBuddy at this head: the 11 offer claims, 3 host_width_facts claims, 2 slot_allocation claims, 2 qualification claims, and live-plan conservation. The rest of those suites are left to CI.

@briansrls
briansrls marked this pull request as ready for review October 9, 2026 17:36
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 9, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-09T17:39:41.447585Z 73db6ac Draft marked ready
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment on lines +985 to +986
fn recorded_qualification_runs_for(host: HostIdentity) -> List<ObservedRunnerQualificationRun> {
filter(recorded_qualification_runs, r => (r.host as String) == (host as String))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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 👍 / 👎.

Comment on lines +79 to +82
} 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."
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

@gunbai-bot

gunbai-bot Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor Author

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

@gunbai-bot gunbai-bot Bot closed this Oct 9, 2026
gunbai-bot Bot added a commit that referenced this pull request Oct 10, 2026
…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>
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.

0 participants