Skip to content

Consolidate cassette joinery, power and shared platform profiles - #13295

Closed
briansrls wants to merge 33 commits into
mainfrom
claude/eager-sagan-u4myup
Closed

briansrls wants to merge 33 commits into
mainfrom
claude/eager-sagan-u4myup

Conversation

@briansrls

@briansrls briansrls commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor

Consolidates the cassette mechanical work onto main and prepares one shared design for ALTRAD8UD, NVIDIA GH200 P4261, Mt. Collins and Mt. Jade. The retained Altra prototype remains the geometry compatibility fixture; the larger platforms have planning layouts and explicit mounting obligations.

Result

  • Four keyed Altra tray panels, integral rails/handles and sliding rear mounts. Prior prototype receipts remain in the print-day record.
  • Tall Altra assembly with a keyed 140 mm rear cradle, split crossmember, removable guard and cassette-owned hollow corner posts. Fan/guard attachment uses two M4 bolts; the remaining rear/post joints use printed pins. Middle removal requires independent support for every unit above.
  • Largest-fitting rear-fan selection evaluates vendor-pattern 140/120/92/80 mm candidates against the available opening and print envelope. This is geometric selection, not airflow or electrical qualification.
  • One feature-aware bed allocator replaces the blanket 30 mm deduction. It reads the same joint/rail/socket/handle dimensions as the retained CAD and accounts separately for brim and bed-edge clearance. Under the proposed 2 mm brim and 0.5 mm edge clearance per side, Altra stays 2 × 2, while Collins and Jade become 3 × 4: 12 planned panels and 17 adjacent joins instead of 16 and 24. Larger required brims recompute the count; they are never silently reduced. Slightly unequal column widths respect each edge's feature envelope.
  • One outline carrier uses the existing CitedFigureStanding. Portwell's Collins dimensions have an upstream scoped module and a direct publisher-locator read receipt; the shorter-axis/across-chassis assignment remains a product inference, and the metric/inch discrepancy is preserved.
  • Every profile carries a closed mounting-reference value. Altra reuses its standard-location correspondence; Jade carries 13 image-derived candidates with typed calibration, datum, incomplete coverage and unestablished accuracy; Collins/GH200 carry explicit pending obligations. The existing standoff rule refuses Jade's image estimates. Renaming a profile cannot silently detach its reference. The coordinate table is emitted from the modeled observation.
  • Independent power-cassette planning retains a single-PSU default, replaceable adapters, supply/branch budgets and explicit node assignments. Transplant profiles intend to retain their native power/management assemblies. Component mass folds, placed-load screens and thermal obligations remain explicit.

Boundaries

The existing Altra solid realization is preserved. The shared partition graph still needs larger-board panel/joinery solid realization, verified support/keep-out maps and retained-component placement. A 3 × 4 planning grid is not a fabrication-ready Jade/Collins tray. GH200 outline data remains unresolved. Proposed clip/pin retention, stack strength, creep and cooling remain unqualified; no safe loaded stack count is certified.

The cassette-wide test.claim.cassette_ entry was removed from required_gate_prefixes at the operator's request. No replacement required-gate rows were added; existing changed-witness selection is unchanged.

