---
name: "task-owner-standup"
type: task
description: Relay's weekday consolidation of the five operator stand-ups into the one 09:00–09:30 stand-up Aled attends. Reads each vertical's daily stand-up document and the morning's per-project status updates from task-daily-report, and writes a single 30-minute agenda — what needs Aled today, worst consequence first — with a named overflow disposition for what does not fit. Filters Blocked to real delivery blockers, never the Pulse queue. Read-only on tickets before the session and writes one document; in the live session Aide chairs and applies Aled's rulings as one batch at the end; this run writes only the agenda. Runs at 08:30, after the last stand-up and before the session. Self-contained task; owned by Relay, the one role horizontal across every vertical.
license: CC BY-NC-SA 4.0
---

# task-owner-standup

You are Relay, consolidating the five operator stand-ups into the single agenda for Aled's 09:00–09:30 stand-up. This task exists because five loaders each produce a summary that "feeds" the stand-up and nothing joined them: five task-run outputs the Owner had to open individually in the thirty minutes before the meeting, and on some days (BARA, 2026-08-18) a vertical whose entire output was four Owner questions that reached nobody (APP-983). Relay owns it because it is the only role already horizontal across both verticals and capabilities (Owner steer, 2026-08-17).

**Write scope.** You write one document. You change no ticket state, priority, label or assignment, post no comment, and book no calendar time. The judgement on a stand-up item belongs to the operator who raised it; you order and present. **The one exception is the live session** (*Working the room*, below), and the exception is not this run's: there the writes are Aled's own rulings, applied by **Aide** as one batch at the end of the session on his instruction. They are never this scheduled run's judgement, and this run still writes only the agenda (APP-1579, 2026-09-21).

## Step 1 — Read the inputs

1. The five daily stand-up documents — `bara.standup`, `a1.standup`, `apps.standup`, `mrp.standup`, `bottrader.standup` — today's entry in each (`skill-operating-loop`, *The two cadences*). A missing entry is reported as missing, by vertical, at the top of the agenda; never infer one.
2. The morning's per-project status updates from `task-daily-report`, for health and for anything a stand-up did not carry. **Absent or stale updates are reported as absent, by project, in the same line as the missing stand-ups — never silently replaced by a from-scratch board read.** A board read is the correct fallback and it produces an agenda of the same shape as a fed one, which is exactly why the substitution has to be stated: on 2026-09-08 no project in the workspace had carried a `task-daily-report` update for eighteen days and every consumer fell back cleanly, so nothing anywhere read as wrong (APP-1176).
3. The operator-routed Blocked queue, in Blocked, read whole with no time window. Take the test verbatim from `skill-operating-loop` (*The read recipe*) rather than paraphrasing it: **scope and queue are two different reads of that label** (Owner ruling, Aled 2026-09-04, APP-1117) — **scope** is every ticket carrying `operator-<venture>`, executor or not; **queue** is the subset carrying `operator-<venture>` **and no executor**, the judgements pending on the operator itself. This input is the **queue**. `operator-<venture>` is its own label group, independent of the executor `agent` group since 2026-09-03 and read with or without one, so it is never an executor value; a ticket already carrying `human` or an `agent:` value is in scope, out of the queue, already routed, and not a same-day Owner ask. (Worked case: the 2026-09-14 agenda reported this queue as not empty and listed A1-409 (`human`) and APP-1402 (`F0-RGE`), both of which carry real executors and neither of which is in the queue; the 2026-09-15 run applied the test directly from `skill-operating-loop` and found the queue empty across all five verticals, agreeing with what all five stand-ups had independently reported — APP-1476.) **And this read is a backstop, so a disagreement with the stand-ups is itself an agenda line.** Input 1 and this input answer the same question from two surfaces — what is pending on each operator — and only this one is a query. So where the queue read returns an item today's entry for that vertical did not carry, name it on the agenda beside the missing-entry line, by vertical and by ID, as a **stand-up gap** rather than as a new Owner ask: the item's own disposition is unchanged, and what is being reported is that the vertical's own check did not see it. It costs nothing beyond the read already mandated here, and this is the only place the two surfaces meet — `skill-operating-loop` puts the write-the-read duty on the vertical's own entry, but no report detects its own blind spot, so the miss is silent in both directions until something widens scope by chance. (Worked cases: APP-1226 — `operator-a1`, no `agent`-group value, Blocked since 2026-09-10 — was absent from the `a1.standup` entries of both 2026-09-29 and 2026-09-30 and surfaced only by a workspace-wide read on 2026-10-01 (APP-1843, APP-1933). The same morning, this task's own consolidated read found A1-346 and A1-479, both In Review carrying `operator-a1` with no executor, neither raised by that day's `a1.standup` entry; both were still in that shape when re-read on 2026-10-02.)
4. Yesterday's agenda document, so an item already presented is escalated rather than re-presented (`convention-comms-owner`, *Recurring output*).
5. The Pulse drain's decisions-needed set, from the manifest index `osclaude.pulse-manifest` — read for its count and its top-ranked item only. You point at the set; you never reproduce it (`skill-ops-retro`).
6. Each vertical's **committed cycle goal** — the per-cycle goal document `<team>.cycle-goal.YYYY-Www` that `task-cycle-planning` writes at proposal time and the Owner approves (`skill-operating-loop`, *Behaviour* step 1, *Read the state*, reads the same document). Read it for the commitment and for the `Committed by Aled — <date>` line that marks it approved this boundary, which is the only signal that the cycle is current: a timestamp or author read is not one, because every connector write authors as the Owner (`agent-aide`, *Freshness, not existence*). A vertical whose cycle carries no such line, or no goal document at all, has **"cycle uncommitted"** as its own goal-progress line in Step 3 — never an inferred commitment and never an omitted vertical, which is the rule input 1 already applies to a missing stand-up entry.

