Syrus 0.1.4
Highlights
- Walkthrough Videos → Epics: Record or drag in a narrated screen recording; Gemini analyzes it and chat proposes a matching Epic. Includes live red-pen screen annotation, hold-to-draw, and an OCR handoff so Claude can read stills flagged by Gemini. Ships behind a Labs feature flag (default off).
- Coding Mode: A new chat mode that grants the agent write tools against a real checkout, with a live file tree, diff viewer, and an "Open in Coding Mode" take-over workflow for existing Jobs.
- Local Mode: Run agent work against your own machine via a new reverse-tunnel CLI daemon (
syrus local), with a take-over workflow, connection status, and a diff panel in chat. - Test coverage analysis: Parse LCOV/Cobertura reports, annotate diffs with coverage, track trend over time, post PR comments, and auto-schedule coverage-improvement jobs on regressions.
- Main branch health monitoring: Continuous grading of
main, automatic landing-queue pause/resume on breakage, auto-repair jobs, and health status/history surfaced throughout the UI. - Desktop side-by-side channels: Stable and test builds can now be installed and run at the same time, each with its own CLI profile.
- Full i18n pass: English, German, and Latin translations wired across nearly every route and component in the app.
Chat
- New scratchpad: jot down ideas, stash/queue between the scratchpad and the message queue,
/scratchslash command, and a Tab-to-stash shortcut. - New Jobs tab in the chat workspace with a live status feed for jobs linked to the conversation.
- Hover-preview cards for Job/Epic slugs referenced in chat and elsewhere in the app.
- Chat delete flow renamed and reworked: hard delete with worker-side cleanup.
- Coding Mode / Local Mode toggles with mode-aware system prompts and short in-context hints.
- Send media with no accompanying text; walkthrough videos now appear in the media panel.
- Paste-to-attach in the composer, plus subtle flag-gated animations.
Desktop app
- Side-by-side stable/test channels, with an in-app TEST badge and a "Reset Test Setup" option on test builds.
- Install progress bar, redesigned uninstall menu flow, and Docker image cleanup.
- CLI is now actually bundled and installed with the app; "Open in Syrus" focuses the running window.
- DMG installer prefers
/Applicationsand asks before replacing an existing install; hardened against several edge cases. - Streamed backend-update notice with progress phases and connectivity-aware gating.
- Recording HUD floats in its own draggable window; true OS-level hold-to-draw for the red pen.
Web app
- New marketing website rebuilt on Next.js under
website/, replacing the old Astro-based docs site, deployed via GitHub Pages. - Rebuilt
/credentialspage around the setup flow's provider cards. - Coverage card, diff annotations, source hit map, and trend sparkline on jobs and repositories.
- Main branch health status and history shown on the dashboard, repository, and job views, with manual "Check CI Now" and repair actions.
- Epic progress replaced with a colorful progress bar on the dashboard and kanban cards.
- "Create Epic & Start Implementing" gated to developer/admin users.
CLI
- New
syrus localreverse-tunnel daemon subcommand powering Local Mode. - Test-channel builds ship their own CLI profile (
syrus-test), derived from argv0.
Docker and deployment
- New queue-partitioning configs (
config/queue.compute.yml,config/queue.home.yml) for multi-node deployments. - Workspace pruning and disk-health reporting are now per-worker; single-host Docker installs keep correct disk-usage banners.
- Admin-configurable global agent-concurrency cap.
- Trimmed Docker build context;
bin/deployupdated for the multi-worker split topology — operators running multi-worker setups should review the updated deployment docs before upgrading.
Fixes
- Merge train: rebuild instead of unapproving on stale-base failures, incremental rebase recovery on moved bases, guards against reopening failed trains and against assembling with open unapproved siblings.
- Resume now reopens the failed step instead of spawning a new Manual workflow; latest-workflow selection now uses finish time instead of creation time.
- More resilient stale-run reaping (aware of live progress) and reconciliation of workflows stuck after hard step failures.
- Fixed dropped first character on scratchpad Enter-submit and a scratchpad badge that failed to clear when all items were deleted.
- Fixed the overflow menu opening off-screen on mobile.
- Numerous CI stability fixes (timeouts, stale test setup) for React and RSpec suites.
Internal
- Major refactor of the frontend: the 4,700-line
Chat.tsxand 2,300-lineJobDetail.tsxwere split into focused modules and components; largeChatsController,DashboardPayload, andJobmodel concerns extracted for readability. - Consolidated duplicated helpers (
withRoutePrefix,formatDate,errorMessage,formatBytes,inputClass) into shared libraries. - Replaced several type-switch anti-patterns (providers, policies, pending actions) with registry-based dispatch.
- CI: shared reusable
_build-app.ymlbuild spine,test-releaserenamed totest-build, and desktop builds parallelized (~40% faster). - Dead-code removal across Ruby and TypeScript, plus new test coverage for previously untested models and services.
Full changelog
What's Changed
- Fix merge-train stale-base failures to rebuild instead of unapproving by @tkadauke-syrus[bot] in #1622
- Weekly anti-pattern scan: 5 policy-type switch instances flagged by @tkadauke-syrus[bot] in #1614
- Wire i18n t() calls in Dashboard and EpicDetail routes by @tkadauke-syrus[bot] in #1600
- Wire useT() hook and i18n placeholders across 16 route files by @tkadauke-syrus[bot] in #1601
- Remove dead code and deduplicate across Ruby and TypeScript by @tkadauke-syrus[bot] in #1613
- Wire t() calls in Admin routes for i18n by @tkadauke-syrus[bot] in #1597
- Wire i18n t() calls in DirectJobNew and JobDetail routes by @tkadauke-syrus[bot] in #1598
- Extract and wire i18n strings in utility components by @tkadauke-syrus[bot] in #1630
- Wire i18n through GitHub integration modals by @tkadauke-syrus[bot] in #1632
- Extract and translate navigation/filtering component strings by @tkadauke-syrus[bot] in #1631
- 0.1.3: ship the CLI for real, Epic start button, sidebar notices, chat rename/delete, tab-to-complete by @skadauke in #1629
- Fix Resume to reopen the failed step instead of creating a Manual workflow by @tkadauke-syrus[bot] in #1635
- Order latest workflow by finish time, not creation time by @tkadauke-syrus[bot] in #1636
- Website: Next.js marketing site under website/ + GitHub Pages deploy by @martinkadauke in #1639
- Don't fail agentic steps on provider cleanup timeouts by @tkadauke-syrus[bot] in #1637
- Remove edit button on deleted epic bundle proposals by @tkadauke-syrus[bot] in #1638
- Land Epic #158: Chat scratch pad by @tkadauke-syrus[bot] in #1645
- Gate "Create Epic & Start Implementing" to developer/admin users by @tkadauke-syrus[bot] in #1641
- Collapse multi-dependency chips to prevent title starvation by @tkadauke-syrus[bot] in #1644
- Walkthrough videos → Epics: narrated screen recordings analyzed by Gemini, Epics proposed by the chat agent by @skadauke in #1627
- Desktop: DMG self-install prefers /Applications and asks before replacing an existing install by @skadauke in #1650
- Desktop: fix silent hold-to-draw, rectangular auto-sized recording HUD, subtle pen indicator by @skadauke in #1654
- CI: test-release workflow — deterministic full build, GHCR test image, no publishing by @skadauke in #1652
- Chat composer easy wins: paste-to-attach + flag-gated subtle animations by @skadauke in #1655
- Land Epic #160: Chat scratch pad follow-on by @tkadauke-syrus[bot] in #1680
- Install dialog names real versions; test-release tags read consistently by @skadauke in #1688
- Fix overflow menu opening off-screen on mobile by @tkadauke-syrus[bot] in #1678
- Guard merge_train_assemble against open unapproved siblings by @tkadauke-syrus[bot] in #1664
- Desktop: visible backend-update progress + never report "not connected" during the outage by @skadauke in #1690
- Credentials page: rebuild around the setup flow's provider cards by @skadauke in #1691
- CI: rename test-release → test-build; run desktop in parallel (~40% faster) by @skadauke in #1696
- Land Epic #156: Coding Mode for Syrus Chat by @tkadauke-syrus[bot] in #1700
- Buffer grader output to line boundaries before logging by @tkadauke-syrus[bot] in #1697
- Fix scratch pad panel: always show dismiss button and fix visibility after close by @tkadauke-syrus[bot] in #1699
- Add incremental rebase recovery when merge_train_land sees a moved base by @tkadauke-syrus[bot] in #1701
- CI: dedup release/test-build into a reusable _build-app.yml module by @skadauke in #1707
- Pin CTA anchor targets and fix stale website README paths by @skadauke in #1653
- Land Epic #154: First-class test coverage support by @tkadauke-syrus[bot] in #1708
- Remove v2_ui and v2_sidebar_subject_selector feature flags by @tkadauke-syrus[bot] in #1712
- Land Epic #161: Broken Main Branch Detection and Recovery by @tkadauke-syrus[bot] in #1714
- Replace epic progress pill with colorful progress bar on dashboard by @tkadauke-syrus[bot] in #1702
- Remove stale PR references from feature flag descriptions by @tkadauke-syrus[bot] in #1713
- Enable coverage analysis for Ruby and JavaScript test suites by @tkadauke-syrus[bot] in #1715
- Land Epic #162: Coding mode: workspace prep + chat-first handoff by @tkadauke-syrus[bot] in #1720
- Land Epic #157: Local Mode for Syrus Chat by @tkadauke-syrus[bot] in #1726
- Land Epic #163: Job and Epic hover preview cards by @tkadauke-syrus[bot] in #1729
- Add adversarial review round to .syrus.yml by @tkadauke-syrus[bot] in #1719
- Eliminate policy type-switches via registry dispatch by @tkadauke-syrus[bot] in #1733
- Add test coverage for previously untested models and services by @tkadauke-syrus[bot] in #1732
- Remove dead code and deduplicate bind/finished-at helpers by @tkadauke-syrus[bot] in #1731
- Update ARCHITECTURE.md for changes since 2026-07-06 by @tkadauke-syrus[bot] in #1730
- Document coding_handoff workflow and Coding Mode chat workspace by @tkadauke-syrus[bot] in #1727
- Block landing units with failing or pending CI check-run state by @tkadauke-syrus[bot] in #1724
- Fix text element height truncation for multi-line content by @tkadauke-syrus[bot] in #1725
- Fix Excalidraw elements unselectable after agent draw_* updates by @tkadauke-syrus[bot] in #1728
- Add blocked reason column to landing queue dashboard by @tkadauke-syrus[bot] in #1734
- Land Epic #165: Syrus feature documentation search for chat agents by @tkadauke-syrus[bot] in #1739
- Side-by-side stable/test channels for the desktop app by @skadauke in #1709
- Fix two broken main branch test failures by @tkadauke-syrus[bot] in #1746
- Land Epic #169: Workflow UI improvements by @tkadauke-syrus[bot] in #1758
- Show elapsed time for completed workflow steps by @tkadauke-syrus[bot] in #1750
- Land Epic #168: Chat job status sidebar by @tkadauke-syrus[bot] in #1759
- Allow editing memory scope and repository attachment by @tkadauke-syrus[bot] in #1745
- Link MainBranchHealthCheck rows to their grader workflow by @tkadauke-syrus[bot] in #1741
- Limit main-branch grading to one active job per repo by @tkadauke-syrus[bot] in #1743
- Add manual main-branch grader action to repository health UI by @tkadauke-syrus[bot] in #1744
- Fix health banner showing "queued jobs are held" when not paused by @tkadauke-syrus[bot] in #1765
- Fix chat Jobs tab clearing when live events arrive by @tkadauke-syrus[bot] in #1768
- Add per-route RouteErrorBoundary with opt-in bug reporting by @tkadauke-syrus[bot] in #1766
- Add root AppErrorBoundary as full-page safety net by @tkadauke-syrus[bot] in #1767
- Make textarea required conditional on attachments in chat composer by @tkadauke-syrus[bot] in #1764
- Clean up infrastructure workflow workspaces immediately; suppress retry/reopen UI by @tkadauke-syrus[bot] in #1761
- Remove redundant mode dropdown from chat settings by @tkadauke-syrus[bot] in #1771
- Sort Jobs tab by updated_at and add hide-closed toggle by @tkadauke-syrus[bot] in #1770
- Compact desktop tray epic group headers with icon checkout by @tkadauke-syrus[bot] in #1760
- Fix main_grader jobs appearing in operator dashboard by @tkadauke-syrus[bot] in #1742
- Bump CI timeouts: react 10→15 min, rspec 20→30 min by @tkadauke-syrus[bot] in #1781
- Use job slug in landing queue blocked reasons by @tkadauke-syrus[bot] in #1778
- Move step artifact buttons into run row, render summary as markdown by @tkadauke-syrus[bot] in #1779
- Land Epic #137: Adversarial Review Loop by @tkadauke-syrus[bot] in #1786
- Render adversarial review critique as markdown by @tkadauke-syrus[bot] in #1776
- Fix Local Mode appearing 5 times on Admin Features page by @tkadauke-syrus[bot] in #1773
- Keep at most one workflow workspace per Job to fix disk fill by @tkadauke-syrus[bot] in #1785
- Show coding handoff jobs in the chat Jobs tab by @tkadauke-syrus[bot] in #1774
- Require title and enforce brief description in submit_coding_changes by @tkadauke-syrus[bot] in #1772
- Fix tool result content showing as (empty) in chat by @tkadauke-syrus[bot] in #1769
- Add Check CI Now button to main branch health section by @tkadauke-syrus[bot] in #1782
- Add patch_search_mount to bin/deploy for writable search volume by @tkadauke-syrus[bot] in #1790
- Guard array .length accesses against undefined in SPA by @tkadauke-syrus[bot] in #1787
- Add when_files_changed skip condition to graders by @tkadauke-syrus[bot] in #1791
- Make hover card slugs copyable via CopyableSlug by @tkadauke-syrus[bot] in #1792
- Add sidebar chat mode icon and hide dots on hover by @tkadauke-syrus[bot] in #1775
- Remove duplicate My Profile link from settings popup by @tkadauke-syrus[bot] in #1793
- Fix All Jobs appearing twice in smart folder sidebar by @tkadauke-syrus[bot] in #1794
- Enrich submit_coding_changes pending action card by @tkadauke-syrus[bot] in #1795
- Land Epic #161: Broken Main Branch Detection and Recovery by @tkadauke-syrus[bot] in #1804
- Reject job proposals targeting done or archived epics by @tkadauke-syrus[bot] in #1797
New Contributors
- @martinkadauke made their first contribution in #1639
Full Changelog: v0.1.1...v0.1.4