clay-borg/workplans
tegwick 57639623da CB-WP-0018-T01: the browser sees the end of its own game
Server::serve_end plus doc::ending, wired into both of run_game's exits.
Where the browser used to get Connection refused it now gets the ending
page with the result and the final table. It serves until the page posts
'done' (the page carries a close control), with a 600s linger so an
abandoned tab cannot hold the process open.

document() split into body() and move_section() so the ending shows the
same table rather than a second rendering of it.

The control had to be built twice and the first was worthless:
the_end_of_the_game_reaches_the_browser calls serve_end directly, and
deleting the call from run_game left it GREEN -- it tested the link and
not the chain, which is CB-EV-0012's finding recurring.
a_real_game_played_to_its_end_leaves_the_ending_on_screen runs the real
play() with a browser seat, drives a real game to its end over a real
socket, and goes red under that mutation printing an empty page -- the
reported symptom exactly.

A weak assertion of mine caught by itself: the first draft grepped the
page for location.reload, which would have forced a second script to
satisfy a test rather than a requirement. It now asserts the ending
endpoint cannot answer 'ok'.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-03 02:08:04 +02:00
..
CB-WP-0001-inner-loop.md CB-WP-0007 T01+T03: window the metric, budget it, cap meta at 25% 2026-08-01 14:12:07 +02:00
CB-WP-0002-cost-accounting.md CB-WP-0007 T01+T03: window the metric, budget it, cap meta at 25% 2026-08-01 14:12:07 +02:00
CB-WP-0003-loop-hardening.md CB-WP-0007 T01+T03: window the metric, budget it, cap meta at 25% 2026-08-01 14:12:07 +02:00
CB-WP-0004-mechanical-work.md CB-WP-0007 T01+T03: window the metric, budget it, cap meta at 25% 2026-08-01 14:12:07 +02:00
CB-WP-0005-assertion-coverage.md CB-WP-0007 T01+T03: window the metric, budget it, cap meta at 25% 2026-08-01 14:12:07 +02:00
CB-WP-0006-instrument-the-table.md CB-WP-0007 T01+T03: window the metric, budget it, cap meta at 25% 2026-08-01 14:12:07 +02:00
CB-WP-0007-session-shape.md CB-WP-0010-T01: close CB-WP-0007 2026-08-02 02:15:08 +02:00
CB-WP-0008-ship-stage-0.md CB-WP-0008-T04: CB-EV-0007 — stage 0 is shipped, and the spend curve is a V 2026-08-01 15:25:19 +02:00
CB-WP-0009-adaptive-gates.md CB-WP-0009-T04: CB-EV-0008 — the gate changes, measured 2026-08-01 15:45:08 +02:00
CB-WP-0010-consolidation.md CB-WP-0010-T03: record CommitWindow's second failed second-use 2026-08-02 02:19:23 +02:00
CB-WP-0011-inspectable-table.md CB-WP-0011-T03: evidence — the chaos roll fired, and it was right 2026-08-02 02:48:51 +02:00
CB-WP-0012-render-port.md Sync hub IDs and work-record index for CB-WP-0012 2026-08-02 04:30:45 +02:00
CB-WP-0013-instrument-corrections.md Sync hub IDs and work-record index for CB-WP-0013 2026-08-02 07:32:33 +02:00
CB-WP-0014-execute-the-javascript.md Sync hub IDs and work-record index for CB-WP-0014 2026-08-02 07:59:28 +02:00
CB-WP-0015-the-inert-clauses.md Sync hub IDs and work-record index for CB-WP-0015 2026-08-02 14:08:30 +02:00
CB-WP-0016-the-drop-target.md Sync hub IDs and work-record index for CB-WP-0016 2026-08-02 20:49:21 +02:00
CB-WP-0017-legible-interaction.md Sync hub IDs and work-record index for CB-WP-0017 2026-08-02 22:43:40 +02:00
CB-WP-0018-the-browser-is-a-client.md CB-WP-0018-T01: the browser sees the end of its own game 2026-08-03 02:08:04 +02:00