2026.7.21 — DevShells Unlocked for Agents

Released 2026-07-21

← All releases

What's New

  • Expose the workspace flake’s `devShells.default` to agents, enabling deterministic dev environment provisioning for workflow steps.
  • Add AI spend, cost overview, and usage columns to the analytics UI, plus new `/api/analytics/costs` and `/api/analytics/general-stats` endpoints.
  • Introduce per‑session token usage and cost reporting in bridge heartbeats, giving fine‑grained billing visibility.
  • Persist issue creation timestamps for both GitHub and Linear runs, improving lifecycle analytics and reporting.
  • Allow Linear workflow filtering by project and support issue‑label based stage skips for more flexible CI pipelines.
  • Seed OpenAI model price data and log any unmatched models, ensuring accurate cost calculations out‑of‑the‑box.
  • Implement automatic retry for corrupted claw instances and a boot reconciler with periodic liveness reaper for higher reliability.

Improvements

  • Upgrade Daytona SDK to v0.200.0 and cover canonical sandbox states, tightening sandbox consistency.
  • Centralize Grok OAuth token refresh and sync OAuth data into the OpenClaw auth store for smoother auth flows.
  • Harden template‑files metadata reads with fail‑closed logic and random heredoc delimiters for secure remote writes.
  • Refine nix‑daemon readiness detection (store ping) and start daemon earlier in the install background routine.
  • Make analytics status backfill resilient to per‑run failures and improve cost‑average guard against empty slices.
  • Consolidate human code‑push detection across webhook and poller, reducing duplicate work and false positives.
  • Add configurable max wait for `pr_conditions` before erroring a run, preventing hangs.

Fixes

  • Fixed replicated and Daytona template file staging to ensure workspace directory creation and correct path alignment.
  • Hardened Daytona keepalive handling and polling logs to avoid missed heartbeats.
  • Resolved numerous OAuth bootstrap issues, including token refresh, malformed GitHub issue IDs, and Grok auth edge cases.
  • Corrected cost calculations: clamped daily cost at zero, applied signed cost delta, and fixed usage snapshot semantics.
  • Fixed Docker workspace bootstrap, secret injection, and raw workflow display bugs.
  • Addressed hub and bridge race conditions: non‑blocking turn delivery, atomic terminal transitions, and proper checkpoint handling.
  • Patched various liveness and watchdog bugs, including reaper loop start, VM‑404 termination, and panic recovery in run‑owning goroutines.
  • Fixed numerous test flakiness and race conditions across the codebase (e.g., high‑water‑mark polling, delivery deduplication).

Raw Changelog

