feat(process): one confirmation runs a set to its end, within what its card showed; no card for a change the person may not make #113

Open
james.maes wants to merge 6 commits from feat/one-card-for-a-set into develop
pull from: feat/one-card-for-a-set
6 Commits
Author SHA1 Message Date
james.maesandClaude Fable 5.2 18e893b835 fix(process): a card shows all a screen says; a screen that says more than a card shows is not passed
maven / build (push) Successful in 9m20s
build / maven (push) Successful in 9m20s
The first card showed the first 300 characters of a screen's text and then
passed the screen. It now shows the whole text (up to 2,000 characters), and
a screen whose text is longer is one the card did not show in full: the run
stops there.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
2026-11-15 05:42:27 -06:00
james.maes d6bfe77c78 Merge branch 'fix/render-widget-follows-data-access' into feat/one-card-for-a-set
# Conflicts:
#	CHANGELOG.md
#	UPGRADE.md
2026-11-15 05:31:32 -06:00
james.maesandClaude Fable 5.2 50845aa99b fix(tools): render_widget follows the assistant's data access; no widget is rendered until a host allows it
maven / build (push) Successful in 8m50s
build / maven (push) Successful in 8m56s
A widget is code of the application and can show rows of any table, so
render_widget could hand a model the rows of a table the assistant may not
read. The tool now refuses, before the application is asked, every widget
the host did not allow by name (withAllowedWidgetNames, empty by default),
one it hid, and one that reads a table the assistant may not read
(new: withWidgetTables).

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
2026-11-15 05:30:57 -06:00
james.maesandClaude Fable 5.2 47d3e34f8c docs(process): the design of one confirmation for a set; the card's records and what they were, in the API
docs/one-card-for-a-set.md is the design and the safety argument for parts A
to D; README, UPGRADE, CHANGELOG and the agent notes follow it. UI API
extension assistant 1.11.0 (additive): AssistantActionV1.recordCount,
records and recordsBefore for a run over a set.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
2026-11-15 05:28:55 -06:00
james.maesandClaude Fable 5.2 583f8f1f9d test: the existing security tests follow 'no card for what cannot happen'
A person the application refuses is refused before a card where the
application says so beforehand; the confirm-time refusal (a permission that
goes between the card and the confirmation) keeps its tests, with the UI's
own status and message. The tool-set file changes in one description
(run_process), replaced as text.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
2026-11-15 05:23:13 -06:00
james.maesandClaude Fable 5.2 11fc143e6d feat(process): one confirmation runs a set to its end, within what its card showed; no card for a change the person may not make
A confirmed run_process goes through the process's own init and step
operations as the person and passes a screen for them only when it shows
nothing their card did not: its text and inputs were on the card with the
values the process has now, and a review counts exactly the records of the
card and, with every record validated first, has no warning and no error.
Anything else comes back to the person with a new card and nothing stored.

The set is frozen by primary key and by one digest over its records as the
person read them; a set that changed is not run. The card keeps what the
records were (how many, a sample of 20) and lists the whole set by name.

The assistant no longer creates a job: when the application itself hands the
work to a background job, the job is the person's, it is waited for, and its
outcome (rows done, failed and why) is the card's. A job the application
created waiting is cancelled and the run reported as not done.

A change to records of a table is proposed only to a person the application
lets make it (what it tells their own screens); otherwise they are told so
and there is no card.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
2026-11-15 05:09:34 -06:00