- Draft PR via forge (apps/worker/src/git/pr.ts) push branch + createPullRequest draft with echodo-convoy marker, expose prUrl in Mission Control (convoy-service, convoys router, detail panel) - Operator notes mid-build: convoy_operator_messages (0016), tRPC post/list, worker poll between tool rounds (queued) and before generateText (direct), detail panel thread for in_progress - Doc-writer: harness doc-writer examples (docs/examples/research-pipeline.md), SOP template (docs/templates/doc-sop.md), role-doc-writer wiring Convoy: .convoys/worker-closeout-docwriter Co-authored-by: orchestrator
2.5 KiB
2.5 KiB
| brief | convoy | role | title | status | priority | slice_dependencies | recommended_model | model_tier |
|---|---|---|---|---|---|---|---|---|
| 2 | worker-closeout-docwriter | role-implementer | Operator notes mid-build — queued + direct messages | ready | P1 | qwen-coder | local |
Brief 2 — Operator notes Task-worker-operator-notes.md
Goal
Let operators send queued notes and direct messages to an active worker session without waiting for gate — Autensa benchmark row operator-notes plans/Plan-automation-foundation/Plan-automation-foundation.md:229.
Files
packages/database/src/schema/convoy_operator_messages.tsNEW —id uuid PK, workspace_id fk, convoy_id fk objects.id, brief_id fk optional, agent_run_id fk optional, delivery enum queued|direct, body text, author_user_id fk users, delivered_at timestamptz nullable, created_at defaultNow. Indexworkspace_id, convoy_id, delivered_at.packages/database/migrations/0016_*—pnpm db:generate.apps/web/server/routers/convoys.ts— addpostOperatorNote(workspace member;delivery:queued|direct,body 1..2000,convoyId, briefId?) inserts row;listOperatorNotesfor detail panel thread.apps/worker/src/db/operator-notes.tsNEW —pollOperatorNotes(db, workspaceId, convoyId, briefId?)wheredelivered_at IS NULLorderedcreated_at.apps/worker/src/handle-job.ts:40— between tool rounds poll queued notes, appendQueued note from ${author}: ${body}totoolHistorysummary; before nextgenerateTextprepend direct messages to system prompt tail. Markdelivered_at=now()after injection. LogharnessAlias.apps/web/app/(app)/[workspaceSlug]/mission-control/convoy-detail-panel.tsx— thread tab whenstatus===in_progress(textarea + Send →postOperatorNote, listlistOperatorNotes), distinct from gate co-pilot.
Acceptance
- Operator posts
Queued note: use existing auth middleware→ worker sees it on next tool round (logged in checkpoint summary). Direct messagearrives before next model call when run active (show in worker logdirect message injected).- Workspace-scoped, auditable (author + delivered_at visible in detail panel).
pnpm lint && pnpm type-checkpass.
Prompt
You are role-implementer brief 2. Read plans/Plan-automation-foundation/Epic-apps-worker-v1/Task-worker-operator-notes.md, packages/database/src/schema/convoy_events.ts, apps/web/server/routers/convoys.ts:173, docs/worker.md. Keep polling fallback simple (no Redis pubsub).
Depends
None — disjoint from brief 1.