Skip to content

Add Lotes AZIFA072 socket body as resolved LGA4926 constituent - #9061

Merged
briansrls merged 4 commits into
mainfrom
claude/lga4926-mobo-design-379oa6
Aug 24, 2026
Merged

briansrls merged 4 commits into
mainfrom
claude/lga4926-mobo-design-379oa6

Conversation

@briansrls

Copy link
Copy Markdown
Contributor

Summary

Resolves the unresolved LGA4926 socket-body constituent by introducing the Lotes AZIFA072-P001CCS orderable part as a separately versioned, independently authored subject. This closes the decomposition left open in extdeps.cpu_attachment.ilm4926, which had resolved only the ILM + backplate assembly (AZIF0222) but not the socket body that receives the processor and solders to the board.

Key Changes

  • New module extdeps.cpu_attachment.lotes_azifa072: Declares the socket-body part with its own authority anchor, drawing authority, and footprint release authority. Follows the design principle (§3, external upstream decomposition) that two orderable parts from one vendor are two subjects, not one, and therefore require independent versioning and authority.

  • Documentation: Added docs/extdeps/lotes_azifa072/README.md explaining provenance, the distinction between this part and AZIF0222, and the board land pattern closure. Includes customer drawing PDF and derived pad array/footprint data (SVG and CSV).

  • Test integration: Updated dag/test/claim/ilm4926_designation_witness_test.dag to import and exercise the new module's authorities and footprint release predicate.

  • Upstream reference: Updated dag/extdeps/cpu_attachment/ilm4926.dag to import the new Lotes module, establishing the link between the designation (which names both constituents) and this independently versioned socket-body subject.

Implementation Details

The module models the socket body as a distinct Hardware subject with its own ExternalAuthority (Lotes), separate from the retention assembly. This allows the drawing and footprint to be versioned independently—a revision of the socket-body drawing does not require editing the designation module, preserving the single-authority principle (§3) and minimizing redundancy (§2).

The footprint release authority (lga4926_footprint_may_release) is declared here rather than in the designation module, since it is specific to this orderable part's board interaction, not to the ILM designation itself.

https://claude.ai/code/session_01HufBEsw4eqxSnEtBZ5re5a

claude added 4 commits August 23, 2026 22:36
… pattern with it

extdeps.cpu_attachment.ilm4926 has carried three unresolved socket-body axes
since it was written -- vendor, orderable part number, board land pattern --
with lga4926_land_pattern_public_route naming exactly what to ask Lotes for:
"the socket-body part number that mates with AZIF0222, then its customer drawing
or recommended PCB layout". Lotes answered. This lands that answer.

AZIFA072-P001CCS, drawing GAP-AZIFA072 rev 2 (ECN N230045), 5 sheets. It gets
its own module rather than folding into ilm4926: two orderable parts from one
vendor are two independently versioned subjects, so a revision of this drawing
must not require editing the designation module. The designation module keeps
what is still open -- no cited document expands the initialism, and a part
number does not retroactively expand one.

The geometry is extracted from the drawing's own vector content and
cross-validated against the supplied STEP solid by an independent path. Neither
extraction consulted the other:

  array extent   PDF 63.449 x 75.470 mm   STEP 63.44 x 75.47 mm
  pad count      callout 4926             drawn elements 4926
  ball diameter  callout 0.52             modelled sphere radius 0.26
  positions      642 of the 650 balls the STEP models land within 0.25 mm of an
                 extracted pad; median deviation 0.019 mm

The 4926 centres are committed as an artifact beside the drawing because they
are not derivable from the lattice parameters: the array has a central void and
splits into two banks whose X phases differ, and filling the outline the STEP
carries overshoots by 359 positions.

Running the model is what caught the one real defect in this change. When the
last citation landed, attachment_footprint_may_emit flipped from refusing to
permitting -- while the stencil aperture was unread, the Pin 1 corner unlocated
and the mask opening unidentified. Established is not complete: establishment is
a property of a fact's grounding, releasability is a property of a deliverable's
completeness, and a gate reading only the first permits as soon as the paperwork
is done. Folding the gaps into that predicate was tried first and was worse --
it made a predicate over an arbitrary AttachmentStanding false for every input
including its own synthetic positive control, which is a decoration rather than
a strict gate. So the two questions are separated: attachment_footprint_may_emit
stays flippable with its RED and GREEN controls intact, and
lga4926_footprint_may_release refuses while azifa072_open_gaps stands.

