Skip to content

Merge dev → main (automated) - #2123

Merged
SorraTheOrc merged 58 commits into
mainfrom
release/dev-to-main-20261017214405
Oct 17, 2026
Merged

SorraTheOrc merged 58 commits into
mainfrom
release/dev-to-main-20261017214405

Conversation

@SorraTheOrc

Copy link
Copy Markdown
Member

Automated release created by ship skill.\n\nIncludes CHANGELOG.md with work-item summaries from this release.

pi and others added 30 commits October 14, 2026 02:59
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
pi 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
…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
@SorraTheOrc
SorraTheOrc merged commit 69b55a4 into main Oct 17, 2026
@SorraTheOrc
SorraTheOrc deleted the release/dev-to-main-20261017214405 branch October 17, 2026 21:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant