Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
1726f58
Add handled-error metadata and validate run view cursors
Oct 9, 2026
ee93fb2
Persist scoped operational fact tables with accounted backfill
Oct 9, 2026
5e3ca6d
Withhold operational facts with inconsistent lifecycle history
Oct 9, 2026
c1c905e
Project run and task facts with accepted runtime changes
Oct 9, 2026
1dfdbbd
Merge main into operations observability
Oct 9, 2026
af18354
Preserve runtime authority and unknown fact timing
Oct 9, 2026
812152b
Serve chronological run summaries and classified step timelines
Oct 9, 2026
e0d0bc2
Bound run list pages and keep chronological pages on their indexes
Oct 11, 2026
c2e2ef4
Keep the current run read check behind the token check
Oct 11, 2026
198d03d
Serve scoped incident facts and direct incident reads
Oct 11, 2026
e5e80da
Keep run history replayable with the recorded start origin
Oct 12, 2026
933e7b5
Serve control-step incidents and withhold mismatched identities
Oct 12, 2026
afe62ed
Merge main into operations observability
Oct 12, 2026
a1f7543
Report bounded worker identity and observed placement members
Oct 12, 2026
2745197
Report only live placement members and never fail an observation on them
Oct 12, 2026
f8fec2e
Read no free-text pod status and keep unknown readiness among live me…
Oct 12, 2026
af3c667
Query the worker fleet in one statement, retire stale workers and rep…
Oct 12, 2026
6554340
Keep Studio listing every worker and count only startable activations
Oct 12, 2026
e78f281
Test that AI status ignores workers of other releases
Oct 12, 2026
88a6d60
Give back an outbox delivery slot when a delivery turn is refused
Oct 12, 2026
d2f928d
Report background loop health and re-check run listing decisions in b…
Oct 12, 2026
e338f6b
Keep unavailable run listing decisions across classification policy c…
Oct 12, 2026
1f26ab2
Merge main into operations observability
Oct 12, 2026
d6f3242
Accept the loop health option in the composition test's background ef…
Oct 12, 2026
c798a3a
Test the budget each operations transaction gets after its authority …
Oct 12, 2026
1dbb2b3
Judge background loop health by a monotonic clock, cycle budgets and …
Oct 12, 2026
6278558
Serve a capability-filtered environment summary and safe telemetry se…
Oct 12, 2026
65eaabf
Share each summary section's time budget, judge telemetry export by r…
Oct 12, 2026
35647cc
Show platform health and chronological run timelines in Operate
Oct 12, 2026
619882f
Read the Runs list again after commands taken on the page and show a …
Oct 12, 2026
43cfda9
Keep the steps a person loaded while an active run's detail reads again
Oct 12, 2026
28ae9ce
Read only what changed while following an active run and export its v…
Oct 12, 2026
1feceeb
Check Runs against the real platform through run summaries and a run …
Oct 12, 2026
64660fd
Test that Overview and Runs drop what they read for another person on…
Oct 12, 2026
4e6e3f7
Keep each run one line on a wide Runs list, ending long names and key…
Oct 12, 2026
f0e6c7b
Give every labeled checkbox the same 16 px box centered on its label
Oct 12, 2026
a145322
Size the Overview Details buttons like every other control
Oct 12, 2026
7523d5c
Say what each attention item opens, state the loop health window and …
Oct 12, 2026
89e620a
Give the run actions test host the Runs list refresh
Oct 12, 2026
ae12961
Move the clock in the active-run tests only once the page has taken e…
Oct 12, 2026
7a0729b
Show a just-started run only on its own list while new runs come firs…
Oct 13, 2026
5667a57
Make the Workers filter checkboxes as tall as a control, 44 px on touch
Oct 13, 2026
c84ccef
Connect incident and worker screens to scoped operational data
Oct 13, 2026
8753753
Merge remote-tracking branch 'origin/main' into feat/operations-obser…
Oct 13, 2026
bdfedbd
Report retirements answered after a scope change and align Operate co…
Oct 13, 2026
1bbefd6
Keep the Operate count alignment in the global stylesheet
Oct 13, 2026
0dc2beb
Merge remote-tracking branch 'origin/main' into feat/operations-obser…
Oct 13, 2026
7c31481
Read the identity again before the Overview person-switch test opens …
Oct 13, 2026
8a6973d
List incidents by opening time through a scoped index
Oct 13, 2026
8245824
Merge remote-tracking branch 'origin/main' into feat/operations-obser…
Oct 13, 2026
93c35c7
Check Operate against the real platform in the acceptance pr profile
Oct 13, 2026
ff85f08
Measure operational reads on a million runs and check their query plans
Oct 13, 2026
5ab0d0d
Document handled-error fields, operational read budgets and the retir…
Oct 13, 2026
a1c21b3
Merge remote-tracking branch 'origin/main' into feat/operations-obser…
Oct 13, 2026
d7ae5b6
Start the operational facts upgrade tests from the key-collation schema
Oct 13, 2026
3f13596
Name the prior schema revision once in the operational facts upgrade …
Oct 13, 2026
20b689e
Merge remote-tracking branch 'origin/main' into feat/operations-obser…
Oct 13, 2026
3631c31
Classify each backfilled artifact once and keep the facts migration l…
Oct 13, 2026
931ee81
Refresh a run's reservation only for the fact writes that change what…
Oct 13, 2026
a1e7695
Give the measured facts migration durations and its lock window in th…
Oct 13, 2026
0950910
Record Overview's first paint while Home is still reading, and say wh…
Oct 13, 2026
da6007c
Watch the per-run read of the facts backfill in the oversized-run test
Oct 13, 2026
a657f30
Merge remote-tracking branch 'origin/main' into feat/operations-obser…
Oct 14, 2026
77f0cb5
Keep loop yields out of step facts
Oct 14, 2026
a159c65
Project a started run's facts from the artifact the start already com…
Oct 14, 2026
8cc1418
Send a bulk action only for the workspace and person it was confirmed…
Oct 14, 2026
48173d6
Say when a release's deployments are hidden from the reader
Oct 14, 2026
bafe40b
Note the facts migration's foreign-key locks and the facts' share of …
Oct 14, 2026
3cbcb12
Merge remote-tracking branch 'origin/main' into feat/operations-obser…
Oct 14, 2026
b6b0cea
Mention deployments_hidden in the changelog
Oct 14, 2026
ea51292
Point the shell's plain-language failure test at the run summaries read
Oct 19, 2026
0dd7b4c
Give the unit and contract stage 45 minutes
Oct 19, 2026
a97bd27
Stop bulk commands until Studio knows who is signed in
Oct 19, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
178 changes: 178 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,184 @@ SPDX-License-Identifier: Apache-2.0

