Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
314afbc
PRINT-0..4: the printed node chassis program, model-first and refusing
Sep 2, 2026
0637eee
PRINT-0..4 repairs: transposed board axes, sidecar contract check, wi…
Sep 2, 2026
a492561
Standoffs are a correspondence to the micro-ATX grid, not read coordi…
Sep 2, 2026
c20c4eb
Contract mints from one declaration: unbound pairing and orphaned sid…
Sep 2, 2026
a5a7ef3
Review 58452: prose that should have been typed, a quadratic scan tha…
Sep 2, 2026
8de9974
Review 58474 and the stale-head reviews: structural equality, a 300um…
Sep 2, 2026
dde7bea
microATX gets its own authority, the A1 mini gets a product row, and …
Sep 2, 2026
db7aeb6
Coupon V0 drops the operation that underdetermined its own output, an…
Sep 2, 2026
e4a3e49
Merge remote-tracking branch 'origin/main' into session/crisp-ibex-710
Sep 2, 2026
9c3c534
The pinned plan stops listing an operation the code deleted, and reco…
Sep 2, 2026
4ba4b44
The transport wall was admitting an operation V0 deleted, and its own…
Sep 2, 2026
15ac307
Semantic admission: the wall compares the whole specimen, and two fau…
Sep 2, 2026
ae4462c
Coupon identity becomes a closed coproduct and the generic mint is de…
Sep 2, 2026
a52dab2
Operation order was already refused; what was missing was the witness…
Sep 2, 2026
fea4fdd
The admitted value was forgeable and I had claimed it was not; a prob…
Sep 2, 2026
968dd91
The pinned plan records what the transport wall actually compares, an…
Sep 2, 2026
236e352
The V1 obligation was a bare String, which is the §4c violation this …
Sep 2, 2026
d7aaff1
The expect-compile-refusal harness already existed, and the refusal a…
Sep 2, 2026
cf277ff
Rename the overclaiming carriers, and go get the document instead of …
Sep 2, 2026
9a5c59e
The actuator pairing is unbound, declared as a typed obligation rathe…
Sep 2, 2026
22f1da8
The coupon cannot be identified from its own geometry, so the canonic…
Sep 2, 2026
07b2288
The datum controls did not cover the coupon being turned OVER, which …
Sep 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 71 additions & 1 deletion dag/extdeps/boards/asrock_rack.dag
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,10 @@ import extdeps.firmware.types {
firmware_semantic_version,
}
import std.measure { ByteSize, MegatransfersPerSecond, byte_size, celsius, megatransfers_per_second, percent, positive_celsius_delta, positive_measure_count }
import extdeps.external_authority { ExternalAuthority, ExternalModelScope, ExternalSubjectRef }
import extdeps.external_authority { ExternalAuthority, ExternalModelScope, ExternalSubjectRef, FactCitation }
import std.coordinate_frame { CoordinateFrameIdentity, coordinate_frame_identity }
import std.affine_space { point2 }
import std.orthogonal_geometry { AxisAlignedRectangle2, OrthogonalConstruction, axis_aligned_rectangle2 }
import std.decl_ref { DeclarationRef, WholeDeclaration }
import extdeps.cpu.types { CpuSocket }
import extdeps.cpu.ampere { ampere_lga4926_socket }
Expand Down Expand Up @@ -571,3 +574,70 @@ data asrock_altrad8ud_1l2t_mechanical: AsrockAltrad8ud1l2tMechanical = AsrockAlt
}

data asrock_altrad8ud_channel_note: NonEmptyStr = "Eight DIMM slots at one DIMM per channel on the vendor page - the board exposes eight of the SoC's memory channels, so the one-DIMM-per-channel population IS the full population; there is no second-DIMM headroom on this platform, unlike the 16-slot dual-socket boards and the 32-slot 2DPC systems."

// ---------------------------------------------------------------------------------------------
// BOARD GEOMETRY, read first-party from the vendor manual this module already cites.
//
// PROVENANCE, stated before the numbers because it is the fact that decides how they may be used.
// extdeps_external_authority_anchor names download.asrock.com/Manual/ALTRAD8UD-1L2T.pdf. That
// document was FETCHED AND READ by the authoring session — download.asrock.com answers 200 from
// this environment, unlike the general web, which is refused — so these are a first-party read of
// the manual and not the relayed grade extdeps.climbing_holds.atomik is stamped with. Section 1.4
// "Motherboard Layout" carries the outline as leader dimensions: 26.7 cm (10.5 in) by 24.4 cm
// (9.6 in).
//
// WHAT THIS REPLACES. asrock_altrad8ud_1l2t_mechanical carries form_factor_label, a String reading
// "deep micro-ATX (9.6 x 10.5 in)". That row states a MEASUREMENT in prose, which DESIGN §4c names
// as the thing a typed carrier must hold instead — a String cannot be asked whether a chassis panel
// clears the board. The label is left standing because it also carries a FORM-FACTOR CLAIM, which
// is a different fact from an outline and is not established by these two lengths.
//
// AND THE FORM-FACTOR CLAIM IS EXACTLY WHAT THIS DOES NOT MAKE. 267 by 244 mm is the board's drawn
// outline. It is NOT a statement that the board carries the micro-ATX mounting-hole pattern, and
// the two must not be conflated: micro-ATX is 244 by 244, so this board is 23 mm WIDER than the
// form factor its own label names, and a chassis built to the micro-ATX hole pattern on the
// strength of that label would be built to the wrong width. gunbc.product.altra_motherboard's
// placement module states the same separation for our own board — a declared size is not a
// conformance claim — and it is repeated here because here there IS a label inviting the inference.
// ---------------------------------------------------------------------------------------------
fn asrock_altrad8ud_board_frame() -> CoordinateFrameIdentity { coordinate_frame_identity(occurrence: 31) }