Three witnesses inverted and are updated rather than deleted, each keeping the
pairing that carries the content: the socket body is now identified WHILE the
designator stays unexpanded; the two constituents resolve to DIFFERENT
authorities though both are Lotes; and the standing gate opens WHILE the release
gate refuses.

Measured, not inspected: both modules and the downstream attachment_stack
consumer compile with 0 blocking errors, and every claim the updated witnesses
assert was executed against the real modules and returned true, with the
standing gate and the release gate disagreeing -- which is what makes the
conjunction load-bearing rather than decorative.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HufBEsw4eqxSnEtBZ5re5a
…parser truncation

Three corrections to the socket-body module, two found by re-reading the diff
against DESIGN and one found by executing it.

TYPED CARRIERS REPLACE PROSE. Two String rows carried machine-consumed facts as
sentences, which is the modelling debt section 4c names: a note claiming "359
positions are depopulated" is a claim no lens can see and no reader can check.
The fill discrepancy becomes LatticeFillDiscrepancy with the counts as fields
and a derived identity over them, and carriability becomes a DocumentCarriage
coproduct beside the route types ilm4926 already uses for the same distinction.
The remaining String in the module is the one whose content genuinely is prose.

THE GATE'S RUNG IS STATED, NOT IMPLIED. Both footprint predicates carried a
comment calling them "the predicate a footprint emitter consults". Measured:
no footprint emitter exists in the tree, and the only consumers of either
function are the witnesses. The predicates are real and answer correctly; what
is absent is anything obliged to ask. Claiming otherwise is the
specification-without-execution failure wearing the vocabulary of a wall, so
both now state the honest rung -- mitigatable, prevented by review rather than
by construction -- and name the next-rung trigger: the first caller in
product.pcb.footprint that turns a land pattern into pads.

A LEADING `-` ON A CONTINUATION LINE SILENTLY DISCARDS AN OPERAND. The
arithmetic identity added above returned FALSE with every number correct. The
parser ends an expression at the newline and reads `- x` as a fresh statement
applying unary minus: `100` / `- 1` is -1, while `100` / `+ 1` is 101 and
`100` / `* 3` is 300, and a trailing `-` continues correctly. Only `-` is
affected, because only `-` has a unary form that can begin a statement -- the
automatic-semicolon hazard. This is silent wrongness, which section 5 places
outside the ladder rather than low on it: total, type-correct, zero diagnostics
at any severity, and invisible to a reviewer reading the source that produced
it. It was caught only by executing the check and disagreeing with it.

Corpus exposure measured at zero -- of thirteen leading-`-` continuations, twelve
are markdown bullets inside string literals and the thirteenth was this one --
but the style the hazard punishes is house style, so the class is open even
though no instance survives. The parser is deliberately NOT fixed here: v1's
admission test is service to the v2 self-host program, and a statement-boundary
change needs its own review against v2's grammar rather than a drive-by in a
socket-geometry change. The instance is repaired by parenthesising on one line
with the reason recorded at the call site, and the class, its reduced cases, its
blast radius and its fail-closed next rung are in
docs/probes/leading_minus_continuation_silently_truncates_2026-08-23.md.

Measured: the gating CI job passes on this tree -- claim_executor
--required-cited-symbol reports OK, checked=390, exit 0 -- and all six claims of
the corrected modules were executed and returned true, including the arithmetic
identity that was silently false before this commit.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HufBEsw4eqxSnEtBZ5re5a
…endor's drawing

The witness floor went red on f50d63e. Fifteen failures, and the split is the
point: six are this PR's and nine are main's, which fails the same job at this
PR's exact merge base 00ad29e while importing nothing this diff touches.

WHAT THIS PR BROKE, AND WHY THAT IS THE SUBSTRATE WORKING. Establishing a fact
that had been unresolved since ilm4926 was written inverted every downstream
assertion encoding "this is still open": four in altra_attachment_stack_witness,
one in altra_pcb_world_svg_witness, one in ilm4926_designation_witness. Each is
repaired to assert what is now true while keeping the claim it defends, rather
than deleted or weakened to a tautology. w_a_public_package_does_not_establish_
the_board_land_pattern now asserts both facts are established by DIFFERENT
authorities, so it still fails if anyone derives board pads from the package
underside -- the category error that module's header exists to prevent. The
scene-label witness asserts the land-pattern label is ABSENT and keeps the count
conjunct tying emitted labels to the obligation population, so the test cannot
quietly weaken as layers resolve. The pcb_world witness asserts obligations still
exist for other layers, because asserting only the land pattern's absence would
pass on an empty obligation list -- an empty-observation narrow, which is worse
than the widen DESIGN forbids.