## Unreleased

- Serve bounded run summaries and classified step timelines with fresh scoped
authorization. Timeline output remains optional; legacy timings stay unknown.
Logs remain unavailable with HTTP 501.
- Change `runs.list` to newest-started-first order. Existing v1 cursors remain
supported with explicit `order=id`; chronological orders use v2 cursors.
Update-time pagination is a live view and may require a refresh after changes.
Restored executions reappear in every order.
- `runs.list` accepts the run summary filters and leaves out test runs unless
`include_test=true`. It rejects unknown query parameters, and an out-of-range
`limit` answers `WV-VALIDATION` instead of `WV-PAGE`. Pages stay limited to
8 MiB of retained run data.
- Step timeline outputs are limited to 8 MiB per page (`429 WV-PAGE-LIMIT`).
Outputs of agent, tool or yield instance keys stay withheld until they have
their own schemas. A run waiting for a platform that runs it answers
`422 WV-IR-UNSUPPORTED` as `runs.read` does.
- The scheduler re-checks stored run listing decisions in the background: runs
recorded while this platform could not run them, which it now runs, and
available or unsupported decisions recorded under an earlier classification
policy. Unavailable decisions stay unavailable. Each minute it visits up to 16
tenants and gives one environment of each up to one second of database work
and at most 100 runs. Until a run is re-checked, run summaries, step timelines
and incident lists keep withholding it, even when `runs.read` serves it again:
its timeline answers `422 WV-IR-UNSUPPORTED` when this platform runs it again,
and `409 WV-LEGACY-UNAVAILABLE` when it was recorded under an earlier policy.
A retained run larger than 128 MiB is recorded as unavailable without being
read.
- The Python SDK's `list_runs` rejects a `query` combined with keyword filters.
- Request telemetry records authorized `501 WV-UNAVAILABLE` answers with the
status `unavailable` instead of `failed`.
- A new run's `started` history event records how the run started as `origin`,
the value run summaries report. History pages and exports include it, and
replay accepts it.
- Serve incident lists from incident facts without loading runs, newest opened
first. They filter by status, code, workflow, step, opening time, and test
runs (left out unless `include_test=true`). Explicit `order=id` continues
earlier cursors. Unknown query parameters are rejected, and an out-of-range
`limit` answers `WV-VALIDATION` instead of `WV-PAGE`.
- New operation `incidents.read` (`weave runs incidents read`, SDK
`read_incident`) serves direct incident links and sends the revision as `ETag`.
- Incident views add optional `opened_at`, `opened_at_estimated`, `updated_at`,
`workflow`, `run_status`, `test`, and `instance_key`; for a repeated step
instance, `node_id` is the static step ID. Upgrade CLIs and SDKs with the
server: earlier releases reject the new fields and fail with `502 WV-WIRE` on
incident lists. Resolution receipts, `incidents.resolve` answers, and the
earlier plain array of a run's incidents keep their bytes. A resolve answer is
the incident as stored, so read it again with `incidents.read`.
- An incident on a switch or parallel branch output or a join keeps its
control-step `node_id` in incident lists and reads. An incident whose step
does not match its incident facts is withheld as unavailable.
- The Python SDK's `list_incidents` and `run_incidents` accept a typed `query`
and reject one combined with keyword arguments.
- Workers report where they run when they register: an optional, bounded
`identity` with host, runtime, versions, platform, Kubernetes namespace and
node, and up to 8 labels from `WEAVE_WORKER_LABELS`
(`WEAVE_WORKER_REPORT_HOST=false` leaves out the host). The Agentic and Files
workers and the SDK's `register_worker` send it and retry once without it when
an older server answers `422 WV-VALIDATION`; native executors send it inside
the API process. With native executors configured, an invalid
`WEAVE_WORKER_LABELS` stops the API from starting. New SDK helpers:
`worker_identity` and `register_worker_http`.
- Worker reads, lists, and drain or resume answers add optional `identity` and
`registered_at`. Upgrade CLIs and SDKs with the server: earlier releases fail
with `502 WV-WIRE` on workers registered after the upgrade. The registration
answer and stored worker records keep their bytes, and a worker cannot report
a placement.
- Deployment observations list up to 100 live `members` of each worker
component: running or starting Compose containers and Kubernetes pods, with
host, ordinal, state, readiness, start time, restarts and node. Stopped,
terminating, finished, failed and evicted ones are left out. With more than 100
live members, or when the runner cannot list them all, `members` is left out
(placement unknown) and the observation still succeeds. Kubernetes runners
read members through the deployment's selector, including set-based
`matchExpressions`, and need `list` on the namespace's pods. Observations
without members keep their bytes and digests.
- Upgrade the server before its deployment runners: an older server refuses the
`members` an upgraded runner reports, so observe jobs fail and applies end
`reconciliation_required`. Earlier CLIs and SDKs fail with `502 WV-WIRE` on
observation reads and lists that carry members.
- `workers.list` reads each page with one query and lists current workers by
default: not revoked, and seen (or, never seen, registered) in the last hour;
`state=all` lists every worker. It filters by `presence`, `draining`,
`release_id`, `task_type`, `target_id` and `host_prefix` (a literal,
case-sensitive prefix) and orders by `last_seen_desc` (default) or
`registered_desc`, unknown times last. Cursors issued before the upgrade are
refused, unknown query parameters are rejected, and an out-of-range `limit`
answers `WV-VALIDATION` instead of `WV-PAGE`. Pages stay limited to 8 MiB.
- Studio's Workers page asks the platform for current workers, last contact
first, and for every worker with **Show retired workers**. Earlier Studio
hosts and desktop apps get the
reduced default list from an upgraded server, because the Studio bridge
forwards answers unchanged: their Workers page lists only current workers, and
**Show revoked workers** shows none. Upgrade Studio and the desktop app with
the server.
- Worker reads and lists add optional `placement` (target, deployment and
component), matched from the latest complete, unexpired observation of the
targets the reader may read, and `drained_at`, when the worker started
draining; drain and resume answers add `drained_at`. Upgrade CLIs and SDKs
with the server: earlier releases fail with `502 WV-WIRE` on placed workers
and on workers drained since the upgrade.
- New operation `workers.retire_stale` (`weave workers retire-stale`, SDK
`retire_stale_workers`) revokes up to 100 workers per command that hold no
active lease and were last seen, or registered if never seen, longer ago than
`older_than_seconds` (one hour to 30 days), oldest first. `dry_run` previews
the same batch, and `matched` counts every eligible worker.
- New operation `releases.usage` (`weave workers releases usage`, SDK
`release_usage`) counts a release's online, offline, draining and revoked
workers and the activations that pin it, and pages the deployment components
that run it on targets the reader may read; `deployments_hidden: true` says the
reader may read no target.
- The Python SDK's `list_workers` accepts a typed `query` and rejects one
combined with keyword arguments.
- Kubernetes runners no longer read a pod's free-text status reason, and a pod
whose readiness is unknown is listed as a member that is not ready.
- New operation `operations_summary.read` (`weave operations summary`) answers
an environment's health, load, workers, targets, incidents and up to 20 items
that need attention, in one read that reloads the caller's grants. Each
section and item needs its own capability; one the caller may not read is
`{"state": "forbidden"}` without running its queries or recording a denial,
and one whose queries use up its two seconds of database time between them
is `{"state": "unavailable"}` while the rest are still served. Run figures
leave out test runs, and opening times the upgrade estimated are not counted.
Telemetry export health is degraded while exports are being dropped.
- New operation `operations_telemetry.read` (`weave operations telemetry`)
answers whether telemetry export is on, the collector host names, the
metrics interval and how many items were dropped, never endpoint paths,
credentials or headers. It needs `status.read` for the project.
`WEAVE_TELEMETRY` now refuses a collector host name longer than 253
characters.
- Background loop health, which the summary reports, ages successes with a
monotonic clock, counts a cycle still within its loop's budget as on time,
and reads degraded after 3 failed cycles in a row or among the last 20. An
outbox cycle that cannot start a delivery, because the platform is not ready
or no delivery slot is free, is neither a success nor a failure.
- Studio's host bridge forwards the environment summary, the telemetry
settings and `releases.usage`.
- Studio's Operate area opens on a new Overview page. It shows the health of
the API, the database, the scheduler, the outbox, compatibility and
telemetry export, each with its details; the current load; workers,
clusters and incidents; and up to 20 items that need attention, most of
them linking to their record. It reads the summary every 15 seconds while
visible. A section you may not read names the permission it needs instead
of showing zeros.
- Operate › Runs reads run summaries, newest first, with time range, workflow,
version, origin, status, test, handled-error, incident, top-level and
archive filters. The address keeps every filter except the business and
correlation keys. Load more continues the same list, Auto-refresh reads the
first page every 10 seconds, and up to 50 selected runs can be canceled or
retried together. A run's detail draws its steps with queue wait and run
time, groups loop iterations, links to called runs, shows a step's output
on request and follows a running run every 2 seconds. Starting, canceling,
retrying, archiving or restoring a run, or deleting its data, from the page
reads the list again at once, and a run started there shows first while
the list puts new runs first (with Oldest first it waits for its place).
The line under the title names the order in use.
- Operate › Incidents filters on the platform by status, code, workflow,
step, opening range and test runs, with a choice of order, so a match
beyond the loaded pages shows. The address keeps the filters and the open
incident (`?incident=ID`), which opens from `incidents.read` even when no
loaded page lists it. The drawer shows the workflow, the full step instance,
the run's status and when the incident opened, marked estimated when the
upgrade inferred it and Unknown when it isn't known; Refresh incident reads
the incident itself.
- Operate › Workers has Fleet and Releases tabs. Fleet filters on the platform
by status, draining, release, task type, target and host prefix (kept on the
page, never in the address) with a choice of order, shows each worker's
host, placement, versions and registration time, drains, resumes or revokes
up to 50 selected workers one by one, and **Retire offline workers…**
previews and then revokes offline workers that hold no work, 100 at a time.
Releases lists the admitted releases and, for one, its workers by state, the
activations that pin it and the deployments on targets you may read; it shows
the CLI command that admits a release and never admits one itself. On a narrow
screen both pages fold their filters behind **Filters (n)**, and every filter
checkbox is a 36 px target with a mouse and 44 px on touch.
A retirement whose answer arrives after its dialog closed, or after the
workspace or person changed, says what happened in a notice; a bulk action
stops sending when the person changes, and the host prefix is cleared for the
next person.