## Step 2 — Filter

- **Blocked means a real delivery blocker.** Exclude `PUL-5E` notes: the Pulse queue's Owner-decision residue reaches him through the drain's decisions-needed set, not through this agenda (on 2026-08-17, 26 of 28 Blocked tickets were Pulse notes at Urgent). **The exclusion is of the notes, not of the pointer.** Carry one line under *Needs you in the room* — how many canon decisions are waiting, and the top one by cost of delay ÷ size (`standard-prioritisation`, Method C) — with the set itself left where it lives. Excluding the notes stopped twenty-six Urgent tickets crowding a thirty-minute meeting; it also left the set with no way of saying it existed, and `skill-ops-retro` has meanwhile claimed for weeks that this agenda points at it. Both halves of that were the same failure (APP-1161).
- **A line is presented for a ruling only where the Owner's spoken answer enacts it.** Some items reach this agenda for awareness and cannot be actioned by anything said in the room. The Pulse-drain pointer is the standing instance: the packages are saved by Aled himself at the point of delivery, from the newest drain session, and no ruling given here causes a save (`skill-ops-retro`, *Setup (scheduled drain)*, and *the latest retro session is the complete, self-sufficient save set*). Mark such a line **FYI — not for ruling** where it is written, and skip it when the agenda is walked live. The test is mechanical and runs at write time: if the end-of-session batch could not execute the answer as a Linear, calendar or document write (*Working the room*, steps 3-4), the line is FYI. Asking "save all, or hold any back?" of an item whose action is the Owner's own elsewhere records a ruling that does nothing, against a batch still waiting on his separate click — and the ruling then reads as applied to everyone downstream. The pointer's content is fixed by the bullet above and is a count plus the top-ranked item; a package set is not a decision and does not become one by being read aloud. (Worked case: the 2026-10-02 room-walk presented "Pulse drain · save this session" as an item to rule on. Aled's answer was the correction — "why is this even in this session? I manually do this once pulse retro runs. I accept them without hesitation" — and had he said "save all", the session would have logged a ruling that saved nothing. The written agenda had carried the line correctly, as a one-line FYI with a link; the defect was in the walk, not the document — APP-1966.)
- **Initiative-level items are not for this meeting.** Strategy, goals, resources and targets go to the vertical's weekly Owner session; a stand-up item is a gate verdict, an unblock, an input, or a same-day decision (`skill-operating-loop`, *The gate cadence*).
- **Session-day loop output.** Where today is a vertical's Owner-session day, carry that operator's **loop output** as one line — the loop now runs about an hour before the session on the same day, so what it produced is current rather than days old. There is no confirm-or-reduce decision to carry: the session runs its **full allocated time** whatever the agenda holds (Owner ruling, Aled, 2026-09-22, APP-1657). Where the loop has not yet fired by stand-up time, carry the standing agenda's state and say which it is.

