fix(vloer): say the agent stopped responding when an ACP watchdog stopped it #209

Merged
ryangr0 merged 2 commits from ryangr0/replace/198-acp-watchdog-reason into development 2026-10-04 08:38:54 +00:00 AGit
Owner

Replaces #198 (fix(ploeg): say which watchdog stopped an ACP Run) after the Ploeg separation in #206. Its Ploeg part is ploeg-hq/ploeg#48; this PR moves Unfold's pin to that branch and carries the rest.

Commits

  • 018e488c build(ploeg): pin ploeg-hq/ploeg#48 to name the ACP watchdog that stopped a Run
  • f01abc23 fix(vloer): say the agent stopped responding when an ACP watchdog stopped it (from 3077289fbc)
  • 0e770d2c chore(site): re-record the demo replay for the stopped-responding cause (from 75562a3d83)

Merge order

  1. #206, the cutover. Until it merges, this PR's diff also shows the cutover commits it is stacked on.
  2. ploeg-hq/ploeg#48.
  3. Move the pin in this PR's build(ploeg) commit to the merge commit on Ploeg's main, then merge. Until then the ploeg-pin check is red by design: it requires the pinned commit on Ploeg's main.

Verification (local, at 0e770d2c with Ploeg 87a66548)

  • mise run verify with the result cache, as a pull request runs it: all gates passed. That includes the Ploeg group (its own scripts/verify.sh at the pin), Vloer, the extension, the demo replay check, integration (managed qualification) and docs.
  • Ploeg side: GitHub CI passed on ploeg-hq/ploeg#48.

What happened to each commit of #198

Commit Subject Here
0c217c7ec6 fix(ploeg): say which watchdog stopped an ACP Run Ploeg part ported to ploeg-hq/ploeg#48
0eb8ce9c3b fix(ploeg): start an ACP watchdog reason with what the watchdog saw Ploeg part ported to ploeg-hq/ploeg#48
3077289fbc fix(vloer): say the agent stopped responding when an ACP watchdog stopped it Unfold part re-applied as f01abc23
91e47c8c1b docs(ploeg): describe the ACP watchdog stuck reason Ploeg part ported to ploeg-hq/ploeg#48
75562a3d83 chore(site): re-record the demo replay for the stopped-responding cause re-recorded on the new base with mise run demo-record as 0e770d2c

The original had no reviews or comments. Its checks were red because development itself failed at mise install --locked; #206 fixes that lock. No earlier check result carries over.

Original description of #198

The ACP adapter reported "acp agent stopped responding" for both its idle watchdog and its prompt wall, so a Run like reviewer Run 209 did not say whether the agent went silent or ran out of time. A Run's summary and reason now name the watchdog, its limit and (for the idle watchdog) the protocol event count, e.g. acp idle watchdog stopped the agent: no protocol activity for 10m0s. failure_reason stays agent_error, as ADR-0043 keeps it. docs/architecture.md says so.

Ticket: https://vikunja.webgrip.dev/tasks/1595

Tests

  • New: TestBuild_NamesTheWatchdogThatStoppedTheRun, TestRun_HungAgentNamesTheWatchdogThatStoppedIt (both fail on the old code)
  • cd apps/ploeg && mise exec -- go test -count=1 ./...: ok
  • mise exec -- go vet ./...: ok
  • mise run verify: All gates passed
  • mise run docs-check: ok

Checks left to CI

None.

🤖 Generated with Claude Code

🤖 Generated with Claude Code

