Skip to content

Merge dev → main (automated) - #2093

Merged
SorraTheOrc merged 44 commits into
mainfrom
release/dev-to-main-20261009153322
Oct 9, 2026
Merged

SorraTheOrc merged 44 commits into
mainfrom
release/dev-to-main-20261009153322

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 added 30 commits October 6, 2026 16:40
…tor + session-health

Audit all Worklog extension modules for retained ExtensionContext
references that may fire asynchronously after session replacement.

Findings (WL-0MUL1BG09005VRBO):
- register-recovery.ts: _notifyFn already hardened (parent WI)
- activity-indicator.ts: showActivityWithTitleLookup — post-await
  showActivity(ctx) now guarded with try/catch
- session-health.ts: setFooter render() callback now guarded with
  try/catch; startTicker already guarded (pre-existing try/catch)
- All other modules (recovery.ts, retry-logic.ts, retry-command.ts,
  error-patterns.ts, guardrails.ts, skill-path.ts, model-display.ts):
  safe — ctx used only synchronously

Added regression tests for both hardened paths and a combined
extension-resilience test.

Audit document saved to lib/recovery/stale-ctx-audit.md.
…EADME

Extend the Notify/ctx safety section with the WL-0MUL1BG09005VRBO
audit results: link the stale-ctx-audit.md classification and list the
two hardened at-risk async paths (activity-indicator post-await
showActivity, session-health footer render callback).
Add DEFAULT_SERVER_ERROR_PATTERNS entries for the llm-proxy time-window
exhaustion body ("All providers unavailable: no provider is available
during the current scheduled time window") so classifyError() returns
SERVER_ERROR instead of UNKNOWN and the recovery loop retries with
exponential backoff rather than silently stalling the turn.

The widened "no provider\s+(is\s+)?available" pattern also covers the
earlier "no provider available" wording, replacing the former narrower
entry so no unreachable duplicate remains.

WL-0MU56ZSSB0054D8W
…(red phase)

Test-first contract for the hydrate-responsiveness fix (parent
WL-0MUY0RDBQ001H74P). Pins, via new tests in hydrator.test.ts:
- AC1: every hydrator CLI spawn passes { stdin: 'ignore', stderr: 'pipe' }
- AC2: a per-step timeout aborts with the offending step named, demoting nothing
- AC3: per-step timing logs (stable label + elapsed ms) via an injected clock
- AC4: workspace-scoped pane list (--workspace <id>) and workspace id on the seam
- AC5: per-tick candidate cap (default 50) with pane/dependency check preserved

Adds hydrator.fixtures.ts: recording exec seam + 60-pane / 25-item worst-case
fixtures for the implementation children.

Red phase: 9 fail as expected (waiting for WL-0MUY1CXSV008F8TZ,
WL-0MUY1CYCB003DTKO, WL-0MUY1CYV6008BQWX); 33 pass. The rest of
packages/herdr is green (3140 pass); the project-configured suite is green.
…d isolate hydrate steps

Delivers C2 (per-step timing + bounded timeouts), C3 (child-process stdio
isolation) and C4 (workspace-scoped pane list + per-tick cap) of parent
WL-0MUY0RDBQ001H74P.

- runStep(label, fn, budget): races every hydrate step against a per-step
  budget, aborts the run naming the offending step, and logs
  '<label> ... elapsed <n>ms' through the injectable sink/clock.
- HydratorDeps gains now/stepTimeoutMs/maxItemsPerTick; default step budget
  5s (below the 20s scheduler watchdog) and default per-tick cap 50.
- Every production spawn passes { stdin: 'ignore', stderr: 'pipe' } and a
  hard 10s exec kill bound (above the soft step budget).
- 'herdr pane list --workspace <id>' is used when the current workspace id
  is known; the pane list seam now receives it.
- Fail-open behaviour preserved: seam errors never demote; a dep-list
  timeout defers the run without demoting.

Makes the red contract suite (WL-0MUY1CX9900258E6) green.
Delivers C5 of parent WL-0MUY0RDBQ001H74P. Drives a worst-case hydrate
(60 panes, 25 in-progress items) with deliberately slow fake seams and
asserts:
- event-loop delay p95 < 100 ms while the run is in flight (the
  command-input-lag proxy for parent AC2);
- a hung in-progress-list seam is bounded and named (in-progress-list
  timeout), not left to wedge until the 20s watchdog;
- candidates beyond the per-tick cap are deferred untouched.
@SorraTheOrc
SorraTheOrc merged commit 5d55952 into main Oct 9, 2026
@SorraTheOrc
SorraTheOrc deleted the release/dev-to-main-20261009153322 branch October 9, 2026 15:38
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