diff --git a/CHANGELOG.md b/CHANGELOG.md index dbab86bc0a..b7f7360f59 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -133,8 +133,13 @@ check timed out after 5 seconds, so no team work ran. Don't rely on this path in ### Known limits -- **No harness has run end to end under the contract yet.** The dsh example and - the conformance check were checked against stand-ins. +- ~~**No harness has run end to end under the contract yet.** The dsh example and + the conformance check were checked against stand-ins.~~ *Corrected after + release:* 0.7.8's release testing ran a real dsh 0.2.1-rc.2 through the + shipped dsh example runner for a person's allow-once and reject-once, and + through an outside runner, dsh-seat 0.3.0, for launch, queue work, multiline + input, activity, cancel and exact resume. The conformance check itself runs + against a stand-in agent. - **The answer owner is a registered person.** "A colleague's answer is followed on this host. If the ask is handed to another host, the request waits, shown as needs input, until the agent's turn ends." diff --git a/docs/reference/community-harness-examples/dsh/dsh.yaml b/docs/reference/community-harness-examples/dsh/dsh.yaml index 566d330545..3408f18dcd 100644 --- a/docs/reference/community-harness-examples/dsh/dsh.yaml +++ b/docs/reference/community-harness-examples/dsh/dsh.yaml @@ -7,11 +7,11 @@ runner: true launch_result: true first_input: true limits: - - written for dsh 0.2.1-rc.2 (npm @deepseek-ai/dsh) over ACP protocol 1, with Node 22 or later, and checked against a stand-in agent only + - written for dsh 0.2.1-rc.2 (npm @deepseek-ai/dsh) over ACP protocol 1, with Node 22 or later; run with a real dsh on two stacks only, dsh's Claude route with a Claude Haiku model in 0.7.8's release testing (with that release's copy of this runner, for an allow-once and a reject-once), and dsh's pi-ai OpenRouter chat-completions profile with the model deepseek/deepseek-v4-flash on OpenRig 0.7.8 (for queue work, activity through a quiet tool call, an allow-once and a reject-once, and cancel); in both, the permission answers came from a test answerer registered as a person, not a live person; dsh's DeepSeek Messages adapter pointed at OpenRouter failed with HTTP 400 in the second, cause not established; no other dsh route or model is checked - each seat gets its own dsh home under $OPENRIG_HOME/state/dsh//home, holding a patch that turns off dsh's session-log and plugin-list uploads to DeepSeek; give it credentials (.credentials.yaml there) or a provider key in the seat's env; set DSH_SEAT_HOME in the member's env to use a home you prepared, and DSH_SEAT_BIN for another dsh binary (a member's env can't set OPENRIG_* names, and the runner doesn't read dsh's own DSH_HOME) - DSH_PERMISSION_MODE defaults to workspace-write; a permission request goes to the default person or the seat's override (rig seat set-permissions-to), is permitted with dsh's allow_once (else allow_always) when no one can be asked or OpenRig can't answer, and is refused and held as needs input only after --deny - allow_always creates a standing grant in dsh, which OpenRig doesn't record or revoke; the runner prefers allow_once, and where dsh keeps the grant and for how long isn't checked - - resume isn't declared until a real dsh has reopened a conversation and recalled it; the runner reopens by the method dsh advertises and reports missing only on dsh's own not-found error, not when dsh's session list names the conversation; dsh answers -32602 for a missing conversation (and for one active elsewhere), so a missing dsh conversation reads unconfirmed + - resume isn't declared; a real dsh has reopened a conversation after down, snapshot and up and recalled it, with resume added to a copy of this preset, but a missing conversation's refusal hasn't been run; the runner reopens by the method dsh advertises and reports missing only on dsh's own not-found error, not when dsh's session list names the conversation; dsh answers -32602 for a missing conversation (and for one active elsewhere), so a missing dsh conversation reads unconfirmed - a prompt whose whole text is /abort can't be sent; a Ctrl-C byte inside a paste also aborts; without a TTY, input is read line by line; this isn't a binary-safe channel - one prompt at a time; a message that arrives mid-turn waits for the next turn - the seat's model isn't passed; dsh uses its own configured model diff --git a/docs/reference/harness-runner-contract.md b/docs/reference/harness-runner-contract.md index c5c667930f..de440a96d8 100644 --- a/docs/reference/harness-runner-contract.md +++ b/docs/reference/harness-runner-contract.md @@ -26,6 +26,11 @@ > answer, reboot recovery, and the model OpenRig observes. Any other runner, provider or path is unqualified until > it's shown. > +> **Since 0.7.8, on one stack:** the dsh example runner has run with a real dsh 0.2.1-rc.2 on dsh's pi-ai OpenRouter +> chat-completions profile with `deepseek/deepseek-v4-flash`: queue work, activity, an allow-once and a reject-once +> answered by an automated test operator, cancel, and an exact return with resume added to a copy of the preset. A +> missing conversation's refusal hasn't been run, and the preset still declares no resume. +> > Release status and pinned references are in the [joined author guide](author-contracts.md). The > [community presets reference](community-harness-presets.md) describes the implemented fields, including the runner > preset's exception for approvals; this chapter also labels runner-author behavior that isn't qualified.