Skip to content

Mt. Collins channel mapping, re-transcribed from the rendered table geometry - #9883

Merged
gunbai-bot[bot] merged 12 commits into
mainfrom
session/snappy-crab-469
Sep 1, 2026
Merged

gunbai-bot[bot] merged 12 commits into
mainfrom
session/snappy-crab-469

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

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:

MCU0 = J1+J2 MCU1 = J3+J4 MCU2 = J5+J6 MCU3 = J7+J8 MCU7 = J16+J15 MCU6 = J14+J13 MCU5 = J12+J11 MCU4 = J10+J9

#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 neutral table_left_connector / table_right_connector recording 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_basis records 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.
  • Rows parsed back out of the authored file and re-checked: J1..J32 covered exactly once, MCU0..MCU7 once per socket, roles consistent with pairs, 1DPC member odd in all 16, and Table 10's four-channel set reproduced from J1/J3/J9/J11.

🤖 Generated with Claude Code

https://claude.ai/code/session_01TcDddekju59A4jxouNif8J

Brian Searls and others added 8 commits August 30, 2026 16:10
…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
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 briansrls left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

gunbai-bot Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor Author

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 completed

The 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.

memory_population_revision_basis also claimed the sequences match "byte-for-byte", which overstates what I actually did. The established fact is equality of the normalized connector sequences — I compared transcribed lists, not the two artifacts' bytes. The row now says that explicitly rather than borrowing a stronger word than the evidence supports.

2. Table 11's roster no longer speaks for Table 10's support

This 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 649df7fc37, which as you note is now the controlling receipt.

Noted and not acted on, per your ruling: no page image, no additional evidence artifact, and Nat stays as-is.

— sent from snappy-crab-469

@briansrls briansrls left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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 briansrls left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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 briansrls left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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} returns connector_used_at_one_dpc = 4, although 4 is absent from the 16-DIMM row;
  • both members appear — e.g. a pair {1,3} returns additional_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 briansrls left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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.

@gunbai-bot
gunbai-bot Bot merged commit 104b675 into main Sep 1, 2026
6 checks passed
@gunbai-bot
gunbai-bot Bot deleted the session/snappy-crab-469 branch September 1, 2026 09:00
@briansrls
briansrls restored the session/snappy-crab-469 branch September 1, 2026 09:02

Copy link
Copy Markdown
Contributor

POST-MERGE RECORD CORRECTION — landed as 104b6751e4378223677c7dd1792f17547ca742e9 from exact approved head ac4bcd10d3db795522f7d71aac803a0d7f861bfa.

My approval review 5075880644 described the final semantics correctly but misstated three identifiers. The merged code's refusal causes are NeitherMemberAtOneDpc and BothMembersAtOneDpc, and the aggregate refusal arm is PopulationRolesRefused. The longer cause names and PopulationRolesUnestablished appearing in my review text do not exist in the landed module. This is a review-record correction only, not a code defect.

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 else arm was complementary. A later body in the same squash message explicitly retracts that assertion and records the final repair: both members are inspected, only the XOR cases resolve, and BOTH/NEITHER refuse. The landed source carries only that final structure.

No module follow-up or reopen is required.

gunbai-bot Bot pushed a commit that referenced this pull request Sep 2, 2026
…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.
briansrls pushed a commit that referenced this pull request Sep 2, 2026
…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>
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.

1 participant