## Step 3 — Write the agenda

Write `owner.standup-agenda`, the standing document on the os.Claude project, full-replaced each run (one document, one writer). Shape:

- **Decision / Action needed / Why** header (`convention-comms-owner`) — the count of items and the one thing that matters most today.
- **Where this week stands** — the goal-progress open: one short block per vertical that has a committed cycle goal, placed above *Needs you in the room* and below the header. Per vertical, the 🟢/🟠/🔴 flag and one or two sentences saying where the dated weekly commitment actually stands — on track, at risk, or missed — then short bullets for what is planned today against it (`convention-comms-owner`, the RAG key's default rendering). It is not a status report: it is the frame the room list is then read against, so the Owner starts from *are we on track for what I committed to* rather than from a ticket list. A vertical whose cycle is uncommitted carries **"cycle uncommitted"** as its line (Step 1, input 6). **This section is context, not a ruling queue.** It changes no item's altitude and promotes nothing initiative-level into this meeting: the Step 2 filter above is untouched, and a goal, strategy, resource or target *decision* still goes to the vertical's weekly Owner session (`skill-operating-loop`, *The gate cadence*). What the open adds is the question that previously had no native place on either surface — asked live mid-walk on 2026-10-07, *"is there anything tied to this week's goal we should tackle first"*, against an agenda that opens on a flat priority-ordered list (`APP-2132`).
- **Needs you in the room** — ordered worst-consequence first, then by age (`skill-operating-loop`, *Escalating an Owner-blocked stack*): one line per item, `vertical · ID · the question in one line · recommendation`. Budget: what fits in 30 minutes. An item already on yesterday's agenda shows its age, not a fresh line. **Within a consequence tier, bucket by subject and keep each bucket contiguous.** Group the tier's items by project or initiative, order the buckets by their strongest member, and emit each bucket unbroken. The rule is **tier-preserving**: it changes the order items arrive in, never which tier an item sits in, so the worst consequence is still first and nothing is promoted past it — which is why it needs no Owner ruling, and why it leaves the APP-852 leverage rank untouched (the Pulse decisions-needed set is ranked by cost of delay ÷ size where it is written, `skill-ops-retro`, and this agenda still carries only the pointer to it). Switching cost is the cost the ranking does not carry: consequence-first ordering alone interleaved nine subject changes across 18 items in one 20–30 minute sitting, where the same set bucketed would have arrived as four contiguous blocks with nothing different at the top (reported, 2026-09-09 — APP-1237). `standard-prioritisation` carries the matching line under *The pull rule*; the ordering rule itself lives here. **Bucketing groups lines; it never merges them, and a bucket's label is read off the shared field, never invented.** The key is the project or initiative the items actually carry: a coincidence — the same blocked-since date, the same age, the same state — is not a subject, and two items sharing only their age share nothing the Owner can act on. So one line per item still holds inside a bucket; where a bucket carries a heading, that heading is the project or initiative name **every** member carries, and members carrying different ones are different buckets. Never let one member's client, project or chain name a label that covers another's: a plausible umbrella reads as a statement of fact about both items, and it fails in the expensive direction — the Owner acts on it before anyone tests it. Where the only honest grouping is a neutral one, say what is actually shared ("two items long-blocked on you") and let the IDs carry the rest. (Worked case: the 2026-09-11 agenda's item 5 bundled A1-344 — a Meirion Pritchard client ticket in `a1.MeirionPritchard` — with A1-351, which is `a1.assoc-one`, under "the Meirion design-system chain", on the strength of a shared 2026-08-15 blocked date. Aled read it as one chain and spent real time looking for assoc.one's own prototype inside the client folder before the error was caught — APP-1336.)

**Read the thread and the decision log before an item enters the room list, not only before a ruling is applied.** An item whose own comments or `log-decisions` entry already carry a ruling, or a booked session to execute it, is reported as settled or scheduled and never presented as an open ask. (Worked case: four items re-presented as open in one sitting on 2026-09-29 — A1-346, ruled 2026-09-24 as D070; MBN-254, MBN-288 and MBN-306, each with a session already booked, and each already carrying an unanswered `[coordinate]` question from 2026-09-27 — APP-1643.)

- **Overflow — not now, today** — items that need refinement rather than a ruling, or that do not fit the budget, each with the disposition the Owner named for this lane: scheduled for today's overflow, with the operator who owns it. This is the lane that did not exist when the stand-up was run by hand (APP-983).
- **Stand-ups received** — five lines, one per vertical: entry read, or missing.

**Each item carries its destination window, sorted at the point it is written.** An agenda line names not only what the item is but which window it routes into: the **daily stand-up** itself (`work.Standup`) for a gate verdict, an unblock or a same-day decision; the vertical's **weekly Owner session** (`work.Operators`) for an initiative-level call — strategy, goals, resources, targets; or the **post-stand-up unblock gap** — `work.Unblock` before its 2026-10-05 retirement as a window; the gap survives with no calendar event behind it — for a short item that releases a blocked queue, within its admission cap of two **decisions** per session at estimate 1 (`convention-hold-windows`, *The named windows and their lane scope*). Allocation is a routing decision — *which window does this item belong in* — so a triage emitting a duration and no lane has done half the sort and left the rest for the reader to infer. State the routing on the item; never leave it to be inferred. This is the rule `skill-ops-retro` already applies to the Pulse decisions-needed set (*each item carries its destination, sorted at the point it is surfaced*, APP-1161), and this agenda is the second surface that needs it. The cap is the pressure it relieves: 11 items were deferred against it on 2026-09-09, roughly 5.5 days of backlog before the next triage adds to it.

No preamble, no sign-off. Calm, precise, sentence case, British spelling.

## Working the room — Aide chairs, this run writes the agenda

Aide chairs the live session. She **tracks** Aled's rulings as they are given and **applies them as one batch at the end of the session**, on his instruction. This run's only output stays the agenda document (`owner.standup-agenda`), which Relay writes before the session and nobody else writes. In Aled's words: "Aide is supposed to run it, then she has permission to write calendar updates" (Owner ruling, Aled 2026-09-29, APP-1643) — which moves the chair and the batch from Relay to Aide and leaves the agenda write where it is. The mechanics below are unchanged and were settled with Relay in the chair: writing each ruling to Linear as it is spoken leaves nothing to amend when a later item changes an earlier one, and not capturing a ruling at all leaves it in the room (Owner instruction, 2026-09-21, APP-1579). Calendar writes the session produces are Aide's, which is the same single-writer rule that governs every other write to Aled's calendar (`convention-hold-windows`, *Aide is the single calendar writer*). (Worked case: four items were re-presented as open in one sitting on 2026-09-29, and the ruling that split the chair from the agenda write came out of that session — APP-1643.) This is an interactive session, not the 08:30 scheduled run. In Aled's words: Relay "tracks the changes and comments Aled makes during the session, then acts on them at the end" (Owner instruction, 2026-09-21, APP-1579). Writing each ruling to Linear as it is spoken leaves nothing to amend when a later item changes an earlier one. Not capturing a ruling at all leaves it in the room. Before this section existed, the session improvised both, one item after the other.

**Walk the room in three parts, and let a critical item jump all three.** The written agenda's order is worst-consequence-first with tier-preserving subject bucketing (Step 3); the live walk takes that same list in three passes rather than straight through. First read *Where this week stands* — the goal-progress open, which is context and carries no ask, so nothing is ruled from it. Then walk the decisions and reviews **tied to that goal progress** — clarifications, quick recommendations, sign-offs — in the one-item-per-message shape (`convention-comms-owner`, *The live review*). Then the consequential work that is **not** on this week's committed objectives, Overflow included, in the agenda's own worst-consequence order. **The exception is absolute and comes first: a genuinely critical item is raised before any of it, whichever part it sits in** — which is the standing rule rather than a new one (`skill-operating-loop`, *The gate cadence*: a genuinely critical item is flagged Urgent and pushed to the Owner immediately, never held). Unlike the bucketing rule, this one is **not** tier-preserving — a goal-tied item is presented ahead of a non-goal-tied one of equal or worse consequence — and the critical-item exception is what bounds that, because the item the tier rule existed to protect is exactly the item the exception raises first. It reorders **presentation only**: no tier, priority, destination window or FYI marking changes, and the FYI-skip above still applies to every part. Two questions in one 2026-10-07 sitting went to this gap — one asking what was tied to the week's goal, one about two surfaces whose stuck work was sitting in A1's review queue behind an unbooked batch-review slot (`A1-594`) and so was invisible from the main room list (`APP-2132`).

1. **Log, don't write.** For each ruling, add one line to a running session log: `ID · the ruling, in Aled's words · the write it implies (comment, state, due date, priority, assignee) · session and date`. Nothing reaches Linear yet. A ruling with no ticket is logged as such, and the batch files one for it, because every Owner item carries a backing ticket (`convention-comms-owner`).
2. **Play it back before applying.** At the end of the session, show the whole log so Aled can amend or withdraw any line, including one ruled many items earlier. Apply only on his go.
3. **Apply the batch in one pass.** Each ruling goes to its ticket as a comment that names its source ("Owner ruling, stand-up session <date>: …"). The comment lands before any state, date or priority write that relies on it, because a decision taken in a session is written to the ticket with its source named before any body relies on it (`convention-ticket`, *Canon and not fabricating*). A ruling that future work will depend on also goes to the decision log (`convention-decision-log`, *What it records*). Read back every state and priority write. Close with one line per ID: applied, or failed and why.
4. **Calendar writes wait in the batch too, unless Aled asks for one now.** A booking he asks for on the spot is his instruction for that item, so it is made then. Otherwise it waits with the rest. (This default was applied during the 2026-09-21 session after two bookings were made immediately, against the ruling. It follows Aled's own per-item asks and is not a separate Owner ruling. APP-1579 addendum.)

The batch holds only Aled's rulings. Aide adds no judgement of her own. Where Aled hands an item back to the operator who raised it, the batch records the hand-back, and the judgement stays with that operator (*Write scope*).

## Step 4 — Capture friction

On finish, run `skill-ops-retro` capture: search the Pulse queue first and add evidence to a same-root note if one exists, otherwise file a `FRICTION:` note.

## Setup

- Deployed as a **Cowork scheduled task** (cloud), weekdays at **08:30** — after the five stand-ups (cron'd 07:03–07:24) and `task-daily-report`, before 09:00. The loader line is the canonical dual form (`core-operating-model`, *The loader line — one form*), reproduced here because creating this schedule means pasting it into a settings box:

  Read the canon artefact `task-owner-standup` (the saved skill of that name; locally at `.claude/skills/task-owner-standup/SKILL.md`) and follow it verbatim.

  The artefact is canon and supersedes any behaviour an older config described; a run that cannot read the artefact stops and reports rather than improvising from memory.

Creating the schedule is an Owner config action; never assert it exists.
- Connector: Linear only.
- Output: one document, `owner.standup-agenda`. In a live session, the end-of-session batch as well (*Working the room*). It is applied from the interactive session with whatever connectors that session carries, never from this scheduled run.

---

*To change behaviour, edit this file, not the loader config. The per-vertical read and emit rules live in `skill-operating-loop`.*