- The compiler checks and compiles **Call a workflow** (`callWorkflow`) against
the exact published version it calls: that version must opt in with
`spec.callable` (any workflow, or only `allowedCallers`), `with` is checked
Expand Down
20 changes: 13 additions & 7 deletions docs/guides/execution-management.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,12 +100,17 @@ start, the dialog stays open and says "The run didn't start." with the reason.
**Find runs later** with the filters above the list in **Runs**. The list
updates as soon as you change a filter; there is no button to apply them.

- Type an exact business key in **Search by business key**.
- Choose a status: **All**, **Waiting**, **Failed**, or **Succeeded**.
- Type an exact business key in **Business key**.
- Choose one or more statuses, such as **Waiting** and **Failed**; choose a
status again to remove it.
- Choose a **Time range**: the last 24 hours by default, a longer or shorter
one, or a custom range.
- Open **More filters** to enter an exact **Correlation key** or to check
**Include archived runs**.

To remove a filter, empty its field, choose **All**, or clear the check box.
To remove a filter, empty its field, choose its status again, or clear the
check box; **Clear filters** removes them all. Business and correlation keys
never appear in the page's address.

### With the CLI

Expand Down Expand Up @@ -179,10 +184,11 @@ explicitly which run should receive the event.
Open a run in Studio's **Runs** view. Its detail shows, from top to bottom:
the status, business key, and run ID (**Copy** copies the full ID); a **Now**
line that says what the run is doing; its commands; the graph of the workflow
version it runs, with **Now** on the current step; a **Timeline** of its
recorded events; **Technical details**; and **Archive**. The detail does not
update by itself: select **Refresh** at the bottom of the detail to read the
run again.
version it runs, with **Now** on the current step; its **Steps**, each with the
time it waited and the time it ran; its recorded **Events**; **Technical
details**; and **Archive**. While the run is still going, Studio reads it again
every 2 seconds; select **Refresh** at the bottom of the detail to read it at
once.

The **Now** line, or the card that replaces it, tells you what the run waits
for. STEP stands for the step's ID:
Expand Down
Loading
Loading