Skip to content

fix: a run being stopped says so until it has ended - #1253

Closed
santoshkumarradha wants to merge 12 commits into
santos/devfrom
fix/a-run-being-stopped-says-so
Closed

santoshkumarradha wants to merge 12 commits into
santos/devfrom
fix/a-run-being-stopped-says-so

Conversation

@santoshkumarradha

Copy link
Copy Markdown
Member

Draft until #1250 lands; this branch sits on it. Body follows.

🤖 Generated with Claude Code

santoshkumarradha and others added 12 commits September 19, 2026 00:45
The line exists so the engine sees a person's gestures in the order they
were made. The run's summary, a sentence a model writes under a budget of
ten seconds that nobody pressed for, was asked through it, and stood in
front of whatever a person did next. Measured on a real screen: a press on
a run's row waited 7.6 s for a read that took 2 ms, and a stop or a pause
pressed in that window would have waited the same.

The summary is now asked beside the line, its fold unchanged. A pause
pressed while the summary is held on a channel is answered before it
returns, gestures made meanwhile still reach the plan in the order they
were made, and a structural law names with its reason every door that may
be asked beside the line, so a gesture cannot be moved there.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The follow was offered its read on every tick of the paint clock and held
back only while one was out, so a fast engine was asked again the moment it
answered: 509 reads over the wire in ninety seconds on a real screen, about
six a second, for one open page. It now reads once every three seconds, the
rail's own beat, counted from the last time the page was read for any
reason, and only while the task is queued or running. A page on a task that
has ended is read once, to open it.

Counted through the real server and client: twenty ticks a beat over five
beats cost 120 reads before and cost five now; twenty beats on an ended
task cost none. The follow stays in the ordered line because its fold
replaces the page and a note re-reads it too.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Every verb refused the run's own task, so a run a person stopped had no
ending the store could hold: it stayed open and the next hand-off in the
same conversation adopted it, stopped work included. StopRoot cancels the
run's task and every task still open in one transaction, leaves every
ended task as it ended, and is a no-op on a run that is already over.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
A run's rows wear task numbers and are not in the task graph, so the stop
every surface sends for one (task:N) was refused with 'there is no task N in
this session' and the run carried on to its own landing: four of four on the
real binary. The run was started on a context nothing could cut and no
cancel was kept. The page's stop on the run's own task was refused with the
store's sentence about who owns what.

The id a surface already sends is now resolved to whoever owns the row: the
live run first, the graph second. A stop ends the run in the store first (so
no part of it reads as a failure and the next hand-off cannot adopt it), cuts
the context every worker and call runs under, and keeps what was made on the
run's own branch without putting anything in the person's folder. The person
is told once where the work is and how it comes in or goes away. A stop on a
joined row ends that work only. The page's stop on the run's task is the same
stop.

A ledger law lists every function that publishes a row in a state a stop
means something in, with the cancel kind that reaches its owner and the test
that proves it by stopping one.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…offers no verb the store refuses

On the run's own page the foot offered 'x stop it' and 'p pause', and the
store refuses both there for every caller, so both answered 'the harness
owns the root task'. x on the run's own task now raises the stop card (the
page steps aside for it, as a job's page does) and the card's 'stop it' ends
the run through the plan's own door; p is not offered there and is a letter,
because nothing holds a whole run. A stop on a run nobody is running any more
ends it in the store. A hold asked of a run answers in a person's words.

A law holds the foot to the store by property: for every kind of row a run's
store can hold, every word the foot offers is pressed against a real store
over the real wire, and none may be refused.

The page-open hold let nothing past: ctrl+c is now read before the hold and
before the page, every ending of the read ends the hold (an answer for a
front the person left used to leave it standing), and a key that leaves the
page ends the replay. x typed while the run's own page opens reaches the card.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…n it

Measured on the real binary: a run stopped in its first seconds drew 'branch
kept' beside 'it had changed nothing'.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
A surface asks for the run's summary again whenever its rows move, and a stop
moves them, so every stop taken from the run's page was followed about twenty
seconds later by one more model call about work the person had just ended the
spend on: three of three in the usage ledger on the real binary. The run's own
task is cancelled by nothing but a person's stop, so that state is the test,
and the last reading the run had stands.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The engine answers a stop once every worker is home, and a worker inside a
step can take seconds to die: on the real binary a run's row read 'running'
for seven seconds after the person had taken 'stop it'. The row is published
as still running and stopped by a person the moment the stop is taken, which
is the reading every stopped task's row already has, and a second press in
that window answers that it is already stopping.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@santoshkumarradha

Copy link
Copy Markdown
Member Author

Closing without landing: on the real binary in hosted mode this change alters nothing a person sees.

The two-arm drive, on the Linux test box, both binaries built with make build. One arm is #1250 alone (cdd8e777a), the other is this branch (004b69f26). Same drive: a live run under the belt, the stop taken from the conversation 40 seconds in, the screen kept every 50 ms for six seconds.

#1250 alone this branch
stop card raised yes yes
conversation line in the first frame stopping task 1 (…) — its branch is kept the same
side column foot during the window 1 running 1 running
status line during the window working working
length of the window 0.30 s 0.40 s
row after the window stopped stopped
landed in the folder nothing nothing

A diff of one in-window frame between the arms, with spinners, clocks, prices and hashes normalised, differs only in the tab strip. The frames are kept on the test box under ~/src/doe/peer/stoppingrow-cmp-before and stoppingrow-cmp-after.

Why. The branch publishes the run's row as running and stopped by a person the moment the stop is taken. The mark reaches the row, and no drawn word reads it. The surface spells stopping for a task in one place, the header of a task's own page for an ordinary task, and a run's row never opens that page: it opens the run's page, which reads the plan store. Everywhere else the engine's own law holds on purpose, that a stop still going through is still running, with the spinner turning. The 7.09 s figure in the entry measured 1 running leaving the foot, which is the wind-down itself and is what every stopped task has always read. The person is already told at once by the conversation line, and a second stop already answers that the run is stopping.

The lesson. The test here asserted a notice, not a screen, so it was green over a change nobody can see.

What the drive did find, and what follows as its own change: in that window and after it, the run's own page reads the store, where a stopped root is cancelled, and spells that incomplete, while the side column says running and then stopped.

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