Replaces #198 (fix(ploeg): say which watchdog stopped an ACP Run) after the Ploeg separation in #206. Its Ploeg part is [ploeg-hq/ploeg#48](https://github.com/ploeg-hq/ploeg/pull/48); this PR moves Unfold's pin to that branch and carries the rest. ## Commits - `018e488c` build(ploeg): pin ploeg-hq/ploeg#48 to name the ACP watchdog that stopped a Run - `f01abc23` fix(vloer): say the agent stopped responding when an ACP watchdog stopped it (from `3077289fbc`) - `0e770d2c` chore(site): re-record the demo replay for the stopped-responding cause (from `75562a3d83`) ## Merge order 1. #206, the cutover. Until it merges, this PR's diff also shows the cutover commits it is stacked on. 2. [ploeg-hq/ploeg#48](https://github.com/ploeg-hq/ploeg/pull/48). 3. Move the pin in this PR's `build(ploeg)` commit to the merge commit on Ploeg's `main`, then merge. Until then the `ploeg-pin` check is red by design: it requires the pinned commit on Ploeg's `main`. ## Verification (local, at `0e770d2c` with Ploeg `87a66548`) - `mise run verify` with the result cache, as a pull request runs it: all gates passed. That includes the Ploeg group (its own `scripts/verify.sh` at the pin), Vloer, the extension, the demo replay check, integration (managed qualification) and docs. - Ploeg side: GitHub CI passed on [ploeg-hq/ploeg#48](https://github.com/ploeg-hq/ploeg/pull/48). ## What happened to each commit of #198 | Commit | Subject | Here | | --- | --- | --- | | `0c217c7ec6` | fix(ploeg): say which watchdog stopped an ACP Run | Ploeg part ported to ploeg-hq/ploeg#48 | | `0eb8ce9c3b` | fix(ploeg): start an ACP watchdog reason with what the watchdog saw | Ploeg part ported to ploeg-hq/ploeg#48 | | `3077289fbc` | fix(vloer): say the agent stopped responding when an ACP watchdog stopped it | Unfold part re-applied as `f01abc23` | | `91e47c8c1b` | docs(ploeg): describe the ACP watchdog stuck reason | Ploeg part ported to ploeg-hq/ploeg#48 | | `75562a3d83` | chore(site): re-record the demo replay for the stopped-responding cause | re-recorded on the new base with `mise run demo-record` as `0e770d2c` | The original had no reviews or comments. Its checks were red because `development` itself failed at `mise install --locked`; #206 fixes that lock. No earlier check result carries over. <details><summary>Original description of #198</summary> The ACP adapter reported "acp agent stopped responding" for both its idle watchdog and its prompt wall, so a Run like reviewer Run 209 did not say whether the agent went silent or ran out of time. A Run's summary and reason now name the watchdog, its limit and (for the idle watchdog) the protocol event count, e.g. `acp idle watchdog stopped the agent: no protocol activity for 10m0s`. `failure_reason` stays `agent_error`, as ADR-0043 keeps it. `docs/architecture.md` says so. Ticket: https://vikunja.webgrip.dev/tasks/1595 ## Tests - New: `TestBuild_NamesTheWatchdogThatStoppedTheRun`, `TestRun_HungAgentNamesTheWatchdogThatStoppedIt` (both fail on the old code) - `cd apps/ploeg && mise exec -- go test -count=1 ./...`: ok - `mise exec -- go vet ./...`: ok - `mise run verify`: All gates passed - `mise run docs-check`: ok ## Checks left to CI None. 🤖 Generated with [Claude Code](https://claude.com/claude-code) </details> 🤖 Generated with [Claude Code](https://claude.com/claude-code)
711a4814 moved uv to 0.12.22 in mise.toml but left the lockfile at
0.12.21. mise-action runs `mise install --locked`, which refuses a
version the lockfile does not hold, so the checks job has failed before
any gate since that commit, on development and on every pull request.

`mise lock uv` (mise 2026.9.18) records 0.12.22 for all seven platforms.
The openspec lock files it deletes under .mise/locks are kept.

Refs: https://github.com/webgrip/unfold/issues/2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replace the vendored apps/ploeg tree with a gitlink to
https://github.com/ploeg-hq/ploeg.git at v0.1.0
(87f8dc45a0ea768c6ab95196d8b99d481df10c65), which was extracted from
this repository at 9c1d53f.

- mise run setup, the verify, docs and demo checkouts and the TechDocs
  prepare commands initialise the submodule.
- scripts/ploeg-pin.mjs refuses vendored source, another repository and
  an uninitialised or modified checkout. The ploeg-pin job also requires
  the pinned commit on Ploeg's main, and the release waits for it.
- verify runs Ploeg's own scripts/verify.sh at the pin and compiles the
  unified demo helper, which now imports github.com/ploeg-hq/ploeg.
- The docs build still renders Ploeg's pinned pages, but no longer
  regenerates or validates Ploeg's configuration reference, domain pages
  or decision ledger, and it links Ploeg's source files on GitHub at the
  pinned commit. The combined glossary keeps a decision that a pinned
  model cites by URL instead of mangling it into a relative path.
- Renovate ignores apps/ploeg, drops the Go overlay and leaves the pin
  to people. CI no longer builds the ploegd image context.

Refs: https://github.com/webgrip/unfold/issues/2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Unfold's train now versions Vloer only; github.com/ploeg-hq/ploeg
versions and publishes Ploeg with GitHub Actions.

- on_release_published.yml drops the Ploeg chart, image, signing and
  distribution jobs. The Vloer publisher is the only one, so it takes
  the GitHub release out of draft itself.
- publish_release.py and publish_chart.py refuse ploeg before any Git,
  network or file access. The Go module export to github.com/webgrip/ploeg
  is gone, including the call that disabled GitHub Actions there.
- release-prepare.mjs and apps/.releaserc.cjs touch only Vloer's chart,
  and a commit scoped ploeg never releases Unfold.
- release-floors.json keeps Ploeg's floor and withdrawn 1.0.0-rc.1, marks
  the component retired after 0.4.0-rc.35, and both loaders refuse a
  train that versions a retired component.
- The release preflight no longer checks registry access for ploegd or
  charts/ploeg.