A LATENT BUG OLDER THAN THIS CHANGE. carriage_for_board_land_pattern_fact mapped
FactEstablished to CarriageNotApplicable, which authority_standing_refusal
directly contradicts: EstablishedFactHasInapplicableCarriage exists precisely
because an established fact always has a carriage answer. The two functions
disagreed for as long as the arm existed and nothing detected it, because no
input could reach the arm while the land pattern was unresolved. This is
reachability-read-as-occupancy from the unusual direction -- not a live guard
deleted for being quiet, but an unreachable arm that went unexamined and was
simply wrong. NormalizedFactsMayBeCarried is the correct answer by the type's own
definition: the normalized numerical facts are admitted and the vendor's
expression of them is not.

THE VENDOR'S DRAWING IS REMOVED, AND THE REASON IS NOT SIZE. RepositoryCarriageStanding
has three arms rather than four, and the absent one is SourceExpressionMayBeCarried:
copying a vendor's PDF, figure, prose or table layout is refused for EVERY subject
by repository policy rather than chosen per subject. The previous commit committed
one. The operator's clearance covered CONFIDENTIALITY -- there is no NDA on this
part -- which is a different question from whether this repository carries a
vendor's expression of its own facts; both had to hold and only the first was
checked. The extracted positions and dimensions stay, because those are exactly
what the surviving arm admits. The citation now names the route to the drawing
with the document's exact identity beside it, the same shape this repository
already uses for Customer Connect: a locator for the route, not for the bytes.

No geometry changed. Every extracted number stands unaltered.

VERIFICATION STATE, STATED HONESTLY. The six repairs are derived from a measured
baseline -- a full local floor over the pre-repair tree, whose fifteen failures
are the list above -- and each repair targets a named failure in it. A full floor
over the REPAIRED tree was still in its compile phase when this was committed, so
these fixes are reasoned from measurement rather than confirmed by re-measurement;
a follow-up lands if it disagrees. This PR's job will stay red either way until
main recovers, since the floor runs the whole corpus and nine of its failures are
main's.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HufBEsw4eqxSnEtBZ5re5a
minimal_design already selects the channel count against DesignIntent, because
the datasheet documents the one- and two-channel populations as engineering
debug and the same count is therefore admissible for bring-up and refused for
production. Every other requirement ignored that distinction: required_roles
returned the identical thirteen non-slot roles whichever intent produced the
design, so a bench fixture was obliged to carry a host network PHY, an
out-of-band management path and an NVMe endpoint, none of which is on any path
required to bring the processor out of reset. An intent that governs one axis
and is silent on the rest is not a modelled intent.

Measured, on the real designs rather than on a fixture: 17 required roles under
Production, 14 under EngineeringBringUp, difference exactly 3, with the memory
slot count unchanged at 4 on both. The two mechanisms compose rather than
double-count -- changing intent alone, topology held fixed, adds and removes no
slot.

THE BASIS IS TYPED BECAUSE TWO KINDS OF CLAIM MUST NOT BLUR. The channel-count
gate is backed by Ampere's own datasheet. Nothing in this classification has
that backing: that a fixture may omit host networking is this repository's
design judgement. RoleRequirementBasis therefore separates VendorProductionEnvelope,
which must name an authority, from RepositoryDesignPolicy, which must state its
reason. Every row landed here is the second kind, and a reader can tell without
trusting the author.

role_requirement is total over BoardComponentRole, so a new role cannot be added
without deciding its necessity here rather than inheriting whichever default a
wildcard named -- the total-at-the-level-examined failure DESIGN describes.
Intent is applied in exactly one place, so adding a DesignIntent breaks
requirement_applies_under loudly instead of silently resolving in fourteen arms.

