toolroll 0.9.92 → 0.9.93
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/dist/assignment-status.d.ts +1 -1
- package/dist/assignment-ui.js +2 -2
- package/dist/assignment.js +11 -3
- package/dist/browser/workspace.css +1 -1
- package/dist/browser/workspace.js +30 -30
- package/dist/browser-crew.js +2 -2
- package/dist/browser-workspace.d.ts +3 -5
- package/dist/builder.js +21 -2
- package/dist/check-facts.d.ts +124 -0
- package/dist/check-facts.js +272 -0
- package/dist/check-report.d.ts +5 -0
- package/dist/check-report.js +4 -3
- package/dist/cli.js +5 -0
- package/dist/contracts/console-api.d.ts +2 -2
- package/dist/contracts/console-api.js +2 -2
- package/dist/contracts/release-check.d.ts +25 -1
- package/dist/contracts/release-check.js +19 -0
- package/dist/desktop-update.d.ts +2 -2
- package/dist/desktop-update.js +13 -9
- package/dist/eval-hooks.d.ts +55 -0
- package/dist/eval-hooks.js +227 -4
- package/dist/flaky.d.ts +17 -0
- package/dist/flaky.js +9 -0
- package/dist/needs-you.d.ts +7 -7
- package/dist/needs-you.js +12 -10
- package/dist/operate.js +138 -18
- package/dist/project-delete.js +5 -1
- package/dist/project-knowledge.d.ts +6 -6
- package/dist/push.d.ts +10 -3
- package/dist/push.js +22 -6
- package/dist/release-adapters.js +11 -1
- package/dist/release-approval.d.ts +191 -0
- package/dist/release-approval.js +382 -0
- package/dist/release-auto.js +13 -4
- package/dist/release-card.d.ts +73 -4
- package/dist/release-card.js +168 -23
- package/dist/release-cli.js +9 -1
- package/dist/release.d.ts +30 -0
- package/dist/release.js +42 -3
- package/dist/result-acts.d.ts +3 -3
- package/dist/result-acts.js +1 -1
- package/dist/server/guards.js +1 -0
- package/dist/server/pages-assets.js +1 -1
- package/dist/server/render-release.d.ts +17 -0
- package/dist/server/render-release.js +84 -0
- package/dist/server/render-results.d.ts +0 -2
- package/dist/server/render-results.js +4 -6
- package/dist/server/render-tasks.js +3 -3
- package/dist/server/route-table.d.ts +1 -1
- package/dist/server/route-table.js +7 -1
- package/dist/server/tasks.d.ts +15 -0
- package/dist/server/tasks.js +102 -20
- package/dist/setup-guide.d.ts +2 -2
- package/dist/stop-proof.d.ts +67 -0
- package/dist/stop-proof.js +293 -0
- package/dist/store.d.ts +70 -31
- package/dist/store.js +335 -95
- package/dist/surface.js +1 -1
- package/dist/task-outcome-cli.js +19 -0
- package/dist/toolroll-update-ui.js +2 -2
- package/dist/toolroll-update.js +1 -0
- package/dist/work-index.js +7 -9
- package/dist/work-summary.d.ts +2 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.9.93 — 2026-11-06
|
|
4
|
+
|
|
5
|
+
- **Approve a release with one tap.** When a release is ready for your yes,
|
|
6
|
+
your phone gets one notification ("A release is ready for your approval")
|
|
7
|
+
that opens a single screen: what changed since the last release, the
|
|
8
|
+
GitHub checks, the full terms, and one **Approve release** button. Approve
|
|
9
|
+
and walk away: it deploys only after everything passes, and you hear back
|
|
10
|
+
only if something fails. In the terminal, `toolroll release approve` finds
|
|
11
|
+
the release itself — no task names or codes to copy.
|
|
12
|
+
- **No more "Confirm it stopped".** When a finished build's process record
|
|
13
|
+
is incomplete, Toolroll now checks the computer itself, stops anything left
|
|
14
|
+
over that it can prove is that build's, and carries on. The task says
|
|
15
|
+
"Making sure build #N stopped. This clears on its own." Releases wait
|
|
16
|
+
through it instead of stopping.
|
|
17
|
+
- **Checks record what they saw.** Each finished check now keeps an advisory
|
|
18
|
+
record of the exact code, conditions and failures, groundwork for a list
|
|
19
|
+
of flaky tests and for lessons from fixed failures. It never changes a
|
|
20
|
+
check's result.
|
|
21
|
+
|
|
3
22
|
## 0.9.92 — 2026-11-05
|
|
4
23
|
|
|
5
24
|
- **Toolroll learns which cheaper models do the job.** Every task now gets a
|
|
@@ -23,7 +23,7 @@ export declare function assignmentStatusBrief(assignment: AssignmentSnapshot): {
|
|
|
23
23
|
} | null;
|
|
24
24
|
runId: number | null;
|
|
25
25
|
primaryAction: {
|
|
26
|
-
code: "answer-agent" | "
|
|
26
|
+
code: "answer-agent" | "inspect-decisions" | "inspect-run" | "inspect-stop" | "inspect-task" | "open-pr" | "recheck-stopped" | "reconcile-run" | "sign-in" | import("./dispatch.js").DispatchAction;
|
|
27
27
|
label: string;
|
|
28
28
|
target: import("./work-summary.js").WorkTarget;
|
|
29
29
|
} | null;
|
package/dist/assignment-ui.js
CHANGED
|
@@ -31,8 +31,8 @@ export function assignmentActionHref(assignment) {
|
|
|
31
31
|
if (action.code === 'sign-in')
|
|
32
32
|
return '/settings/agents#providers';
|
|
33
33
|
// The confirmation sits on the task page, behind the password.
|
|
34
|
-
if (action.code === '
|
|
35
|
-
return `/t/${encodeURIComponent(assignment.rootId)}#
|
|
34
|
+
if (action.code === 'recheck-stopped')
|
|
35
|
+
return `/t/${encodeURIComponent(assignment.rootId)}#recheck-stopped`;
|
|
36
36
|
if (action.code === 'open-pr' && /^https:\/\/github\.com\/[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+\/pull\/\d+$/.test(assignment.publication?.prUrl ?? ''))
|
|
37
37
|
return assignment.publication.prUrl;
|
|
38
38
|
if (runId !== null && (action.code === 'open-result' || action.code === 'open-pr' || action.code === 'retry-review')) {
|
package/dist/assignment.js
CHANGED
|
@@ -252,13 +252,14 @@ export function assignmentOf(store, taskId, now, access, root, memo) {
|
|
|
252
252
|
: { code: "inspect-task", label: `Open ${successor}`, target: { taskId: successor, runId: null, decisionId: null }, access: "read", retry: "read-again" };
|
|
253
253
|
}
|
|
254
254
|
else if (!live && processFact !== null && result !== null) {
|
|
255
|
-
// Toolroll
|
|
256
|
-
//
|
|
255
|
+
// Toolroll hasn't yet proven the build stopped. It proves that itself
|
|
256
|
+
// (stop-proof.ts), so the work waits, needing no one; only when this
|
|
257
|
+
// computer can't look is it held, offering Check again — never a vouch.
|
|
257
258
|
const process = processNeedOf(processFact);
|
|
258
259
|
if ("need" in process) {
|
|
259
260
|
state = "needs-decision";
|
|
260
261
|
detail = NEEDS[process.need].sentence({ build: process.build });
|
|
261
|
-
primaryAction = { code: "
|
|
262
|
+
primaryAction = { code: "recheck-stopped", label: NEEDS[process.need].action.label, target: { taskId: current.id, runId: process.build, decisionId: null },
|
|
262
263
|
access: access.principal === "operator" ? "operator-control" : "operator-handoff", retry: "refresh-before-acting" };
|
|
263
264
|
need = { key: process.need, build: process.build };
|
|
264
265
|
}
|
|
@@ -480,6 +481,11 @@ function acknowledgeCurrent(store, current, receiptDigest, actor, now, root, acc
|
|
|
480
481
|
// The nightly check of main is a check only (release-once.md, part 3): nobody completes it.
|
|
481
482
|
if (store.handle.prepare("SELECT 1 AS hit FROM nightly_check WHERE task = ?").get(current.receipt.taskId) !== undefined)
|
|
482
483
|
return { ok: false, reason: "check-only", message: "The nightly check of main is only a check; it isn't completed." };
|
|
484
|
+
// Toolroll is still proving its build stopped (stop-proof.ts): a wait that clears on its own, said as one, so a
|
|
485
|
+
// release waits for it instead of stopping.
|
|
486
|
+
if (current.state !== "ready-to-check" && current.state !== "complete" && current.need != null && "wait" in current.need && STOP_WAITS.has(current.need.wait)) {
|
|
487
|
+
return { ok: false, reason: "stopping", message: `Toolroll is still making sure ${current.need.build === null ? "the build" : `build #${current.need.build}`} stopped. This clears on its own.` };
|
|
488
|
+
}
|
|
483
489
|
if (current.state !== "ready-to-check" && current.state !== "complete")
|
|
484
490
|
return { ok: false, reason: "not-ready", message: "This assignment still has unresolved execution, scope or decisions." };
|
|
485
491
|
// A release task completes only while its release approval stands for it (release-once.md, liveReleaseOf).
|
|
@@ -674,3 +680,5 @@ export function assignmentUpdates(store, now, access, query, root) {
|
|
|
674
680
|
});
|
|
675
681
|
return { events, nextCursor: page.length === 0 ? after : Number(page.at(-1)["id"]), hasMore: rows.length > limit };
|
|
676
682
|
}
|
|
683
|
+
/** The waits of a build Toolroll is still proving stopped by itself (needs-you.ts processNeedOf). */
|
|
684
|
+
const STOP_WAITS = new Set(["build-finishing", "build-checking", "build-stopping"]);
|