docs(plans): the collection absent-aggregate, and two stale basis claims
What this does
The collection-mode plan's half of the amendment
S30 :108
gates the merge path on, plus two stale basis claims and Step 4's Status row.
Step 2's row five narrows
The no-contribution table sent an established absence to
remote.ErrFileNotFoundOnUpstreams whatever else the set held. Row five's
condition is now "an absence established at every consulted position", with no
per-outcome carve-out, and row six widens to cover both shapes short of it: no
absence at all, and the mixed case. The table keeps six arms.
So all three contributor-side failures flip, not just one:
[PositionAbsent, PositionOmitted], [PositionAbsent, PositionSlow] and
[PositionAbsent, PositionPanicked] each answer
remote.ErrUpstreamUnavailable. Each of the three is a consulted position that
established no absence, which is what leaves the set short of the quantifier.
PositionDenied and PositionIneligible are not consulted positions, so they
do not make a set mixed and nothing changes for them.
Every passage that stated the superseded reading moves with the table, because a single-site fix is how this reopens. Grepped and fixed together: the verdict-is-a-pure-function paragraph, which now separates the two mechanisms (a veto for an ineligibility or a data error, a quantifier for the three omissions); rows five and six themselves; the superseded-ruling paragraph under the table; the last row's own paragraph, which now carries two shapes; Step 2's Acceptance, whose both-directions pin moves from dropping the absence to dropping the failure; Step 5's record-versus-verdict argument, which now says "in the merged code today"; the Step 2 table amendment entry, both its lead (row five is a third reversal, and !2541 (merged) does not implement it) and its first reversal's quote; the absent-aggregate entry below; and the Testing Strategy bullet.
S30:554 is dropped as the support for the old reading. It answers 200 from
the remaining contributors, and this set has none.
The absent-aggregate entry
## Dependencies gains the entry for "a collection's absence must be
established at every consulted position, not at any one of them". It names
!2699 (merged)
as the authoring MR for S13, S31 and S30's own bookkeeping, and says !2699 (merged)
merges before Step 4's MR.
The entry also books what the amendment leaves owed: a code correction against
merged Step 2. CollectVerdict's flags.absent arm returns
remote.ErrFileNotFoundOnUpstreams whenever a record is PositionAbsent,
nothing contributed, and no position was ineligible or held an unserved
presence: the flags.ineligible and flags.unservedPresence arms ahead of it
take rows three and four out of the arm first. So all three mixed shapes above
reach it and return the not-found.
What the correction lands against is the merged suite, not this plan. The plan
states the amended reading throughout now; merged !2541 (merged) still pins the
superseded one, and in more sites than that one test. The entry itemizes all of
them, with line numbers read at 14524a872 because collect_verdict.go
postdates the plan's basis: the narrowed arm and its own comment, which
states the superseded rule verbatim and already disagrees with
ErrFileNotFoundOnUpstreams's contract; the errNothingContributed return's
comment, and its message; TestCollectVerdict_FailureArms's
absence-beside-an-omission row; AnUnservedPresenceWithholdsTheNotFound's
second half and its comment; and the named test's name, doc comment, assertion
message and both halves of each subtest. The three subtests share a single
require.NotErrorIs(..., remote.ErrUpstreamUnavailable) in the table-loop
body, so there is one assertion to invert and not three.
Two points the entry settles rather than leaving to the correction's author.
The FailureArms row keeps its place instead of folding into the no-absence
row beside it, because [PositionAbsent, PositionOmitted] is the only row
reaching the flags.absent arm with an absence beside a contributor-side
failure, and so the only one that reddens a regression to the broad arm, with
the PositionDenied row reddening an over-narrowing. And the named test's
second half stays although the pairing collapses, because
recordsOf(tc.failure) is the only set in the file holding a lone
PositionSlow or a lone PositionPanicked.
The correction is filed as
#1382 (closed),
a type::bug with a priority::. #1247 (closed) is Step 4's own delivery issue and
#1245 (closed), Step 2's, is closed, so neither is the home, and a type::feature step
issue cannot carry a priority::. The entry gates it the way the neighbouring
no-consumer window entry does: before this plan's own Step 6, and in any case
before S31's Step 13 part 2. Nothing reaches the defect today, because no slice
wires Collect.
The 404 that mixed case answers is forbidden by three specs, not two. S13
says so twice, in #### Collection mode and in the Error Cases row under it,
and S13 is the strongest citation because CollectVerdict lives in
internal/virtual.
The row-four entry is retired as settled
It booked a second S13 amendment, for an established absence beside a
PositionDataError. Such a position establishes no absence, so under "every
consulted position" S13 no longer sends that shape to the not-found. The two
specs agree on it without a second amendment.
Four passages called that amendment owed, and all four now record it as
closed: the entry's own merge order, the bolded row-four sentence inside it,
Step 2's row-four reasoning, and ## Open Questions. ## Open Questions also
books its third S13 item as !2699 (merged) rather than as owed, and its closing list of
the remaining ## Dependencies entries gains the CollectVerdict correction
above with its gate.
Two basis claims corrected
The preamble said "S30 and S31 are byte-identical at the basis and at main".
They are not, by more than a hundred lines between them.
The citations themselves are correct and are left alone. Checked against
the plan's own pinned basis with git show 07f4e8521:<path>: S30:549,
S30:551, S31:1396, S31:1414-1415 and S31:1861-1863 each resolve to the
text the plan attributes to it. The defect was the byte-identical sentence,
which invites a reader to resolve those numbers against main, where they land
on unrelated lines. The paragraph now says that every spec line number in the
document is a basis line number, and gives the command that reads one.
Post-basis text is cited by section anchor instead, which is what the new mixed-case citations use.
The npm-taxonomy item's list of eight md count sites is a basis set in the
same way, and main has since added a ninth to the same group. The item says
so and asks for the set to be re-derived against the branch's own merge base
rather than taken as closed.
Status table
Step 4's row records !2698 (merged). The plan has a single writer, which is why the row lands here and not in the step MR.
The stack
| Order | MR | What it carries |
|---|---|---|
| 1 | !2699 (merged) | the S13, S31 and S30 spec text |
| 1 | !2700 (merged) (this MR) | the plan's reading and Step 4's Status row |
| 2 | !2698 (merged) | Step 4, the collection entry point |
!2699 (merged) and this MR are independent of each other and may merge in either order. Both merge before !2698 (merged).
Related to #1382 (closed)