Refs: https://github.com/webgrip/unfold/issues/2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs: record that Unfold pins Ploeg and releases only Vloer
All checks were successful
[Workflow] On Pull Request / ploeg-pin (pull_request) Successful in 42s
[Workflow] On Pull Request / release-policy (pull_request) Successful in 16s
[Workflow] On Pull Request / checks (pull_request) Successful in 7m8s
[Workflow] On Pull Request / warnings (pull_request) Successful in 0s
1bca2ac69b
ADR-0019 records the consumer side of the separation approved in
webgrip/unfold#1: Ploeg lives in github.com/ploeg-hq/ploeg, Unfold pins
it as a submodule, and the unfold-v train versions Vloer only. It
supersedes ADR-0004; ADR-0001 and ADR-0018 get dated notes.

README, AGENTS.md, NOTICE, the team-silver skill and the current pages
now say where Ploeg lives, how the pin moves, what Unfold releases and
where Ploeg's artifacts come from.

Refs: https://github.com/webgrip/unfold/issues/2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
build(docs): treat Ploeg's archived history pages as records
All checks were successful
[Workflow] On Pull Request / ploeg-pin (pull_request) Successful in 24s
[Workflow] On Pull Request / release-policy (pull_request) Successful in 29s
[Workflow] On Pull Request / checks (pull_request) Successful in 2m22s
[Workflow] On Pull Request / warnings (pull_request) Successful in 0s
3870a8b560
Ploeg's main keeps its pre-separation release history in
docs/history/legacy-changelog.md, a record no current page links. Unfold
renders Ploeg's docs from the pinned commit, so any pin past v0.1.0 failed
the docs build with that page as an orphan. ploeg/history now joins
ploeg/backlog as a record path: kept, marked "not current guidance" and
left out of the nav and search.

Refs: https://github.com/webgrip/unfold/issues/2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Moves apps/ploeg to 87a66548, the head of ploeg-hq/ploeg#48, which is
the Ploeg side of Unfold PR 198. Once that pull request merges, move
the pin to its merge commit on Ploeg's main. Until then the ploeg-pin check
stays red, as it should.

Refs: https://github.com/ploeg-hq/ploeg/pull/48
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A Run whose summary says an ACP watchdog stopped it (the idle watchdog, the
prompt wall, or the older "acp agent stopped responding") now reads "The agent
stopped responding" instead of "The agent harness exited with an error ...
Read its log tail", and its stderr tail is shown under "Last lines it
printed". The cause comes from the summary before the failure_reason table;
other agent_error Runs keep their wording, and failure_reason stays
agent_error.

VIK-1595

Replaces-commit: 3077289fbc (#198)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
chore(site): re-record the demo replay for the stopped-responding cause
Some checks failed
[Workflow] On Pull Request / checks (pull_request) Successful in 7m37s
[Workflow] On Pull Request / ploeg-pin (pull_request) Failing after 26s
[Workflow] On Pull Request / release-policy (pull_request) Successful in 26s
[Workflow] On Pull Request / warnings (pull_request) Successful in 1s
0e770d2cc4
VIK-1595

Re-recorded with `mise run demo-record` on top of the Ploeg separation
(webgrip/unfold#206) instead of merging the recorded JSON.

Replaces-commit: 75562a3d83 (#198)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
ryangr0 force-pushed ryangr0/replace/198-acp-watchdog-reason from 0e770d2cc4
Some checks failed
[Workflow] On Pull Request / checks (pull_request) Successful in 7m37s
[Workflow] On Pull Request / ploeg-pin (pull_request) Failing after 26s
[Workflow] On Pull Request / release-policy (pull_request) Successful in 26s
[Workflow] On Pull Request / warnings (pull_request) Successful in 1s
to a1aa45ce8c
Some checks failed
[Workflow] On Pull Request / checks (pull_request) Has been cancelled
[Workflow] On Pull Request / warnings (pull_request) Has been cancelled
[Workflow] On Pull Request / ploeg-pin (pull_request) Has been cancelled
[Workflow] On Pull Request / release-policy (pull_request) Has been cancelled
2026-10-04 07:08:54 +00:00
Compare
ryangr0 force-pushed ryangr0/replace/198-acp-watchdog-reason from a1aa45ce8c
Some checks failed
[Workflow] On Pull Request / checks (pull_request) Has been cancelled
[Workflow] On Pull Request / warnings (pull_request) Has been cancelled
[Workflow] On Pull Request / ploeg-pin (pull_request) Has been cancelled
[Workflow] On Pull Request / release-policy (pull_request) Has been cancelled
to d263ce6de9
All checks were successful
[Workflow] On Pull Request / ploeg-pin (pull_request) Successful in 37s
[Workflow] On Pull Request / release-policy (pull_request) Successful in 42s
[Workflow] On Pull Request / checks (pull_request) Successful in 7m1s
[Workflow] On Pull Request / warnings (pull_request) Successful in 1s
2026-10-04 07:12:33 +00:00
Compare
ryangr0 merged commit c6211dcbe0 into development 2026-10-04 08:38:54 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
webgrip/unfold!209
No description provided.