step.22.diff.txt -- narrative retro for step.22 (U5.1: the CCS
                    plane's client side). Companion: step.22.gdiff.txt
                    via ../scripts/step_gdiff (machine half).

Executed: 2026-07-22, same session as the b3u UB.1/UB.2 steps it
consumes. WORK commit eeda30f.

## Plan vs actual

+---+--------------------------------------+--------------------------------------+
| # | Planned (brief)                      | Actual                               |
+---+--------------------------------------+--------------------------------------+
| 1 | CCSService port per design §2.8      | Landed, with ONE amendment (Q-22-A): |
|   | (generate/validate/deliver/          | deliver() cannot exist against       |
|   | entitlement)                         | contract v1 -- folded into           |
|   |                                      | generate()'s Artifacts return;       |
|   |                                      | health() takes the fourth slot.      |
| 2 | ReplayCCSService, deterministic      | Landed; content-keyed (sha256 of     |
|   | fixtures                             | spec bytes), refuse-loudly on        |
|   |                                      | missing fixtures; shipped set under  |
|   |                                      | tests/fixtures/ccs/ for U5.2.        |
| 3 | B3uDevClient vs the LOCAL b3u,       | Landed + PROVEN LIVE: p5_gates.sh    |
|   | login-token auth                     | ALL PASS first invocation -- 7/7     |
|   |                                      | legs over real HTTP against a        |
|   |                                      | launcher-booted instance.            |
| 4 | (not planned)                        | The b3u-corpus ==50 tripwire fired   |
|   |                                      | mid-step (b3u grew to 52 in this     |
|   |                                      | same arc) -- resolved per Q-22-F.    |
+---+--------------------------------------+--------------------------------------+

## Surprises / genuine findings

1. **The tripwire did its job the same week it became load-bearing.**
   test_ledger_parser's ==50 comment promised "if the corpus grows
   again, this test tells the next step to re-survey" -- b3u gained
   step.51/52.txt hours earlier, and the pin fired on this step's
   first full-suite run. Better: the two new b3u files round-tripped
   byte-identically through the parametrized corpus tests with ZERO
   parser changes -- the machinery absorbed brand-new sibling data
   silently and correctly; only the count pin complained. Retired the
   pin for floor(>=50)+contiguity(1..N): b3u is a LIVE sibling now,
   growing by design.
2. **The step file is data to the machinery it documents.** Writing
   steps/step.22.txt moved the suite total by +2 (own-corpus
   parametrization) -- the first draft of this step's own numbers was
   stale the moment the file existed. Measured after, not before
   (the b3u step.51 "measure, don't sum" rule, applied same-day).
3. **The §2.8 sketch vs contract v1**: deliver(unit) was designed
   before b3u's probe law existed; against v1 there is nothing at
   rest to deliver. Folding it into generate() is not a compromise --
   it IS the §2.10 iterate-cheaply/deliver-once shape, stated
   precisely.
4. First-run ALL PASS on the live battery, including the stale-token
   transparent-refresh leg -- the UJ.4 revocation semantics b3u froze
   in its contract behaved exactly as documented, cross-repo, over
   real HTTP.

## Scope discipline

In: exactly the U5.1 row + the fired-tripwire repair (Q-22-F, a
discovered breakage in the step's own path -- fixed, named, tested).
Out and named: T3 wiring (U5.2), SCB tier (U5.3), workflows (U5.4),
foreign workspace (U5.4a), the trinity gate (U5.5), any CLI surface
(U5.2, where the consumer exists). No b3u-repo changes of any kind.

## Numbers

- New: app/ccs (5 files), 3 test files (31 tests: 24 hermetic + 7
  live), scripts/p5_gates.sh (6 sections), 3 shipped JSON fixtures,
  1 config key, 1 dependency (requests==2.34.2).
- Suite: 565 -> 602 collected (31 new + 4 b3u-corpus growth + 2 own
  step.22.txt); 584 passed + 18 skipped (11 baseline + 7 live-gated),
  0 failed.
- p5_gates.sh: 6/6 sections PASS first run (env, boot, provision,
  live 7/7, honest-skip twin 24+7skip, B-4 grep).
- Prior-test delta: exactly 2 tests touched (the fired tripwire),
  1 renamed (covers_the_whole_corpus), 0 parser/emitter changes.

End of retro.
