Skip to content

Phase 10: deviation reconciliation — every repair pinned, the fiber race and the gate tests - #103

Merged
Wahbeh-Mohammad merged 13 commits into
mainfrom
10-phase-10-deviation-reconciliation-and-release-readiness-tests
Sep 25, 2026
Merged

Wahbeh-Mohammad merged 13 commits into
mainfrom
10-phase-10-deviation-reconciliation-and-release-readiness-tests

Conversation

@Wahbeh-Mohammad

Copy link
Copy Markdown
Contributor

Part of #34. Second PR of phase 10's stack — the tests — on top of the code PR. 31 files, +823 / −15.

  • Every repair pinned, each test written first and seen red on main for 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.rb in dexpace-transport-async_http — XCUT-12's fiber form against the real BearerStamper and AsyncBearerStamper under a reactor: N fibers, exactly one provider fetch; a thread-identity mutant turns it red.
  • Test-quality repairs from the inbound list and the leftover notes: the RETRY-42/RECOV-28 eight-thread test uses per-thread scripts, REDIR-23 drops its ten-second wall-clock bound, the OBS-8 race test uses a barrier, four tests stop reading the live materialisation ceiling (PinnedCeiling), builder_test.rb's host K.
  • Gate and probe tests: ledger_audit_test.rb, spdx_rbs_test.rb, sole_parse_test.rb against their fixture workspaces; chapters_test.rb with the negation and forward-binding cases.

Full bundle exec rake green 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.

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 Wahbeh-Mohammad added type:docs Documentation only spec:deviation Deliberate, recorded divergence from the normative contract labels Sep 25, 2026
@Wahbeh-Mohammad
Wahbeh-Mohammad changed the base branch from 10-phase-10-deviation-reconciliation-and-release-readiness to main September 25, 2026 18:37
@Wahbeh-Mohammad
Wahbeh-Mohammad merged commit 0832703 into main Sep 25, 2026
2 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

spec:deviation Deliberate, recorded divergence from the normative contract type:docs Documentation only

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant