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.
This commit is contained in:
Joseph Ferano 2026-09-12 09:08:35 +07:00
parent 255367c6dc
commit 1898be6cb0
4 changed files with 16 additions and 14 deletions

View File

@ -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:

10
NEXT.md
View File

@ -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

View File

@ -1,4 +1,4 @@
flan: unhandled Missing — stopped, not dead.
restart: retry
restart: use-placeholder
0. restart: retry
1. restart: use-placeholder

View File

@ -983,12 +983,14 @@ frame that erred, with nothing unwound, so the condition and every restart betwe
and the top are still live:</p>
<pre><code class="sh">flan: unhandled Missing — stopped, not dead.
restart: retry
restart: use-placeholder</code></pre>
0. restart: retry
1. restart: use-placeholder</code></pre>
<p>From there you fix the function, install it, and take a restart. Control never left
the erring frame, so <code>retry</code> calls through the indirection cell and reaches
the new body. Installing while stopped is allowed; there is no frame in progress.</p>
<p>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 <code>retry</code> calls through the
indirection cell and reaches the new body. Installing while stopped is allowed; there is no frame in progress.</p>
<p>The break loop lives in <code>vendor/agent</code>, which is an optional package. A
program that does not import it leaves the hook null and stops the old way — the message