Phase 10: deviation reconciliation — every repair pinned, the fiber race and the gate tests - #103
Merged
Wahbeh-Mohammad merged 13 commits intoSep 25, 2026
Conversation
Status maps every three-place code with #standard? for the protocol range (HTTP-10); Protocol admits HTTP/1.0 (HTTP-33); URL.parse! wraps every URI error and refuses a host-less http URL (HTTP-47); Model.own drops a default proc; the HeaderSyntax predicates are total; a closed stream is refused at Body.stream; the NaN and Complex duration guards; the configuration chain no longer nests per configure (CFG-13); the async logging step stops counting the caller's continuation; the proxy warning's credential belt is unanchored (OBS-11, CFG-22). Every shipped signature gains the SPDX header (NFR-13). The runtime manifest gains Protocol::HTTP_1_0 and Status#standard?; the pins the repairs invalidated move with them.
Both ResponseMappers now hand HTTP/1.0 and any three-place status to the model (TRANSPORT-24); their YARD says so, and net_http's stray @decode_content tag is backticked. The adapter pins that used HTTP/1.0 as the unmappable head now use HTTP/1.2. Every shipped signature in the four adapter gems gains the SPDX header (NFR-13).
TransportSuite.run delegates to Runner.run, tearing its fresh cases down through the around wrapper so Runner is not widened. The default gem-name rule in PackagingCase reaches all six namespaces: -core is the root and http/json are acronyms (NFR-15). The NFR-13 pin over this repository's own signatures now expects :passed.
Twenty-four blocking gates, the three new ones in DEFAULT_GATES and in CI's gates job, each with a fixture workspace that turns it red. The require allowlist refuses a dexpace/ path with a dot segment, and the rubocop gate runs with --ignore-parent-exclusion.
A requirement ID attributed to a product-spec chapter that does not carry it, read clause by clause, with ranges expanded and negations skipped.
All nineteen rows carry a verdict citing gems/ paths and defined constants, and the amendment set is C1-C18. It rides here because gates:ledger_audit reads it at run time.
Review round 0 of phase 10 found four code-layer defects. R0-4: the proxy warning belt stopped at the first '/', '?' or '#', so a password holding one leaked its prefix into Kernel#warn and the config sink. ProxyResolution now scrubs the raw value from the authority's start through the LAST '@' before the redactor runs. R0-5: Status.of still threw outside 0..999, narrower than HTTP-10's "any code MUST return a Status". Construction is now total over Integer; #standard? stays the protocol range. R0-6: docs/deviations.md row 10 cited send(:new) as the bypass, but it runs the validating #initialize. The row is now "confirmed, narrower" (allocate and duck typing remain) with amendment C19. R0-8: the chapters check listed "appears in" as a negation, blinding it to the usual positive attribution. An ID run followed by that phrase now binds forward to the chapter it introduces.
The one rubocop:disable phase 10 added in tools/ledger_audit.rb
carried no reason; it now says why the row check threads the root
and the resolver (review round 1, R1-3).
The chapters check's forward "appears in" binding turned a negative
sentence ("SEAM-13 does not appear in <chapter>") into a positive
attribution. NEGATION gains "not appear in", "does not appear" and
"do not appear" (R1-4).
Review round 2 (R2-2) found two more negated spellings of 'appears in' that bound forward and would fire as a wrong attribution: 'never appears in' and 'doesn't appear in'. Add 'never appear' and "n't appear" to the chapters check's NEGATION union; 'appears nowhere' was already there.
One failing-first test per repair, each run red on the untouched base; a fiber race under a real reactor proving BearerStamper and AsyncBearerStamper fetch once (XCUT-12, AUTH-34, AUTH-37); five interleaving- or environment-dependent tests made deterministic, with PinnedCeiling holding the materialisation ceiling at its default. Each new gate is tested through its module and through its rake task against a fixture workspace, and the chapters check keeps the two phase-8 pre-correction lines as regression fixtures.
Seven proxy spellings whose password holds '/', '?', '#' or a second '@' now assert that neither Kernel#warn nor the config sink carries the username or any password prefix (review round 0, R0-4). Two chapters cases prove an "appears in" attribution binds forward: a wrong one fires, a right one does not, and the phase-5 two-run shape no longer binds its second run to the first run's chapter (R0-8).
Three proxy spellings put an '@' inside the password ahead of a reserved character; a scrub through the first '@' leaves c/, b# and y/ in the warning, and the committed case now fails on that mutant on 4.0.6 and 3.2.11 (review round 1, R1-1). A chapters case drives "does not appear in", "do not appear in" and "did not appear in" through the probe and expects no finding (R1-4).
The chapters check's negated-verb case now also drives 'never appears in', "doesn't appear in", "don't appear in" and 'appears nowhere in' (review round 2, R2-2). Removing 'never appear' or "n't appear" from NEGATION turns the case red on the spelling it covers.
Wahbeh-Mohammad
changed the base branch from
10-phase-10-deviation-reconciliation-and-release-readiness
to
main
September 25, 2026 18:37
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of #34. Second PR of phase 10's stack — the tests — on top of the code PR. 31 files, +823 / −15.
mainfor the stated reason (the checklist's "Repairs" table records what each printed on the untouched base), including the proxy scrub over every hostile spelling the reviews found (a first-@scrub mutant and a no-scrub mutant both go red on 4.0.6 and 3.2.11).fiber_single_flight_test.rbindexpace-transport-async_http—XCUT-12's fiber form against the realBearerStamperandAsyncBearerStamperunder a reactor: N fibers, exactly one provider fetch; a thread-identity mutant turns it red.RETRY-42/RECOV-28eight-thread test uses per-thread scripts,REDIR-23drops its ten-second wall-clock bound, theOBS-8race test uses a barrier, four tests stop reading the live materialisation ceiling (PinnedCeiling),builder_test.rb's hostK.ledger_audit_test.rb,spdx_rbs_test.rb,sole_parse_test.rbagainst their fixture workspaces;chapters_test.rbwith the negation and forward-binding cases.Full
bundle exec rakegreen on 4.0.6 at this tip: 4,232 runs / 74,996 assertions / 0 failures / 9 skips (the base's nine, each named by ID) / 99.83 %. 3.2.11 matrix set 4,040 runs / 5 skips / 96.11 %; 3.3.12 4,232 runs / 9 skips.