Repository navigation
Merge dev → main (automated) - #2123
Merged
Merged
Conversation
Replace the complex running-pane liveness check with a single simple rule: if a tab's label exactly equals the work-item ID, the item is active; otherwise it is not. Changes: - isActivePaneMatch now delegates to hasItemTab (exact label match) - Remove isRunningTab, TERMINAL_AGENT_STATUSES, and agent_status checks - Update module header to reflect the simplified algorithm - Update tests: agent_status is irrelevant; tab existence is the sole signal - Keep agent_status in HydratorTab interface for forward compatibility Addresses producer rejection: 'The algorithm should be very simple. If there is a tab with the same ID then it is actively being worked on.' WL-0MV1BWETT005GSUJ
…Y0060BRK) Add pointer drag-to-scroll alongside the existing click/double-click/wheel/ hover behaviours: with the left button (or touch contact) held, vertical movement past a 1-row dead-zone scrolls the worklist by whole rows (scrollBy, clamped via the same _listHeight/flatCount maths) and the detail view by whole lines (reusing the detail clamp). The drag restores the pre-press selection once on activation so a drag never moves the selection, and releases stay inert so a drag-release can never click. Motion is split by the SGR button field (AC4): button-less motion (button 3 | 32) keeps driving the hover tooltip, while left-button-held motion (button 32 | 0) drives drag-to-scroll via the new pure mapMouseDrag mapper plus an accumulated MouseDragState. Filter mode and the metadata panel remain drag-inert. No new runtime dependencies; the mapper is pure and unit-tested. Tests (C1): threshold dead-zone, list drag rows + selection invariance, detail drag lines + clamping, drag-vs-click isolation, hover/drag split, filter-mode inertness; existing motion-branch and tooltip tests updated to the hover-vs-drag split. Docs (C4): package README and docs/dev/pause-when-hidden.md updated; dist rebuilt via tsc. Full project suite: 8102 passed.
…3FCD) Regenerate src/version.ts via scripts/generate-version.cjs so that WORKLOG_VERSION stays in sync with package.json. Add a regression guard test (tests/unit/version-parity.test.ts) that fails fast on any future version drift.
…e dispatcher A soft-deleted work item (non-empty deletedBy) could be resurrected by a status update and then re-selected by the downtime dispatcher, which worked the already-deleted item a second time (false-positive test-failure item SA-0MUJ14FQQ006R3PD). - wl update rejects any non-delete-field mutation on a soft-deleted item (error 'deleted-item', non-zero exit, message naming the item). - The Herdr/fetcher carries deletedBy and the dispatcher excludes soft-deleted items at every candidate-selection path (classifyItemForDispatch and the audit/implement/plan/intake/critical select* helpers). Tests: tests/cli/update-soft-deleted.test.ts, tests/unit/downtime-worker-soft-delete.test.ts. Cross-repo: StatusLifecycle guard lands in SorraAgents (skill/shared).
…rd dispatch The w-r / w-s / w-b chords fire and resolve correctly; the reported 'nothing happens' was a resolvePodcastTarget refusal surfaced only as a transient fire-and-forget herdr toast (OSL-0MUQ59IRF009ICIF RCA). Per producer decision (2026-10-14): - (a) keep the w-s belt-and-braces guard (script present + no open editor notes still refuses), and re-scope the AC to 'dispatch when meaningful'; - surface the w-chord outcome as a PERSISTENT, dismissable in-pane notice instead of a transient toast, so a refused dispatch can never be mistaken for a silently dropped key. Changes: - worklist.ts: extract formatNoticeDialog from formatBlockedShipDialog (byte-identical output); add PodcastNotice + formatPodcastNotice (WRITE CHORD DISPATCHED / WRITE CHORD - NOT DISPATCHED); render the notice as a full-pane modal; handle Esc/Enter/q dismissal; gate mouse dispatch and isInputActive on it; route the chord + single-key podcast resolution outcomes to the notice (errors and confirmations) instead of showToast. - worklist.test.ts: 3 tests - refused w-r shows the persistent notice and never dispatches; a successful w-r dispatches AND shows the notice; the notice is modal and Esc returns to the list. Verified: tsc clean; packages/herdr vitest 3514/3514 pass. Refs OSL-0MUQ59IRF009ICIF.
- Add 20261015-drop-needsProducerReview migration; preserve the historical add-migration as a metadata-sentinel no-op so it never re-adds the column - Drop the DB column from both persistent-store schemas and row mappings; remove the field from WorkItem/query/input types, VALID_FIELDS, and JSONL - Delete the wl reviewed command and unregister it from the CLI, help groups and completion; remove --needs-producer-review from create/update and the list/search/next filters; drop the api.ts query param and cli-types surface - Remove producer-review icon/label/falback helpers from shared icons and theme; collapse the in_review 6-bucket predicate to 5 buckets - Strip the flag explain/clear flow from the interview command (flag no longer exists; question walkthrough + LLM extraction preserved) - Update CLI.md and the gated test corpus for the removed surface - Migration test for the drop; registry/round-trip, list/search/filter and grouping tests updated for the removed field
added 28 commits
October 16, 2026 02:20
…ification - AGENTS.md: document the status-neutral audit-tier assignee-CAS claim and the assignee-hold scheduling convention (producer sentinel Map; clear to release) - docs/AUDIT_STATUS.md: status-neutral audit-tier claim description (no in-progress/in_review hybrid; failure-restore stays completed/in_review) - packages/herdr/README.md: status-neutral claim + assignee-hold note in the downtime-dispatch section - docs/icons-design.md: status-neutral claim keeps stage bucket/icon stable during dispatch - CHANGELOG.md: ship release pipeline auto-generates from in_review items - SorraAgents-side global AGENTS.md claim step updated via SA-0MVA79DNT001HQBB (commit 57356821 on SA dev) - E2E evidence: downtime-worker.assignee-claim.test.ts pins dispatch → simulated Phase-2 failure → completed/in_review + re-selectable, and the producer-assigned exclusion; full suite green
…ce (one request per connection)
…tracked panes, live-client push)
…ence The producer rejected the tab-label formulation as unreliable (2026-10-16): "Look for a pane in this workspace with the work item id as the title. If it exists then work item is busy." Tabs are a dispatcher-anchor placement side effect and can race or rename; pane titles are set at spawn time, preserve the item ID as a trailing suffix, and survive re-parenting. Changes: - hydrator.ts: listTabs/HydratorTab/collectTabWorkItemIds/hasItemTab -> listActivePanes/HydratorPane/collectPaneWorkItemIds/isActivePaneMatch (pane-title contains-ID matching, workspace scoped) - markItemsActiveByTab/applyActiveTabMarkers -> markItemsActiveByPane/ applyActivePaneMarkers (selection-list marker) - production listActivePanes uses herdr pane list --workspace and the shared parseMachinePaneListOutput parser - worklist.ts/index.ts: applyActivePaneMarkers seam + active-pane-marker scheduler task - pane-title.ts: restore the suffix-preservation as the hydrator's correctness signal rationale - tests/fixtures/docs updated; worklist-active-tab-marker.test.ts renamed to worklist-active-pane-marker.test.ts WL-0MV1BWETT005GSUJ
…stence
The producer (2026-10-17) identified the actual break behind "still not
working": the list has TWO in-progress indicators — the status column
(worklog status, correct) and a green circle meant to show "a work-item
pane is open" that was inconsistent. The green circle was the
event-driven AgentTracker icon (working/blocked/idle), which cannot
honour "green circle iff an open pane exists": a freshly-spawned/unknown
pane is absent from `herdr agent list` and was pruned (losing its icon
permanently), an agent `done` state pruned the icon while the pane stayed
open, and a closed pane's icon lingered until an event/TTL refresh.
This change makes the green circle pane-title existence, driven by the
SAME `herdr pane list --workspace` lookup as the in-progress marker:
- hydrator.ts: `markItemsActiveByPane` now stamps
`agentState='working'` (the green circle) for every item with a
matching pane title and clears it otherwise (children included); it is
applied on the initial load, every refresh, the 30s active-pane-marker
cadence, focus-resume, and after pane lifecycle events
(pane_agent_status_changed / pane_agent_detected / pane_closed /
pane_exited), which now trigger a visibility-gated single-flight pane
refresh instead of the tracker-state icon merge.
- worklist.ts/index.ts: the `mergeAgentStates` option path is removed;
the row icon no longer uses the event-driven agent-status tracker (the
tracker remains for association bookkeeping: hover tooltip, dispatch
records, subscriptions).
- icons.ts: the 🟢 green-circle legend meaning is now "Work-item pane
open"; `agentStatusIcon('working')` semantics documented as such.
- Tests: hydrator.test.ts (stamp/clear/idempotence incl. stage),
worklist-active-pane-marker.test.ts (green circle appears with a
matching pane, never without, clears within a cadence),
worklist-agent-state-event.test.ts rewritten to the pane-existence
semantics (this replaces the previously-flagged flaky
'flips an existing icon to blocked' test and asserts no `herdr agent
list` exec in the icon path), worklist-agent-state.test.ts now covers
the renderer slot directly.
- Docs: hydrator module header, docs/dev/herdr-hydrator.md, README agent
section, pane-title.ts rationale updated.
Build: herdr + shared tsc clean. Tests: herdr package 108 files / 3529
tests green, shared package 223 tests green, canonical suite
(tests/cli + tests/unit) green via the test-skill runner.
WL-0MV1BWETT005GSUJ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Automated release created by ship skill.\n\nIncludes CHANGELOG.md with work-item summaries from this release.