// Micrometres, for the reason std.spatial_frame records and extdeps.printing.fdm repeats: the
// quantum is chosen from the smallest distinction the frame must preserve, not from the largest
// value it must hold. Whole millimetres are sufficient for these two extents and are NOT sufficient
// for what will be drawn in this frame next — DIMM slot pitch and standoff positions — and a frame
// whose quantum is retro-fitted after coordinates exist in it silently rescales every one of them.
fn asrock_altrad8ud_board_outline() -> OrthogonalConstruction<AxisAlignedRectangle2> {
axis_aligned_rectangle2(
min: point2(frame: asrock_altrad8ud_board_frame(), x: 0, y: 0),
max: point2(frame: asrock_altrad8ud_board_frame(), x: 267000, y: 244000)
)
}

data asrock_altrad8ud_board_outline_citation: FactCitation = FactCitation {
fact: DeclarationRef {
module_path: "extdeps.boards.asrock_rack",
decl_name: "asrock_altrad8ud_board_outline",
field: WholeDeclaration
},
authority: extdeps_external_authority_anchor
}

// THE MOUNTING HOLES ARE NOT HERE, AND THEIR ABSENCE IS THE POINT.
//
// Section 1.4 draws the standoff holes as unlabelled circles on the layout figure and dimensions
// NONE of them: the manual states the outline and stops. So the coordinates a chassis actually
// needs are, for this subject, an OBLIGATION and not a fact — and this module refuses to hold them
// rather than deriving them from the micro-ATX pattern the form-factor label gestures at. That
// derivation is available, plausible, and would be wrong in a way nothing downstream could detect:
// it would place standoffs against a 244 mm-wide pattern on a 267 mm-wide board, produce a chassis
// that assembles until the last two screws, and cite this manual while doing it.
//
// DESIGN §5's absorbing fallback is precisely this move — substituting the superset, or the nearby
// standard, when the precise answer is unavailable — so the arm refuses and names what would clear
// it. The operator holds four of these boards and four more are inbound; caliper positions from a
// declared origin corner are a first-party measurement, admissible at the OperatorMeasured grade
// that extdeps.ampere.mt_collins_product_brief.platform already establishes for a tape-measured
// chassis depth. That is the trigger: measured standoff coordinates, not a second reading of this
// manual, which does not contain them.
data asrock_altrad8ud_mounting_hole_obligation: NonEmptyStr = "UNMODELLED, REFUSING: standoff hole coordinates and diameter. The vendor manual draws the holes on the section 1.4 layout figure without dimensioning them, so no reading of the cited authority can supply them. They are NOT to be derived from the micro-ATX hole pattern: the board is 267 mm wide against that pattern's 244 mm, so the derivation would be silently wrong at the chassis-assembly boundary. Cleared by operator caliper measurement from a declared origin corner, recorded at the OperatorMeasured provenance grade."
118 changes: 118 additions & 0 deletions dag/extdeps/printing/bambu_studio.dag
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
module extdeps.printing.bambu_studio

import std.types { List, NonEmptyStr }
import std.decl_ref { DeclarationRef, WholeDeclaration }
import std.os.types { OperatingSystemProduct, UbuntuOs, WindowsOs, MacosOs, NobleNumbat2404Lts, Windows1124H2Build26100, Sequoia15 }
import extdeps.external_authority { ExternalAuthority, ExternalModelScope, ExternalSubjectRef }
import extdeps.uri { Uri, Https }

// Bambu Studio, the vendor's own slicer, as its OWN subject — not a field on the printer. DESIGN §3
// external decomposition: the slicer is independently versioned from the machine it slices for, and
// OrcaSlicer, its fork, is a third subject again. A printer module that enumerated its slicers would
// be the generic-hub violation that rule names.
data extdeps_external_authority_anchor: ExternalAuthority = ExternalAuthority {
uri: Uri {
scheme: Https
locator: "github.com/bambulab/BambuStudio"
}
}

data bambu_studio_product_page_authority: ExternalAuthority = ExternalAuthority {
uri: Uri {
scheme: Https
locator: "bambulab.com/en/download/studio"
}
}

