Skip to content

v1.0.0-rc.1

Pre-release
Pre-release

Choose a tag to compare

@rafaelromao rafaelromao released this 29 Jul 19:42
1d8a7ca

1.0.0-rc.1 (2026-07-29)

Features

  • add ## Children heading parser, inline children pattern, and document accepted formats (#2330) (c0f13ae)
  • add abstract fallback for command server sockets (#1547) (d733c37)
  • add SANDMAN_TEST_FAST env var for blocking agent shims (fixes #1977) (#2028) (ee502f3)
  • batch: add implementation model variant (#2395) (0eb00cb)
  • batch: show retry banners only for retries (#2040) (500522a)
  • clean: add --all umbrella flag (#2087) (01c7236)
  • clean: add --orphaned flag to remove orphaned test batch dirs (#1651) (4b9ce8e), closes #1632
  • clean: require an explicit mode flag (#2075) (3c07f05)
  • consolidate review RunID helper on exported ReviewRunIDFor (#2030) (7d22207)
  • drop 'Review of' prefix from orphan review portal rows (#2302) (1feafe7)
  • e2e: add dotnet preset matrix tests (issue #2060) (#2090) (9db05ca)
  • e2e: add Go preset harness tests (#2059) (#2092) (9bbbd0c)
  • e2e: add java preset matrix tests for CLI options and edited Dockerfile (issue #2070) (#2097) (86caca6)
  • e2e: add node preset variant tests for CLI options and edited Dockerfile paths (#2091) (bdfca66)
  • e2e: add python preset matrix tests (issue #2065) (#2094) (b179114)
  • e2e: add ruby preset matrix tests for CLI options and edited Dockerfile paths (issue #2068) (#2096) (61a0f79)
  • e2e: add rust preset matrix tests for CLI options and edited Dockerfile paths (issue #2069) (#2093) (e8305bc)
  • e2e: pool preset-matrix container images per preset (issue #2115) (#2119) (1f55514)
  • events: incremental events tab rendering — append-only updates (#1628) (#1652) (e7d4e8a)
  • implement empty-child Specification carve-out (#2299) (#2301) (2126632)
  • init: add verbose flag (a2efa68)
  • install: add checksum-verified release installer (#2416) (9c3cd03)
  • install: ship and install Linux and macOS arm64 binaries (#2442) (c1dcb6d)
  • paginate badge idempotency check, drop --limit 1000, ship ADR-0038 (#2017) (62f9b1e)
  • paths: extend Layout with every artifact path (#1861) (#1905) (fd61de2)
  • Portal: consolidate reviewing badge-flip to a single backend layer (#1609) (#1622) (7c35a23)
  • portal: add horizontal scrollbar to Details and Events JSON panels (#1752) (80e9258), closes #1751
  • portal: archive endpoint accepts per-row run id for every batch kind (#1687) (60cf9ff), closes #1674
  • portal: batches index entry id equals per-row RunID for every batch kind (#1692) (0dd39dd)
  • portal: enable Abort on macOS via darwin peer-PID resolution (#1727) (91f39eb), closes #1721
  • portal: expose live attempts + last retry reason on the portalRun row (#1532) (4301ec8)
  • portal: flip parent badge to reviewing during live review (#1527) (#1575) (5ca9c44)
  • portal: highlight added and removed rows in diff (#1548) (#1569) (5ddb845)
  • portal: retune light theme tokens to the border-tinted palette (#1747) (eab8df2)
  • prompt: add quality rules smoke test to PR review (#1664) (de23973)
  • prompt: render Quality check section in PR review (#1724) (4c79a26)
  • remove e2e runs from CI (#2135) (f0525d0)
  • review: add review model variant (#2399) (9f96f7a)
  • review: bound launch-failure retries with exp backoff cap 60s (#2210) (#2216) (40a8aa7)
  • review: clean up branch and worktree after launchReview (#1520) (c49dd07)
  • review: per-PR slot table for in-flight reviews (slice C, issue #1481) (#1512) (f95363e)
  • review: persist per-comment launch-retry attempt count (#2209) (#2214) (faa0f3d)
  • runid: tighten --run-id validation to require leading letter (#2306) (b0232b2)
  • scaffold: drop codeindex install from scaffolded Dockerfiles (#2180) (94fe252), closes #2168
  • scaffold: emit minimal-preset warning on init (#2108) (77f09c9)
  • scaffold: end-of-life priority-selection-prompt.md soft migration (#1867) (#1910) (7ed1d55)
  • scaffold: scaffold pinned java BuildToolsPreset (#1745) (9e93882)
  • skill: dogfood Conventional-Commits gate (#2378) (7b50aa7)
  • skill: embed sandman-index as sandman-codeindex sub-skill (#1763) (125979f)
  • skill: move pr-review per-PR trackers under state/ (issue #1866) (#1908) (6ac48b5)
  • skills: drop sandman-index sub-skill and all cross-references (#2177) (a8d1d25), closes #2167
  • skill: update PR review polling schedule to 15-min budget with 120s first poll (#1661) (b4bc4df)
  • smoke: parallelize prewarmSmokeImages across provider/buildTools variants (#2031) (0744419)
  • spec: add Client.ListSubIssues and cachedGitHubClient wrapper (f69c545)
  • spec: expand parents whose only children are native GitHub sub-issues (c1b75a9)
  • spec: expand parents whose only children are native GitHub sub-issues (9ed55d5)
  • split codeindex guidance into policy layer (opencode.json) and reference layer (sandman-index skill) (#1529) (6c84038)
  • test: assert run.started/run.finished event emission in TestReviewRun_EndToEnd_TimestampFirstIdentity (e4773a4)
  • tests: add t.Parallel() to safe independent test groups (issue #1984) (#2032) (d939dc4)
  • verify-then-close path for alreadyResolved runs (Layer 1 replacement) (#2182) (564a1f0)

Bug Fixes

  • --override reclaims foreign stranded worktrees; portal no longer renders sibling batch logs under terminal rows (#2140) (#2141) (126831c)
  • add inner padding to badge logo (#1624) (d6fcebd)
  • badge: append Built with Sandman badge to README (#2372) (cd22ea9)
  • badge: authoritatively check for existing marker PR + raise marker-list limit (#1951) (e5e215e)
  • badge: paginate via gh api --paginate, gate on tracking file, write synchronously (#2197) (1f188d5)
  • batch: enforce prompt-only idle timeouts (#2465) (43681b5)
  • batch: honour req.RunDir as batch dir for review-kind runs (#1883) (054306d)
  • batch: remove latent sid-ts fallback and clean up stale comments (cleanup of #1943) (#2049) (fd7b2b1), closes #2042
  • batch: repair non-closing PR references (#2467) (b6ecaa4)
  • batch: restrict empty-child log line to strict-spec path (#2382) (28fa949)
  • batch: silence per-page log on badge marker scan (#2041) (44ba4fd)
  • batch: stabilize Linux cancellation regression (#2448) (5b38f0c)
  • bind run socket aborts to their issue (#2287) (62259b0)
  • ci: initialize Podman config at runtime (#2474) (beb44c6)
  • ci: install Podman from macOS package (#2452) (9caa347)
  • ci: run Linux regression with runc (#2469) (c7d9c60)
  • clean: use run manifests for branch ownership (#2388) (bed1bab)
  • close tab-switch log gap with force-fetch and stream gating (#1634) (463b09b)
  • cmd: filter closed children introduced by Specification expansion (#2206) (6e8e2c4)
  • container workdir path translation (#1960) (57b2024)
  • daemon: gate abstract-socket fallback to Linux; clear error on macOS (#1732) (42dbbfc)
  • daemon: retry review post step on transient gh failures; fall back to pending (#1891) (#1894) (a4fa2ee)
  • daemon: scope RecoverStaleRuns recovery by batch identity (#2084) (e02bbe6)
  • daemon: support long Unix socket paths (#2422) (34b3763)
  • daemon: use deterministic short socket addresses on Linux and macOS (#2447) (5dbb3c2)
  • docs: constrain CLI example width (#2420) (3f300d2)
  • docs: make docs portal sidebar use main, bump cache to v11 (#2257) (2f0c691)
  • docs: unblock get-started/overview, drop redundant root page, relabel Usage (9689ca1)
  • docs: unblock get-started/overview, drop redundant root page, relabel Usage (c2534b1)
  • drop active.row-added CSS overrides that invert the diff palette (#1627) (#1638) (a7ccd72)
  • e2e: align TestPortal_E2E_ParentSuccWithLiveChild with post-#1622 policy (#1824) (d12595d), closes #1795
  • e2e: create .sandman/bin in writeFakeGHShim (#1820) (cc840e5)
  • e2e: hermetic gh in TestPRFlow_PodmanSandboxBinaryCommitsAndPushes (#1831) (300d087), closes #1816
  • e2e: hermetic gh in TestPRFlow_PodmanSandboxCommitsAndPushes (#1835) (7658442), closes #1817
  • e2e: hermetic gh in TestPRFlow_PodmanSandboxParallel (multi-issue) (#1838) (ad24cb1)
  • e2e: TestPortal_E2E_TwoLiveRuns registers batches index entries (#1796) (#1841) (0844477)
  • e2e: TestPRFlow_PodmanSandboxBinaryCommitsAndPushes/opencode hangs past 30m timeout (#1832) (83b1563)
  • eliminate synthetic "issue-N" RunIDs from portal view layer (#1834) (07863c2)
  • events survive poll cycle — include in summary and fix merge (#1626) (#1644) (f78f336)
  • events: LiveAttempt returns retry count, not 1-indexed attempt (#1888) (d9ddb0f)
  • evict log-pane cache one pane at a time (#1620) (dc5e148)
  • github: parse markdown blocker references (#1533) (1d0d53e)
  • github: parse plain-link blocked-by bullets (#2131) (e83d0ec)
  • github: recognize blocker bullets written as Title (#2126) (b194e7e), closes #2125
  • hydrate portal events for active runs (#1546) (9689e6c)
  • implement: guard already-resolved path against orphan PR + stale branch (#1737) (97b0113)
  • init: prompt for presets only when stack is undetected (#2411) (0e0258c)
  • init: suppress existing hook warning by default (8d75faa)
  • keep active row highlighting visible (#1584) (1e81721)
  • orchestrator: emit terminal event on early-return failures in execute() (#2137) (22dcfce), closes #2136
  • orchestrator: keep in-batch blockers wired as deps even when already closed (#2190) (afae6be)
  • orchestrator: persist underlying error in run.finished for early-failure paths (#2346) (1956eb1)
  • orchestrator: refuse success when branch has open PR or DIRTY PR (#1734) (69cb023)
  • orchestrator: restore host git paths before post-run reconcile (#2461) (1f29115)
  • portal: bound SSE reconnect after permanent stream failure (#2458) (e72a058)
  • portal: center empty-state row on mobile (#1581) (f52d196)
  • portal: collapse duplicate discoverActiveRuns so live reviews show status=reviewing before run.started lands (#1872) (696b9eb)
  • portal: deduplicate active review row and unify its BatchKey (#1915) (76991de), closes #1914
  • portal: demote blocked and queued rows out of kind='active' (#1708) (00531fe), closes #1699
  • portal: drain outgoing coalescer on subject-switch dropdown (#2366) (b8027b8)
  • portal: drop row-added from active rows and remove hover tint (#1705) (8695e36)
  • portal: drop sticky row-added tint from terminal rows (#1670) (6fd5e76)
  • portal: exclude live active batch from dead-batch synthesis (#1698) (87c224c), closes #1659
  • portal: exclude queued wait from run duration (#2343) (ee64091)
  • portal: fetch final saved log when streaming run completes (#2263) (f15302a)
  • portal: filter live SSE stream to the requested run (#1572) (c36d5cf)
  • portal: keep canonical parent in subject dropdown for multi-impl groups (#1885) (d24f69e), closes #1884
  • portal: keep live log ordering during refresh (#1948) (#1950) (eb71ad9)
  • portal: keep live log stream open during refresh (#1965) (ef23723)
  • portal: live output for active review run in subject selector dropdown (#2259) (bdd40fa), closes #2258
  • portal: match toolbar bg to column headers, show repo basename on mobile (#2089) (3a36950)
  • portal: paint active row with the running-chip accent tint (#1717) (ab478e3)
  • portal: prefer BatchID match over time proximity in matchRunState (#2266) (c56ba3d)
  • portal: read review runs from canonical run folders (#1568) (e145135)
  • portal: read review verdict from saved run.log, not from run status (#1731) (ce51f70)
  • portal: reconcile after closed live stream (#2271) (0e6052c)
  • portal: recover review issue from identity on the historical path (#1646) (2fe22c2)
  • portal: refresh live duration on unchanged polls (#2269) (b89791d)
  • portal: remove cross-batch review aggregation that hides successful runs (#1825) (#1833) (e5ffccc)
  • portal: render 'In Progress' while a new review is live, even with a stale verdict (#2347) (71c2f68)
  • portal: render Review of #<pr> label for orphan reviews with no issue number (#1668) (312ee23)
  • portal: replace smooth scrollIntoView with instant/nearest on row open (#1577) (e360f0c)
  • portal: restore async chunked log tokenization; add review-large-log regression (#1508) (9c49552)
  • portal: restore cached logs at bottom (#1554) (8d9881a)
  • portal: restore review counter on parent impl row via JS synthesis (issue #1856) (#1876) (e995937)
  • portal: scope live mixed-batch log to the selected run (#1566) (a061045)
  • portal: simplify within-batch dedup to blocked/queued only (#1826) (#1836) (c99d720)
  • portal: SSE onerror no longer kills the live log until re-select (#1811) (951a5af), closes #1801
  • portal: stale counter repeats run duration for active issue-batch rows (#1723) (1b85140)
  • portal: stop painting term-command on non-shell log lines (#1602) (a2b150f)
  • portal: strip queued marker from polled pane on stream open (#2369) (7a60391)
  • portal: suppress duration tick while issue is queued (#2359) (6534806)
  • portal: suppress ghost aborted row across batches, stamp recovered runs with real timestamp (#1887) (f12a509)
  • pr-review skill: remove record_review_posted and record_trigger_posted bash wrappers (#1766) (0f75aa1)
  • pr-review: accept any review-shaped response regardless of author identity (#2081) (40ed780)
  • pr-review: detect DIRTY at every poll iteration and auto-back-merge (#1735) (fc171f0)
  • pr-review: stale informal approval must not gate PR-Merge after a new commit lands (#2310) (a6723c8), closes #2309
  • prompt: enforce loading sandman-implement so the closing-reference body rule is honored (#2357) (7d3fc8c), closes #2356
  • prompt: enforce omit '## Previous review progress' when no prior reviews (issue #1892) (#1896) (2ba4953)
  • prompt: forbid /sandman review literal substring in review-body output (#1701) (#1709) (04bb10d)
  • prompt: neutralise {{...}} literals in PR title/body for review prompts (#2024) (f18fbe4), closes #2023
  • prompt: require Approval to complete PR-Review; reset pass counter on SHA change and retry (#2261) (5f002d3)
  • prompt: rework Execution Checklist to keep original wording with Load in parens (issue #2360) (#2361) (27728b9)
  • read review verdict from worktree decision.md (issue #2020) (#2021) (3d12c9d)
  • recreate stale branch in Start() when branch exists without worktree (#1585) (#1586) (9fe5966)
  • relax bullet-pattern matching to allow trailing annotation text after issue links (#2313) (f10c643)
  • release: authorize automated release PR creation (#2393) (3551a8a)
  • release: bootstrap first release as v1.0.0 (#2400) (81192cf)
  • release: mark prerelease artifacts correctly (#2414) (eda9213)
  • resilient test assertions for version changes and batch ID ordering (#2236) (8910b10)
  • review daemon: record bot-authored bodies by greping the review run log (#1759) (#1769) (5ee27f6)
  • review: align quality-rules.md path between prompt and daemon (#2368) (2f9a068)
  • review: canonicalize review run IDs and run folders (#1551) (#1567) (e7bf6f9)
  • review: copy quality rules in prompt-only runs (#2403) (b4830e9)
  • review: parse verdict marker when line ends with trailing " from gh pr comment --body (#1776) (d6638e5)
  • review: parse verdict marker when line has trailing shell debris (2>&1 | tail, etc.) (#1813) (e9cb12f)
  • review: persist decision.md to run folder before worktree cleanup (#2225) (7d7812d)
  • review: plumb --agent and --model CLI flags through daemon mode (#1521) (1778ea7)
  • review: preserve sibling batch worktree registrations (#2355) (775cfc6)
  • review: rebase decision.md path to container mount so daemon posts the review (#1902) (#1903) (01dce19)
  • review: rehydrate pendingReviews on daemon restart (#1643) (1ccb779)
  • review: rescue decision.md from per-row worktree on PR 1942-shaped runs (#1952) (085ae35)
  • review: restrict daemon requests to authenticated user (db0868f), closes #2274
  • review: scope SelfPostStore by (pr_number, sha256) to prevent cross-PR poisoning (#1764) (902a346)
  • review: self-post filter runs before ParseTrigger; trigger hash recording removed (#1710) (0568176), closes #1702
  • review: SelfPostStore survives across daemon restarts (#1823) (1848b73)
  • review: stop defensive self-post record blinding daemon to triggers (#1722) (#1725) (5b6be80)
  • run: --continue should not reuse stored run parameters (#2365) (6ffc78d), closes #2363
  • runid: KindFromDirName handles linked review IDs (#2033) (151e40f), closes #1978
  • run: promote unsafe --continue worktrees to --override (#2328) (d63b15e)
  • run: speed up spec-expansion + --continue, parse gh 2.65 statusCheckRollup array (#2218) (#2219) (e3fc7fb)
  • scaffold: make Rust version selector tests use stable catalog pins (#2124) (744dda5)
  • skill: align implement SKILL.md phrasing with test expectations (#2101) (cc8c442)
  • skill: remove operator-response directives from AFK workflows (#2456) (63c5af3)
  • spec: discover URL and native children (#2268) (e80ea68)
  • spec: do not echo the recursion-tree parent or treat prose refs as a spec (#2333) (957114b)
  • spec: expand child-heading Specifications and retire inline parser support (#2331) (ece1f0a)
  • spec: silence broadened-detector pass-through log (#2358) (0655605)
  • stranded: git worktree --force macOS portability for stranded detector (#1740) (5360682)
  • sync bundled Rust version + e2e stub Context.Context signature (#1852) (de156f0)
  • test: align Double seed functions with fake runner template (5cbef21)
  • test: deflake macOS CI tests blocking release PR 2418 (#2436) (d7c359b)
  • TestInit_ElixirPresetBuildsForEveryBuiltInAgentProvider hangs past 10m (#1822) (4903857)
  • test: make pathlen review-socket test platform-aware and add GH_TOKEN to full regression workflows (#2425) (24fee29)
  • test: poll for initial render in mixed-batch payload refresh test (#1695) (c840975), closes #1642
  • test: register worktree in TestBatchIDRules_ContinueEmitsRunContinuedEvent (#2362) (703b1af)
  • test: resolve 4 simple test failures surfaced by SANDMAN_TEST_PROVIDERS=all (#1750) (e9be1a9)
  • tests: resolve 4 test failures surfaced by SANDMAN_TEST_PROVIDERS=all (#1773) (1eae756)
  • worktree: preserve operator HEAD commit across stranded-recovery (#2377) (dd91a34)
  • worktree: scope recovery to offending worktree only (no global prune, no foreign worktree removal) (#2191) (d2341b8)

Performance Improvements

  • badge: short-circuit HasBadgePR with .sandman/.built_with_sandman control file (#1696) (1d81348)
  • portal: baseline long-task profile for row-change interactions (#1559) (#1574) (422ca66)
  • portal: cheap fingerprint for Events/Details pane comparison (#1578) (8827899)
  • portal: coalesce SSE appendStreamLine DOM writes via requestAnimationFrame (#1579) (eb3f962)
  • portal: idle-prewarm top-N log panes via requestIdleCallback (#1564) (#1582) (5139787)
  • portal: lower sync-log tokenization threshold from 32KB to 16KB (#1576) (964b23e)
  • run: reduce Specification batch startup latency (#2213) (f4ad1b6)