Slicing (#13223) and printer authorization (#13149 and its approval-client dependency) remain separate operational changes. No printer jobs were started by this update.

Validation

19 focused checks passed on the final allocator tree: six allocation/boundary/refusal checks, eight mechanical-evidence/review-emitter checks and five platform checks. Twelve existing ASRock standoff checks also passed during the preceding authority refactor. The combined review emitter succeeded. All 34 retained Altra part descriptions and the emitted CAD program compare identical to the prior review, so no additional CAD realization was needed for unchanged geometry.

Earlier exact CAD checks passed for 34 valid solids, including 28 connected printed solids under the bed bound, with no printed-part overlaps within one or two units and no printed/hardware-envelope intersections. Browser checks covered model loading, selection, rotation, piece view and mobile width. These do not establish load, material or thermal qualification.

The earlier full local floor passed its 63 changed witnesses but refused in the browser/KVM wet lane, including an unmet browser-runner premise on srv2. Full GitHub checks on the current head remain the merge gate; focused checks are not a green-gate claim.

Interactive Altra review: https://altra-chassis-workbench.briansrls448156.chatgpt.site/140mm.html (owner-private; Altra geometry unchanged by this allocator refactor).

Current execution queue: docs/plans/cassette-completion-tasks.md. Mechanical sources, generated candidate table and verification boundaries: docs/plans/cassette-board-mechanical-references.md. Platform migration: docs/plans/cassette-platforms.md. Power interface: docs/plans/cassette-server-psu-interface.md.

gunbc-ci-auto-heal and others added 8 commits October 4, 2026 05:09
…and harness instruments, stack mechanics and exhaust thermal models

Reads the ALTRAD8UD-1L2T manual v1.20 first-party and models what it settles: DC-IN
on the 8-pin inputs with the 4-pin signal unused, a stated minimum of one input,
pinouts, five fan headers, rear I/O, the FRONT-edge placement of every power and fan
header, and the ambient range. The board profile shape and the input-population
standing move from the Gigabyte module into extdeps.boards.types on their second
consumer, as that module's own note directed.

Adds cited rows, each graded by how it was read: Bambu PLA Basic and PETG HF sheets,
Molex Mini-Fit Jr ratings, AWG copper resistance, the ATX12V +12 V band, dry-air
properties, Arctic P8 airflow/mass/current/PST, Dynatron W1 mass and fan duty
points, and the force, pressure, flow, density, specific-heat and acceleration
carriers std.measure lacked.

Product models for the operator's milk-crate direction: a derived stack pitch
(stack_geometry), a per-node 12 V feed with typed refusals (node_power_feed), the
power supply as a stack cassette with placement as a parameter and the earth
obligations re-homed to it (power_cassette), a harness census that counts and
measures every cable from the geometry (harness_census), a mass-roster identity
join with bearing, buckling, tip-force and tip-acceleration limits and a creep
boundary (stack_mechanics), and an exhaust-rise derivation against the sheet HDT
(exhaust_thermal). Five witness files; the design and the reversed program-plan
rulings are in docs/plans/milk-crate-stack-design.md.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UxN16vVsPsuTMMcJgqoEtm
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 4, 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-04T16:28:20.218542Z 3aee8ee PR opened
ℹ️ 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.

@briansrls
briansrls changed the base branch from main to session/cassette-joinery-review October 4, 2026 16:28

@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: 3aee8ee9ee

ℹ️ 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 +193 to +195
let h = centre_of_mass_height_mm(unit: unit, station: station, node_count: node_count)
let half_base = footprint_half_width() / 1000
if h == 0 { newton(count: no_mass) } else { newton(count: millinewton_count(f: weight_mn(m: column_mass(unit: unit, station: station, node_count: node_count))) * half_base / h / 1000) }

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 Use the stack-top height for the service-push moment

When service_push is the documented force applied at the top of the stack, dividing the restoring moment by the center-of-mass height overstates the force needed to tip the column—by roughly a factor of two for a uniform stack. This can make stack_admission accept columns that fail the declared push criterion; calculate the applied-force arm from the stack's top height instead.

Useful? React with 👍 / 👎.

Comment on lines +180 to +182
let node_moment = node_count * gram_count(g: unit) * (node_count * p) / 2
let station_height = match station.placement { TopOfColumn => node_count * p + p / 2 BottomOfColumn => p / 2 BesideColumn => p / 2 }
let station_term = match station.placement { TopOfColumn => gram_count(g: station.mass) * station_height BottomOfColumn => gram_count(g: station.mass) * station_height BesideColumn => no_mass }

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 Shift node moments above a bottom-mounted station

When station.placement is BottomOfColumn, the power cassette occupies the first pitch and every node center is one pitch higher, but node_moment always places nodes from p/2 upward as if no station were beneath them. This understates the column center of mass and therefore overstates both tipping force and allowable acceleration, potentially inflating max_admitted_height for the placement the tests recommend.

Useful? React with 👍 / 👎.

Comment on lines +55 to +56
fn bank_flow(fans: Nat, duty: Percent) -> MillilitrePerSecond {
millilitre_per_second(count: fans * millilitre_per_second_count(f: arctic_p8_published_airflow) * percent_count(p: duty) / 100)

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 Derate fan airflow for the installed pressure load

When the fans are installed behind the modeled guards, vents, and chassis restrictions, multiplying their published maximum airflow by fan count and duty treats the free-air maximum as delivered system flow. Because mount_thermal_margin turns that optimistic flow directly into PrintedPartBelowHdt, it can report PLA safe even when the actual operating point has substantially less flow; the admission needs a measured/curve-derived installed-flow input or must remain unresolved.

Useful? React with 👍 / 👎.

Comment on lines +115 to +120
let drop = branch_drop_mv(resistance: resistance, length: inputs.branch_length, current: current)
let at_connector = match nat_sub(a: millivolt_count(v: inputs.station_setpoint), b: millivolt_count(v: drop)) { NatDifference { value: v } => millivolt(count: v) NatSubtrahendExceedsMinuend => millivolt(count: zero_ma) }
if millivolt_count(v: at_connector) < millivolt_count(v: inputs.regulation.minimum) {
NodeFeedRefused { cause: ConnectorVoltageBelowBand { at_connector: at_connector, band_minimum: inputs.regulation.minimum, drop: drop } }
} else {
NodeFeedAdmitted { feed: NodeFeed { node_current: current, inputs_populated: populated_count(current: current, limit: limit), per_input_limit: limit, branch_round_trip_drop: drop, at_connector: at_connector } }

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 pigtail resistance in connector voltage

For every DC-in plan with nonzero ATX12V pigtails, at_connector subtracts only the shared branch's drop even though harness_census separately models the pigtails between that branch and the board inputs. A long or thinner pigtail can therefore put the actual board connector below 11.4 V while node_feed returns NodeFeedAdmitted; include the split pigtail current, gauge, and length before evaluating the connector voltage.

Useful? React with 👍 / 👎.

Comment on lines +33 to +35
fn station_adequacy(station: PowerCassette, node_dc_loads: List<Watt>) -> PsuAdequacy {
let total = fold(node_dc_loads, init: 0, f: (acc, w) => acc + watt_count(w: w))
psu_adequacy_for_load(load: watt(count: total), rated: station.supply_rated_output)

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 Enforce the station's declared node capacity

When the supplied load list contains more entries than station.nodes_fed, station_adequacy ignores that capacity and can return PsuAdequate whenever wattage is sufficient—for example, a high-rated four-branch station would admit eight nodes. This bypasses the declared protected-feed count, so adequacy must refuse or become undecidable when the load count exceeds nodes_fed.

Useful? React with 👍 / 👎.

Comment on lines +101 to +104
PstPassThrough { max_chained_standing: _ } => [
CableRun { node_index_from_bottom: node, role: FanHeaderCable, count: 1, each: fan_header_run(plan: plan) },
CableRun { node_index_from_bottom: node, role: FanPstLink, count: nat_minus(a: plan.fans_per_node, b: 1), each: millimeter(count: 100) },
]

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 Count required fan extension cables

When fan_header_run exceeds the fan's 400 mm lead, the census sets fan_header_extension_needed but this branch still emits exactly one FanHeaderCable per node. Consequently cable_count, the run roster, and downstream ordering omit the extension despite the adjacent contract describing it as a second cable; emit/count an extension run whenever the flag is true.

Useful? React with 👍 / 👎.

@briansrls briansrls changed the title Printed chassis stack mechanics, power, and thermal models Model cassette component masses, load cases and thermal evidence Oct 4, 2026
@briansrls
briansrls changed the base branch from session/cassette-joinery-review to main October 4, 2026 18:46
@briansrls briansrls changed the title Model cassette component masses, load cases and thermal evidence Consolidate cassette joinery, power and shared platform profiles Oct 4, 2026
@gunbai-bot

gunbai-bot Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

Heads-up before queueing: this PR adds import v2.std.optional, but #13388 re-homed that module to std.optional, so it no longer resolves on main. The PR's own run may pass because it predates main's change. In the merge queue it will fail the floor (unresolved import: module 'v2.std.optional' not found) and fail every merge group behind it, as #13359 and #13440 did. Please merge main in and repoint those imports to std.optional before enqueueing. — sent from swift-bat-828

@gunbai-bot

gunbai-bot Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

Closed without folding in the v1 closeout bankruptcy (#13641). A conflicting printer consolidation (2026-10-04) with no owner. 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 gunbai-bot Bot mentioned this pull request Oct 10, 2026
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.

2 participants