diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 6b8e9c18..77bd5ea3 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -18,7 +18,7 @@ "name": "work-system", "source": "./plugins/work-system", "description": "Generic task and worktree workflow system for Claude Code. Keep tasks as GitHub issues or local markdown files, run them in isolated git worktrees with a choice of worker agent (Claude, codex, grok, kimi, or a PATH-detected cc-harness agent), and track progress across the define/kickoff/continue/status/close lifecycle.", - "version": "1.28.2" + "version": "1.28.3" }, { "name": "pr-flow", diff --git a/.claude/knowledge/_index.md b/.claude/knowledge/_index.md index f6d79a74..a39fd33d 100644 --- a/.claude/knowledge/_index.md +++ b/.claude/knowledge/_index.md @@ -12,7 +12,7 @@ ## Features - `features/backfill-and-origin-metadata.md` — `/backfill-knowledge` significance bar + origin-reconstruction cascade - `features/statusline-integration.md` — Status-line segments: plugins can't own `statusLine.command`; marker-block injection; the `[ks …]` + `[ws …]` two-segment coexistence and ws's never-block-on-network PR cache -- `features/herdr-kickoff-automation.md` — herdr `herdr-launch.sh`: `launch` (`/kickoff` + `/adopt`) + `resume`; feature-detected dual contract (legacy placement vs 0.7.5+ `agent start --kind --pane`), registry-declared transport, rollback vs `blocked=unverified`, worker death from process state not terminal text +- `features/herdr-kickoff-automation.md` — herdr `herdr-launch.sh`: `launch` (`/kickoff` + `/adopt`) + `resume`; feature-detected dual contract (legacy placement vs 0.7.5+ `agent start --kind --pane`), registry-declared transport, rollback vs `blocked=unverified`, 0.8.2 idle-readiness timeout confirmed by detection + rename, worker death from process state not terminal text - `features/herdr-shell-interactive-tabs.md` — `herdr-shell.sh`: temp `tmp-` tabs for screen programs + `handover`; termios gate (canonical+no-echo; `read -s` is a builtin), socket-only `send_input`, secret fetched before the gate, pid-based fg, flock across create+record vs sweep, `python3 -I` (cwd shadows stdlib), teardown-by-cwd gap, `smoke_*` not `test_*` - `features/lane-registry.md` — `lanes.sh` + `herdr-agent.sh` (Wave 1): the one herdr-agent wrapper (degrade-not-block, bounded wait) + centralized `$HERDR_MATCH_PRELUDE` cwd↔worktree match (consumed by herdr-tab-glyph, regression-guarded via live snapshot); lanes.sh joins states+liveness keyed by worktree_path with a worktree-tab-state degrade tri-state; env test-seams for hermetic join tests - `features/herdr-close-automation.md` — `/close` in herdr: cwd-tab teardown, plugin SessionEnd hook, the one TUI-exit primitive, detached self-exit onto idle, Manager close-delegation, ask-on-doubt auto-accept + follow-up sweep; `/land` composition + `--delegate` preselect; follow-ups do/ask/record (ROADMAP via `followups.py`) and Manager-owned deploy (`deploy-owner`); the `landing.sh` marker (git common dir, pane+session identity) for a lane torn down under `/land` diff --git a/.claude/knowledge/features/herdr-kickoff-automation.md b/.claude/knowledge/features/herdr-kickoff-automation.md index 7861f244..74a1fc0a 100644 --- a/.claude/knowledge/features/herdr-kickoff-automation.md +++ b/.claude/knowledge/features/herdr-kickoff-automation.md @@ -1,10 +1,10 @@ --- title: "herdr /kickoff + /continue-reopen Automation" createdAt: 2026-06-24 -updatedAt: 2026-08-19 +updatedAt: 2026-10-26 createdFrom: "PR #17" -updatedFrom: "session: 2026-08-19 (task/offer-cc-harness-agents-at-kickoff)" -pluginVersion: 1.12.0 +updatedFrom: "session: 2026-10-26 (task/fix-herdr-launch-unverified-on-0-8-2)" +pluginVersion: 1.28.3 prime: false reindexedAt: 2026-07-12 --- @@ -164,7 +164,8 @@ decisions from the fix: Definitive failures close the created tab exactly once through `herdr-teardown.sh close-tab` (the existing close-then-verify SoT — it deliberately does not re-issue the close, since a recycled tab id would kill an unrelated live - tab). Ambiguous outcomes — readiness timeout, an unclassifiable herdr error, a + tab). Ambiguous outcomes — a readiness timeout with no running worker detected + (see the 0.8.2 section below), an unclassifiable herdr error, a returned pane id that isn't the requested one, a wrapper detected as the wrong kind — leave the tab alone and return the new fail-closed `blocked=unverified` result (exit 0, `blocked` FIRST). An *unconfirmed* rollback downgrades to the same result: @@ -185,6 +186,50 @@ decisions from the fix: "the verified worker is in its dedicated tab", and changing the key would break every caller for a cosmetic gain. +### herdr 0.8.2: `agent start` waits for an IDLE agent (work-system 1.28.3) + +From 0.8.2, `agent start` succeeds only once the agent is *ready for input* — idle. +A claude worker handed `/work-system:continue` starts working immediately and stays +busy for the whole task, so every native `claude:*` start (any `agent start` kind that is busy at once would) ran into its `--timeout` +(`code=timeout`) while the worker ran fine, and herdr then **never registers the +requested name** — not even once the agent later goes idle (`agent get