Skip to content

Lift the seven row-count ceilings a full-source native build meets, under one rule - #949

Draft
MaxGhenis wants to merge 23 commits into
native-scale-transportfrom
native-row-ceilings
Draft

MaxGhenis wants to merge 23 commits into
native-scale-transportfrom
native-row-ceilings

Conversation

@MaxGhenis

Copy link
Copy Markdown
Contributor

Draft, and it stays draft. Base is native-scale-transport (PR #945's branch).

The transport lane's census (docs/us-native-scale-transport.md §5) recorded a
second family of ceilings it did not touch: row counts that a full-source native
US build meets. Max decided (2026-09-17) they are lifted as one change with one
argument
, not one build at a time. This is that change.

The rule

A bound moves only if a full-source native build meets it. A bound that moves
becomes four times the measured full-source count of exactly what it counts,
rounded up to the next whole million.

The multiple is the transport lane's own: MAX_ROSTER_BYTES is 3.9× a
full-source preparation receipt, so both families share one law. The rounding
makes the rule checkable at a glance — divide any moved constant by the count its
comment names and the answer is between 4 and 4.6 — and
test_us_native_row_ceilings.py asserts it, so a later edit that drifts fails a
test rather than a build.

docs/us-native-row-ceilings.md is the argument: why each clause is
load-bearing, why a bound stays a bound rather than being deleted, and why three
classes must not move at all.

The counts are measured, not extrapolated

The recovered 1/1000 pilot artifact carries the whole ACS and ASEC catalogues,
which do not scale with the selection fraction. Its selectable households
reconcile to its own selection.supplied_households exactly —
1,348,408 + 84,422 + 98,784 + 55,762 = 1,587,376 — so "the whole catalogue" and
"what a full-source selection supplies" are the same set, and the catalogue's
counts are the full-source counts.

households persons
ACS 1,531,614 3,422,888
ASEC 55,762 142,125
stacked 1,587,376 3,565,013
combined clone 3,174,752 7,130,026

The transport lane's ~3,471,000 stacked / ~6,943,000 cloned were the 1/1000
per-household ratio extrapolated. These supersede them, about 2.7% higher.

What moved

constant was now counts full source ×
acs_pums.MAX_EXACT_HOUSEHOLDS 1,000,000 7,000,000 exact ACS household keys 1,531,614 4.57
acs_pums.MAX_EXACT_PERSON_ROWS 1,000,000 14,000,000 NP over selected ACS households 3,422,888 4.09
acs_person_coverage_columns.MAX_SELECTED_ROWS 1,000,000 14,000,000 requested ACS person keys 3,422,888 4.09
survey_observed_age.MAX_ROWS 2,000,000 14,000,000 one channel's person rows 3,422,888 4.09
survey_origin_budget.MAX_GROUPS 1,000,000 7,000,000 allocation instructions = selected households 1,587,376 4.41
current_survey_geography.MAX_HOUSEHOLDS 524,288 7,000,000 selected households 1,587,376 4.41
asec_demographic_source._MAX_PERSONS 600,000 14,000,000 retained ACS persons (the larger of its two rosters) 3,422,888 4.09
current_survey_geography.MAX_HOUSEHOLDS 524,288 7,000,000 selected households 1,587,376 4.41

Every refusal keeps its code, its exception type and its expression. Only the
number moves.

One consequence worth naming so a reviewer does not have to find it:
MAX_SELECTED_ROWS at 14,000,000 now sits above MAX_ROWS at 6,000,000 in the
same module. That is not a mistake — MAX_SELECTED_ROWS bounds caller-supplied
person keys, which can exceed what the source holds, while MAX_ROWS bounds the
archive's own rows — but it does mean the effective ceiling on that path is
6,000,000, by containment. Tying the two together (MAX_SELECTED_ROWS = MAX_ROWS)
would be tighter and provable, at the cost of making the rule two rules; it is
listed as an open question below.

The last two are ones the transport lane's census did not reach, and both were
moved only after reading what stood behind them. The rule's test for a bound that
looks like a row ceiling is one question: does the binding site stream, or
materialise a per-row payload?
A bound in front of a materialised payload
cannot usefully be raised alone, because the payload's own byte cap refuses first
and at a smaller number.

  • current_survey_geography.MAX_HOUSEHOLDS bound hardest of the seven — 524,288
    against 1,587,376, refusing at 33% of source. It reads as a byte budget
    (64 * 1024**2 // 128) but streams: _projection_digest feeds one bounded row
    encoding at a time into a hashlib.sha256 and materialises nothing per
    household. Moved.
  • asec_demographic_source._MAX_PERSONS is one constant over two rosters, so it
    takes the larger. It is not a fixed-width encoding (rows is a JSON header
    integer; the only struct.pack is "<I" over the header length), and it could
    not have been an assertion about the ACS file's size — at 600,000 it sat 5.7×
    below
    the genuine 3,422,888-row file, and a bound that would refuse the real
    file is not a claim about it. Moved.
  • current_survey_household_roles.MAX_PERSONS and
    current_child_property_income_source.MAX_ROWS fail the test —
    table.reset_index().to_json(...) and one json.dumps respectively, each under
    a 64 MiB cap. Left to the transport argument.

survey_origin_budget.MAX_GROUPS is the one the transport lane left as "not
established". It is established: allocation_instructions requires one
instruction per selected household, so the group count is the selected
household count.

What did not move, and why

  • An upstream file's real size. acs_person_coverage_columns.MAX_ROWS and
    acs_native_coverage_binding.MAX_SOURCE_ROWS, both 6,000,000, assert that the
    ACS archive is near its real 3,422,888 records. Raising either trades a real
    check for nothing, since a selection cannot exceed its source.
  • A fixed-width encoding. The PAYLOAD_MAX_BYTES = len(MAGIC) + 4 + HEADER_MAX_BYTES + ROW_BYTES * MAX_HOUSEHOLDS + 32 family computes a byte
    budget from a row ceiling, so moving the row ceiling moves the wire format.
    MAX_EXACT_FLOAT64_INTEGER = 2**53 bounds a value, not a row count.
  • A quantity no fraction grows. asec_current_money.MAX_PERSONS (1,000,000)
    counts the ASEC source's own rows, measured at 142,125. The transport lane's
    §5 listed it among the bounds a full-source build meets; it does not, and this
    PR corrects that.

Findings the owner should see

The census read 146 bounds across five module families, each with its
enforcement site, refusal code and exception type, what it protects and its
counts at 1/10 and full source; 41 verdicts then went through an adversarial
pass that read the code again and tried to refute them, and no headline binding
call was overturned. Fourteen bind at full source — and six bind at 1/10,
which contradicts the transport lane's §5 conclusion that "a 1/10 build meets no
ceiling this lane did not lift". All six are byte transports. Three matter enough
to be measured rather than listed.

1. The ACS coverage authentication body budget is the tightest ceiling on the
path, and it is not close.
acs_person_coverage_authentication charges every
selected row 6 * len(raw) + 1024 bytes against MAX_BODY_BYTES (64 MiB) before
the reader allocates, refusing SELECTED_BODY_BUDGET. Measured over 200,000 real
records of the pilot's captured public ACS PUMS archive — a person record
averages 695.57 bytes — the charge is 5,197 bytes and the budget admits
12,911 selected persons, 0.38% of source, 265× under at full source.

That is below 1/100. It is why lifting MAX_SELECTED_ROWS here is necessary and
not sufficient
: this refuses 265× earlier on the same path.

2. The preparation-receipt ceiling #945 lifted is still enforced one module
downstream.
survey_population_preparation._roster_payload returns one joined
payload under MAX_ROSTER_BYTES = 4 GiB — it must, because
KernelResult.artifacts is a mapping of bytes — and
graph_survey_population._checked_preparation checks those same bytes against
PREPARATION_MAX_BYTES, still 64 MiB, refusing PREPARATION_BYTES at :305
and :309 and again in the allocation kernel at :577/:582, reached from six
call sites including graph_atomic_survey_population:172.

From #945's own committed ceiling-receipt.json: a 1/10 roster measured
109,804,304 bytes and was recorded accepted by the producer — 1.64× this cap —
and a full-source roster measured 1,099,892,722 bytes, of which this cap admits
96,839 households. That is, to within rounding, exactly the 96,860 #945
reported as the ceiling it had lifted.

Both are pinned in test_us_native_row_ceilings.py so the next reader meets them
in a test rather than in a build. Neither is this lane's to move.

3. The origin budget's byte transport binds below one tenth.
survey_origin_budget.MAX_PAYLOAD_BYTES (64 MiB) admits 87,838 households,
5.53% of source
— below 1/10 and below the 96,860-household preparation-receipt
ceiling the transport lane lifted. A full-source payload is 1.13 GiB, 18.07× the
cap. Measured, not estimated: one faithful origin record through the module's own
_reference and _json at full-source id widths is 764 bytes per group.

It cannot be raised here at all. graph._bounded_json opens with
_require(type(limit) is int and 0 < limit <= 64 * 1024**2, "TRANSPORT_LIMIT"),
so the shared encoder refuses any cap above 64 MiB before encoding a byte. This is
the transport argument's work, and lifting MAX_GROUPS is necessary but not
sufficient
: at full source the refusal moves from GROUP_COUNT_BOUND to
TRANSPORT_LIMIT.

4. An inherited pin on this base is not regenerated. On
native-scale-transport, b6081efcb added path.read_bytes() inside
_spill_roster. read_bytes is in graph_implementation._RESOURCE_CALLS, so it
moves survey_population_preparation.py's resource_accesses_sha256 — and the
pin was not regenerated. implementation_manifest() therefore raised
"Unclassified US dependency/resource contract" for every stage containing that
module, including authenticated_survey_population_v1, the stage the nineteen-node
path runs. Proven by recomputing the contract from origin/native-scale-transport,
a64f7b733 and b6081efcb's own blobs; this branch does not touch that file.
Re-pinned here through the generator so the base is functional — say if you would
rather it moved to #945 and this branch rebased.

Pins

pin generator result
graph_implementation_inventory.json → all 124 contracts graph_implementation._dependency_contract(payload, name, _covered_imports(name, inventory)) unchanged by these edits; one re-pinned for the inherited break above
acs_native_coverage_binding._ACCEPTED["acs_pums.py"] sha256(<module>.read_bytes()) moved 6ecf79f0… → e79a2a4e…
the other three _ACCEPTED entries same unchanged
all ten implementation_manifest(stage) graph_implementation.implementation_manifest built

No pin was hand-edited. Both generators are committed under
experiments/native-row-ceilings/ and are idempotent — rerun, they report
nothing moved.

Tests

A boundary test per moved bound drives the refusal at exactly its own constant,
and the shared file asserts the shipped constant clears 4× its measured count —
so acceptance at a full-source-sized count follows from the two without any test
allocating a full-source roster. Two do drive real full-source counts for free:
survey_observed_age normalizes a genuine 3,422,888-row channel in 0.02 s, and
NP is a declared count, so a two-row ACS household table declaring the whole
3,422,888-person file exercises that ceiling with no person rows at all.

Scope

  • No packages/microcosm-graph hunks.
  • graph_atomic_survey_financial.py, survey_population_replay.py untouched.
  • Not a build, a certification or a release artifact. No gated data was read; the
    only input is one recovered development artifact, and every receipt carries
    "release_eligible": false.

🤖 Generated with Claude Code

MaxGhenis and others added 23 commits September 17, 2026 17:30
Records the brief, the four bounds the transport lane's census found binding
between 1/10 and full source, and the one-argument decision.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The recovered pilot artifact's own rosters: 1,584 selected households carry
3,464 stacked persons (2.1869/hh) and six entity rosters. Every count in the
census is this artifact scaled to 1,587,376 supplied households, so the
derivation is stated rather than assumed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
… scaling

The recovered artifact carries the whole ACS and ASEC catalogues, which do not
scale with the selection fraction. Their selectable households reconcile to
selection.supplied_households exactly (1,348,408 + 84,422 + 98,784 + 55,762 =
1,587,376), so a full-source selection is the catalogue and the counts are
measured rather than extrapolated:

  ACS 1,531,614 households / 3,422,888 persons
  ASEC   55,762 households /   142,125 persons
  stacked 1,587,376 / 3,565,013; combined clone 3,174,752 / 7,130,026

The transport lane's ~3,471,000 stacked and ~6,943,000 cloned were the 1/1000
per-household ratio extrapolated; the catalogue figures supersede them.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…he census inherited

survey_origin_budget streams one ~731-byte origin record per allocation group
into one bytearray under a 64 MiB cap. Measured through the module's own
_reference and _json at full-source household-id widths: 764 bytes per group,
so the cap admits 87,838 households -- 5.53% of source, below 1/10 and below
the 96,860-household preparation-receipt ceiling the transport lane lifted. A
full-source payload is 1.13 GiB, 18.07x the cap.

Also records where the module runs: no node in the 19-node financial graph
(graph.json of the recovered run lists all nineteen) or in the completion host
executes it; survey_age_calibration and graph_survey_budget do, over the same
full-source selection.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Four times the measured full-source count of exactly what each bounds, rounded
up to the next whole million:

  acs_pums.MAX_EXACT_HOUSEHOLDS            1,000,000 ->  7,000,000  (1,531,614)
  acs_pums.MAX_EXACT_PERSON_ROWS           1,000,000 -> 14,000,000  (3,422,888)
  acs_person_coverage_columns.MAX_SELECTED_ROWS
                                           1,000,000 -> 14,000,000  (3,422,888)
  survey_observed_age.MAX_ROWS             2,000,000 -> 14,000,000  (3,422,888)
  survey_origin_budget.MAX_GROUPS          1,000,000 ->  7,000,000  (1,587,376)

Every refusal keeps its code and its expression; only the number moves.
acs_person_coverage_columns.MAX_ROWS stays at 6,000,000 because it asserts the
source file's own size rather than a roster this build chooses, and
survey_origin_budget.MAX_PAYLOAD_BYTES stays at 64 MiB because it is a byte
transport and takes the segmented-transport argument, not this one.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…erate

INHERITED, NOT THIS LANE'S. On native-scale-transport, b6081ef ("Hash a
spill segment that was already there") added path.read_bytes() inside
_spill_roster. read_bytes is in graph_implementation._RESOURCE_CALLS, so it
moves survey_population_preparation.py's resource_accesses_sha256 -- and the
pin was not regenerated. implementation_manifest() therefore raises
"Unclassified US dependency/resource contract" for every stage containing that
module, including authenticated_survey_population_v1, which is the stage the
nineteen-node path runs. The break is at origin/native-scale-transport and at
a64f7b7, proven by recomputing the contract from each commit's own blobs;
this branch does not touch that file.

The transport lane's report was right that Path.write_bytes is invisible to
resource_accesses_sha256 by construction. This is the converse: a later commit
on the same branch added a read, which is visible.

Regenerated with experiments/native-row-ceilings/regenerate_inventory_contract.py,
which writes exactly what graph_implementation._dependency_contract returns.
Never hand-edited. Serialization verified byte-identical before the edit, so
one value moves and nothing else.

  resource_accesses_sha256 ccfed1c1acff... -> 0071f934801d...

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…rest hold

acs_native_coverage_binding._ACCEPTED pins four ACS modules by whole-file
sha256 and refuses UNREVIEWED_PREPARATION on a mismatch. acs_pums.py is one of
them, so the ceiling edit moves it:

  6ecf79f0dfb0c0bc... -> e79a2a4ecbc81e52...

Regenerated with experiments/native-row-ceilings/regenerate_accepted_pin.py,
which computes exactly the sha256 the check itself computes. Never hand-edited.

repin.py now reports: 124 inventory contracts checked, 0 moved; the other three
_ACCEPTED entries unchanged; all ten stage manifests built. Both generators are
idempotent -- rerun, they report nothing moved.

The pin tools set sys.path to this worktree and assert beneath the import block
that each module resolved inside it, since a pin re-derived from another
checkout would be the wrong value; pyproject carries the E402 ignore that
ordering needs, beside the transport lane's own harness ignores.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ount

One new file carries the rule as an assertion -- the measured full-source
counts, and for each moved ceiling that it is exactly four times its count
rounded up to the next whole million. It also pins the bounds that must not
move, with the reason each stays: the ACS source-file row bounds assert a file
this build does not produce, the ASEC codec bounds count a source no fraction
grows, 2**53 bounds a value not a row count, and the origin budget's byte
transport takes the segmented-transport argument.

Per-module boundary tests prove each refusal fires at exactly its own constant,
so acceptance at full source follows from the two together without any test
allocating a full-source roster:

  acs_pums.MAX_EXACT_HOUSEHOLDS   patched to 3; 3 accepted, 4 and () refuse
  acs_pums.MAX_EXACT_PERSON_ROWS  NP is a declared count, so a two-row household
                                  table declaring the whole 3,422,888-person ACS
                                  file drives the shipped ceiling for free -- it
                                  runs past and refuses later on the person
                                  archive; patched one below, it refuses there
  MAX_SELECTED_ROWS               patched to 2; 2 proceeds to the archive, 3 refuses
  survey_observed_age.MAX_ROWS    a real 3,422,888-row normalize, 0.02s and 27 MiB
  survey_origin_budget.MAX_GROUPS six accepted, five refuses GROUP_COUNT_BOUND.
                                  MAX_GROUPS is inside the module's loaded
                                  contract, so the test re-seals _LIVE beside the
                                  patch -- what a module shipped with a different
                                  number looks like -- leaving every other
                                  producer check in force.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
docs/us-native-row-ceilings.md: the rule and why each of its three clauses is
load-bearing; the measured counts and why the artifact's catalogues answer the
full-source question where its rosters would only estimate it; the five moved
constants with their refusal codes unchanged; why a bound stays a bound rather
than being deleted; the three classes that must not move at all (an upstream
file's real size, a fixed-width encoding, a quantity no fraction grows); and
what still binds and whose argument it is.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
… reach

current_survey_geography.MAX_HOUSEHOLDS was 64 * 1024**2 // 128 = 524,288
against the 1,587,376 households a full-source build selects, so it binds --
harder than any of the five, at 33% of source.

It is a pure row ceiling despite its byte-derived form: _projection_digest
streams one bounded row encoding at a time into a hashlib.sha256 and
materialises no per-household payload, and the module's only bytes are the
64 KiB summary receipt that MAX_RECEIPT_BYTES already bounds. So no byte
transport sits behind it, the rule applies with no judgment left, and the
expression's borrowed 64 MiB never described anything in this module.

  MAX_HOUSEHOLDS  524,288 -> 7,000,000   (4x 1,587,376, rounded up)

Refusals unchanged: HOUSEHOLD_COUNT at :68 and PROJECTION_STORAGE at :188,
both ValueError("CURRENT_SURVEY_GEOGRAPHY_" + reason). Boundary test drives
PROJECTION_STORAGE over a three-row projection at a patched-down ceiling.
Nothing in the tree referenced the old value. No pin moves: the module is not
in graph_implementation_inventory.json and not in _ACCEPTED.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
graph._bounded_json opens with

  _require(type(limit) is int and 0 < limit <= 64 * 1024**2, "TRANSPORT_LIMIT")

so the shared encoder refuses any cap above 64 MiB before it encodes a byte. A
larger MAX_PAYLOAD_BYTES in survey_origin_budget would not loosen the bound; it
would refuse the module. That turns "this takes the transport argument" from a
preference into a structural fact, and the test now drives it.

Also names, in section 5a, the test the rule applies to a bound that looks like
a row ceiling -- does the binding site stream, or materialise a per-row payload
-- and the three bounds it decides: current_survey_geography streams (moved),
current_survey_household_roles serialises its whole per-person table to JSON
under a 64 MiB artifact cap, and current_child_property_income_source does one
json.dumps under a 64 MiB projection cap. Both of those are the transport's.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
asec_demographic_source._MAX_PERSONS was 600,000 over two rosters: a fixed ASEC
three-cohort 432,523 that no fraction grows, and the retained ACS persons, which
a full-source build grows to 3,422,888. One constant over two rosters takes the
larger, so the rule produces 14,000,000.

Three things had to hold and each was read. It is not a fixed-width encoding:
rows is a JSON header integer, the only struct.pack is "<I" over the header
length that _HEADER_MAX bounds separately, and the body budget is derived and
checked against actual bytes rather than capped. It is not an assertion about
the ACS file's size and could not be -- at 600,000 it sat 5.7x BELOW the genuine
3,422,888-row file, and a bound that would refuse the real file is not a claim
about it; ACS_SOURCE_ROW_SHAPE and ACS_CAPTURE_CHANGED make that claim exactly,
and DEMOGRAPHIC_COHORT_ROWS makes the ASEC one, so neither weakens. And no
per-row payload sits behind :1016, which takes two numpy arrays.

Boundary test drives ACS_ROWS at acs_household_reference_states. No pin moves:
the module is not inventoried and carries no external digest pin.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Both are byte transports, so neither is this lane's to move. Both are measured
and pinned in a test, because a reader who meets them in a build has lost hours.

ACS coverage authentication charges every selected row 6 * len(raw) + 1024
against MAX_BODY_BYTES before the reader allocates, refusing
SELECTED_BODY_BUDGET. Measured over 200,000 real records of the pilot's
captured public ACS PUMS archive: a person record averages 695.57 bytes, so the
charge is 5,197 bytes and 64 MiB admits 12,911 selected persons -- 0.38% of
source, 265x under at full source. It is the tightest ceiling censused, and it
refuses 265x before acs_person_coverage_columns.MAX_SELECTED_ROWS, which this
lane lifted.

And the preparation-receipt ceiling the transport lane reported as moved from
96,860 households to 6,206,000 is still enforced one module downstream:
_roster_payload returns one joined payload under MAX_ROSTER_BYTES = 4 GiB, and
graph_survey_population._checked_preparation checks those same bytes against
PREPARATION_MAX_BYTES, still 64 MiB, refusing PREPARATION_BYTES. From the
transport lane's own committed receipt: a 1/10 roster measured 109,804,304
bytes and was recorded accepted by the producer, 1.64x this cap; a full-source
roster measured 1,099,892,722 bytes, of which this cap admits 96,839
households. That is the number the transport lane lifted, still standing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
census.json: 146 bounds across five families, each with its enforcement site,
refusal code and exception type, what it protects, its counts at 1/10 and full
source, and whether it binds -- plus the 41 adversarial verdicts, none of which
overturned a headline binding call. Fourteen bind at full source, six at 1/10.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Test summaries, PR URL and the questions for Max follow once the final clean
run lands; those sections are added, not rewritten.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ineteen

The census agents read a moving tree: five constants were lifted while it ran
and the agents correctly reported the post-lift values, recording both numbers
per row. At base nineteen bind; seven moved here; twelve remain for the
transport argument. Also corrects 41 verdicts to 42.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…e code does

I wrote in the design note that the roles projection costs "roughly 200 bytes
of JSON per person" and admits "a few hundred thousand". That was reasoned, not
computed, and this lane's own standard forbids it. Measured through the module's
own encoder: 320.08 bytes per person row, so the 64 MiB artifact cap admits
209,661 persons -- 5.88% of source, against a row bound that admits 58.8%. The
byte cap refuses ten times earlier, which is exactly why MAX_PERSONS is not this
rule's to move.

Also two precision fixes. The financial graph DOES call into
survey_origin_budget -- for _config_payload and the _live() producer seal -- so
"no node executes it" becomes "no node executes freeze_survey_origin_budget,
where GROUP_COUNT_BOUND is checked, and neither of those calls reaches
_initial". And MAX_SELECTED_ROWS at 14,000,000 now sits above MAX_ROWS at
6,000,000 in the same module, which is not an inconsistency -- one bounds
caller-supplied keys, the other the archive's own rows -- but does mean the
effective ceiling there is 6,000,000 by containment. Both said in the note
rather than left for a reviewer to find.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
399 passed over the seven touched test files at a fixed commit with the tree
untouched for the run; ci_test_groups --verify ok; the stdlib matrix contract's
15 tests OK; spec-engine coverage 42156/42156 and 41/41; ruff clean and 21 files
already formatted; all three pin generators idempotent.

Records honestly that an earlier full-file run reported 8 failed while this
session was editing the tree underneath it, and that it measured nothing -- the
same tests pass at a fixed commit. And records the base-worktree run that proves
the inherited pin break is the base's: 7 failed there with the exact
Unclassified-contract ValueError, all 7 pass here.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
PR #949, draft against native-scale-transport, MERGEABLE. CI does not run on it
by design: test.yml triggers on pull_request: branches: [main], and gh pr checks
reports none, so section 8's local gates are the only ones this branch has.

Section 11 says what the report does not claim -- including that census.json's
per-row prose is the agents', checked but not rewritten, so a row may carry a
superseded classification beside its verified binding call; and that the roles
projection figure is on a faithfully shaped invented table, not a real artifact.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
)

Brings main through 8c44daa up the stack. Clean merge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
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