Child tasks and Kibitzer wakes of a fast-mode session no longer fail with model_unavailable: a -fast pin is accepted when the session starts on its paired base model. Since 5.1.25, a category pinned to a -fast catalog variant such as chatgpt-subscription/gpt-6-luna-fast was refused after start, because senpi starts a -fast pin on its base model with the priority tier. Kibitzer recall wakes failed on every wake, and the built-in fast-first chains (quick, deep-low, deep-high, ultrabrain) silently skipped their first model. A run that started on the standard tier instead of priority is now accepted and recorded on the task (effective_model.service_tier) instead of refused. (#9793, #9808, #9812, #9813)
omo runs on senpi 2026.10.10-11. tool_schema("eval:environments") now documents packages.install and its environment_install_timeout, so JavaScript and Python cells can discover how to install packages without changing the default eval description or parameters. Julia, Ruby and Python cells do less fixed work per cell: no globals walk below the memory thresholds, no awaited cwd stat, and leaner Python queue and capture bookkeeping. A scheduled prompt created in a desktop thread before the OmO desktop moved that folder now fires, and --session, --resume and --continue find such sessions in the folder's new home. A session another live process already holds is refused with a typed session_held error instead of being opened twice. Sessions that share MCP servers but resolve different MCP configs no longer break each other's tools. A goal whose continuation stops also stops its timer. On Windows, stopping a command's process tree can no longer kill an unrelated process that reused a pid. On macOS and Linux, processes a JavaScript eval cell starts get their own process group, so a group kill can't stop the agent, and leftover grandchildren are stopped when the cell ends. Full engine notes: senpi 2026.10.10-11. (code-yeongyu/senpi#3003, code-yeongyu/senpi#3028, code-yeongyu/senpi#3033, code-yeongyu/senpi#3034, code-yeongyu/senpi#2990, code-yeongyu/senpi#2951, code-yeongyu/senpi#2597, code-yeongyu/senpi#3007, code-yeongyu/senpi#2999, code-yeongyu/senpi#2995, code-yeongyu/senpi#3020, #9825)
Fixed
A background child no longer stays suspended while its parent is running. A child parked while its parent session was still live was only revisited at the parent's next start, so it could sit suspended for hours and a goal waiting on its result waited forever. It is now revived right away, or ends with one result. (#9350, #9799)
omo.dev shows its live stats more reliably. A cold page load whose first stats refresh hit one upstream blip showed the fallback numbers; it now falls back to the last complete set instead. (#9820, #9821)
- 29fa016 Merge pull request #9823 from code-yeongyu/docs/5.1.29-notes
- a956263 docs(changelog): 5.1.29 release notes (lead with the -fast fix; promote the -11 adoption entry from #9825)
- 78214c8 Merge pull request #9826 from code-yeongyu/fix/get-worker-rollup-first-day
- 3201f74 fix(get-worker): the hourly rollup never writes days before ROLLUP_FIRST_DAY (2026-10-10)
- 8e750a6 Merge pull request #9822 from code-yeongyu/fix/first-deploy-asset-history
- 06f3a39 Merge pull request #9819 from code-yeongyu/test/9766-stage2-guard-followups
- dfc99dc fix(web): restore the workflow tests (committed empty); report the waiver only when used; cutover summary prints the reason
- 4b5d0b8 Merge pull request #9816 from code-yeongyu/cutover/repoint-installer-mirror
- f698f74 fix(web): first deploy after a deployment made outside the retention pipeline (dispatch-only reason)
- efb8ca5 Merge pull request #9821 from code-yeongyu/fix/9820-stats-last-known-good
- 0d14edb style(web): prettier on the stats tests
- 014d359 test(web): stored copy keeps its age; malformed counts, description and time are ignored
- 6be3722 fix(web): serve a shared last-known-good stats copy when a cold isolate refresh fails
- ac9fcb6 Merge pull request #9815 from code-yeongyu/cutover/repoint-omo-deploys
- cd2da63 test(#9766): stage 2: list only omo-test-session-manager-fallback- (review)
- cbeec58 test(#9766): stage 2: the shrink check accepts narrowing; list omo-test-session-manager- for omo-opencode
- aaaccc3 Merge pull request #9818 from code-yeongyu/test/9812-fast-spelling-pin
- c039930 test(#9766): stage 2 review: both messages in the thrown error, two-way creator match, skip own fixtures
- 2d43758 test(#9766): stage 2: shared matcher with a table test, both errors from the hermetic-home teardown, derivation script, drop generic and duplicate entries
- 5a1a127 Merge pull request #9813 from code-yeongyu/fix/9812-fast-pairing
- 6ba3f19 Merge pull request #9810 from code-yeongyu/fix/9766-test-temp-leak
- 556e338 ci(installer): check the served channel against the bucket pointer after the run, with a bounded wait
- 4bc6edf ci(cutover): installer mirror writes the Sisyphus Labs omo-releases bucket and proves get.omo.dev serves the tag
- 4038c65 ci(cutover): gate the manual omo-get deploy too, fail closed without a ledger or migrations, and update the deploy docs
- bd42334 ci(cutover): live deploys target the Sisyphus Labs account; omo-get refuses a pending D1 migration
- 6355b08 test(#9766): exact report-only entries end in '$' (a leading '=' tripped the agent command-string audit on '=omo.js')
- fda0399 test(#9766): derive template-literal and concatenated temp names into the report-only list; resolve the sg helper's omo-- prefixes; .d.mts for the shrink script (CI)
- 0b8bcf5 Merge pull request #9809 from code-yeongyu/cutover/stage2-omo-routes
- 70f8ab9 Merge pull request #9808 from code-yeongyu/fix/9793-fast-variant-pin
- 73d79dc test(#9766): report-only list derived from source + measurements; guard runs in the hermetic home's finally after hosts exit; exact '=' entries; ownerless-root sweep; exit-code base check (review)
- 09ec25f ci(cutover): name the target zone by id on the get.omo.dev custom domain too
- e860d5c test(memory): tools-operations uses the support module's per-test root instead of the removed roots array (#9766 review)
- 5b066c3 ci(cutover): get.omo.dev is a custom domain for the target omo-get, as on live
- f89fdbb ci(cutover): zone routes on the Sisyphus Labs omo.dev zone for the target web and get Workers
- e3d6943 Merge pull request #9804 from code-yeongyu/cutover/stage1-target-deploy
- e9eaa0d Merge pull request #9799 from code-yeongyu/fix/9350-suspended-child-live-parent
- 3151962 wip(test): per-run temp root, leak guard, report-only list, fixed creators (#9766)
- fa9c31d ci(cutover): job summary (dev's summary rule); smokes wait up to 5 min for a fresh workers.dev script
- 95de08a ci(cutover): deploy in its own step (no token for install/build); smoke proves the R2 source (review round 2)
- e9cd149 ci(cutover): token only on the deploy commands; smoke R2 and D1 reads (review round 1)
- 99529d2 ci(cutover): stage-1 target deploy for omo.dev's Workers (workers.dev only)
- ae4ddd2 Merge pull request #9806 from code-yeongyu/release/v5.1.28-source-state
bun add -g omo-ai