Add Doozy provider to the agent daemon - #165
Conversation
Automated QA detailResult: passed for the PR scope at Test identities
Passed checksThe hermetic Doozy test used a loopback HTTP API, temporary SQLite, fake Claude, and a real temporary git worktree. It proved claim, progress, PR attachment, terminal delivery, persisted-session resume from a later human chat message, and non-exposure of Broad regression evidenceThe broad run excluding the already documented 40 ms hang case completed with 382 passing and 2 skipped tests. One cross-issue concurrency timing assertion failed after sustained suite load, then passed immediately in isolation. An earlier full branch run completed with 383 passing, 1 skipped, and only the 40 ms hang failure. That exact hang test fails identically at untouched base commit External staging readbackThe authenticated Doozy staging readback returned: {
"id": "b1c24483-4ac4-4739-98d0-28545f18488a",
"status": "done",
"progressPosted": true,
"resultPosted": true,
"prAttached": true,
"activityEvidence": true,
"nativeRunStarted": false
}
Intentionally skipped
|
Closes #164.
Summary
WorkProviderboundary.WORK_PROVIDERdefaults tolinear, and the existing Linear gateway remains the default implementation.AgentSessionEventequivalent.Provider interface sketch
The provider owns transport-specific delivery and prompt/config adaptation. Provider-specific ingress discovers work and translates it into the shared
EventLog;SessionWorker, worktree creation, Claude session persistence, PR discovery, cleanup, and retry behavior remain shared.Visual Overview
Local Doozy staging evidence
Run date: 2026-08-24. API key redacted.
Result: the daemon claimed and completed a tagged staging todo, posted progress and terminal activity, attached the discovered PR, and shut down cleanly without starting a native Doozy run.
WORK_PROVIDER=doozy, the documented staging API base URL, a clean target clone, temporary SQLite, and fake Claude.b1c24483-4ac4-4739-98d0-28545f18488atagged[daemon-agent].doozy_todo_claimed, followed bysession_turn_completedwithattempts: 1anddurationMs: 246.status: done,activityEvidence: true,progressPosted: true,resultPosted: true,prAttached: true, andnativeRunStarted: false.https://github.com/dcouple/example/pull/42as staging test data; it did not create or modify that pull request. The adapter behavior, HTTP requests, state transitions, and staging writeback were real.in_progress, the provider appends a prompted turn for the persisted Claude session. The hermetic Doozy test covers this path.Verification
Using Node 22.23.1 and pnpm 11.10.0:
The full-suite regression command was:
The sole failure is the existing 40 ms browser-hang timing test, where the fake Claude process is terminated before it writes its environment fixture. Running that exact test against untouched
origin/mainat35b0b3bproduces the identical failure and stack location, so it is not introduced by this branch. No existing tests were edited.The unchanged full-suite result relative to
origin/main, plus passing typecheck and build, provides regression coverage for the existing Linear path. The Doozy-specific suite covers claim, progress, PR attachment, terminal delivery, and chat resume.Scope guardrails
This PR does not change
ops/, deployment configuration, VPS state, or production daemon state.Automated QA
Status: passed for the PR scope at head
e316f10.origin/main.b1c24483-4ac4-4739-98d0-28545f18488aremainsdonewith progress, result, activity, and PR evidence, and no native Doozy run.Human review remains for the code and merge decision. Deployment, VPS changes, a real Claude turn, and a real PR creation were intentionally skipped.