A first draft classified DebugConnector as bring-up-only. That was wrong and is
recorded at the row rather than quietly fixed: DebugAccess is a named
BoardRequirementIdentity in realization.dag, so the requirements model already
recognises debug as a board requirement, and asserting a production Altra server
is not owed debug access is a claim no cited document supports. Correcting it
left RequiredOnlyUnderBringUp with no production occupant, which is a quiet arm
rather than a dead one -- and the distinction is settled by execution, not
opinion: w_red_the_bring_up_only_arm_is_reachable_and_discriminates plants one
and drives it both ways, because an arm whose red no input could produce would
be a decoration cited as coverage.

Four witnesses, each asserting a pairing rather than a single side: the three
features drop AND the count moves by exactly three in both directions; every
role that is not one of those three survives the bring-up gate, folded over the
whole coproduct so a future "minimisation" of the power-good supervisor fails
without anyone naming it; the unoccupied arm discriminates; and the slot count
is untouched.

Verified by execution: placement and the witness module compile with 0 blocking
errors, claim_executor --required-cited-symbol reports OK checked=390 exit 0,
and every claim above was run against the real modules and returned true.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HufBEsw4eqxSnEtBZ5re5a
@gunbai-bot

gunbai-bot Bot commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

HOLD — do not merge during the #9102 → #8282 window.

Computed against #8282's changed-file set: this PR intersects it on 7 file(s), including:

  • dag/extdeps/cpu_attachment/ilm4926.dag
  • dag/product/altra_motherboard/attachment_stack.dag
  • dag/product/altra_motherboard/placement.dag
  • dag/test/claim/altra_attachment_stack_witness_test.dag
  • dag/test/claim/altra_pcb_world_svg_witness_test.dag
  • dag/test/claim/altra_placement_witness_test.dag
    ... and 1 more

Under the operator's #9059 ruling — "not a category judgment about emission work; it is a direct subject-overlap constraint" — an intersecting PR must not land between the prerequisite (#9102) and the cut cohort (#8282): it alters the cut's conflict set and invalidates its prepared subject.

Nothing is wrong with this change and its approvals stand. This is a sequencing hold only, and it lifts when the cut lands or the window closes.

Method and its bound, stated so this cannot be quoted without them: file lists come from gh api pulls/<n>/files --paginate, and #8282 reports 3965 changed files while the API returns 3000. So the intersection count is a LOWER BOUND. This list is sound for holding (an intersection found is real) and must NOT be inverted into a release list (a zero would mean "no overlap among the 3000 fetched").

Context: 41 of 69 open non-draft PRs intersect #8282. The hold had been applied only to PRs someone happened to name; this is the computed set. Two of us have already been caught not applying it to our own PRs.

— sent from deep-ant-102

@gunbai-bot

gunbai-bot Bot commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

RELEASED — the namespace-cut hold on this PR is withdrawn

This supersedes the HOLD comment above. Normal merge policy resumes for this PR. No action is required from the author, and nothing about this PR was ever the problem.

Why the hold is withdrawn rather than amended

Operator ruling, 2026-08-24. Both the hold's predicate and its domain were invalid:

Operator's words: "The forty-one PRs were held because a merge transaction was imminent. That transaction no longer exists. The possibility of a future transaction is not a present hold."

What this does and does not mean

Does: the namespace-cut interval is no longer a constraint on this PR.

Does not: mean this PR must merge. Ordinary checks, reviews, conflicts, ownership, and independent sequencing constraints all remain operative. #8282 itself remains excluded and stays draft.

If this PR touches src/v1/04_infer.dag

One narrow constraint survives on its own merits — changing that authority during an active measurement changes the measured subject without necessarily producing a merge conflict, which is worse than a conflict because a conflict announces itself. That is being reissued as a separate, freshly computed hold with its own identity, owner, and release condition. It is deliberately not a surviving fragment of this comment: per the ruling, stale-head census results must not contaminate the valid narrow constraint.

Release record

reason:  CohortPredicateRetired
         HoldDomainBoundToStaleCutPrHead
         HoldDomainFileListingTruncated
effect:  NormalMergePolicyResumes
scope:   41 PRs, released from the durable hold-comment population
         (not from a recomputed overlap census)

@briansrls
briansrls merged commit 583e237 into main Aug 24, 2026
1 check passed
@briansrls
briansrls deleted the claude/lga4926-mobo-design-379oa6 branch August 24, 2026 21:58
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