Skip to content

spec: 018 phase 2 — instruments (no page changed) - #200

Merged
iancooper merged 9 commits into
masterfrom
spec/018-phase2
Oct 12, 2026
Merged

iancooper merged 9 commits into
masterfrom
spec/018-phase2

Conversation

@iancooper

Copy link
Copy Markdown
Member

Summary

Spec 018 phase 2: the instruments the repair phases (3–7) work from. No page is changed, so this PR asks for no site sign-off.

Gates

Gate Result
blockcheck --report 993 blocks: 303 BUILT, 673 FAILED, 17 SKIPPED — 0 findings, exit 0. 548 assemblies on each pin
linkcheck 166 files, 0 broken
pagelint 0 errors / 512 warnings / 162 pages; --plant 5 / 5
shape · redirects · optioncheck · symbolcheck unmoved
versioncheck 18 stale of 18, red, and red on master too (below)

BUILT went 299 → 303: the four blocks that build once Program is staged as a top-level file, which is exactly the set task 2.1 predicted. The corpus went 990 → 993 when master was merged in: #199's three Telemetry.md blocks, which are FAILED, as master's own gate already has them.

Two things for you

  1. versioncheck is red, and not because of this PR. Brighter 10.8.0 reached NuGet on 2026-10-06. The five tutorial pages pin 10.7.0, and master's versions job has failed on every scheduled run since. Bumping the pins changes the published site, and it should move with refs.csproj's 10.7.0 and a replay of each tutorial. I propose doing it as its own change, outside spec 018. Shall I?
  2. After the merge, may I delete the head ref spec/018-phase2?

🤖 Generated with Claude Code

https://claude.ai/code/session_01LjnH2pJ98aMabu1MyTpRxy

iancooper and others added 9 commits October 11, 2026 13:38
Instruments for the compile residual, before any page is repaired.

- 2.1 probe/predict.py: the wrapper and Shouldly build 0 blocks; Program 4
- 2.2 --classify: a second, receiver-aware compile, five columns, six classes
- 2.3 red-proof; found D1 resolving Order to Redis and Context to Polly -> D8
- 2.4 probe/reconcile.py: 14 disagreements, all explained; CS0308 gap repaired
- 2.5 handler wrapper (abstract Holder, fully qualified base), D9 Fallback
- 2.6 V4 pin: refs-v4.csproj, pages.tsv pin column, pairing rule, drift check
- 2.7 Shouldly 4.3.0 in both pins (545 -> 548 assemblies)
- 2.8 a statements block naming Program is staged as a top-level file

Work in progress: CI's blocks job does not build refs-v4 until 2.12.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LjnH2pJ98aMabu1MyTpRxy
Friction #77: an error against a scaffold unit's tree was a WARNING on a
run that exited 0. The Roslyn tool now keeps each one once (unit, code,
position, message) and prints it as a `scaffold error:` line; --report
lists them under "scaffold unit does not compile" and counts each as a
finding. The summary line gains ", N compile errors".

Red-proof: probe/unit_plants.py. A CS0246 planted in a scratch copy of
PageContext.cs, invisible to the unit rule, adds exactly one finding;
the real units give 0. --report otherwise unmoved: 990/303/670/17.

Also: blockcheck.csproj now removes refs-v4/** from its sources. Left
out at 2.6, it made blockcheck fail CS0579 once refs-v4 was built.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LjnH2pJ98aMabu1MyTpRxy
Friction #80: rule 6's debt could only be reconciled per page against a
worktree at the phase's base. --per-page prints page<TAB>warnings, sorted,
on stdout, with the summary line on stderr, so a phase's debt delta is a
diff of two outputs. It combines with paths and --changed, not --fix.

Two methods agree: 66 rows summing to 512, byte-identical to a count from
the full run's (warning) lines. Red-proof two-way: a page with warnings
and one without; an error sets exit 1 and is not a row. The task's 524
was stale since #195 and now reads 512.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LjnH2pJ98aMabu1MyTpRxy
Friction #76, design D7. probe/net10.py restores both pins on net10.0
in scratch and compiles the same staged corpus against both reference
lists. The framework alone does not restore (NU1605: Brighter's EF Core
packages need EF Core >= 10.0.10 on net10.0), so the copies raise the
pin's three framework-tied packages as a net10.0 reader gets them.

17 packages resolve at a different version, 27 drop out in-box, 1 is
added; 548 -> 553 assemblies. No verdict moves, on 973 judged blocks,
and no FAILED block's codes. Control: the net10.0 list without TickerQ
moves 5 TickerQScheduler.md verdicts. D7's condition is not met.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LjnH2pJ98aMabu1MyTpRxy
CI's blocks job builds refs-v4.csproj between refs.csproj and
blockcheck.csproj, the order 2.9's Compile Remove makes safe.

tools/README.md: a phase 2 paragraph; row 9 as it reads at the phase's
commit (990/303/670/17, 548 assemblies per pin, 30 blocks and 4 pages
on the v4 pin, 0 compile errors); three builds and the drift check's
exit 2; four scope lines, the per-pin suffix and unit compile errors;
--classify rewritten for five columns, six classes and D8.

Row 9's "0 findings" holds once 2.13 writes the four baseline rows, and
2.13 re-derives it. AC14's corrected form counts 1 for each new figure.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LjnH2pJ98aMabu1MyTpRxy
Four rows, the blocks the Program staging (2.8) made build:
DarkerConfigurationReference.md #1, #2, QueryPipelinePolicies.md #1 and
TickerQScheduler.md #2. Three rows re-admitted under the v4 scaffold
name (2.6) move from f6a9a7c. All seven at 937db00.

Exactly 2.1's predicted four, none lost; baseline 303 = BUILT 303.
--report: 990/303/670/17, 0 findings, exit 0. Rule 8 clean on the
three pages. tools/README.md row 9 re-derived: unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LjnH2pJ98aMabu1MyTpRxy
AC8: every column comes from --classify (class counts, FAILED) or the
gate's --report (BUILT), by probe/groups.py, whose command sits above
the tables. Rows: the 64 off-tranche pages with a FAILED block plus the
three tranche pages whose FAILED blocks are all on the V4 pin.

67 pages, 634 FAILED: 140 parse, 36 built-by-using, 93 defect,
14 same-page, 75 values, 276 page-type; 37 with nothing BUILT. Two
methods agree (630 off-tranche + 4 V4). S1-S3 match the design's
working figures; S4 and S5 differ only by the three V4 pages.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LjnH2pJ98aMabu1MyTpRxy
Gates against the prediction, at 1b05c3e and merged with #199:
blockcheck 990 -> 993 blocks (#199's three Telemetry.md blocks, FAILED),
303 BUILT, 0 findings; 548 assemblies on each pin; every other gate
unmoved but versioncheck. versioncheck reads 18 stale of 18: Brighter
10.8.0 reached NuGet on 2026-10-06, master's versions job has failed
daily since, and the bump is put to the maintainer as its own change.

No page changed, so obligation 19 has nothing to read. tools/README.md
row 9 re-derived at the merged head: 993/303/673/17.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LjnH2pJ98aMabu1MyTpRxy
@iancooper
iancooper merged commit c4f75c7 into master Oct 12, 2026
7 of 10 checks passed
@iancooper
iancooper deleted the spec/018-phase2 branch October 12, 2026 07:26
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