Skip to content

The vLLM rank-population law, executable against a hermetic refusal matrix - #10264

Merged
briansrls merged 6 commits into
mainfrom
session/eager-pike-541-vllm-rank-kernel
Sep 3, 2026
Merged

briansrls merged 6 commits into
mainfrom
session/eager-pike-541-vllm-rank-kernel

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Sep 3, 2026 •

Copy link
Copy Markdown
Contributor

gunbc.spark.vllm_observed (#10249) refuses to call a front-door readback a tensor-parallel realization, because one front door establishes an engine and an artifact and says nothing about which machines carry which rank. This is the missing half.

It proves the law executes. It claims no worker exists — nothing here acquires anything. A later host adapter supplies real participants, and only that adapter joined to a coherent decision may mint a production receipt.

Why the law before the receipt

Authoring VllmJoinedRankPopulationReceipt and friends now would land a family of types with no constructor path and no discriminating RED — decoration that gets cited as coverage later. The law can be exercised in both directions today, so it lands today.

The shape was measured, not invented

Read off the live pair with the host access granted this session:

world_size=2  DP rank 0  PP rank 0  TP rank 0 / TP rank 1
rank 0 → 192.168.102.10 (spark-3bd5 / .225)   worker pid 46055
rank 1 → 192.168.102.11 (spark-a3ee / .226)   worker pid 3764
single EngineCore identity across both

Every refusal arm below is a way that observation could have come back wrong.

The expected rank set is pinned without being enumerated

Count equals world size · no rank twice · no rank out of range. By pigeonhole those cannot all hold unless every rank in the range appears exactly once — so completeness is a consequence, not an assertion, and there is no expected list for a caller to supply, disagree with, or drift from. That closes the reviewer's specific concern that a caller passing expected ranks alongside participants authors both sides of its own join.

(There is also no list-range primitive in std, and I did not mint one to get an enumeration the construction doesn't need.)

Four things the matrix exists to hold

  • The host join runs in both directions. Both ranks on one selected host satisfies "no participant on an unselected host" while half the unit carries nothing — a two-host unit declared coherent with one machine idle.
  • Completeness is a field. A collector that returned 3 of 4 and a collector that found 3 produce the same list; only the first is a missing rank.
  • The selected hosts are distinct identities. Both directions of the host join are existence checks, so [A, A] with both ranks on A passed every one of them — a single machine presenting as a pair, with the two-host claim resting on list multiplicity standing in for host identity. Distinctness is not one-rank-per-host: a legitimate TP deployment may co-locate ranks, and a witness holds that line.
  • The kernel carries no provenance, because it acquires nothing. An earlier revision stamped observations HermeticFixture | AcquiredFromHostVantage, with the acquired arm minted by wrapping each host in a VllmHostVantage — a constructor taking a host name and nothing else. That cost no connection, no host effect, no capture: it turned a free relabel into one wrapper call per host. The vocabulary is gone. The future adapter owns acquisition, mints it from a real executed observation, projects the semantic fields into this law, and may consume this decision only while retaining its own acquired record.
  • A pid is a process key, not a birth identity. The field is host_local_worker_process_key, compared within a host because pids are host-local — comparing them globally refused a legitimate cross-host pair on a pid collision. It is not called an identity because nothing here can tell a Ray actor restart from process continuity.
  • Every finding is collected, not the first. Re-collecting once per finding costs a full observation cycle against a service whose incarnation changes between attempts — and three incarnations came and went on this pair in one day, so each retry is a different subject.

Executed evidence

Eighteen witnesses green — one positive control and seventeen discriminating cases:

PASS w_the_observed_shape_is_coherent
PASS w_a_missing_rank_refuses
PASS w_a_duplicated_rank_refuses
PASS w_a_rank_outside_the_expected_set_refuses
PASS w_a_participant_on_an_unselected_host_refuses
PASS w_a_selected_host_carrying_no_rank_refuses
PASS w_two_ranks_sharing_one_process_key_on_one_host_refuses
PASS w_one_pid_on_each_of_two_hosts_is_not_a_shared_process_key
PASS w_a_participant_from_another_incarnation_refuses
PASS w_an_incomplete_observation_refuses_even_with_every_rank_present
PASS w_a_pipeline_parallel_decomposition_of_the_same_world_size_refuses
PASS w_a_decomposition_inconsistent_with_its_world_size_refuses
PASS w_a_right_sized_population_with_wrong_ranks_still_refuses
PASS w_a_population_wrong_in_several_ways_reports_all_of_them
PASS w_a_tensor_parallel_rank_that_contradicts_its_global_rank_refuses
PASS w_an_out_of_range_tensor_parallel_rank_refuses_through_correspondence
PASS w_a_selected_unit_naming_one_host_twice_refuses
PASS w_two_ranks_on_one_host_of_a_distinct_pair_refuses_only_for_the_idle_host

The positive control is what stops every refusal being satisfied by a law that refuses everything; the pipeline-parallel case is what a bare world size cannot distinguish from this unit.

Not in scope

No production receipt, no acquisition, and no change to #10225's withholding — which still requires the full admitted target, atomically.

🤖 Generated with Claude Code

https://claude.ai/code/session_01U397y4s3dSBof7vGPAX87G

gunbc-ci-auto-heal and others added 2 commits September 3, 2026 18:29
…atrix

gunbc.spark.vllm_observed refuses to call a front-door readback a tensor-parallel
realization: one front door establishes an engine and an artifact and says nothing
about which machines carry which rank. This is the missing half -- given a resolved
parallel configuration and a set of participants, decide whether they form a
coherent population, and refuse with every finding when they do not.

IT PROVES THE LAW EXECUTES; IT CLAIMS NO WORKER EXISTS. Nothing here acquires
anything. A later host adapter supplies real participants, and only that adapter
joined to a coherent decision may mint a production receipt. Landing the law first
was the reviewer's ruling and is the right order: authoring the receipt records now
would leave a family of types with no constructor path and no discriminating RED --
decoration that would later be cited as coverage.

THE SHAPE IS NOT INVENTED. It was read off the live pair with host access granted
this session: world_size=2, DP rank 0, PP rank 0, TP ranks 0 and 1, two worker
processes with distinct pids, one per fabric address, under a single EngineCore
identity. Every refusal arm is a way that observation could have come back wrong.

THE EXPECTED RANK SET IS PINNED WITHOUT BEING ENUMERATED, which is a better
construction than listing it. Count equals world size, no rank twice, no rank out of
range -- by pigeonhole those cannot all hold unless every rank appears exactly once.
Completeness is a CONSEQUENCE, and there is no expected list for a caller to supply,
which is what stops the caller authoring both sides of its own join. (There is also
no list-range primitive in std, and I did not mint one to get an enumeration I do
not need.)

FOUR DESIGN POINTS THE MATRIX EXISTS TO HOLD.
- The host join runs in BOTH directions. Both ranks on one selected host satisfies
  "no participant on an unselected host" while half the unit carries nothing.
- Completeness is a field because a partial collection and a small population
  produce the same list, and only the first is a missing rank.
- Provenance travels through the decision, so a fixture-built coherence cannot be
  read as acquired evidence by the first consumer that accepts one.
- Every finding is collected, not the first. An operator re-collecting once per
  finding pays a full observation cycle against a service whose incarnation changes
  between attempts -- and on this pair three incarnations came and went in one day,
  so each re-collection is against a different subject.

Fourteen witnesses green: one positive control, one provenance control, and twelve
refusal arms including a world-size-2 PIPELINE-parallel decomposition, which is the
case a bare world size cannot distinguish from this unit.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U397y4s3dSBof7vGPAX87G
…he decision

Review 59414, both findings.

`tensor_parallel_rank` was recorded on every participant and read by
nothing: a population claiming both workers were TP rank 0 passed as
COHERENT under a law named after tensor parallelism. `decide_vllm_rank_population`
now refuses through `TensorParallelRankDoesNotMatchGlobalRank`, with two
discriminating REDs -- a contradicting rank and an out-of-range one, both
of which were green before this commit.

Correspondence is the whole law, not one check among three:
`NotATensorParallelDecomposition` already refuses PP != 1 or DP != 1, so
every population reaching here is a pure TP decomposition, where vLLM
assigns global rank and TP rank identically. Global ranks are already
range-checked and unique, so separate TP range and uniqueness arms would
be permanently green by construction -- decoration, not walls.

`vllm_rank_population_is_coherent` is deleted. It matched the decision
coproduct back into a Bool, discarding the findings at the one place they
are carried; its sole consumer now matches the decision directly.

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

gunbai-bot Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor Author

Review 59414 addressed; both findings taken as stated.

1. tensor_parallel_rank recorded but never examined. Confirmed inert before this push — the field appeared only at its declaration, constructor parameter and constructor body, and in fixtures. decide_vllm_rank_population now refuses through a new finding TensorParallelRankDoesNotMatchGlobalRank { global_rank, tensor_parallel_rank }.

Correspondence is the whole law rather than one check of three. NotATensorParallelDecomposition already refuses any decomposition with PP != 1 or DP != 1, so every population reaching the participant checks is a pure TP decomposition, where vLLM assigns the global rank and the TP rank identically (the live joined-rank log reads "rank 0 … TP rank 0", "rank 1 … TP rank 1"). Global ranks are already range-checked and uniqueness-checked, so separate TP range and TP uniqueness arms would be permanently green by construction — decoration that would later be cited as coverage (DESIGN §4b: ask whether the check's RED is authorable before writing the check).

Two discriminating REDs, both green before this commit:

  • w_a_tensor_parallel_rank_that_contradicts_its_global_rank_refuses — global ranks 0/1, right count, one per selected host, distinct births, one incarnation, both claiming TP rank 0.
  • w_an_out_of_range_tensor_parallel_rank_refuses_through_correspondence — TP rank 7 alongside global rank 0, refusing through the same arm, which is the evidence that correspondence subsumes a range check here.

2. vllm_rank_population_is_coherent. Deleted. It matched the decision coproduct back into a Bool, discarding the findings at the one place they are carried. Its sole consumer (w_the_observed_shape_is_coherent) now matches the decision directly.

All 16 witnesses in spark_vllm_rank_population_witness_test.dag pass via claim_batch.

…identity to its host

Review 59425, both findings.

PROVENANCE WAS A LABEL, NOT A FACT. `participants` and `observation` were
independent arguments, so a caller could hand fixture-built participants
to an observation stamped `AcquiredFromHostVantage` and read acquired
coherence back out -- fixture data laundered into production evidence at
the one place the accepted arm is supposed to mean something. A list and
its provenance are one act of collection, so they are now one value:
`VllmJoinedObservation` carries its participants, and no constructor
takes a provenance. `vllm_fixture_observation` stamps HermeticFixture;
`vllm_acquired_observation` costs a `VllmHostVantage` per participant
host and refuses, naming every uncovered host, otherwise.

This does not reach structural impossibility -- nothing yet mints a
vantage from a real connection, and that missing host adapter is the
class's next-rung trigger. What it removes is the FREE relabel.

A BIRTH IDENTITY IS A PID, AND A PID IS HOST-LOCAL. Compared as a bare
string across the population it refused a legitimate cross-host pair
whenever two machines happened to birth their worker at the same number
-- something this exact two-host launch can produce any time -- reporting
two real processes as one counted twice. The comparison is now scoped to
the host, and the finding carries it.

Two new discriminating REDs and one new positive control; 19 witnesses
pass. `w_two_ranks_sharing_one_worker_birth_refuses` now shares a host as
well, because that is the state it was always meant to describe.

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

gunbai-bot Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor Author

Review 59425 addressed. Both findings verified against the code and fixed; both were real.

1. Provenance could be applied to someone else's participants. Confirmed: participants and observation were independent arguments, so fixture-built participants handed to an observation stamped AcquiredFromHostVantage returned acquired coherence — laundering at exactly the place the accepted arm is supposed to mean something.

Fixed structurally rather than by validation: a list and its provenance are one act of collection, so they are now one value. VllmJoinedObservation carries its participants, and no constructor takes a provenance at all:

  • vllm_fixture_observation(incarnation, returned_completely, participants) stamps HermeticFixture.
  • vllm_acquired_observation(vantages, ...) returns VllmAcquiredObservationAdmission and admits only when every participant's host carries a VllmHostVantage; otherwise AcquiredObservationRefused { unvantaged_hosts } names all of them.

decide_vllm_rank_population no longer takes participants; it reads them from the observation.

Rung honesty: this does not reach structural impossibility. Nothing yet mints a vantage from a real connection, so a vantage is still authorable in a fixture — the missing host adapter is this class's next-rung trigger, and that is stated in the module. What the change removes today is the free relabel: acquired provenance now costs a vantage per participant host instead of a keyword.

2. Worker birth identity compared globally. Correct — it is a pid, and a pid is host-local. Two legitimate workers on different machines that happen to birth at the same pid were refused as one process counted twice, which this exact two-host launch can produce on any restart. The comparison is now scoped by host_identity_eq, and WorkerBirthIdentityShared carries the host so the refusal is located.

Witnesses (19, all passing):

  • w_acquiring_a_participant_from_a_host_with_no_vantage_refuses — RED.
  • w_a_fully_vantaged_acquisition_decides_as_acquired — positive control, so the refusal above is not satisfiable by a constructor that refuses everything; it also checks the provenance survives into the decision.
  • w_one_pid_on_each_of_two_hosts_is_not_a_shared_birth — the discriminating case for finding 2; it was refused before this commit.
  • w_two_ranks_sharing_one_worker_birth_on_one_host_refuses — the same-host duplicate, which is the state that arm was always meant to describe.

Side-chat ruling on this head: REQUEST_CHANGES on the acquired-provenance
arm, and it is right.

`vllm_host_vantage` took a host name and returned a vantage. It cost no
connection, no executed host effect, no capture. So the previous commit
did not remove the free relabel -- it changed it from one keyword into
one wrapper call per host, and naming the wrapper after the vantage did
not make it one. Claiming otherwise in the module annotation was the
worse half of the defect: an inflated rung is cited as coverage.

The whole acquisition vocabulary is gone: VllmObservationProvenance,
VllmHostVantage, VllmAcquiredObservationAdmission and
vllm_acquired_observation are deleted, `vllm_fixture_observation` becomes
`vllm_declared_joined_observation`, and RankPopulationCoherent carries no
provenance.

What is left is the pure question this module can actually answer: given
a DECLARED population, is it coherent. The future host adapter owns
VllmAcquiredJoinedObservation, mints acquisition from a real executed
observation, projects its semantic fields into this law, and joins its
own acquired record to the coherent decision to make a production
receipt. The adapter earns provenance; the kernel cannot, so it no longer
claims it.

16 witnesses pass. The three deleted ones tested the removed arm; every
refusal in the matrix and the positive control are untouched.

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

gunbai-bot Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor Author

Reworked on the side-chat ruling, which was REQUEST_CHANGES on the acquired-provenance arm. It was right, and the claim I made in the previous commit was too strong.

vllm_host_vantage took a host name and returned a vantage. It cost no connection, no executed host effect, no capture. So that commit did not remove the free relabel — it changed it from one keyword into one wrapper call per host, and naming the wrapper after the vantage did not make it one. Asserting in the module annotation that the free relabel was gone was the worse half: an inflated rung gets cited later as coverage.

The whole acquisition vocabulary is removed rather than patched — VllmObservationProvenance, VllmHostVantage, VllmAcquiredObservationAdmission and vllm_acquired_observation are deleted, vllm_fixture_observation is now vllm_declared_joined_observation, and RankPopulationCoherent carries no provenance.

What remains is the question this module can actually answer: given a declared population, is it coherent. That keeps the PR's stated scope — "nothing here acquires anything" — true of its vocabulary as well as its behaviour. The future host adapter owns VllmAcquiredJoinedObservation, mints acquisition from a real executed observation, projects its semantic fields into this law, and joins its own acquired record to the coherent decision to form a production receipt. The adapter earns provenance; the kernel cannot, so it no longer claims it.

16 witnesses pass. The three deleted ones tested only the removed arm; every refusal in the matrix and the positive control are untouched, so the rank law itself is unchanged.

— sent from eager-pike-541

Side-chat ruling on 1621af0, two semantic blockers.

SELECTED HOSTS MUST BE DISTINCT. Both directions of the host join are
existence checks, so `[A, A]` with both ranks on A satisfied every one of
them -- right count, ranks 0 and 1, corresponding TP ranks, every
participant on a selected host, every selected entry naming a host
carrying a rank, distinct process keys -- and decided COHERENT. One
machine presented as a pair, and the two-host claim rested on list
multiplicity standing in for host identity. `SelectedHostNamedMoreThanOnce`
refuses it.

The invariant is distinctness, NOT one rank per host: a legitimate
tensor-parallel deployment may co-locate ranks on one selected machine.
A second witness holds that line, so the fix cannot quietly become a law
forbidding co-location -- it asserts the co-located population refuses
for the IDLE host and specifically not for distinctness.

A PID IS A HOST-LOCAL PROCESS KEY. `worker_birth_identity` is now
`host_local_worker_process_key` and the finding is
`RanksShareHostLocalWorkerProcessKey { host, process_key }`. A pid names a
process slot at one observation instant; the number is reused, and under
Ray an actor can restart while the logical actor persists. Nothing in this
kernel can tell a restart from continuity, so naming the field after an
identity it has not earned is the same inflation this module just removed
from its provenance. The wet adapter -- which can retain a Ray session,
actor id, restart ordinal, node id and process-start evidence -- projects
a real identity into this equality key.

18 witnesses pass. PR body synchronized to the pure-kernel shape; it was
still describing the deleted provenance control.

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

gunbai-bot Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor Author

Side-chat rescore at 1621af0 cleared the acquisition blocker ("freely mintable host vantage FIXED, core TP rank-population decision ACCEPTED") and raised two narrow semantic ones. Both verified and fixed.

1. A two-entry list is not a two-host unit. Real, and I had missed it: both directions of the host join are existence checks, so participant_hosts: [A, A] with both ranks on A passed every check — right count, ranks 0 and 1, TP ranks corresponding, every participant on a selected host, every selected entry naming a host carrying a rank, distinct process keys — and decided RankPopulationCoherent. The two-host claim rested entirely on list multiplicity standing in for host identity. SelectedHostNamedMoreThanOnce { host } now refuses it.

Deliberately not a one-rank-per-host law — a legitimate TP deployment may co-locate ranks. w_two_ranks_on_one_host_of_a_distinct_pair_refuses_only_for_the_idle_host asserts that population refuses for SelectedHostCarriedNoRank and not for distinctness, so the fix cannot silently become a co-location ban.

2. A pid is not a birth identity. worker_birth_identity → host_local_worker_process_key; the finding is RanksShareHostLocalWorkerProcessKey { host, process_key }. A pid names a process slot at one observation instant, the number is reused, and under Ray an actor can restart while the logical actor persists — this kernel cannot tell a restart from continuity, so naming the field after an identity it has not earned is the same inflation the provenance removal just corrected. The wet adapter, which can retain a Ray session, actor id, restart ordinal, node id and process-start evidence, projects a real identity into this equality key.

3. Body synchronized — it still described the deleted HermeticFixture provenance control and a fourteen-witness suite.

18 witnesses pass locally; awaiting exact-head CI.

— sent from eager-pike-541

@briansrls
briansrls merged commit cbf7f41 into main Sep 3, 2026
6 checks passed
@briansrls
briansrls deleted the session/eager-pike-541-vllm-rank-kernel branch September 3, 2026 22:10
@briansrls
briansrls restored the session/eager-pike-541-vllm-rank-kernel branch September 3, 2026 22:17
briansrls pushed a commit that referenced this pull request Sep 4, 2026
…d field nothing reads, under a sentence describing the wall it would build (#10315)

* File the class two lanes hit independently: prose asserting a wall nothing can produce

DESIGN section 4b requires a row per discovered class. This one earned it
by recurring five times across two unrelated lanes in one day.

THE CLASS: a carrier records a discriminating value, an annotation beside
it describes what that value prevents, and NO OPERATION ANYWHERE accepts
the value and can return a different answer because of it. The
declaration typechecks, the witnesses pass, and the sentence is not a lie
about intent -- it describes a wall that was never built. The field
corroborates the paragraph and the paragraph explains the field, so each
is the other's evidence and neither touches an executed path.

RECOGNITION RULE, about the question rather than the answer: name the
operation that TAKES this value and can return two results because of it.
If none exists, the field is inert and the prose is the only wall. The
mechanical tell is a field appearing exactly three times -- type
declaration, constructor parameter, constructor body -- and nowhere else.

WHY IT SURVIVES REVIEW, which is why it recurs: the discriminating RED is
UNAUTHORABLE. A reviewer hunting the missing negative case cannot write
one, because there is no call to make. Four instances passed three
independent review rounds and two side-chat rulings on #10264 and #10249
before any was found, and the fourth was found only after a peer session
described the shape from an unrelated lane.

RECEIPTS: the inert tensor_parallel_rank; a host vantage that cost a
wrapper call while its annotation claimed it had removed the free relabel;
a resolved-configuration capture of three arbitrary strings that advanced
a refusal stage on the strength of its ARM NAME; a health-coverage backend
written once and read by nothing under prose promising another backend
would get no answer. Plus a fifth from a peer lane on unrelated subject
matter -- "an annotation standing where a field should have been", beside
an advertised success surface with no construction anywhere.

BOUNDARIES DRAWN, because the nearest neighbour has a different remedy.
check_subject_shape_cannot_represent_the_state_the_check_detects has a
check that EXISTS and executes, unauthorable because the subject cannot
carry the state -- repair the subject's shape. Here no check exists at
all, unauthorable because there is nothing to call -- add the question.
And it is not specification-without-execution: there IS a consumer, green
by execution, so the general rule is satisfied BY the defect.

CEILING AND TRIGGER: both lanes found instances only after repairing
three or four smaller ones each, and both kept missing the next. The
trigger is a lens over the Node tree asking whether any function in the
closure destructures each declared field -- the same read the namespace
authority performs, so it costs no substrate edit. Until then the class
is mitigatable by review diligence, which both lanes have measured to be
insufficient.

Projection regenerated via the generated-artifact gate; 5 agreement
witnesses pass.

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

* State the rule as the census can decide it, and refuse the second borrowed receipt

Side-chat review found that this row's rule and this row's instrument were
not asking the same question, and that a second receipt did not belong.

THE RULE AND THE LENS DISAGREED.

The recognition rule asked whether an operation "can return two different
results because of" the field. That is semantic INFLUENCE. The next-rung
lens asked only whether some function destructures the field. That is
SYNTACTIC USE. They are not equivalent: a function may bind a field into a
dead binding, or compare it inside an arm already decided, leaving the
answer invariant while a use census reports the wall present.

Shipping both would have reproduced, inside this row's own enforcement,
exactly the false coverage the row exists to name.

Narrowed to the mechanically decidable population: no RESOLVED,
NON-CONSTRUCTION READ anywhere in the field's dependent production closure.
Both qualifiers carry weight. RESOLVED, because a consumer may sit in
another module or reach the field through an alias, so a textual miss would
report inertness that is not there. NON-CONSTRUCTION, because the
constructor body reads every field by definition -- a census counting that
read finds no inert field anywhere and is permanently green.

The three-appearance tell is demoted to what it is: a candidate generator,
the cheapest way to find one, never the adjudicator. The influence residue
goes to live_argument_threaded_past_the_arm_that_decides, which already
exists, rather than being absorbed here.

THE OOBE RECEIPT IS A DIFFERENT CLASS.

`OobeBrowserSessionReady` was carried as a fifth receipt. Whole-tree
resolution found NO construction anywhere, so no field instance was ever
produced and then ignored. That contradicts this row's own boundary
sentence, which requires a consumer that EXISTS, executes on every run, and
is green while one field it carries goes uninterrogated. The remedies
diverge too: an unread field needs a question that consumes it, an
unproducible success surface needs a construction path or the deletion of
the advertised state.

Two candidates from two lanes are now admitted by resemblance and refused by
the rule. Both refusals stay in the row. That pair is the evidence the
boundary is enforced by applying the rule rather than by asserting it.

THE CAPTURE RECEIPT'S GRAIN WAS TOO COARSE.

The outer response discriminant WAS read, and reading it advanced the stage.
What nothing examined were the three strings inside the capture payload. The
receipt now says payload rather than coproduct, because a receipt that
misplaces its own subject is not a receipt.

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

---------

Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com>
Co-authored-by: Claude Opus 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