data bambu_studio_release_api_authority: ExternalAuthority = ExternalAuthority {
uri: Uri {
scheme: Https
locator: "api.github.com/repos/bambulab/BambuStudio/releases/latest"
}
}

data bambu_studio_flathub_authority: ExternalAuthority = ExternalAuthority {
uri: Uri {
scheme: Https
locator: "flathub.org/apps/com.bambulab.BambuStudio"
}
}

data extdeps_model_scope: ExternalModelScope = ExternalModelScope {
subject: ExternalSubjectRef {
declaration: DeclarationRef {
module_path: "extdeps.printing.bambu_studio",
decl_name: "bambu_studio_platform_support",
field: WholeDeclaration
}
},
first_citation: extdeps_external_authority_anchor,
further_citations: [bambu_studio_release_api_authority, bambu_studio_flathub_authority],
}

// TWO AUTHORITIES FROM ONE VENDOR DISAGREE, AND THE MODEL CARRIES BOTH RATHER THAN PICKING.
//
// The A1 mini specification table, relayed by the operator from the product page, states the slicer's
// supported operating systems as "MacOS, Windows". The vendor's own release feed, fetched
// first-party from this environment, publishes BambuStudio_ubuntu22.04-*.AppImage and
// BambuStudio_ubuntu24.04-*.AppImage as release assets, and Flathub serves the application. Both are
// the vendor speaking. They do not agree.
//
// WHY NOT JUST RECORD "LINUX IS SUPPORTED". Because that resolves a disagreement this repository
// has no authority to resolve, and it discards the fact that is actually load-bearing for an
// operator: the SPEC SHEET does not promise Linux, so a Linux regression is not a warranty claim,
// while the RELEASE FEED demonstrably ships Linux binaries, so the toolchain can be Linux-native
// today. A consumer planning a Linux workstation needs the second; a consumer deciding what the
// vendor is contractually committed to needs the first. Collapsing to one erases the other, and the
// collapse would be invisible — the surviving row looks equally authoritative either way.
//
// This is the shape DESIGN §3 calls a MEANING FORK if it were left implicit: one spelling
// ("supported OS") carrying two materially different obligations. Naming the two claims separately,
// each with its own authority, is what keeps it from being one.
type PlatformSupportClaimKind
= SpecificationSheetClaim
| PublishedReleaseArtifact

type PlatformSupportClaim sole_constructor {
kind: PlatformSupportClaimKind
platform: OperatingSystemProduct
authority: ExternalAuthority
note: NonEmptyStr
}

data bambu_studio_spec_sheet_platforms: List<PlatformSupportClaim> = [
PlatformSupportClaim {
kind: SpecificationSheetClaim,
platform: MacosOs { distro: Sequoia15 },
authority: bambu_studio_product_page_authority,
note: "A1 mini specification table, 'Slicer Supported OS: MacOS, Windows', relayed by the operator 2026-09-01. The table names the OS family without an edition; Sequoia15 is this corpus's macOS surface row and is NOT part of the vendor's claim.",
},
PlatformSupportClaim {
kind: SpecificationSheetClaim,
platform: WindowsOs { distro: Windows1124H2Build26100 },
authority: bambu_studio_product_page_authority,
note: "Same table, same relay. Edition is this corpus's Windows surface row and is not stated by the vendor table.",
},
]

// Fetched first-party: api.github.com answers 200 from this environment, so these asset names were
// READ, not relayed. The release carrying them is v02.08.02.61. Ubuntu 22.04 is also published; only
// the 24.04 asset is modelled here because NobleNumbat2404Lts is the surface row this corpus carries,
// and inventing a 22.04 row to be complete would mint an OS product for a claim nothing consumes.
data bambu_studio_release_artifact_platforms: List<PlatformSupportClaim> = [
PlatformSupportClaim {
kind: PublishedReleaseArtifact,
platform: UbuntuOs { distro: NobleNumbat2404Lts },
authority: bambu_studio_release_api_authority,
note: "Release asset BambuStudio_ubuntu24.04-v02.08.02.61-*.AppImage, read first-party from the release API 2026-09-01. Flathub additionally serves com.bambulab.BambuStudio.",
},
]

data bambu_studio_platform_support: List<PlatformSupportClaim> = concat(
bambu_studio_spec_sheet_platforms,
bambu_studio_release_artifact_platforms
)

// The disagreement stated as a fact of its own, so a reader who consults only one list is told the
// other exists. It is NOT a resolution: no arm of this module says which claim wins.
data bambu_studio_platform_claim_divergence: NonEmptyStr = "The vendor's specification table and the vendor's release feed disagree about Linux. The table lists macOS and Windows only; the release feed publishes Ubuntu 22.04 and 24.04 AppImages and Flathub serves the application. Both are cited above with separate authorities and separate claim kinds. This repository does not adjudicate between them: a Linux toolchain is demonstrably available, and is not promised by the specification sheet."
Loading
Loading