Shared task state#
The Tasks screen reads the live ledger and control health without writing or migrating the catalogue. Another process can keep a writer transaction open while the screen reads the last committed state. A failed refresh keeps the previous report and health together and shows the exact error. A failed handover also remains visible; a follow-up refresh does not erase it.
The shared OkoKit reader includes human OMP messages delivered while the agent is working (steering=true, attribution=user). Runtime steering is not an operator request. A refresh rebuilds older cached readings that omitted human steering without changing message-derived task identities or moving evidence. An incomplete transcript line is read after its write finishes.
oko tasks rules --all --json and the Tasks ledger read classified rules from the shared database, then fetch only the source-origin allocations for sessions those readings name. One paged selection covers the session set; if the database refuses its URL as too long, Oko divides the selection and retains the original refusal if even one session cannot be addressed. Missing schema, an unreconciled source or a failed page refuses the operation once with the failed query and cause, never a successful empty rule list or a copy of the same database failure for every session. The Desktop refresh displays that same refusal while retaining the previous report.
Each task row's Batch qualification section separates author work from the later build. Enter the canonical repository, full pushed commit and author session, then choose Submit pushed change. The shared OkoKit operation checks the Stado handoff before closing the author stage; it starts no build. Author finished · waiting for batch tests means exactly that, not verified runtime behavior. Refresh batch verdicts reads the later build receipts. The row shows product, revision, build, state and actual failure. A failed batch reopens the task, and a later operator correction cannot be hidden by resubmitting the same old commit. Submission itself records the accepted source evidence. Desktop does not issue a second evidence write with the commit field: that field is a commit SHA, whereas a standalone evidence reference requires repository@revision. After the shared operation returns, the screen reloads the ledger. A handoff, proof-write or reload failure keeps its actual cause visible; an accepted handoff does not imply that the later qualification has passed. If the task has no recorded scope, the form also asks What this task asks for and records the operator's text before submission. Lookup by task identity exposes the same form, including older tasks outside the recent window. Accepted handoffs stay on the screen until their later verdict can be inspected. Each receipt exposes its last fleet-read time and, when available, platform job, source revision, test command, status and exit code. A failed refresh retains the previous receipt and shows the error instead of erasing it.
The normal task watch keeps accepted handoffs in scope beyond the recent-session window and waits between checks while coding is complete but qualification is pending. No new coding session or private build is needed merely to wait.
Every row shows the task's number in its session and, under it, the task's identity — task- and sixteen hex digits, the same the CLI prints beside the number — its kind (task or defect) and, for a defect, the task it repairs. Find a task by identity answers with the object, its current status, evidence, verdict, parent and defects, the same read as oko tasks show <task-id>; a task on the screen is answered from the loaded report, any other identity from the catalogue, and a malformed or unknown identity shows the product's refusal sentence.
A row also lists the task's relations from its own side — duplicate-of, follows, blocked-by, part-of, or duplicated-by, precedes, blocks, has-part for the other end — with the other task's state and a Remove control, and says what it waits on when an open original, predecessor or blocker holds it; a waiting task is not handed over. Relate on a row records one of the four kinds against another task's identity, the same write as oko tasks relate; a task on the screen is written to the catalogue first, because the screen otherwise reads without writing. A self-relation, a repeat, a cycle or an unknown identity shows the product's refusal sentence.
Read a message on a session lists the session's operator messages, each with its number and first line. Full operator message expands the complete, selectable text inside the scrolling list; later paragraphs remain available before classification. Read as on a message records what it is, with the kinds Oko's reading declaration offers — task, detail, doIt, question, acknowledgement, rule, order, resume, paste, defect or remark — the same write as oko tasks kind <session> <number> <kind> --by operator. Many messages are about one piece of work: a task starts work, a detail, resume or doIt carries on its existing task, and a defect reopens its task or starts one when no earlier task exists. Other kinds stay attached without creating separate work. The CLI JSON data.task names the actual task chosen by the ledger for every attached kind; null means the message has no task attachment, not that it was covered by an unnamed task. The native write returns the same identity and explanation. This projection does not create a durable cross-session association for an otherwise unattached message. Reading as anything but task a message added as a task by mistake withdraws that addition. The row then reads classified by "read by session:operator". On a message that is already a task, Add instruction N records the next of its several instructions as a task of its own, the same write as oko tasks add <session> <number> --part N --by operator: "dodaj zadanie A. dodaj kolejne zadanie B" is one message and two tasks, each with its own status, and the new row reads classified by "part N, added by operator". Last message update keeps the write's explanation and actual task identity. A kind the declaration does not offer, a part already recorded, or a number the session does not hold shows the product's refusal sentence.
If the native message UUID stayed the same but its words changed, a classification of the stale stored text is refused. Refresh stored messages in that sheet writes only the selected session's projection through the same native task-report operation, then reloads its complete messages. It does not choose a kind or dismiss the sheet. Expand Full operator message and review the refreshed words before choosing Read as. The CLI equivalent is oko tasks report --session <session-id> --write.
The writer compares both identity and a generated complete-text digest, so a correction below the unchanged first line is still persisted. A missing schema column, malformed stored fingerprint, failed write or failed message read keeps the sheet open with the operation and concrete cause; it never becomes an empty successful refresh. Deploy the canonical content_digest schema column before the corresponding writer. The existing real stale-text journey covers the initial refusal, persisted refresh, repeated refresh and subsequent classification; this CLI evidence does not replace a dedicated-host graphical journey.
The same refresh also prepares durable message identity allocations from the original transcript. Equal words sent at different fractional timestamps remain separate messages. An existing task and its instruction parts retain their IDs, evidence and qualification receipts; appending a message cannot take them. Read as and Add instruction use those same allocations before recording a classification or part. An unreconciled stored timestamp is refused rather than treated as an original full-precision source.
If the retained source does not uniquely explain an old reference, the shared operation reports the session and conflicting or missing source coordinates. The sheet stays open with that cause. Refresh cannot guess an owner or substitute the first or last occurrence. The canonical allocation migrations and matching CLI/native release are a coordinated prerequisite, not a successful migration or visual qualification result.
Messages without a reading checks the stored catalogue independently of the live task window. Enter a Session prefix, or leave it empty for every stored session, and choose Read uncovered messages. The complete text and source coordinates remain visible before classification. A failed request clears the previous coverage result and shows Message coverage could not be read with the actual cause; it does not display a successful zero count.
The same native result shows the remaining count and earliest message with a recorded timestamp above the full list. Messages without a timestamp are counted separately; their age cannot be compared with the dated oldest. The standing task-control routine reads unclassified messages oldest first after each handover and keeps every successful model reading. The pass records remaining coverage or the exact model/coverage refusal; a one-shot oko tasks control prints that pass but exits unsuccessfully with the cause on stderr. An empty unread count proves classification, not task attachment or completion.
The shared CLI/native reader refuses coverage when a timestamp allocation in the selected scope has not been reconciled. Its cause names the actual session, message number and retained source timestamp, with the supported oko tasks derive --session <session-id> --write operation. Replay the retained original source before reading coverage again. An old classification cannot stand in for reconciliation, and reading coverage changes no identity or kind. A retained reading, added instruction or task without an allocated original source also refuses coverage. That error names the session, message number, reference kind and reference identity, with the same source-replay operation. Neither refusal changes an allocation or discards the retained reference. See tasks unread for the real CLI qualification inputs and retained evidence.
A row whose task was not typed by you carries an origin chip, delegated or automation, as the CLI listing marks it. Task map reads stored ledgers, not only the live window. Enter space-separated session IDs to select their combined scope, or leave the field empty for the whole register, then choose Build map. This is the same read as oko tasks map with repeated --session arguments. The session field is disabled during the request. The retained requested scope identifies the result or refusal even if the next input changes.
The map shows session and relation totals, counts by place, origin and kind, and one tree per current operator goal. A task or defect without a path to a goal is graph debt; a successful parent placement with a failed duplicate or predecessor judgment remains debt with that cause. The three pickers narrow the displayed task rows without changing selected-scope counts. The unswept count describes global source freshness, not unlinked work. Dangling relation ends are assessed only for a whole-register read. A failed read shows the product's actual cause rather than a successful empty map.
Summary names codex/gpt-6-astra through Brama's Codex subscriptions for both execution and independent completion checks. It states that there is no paid API fallback and that a later operator correction takes precedence. Last handover retains the result of the button press, including an empty task list. An empty list does not require a Brama judge. Provider refusals, an unavailable judge and unreadable verdicts remain visible with their actual causes rather than becoming an empty success.
Verify current result checks an individual session's saved answer and tool results even while that session is active. It calls OkoKit's same before-stop verification as oko tasks verify --before-stop --session ID; it does not send another prompt, interrupt the session or mark a claim as done. The judge resolves each request in its original conversation and can recover earlier calls and results through read-only transcript search and paged reads. A later unrelated answer does not redefine an earlier task. Old verdicts without that request binding are checked again rather than displayed as qualified work. Last completion check retains the independent verdict and identifies current, unanswered or skipped active sessions. The task rows refresh from the saved ledger. A failed check remains visible with the exact cause; it does not replace the preceding report with an empty success.
Diagnosing counts tasks whose verdict is not done and names a confirmed obstacle; it never counts tasks handed to the operator. The number of failed rounds does not decide it: Oko changes the handover to checking the named condition only when the judge observed an obstacle. A confirmed obstacle shows the required operation, actual cause, observed state and condition for resumption; the row says the task is diagnosed again on the next control pass. Checked operations exposes the tool-call and transcript-record references for the failed operation and checked alternatives. Raw tool inputs and outputs are not copied into the view, because they can contain credentials. The same operation-backed receipt is available from oko tasks --session ID --json.
A missing observation is work to diagnose, not permission to stop. A judge outage remains a visible runtime failure and the watch retries without a new operator message. A diagnosing task is checked again on every control pass, so the control routine's own schedule is the only wait; that does not authorize repeating a blocked effect or bypassing permission. A later observation can disprove the earlier obstacle.
The desktop and CLI use the same routed handover. Existing session model choices do not select the background worker. Brama must grant oko the Codex model route and delegate the subscription to oko; a missing capability or unavailable subscription remains a visible refusal. Importing an existing OMP grant through Brama does not require opening a sign-in window.