From 1898be6cb0ba94c9a7d512ce87e57bfb386fe647 Mon Sep 17 00:00:00 2001
From: Joseph Ferano
Date: Sat, 12 Sep 2026 09:08:35 +0700
Subject: [PATCH] Repin the break banner, which has numbered its restarts since
4a6a8fa
The .out file and the two places that quote it in prose had the banner
from before restarts were numbered, so check.sh had been red on
breakdemo since that commit. The .out is regenerated from the same
build --dev and timeout run check.sh does, rather than typed: the leading
blank line and the three spaces before each number are part of what is
compared.
The page gets a sentence it was missing. A number in front of a restart
is not decoration -- a restart is taken by position, because an inner one
can shadow an outer one of the same name -- and the banner showed the
numbers without the page ever saying what they were for.
---
BUILT.md | 4 ++--
NEXT.md | 10 +++++-----
web/examples/breakdemo.out | 4 ++--
web/index.html | 12 +++++++-----
4 files changed, 16 insertions(+), 14 deletions(-)
diff --git a/BUILT.md b/BUILT.md
index 1d2fda1..91cd216 100644
--- a/BUILT.md
+++ b/BUILT.md
@@ -865,8 +865,8 @@ frame that erred with nothing unwound, so the condition and every restart betwee
```
flan: unhandled Missing — stopped, not dead.
- restart: retry
- restart: use-placeholder
+ 0. restart: retry
+ 1. restart: use-placeholder
```
Four decisions, each of which is the reason something is where it is:
diff --git a/NEXT.md b/NEXT.md
index eea97ea..7c1f927 100644
--- a/NEXT.md
+++ b/NEXT.md
@@ -298,11 +298,11 @@ plan.org's single line on it (831) names a `for` the language does not have and
### Bugs found and not yet fixed
-- **`web/examples/breakdemo.out` is stale and `check.sh` fails on it.** Commit `4a6a8fa` made the break banner number
- its restarts (` 0. restart: retry`) and the `.out` was never repinned; `web/index.html` quotes the same stale
- banner. Repinning it is not a one-liner — the program stops at a break loop and waits for a choice, so running it
- from `check.sh` hangs rather than printing. It needs the harness to drive the socket, or the demo needs to end by
- aborting.
+- ~~`web/examples/breakdemo.out` is stale and `check.sh` fails on it.~~ **Fixed.** Commit `4a6a8fa` made the break
+ banner number its restarts and the `.out` was never repinned. Nothing had to drive the socket in the end:
+ `check.sh` already builds this one `--dev` and runs it under `timeout 5`, keeping what it printed before it
+ stopped, so the repin was the `.out` plus the two prose copies of the banner — `web/index.html` and `BUILT.md` —
+ and a sentence on the page saying what the numbers are for, since a restart is taken by position.
- ~~A shadowed restart is offered and cannot be taken.~~ **Fixed.** A restart is taken by *position* now:
`(:op "restart-at" :index N :name NAME)` on the daemon, `restart-at N NAME` on the agent, and a numbered
diff --git a/web/examples/breakdemo.out b/web/examples/breakdemo.out
index 4383858..5ace326 100644
--- a/web/examples/breakdemo.out
+++ b/web/examples/breakdemo.out
@@ -1,4 +1,4 @@
flan: unhandled Missing — stopped, not dead.
- restart: retry
- restart: use-placeholder
+ 0. restart: retry
+ 1. restart: use-placeholder
diff --git a/web/index.html b/web/index.html
index 0760c5c..87299f9 100644
--- a/web/index.html
+++ b/web/index.html
@@ -983,12 +983,14 @@ frame that erred, with nothing unwound, so the condition and every restart betwe
and the top are still live:
flan: unhandled Missing — stopped, not dead.
- restart: retry
- restart: use-placeholder
+ 0. restart: retry
+ 1. restart: use-placeholder
-From there you fix the function, install it, and take a restart. Control never left
-the erring frame, so retry calls through the indirection cell and reaches
-the new body. Installing while stopped is allowed; there is no frame in progress.
+From there you fix the function, install it, and take a restart. The numbers are
+how one is taken: a restart is chosen by position, because an inner one may shadow an
+outer one of the same name and a name alone could not tell you which you were getting.
+Control never left the erring frame, so retry calls through the
+indirection cell and reaches the new body. Installing while stopped is allowed; there is no frame in progress.
The break loop lives in vendor/agent, which is an optional package. A
program that does not import it leaves the hook null and stops the old way — the message