# Workflow Manager source review

Reviewed 2026-09-11. This document records interface patterns and decisions; it does not make any external product an authority for CIC task state.

## Workspace evidence

| Source | Useful pattern | CIC decision |
|---|---|---|
| Owner product packet (`context/agent-work/wvra-mcp-context-discussion-20260910130721`) | Goals precede repositories and sessions; `continue X` returns a compact resume capsule with source links. | Adopt as the organizing contract. The plan, topology, and broker remain the joined authorities. |
| Multi-CLI design pool (`context/agent-work/0003-cic-ui-pool-20260910`) | Threadline, workstream rail, separate information/action surfaces, keyboard parity, and responsive drill-down. | Adopt the board as an overview and preserve the existing Focus view as the detailed capsule. Keep source evidence inspectable. |

## External primary sources

| Source | Useful pattern | CIC decision |
|---|---|---|
| [Linear board layout](https://linear.app/docs/board-layout), [display options](https://linear.app/docs/display-options), and [conceptual model](https://linear.app/docs/conceptual-model) | Board/list views over the same records; grouping and visible properties are presentation choices; initiatives explain why projects matter. | Adopt switchable Board and Focus views over one data model. Use state lanes and compact card facts. Avoid independent ordering or state in each view. |
| [Jira board overview](https://www.atlassian.com/software/jira/guides/boards/overview) | Cards cross workflow stages; swimlanes can organize workstreams; WIP limits expose bottlenecks; cross-space boards provide leadership views. | Adopt workflow lanes and later expose capacity/WIP pressure. Do not enable drag-to-change status until broker mutations have a versioned contract. |
| [Notion board view](https://www.notion.com/help/boards) and [database views](https://www.notion.com/help/views-filters-and-sorts) | One database can support board, list, timeline, and filtered views; card properties are configurable. | Preserve the existing timeline and Focus view, with Board as another projection. Keep card density bounded and push full evidence into detail. |
| [Codex app](https://openai.com/index/introducing-the-codex-app/) | Parallel threads, worktrees, inline evidence, long-running work, and shared history across app and CLI. | Project live workers, worktrees, changes, and verification into the selected workstream. Provider threads remain evidence rather than navigation authority. |
| [OpenHands Agent Canvas](https://github.com/OpenHands/docs/blob/main/openhands/usage/agent-canvas/overview.mdx) | Conversations and workspaces are separate, backend-owned objects; switching backends switches execution context. | Show conversation, provider, workspace, and worktree as separate typed relationships. A workstream may span several of each. |
| [Hermes Desktop](https://github.com/NousResearch/hermes-agent/blob/main/apps/desktop/README.md) | One session history across desktop and gateway; streaming tool evidence; side-by-side previews; provider/model settings. | Reuse the preview/evidence drawer pattern and common backend state. Keep CIC's broker and goal graph as the authority rather than adopting another runtime authority. |
| [Letta memory blocks](https://docs.letta.com/tutorials/attaching-detaching-blocks/) | Persistent blocks can be attached to or detached from agents and shared across agents. | Use compact, provenance-bearing context packets selected per goal. Keep memory revisioned and source-linked so derived context cannot silently become authority. |
| Obsidian linked-note and graph concepts, as framed in the owner packet | Durable links support associative retrieval and source navigation. | Use typed goal/evidence relationships and progressive disclosure. Do not turn the topology graph into the primary task-control surface. |

## Applied in the current slice

- Board, Focus, and Graph studio are switchable presentations over the same in-memory projection. Graph studio does not embed Flowise or create another task store.
- Graph nodes and edges are derived only from sourced plan membership, explicit broker workstream links, observed runs/runners, explicit dependency fields, and projected checkpoint/result evidence. Inferred/path associations are dashed and labeled; they never invent blockers.
- Graph columns, edge markers, and wrapped labels distinguish kinds and relationship types. Waiting (owner/input) is not classified as awaiting authentication.
- Canvas arrangement is disposable view state. Ctrl+wheel and centered zoom, first fit, and pan/drag update transforms only. Dragging does not save relationships or status. Keyboard traversal, zoom, fit, and Escape keep canvas or Outline focus. Narrow screens hide canvas-only controls and use Outline, including cross-relations and Unattached.
- Selecting a graph node or edge refreshes the existing Board and Focus selection for that workstream. No persistent graph-layout endpoint is used.
- Board and Focus are switchable presentations over the same in-memory projection.
- Board columns distinguish Working, Blocked/Waiting, Built/Ready, Backlog, and Complete.
- Plan membership hydrates through stable source, section, and row ID. Display-title edits and truncation do not create duplicate goals; ambiguous legacy bare IDs remain unresolved instead of being guessed.
- Cards show sourced status, purpose, owner, counts, and a suggested next item selected only from primary membership. Inferred/path relationships remain visible as related evidence and cannot silently block the goal.
- Selecting a card opens the existing resume capsule instead of duplicating its evidence.
- Continue selected goal opens the shared Requests composer with an editable, bounded capsule in worker-readable instructions and owner-selected canonical workstream metadata with compact versioned source refs. It never submits automatically.
- Unknown-response retry keeps the first request's serialized goal identity and bytes frozen. Broker activity refreshes update linked tasks without changing the selected goal.
- The page-level New request control opens the same composer without inheriting the selected goal association.
- Board layout becomes horizontal at medium widths and stacks into one column on narrow screens.
- Status retains text as well as color, and the detail target accepts keyboard focus.

## Next slices

1. Join typed dependencies, agent/worktree ownership, deployment state, and verification evidence onto each card.
2. Add saved views and configurable card-property density without duplicating records.
3. Add measured WIP/capacity indicators derived from provider and worker observations.
4. Add a narrow-screen route between streams, cards, and evidence with preserved draft and selection state.
5. Add goal-filtered archive retrieval and durable engagement checkpoints; the current task-list response is intentionally bounded and browser storage is not canonical continuity state.
6. Add broker-backed mutations beyond the existing explicit Requests submission only after version, authorization, optimistic-concurrency, and receipt contracts are implemented.
