Syrus v0.1.0
Syrus 0.1.0
This release introduces native desktop apps for macOS and Windows, shared repositories with team review policies, full internationalization (English, German, Latin), and a substantially reworked release pipeline.
Highlights
- Desktop apps for macOS and Windows. Install and run Syrus from a native app with first-run onboarding, a GUI-driven local Docker install, backend lifecycle management, tray inbox, auto-update, and a bundled CLI you can install with one click.
- Shared repositories. Repositories can now be shared across a team, with per-membership installation and agent provider settings, epic/job authorization, and configurable review policies (self, two-person, and final-say approvals).
- Internationalization. The web app and backend are fully localized in English, German, and Latin, with a language switcher and a saved per-user locale preference.
Desktop app
- First-run onboarding with GUI-driven local Docker install, runtime setup, port-conflict handling, and an install-failure escape hatch.
- Manage the local backend lifecycle directly from the app; retry image pulls before failing an install.
- Web-container main window with dock, single-instance handling, and DMG polish; one universal macOS DMG.
- Auto-update with a tag-driven release pipeline.
- Tray inbox groups jobs by Epic with checkout; context-aware retry actions and tray badge.
- Automatic tray-token provisioning from the signed-in web session, including on in-page navigations, with stale-token healing.
- Register the GitHub App through the default browser; install the App at add-repository time.
- Connect flow is URL-only with live validation; adopt an existing instance or take over stale offers.
- Windows app: local install via
install.ps1, bundled CLI, tray parity, one-click WSL, and Azure Artifact Signing (x64). - Bundle and one-click install the Syrus CLI; offer CLI + skill install after setup.
- Packaged as Syrus.app with signing-ready electron-builder config and a bundled installer.
- Preferences and setup surfaces compacted; "Run Setup Again" escape hatch.
CLI
syrus checkout EPIC-Ngains a--completeflag.- Accept job and epic slugs (
JOB-N,EPIC-N, bare ID) across all commands. - New
skillcommand and agent-aware skill offer;open-urlsupport. - Humanized login flow and email-format hint.
Web app
- Filter/search jobs and epics by slug (
JOB-N,EPIC-N, bare ID). - New Owner filter chip for jobs and epics, replacing the Mine/Team/Claimable tabs.
- Copyable slug in Epic and Job page titles/headers.
- Epic detail: segmented progress bar with an ordered legend, standardized headings.
- Notify the agent when pending actions are confirmed, rejected, or dismissed.
- Hover timestamps on chat message bubbles; Mark as read/unread in the chat sidebar context menu.
- Context-aware job retry actions.
- Standardized button styles, form input dark-mode/focus styles, detail panel metadata layout, tag pills, and admin subpage widths; Repository overview restructured to a 2/3 + 1/3 sidebar layout.
- New brand mark (winged stylus) and unified terracotta accent.
- Latin flavor throughout: status pill tooltips, error-page subtitles, Roman calendar cron dates, PR-description quotes, and a few easter eggs.
Merge train & workflows
- Rebuild the merge train when the base moves, restoring approvals, with explanations for rebuild blockers.
- Harden merge-train land retries; refresh git tokens on auth failure.
- Sync GitHub PR review approvals to job approvals.
- Cross-fork PR creation with fork-to-upstream routing and PR repository tracking; sync forks with upstream at prepare time.
- Release epic-blocked jobs once dependencies complete; skip redundant amend/test-plan turns when upstream has already submitted.
Docker and deployment
- New
bin/build-local-imagebuilds an installable backend from your working tree in one command. - Install script gains a GUI-drivable Docker path and hardened machine interface.
- Renamed backend image
syrus-local→syrus-backend; publish withGITHUB_TOKENinstead of a PAT. - Install prebuilt Ruby (
MISE_RUBY_COMPILE=0), cutting image build from ~13 min to seconds. - Backend image built natively per-arch (no QEMU).
Fixes
- Release epic-blocked and permanently stuck
blocked_by_epicjobs when dependencies resolve; clearlanding_failure_reasonon retry. - Fix stale association cache bypassing epic dependency blocks.
- Fix job self-approval when
owner_user_idis nil. - Fix duplicate filter suggestions and search fields showing base64 filter values.
- Remove remaining Telegram remnants from the May 2026 migration.
- Fix deprecated Context tab in repository navigation and various layout/spacing glitches.
Upgrade notes
- Global repository uniqueness. A migration adds a
repository_membershipstable and makes repository uniqueness global. If you have repositories with duplicate[owner, name]rows, review your data before upgrading; the migration deduplicates existing rows. - New migrations add slugs to jobs and epics, review policies, job approvals, target/PR repository tracking, and per-user locale. Run migrations as part of the upgrade.
Full range: v0.0.6..HEAD
Full changelog
What's Changed
- Fix stale association cache bypassing epic dependency block by @tkadauke-syrus[bot] in #1529
- Make epic slug copyable in detail page header by @tkadauke-syrus[bot] in #1530
- Move copyable slug into Job page title by @tkadauke-syrus[bot] in #1533
- Land Epic #151: Epic grouping in desktop tray inbox by @tkadauke-syrus[bot] in #1535
- Remove remaining Telegram remnants from May 2026 migration by @tkadauke-syrus[bot] in #1531
- Fix deprecated Context tab in repository navigation by @tkadauke-syrus[bot] in #1536
- Standardize admin subpage widths to max-w-6xl by @tkadauke-syrus[bot] in #1537
- Restructure Repository overview to sidebar layout by @tkadauke-syrus[bot] in #1538
- Allow job/epic filter search by slug (JOB-N, EPIC-N, bare ID) by @tkadauke-syrus[bot] in #1539
- Land Epic #148: Team Collaboration: Shared Repository Model, Fork Workflows, and Review Policies by @tkadauke-syrus[bot] in #1542
- Add Owner filter chip for epics; replace Mine/Team/Claimable tabs by @tkadauke-syrus[bot] in #1540
- Remove "Awaiting your approval" sidebar folder by @tkadauke-syrus[bot] in #1544
- Fix spurious separator line between standalone landing queue jobs by @tkadauke-syrus[bot] in #1543
- Add Owner filter chip for jobs; replace Mine/Team/Claimable tabs by @tkadauke-syrus[bot] in #1541
- Fix job self-approval blocked when owner_user_id is nil by @tkadauke-syrus[bot] in #1558
- Fix owner_approved? ignoring nil owner_user_id in ReviewPolicies by @tkadauke-syrus[bot] in #1560
- Show segmented progress bar and ordered legend chips on Epic detail by @tkadauke-syrus[bot] in #1556
- Show hover timestamp on chat message bubbles by @tkadauke-syrus[bot] in #1547
- Fix duplicate filter suggestions caused by FK value type mismatch by @tkadauke-syrus[bot] in #1546
- Notify agent when pending actions are confirmed, rejected, or dismissed by @tkadauke-syrus[bot] in #1562
- Add Latin tooltip to StatusPill for each job and run state by @tkadauke-syrus[bot] in #1563
- Land Epic #152: UI consistency pass by @tkadauke-syrus[bot] in #1582
- Update triaging tooltip to augury reference in STATE_LATIN by @tkadauke-syrus[bot] in #1570
- Add Latin tooltips for mergeable/unmergeable status pills by @tkadauke-syrus[bot] in #1565
- Add Latin subtitles and Latinize quotes on error pages by @tkadauke-syrus[bot] in #1566
- Add random Latin Publilius Syrus quote to PR descriptions by @tkadauke-syrus[bot] in #1567
- Add Ides of March easter egg to AgentActivityIndicator by @tkadauke-syrus[bot] in #1569
- Add Curia Latin tooltip to Admin navigation link by @tkadauke-syrus[bot] in #1568
- Add Roman calendar tooltip to cron task next-fire-at dates by @tkadauke-syrus[bot] in #1572
- Add Latin subtitles to onboarding empty state steps by @tkadauke-syrus[bot] in #1571
- Sync GitHub PR review approvals to job_approvals table by @tkadauke-syrus[bot] in #1559
- Fix epic header title truncation and alignment in desktop tray by @tkadauke-syrus[bot] in #1557
- Skip summarize_amend and test_plan agent turns when upstream already submitted by @tkadauke-syrus[bot] in #1579
- Restore PubliliusSyrusFooter with expanded quotes and tooltip by @tkadauke-syrus[bot] in #1564
- install.sh: GUI-drivable Docker install (+ spaces-in-path portability fixes) by @skadauke in #1490
- Desktop: extract settings + credentials modules, add backend-mode config by @skadauke in #1491
- Desktop: first-run onboarding with GUI-driven local Docker install by @skadauke in #1492
- Desktop: web-container main window, single-instance, move-to-Applications by @skadauke in #1493
- Auto-provision the desktop tray token from the signed-in web session by @skadauke in #1494
- Desktop: manage the local backend lifecycle (start/stop/watchdog) by @skadauke in #1495
- Desktop: package as Syrus.app — signing-ready config + bundled installer by @skadauke in #1496
- Desktop: auto-update + tag-driven release pipeline by @skadauke in #1497
- Website: macOS app download path by @skadauke in #1498
- Brand icons: replace the red-dot placeholder with the winged stylus by @skadauke in #1499
- Desktop: bundled CLI, in-app GitHub App setup, install resilience & UX polish by @skadauke in #1500
- Brand: unify the product accent on terracotta by @skadauke in #1553
- Windows desktop app: feature-complete port + cross-platform auth/UX overhaul + hardened release CI by @skadauke in #1555
- Land Epic #153: Internationalization — English, German, and Latin by @tkadauke-syrus[bot] in #1590
- Fix phantom gap between Dashboard and Spending nav items by @tkadauke-syrus[bot] in #1584
- Release permanently stuck blocked_by_epic jobs when job deps resolve by @tkadauke-syrus[bot] in #1585
- Add Mark as read / unread to chat sidebar context menu by @tkadauke-syrus[bot] in #1583
- Clear landing_failure_reason when retrying a failed landing step by @tkadauke-syrus[bot] in #1587
- Release CI: one manual, atomic pipeline for CLI + apps + image + notes by @skadauke in #1594
- Fix search field showing base64 dashboard filter value by @tkadauke-syrus[bot] in #1593
- Accept job and epic slugs in all CLI commands by @tkadauke-syrus[bot] in #1589
- Release: dry runs sign, faster image build, drop signing-test workflow, node24 actions by @skadauke in #1599
- Release: reusable website deploy, build-backend rename, disk+cache fixes, near-atomic publish by @skadauke in #1602
- Desktop: one universal macOS DMG, Windows x64-only by @skadauke in #1603
- Release: tag-driven versioning + dispatch copy fixes by @skadauke in #1604
- Image: install prebuilt Ruby (drop the ~13-min source compile) by @skadauke in #1605
- Rename backend image syrus-local → syrus-backend; publish with GITHUB_TOKEN (no PAT) by @skadauke in #1606
- Fix release-blocking curl (43) in syrus_verify_pushed: verify via imagetools, not a base64'd bearer token by @skadauke in #1609
- Remove duplicated :position hash key (silences a compile warning) by @skadauke in #1611
- Fix release blocker: publish ran
gh release create release create …by @skadauke in #1612 - Build backend natively per-arch (kill QEMU); dry run now tests both arches by @skadauke in #1610
- Release polish: trim redundant assets + Claude-written notes (optional review gate) by @skadauke in #1616
New Contributors
Full Changelog: v0.0.6...v0.1.0