Repository navigation
Checklist automation
github-actions[bot] edited this page Nov 12, 2026
·
1 revision
Generated by
pnpm gen:checklist-statusfromdocs/qa/platform-checklist/areas/*.json. ⛔ Do not edit this page — edits go to the area JSON and this page follows on the next run. This page isChecklist-automation.
Automation — flows, triggers, roll-ups
24 active · 0 planned
| id | title | priority | status | personas |
|---|---|---|---|---|
automation.flow-run-step-nesting |
Flow Runs render loop/region iterations as a nested execution tree | P1 | active | admin |
automation.time-relative-trigger |
Time-relative flow triggers author first-class and fire per matching record | P2 | active | admin |
automation.rollup-summary-filter |
Filtered roll-up summaries recompute only through their own filter | P1 | active | admin |
automation.flow-node-type-matrix |
Every demonstrable flow node type authors in the designer, executes in a run, and surfaces its step in run logs | P1 | active | admin |
automation.trigger-type-matrix |
Every flow trigger type fires and produces a run of its bound flow; the run's trigger block records the launch event | P1 | active | admin |
automation.flow-error-handling |
A failing node inside try_catch is handled (catch region, $error binding) and the failed attempt is still recorded; outside it fails the run loudly | P1 | active | admin |
automation.screen-flow-roundtrip |
Screen flow round-trip: action trigger → paused run → rendered dialog → resume with inputs → persisted write | P1 | active | admin |
automation.durable-suspend-restart |
Suspended runs persist to sys_automation_run, survive a cold restart, and resume — including nested (linked-run) pauses | P1 | active | admin |
automation.paused-run-trigger-record-masked |
A paused record-change run's stored state serves its trigger record masked — credential-class fields as the mask, internal fields absent — to a run-state reader, hot and after a cold boot | P2 | active | admin, a member granted read on sys_automation_run and nothing elevated |
automation.connector-dispatch-matrix |
connector_action dispatches through every registered connector kind, and the registry feeds the designer pickers | P2 | active | admin |
automation.flow-runs-page-test-trigger |
The developer Flow Runs page triggers a run with typed inputs and drives a screen flow's pause to completion (no orphaned paused rows) | P2 | active | admin |
automation.flow-toggle-kill-switch |
Toggling a record-change flow OFF is a runtime kill switch — the mutation that fired it produces no new run; ON restores firing | P2 | active | admin |
automation.trigger-status-contract |
The flow-dispatch HTTP status contract: every never-dispatched, ran-and-failed and non-terminal outcome answers its own status + ADR-0112 code, at every door that dispatches a flow | P1 | active | seeded admin (admin@objectos.ai / admin123), org member for the resume 403 arm — created by the admin with POST /api/v1/auth/admin/create-user and past its password change (POST /api/v1/auth/change-password): a held session answers 403 PASSWORD_RESET_REQUIRED, the right status for the wrong reason |
automation.packaged-flow-disable-durable |
Disabling a packaged flow writes a durable sys_metadata_activation row that survives a cold restart with the trigger left unbound; re-enable UPDATES the row and restores firing | P0 | active | seeded admin (admin@objectos.ai / admin123 — holds manage_metadata, which is the whole authority the toggle door demands on the stock single posture: the ADR-0126 §5 activation gate is INERT there, see access-security's activation-gate item) |
automation.packaged-flow-subflow-disable-refusal |
Disabling a packaged flow that packaged callers invoke as a subflow is refused 409 DELETE_RESTRICTED naming every caller; the refused attempt writes no ledger row; enabling the subflow itself is never guarded | P1 | active | seeded admin (admin@objectos.ai / admin123 — holds manage_metadata) |
automation.packaged-flow-clone-contract |
POST /automation/:name/clone (Studio's New similar): whole-definition copy mutating exactly name/label/status, written switched off (status obsolete) into a package — the base's .custom pair when package is omitted —, protection envelope dropped, no ancestry, notice verbatim, 400/404/409/422 refusal arms — and the honest clause: the copy survives a restart and reaches Studio |
P1 | active | seeded admin (admin@objectos.ai / admin123 — holds manage_metadata; the clone door is in the #10145 authoring write set, domains/automation.ts) |
automation.setup-packaged-automation-board |
The packaged-automation doors after ADR-0146 D4/D11: Setup nav serves Packaged actions (the retired flows page's bookmark lands in Studio), Studio's Automations pillar lists the packaged flows, its ledger switch persists, New similar is offered on flows only, no lineage surface, server refusals verbatim in role=alert | P1 | active | seeded admin (admin@objectos.ai / admin123 — holds manage_metadata), a plain member (minted invite-first: the admin invites an address, then it signs up — an uninvited sign-up answers 403 SELF_REGISTRATION_CLOSED on stock; member_default, holds NO manage_metadata; the refusal-rendering and posture clauses) |
automation.flow-registration-verdict-on-read |
A stored flow the engine refused to register no longer reads as running: GET /meta/flow/:name carries registration {state:"refused", reason} beside the authored status, the list carries registrations keyed by name, and a good flow reads registered | P1 | active | seeded admin (admin@objectos.ai / admin123) — the Default Organization owner and platform admin on a fresh boot |
automation.flow-authoring-refusals-v18 |
Flow authoring contract on v18, refused at os validate — and at PUT /meta/flow for every flow-body arm but the CEL root scope, which only os validate judges: single-brace {…} value tokens (CEL only; text slots use {{ }}), $-prefixed bound variable names, builtin node config keys/values the executor does not declare, dangling or repeated edges, record/user.id roots a flow cannot bind, retryPolicy.maxRetry, and an anonymous endpoint targeting a runAs:"system" flow |
P1 | active | metadata author running the CLI in a scratch copy of the showcase app (no server needed), seeded admin (admin@objectos.ai / admin123) — the Default Organization owner and platform admin on a fresh boot |
automation.flow-run-semantics-v18 |
Flow run semantics on v18: current_user is bound in CEL (null on a schedule run), record exists only when the run was handed one, a non-system caller starting a runAs:"system" self-triggered flow is refused 403 with nothing run, and a decision with overlapping true edges takes the FIRST |
P1 | active | seeded admin (admin@objectos.ai / admin123) — the Default Organization owner and platform admin on a fresh boot, org member — created by the admin with POST /api/v1/auth/admin/create-user (stock showcase self-registration is closed: audience posture invite_only answers sign-up 403 SELF_REGISTRATION_CLOSED); joins the Default Organization as member, not platform admin, and lands mustChangePassword:true, i.e. a HELD session until it changes its password (POST /api/v1/auth/change-password) |
automation.inbound-hook-timestamped-signature |
Inbound flow hooks accept ONLY the timestamped signature (t=,v1=): a body-only sha256= HMAC, a stale timestamp, an unknown flow and a wrong hook id all answer the SAME 401, and nothing is enqueued | P1 | active | anonymous caller (no cookie, no bearer, no x-api-key), seeded admin (admin@objectos.ai / admin123) — the Default Organization owner and platform admin on a fresh boot |
automation.scheduled-work-opt-in |
Scheduled work is OFF on a stock v18 boot unless OS_AUTOMATION_SCHEDULED_WORK_ENABLED=true: schedule triggers bind and fire only with the flag, and the boot says which (D3 schedule-flow-acting-organization-required) | P1 | active | seeded admin (admin@objectos.ai / admin123) — the Default Organization owner and platform admin on a fresh boot |
automation.package-flow-override |
Customize a read-only base's flow in Studio: the pair's item under the base's name, declaring the override, is armed in place of the base in one reload, keeps the base's ledger switch, lets a waiting run finish on the base, and Restore re-arms the base — New similar stays a separate copy under a new name | P1 | active | admin (holds manage_metadata; single posture), dev admin as the approver (holds the showcase_manager position, so showcase_budget_approval's manager_review routes to them) |
automation.flow-reference-package-resolution |
A package flow's by-name references resolve from its package: a subflow held by the flow's own package or one holder in its declared dependencies runs, one held only by the environment or an unrelated package is refused naming the holder and nothing runs | P2 | active | admin (the seeded admin): the trigger calls and the run reads |