Repository navigation
Mt. Collins channel mapping, re-transcribed from the rendered table geometry - #9883
Conversation
…STEP beside the vendor route, and the outstanding AZIF0222 retention-assembly request The socket-body drawing GAP-AZIFA072 rev 2 and its STEP were delivered by Lotes on 2026-08-22 and are held by the operator; the module cited only the vendor route, so a later reader had to repeat the correspondence to resolve the citation. Two typed HeldDocumentCopy rows now carry the held-copy locators beside the citation (a convenience beside the symbol, never the citation itself) without changing carriage: the bytes stay uncommitted. The delivery was socket-body-only across all five sheets, so the loading-mechanism and mounting layers stay FactUnresolved; the ask for the AZIF0222 ILM/backplate drawing went out on 2026-08-30 and is recorded as a VendorDocumentRequest so an outstanding request is distinguishable from one never sent. Both carriers land with executing consumers in the ilm4926 designation witness (20 witnesses green via claim_batch on BuildBuddy). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NkrXDxcXQ5rwpgicYt9x7Y
…rs (review 57622)
The Table 11 population sequences say WHICH connectors a configuration fills; they do not say which channel any connector is on, so no consumer could derive an active-channel count or a DIMMs-per-channel figure from them. Tables 12-13 carry that mapping and it is transcribed rather than inferred, because the printed MCU column order is not monotonic (MCU0..MCU3 then MCU7..MCU4) and reading it left-to-right as MCU0..MCU7 names four of the eight channels wrong. The two facts in a row are not equally attested, so mt_collins_channel_naming_basis separates them: the PAIRING is stated twice (Table 10 and Tables 12-13) and now checked a third way - under this pairing the Table 11 sequences touch 1, 2, 4 and 8 distinct channels per socket, which are exactly Table 10's supported channel counts; the CONTROLLER NUMBER rests on a header-to-row alignment read from the PDF text stream, and its unresolved field records the one thing this document does not settle. That unresolved question also corrects a claim already in this file: the header asserted that the odd connector of each pair is the first-DIMM-per-channel position. Under the pairing above the odd set does hit all eight channels one apiece - which is why 1DPC is the odd connectors - but which member of a pair upstream calls the first-DIMM position is not attested, so the header now states only the attested half and cites the unresolved field for the rest. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TcDddekju59A4jxouNif8J
…eview 58030) 163a146 integrated origin/main and left the held-copies paragraph written twice. main carries it once; this file is not part of this PR's subject at all, so it is restored to main's bytes exactly. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TcDddekju59A4jxouNif8J
… is wrong
Side-chat review 5073904617 refuted the reading these rows encode. Tables 12-13
print eight MCU headers spanning SIXTEEN connector columns, so each header covers
an ADJACENT pair (MCU0={1,2}, MCU1={3,4}, ... MCU7={16,15}). I linearized the
extracted text as two eight-item rows and zipped them vertically, which yields
{1,16}, {2,15}, ... - the wrong physical topology.
The in-document falsifier is decisive: Table 10's four-channel configuration
names MCU0/MCU1/MCU4/MCU5, and Table 11's matching population J1/J3/J9/J11 maps
to exactly that set under adjacent pairs, versus MCU0/2/4/6 under mine.
Two further defects of my own reasoning, both self-verifiable and both confirmed:
the "third independent check" I added to pairing_basis is non-discriminating.
The pairing {1,2},{3,4},...,{15,16} also makes the Table 11 populations touch
1, 2, 4 and 8 distinct channels, so cardinality establishes compatibility with
many pairings, never the exact one. The sentence claiming a different pairing
would miss the count is false.
the "unresolved" conflict between Table 11's odd connectors and a #1..#8
first-DIMM row was manufactured by the same misread, so the header sentence I
removed on that basis was correct as it stood and is restored here.
I am not substituting the reviewer's mapping, because I cannot read the source:
the guide arrived through a signed Customer Connect URL and is on no disk I can
reach, so adopting it would replace one unattested reading with another. The
mapping lands when the rendered table geometry can be read, not before.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TcDddekju59A4jxouNif8J
…eometry Replaces the reading withdrawn in 518904d. I fetched Issue 1.05 directly and read Tables 10-13 myself rather than adopting the correction from a relay, so every claim below is checked against the document. THE GEOMETRY DECIDES IT. In Tables 12-13 the eight MCU headers sit at a 57.6pt pitch over sixteen connector columns at a 28.8pt pitch, at a constant 6.6pt offset across all eight headers in both sockets. Each header therefore spans exactly two ADJACENT columns: MCU0 = J1+J2, MCU1 = J3+J4, ... MCU7 = J16+J15. The withdrawn rows paired the flattened text stream positionally into J1+J16, J2+J15, ... - a different physical topology. A merged-header table is not recoverable from a flattened stream; that is what produced the error. THE DISCRIMINATING CHECK REPRODUCES A STATED SET. Table 10's four-channel configuration names MCU0/MCU1/MCU4/MCU5. Table 11's matching population J1/J3/J9/J11 maps onto exactly that set under this mapping; the refuted reading gives MCU0/MCU2/MCU4/MCU6 and contradicts Table 10. The one-, two- and eight-channel widths reproduce likewise from the Tables 12-13 population marks. The earlier channel-COUNT argument is retracted in the file rather than dropped: pairing J1 with J2, J3 with J4 and so on yields the same 1/2/4/8 counts while disagreeing with every pair, so it was non-discriminating and established nothing. TWO FACTS, NOT ONE OVERLOADED ROW. MtCollinsChannelConnectorPair records channel membership with neutral table_left/table_right names, claiming nothing about installation order or slot priority. MtCollinsChannelPopulationRole carries which member is used at 1DPC and which is added at 2DPC, derived separately from the population rows. Keeping them apart is what stops a misread of pair geometry from manufacturing an installation-priority claim - the failure the withdrawn version made. The header claim is restored in the form the tables support: the 1DPC population uses the odd-numbered MEMBER of every pair, without calling it the "first DIMM" position, a label the guide never applies. The cited issue advances 1.00 -> 1.05 because that is the revision I read. Every Table 11 sequence was re-read against it and is unchanged, J32 omission included, so this re-cites identical content rather than silently swapping revisions; the digest of the exact bytes read is recorded. The document is marked proprietary and confidential and is deliberately NOT committed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TcDddekju59A4jxouNif8J
briansrls
left a comment
There was a problem hiding this comment.
REQUEST_CHANGES — exact head 8ea1432ab20827c13401add0c51fb20da9c31d06.
The load-bearing correction is accepted. Both sockets now use the adjacent connector pairs from the rendered geometry; pair membership is neutral (table_left_connector / table_right_connector); 1DPC/2DPC population role is a separate fact; the odd-member header claim is restored without inventing a “first DIMM” label; and the old cardinality argument is explicitly retracted in favor of the exact MCU-set discriminator.
The missing page image is not a merge blocker. The prior bar allowed rendered geometry or an equivalent exact-set cross-check. This head has both the measured geometry and the independent J1/J3/J9/J11 -> MCU0/MCU1/MCU4/MCU5 check, bound to an exact Issue 1.05 filename and SHA-256. Requiring a persisted page crop would reproduce confidential source content without materially strengthening the identity binding. Preserve access to the source bytes where the operator is entitled to hold them; no image belongs in this PR.
Two narrow source-honesty corrections remain.
P1 — the one-revision boundary still has an Issue 1.00 residue
The unchanged annotation immediately above mt_collins_population_32_dimms_as_printed still says:
The 32-DIMM row AS PRINTED in Issue 1.00
But the module now says it cites one issue, Issue 1.05, and that every Table 11 row was re-read there. Since this row is also printed identically in 1.05, name the cited revision there — e.g. AS PRINTED in Issue 1.05 (unchanged from Issue 1.00) — or simply say Issue 1.05. As written, the file still presents this row as answering from the superseded revision.
In the same small edit, replace matches byte-for-byte at the connector-list grain with matches exactly at connector-list grain unless there was genuinely a byte-level comparison of both revision artifacts. Connector-list equality is the claimed and sufficient fact; “byte-for-byte” overstates a normalized-grain comparison.
P1 — Table 10 support and Table 11’s enumerated population sequence are still conflated
Your direct Table 10 extraction contains two supported one-channel sets, {MCU0} and {MCU4}. Table 11’s two-DIMM sequence realizes the {MCU0} choice per socket, not both. The unchanged annotation nevertheless says the Table 11 sequences are “the only supported shapes,” while the new basis/body says the other supported widths reproduce and names only {MCU0} at width one.
Remove the exhaustion claim, or explicitly distinguish Table 10-supported controller sets from the Table 11 population sequences transcribed in this module. The one-channel cross-check should say it reproduces the MCU0 one-channel row, not imply that it exhausts both one-channel configurations. I am not requiring a full Table 10 configuration model in this PR; only that the module not turn one listed sequence into an exclusivity claim contradicted by the table now read directly.
After those corrections, exact-head green CI remains required. No further topology or evidence-artifact change is requested.
…ble 10 (review 5074009059) Two source-description defects, both wording, no topology change. COMPLETE THE REVISION CUTOVER. The 32-DIMM annotation still said "AS PRINTED in Issue 1.00" while the module now cites 1.05, so one row went on answering from the revision the module says it superseded; it now names 1.05 and records that the row is unchanged from 1.00. And the revision basis claimed the sequences match "byte-for-byte", which overstates what was done: the established fact is equality of the normalized connector sequences, not a comparison of the two artifacts' bytes. It now says so explicitly. DO NOT LET TABLE 11'S ROSTER SPEAK FOR TABLE 10'S SUPPORT. The carried Table 10 comment called the transcribed sequences "the only supported shapes". Table 10 in fact carries TWO distinct one-channel configurations - MCU0 alone and MCU4 alone - and a six-channel configuration, and Table 11 gives a connector sequence for none of them. A width absent from these rows is unenumerated by Table 11, not unsupported, and the file now says exactly that. The same overstatement rode in the mapping basis, which claimed the join holds at "every other supported width" while citing only widths Tables 12-13 actually mark. It is now scoped to the MCU0 one-channel, two-channel, four-channel and eight-channel rows, and explicitly disclaims Table 10's MCU4-alone and six-channel rows. Compile clean, advisory count unchanged at the 103 baseline. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TcDddekju59A4jxouNif8J
|
Both corrections from review 5074009059 applied in 649df7f. Verified each against the file first; both were real. No topology change — the mapping, the neutral pair names, the separated population role and the retracted cardinality check are all untouched. 1. Issue 1.05 cutover completedThe 32-DIMM annotation still read "AS PRINTED in Issue 1.00" while the module had moved to 1.05, so one row went on answering from the revision the module says it superseded. It now names Issue 1.05 and records that the row is unchanged from 1.00.
2. Table 11's roster no longer speaks for Table 10's supportThis one I could confirm directly from my own extraction, and you're right that it was too strong. Table 10 decodes to two distinct one-channel configurations — MCU0 alone and MCU4 alone — plus a six-channel configuration, and Table 11 supplies a connector sequence for none of them. Calling the transcribed rows "the only supported shapes" turned an enumeration into an exhaustion claim. The comment now describes them as the sequences enumerated by Table 11, and states the distinction that matters to a consumer: a width absent from these rows is unenumerated by Table 11, not unsupported. The same overstatement had ridden into the mapping basis, which claimed the join holds at "every other supported width" while in fact citing only widths Tables 12-13 mark. It is now scoped to the MCU0 one-channel, two-channel, four-channel and eight-channel rows, and explicitly disclaims Table 10's MCU4-alone and six-channel rows. That was the same failure as the retracted cardinality check in miniature — a claim quantified over a population wider than the evidence covered — so I'd rather it be narrow and checkable. Compile clean, advisory count unchanged at the 103 baseline. CI is running on the new exact head Noted and not acted on, per your ruling: no page image, no additional evidence artifact, and — sent from snappy-crab-469 |
briansrls
left a comment
There was a problem hiding this comment.
REQUEST_CHANGES — exact head 649df7fc3788dbeec933174a5b0b2459dff85646.
The prior re-review bar is substantively closed: the Issue 1.05 cutover is complete, “byte-for-byte” is gone, the 32-DIMM annotation now names 1.05, the mapping basis is scoped to the MCU0 one-channel/two-channel/four-channel/eight-channel rows, the MCU4-alone and six-channel rows are explicitly disclaimed, and exact-head workflow run 33473284820 is green across fabric-evidence, required-witnesses-build, required-witnesses-floor, rust-unit-tests, and the aggregate witnesses job; emit-copy-qualification-battery is skipped as expected. No topology or model blocker remains.
One source-honesty sentence introduced by the repair is still false or, at best, materially ambiguous:
Table 10 carries two distinct one-channel configurations (MCU0 alone and MCU4 alone) and a six-channel configuration, and Table 11 gives a connector sequence for neither.
Table 11 does give the connector sequence for the MCU0-alone one-channel configuration: its two-DIMM row is J1/J17, one MCU0 connector per socket. What Table 11 does not enumerate is the MCU4-alone one-channel alternative and the six-channel configuration. The later mapping-basis paragraph says this correctly, so the file currently contradicts itself at the exact distinction this commit was meant to repair.
Replace that sentence with an unambiguous statement such as:
Table 10 also carries an MCU4-alone one-channel configuration and a six-channel configuration, and Table 11 gives a connector sequence for neither; its two-DIMM row enumerates the MCU0-alone one-channel configuration.
or equivalent. Preserve every other change. Then bind green CI to the resulting exact head. This is the sole remaining blocker; no PR-body, topology, evidence-artifact, or model change is requested.
…review 5074713169) The paragraph I added in 649df7f said Table 10 carries two distinct one-channel configurations, MCU0 alone and MCU4 alone, "and Table 11 gives a connector sequence for neither". That is false for the first of the pair. Table 11's two-DIMM row is [1, 17] - J1 on socket 0 and J17 on socket 1, which Tables 12-13 map to MCU0 on each socket. That row IS the MCU0-alone one-channel sequence. What Table 11 does not enumerate is the MCU4-alone alternative and the six-channel configuration. The discriminating_check below already stated the distinction that way, so the module contradicted itself at exactly the point the previous commit set out to repair. The sentence now names the two genuinely unenumerated configurations and says which configuration the two-DIMM row does enumerate. Wording only: no row, no topology, no model value changed.
briansrls
left a comment
There was a problem hiding this comment.
CODE ACCEPTED / MERGE HOLD — exact head 49ffb69d4dbc0fc61250bf3335c6f91a780b3b23.
The sole source-honesty blocker from review 5074713169 is closed. The one-commit delta changes only the explanatory paragraph: it now says Table 11's two-DIMM row enumerates the MCU0-alone one-channel configuration, while the MCU4-alone alternative and the six-channel configuration are the two Table 10 configurations not enumerated there. That agrees with the connector rows and with discriminating_check; the internal contradiction is gone. The remainder is line wrapping. No topology, connector list, model value, PR body, or evidence artifact changed.
No further code change is requested. The accepted topology, neutral pair membership, separate population role, Issue 1.05 authority boundary, exact-set discriminator, cardinality retraction, and Nat ruling all remain closed.
Merge approval is withheld only because exact-head workflow run 33479068384 is still in_progress. At this check, fabric-evidence, required-witnesses-build, required-witnesses-floor, and rust-unit-tests were running with no failed step reported; emit-copy-qualification-battery was skipped as expected. Once that same run is fully green, this head is eligible for approval without another commit.
…w 58089)
The role rows were a parallel authority. mt_collins_*_population_roles wrote out
all 16 {socket, MCU} -> {connector, connector} mappings as literals, restating a
relation already carried by mt_collins_channel_connector_pairs and Table 11's
16-DIMM population row. Nothing tied the three together, so any one could drift
from the other two while every consumer still typechecked - DESIGN §2's
duplicated work at the meaning layer and §3's second name for one fact, and the
block's own comment already called the roles "DERIVED FROM THE POPULATION ROWS"
while the file transcribed them by hand.
They are now actually derived. The 16-DIMM row IS the one-DIMM-per-channel
population, so the role of a pair is a join: whichever member appears in that
row is connector_used_at_one_dpc, the other is
additional_connector_at_two_dpc. The join is total, not defaulted - exactly one
member of every pair appears in the 16-DIMM row, so the else-arm is the
complementary case.
The derivation reproduces all 16 deleted rows exactly, including the four
descending pairs per socket where the roles invert relative to the printed
left-right order (MCU7 socket 0: printed J16/J15, role 15 then 16). The two
socket-scoped role lists are gone; mt_collins_channel_population_roles now folds
the pair list. No external consumer referenced either deleted list.
The surrounding prose is corrected with it: the basis is Table 11's 16-DIMM row,
not the Tables 12-13 marks, and the note now says what the join is and why the
literal form was wrong.
Compile over the module closure: 0 blocking errors, 103 advisories, unchanged
from before the edit.
briansrls
left a comment
There was a problem hiding this comment.
REQUEST_CHANGES — exact head 5a3b35e4e4d3d60f9b4e459849abe3c5c61a9358.
The second reviewer’s duplication finding is correct, and the principal repair is accepted: the two socket-scoped literal role rosters are gone; mt_collins_channel_population_roles now derives from the channel pairs plus Table 11’s 16-DIMM population; the descending pairs reproduce the prior role order; and no topology/source row changed.
One structural blocker remains in the new derivation.
P0 — the claimed XOR totality is not encoded; the else arm is still a default
mt_collins_population_role_of_pair asks only whether table_left_connector appears in the 16-DIMM row:
if left_is_one_dpc {
used = left; additional = right
} else {
used = right; additional = left
}
That is correct for today’s roster because you externally checked that exactly one member of each current pair appears. It is not a total join over the function’s writable input domain, and the code does not establish the invariant its comment relies on.
Two counterexamples remain authorable and silently produce a role:
- neither member appears — e.g. a pair
{2,4}returnsconnector_used_at_one_dpc = 4, although 4 is absent from the 16-DIMM row; - both members appear — e.g. a pair
{1,3}returnsadditional_connector_at_two_dpc = 3, although 3 is already present at 1DPC.
A future drift in either source relation therefore still typechecks and is absorbed into a plausible role. An arbitrary caller can also hand the general helper either pair today. The statement “the else-arm is the complementary case rather than a default” is true of the current data population, but false of the modeled function.
Required close: inspect membership of both pair members and construct a MtCollinsChannelPopulationRole only on the two XOR cases. both and neither must produce an explicit refusal/standing (or otherwise make a bare role unconstructible), and the aggregate must not expose a normal List<MtCollinsChannelPopulationRole> when any pair fails that partition. A global standing over the whole pair population or a per-pair coproduct is fine; do not repair this with another hand-authored 16-row assertion.
Add discriminating evidence for both invalid cases plus the positive current population: {2,4} refuses, {1,3} refuses, and the actual 16 pairs derive exactly the accepted 16 roles. This is the executable check for the exact drift class this commit exists to remove.
All prior rulings remain closed: corrected adjacent topology, neutral pair ordering, separate population-role meaning, Issue 1.05 authority/digest, exact-set discriminator, cardinality retraction, Table 10/Table 11 scope, no page-image requirement, and Nat for connector ordinals. Exact-head workflow run 33480671869 is currently in progress, but CI cannot close this source blocker.
…(review 5a3b35e follow-up) The join I added in 5a3b35e tested only the LEFT member of a pair against the 16-DIMM row and let the else-arm carry every other case. That arm absorbed two invalid states rather than refusing them - DESIGN section 5's absorbing fallback, the failure arm that widens instead of stopping: {J2, J4} neither member is in the 16-DIMM row, yet J4 came back as the 1DPC connector. {J1, J3} both members are in it, yet J3 came back as "additional at 2DPC" while already populated at 1DPC. Both are authorable - they need only a drift in the pair rows or the 16-DIMM row, and the general helper accepts any pair a caller hands it - so a future drift typechecked and produced a plausible but false role. The comment claiming the else-arm was "the complementary case rather than a default" was true of today's manually checked population, not of the function. That is the same class of defect as the one this file already recorded: a claim the structure does not carry. BOTH members are now inspected and a role is CONSTRUCTED only on the two XOR cases. The other two return PopulationRoleRefused carrying the located pair and a typed cause, NeitherMemberAtOneDpc or BothMembersAtOneDpc. The aggregate refuses as a whole. A list of roles beside a list of refusals would let a consumer read fifteen good roles and never learn the sixteenth pair failed the partition - the same widening one level up - so the standing is a coproduct, PopulationRolesResolved or PopulationRolesRefused, and one bad pair withholds every role. EVIDENCE, green by execution rather than by compiling. Five witnesses in test/claim/mt_collins_population_role_witness_test.dag, each run through `gunbc run --entry ... --function ...`, all returning true: w_a_pair_with_no_one_dpc_member_refuses {2,4} refuses, NEITHER cause w_a_pair_with_two_one_dpc_members_refuses {1,3} refuses, BOTH cause w_one_bad_pair_withholds_every_role 17th bad pair -> 0 roles w_the_source_pairs_all_resolve positive control, 16 roles w_a_descending_pair_inverts_against_printed_order MCU7 socket 0: 15 then 16 The two refusal witnesses assert the SPECIFIC cause, so reaching the right verdict from the wrong reading still reds. The positive control is what stops the two reds from being satisfied by a function that refuses everything. And the probes were shown to flip rather than being constant-true: expecting the wrong cause on {2,4} returns false, and expecting the printed left member on the descending pair returns false. The witness file was restored byte-identical afterwards. No hand-authored 16-row assertion is restored; the roles remain derived. Compile over the witness closure: 0 blocking errors, 103 advisories, unchanged.
briansrls
left a comment
There was a problem hiding this comment.
APPROVE — exact head ac4bcd10d3db795522f7d71aac803a0d7f861bfa.
The remaining P0 is closed.
mt_collins_population_role_of_pair now reads membership of both pair members and constructs a normal role only in the two XOR cases. BothPairMembersAppearAtOneDpc and NeitherPairMemberAppearsAtOneDpc are explicit refusal arms, so neither invalid population is absorbed by a plausible else result. At aggregate grain, any refusal yields PopulationRolesUnestablished; a normal role list is exposed only when every pair resolves. The hand-authored 16-row parallel authority has not returned.
The discriminating evidence covers the exact bar: {2,4} refuses as neither; {1,3} refuses as both; one bad pair withholds the whole role population; the actual 16 source pairs resolve; and the descending MCU7 pair derives J15-at-1DPC/J16-additional despite its printed J16/J15 order. The required-witnesses-floor log for exact-head run 33484732279 records all five witness identities as planned-and-passed / planned_as_changed_witness / passed, so this is enrolled acceptance-path evidence rather than a local-only demonstration.
Run 33484732279 completed successfully on this exact SHA: fabric-evidence, required-witnesses-build, required-witnesses-floor, rust-unit-tests, and aggregate witnesses all succeeded; emit-copy-qualification-battery was skipped as expected. Nothing is pending or cancelled.
All earlier rulings remain closed: corrected adjacent connector topology, neutral pair ordering, separately derived population role, Issue 1.05 authority and digest, exact-set discriminator, retracted cardinality argument, Table 10/Table 11 scope, no page-image requirement, and Nat for connector ordinals.
Squash-merge is authorized at this exact head. Any subsequent head movement invalidates this approval.
|
POST-MERGE RECORD CORRECTION — landed as My approval review The squash commit message also concatenates the superseded intermediate commit bodies. In particular, it retains the earlier assertion that the role join was total because the No module follow-up or reopen is required. |
…ge, an honest status arm, split provenance, and an executing control P0-1 FRONTIER MEMBERSHIP, and it was wider than reviewed. The new guide module declared extdeps_model_scope but was in neither scope_carrier_paths nor the frozen legacy manifest. Checking the roster properly showed memory_population.dag was in NEITHER either, since it landed 2026-08-29, while declaring the scope the whole time - it survived #9883's four review rounds because the placement gate's actuator is not running. A 39-file compile closure proves reachability, not membership, which is the same distinction the aliases taught me one commit ago. Both are carriers now; all four Mt. Collins modules satisfy the frontier law. P0-2 memory_population_source_document re-authored the guide's title, issue, date, filename and digest as a free string beside the module that owns them, with no consumer. Replaced by MtCollinsMemoryPopulationCoverage: a DeclarationRef to the canonical document plus table/page rows. The coverage was the part that was not redundant, so it survives as rows rather than prose. P0-3 THE MARKING WAS AN INFERENCE, so I read the artifact instead. Its full text is 1304 characters, a one-page specifications sheet from Model to Dimensions, containing no proprietary, confidential, copyright, trademark, reserved or licence token and no document or issue number; metadata records Word "Print To PDF", 2022-10-17. It is not Ampere's first-party Issue 0.50 brief. DocumentPublicationStatus had no arm for a public document that states nothing, so an author facing this artifact had to invent a marking or a licence - which is exactly what produced marking "no licence granted". The gap in the state space produced the false row, so the repair is the arm: PubliclyPublishedWithoutStatedTerms { absence_basis }. It carries a basis rather than being nullary because "states no terms" is a claim about a document that was READ, not a default for one that was not. P1-1 PUBLICATION STATUS AND READ PROVENANCE SPLIT. The publisher's act stays on the document module; gunbc's fetch, status, byte count and digest comparison move to gunbc.specification_citation_read_provenance. That module's Mt. Collins brief receipt claimed the text was UNREAD and that no interior fact was modelled, while platform.dag carries rows it says were read from that brief; corrected with the superseded claim named, not overwritten. New arm DocumentLocatorFetchedAndTextIngested records this repository's own direct fetch of a live publisher locator - the three existing arms all describe someone else obtaining the text. P1-2 AN EXECUTING CONTROL BOUND TO THE EXACT RELATION. The new witness reds if either fact module drops the guide citation, if it is swapped, or if the guide is paired with an unrelated public status: membership runs over external_model_scope_citations, the relation a fold traverses, and the status assertion pins the arm and the literal marking. Paired negative in the same test - Customer Connect refuses while the guide admits. Non-vacuity control - the membership predicate must be false for a probe authority no scope cites. All five green BY EXECUTION through gunbc run, not by compiling. P1-3 PR body refreshed to the design actually present, and the census is no longer quoted as the coverage denominator: an anchor may name an API, SDK, repository or product page rather than a fact-attesting document, so the real denominator is the derived population of document-bearing fact-source edges and it is not yet known.
…ccess-gated reading (#9974) * Lotes AZIFA072: record the operator's held copies of the drawing and STEP beside the vendor route, and the outstanding AZIF0222 retention-assembly request The socket-body drawing GAP-AZIFA072 rev 2 and its STEP were delivered by Lotes on 2026-08-22 and are held by the operator; the module cited only the vendor route, so a later reader had to repeat the correspondence to resolve the citation. Two typed HeldDocumentCopy rows now carry the held-copy locators beside the citation (a convenience beside the symbol, never the citation itself) without changing carriage: the bytes stay uncommitted. The delivery was socket-body-only across all five sheets, so the loading-mechanism and mounting layers stay FactUnresolved; the ask for the AZIF0222 ILM/backplate drawing went out on 2026-08-30 and is recorded as a VendorDocumentRequest so an outstanding request is distinguishable from one never sent. Both carriers land with executing consumers in the ilm4926 designation witness (20 witnesses green via claim_batch on BuildBuddy). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NkrXDxcXQ5rwpgicYt9x7Y * README: point at azifa072_held_copies instead of repeating its locators (review 57622) * Mt. Collins: per-socket channel-to-connector mapping from Tables 12-13 The Table 11 population sequences say WHICH connectors a configuration fills; they do not say which channel any connector is on, so no consumer could derive an active-channel count or a DIMMs-per-channel figure from them. Tables 12-13 carry that mapping and it is transcribed rather than inferred, because the printed MCU column order is not monotonic (MCU0..MCU3 then MCU7..MCU4) and reading it left-to-right as MCU0..MCU7 names four of the eight channels wrong. The two facts in a row are not equally attested, so mt_collins_channel_naming_basis separates them: the PAIRING is stated twice (Table 10 and Tables 12-13) and now checked a third way - under this pairing the Table 11 sequences touch 1, 2, 4 and 8 distinct channels per socket, which are exactly Table 10's supported channel counts; the CONTROLLER NUMBER rests on a header-to-row alignment read from the PDF text stream, and its unresolved field records the one thing this document does not settle. That unresolved question also corrects a claim already in this file: the header asserted that the odd connector of each pair is the first-DIMM-per-channel position. Under the pairing above the odd set does hit all eight channels one apiece - which is why 1DPC is the odd connectors - but which member of a pair upstream calls the first-DIMM position is not attested, so the header now states only the attested half and cites the unresolved field for the rest. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TcDddekju59A4jxouNif8J * Drop a paragraph my merge commit duplicated in the AZIFA072 README (review 58030) 163a146 integrated origin/main and left the held-copies paragraph written twice. main carries it once; this file is not part of this PR's subject at all, so it is restored to main's bytes exactly. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TcDddekju59A4jxouNif8J * Withdraw the Mt. Collins channel-to-connector rows: the transcription is wrong Side-chat review 5073904617 refuted the reading these rows encode. Tables 12-13 print eight MCU headers spanning SIXTEEN connector columns, so each header covers an ADJACENT pair (MCU0={1,2}, MCU1={3,4}, ... MCU7={16,15}). I linearized the extracted text as two eight-item rows and zipped them vertically, which yields {1,16}, {2,15}, ... - the wrong physical topology. The in-document falsifier is decisive: Table 10's four-channel configuration names MCU0/MCU1/MCU4/MCU5, and Table 11's matching population J1/J3/J9/J11 maps to exactly that set under adjacent pairs, versus MCU0/2/4/6 under mine. Two further defects of my own reasoning, both self-verifiable and both confirmed: the "third independent check" I added to pairing_basis is non-discriminating. The pairing {1,2},{3,4},...,{15,16} also makes the Table 11 populations touch 1, 2, 4 and 8 distinct channels, so cardinality establishes compatibility with many pairings, never the exact one. The sentence claiming a different pairing would miss the count is false. the "unresolved" conflict between Table 11's odd connectors and a #1..#8 first-DIMM row was manufactured by the same misread, so the header sentence I removed on that basis was correct as it stood and is restored here. I am not substituting the reviewer's mapping, because I cannot read the source: the guide arrived through a signed Customer Connect URL and is on no disk I can reach, so adopting it would replace one unattested reading with another. The mapping lands when the rendered table geometry can be read, not before. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TcDddekju59A4jxouNif8J * Mt. Collins channel mapping, re-transcribed from the rendered table geometry Replaces the reading withdrawn in 518904d. I fetched Issue 1.05 directly and read Tables 10-13 myself rather than adopting the correction from a relay, so every claim below is checked against the document. THE GEOMETRY DECIDES IT. In Tables 12-13 the eight MCU headers sit at a 57.6pt pitch over sixteen connector columns at a 28.8pt pitch, at a constant 6.6pt offset across all eight headers in both sockets. Each header therefore spans exactly two ADJACENT columns: MCU0 = J1+J2, MCU1 = J3+J4, ... MCU7 = J16+J15. The withdrawn rows paired the flattened text stream positionally into J1+J16, J2+J15, ... - a different physical topology. A merged-header table is not recoverable from a flattened stream; that is what produced the error. THE DISCRIMINATING CHECK REPRODUCES A STATED SET. Table 10's four-channel configuration names MCU0/MCU1/MCU4/MCU5. Table 11's matching population J1/J3/J9/J11 maps onto exactly that set under this mapping; the refuted reading gives MCU0/MCU2/MCU4/MCU6 and contradicts Table 10. The one-, two- and eight-channel widths reproduce likewise from the Tables 12-13 population marks. The earlier channel-COUNT argument is retracted in the file rather than dropped: pairing J1 with J2, J3 with J4 and so on yields the same 1/2/4/8 counts while disagreeing with every pair, so it was non-discriminating and established nothing. TWO FACTS, NOT ONE OVERLOADED ROW. MtCollinsChannelConnectorPair records channel membership with neutral table_left/table_right names, claiming nothing about installation order or slot priority. MtCollinsChannelPopulationRole carries which member is used at 1DPC and which is added at 2DPC, derived separately from the population rows. Keeping them apart is what stops a misread of pair geometry from manufacturing an installation-priority claim - the failure the withdrawn version made. The header claim is restored in the form the tables support: the 1DPC population uses the odd-numbered MEMBER of every pair, without calling it the "first DIMM" position, a label the guide never applies. The cited issue advances 1.00 -> 1.05 because that is the revision I read. Every Table 11 sequence was re-read against it and is unchanged, J32 omission included, so this re-cites identical content rather than silently swapping revisions; the digest of the exact bytes read is recorded. The document is marked proprietary and confidential and is deliberately NOT committed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TcDddekju59A4jxouNif8J * Finish the 1.05 cutover and stop Table 11's roster standing in for Table 10 (review 5074009059) Two source-description defects, both wording, no topology change. COMPLETE THE REVISION CUTOVER. The 32-DIMM annotation still said "AS PRINTED in Issue 1.00" while the module now cites 1.05, so one row went on answering from the revision the module says it superseded; it now names 1.05 and records that the row is unchanged from 1.00. And the revision basis claimed the sequences match "byte-for-byte", which overstates what was done: the established fact is equality of the normalized connector sequences, not a comparison of the two artifacts' bytes. It now says so explicitly. DO NOT LET TABLE 11'S ROSTER SPEAK FOR TABLE 10'S SUPPORT. The carried Table 10 comment called the transcribed sequences "the only supported shapes". Table 10 in fact carries TWO distinct one-channel configurations - MCU0 alone and MCU4 alone - and a six-channel configuration, and Table 11 gives a connector sequence for none of them. A width absent from these rows is unenumerated by Table 11, not unsupported, and the file now says exactly that. The same overstatement rode in the mapping basis, which claimed the join holds at "every other supported width" while citing only widths Tables 12-13 actually mark. It is now scoped to the MCU0 one-channel, two-channel, four-channel and eight-channel rows, and explicitly disclaims Table 10's MCU4-alone and six-channel rows. Compile clean, advisory count unchanged at the 103 baseline. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TcDddekju59A4jxouNif8J * Stop claiming Table 11 enumerates neither one-channel configuration (review 5074713169) The paragraph I added in 649df7f said Table 10 carries two distinct one-channel configurations, MCU0 alone and MCU4 alone, "and Table 11 gives a connector sequence for neither". That is false for the first of the pair. Table 11's two-DIMM row is [1, 17] - J1 on socket 0 and J17 on socket 1, which Tables 12-13 map to MCU0 on each socket. That row IS the MCU0-alone one-channel sequence. What Table 11 does not enumerate is the MCU4-alone alternative and the six-channel configuration. The discriminating_check below already stated the distinction that way, so the module contradicted itself at exactly the point the previous commit set out to repair. The sentence now names the two genuinely unenumerated configurations and says which configuration the two-DIMM row does enumerate. Wording only: no row, no topology, no model value changed. * Derive the population roles from the pairs and the 16-DIMM row (review 58089) The role rows were a parallel authority. mt_collins_*_population_roles wrote out all 16 {socket, MCU} -> {connector, connector} mappings as literals, restating a relation already carried by mt_collins_channel_connector_pairs and Table 11's 16-DIMM population row. Nothing tied the three together, so any one could drift from the other two while every consumer still typechecked - DESIGN §2's duplicated work at the meaning layer and §3's second name for one fact, and the block's own comment already called the roles "DERIVED FROM THE POPULATION ROWS" while the file transcribed them by hand. They are now actually derived. The 16-DIMM row IS the one-DIMM-per-channel population, so the role of a pair is a join: whichever member appears in that row is connector_used_at_one_dpc, the other is additional_connector_at_two_dpc. The join is total, not defaulted - exactly one member of every pair appears in the 16-DIMM row, so the else-arm is the complementary case. The derivation reproduces all 16 deleted rows exactly, including the four descending pairs per socket where the roles invert relative to the printed left-right order (MCU7 socket 0: printed J16/J15, role 15 then 16). The two socket-scoped role lists are gone; mt_collins_channel_population_roles now folds the pair list. No external consumer referenced either deleted list. The surrounding prose is corrected with it: the basis is Table 11's 16-DIMM row, not the Tables 12-13 marks, and the note now says what the join is and why the literal form was wrong. Compile over the module closure: 0 blocking errors, 103 advisories, unchanged from before the edit. * Refuse the non-XOR pairs instead of absorbing them into the else-arm (review 5a3b35e follow-up) The join I added in 5a3b35e tested only the LEFT member of a pair against the 16-DIMM row and let the else-arm carry every other case. That arm absorbed two invalid states rather than refusing them - DESIGN section 5's absorbing fallback, the failure arm that widens instead of stopping: {J2, J4} neither member is in the 16-DIMM row, yet J4 came back as the 1DPC connector. {J1, J3} both members are in it, yet J3 came back as "additional at 2DPC" while already populated at 1DPC. Both are authorable - they need only a drift in the pair rows or the 16-DIMM row, and the general helper accepts any pair a caller hands it - so a future drift typechecked and produced a plausible but false role. The comment claiming the else-arm was "the complementary case rather than a default" was true of today's manually checked population, not of the function. That is the same class of defect as the one this file already recorded: a claim the structure does not carry. BOTH members are now inspected and a role is CONSTRUCTED only on the two XOR cases. The other two return PopulationRoleRefused carrying the located pair and a typed cause, NeitherMemberAtOneDpc or BothMembersAtOneDpc. The aggregate refuses as a whole. A list of roles beside a list of refusals would let a consumer read fifteen good roles and never learn the sixteenth pair failed the partition - the same widening one level up - so the standing is a coproduct, PopulationRolesResolved or PopulationRolesRefused, and one bad pair withholds every role. EVIDENCE, green by execution rather than by compiling. Five witnesses in test/claim/mt_collins_population_role_witness_test.dag, each run through `gunbc run --entry ... --function ...`, all returning true: w_a_pair_with_no_one_dpc_member_refuses {2,4} refuses, NEITHER cause w_a_pair_with_two_one_dpc_members_refuses {1,3} refuses, BOTH cause w_one_bad_pair_withholds_every_role 17th bad pair -> 0 roles w_the_source_pairs_all_resolve positive control, 16 roles w_a_descending_pair_inverts_against_printed_order MCU7 socket 0: 15 then 16 The two refusal witnesses assert the SPECIFIC cause, so reaching the right verdict from the wrong reading still reds. The positive control is what stops the two reds from being satisfied by a function that refuses everything. And the probes were shown to flip rather than being constant-true: expecting the wrong cause on {2,4} returns false, and expecting the printed left member on the descending pair returns false. The witness file was restored byte-identical afterwards. No hand-authored 16-row assertion is restored; the roles remain derived. Compile over the witness closure: 0 blocking errors, 103 advisories, unchanged. * Declare the Getting Started Guide's publication status; retract the access-gated reading I held the motherboard lane on a premise that was wrong, and the fix is to make the model carry the fact rather than leave it to prose. WHAT WAS WRONG. memory_population.dag said its tables were "fetched via the Customer Connect technical-documents listing", and subject.dag routed all Mt. Collins engineering facts through EngineeringFactsUnderNda. Read together those say the guide is access-gated, which under gunbc.upstream_document_carriage would bar its facts from this public repository. Meanwhile platform.dag had been saying, since 2026-08-18, "the publicly downloadable Mt. Collins DVT/PVT/MP getting-started guide". One document, two contradictory access classifications, three files apart - a meaning fork, and I ranked the wrong side of it. THE DISCRIMINATING OBSERVATION. Fetching the guide's direct locator with no credentials - no Customer Connect session, no cookie - returns HTTP 200, 9409569 bytes of application/pdf whose SHA-256 is 1c41b4f088fa9c8b760d21d57ae93b0d1a68ee67a740d4eb7ac893753fc580b3, equal to the digest this module already cited. So the retrieved bytes are the same Issue 1.05 document the tables were read from, and it is publicly published. The axis the carriage ruling turns on is public availability, so these facts are carriable. Every page is footed "Ampere Computing Proprietary and Confidential", document AMP 2021-00511, and per extdeps.publication that marking is recorded and decides nothing - the same reading extdeps.cpu.ampere_altra_package already applies to the Altra datasheet. WHAT CHANGED. subject.dag declares the guide as its own document: mt_collins_gsg_authority carries the direct public locator, and mt_collins_gsg_publication_status is PubliclyPublishedWithRestrictiveMarking. The NDA route is split rather than deleted: mt_collins_design_package_route still covers the reference-BOARD collateral - design package, UEFI, OpenBMC and CPLD source - which is the population ampere_altra_package names as barred and which this repository has never read. One row answering for two documents was the fork. memory_population.dag retracts the access-gated reading in place instead of quietly editing it, because the retraction is the part a later reader needs: it conflated how one author obtained a file with whether the file is public, and those are different facts. It now binds the attesting document and its status as declarations rather than describing them in prose. WHY THE DECLARATION MATTERS BEYOND THIS MODULE. gunbc.upstream_document_carriage reads a status it does not own. A module that declares none never enters the rule's domain at all, so it is not refused - it is never asked. That is how these facts reached the public tree with the carriage question unasked through four rounds of review. This PR puts one module family inside the domain. It does not close the class: 2 of 670 anchor-bearing extdeps modules declare a status, and no fold requires one. Compile over the module closure: 0 blocking errors, no advisory in either edited file. * Bring platform.dag inside the carriage rule's domain too platform.dag states its rows are read from BOTH the 2022 V2 product brief and the getting started guide, but declared a status for neither. Under the model the previous commit adds, that leaves a second module attesting from the guide while sitting outside gunbc.upstream_document_carriage entirely - not refused, never asked, which is the exact defect this branch exists to close. Shipping the argument and an instance of its counterexample in one diff would have been the inert-lens shape: a rule stated, and a module beside it that the rule cannot see. It now declares both attesting documents, binding mt_collins_gsg_authority and mt_collins_gsg_publication_status from the subject module rather than minting a second status for one document. Its prose carried the same over-broad reading being retracted next door: "the NDA route on the subject row still gates engineering-grade facts". The NDA route gates the reference-board DESIGN PACKAGE, not this guide, so the sentence now names mt_collins_design_package_route for the barred collateral and mt_collins_gsg_publication_status for the guide's own status. All three modules in the family now reach a publication status. Compile over the platform.dag closure: 0 blocking errors, no advisory in any edited file. * Cite the guide structurally and give it its own document module (review 5084131542) Three P0s, all correct, and the first is the one worth naming. THE ALIASES WERE HOLLOW. I added platform_second_attesting_document and memory_population_document_status and wrote in the commit message that they are "what keeps this module inside the rule". They are not. The structural citation relation is ExternalModelScope.first_citation + further_citations, and both scopes still read further_citations: [], so a source-edge fold walking the real relation would derive ZERO getting-started-guide citations from either module. A declaration with a suggestive name sitting BESIDE the relation is not on it. That is the same defect I retracted two commits earlier - a claim the structure does not carry - committed while fixing it. The aliases are deleted. mt_collins_gsg_authority is now in further_citations of both fact modules, which is the edge a fold reads. THE GUIDE HAS ITS OWN DOCUMENT MODULE. extdeps.publication states the law: a publication status lives on a per-document module, so that recording one document's status never requires editing another document's authority. The guide is independently versioned from the 2022 V2 brief - Issue 1.05, 2026-07-20, AMP 2021-00511 - and storing its authority and status inside the brief's module put one document's facts beside another's scope. New module extdeps.ampere.mt_collins_getting_started_guide.subject now carries the title, issue, date, document number, digest, anchor, ONE publication status, and its own model scope. THE BROAD NDA API IS DELETED, NOT NARROWED. The previous commit kept mt_collins_engineering_facts_route as an alias of the corrected design-package row and left engineering_facts_route on the record, which preserves the false claim behind its old public interface. A repo-wide search finds no reader of the type, the rows or the field, so there is no compatibility case: EngineeringFactsRoute, both rows and the field are removed. The barred design-package population keeps its single authority in extdeps.cpu.ampere_altra_package, which already names it. Also: the 2022 V2 brief now declares its OWN publication status. Claiming the family has status coverage while supplying only the guide's would have been another unbacked claim, and the brief is the first_citation of both fact modules. Compile over both closures: 0 blocking errors, no advisory in any edited file. * Break the run-on line in the retraction paragraph (review 58357) The retraction I added ran straight into the pre-existing sentence about how the locator read is recorded, with no paragraph break, so two unrelated statements shared one line in the paragraph whose whole job is being read clearly. Comment text only; no declaration, type, citation or value changed. Held uncommitted until run 33573686091 reported green on 93b3696, because a commit auto-pushes here within seconds and would have cancelled that run. A cosmetic fix is not worth discarding a completed evidence run for. * Close the review 5084368000 bar: frontier membership, symbolic coverage, an honest status arm, split provenance, and an executing control P0-1 FRONTIER MEMBERSHIP, and it was wider than reviewed. The new guide module declared extdeps_model_scope but was in neither scope_carrier_paths nor the frozen legacy manifest. Checking the roster properly showed memory_population.dag was in NEITHER either, since it landed 2026-08-29, while declaring the scope the whole time - it survived #9883's four review rounds because the placement gate's actuator is not running. A 39-file compile closure proves reachability, not membership, which is the same distinction the aliases taught me one commit ago. Both are carriers now; all four Mt. Collins modules satisfy the frontier law. P0-2 memory_population_source_document re-authored the guide's title, issue, date, filename and digest as a free string beside the module that owns them, with no consumer. Replaced by MtCollinsMemoryPopulationCoverage: a DeclarationRef to the canonical document plus table/page rows. The coverage was the part that was not redundant, so it survives as rows rather than prose. P0-3 THE MARKING WAS AN INFERENCE, so I read the artifact instead. Its full text is 1304 characters, a one-page specifications sheet from Model to Dimensions, containing no proprietary, confidential, copyright, trademark, reserved or licence token and no document or issue number; metadata records Word "Print To PDF", 2022-10-17. It is not Ampere's first-party Issue 0.50 brief. DocumentPublicationStatus had no arm for a public document that states nothing, so an author facing this artifact had to invent a marking or a licence - which is exactly what produced marking "no licence granted". The gap in the state space produced the false row, so the repair is the arm: PubliclyPublishedWithoutStatedTerms { absence_basis }. It carries a basis rather than being nullary because "states no terms" is a claim about a document that was READ, not a default for one that was not. P1-1 PUBLICATION STATUS AND READ PROVENANCE SPLIT. The publisher's act stays on the document module; gunbc's fetch, status, byte count and digest comparison move to gunbc.specification_citation_read_provenance. That module's Mt. Collins brief receipt claimed the text was UNREAD and that no interior fact was modelled, while platform.dag carries rows it says were read from that brief; corrected with the superseded claim named, not overwritten. New arm DocumentLocatorFetchedAndTextIngested records this repository's own direct fetch of a live publisher locator - the three existing arms all describe someone else obtaining the text. P1-2 AN EXECUTING CONTROL BOUND TO THE EXACT RELATION. The new witness reds if either fact module drops the guide citation, if it is swapped, or if the guide is paired with an unrelated public status: membership runs over external_model_scope_citations, the relation a fold traverses, and the status assertion pins the arm and the literal marking. Paired negative in the same test - Customer Connect refuses while the guide admits. Non-vacuity control - the membership predicate must be false for a probe authority no scope cites. All five green BY EXECUTION through gunbc run, not by compiling. P1-3 PR body refreshed to the design actually present, and the census is no longer quoted as the coverage denominator: an anchor may name an API, SDK, repository or product page rather than a fact-attesting document, so the real denominator is the derived population of document-bearing fact-source edges and it is not yet known. --------- Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Supersedes #9873, whose rows encoded the wrong physical topology and were withdrawn. I obtained the source document and read Tables 10-13 myself, so nothing here rests on a relayed reading.
What was wrong, and what decides it
Tables 12-13 print eight MCU headers at a 57.6pt pitch over sixteen connector columns at a 28.8pt pitch, at a constant 6.6pt offset across all eight headers in both sockets. Each header therefore spans exactly two adjacent columns:
#9873 paired the flattened text stream positionally into J1+J16, J2+J15, … That is a different physical topology, not a different notation for one. A merged-header table is not recoverable from a flattened text stream — that single fact produced the error.
The discriminating check reproduces a stated set
Table 10's four-channel configuration names MCU0/MCU1/MCU4/MCU5. Table 11's matching population J1/J3/J9/J11 maps onto exactly that set under this mapping; the refuted reading gives MCU0/MCU2/MCU4/MCU6 and contradicts Table 10. The one-, two- and eight-channel widths reproduce likewise from Tables 12-13's own population marks, and the 16-DIMM odd sequence touches all eight controllers.
The previous channel-count argument is retracted in the file rather than quietly dropped, because it was wrong in an instructive way: pairing J1 with J2, J3 with J4 and so on yields the same 1/2/4/8 counts while disagreeing with every pair. A cardinality that agrees with a hypothesis is not evidence for it when it agrees with the alternatives too.
Two facts, not one overloaded row
MtCollinsChannelConnectorPair— channel membership, with neutraltable_left_connector/table_right_connectorrecording only what the rendered row visibly prints. No claim about installation order, electrical priority, or primary versus secondary slot.MtCollinsChannelPopulationRole—connector_used_at_one_dpc/additional_connector_at_two_dpc, derived separately from the population rows. "First" is avoided deliberately; it reads as either installation order or a vendor-defined primary slot, and the guide states neither.Keeping these apart is what prevents a misread of pair geometry from silently manufacturing an installation-priority claim — exactly what the withdrawn version did. The header claim is restored in the form the tables actually support: the 1DPC population uses the odd-numbered member of every pair.
Revision boundary, handled explicitly
The cited issue advances 1.00 → 1.05 because 1.05 is the revision I read. Every Table 11 sequence was re-read against it and is unchanged — including the printed 32-DIMM row's omission of J32, already recorded here as a defect — so this re-cites identical content rather than silently swapping one revision's table for another's.
memory_population_revision_basisrecords that reasoning, and the sha256 of the exact bytes read is in the source-document row. My read also independently confirms the file's existing J32 correction: Table 12's full row does populate all sixteen connectors per socket.The document is marked Ampere Proprietary and Confidential and is deliberately not committed; only its identity and digest are.
Verification
gunbc compile --entry …/memory_population.dag --target dag— 0 blocking errors, advisory count unchanged at the 103 baseline.🤖 Generated with Claude Code
https://claude.ai/code/session_01TcDddekju59A4jxouNif8J