Show raw git changelog
text
9b66543 Cover canonical Daytona sandbox states (Marc Campbell)
59af4a5 Update Daytona SDK to v0.200.0 (Marc Campbell)
b2f140d Merge pull request #528 from elasticclaw/feat/workspace-flake-tools-526 (Marc Campbell)
ccb7390 Clean up stale GitHub E2E hooks (Marc Campbell)
bd82f2e Fix Replicated final workspace writes (Marc Campbell)
726c41b fix: use base64+random heredoc for Daytona early flake staging (security) (Claw (elasticclaw dev agent))
6ffe631 fix: write Replicated later template files to staged workspace dir too (Claw (elasticclaw dev agent))
c858adc fix: write Daytona later template files to staged ~/workspace too (for sync survival) (Claw (elasticclaw dev agent))
f408cd1 fix: explicit mkdir for ~/workspace before early Daytona flake staging (Claw (elasticclaw dev agent))
2cefe8e fix: ensure ~/workspace (staged dir) is created early for Daytona (Claw (elasticclaw dev agent))
0a31239 fix: align Daytona early flake staging path with bridge detection (~/workspace) (Claw (elasticclaw dev agent))
7217cb4 chore: gofmt server.go after metadata read fixes (Claw (elasticclaw dev agent))
717d998 fix: make exedev template_files + github_repos unmarshals fail-closed too (Claw (elasticclaw dev agent))
e2dad0b fix: harden remaining template_files metadata reads to fail-closed (server.go) (Claw (elasticclaw dev agent))
77ead49 fix: fail closed on early template_files metadata read for flake staging (server.go) (Claw (elasticclaw dev agent))
acdff91 fix: fail closed on metadata errors when determining workspace flake (pipeline_runner) (Claw (elasticclaw dev agent))
92b14c6 fix: better fallback for random delim in remoteWriteFileCommand (Claw (elasticclaw dev agent))
b68cdbc fix: use random heredoc delimiter in remoteWriteFileCommand (SSH path) (Claw (elasticclaw dev agent))
5224f1c docs: clarify fail-closed early flake write in Daytona bootstrap (Claw (elasticclaw dev agent))
044f140 fix: redirect nix-daemon output before & to prevent runShell pipe leak (Claw (elasticclaw dev agent))
7370ae0 fix: use nix store ping (daemon-contacting probe) instead of nix --version for readiness (Claw (elasticclaw dev agent))
f5af21f fix: start nix-daemon in nixInstallBg goroutine immediately after install (Claw (elasticclaw dev agent))
ea15263 fix: strengthen daemon init before pre-eval + safe write for later template staging (Claw (elasticclaw dev agent))
65777cf fix: address new Greptile P1 on daemon timing for flake pre-eval (Claw (elasticclaw dev agent))
e584f53 fix: address review feedback on #528 (Claw (elasticclaw dev agent))
7d02c2e feat: make workspace flake devShells.default available to agents and deterministic workflow run steps (#526) (Claw (elasticclaw dev agent))
ed99cea Address managed Grok auth review (Marc Campbell)
eb4fd99 Centralize Grok OAuth token refresh (Marc Campbell)
78e372d Return the pr_closed_unmerged warning instead of mutating the map (Ana Berg)
da6c920 Reuse the merge-check PR fetch for human push detection (Ana Berg)
f6870d2 Make analytics status backfill resilient to per-run failures (Ana Berg)
0dd8bcf Allow pr_closed_unmerged in warning type normalization (Ana Berg)
fbaf630 Share human code push detection between webhook and poller (Ana Berg)
92ae590 Add task_run_prs.last_agent_head_sha column migration (Ana Berg)
dbc4eca Detect human code pushes in the PR watcher poll loop (Ana Berg)
d6bc3c7 Update analytics KPI/status copy for new status semantics (Ana Berg)
f4f5b00 Backfill task run analytics status once on startup (Ana Berg)
0c346b9 Detect human manual code pushes on PR branches (Ana Berg)
a6c3aae Rework task-run status rules around PR outcome and human touch (Ana Berg)
61e5525 Merge pull request #510 from elasticclaw/claude/aiedev-1-usage-minor-fixes (Ana Berg)
9c64e27 Batch replicated template lookup (Marc Campbell)
5607004 Preserve claw workspace identity (Marc Campbell)
ae5200c Merge pull request #518 from elasticclaw/fix/daytona-keepalive-github-poll-logs (Marc Campbell)
1926d6e fix: harden Daytona keepalives and polling logs (Marc Campbell)
bdd0b0c Route Codex through OpenAI OAuth runtime (Marc Campbell)
f668928 Address Grok auth review feedback (Marc Campbell)
03299ad Sync Grok OAuth into OpenClaw auth store (Marc Campbell)
33a7c02 Install OpenClaw without root (Marc Campbell)
8395fa2 Merge latest main into OpenClaw update (Marc Campbell)
00e0a53 Merge main into OpenClaw update (Marc Campbell)
c0c76bb Merge pull request #515 from elasticclaw/chore/update-codex-0.144.6 (Marc Campbell)
839a87e Merge main into Codex CLI update (Marc Campbell)
3a0b0ff Merge pull request #476 from elasticclaw/fix/manual-workflow-input-context (Marc Campbell)
6213f7a Merge pull request #512 from elasticclaw/fix/grok-oauth-bootstrap (Marc Campbell)
aa7dcfa Address OpenClaw update review feedback (Marc Campbell)
3646da7 Address Grok OAuth migration edge cases (Marc Campbell)
a203e99 Reuse loaded manual trigger inputs (Marc Campbell)
2290e5e Update OpenClaw to 2026.7.1-2 (Marc Campbell)
ef7bb9d Update Codex CLI to 0.144.6 (Marc Campbell)
f3f885e Update Grok Build to 0.2.103 (Marc Campbell)
c9023e9 Fix Grok OAuth claw bootstrap (Marc Campbell)
f3cd8ca test: address project filter review feedback (Marc Campbell)
da70654 feat: filter Linear workflows by project (Marc Campbell)
109f86e fix: pin cost corrections to the stored model and reuse the shared clock helper (Ana Berg)
8db0a2c fix: backfill usage_day for pre-migration task_run_usage rows (Ana Berg)
4b725ee fix: distinguish recorded zero usage from missing usage in runs API (Ana Berg)
3b37462 fix: project today's remainder and use complete days for projection confidence (Ana Berg)
1f1318a feat: seed OpenAI model prices and log unmatched models once (Ana Berg)
bce09ac fix: apply cost corrections to the original usage day instead of clamping (Ana Berg)
594116f test: prove gateway cost survives a cost-less heartbeat (Ana Berg)
73eb236 Merge pull request #507 from elasticclaw/claude/aiedev-1-workflow-issue-created (Ana Berg)
5738bfd Merge pull request #508 from elasticclaw/claude/aiedev-1-run-duration-column (Ana Berg)
55b2202 Merge pull request #509 from elasticclaw/claude/aiedev-1-authoritative-samples (Ana Berg)
9882d46 Merge pull request #506 from elasticclaw/claude/aiedev-1-fix-usage-semantics (Ana Berg)
86b5ec6 fix: address Greptile review comments on run duration UI (Ana Berg)
c95f9a9 test: loosen cost assertion epsilon to 1e-6 (Ana Berg)
55b32a9 feat: surface authoritative sample proportion in General Stats UI (Ana Berg)
a9c3a20 feat: replace authoritative flag with per-metric sample counts in general stats (Ana Berg)
426f5b0 feat: run duration and workflow in analytics table (Ana Berg)
7b3990a fix: propagate issue createdAt through Linear and GitHub poll paths (Ana Berg)
e955486 fix: address review findings on per-run usage semantics (Ana Berg)
a4f072c fix: pin filter-list locale to en to avoid hydration mismatch (Ana Berg)
5cefcbb feat: persist issue creation time for GitHub issue runs (Ana Berg)
758d927 feat: persist issue creation time for workflow-triggered Linear runs (Ana Berg)
d73afcf fix: pass cancellation to load-more so stale appends are dropped (Ana Berg)
0d17786 fix: annotate AI Spend cards when active filters don't apply to costs (Ana Berg)
98c9554 test: rewrite task run usage tests for per-run snapshot semantics (Ana Berg)
3da4f71 fix: treat gateway usage snapshots as per-run totals, not cumulative (Ana Berg)
3eb5514 Merge pull request #504 from elasticclaw/claude/aiedev-1-cost-ui (Ana Berg)
26737c2 fix: address Greptile review comments on AI spend dashboard (Ana Berg)
3b42f81 Merge pull request #503 from elasticclaw/claude/agitated-northcutt-e36472 (Ana Berg)
3a2e864 fix: address review findings on AI spend dashboard (Ana Berg)
6c30071 feat: add AI spend, general stats and usage columns to analytics view (Ana Berg)
46a37ff feat: add cost overview and general stats types and fetchers (Ana Berg)
6ab3443 fix: guard cost average against empty slice (Ana Berg)
8c9fda2 fix(hub): deflake concurrent claw-retry test with immediate transactions (Ana Berg)
6c0621e test: cover confidence downgrade when 7d variance is high (Ana Berg)
79723fe feat: expose usage and issue title on analytics run views (Ana Berg)
30b9d18 feat: add /api/analytics/costs aggregation endpoint (Ana Berg)
a7ad4e3 fix: clamp usage_daily cost at zero on cross-day corrections (Ana Berg)
8e35678 Merge remote-tracking branch 'origin/main' into claude/aiedev-1-usage-ingestion (Ana Berg)
f35c2f5 fix: apply signed cost delta so gateway costs correct hub estimates in usage_daily (Ana Berg)
d338642 fix: address Greptile review findings (Ana Berg)
d5a3a67 fix: preserve pre-reset usage in run summaries and use injectable clock for day bucketing (Ana Berg)
ec78edf fix: address review findings on lifecycle timestamps (Ana Berg)
1aef7c8 fix: address review findings on usage ingestion (Ana Berg)
a2aae82 feat: add GET /api/analytics/general-stats endpoint (Ana Berg)
497e4af feat: persist Linear ticket creation time for lifecycle analytics (Ana Berg)
e725a0b fix: use GitHub-authoritative PR open/merge timestamps (Ana Berg)
945c125 test: cover task_run_usage snapshot upsert and summary rollup (Ana Berg)
40b522e feat: ingest heartbeat usage into task_run_usage and daily rollups (Ana Berg)
5f615b0 feat: add usage tracking schema and static model pricing (Ana Berg)
9fc94ff feat: report per-session token usage and cost in bridge heartbeats (Ana Berg)
ff99597 Merge pull request #499 from elasticclaw/claude/loving-varahamihira-82ea60 (Ana Berg)
bc14f9e test: deflake redelivery test by waiting for the delivered_at mark (Ana Berg)
54f7db2 fix: address review findings on DB-backed delivery (Ana Berg)
409062e Merge remote-tracking branch 'origin/main' into claude/loving-varahamihira-82ea60 (Ana Berg)
a64daef Merge pull request #498 from elasticclaw/claude/youthful-pasteur-ec0aca (Ana Berg)
6ef1e1e fix: dedupe delivered messages by ID in claw-bridge (Ana Berg)
2775802 fix: replace in-memory claw message queue with DB-backed delivery (Ana Berg)
83f123b fix: address Greptile review findings (restart detection, stale wait, trap race) (Ana Berg)
0453ed7 Merge origin/main (Ana Berg)
5e3b183 fix: address liveness recovery review findings (Ana Berg)
aa4caa0 fix: log when a malformed GitHub issue ID skips the working-status move (Ana Berg)
a1b03f7 Merge bridge gateway supervisor implementation (Ana Berg)
51a6e95 feat(bridge): restart OpenClaw gateway on exit with capped backoff (Ana Berg)
986f5cf Merge origin/main into claude/awesome-colden-4c1c29 (Ana Berg)
6b0c617 fix: support noop provider in shortcut factory provisioning (Ana Berg)
4ac6b3f fix: make claw_prs association a prerequisite for GitHub PR claim completion (Ana Berg)
f474e9f refactor: remove dead reclaim-cleanup block in claimFactoryTrigger (Ana Berg)
437e793 test(claw-bridge): address Greptile review findings (Ana Berg)
0b82a01 fix: prefer deterministic body hash for external webhook discriminator (Ana Berg)
722e867 Merge remote-tracking branch 'origin/main' into claude/bridge-ws-robustness (Ana Berg)
d8f4f81 fix(hub): fail fast on permanent tracker errors and unblock webhook paths (Ana Berg)
1e054bf fix(claw-bridge): bound checkpoint/volume HTTP calls and hub acks (Ana Berg)
03915ec fix(claw-bridge): bound hub writes, add main-channel keepalive, tie heartbeat to connection (Ana Berg)
e8d4092 fix(claw-bridge): non-blocking turn delivery and fail in-flight turn on session rotation (Ana Berg)
cccd2ae Merge remote-tracking branch 'origin/main' into claude/dazzling-dhawan-550cb1 (Ana Berg)
a665698 Merge pull request #495 from elasticclaw/claude/quirky-bun-c9dede (Ana Berg)
4864b48 test(hub): deflake idempotency test's async VM-terminate assertion (Ana Berg)
e8259be fix(hub): address review findings on terminal transitions (Ana Berg)
f17edf3 fix(hub): run finished-status tracker move off the done-signal path (Ana Berg)
cbdf4fe test(hub): crash-injection and re-drive coverage for terminal transitions (Ana Berg)
49e1769 feat(hub): make terminal claw transitions atomic and re-drivable (Ana Berg)
2f26400 fix(hub): address review findings on unified tracker feedback (Ana Berg)
4c9bdfa feat(hub): unify tracker failure feedback and retry status moves (Ana Berg)
7d9454b test(hub): assert per-tick Linear attempts instead of exact count (Ana Berg)
00a0b9c fix(hub): avoid t.Fatal in httptest handler goroutine (Ana Berg)
cd23d92 fix(hub): make high-water-mark poll test hermetic (Ana Berg)
d89365e test(hub): cover multi-page Linear pagination burst over 50 items (Ana Berg)
838fa62 test(hub): verify failed factory trigger retried across hub restart (Ana Berg)
662843b test(hub): prove pollTick gates high-water mark on Linear success (Ana Berg)
6d8afd6 Merge pull request #492 from elasticclaw/claude/objective-swanson-be7445 (Ana Berg)
a71ed6b fix(hub): return partial Linear pages on error and index failed-trigger scan (Ana Berg)
627f4a9 fix(hub): apply high-water-mark catch-up to all integration polls (Ana Berg)
259bafb fix(hub): fail Linear poll on GraphQL errors and pagination cap (Ana Berg)
a86d41f fix(hub): retry failed triggers regardless of catch-up claim lag (Ana Berg)
5d851de feat(hub): paginate Linear issue polling with cursor variable (Ana Berg)
92f2b31 feat(hub): poll from persisted high-water mark with failed-trigger window (Ana Berg)
2806787 feat(hub): retry failed factory triggers with exponential backoff (Ana Berg)
07ae403 Merge pull request #491 from elasticclaw/claude/sad-ramanujan-da90d9 (Ana Berg)
7cd724d Merge pull request #482 from elasticclaw/feat/depot-logs-workspace-push-path (Marc Campbell)
302ec55 fix: address Greptile review findings on retry message and test race (Ana Berg)
fd72e15 fix: support noop provider in shortcut claw provisioning (Ana Berg)
c81ee17 fix: treat duplicate claw_prs insert as idempotent success in storePRMention (Ana Berg)
55ba73a fix: extend async stop deadline in permanent-failure watcher test (Ana Berg)
d8f3e3a Merge remote-tracking branch 'origin/main' into claude/sad-ramanujan-da90d9 (Ana Berg)
e6934ae fix: address review findings in PR watcher liveness changes (Ana Berg)
a277a6e fix: create tenant row in done-signal persistence test to satisfy FK (Ana Berg)
ac4f7f5 Merge pull request #490 from elasticclaw/claude/vibrant-greider-05cbf5 (Ana Berg)
a6a3902 fix(hub): forward context to doctor runtime queries, correct checkpoint hint (Ana Berg)
1b2863e fix(hub): address review findings (locking, doctor hints, age margin) (Ana Berg)
9492afe refactor(claw-bridge): reuse deliver closure in hub message handler (Ana Berg)
c9e0590 fix: share cron parser between validation and scheduler (Ana Berg)
afb9491 feat: add configurable max wait for pr_conditions before erroring the run (Ana Berg)
afb752f fix: reject [DONE] when PR persistence fails instead of idling the claw (Ana Berg)
b05da08 fix: log loudly when PR watcher is disabled by token resolution failure (Ana Berg)
3fa853a fix: classify GitHub API errors and stop runs on permanently missing PRs (Ana Berg)
c8750de feat(hub): doctor checks for stuck runtime state (Ana Berg)
ac0b464 refactor(hub): move watchdog thresholds into liveness config (Ana Berg)
db245da feat(hub): supervise claw-bridge launches and surface restart_count (Ana Berg)
7aeadb8 fix(claw-bridge): redeliver completed replies instead of re-running turns; never drop queued messages silently (Ana Berg)
7c2ced1 fix: align GitHub PR poll/webhook dedup and claim triggers to prevent races (Ana Berg)
d9737b9 fix: move tracker issue to WorkingStatus when promoting pending claw (Ana Berg)
b0ac871 fix: dedup external generic webhook triggers per delivery, not just event type (Ana Berg)
a43bf1f fix: address reaper review findings (firstSeen eviction, self-healing loop) (Ana Berg)
a1d5167 test: deflake watchdog force-finish test by skipping unrelated WS frames (Ana Berg)
e122eed Merge remote-tracking branch 'origin/claude/liveness-pipeline-terminal' into claude/agent-liveness-terminal-state (Ana Berg)
137f14c Merge remote-tracking branch 'origin/claude/liveness-watchdog-enforcement' into claude/agent-liveness-terminal-state (Ana Berg)
f4f12ed Merge remote-tracking branch 'origin/claude/liveness-boot-reconciler-reaper' into claude/agent-liveness-terminal-state (Ana Berg)
b0928b1 fix: restore heartbeat escalation guard and retry classification for watchdog reasons (Ana Berg)
bc53abc fix: age provisioning claws from first observation, preserve VM-lost retry classification (Ana Berg)
ed89f08 fix: preserve gate retry-loop routing and guard issue-less [DONE] teardown (Ana Berg)
c035a64 fix: wait for HTTP drain before closing DB; fix log buffer data race (Ana Berg)
e766a3d test(hub): cover watchdog enforcement escalation paths (Ana Berg)
727b2a9 feat(claw-bridge): report gateway exit immediately to heartbeat and turn (Ana Berg)
11ac6ed feat(hub): enforce watchdog thresholds for dead/hung agents (Ana Berg)
95e7552 test(hub): cover graceful shutdown and pr_conditions retry (Ana Berg)
a04410d fix(hub): mark pr_conditions_fired only after transition succeeds (Ana Berg)
996d1da test(hub): assert sqlite busy_timeout pragma is applied (Ana Berg)
0d4f225 feat(hub): apply panic recovery to remaining run-owning goroutines (Ana Berg)
9bb3f0f feat(hub): graceful shutdown and panic-recovery helper (Ana Berg)
67da6bc fix(hub): start reaper loop and terminate claws on VM-404 (Ana Berg)
232ad2d fix(hub): promote pending claws after stopAgentWithReason (Ana Berg)
fa1cbaf feat(hub): add boot reconciler and periodic liveness reaper (Ana Berg)
b2fa07c test: cover terminal-error and issue-less [DONE] pipeline paths (Ana Berg)
9a5612f fix: give issue-less workflow claws a [DONE] completion path (Ana Berg)
62d9f0d fix: stop agent on non-terminal on_enter failure and unrouted gate errors (Ana Berg)
74ae04e feat(hub): add liveness config for boot reconciler and reaper (Ana Berg)
b9a85c6 Merge pull request #480 from elasticclaw/feature/fix-daytona-openclaw-env (Ana Berg)
6f15ae5 fix(daytona): preserve sandbox recovery during readiness (Ana Berg)
53ad912 fix(daytona): retry env setup and clean up failures (Ana Berg)
41b7bb9 Merge pull request #481 from elasticclaw/claude/agent-claw-corruption-retry-a6d83f (Ana Berg)
f78f71e fix: fall back to terminal cleanup when retry preparation stays indeterminate (Ana Berg)
2e3bad7 fix: settle dangling retry attempt when claw changes state during backoff (Ana Berg)
e8efe5c fix: make custom path filter mismatch consistent with default scan (Xav Paice)
29cee9e feat: depot ci log instructions and workspace push --path (Xav Paice)
3bcebaf feat: automatic retry for corrupted claw instances (Ana Berg)
2e5dba3 fix(daytona): materialize workflow env before bootstrap (Ana Berg)
41698f0 fix: make filter-options ACL path eligibility filters explicit (Ana Berg)
c070abe fix: enforce claw view ACL on analytics summary and filter-options (Ana Berg)
e457527 fix: address review feedback on run logs dialog (Ana Berg)
b40def4 feat: agent logs in analytics drill-down (Ana Berg)
8f52555 fix manual workflow input context (Marc Campbell)
9d3f359 Merge pull request #475 from elasticclaw/fix/docker-workspace-secrets (Marc Campbell)
75d71a4 fix docker workflow secret injection (Marc Campbell)
52adbd7 Merge pull request #449 from elasticclaw/fix-workflow-show (Marc Campbell)
a096569 fix: address review comments on workflow raw config (Xav Paice)
761cbe8 Defer GitHub repo diagnostics until all apps fail (Marc Campbell)
875b168 Report inaccessible GitHub App repositories (Marc Campbell)
bfd7506 Clarify Docker helper diagnostics (Marc Campbell)
7b39e74 Diagnose Docker GitHub credential helper (Marc Campbell)
bae5acd Verify Docker GitHub credential helper (Marc Campbell)
fd7ad51 Create Docker credential helper privately (Marc Campbell)
25f0e9f Avoid sudo in Docker credential bootstrap (Marc Campbell)
e34af2e Merge pull request #460 from elasticclaw/debug-docker-workspace-bootstrap (Marc Campbell)
aa09493 Address Docker bootstrap review feedback (Marc Campbell)
523bbc2 Fix Docker workspace bootstrap (Marc Campbell)
9d7f980 fix: make workflow show display the raw workflow YAML (Xav Paice)
1f8be6f fix: reject workspace names that collide with settings UI sections (Xav Paice)
f56338c fix: harden gh token refresh wrapper install (Ana Berg)
f94e408 fix: refresh GitHub App tokens for agent gh commands (Ana Berg)
a0968a9 fix: address issue label skip review feedback (Ana Berg)
6f99936 fix: bind docker e2e hub for container access (Ana Berg)
a770392 feat: support issue label stage skips (Ana Berg)
11b5c76 Fix Docker bridge startup path (Marc Campbell)
f79ae78 Start Docker bridge for default image (Marc Campbell)
0c69621 Copy Docker workspace under container home (Marc Campbell)
2d8bda2 Avoid chowning Docker container root (Marc Campbell)
b2e15f9 Add Docker workflow E2E suite (Marc Campbell)
0db0a16 Fix Docker workspace copy permissions (Marc Campbell)
efd4cb0 Address single provider test review (Marc Campbell)
7269c36 Default to sole configured provider (Marc Campbell)
51afbb5 Harden Jira search pagination (Marc Campbell)
5e08712 Use Jira JQL search API for polling (Marc Campbell)
ba98f26 Merge main into brand web UI copy (Marc Campbell)
6093436 Address branding copy review (Marc Campbell)
8769fc9 Address Jira automation payload review (Marc Campbell)
8d6b5bb Apply branding to web UI copy (Marc Campbell)
609b648 Support Jira automation issue payloads (Marc Campbell)