Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
281 commits
Select commit Hold shift + click to select a range
07eb8cf
fix: address opencode review findings on Episode Composer
atomantic Sep 4, 2026
c4d7c8a
Merge pull request #6233 from atomantic/claim/issue-6228
atomantic Sep 4, 2026
9fe1679
fix(cos): ensure CoS agent panel retains w-full and min-w-0 when non-…
atomantic Sep 4, 2026
2c553ee
Merge pull request #6234 from atomantic/cos/task-mtn24g1t/agent-7a048a31
atomantic Sep 4, 2026
85c0cea
fix: stop the data.reference seed from wiping CoS settings on the #61…
atomantic Sep 4, 2026
1d7422a
Auto-remove the blocked label once its named dependency issue closes
atomantic Sep 4, 2026
fda4262
address review (claude): pin the alwaysOn default, witness the retire…
atomantic Sep 4, 2026
4b6de80
Merge pull request #6236 from atomantic/cos/task-mtn22in4/agent-5ea60e13
atomantic Sep 4, 2026
ba0e6cb
shrink the pr-reviewer Stage 3 prompt from ~400KB to ~50KB and stop a…
atomantic Sep 4, 2026
7a27e1b
disable Bun's 6-minute fetch timeout for a local-daemon Claude harnes…
atomantic Sep 4, 2026
e79909a
recover a headless TUI agent from a retry ladder that never answers a…
atomantic Sep 4, 2026
064eddd
simplify the TUI recovery gates and the lens placeholder after review
atomantic Sep 4, 2026
c7b77d5
address local review: count declines not nudges, keep the dialog tail…
atomantic Sep 4, 2026
4768b88
Merge pull request #6237 from atomantic/cos/task-mtn2g3ch/agent-793d0985
atomantic Sep 4, 2026
a86f38c
suppress the claude CLI's unrecognized-model telemetry line from stag…
atomantic Sep 4, 2026
a7ebe7a
Merge pull request #6239 from atomantic/cos/task-mtn6bzjp/agent-b7b7c1a9
atomantic Sep 4, 2026
1983309
feat: give OpenCode an attachable Stage 3 pr-reviewer recipe so its a…
atomantic Sep 4, 2026
128a17e
refactor: derive public-review attachability and enforcement from whi…
atomantic Sep 4, 2026
d3f9c5a
docs: say when the OpenCode actions recipe's config posture actually …
atomantic Sep 4, 2026
6b36fed
feat: avoid opening duplicate tabs in CDP browser on update
atomantic Sep 4, 2026
d6e27e0
Merge pull request #6242 from atomantic/cos/task-mtn6xq1w/agent-2dad6cd1
atomantic Sep 4, 2026
2f5dba8
Merge pull request #6223 from Bryandero98/feat/slotstream-weights-pro…
atomantic Sep 4, 2026
da0bcc1
feat: add client orchestration profile pickers and settings library (…
atomantic Sep 4, 2026
7fd2edb
Merge pull request #6240 from atomantic/claim/issue-5992
atomantic Sep 4, 2026
952fd8a
allow resolve-and-merge follow-ups to adopt a live /claim worktree
atomantic Sep 4, 2026
a18c872
Merge pull request #6241 from atomantic/claim/issue-6238
atomantic Sep 4, 2026
6d5d551
Merge pull request #6244 from atomantic/cos/task-mtn7zy9c/agent-d9041d7d
atomantic Sep 4, 2026
55d2597
feat(daemons): release managed model daemons under host memory pressu…
atomantic Sep 4, 2026
00899ac
fix(daemons): address review findings for deadband hysteresis and kee…
atomantic Sep 4, 2026
ef7cd12
address review (agy): dead-band starvation, stale idle re-stop, pin f…
atomantic Sep 4, 2026
1556632
Merge pull request #6243 from atomantic/claim/issue-5818
atomantic Sep 4, 2026
80bd6df
fix(mind): stop opening every wake with a recap, and show the mind it…
atomantic Sep 4, 2026
8823941
address review (local): task-queue prompt wording matches what a comp…
atomantic Sep 4, 2026
5498e2b
Merge pull request #6245 from atomantic/cos/task-mtna836j/agent-623f63ab
atomantic Sep 4, 2026
b4a0ced
fix(mind): route delegated tasks to the repo that will hold the change
atomantic Sep 4, 2026
1c08064
Merge pull request #6247 from atomantic/cos/task-mtnb7y8v/agent-e968a2f2
atomantic Sep 4, 2026
3b4af8c
video gen: make display-sleep opt-in and settable per render
atomantic Sep 4, 2026
f89d7bb
add Core Assembly CoS avatar: a 2D-canvas wireframe icosahedron with …
atomantic Sep 4, 2026
c2ad284
add Kestrel Neon theme family and a shared, token-driven effects layer
atomantic Sep 4, 2026
8b7f08b
theme effects paint on a dedicated layer element; heading treatment b…
atomantic Sep 4, 2026
899536c
address review (local): Core avatar no longer throws on mount; Black …
atomantic Sep 4, 2026
db9f1df
address review (agy): repaint the Core avatar on a state change under…
atomantic Sep 4, 2026
21e96c2
feat(eidoverse): let a hosted world name its PortOS host and describe…
atomantic Sep 4, 2026
858531a
Merge pull request #6250 from atomantic/cos/task-mtnbhavy/agent-d0198b37
atomantic Sep 4, 2026
d443a42
feat(providers): refresh available Codex models, add refresh button, …
atomantic Sep 4, 2026
30a8e56
Merge pull request #6251 from atomantic/cos/task-mtndgckq/agent-401acf52
atomantic Sep 4, 2026
85883c9
address review (local): honest 405, one world-title fallback, and des…
atomantic Sep 4, 2026
19e3f4a
Merge pull request #6252 from atomantic/claim/issue-6246
atomantic Sep 4, 2026
b9e8c4c
feat(themes): tokenize per-theme card/focus/nav/code CSS rules (#6248)
atomantic Sep 4, 2026
4f967ac
fix(themes): scope card-border and focus-shadow tokens to avoid clobb…
atomantic Sep 4, 2026
1baba20
fix(themes): separate the theme-scoped focus glow from the generic token
atomantic Sep 4, 2026
0468c74
Merge pull request #6254 from atomantic/claim/issue-6248
atomantic Sep 4, 2026
2ea7f2b
unify the CoS avatar-style vocabulary into one exported registry (#6253)
atomantic Sep 4, 2026
15877b6
Merge pull request #6259 from atomantic/claim/issue-6253
atomantic Sep 4, 2026
d514e1f
Merge pull request #6249 from atomantic/cos/task-mtnaxgd0/agent-1428b00e
atomantic Sep 4, 2026
958cf2c
fix: enforce layered trust boundaries for forge and message automation
atomantic Sep 4, 2026
de89476
fix: align PR review stage controls with tool-free policy
atomantic Sep 4, 2026
dc5439a
Merge pull request #6260 from atomantic/cos/task-mtnganhs/agent-cc7c979a
atomantic Sep 4, 2026
904b436
feat(cos): name the apps holding leftover branches in the idle-branch…
atomantic Sep 4, 2026
1b6a022
fix(cos): keep leftover-branch Run Now per-app and reset it on failure
atomantic Sep 4, 2026
3fc671f
feat: load slashdo workflows by phase in agent prompts
atomantic Sep 4, 2026
c923c65
fix: clarify nested slashdo reference resolution
atomantic Sep 4, 2026
b5bcaeb
Merge pull request #6262 from atomantic/cos/task-mtnhp0ms/agent-1e157c48
atomantic Sep 4, 2026
ab6733f
Merge pull request #6264 from atomantic/cos/task-mtnhky9x/agent-f72a7b05
atomantic Sep 4, 2026
65c3494
fix: honor an explicit --review-with in slashdoArgs over task reviewe…
atomantic Sep 4, 2026
e551ceb
ci: initialize lib/slashdo submodule for its bundled adapter contract…
atomantic Sep 4, 2026
d5eb028
fix: click the download confirm button only once it is enabled (#6266)
atomantic Sep 4, 2026
f00f75a
Merge pull request #6269 from atomantic/claim/issue-6261
atomantic Sep 4, 2026
eaa6bfa
refactor: share the slashdo submodule CI guard, document known gaps
atomantic Sep 4, 2026
2fd3ed0
Merge pull request #6270 from atomantic/claim/issue-6266
atomantic Sep 4, 2026
c8f2949
fix: allowlist CI_EXPECT_SLASHDO_SUBMODULE in the .env.example drift …
atomantic Sep 4, 2026
dfe65be
fix: settle a cancelled voice fine-tune as cancelled instead of faile…
atomantic Sep 4, 2026
2836f6b
fix: name the signal when a fine-tuning trainer is killed instead of …
atomantic Sep 4, 2026
82d4a44
ci: run the voice fine-tuning suite on the Windows shard (#6268)
atomantic Sep 4, 2026
2ac1c6e
fix: keep persistent minds aware of current tools and Eidoverse readi…
atomantic Sep 4, 2026
29f3319
test(loras): drain escaped sidecar writes before tearing down the tem…
atomantic Sep 4, 2026
0eb9fe8
Merge pull request #6277 from atomantic/claim/issue-6265
atomantic Sep 4, 2026
54ec607
fix(github): require authenticated account for repo sync
tzioup Sep 4, 2026
85de2dd
address review (self): pin updateRepoFlags, stop deleting private rep…
atomantic Sep 4, 2026
6b92cfb
Merge pull request #6276 from atomantic/cos/task-mtnjw932/agent-8225ca6d
atomantic Sep 4, 2026
2634cd3
feat: label projected Eidoverse objects with what they represent (#6275)
atomantic Sep 4, 2026
e85ce7a
feat: index cached CoS tasks for targeted lookups
atomantic Sep 4, 2026
ca3023c
Merge pull request #6279 from atomantic/cos/task-mtnkxpj8/agent-9e1de81f
atomantic Sep 4, 2026
d93e3a4
feat: let one Persistent Mind message run on a saved alternate model …
atomantic Sep 4, 2026
ae4adac
fix: retire a temporary Persistent Mind session on every abandonment …
atomantic Sep 4, 2026
ce84943
chore: update lib/slashdo submodule to 002b83d
atomantic Sep 5, 2026
77586b1
Merge pull request #6271 from atomantic/claim/issue-6263
atomantic Sep 5, 2026
03f9bc8
Merge pull request #6272 from atomantic/claim/issue-6268
atomantic Sep 5, 2026
b2a9cf7
fix: preserve accepted temporary mind model routes (#6283)
atomantic Sep 5, 2026
f8a4d0a
fix: recheck temporary mind consent before inference (#6283)
atomantic Sep 5, 2026
ed71f5a
feat: explain Eidoverse objects and save explicit display aliases (#6…
atomantic Sep 5, 2026
7377ef5
fix: review complete FableLoom scenes before editorial approval
atomantic Sep 5, 2026
d127380
fix: retain unspent temporary messages through provider outages (#6283)
atomantic Sep 5, 2026
55be866
Merge pull request #6286 from atomantic/cos/task-mtnpl84h/agent-ff3f1c02
atomantic Sep 5, 2026
6907499
fix: preserve saved aliases and legacy asset provenance (#6275)
atomantic Sep 5, 2026
dbee048
fix: make README process commands work without global PM2
atomantic Sep 5, 2026
e906eaf
Merge pull request #6288 from atomantic/cos/app-improve-portos-defaul…
atomantic Sep 5, 2026
a054e64
fix: keep Eidoverse aliases manageable and tool results compact (#6275)
atomantic Sep 5, 2026
328fdfd
feat(themes): bring the other eight themes up to Kestrel's visual fid…
atomantic Sep 5, 2026
78432b0
fix(themes): enforce the aurora/grid-floor exclusion and refresh the …
atomantic Sep 5, 2026
7409a1d
fix(post): span full grid width when drill breakdown is expanded
atomantic Sep 5, 2026
d942384
Merge pull request #6293 from atomantic/cos/task-mtnrc1ux/agent-418845ff
atomantic Sep 5, 2026
54ad804
fix: compact scheduled projections and preserve alias editing (#6275)
atomantic Sep 5, 2026
f3c232c
fix: normalize tiling when requeueing saved videos (#6291)
atomantic Sep 5, 2026
c344f82
Merge pull request #6294 from atomantic/cos/task-mtnqv60v/agent-4235438a
atomantic Sep 5, 2026
2916741
Merge pull request #6295 from atomantic/claim/issue-6275
atomantic Sep 5, 2026
10759b9
fix(update): rebase with --autostash instead of refusing a dirty chec…
atomantic Sep 5, 2026
d1ca7fe
fix(update): keep the conflict message free of an undefined error
atomantic Sep 5, 2026
1941b18
address review (agy): trust unmerged paths over the rebase exit code
atomantic Sep 5, 2026
463fada
fix: file fal.ai and Reactor video renders under the cloud queue lane…
atomantic Sep 5, 2026
07266db
Merge pull request #6299 from atomantic/cos/task-mtnsaik1/agent-8f1ef76c
atomantic Sep 5, 2026
54f1988
fix: restore video Remix from the record, not a second URL field bund…
atomantic Sep 5, 2026
93f5cdd
fix: make a stranded video Remix handoff wait for Retry, and key it b…
atomantic Sep 5, 2026
487e6ec
update slashdo
atomantic Sep 5, 2026
5584a4a
test: bind the queue's client lane derivation to the server classifie…
atomantic Sep 5, 2026
35d8613
fix: scope the Remix retry-block to its own handoff, and prove the le…
atomantic Sep 5, 2026
92726c8
fix: spend the Remix retry-block once the URL moves off that handoff
atomantic Sep 5, 2026
959c68b
Merge pull request #6300 from atomantic/claim/issue-6292
atomantic Sep 5, 2026
d6a179f
fix: hold local video batches after repeated runtime failures (#6282)
atomantic Sep 5, 2026
bc4064b
fix: retain classified video failures across dispatch and chains (#6282)
atomantic Sep 5, 2026
7e37d3f
fix: preserve converter causes and bound held model admission (#6282)
atomantic Sep 5, 2026
f2c6f7b
fix: align held video cohorts with runtime model selection (#6282)
atomantic Sep 5, 2026
b4faef5
fix: preserve video holds across sharing imports and invalid snapshot…
atomantic Sep 5, 2026
8c1acf9
fix: skip unreadable queue snapshots during hold migration (#6282)
atomantic Sep 5, 2026
94dbb86
fix: recover media lanes when saved video holds are damaged (#6282)
atomantic Sep 5, 2026
4221329
fix: label a Remix-restored LoRA when the library lands after the record
atomantic Sep 5, 2026
75b5d4f
test: use UTF-8 for converter diagnostic fixtures (#6282)
atomantic Sep 5, 2026
d431196
Merge pull request #6301 from atomantic/claim/issue-6282
atomantic Sep 5, 2026
ad3aafa
feat: join a Google Calendar meeting from the event drawer (#6289)
atomantic Sep 5, 2026
c78045e
fix: hold Generate while a Remix handoff is still resolving its record
atomantic Sep 5, 2026
773b25f
Merge pull request #6302 from atomantic/claim/issue-6289
atomantic Sep 5, 2026
9f3bf2c
Merge pull request #6287 from atomantic/claim/issue-6283
atomantic Sep 5, 2026
1774ac6
Merge pull request #6296 from atomantic/claim/issue-6291
atomantic Sep 5, 2026
3fde165
fix: bring isSafeHref/isHttpUrl under the mirror-coverage guard (#6303)
atomantic Sep 5, 2026
1ac495e
fix: do not strand a Remix handoff on a sibling history fetch's failure
atomantic Sep 5, 2026
d0f5e33
feat: offer the signed-in ChatGPT account's real model catalog in the…
atomantic Sep 5, 2026
64f2cb5
Merge pull request #6307 from atomantic/claim/issue-6303
atomantic Sep 5, 2026
4de7723
Merge pull request #6308 from atomantic/claim/issue-6290
atomantic Sep 5, 2026
070d861
fix: route every model picker through one account-aware list resolver…
atomantic Sep 5, 2026
5b64eb9
fix: surface why pr-reviewer's on-demand Run found nothing to do
atomantic Sep 5, 2026
d6c2b85
Merge pull request #6310 from atomantic/cos/task-mtnu1mzk/agent-b4c774bb
atomantic Sep 5, 2026
3354db1
Merge pull request #6311 from atomantic/claim/issue-6306
atomantic Sep 5, 2026
52ebfc8
surface a third-party bridge re-pointing Codex model routing, and let…
atomantic Sep 5, 2026
8d56902
read a single-line triple-quoted Codex base URL instead of reporting …
atomantic Sep 5, 2026
19b77e4
Merge pull request #6312 from atomantic/claim/issue-6304
atomantic Sep 5, 2026
b97cc66
feat: guard and account every Persistent Mind provider call, not just…
atomantic Sep 5, 2026
c764698
Merge pull request #6314 from atomantic/claim/issue-6284
atomantic Sep 5, 2026
c6f0b66
fix: surface fal.ai/reactor.inc video backends when only FAL_KEY/REAC…
atomantic Sep 5, 2026
84cfaff
Merge pull request #6315 from atomantic/cos/task-mtnvmsxd/agent-ef573b74
atomantic Sep 5, 2026
545fdfa
feat: run the Codex harness on a local Ollama model via codex's nativ…
atomantic Sep 5, 2026
6cc44da
Merge pull request #6313 from atomantic/claim/issue-6305
atomantic Sep 5, 2026
6626641
feat: add an lmstudioBacked marker so harness wrappers can run on LM …
atomantic Sep 5, 2026
1d38cac
feat: expose temporary thinking presets and session provenance in the…
atomantic Sep 5, 2026
76faf6c
feat: run the Codex harness on LM Studio, completing the marker's sec…
atomantic Sep 5, 2026
dbd772c
fix: close three temporary-route gaps found in review (#6285)
atomantic Sep 5, 2026
1753915
Merge pull request #6316 from atomantic/claim/issue-6309
atomantic Sep 5, 2026
1963a9f
Merge pull request #6317 from atomantic/claim/issue-6285
atomantic Sep 5, 2026
6200d5b
update slashdo
atomantic Sep 5, 2026
b1358ea
fix: relabel claim override field as "Extra context"
atomantic Sep 5, 2026
f5b6879
Merge pull request #6318 from atomantic/cos/task-mtnykyl9/agent-6a056e6e
atomantic Sep 5, 2026
44d98ff
feat: allow approved local thinking presets for one mind wake (#6274)
atomantic Sep 5, 2026
aa7256d
Merge pull request #6319 from atomantic/claim/issue-6274
atomantic Sep 5, 2026
48cac45
feat: tell the user on the Eidoverse page when Eidoverse is out of date
atomantic Sep 5, 2026
add6197
Merge pull request #6320 from atomantic/cos/task-mtnyemsu/agent-3aab3486
atomantic Sep 5, 2026
b63e0f2
fix: stop nagging about a fork PortOS is not allowed to update
atomantic Sep 5, 2026
40d7272
fix: serve the renderer's embedding origin from the PortOS bridge (#6…
atomantic Sep 5, 2026
9d5d066
docs: correct the fork-rule header now that the server owns the rule
atomantic Sep 5, 2026
80d3445
test: pin the Host-header input matrix for the derived embedding orig…
atomantic Sep 5, 2026
e7f5e77
Merge pull request #6321 from atomantic/cos/task-mtnzqos5/agent-8559f237
atomantic Sep 5, 2026
68337f7
Merge pull request #6322 from atomantic/claim/issue-6298
atomantic Sep 5, 2026
27b5f5b
fix: enable object-anchored Eidoverse labels in PortOS
atomantic Sep 5, 2026
3354049
Merge pull request #6323 from atomantic/codex/eidoverse-object-labels
atomantic Sep 5, 2026
b80742a
Build PortOS Commons around a grassy pedestrian park (#6324)
atomantic Sep 5, 2026
3c5bb17
feat: guide dedicated Qwen hosts with persistent serving and a shared…
atomantic Sep 5, 2026
33af767
fix: recover dedicated model hosting through WSL integration and Wind…
atomantic Sep 5, 2026
84f5498
fix: fully drain abandoned branch work
atomantic Sep 5, 2026
0667f0d
Merge pull request #6325 from atomantic/cos/task-mtoocmix/agent-0d3b58cd
atomantic Sep 5, 2026
2ed8b5e
fix: resolve Codex Windows shim for model refresh
atomantic Sep 5, 2026
cf5e179
Merge pull request #6326 from atomantic/cos/task-mtoofsa8/agent-99ecc99c
atomantic Sep 5, 2026
3c8799a
fix: align model child navigation with manifest
atomantic Sep 5, 2026
9816b63
Merge pull request #6327 from atomantic/cos/task-mtoo66az/agent-f53c6da5
atomantic Sep 5, 2026
01342f2
Add federated Eidoverse guest teleportation and Mind chat (#6328)
atomantic Sep 5, 2026
7801c4a
feat(models): compare sourced quality, effort and cost with CoS resea…
atomantic Sep 5, 2026
36ce0f3
feat: add reasoning effort curves, comparison UI controls, and AA cat…
atomantic Sep 5, 2026
9659a81
Update stale Settings nav comment, add playground tab assertion (#6330)
atomantic Sep 5, 2026
a91b723
fix: update route catalog, document env var, and decouple model compa…
atomantic Sep 5, 2026
5ddc343
Merge pull request #6331 from atomantic/cos/task-mtoqow9x/agent-485fd292
atomantic Sep 5, 2026
74fb870
feat(providers): detect and prompt to configure federated LLM hosts
atomantic Sep 5, 2026
c74740c
fix(tests): avoid un-allowlisted tailnet CGNAT IPs in test fixtures
atomantic Sep 5, 2026
9333fe9
feat(fableloom): guide series planning and review shot continuity bef…
atomantic Sep 5, 2026
1576843
Merge pull request #6333 from atomantic/cos/task-mtorez2v/agent-d0ddf4ea
atomantic Sep 5, 2026
41137a1
fix: hide generation target picker for external video backends
atomantic Sep 5, 2026
8e49711
Merge pull request #6334 from atomantic/cos/task-mtoscij6/agent-1aafd5c5
atomantic Sep 5, 2026
8c326b6
feat(videogen): make the Reactor render form match what fast-h3 accepts
atomantic Sep 5, 2026
581eaa4
chore(api): refresh the generated route-catalog stats
atomantic Sep 5, 2026
6af9a6d
fix(videogen): clear a Reactor continuation the picker no longer offers
atomantic Sep 5, 2026
e692e9e
Merge pull request #6335 from atomantic/cos/task-mtosihww/agent-cb3ec0ab
atomantic Sep 5, 2026
421095b
make the model comparison chart show a full reasoning-effort curve ab…
atomantic Sep 5, 2026
ce69d18
stop stamping hand-entered costs as AA-published, and share one model…
atomantic Sep 5, 2026
aed75e6
count reasoning curves over the scoped rows the pills list
atomantic Sep 5, 2026
352a3ec
address review (agy): namespaced routing aliases, curve-filter set, a…
atomantic Sep 5, 2026
2986a67
Merge pull request #6336 from atomantic/cos/task-mtosy6ut/agent-c0660317
atomantic Sep 5, 2026
5122aad
fix(videogen): let Reactor renders pick the fast-h3 canvas that fits …
atomantic Sep 5, 2026
cd70f6a
fix(videogen): clean up a failed starting-frame encode, pin the rende…
atomantic Sep 5, 2026
4f0b2b4
Improve Eidoverse island design and world departure
atomantic Sep 5, 2026
4e42de4
Preserve custom landscapes and verify departure navigation
atomantic Sep 5, 2026
e66e9a4
fix(videogen): honour EXIF orientation when fitting a Reactor startin…
atomantic Sep 5, 2026
ba156e2
Merge pull request #6340 from atomantic/cos/task-mtoup6ze/agent-c24198f2
atomantic Sep 5, 2026
7802fc2
fix: preserve Reactor video when stream timestamps are absent (#6339)
atomantic Sep 5, 2026
2051c81
Merge pull request #6341 from atomantic/claim/issue-6339
atomantic Sep 5, 2026
64171b8
fix: enforce scoped permissions in code review workflows (#6338)
atomantic Sep 5, 2026
0ca08b3
Merge pull request #6342 from atomantic/claim/issue-6338
atomantic Sep 5, 2026
1c5f42e
Merge pull request #6337 from atomantic/codex/eidoverse-island-travel
atomantic Sep 5, 2026
d507503
fix: back off gh's consecutive-failure calls instead of retrying ever…
atomantic Sep 5, 2026
15fe438
fix: exempt manual "check now" from the update-check gh backoff
atomantic Sep 5, 2026
c92b89b
fix: guard GitHub backoff outcome settlement
atomantic Sep 5, 2026
0f42e34
Merge pull request #6345 from atomantic/claim/issue-6343
atomantic Sep 5, 2026
2053db0
feat: reclaim duplicate Pinokio model weights with verified hardlinks…
atomantic Sep 5, 2026
d9e6036
fix: bound duplicate batches and reject invalid paths (#6344)
atomantic Sep 5, 2026
0b77a48
feat(models): add axis scaling and chart stretch controls to model co…
atomantic Sep 5, 2026
6cd59dd
docs: describe Pinokio duplicate-scan path overrides (#6344)
atomantic Sep 5, 2026
a174f49
Merge pull request #6347 from atomantic/claim/issue-6344
atomantic Sep 5, 2026
a440199
fix: make execGh's gh-failure backoff cap configurable per caller
atomantic Sep 5, 2026
a1e8d5e
Merge pull request #6348 from atomantic/cos/task-mtozhbrs/agent-d2494edc
atomantic Sep 6, 2026
25af803
fix: provision Reactor runtime automatically on first render
atomantic Sep 6, 2026
127fb28
feat: reuse MiniMax H3 models and prompts for sequential video batches
atomantic Sep 6, 2026
8f23fe1
fix: make Reactor runtime repair tolerant of slow downloads
atomantic Sep 6, 2026
85e9616
Merge pull request #6352 from atomantic/cos/task-mtp4cb2l/agent-c9b6ee42
atomantic Sep 6, 2026
1466ea6
fix: tighten video batch validation and output checks
atomantic Sep 6, 2026
236a58a
Merge pull request #6353 from atomantic/cos/task-mtp3t49v/agent-2c575622
atomantic Sep 6, 2026
48d5d0f
feat(media): keep AI-enhanced prompts inside the render backend's cha…
atomantic Sep 6, 2026
dae1348
Merge pull request #6354 from atomantic/cos/task-mtp4tv6f/agent-ac64261f
atomantic Sep 6, 2026
f5d0128
fix(ui): lay out the task form by container width, not viewport
atomantic Sep 6, 2026
10c25ac
chore: update lib/slashdo submodule to 9da877d
atomantic Sep 6, 2026
5336def
address review (claude): raise the compact-row threshold to @xl
atomantic Sep 6, 2026
a7e4b8a
Merge pull request #6355 from atomantic/cos/task-mtp6743o/agent-306b4e64
atomantic Sep 6, 2026
e066b3a
feat: add Pi coding agent providers and review runner (#6350)
atomantic Sep 6, 2026
ce5c6b3
fix: preserve Pi provider identity and stored model catalogs (#6350)
atomantic Sep 6, 2026
2605dff
fix: populate Pi reviewer model choices (#6350)
atomantic Sep 6, 2026
0cfbefa
fix: expose Pi model options in reviewer picker (#6350)
atomantic Sep 6, 2026
be05b11
perf: load harness catalog parsers on demand (#6350)
atomantic Sep 6, 2026
0d1b06f
test: cover Pi reviewer defaults and binary availability (#6350)
atomantic Sep 6, 2026
b097914
test: include Pi in the harness-catalog rewritable-list gate
atomantic Sep 6, 2026
6cd45b6
Merge pull request #6351 from atomantic/claim/issue-6350
atomantic Sep 6, 2026
a3f0f87
chore: release v2.59.0
atomantic Sep 6, 2026
52ab018
fix: run the accepted-routes migration before the schema-8 stamp
atomantic Sep 6, 2026
d1c0bf9
refactor: remove unreachable OpenCode enforcement fallback in buildVe…
atomantic Sep 6, 2026
a64e43e
fix: close a leaked write-stream fd when a ZIP asset write fails early
atomantic Sep 6, 2026
cd448a0
fix: strip untrusted issue titles from the GitLab zombie-issue prompt
atomantic Sep 6, 2026
c5fbb02
fix: apply negativePrompt to fal.ai video generation requests
atomantic Sep 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
40 changes: 40 additions & 0 deletions .changelog/v2.59.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Release v2.59.0

Released: 2026-09-06

## Highlights

**Coding-agent providers & review harness**
- Added the Pi coding agent as a full provider — model picker, review runner, and harness catalog entries.
- The Codex harness can now run on a local LM Studio or Ollama model, completing account-agnostic local hosting for that harness.
- The CoS Codex picker now offers the signed-in ChatGPT account's real model catalog, and every model picker now routes through one account-aware resolver instead of divergent per-surface logic.
- OpenCode gained an attachable Stage 3 pr-reviewer recipe, exposing a live shell session in its agent card.
- Fixed a stray unrecognized-model telemetry line leaking into Stage 2 reviewer stderr, and shrank the pr-reviewer Stage 3 prompt from ~400KB to ~50KB.

**Video generation**
- Added Episode Composer for continuous multi-scene video, backed by a new script-to-beats compiler and a deterministic video-prompt linter that guards against malformed clip input.
- Added Reactor.inc fast-h3 and fal.ai queue REST API backends to MediaGen and FableLoom.
- Reactor renders now provision their runtime automatically on first use and tolerate slow downloads instead of failing outright; EXIF orientation is honored when fitting a starting frame.
- Fixed a cluster of video-hold and Remix-handoff bugs: held cohorts staying aligned with runtime model selection, stranded handoffs waiting correctly for Retry, and video holds surviving sharing imports and damaged snapshots.

**Eidoverse**
- Added federated guest teleportation and Mind chat, so a Mind can visit another host's Eidoverse world.
- Objects can now be explained and given explicit display aliases, and a hosted world can name and describe its own PortOS host.
- Landscapes and departure navigation are now preserved correctly, and PortOS Commons ships with a grassy pedestrian park.

**Model comparison & AI Providers**
- Added reasoning-effort curves, chart axis scaling, and stretch controls to the model comparison view, plus AA-catalog cost sync so hand-entered costs no longer masquerade as AA-published.
- Added detection and a setup prompt for federated LLM hosts.

**Themes**
- Added the Kestrel Neon theme family and brought the other eight themes up to the same visual fidelity, backed by a shared, token-driven effects layer.

**Reliability and infra**
- `gh`-backed background checks (update checks, backoff-gated calls) now back off on consecutive failures instead of retrying every tick, while a manual "check now" is exempted from that backoff.
- Fixed a data-loss bug where the data.reference seed could wipe CoS settings on an install crossing the #6182 update.
- LoRA downloads now share one download slot instead of racing independent ones, and raw filesystem writers under `data/` were routed through guarded primitives.
- Pinokio duplicate model weights can now be reclaimed via verified hardlinks, bounded to safe, valid paths.

## Full Changelog

**Full Diff**: https://github.com/atomantic/PortOS/compare/v2.58.0...v2.59.0
2 changes: 1 addition & 1 deletion .claude/skills/portos-file-issue/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,5 @@ description: PortOS conventions for filing GitHub issues and capturing deferred
- `help wanted` — extra hands welcome and the body is scoped enough to pick up cold.
- **Planner attribution (`planner:<model>`) records who WROTE the plan.** It is a third independent axis — the author, not a recommendation about how to run the work. Take the label verbatim from the "Planner Attribution" section of your own run's prompt (PortOS resolves it from the provider/model it dispatched you with); **never guess it from what you believe you are**, and omit the axis entirely when your run was given none. Create it like any other label: `gh label create planner:<model> --color C2185B --description 'Plan authored by the <model> model' 2>/dev/null || true`.
Omit an axis rather than guessing. Do not stamp `medium` on both dispatch axes. Do not put `[model:…]` / `[effort:…]` / `[category]` / `[SEVERITY]` in the title. Create each missing label immediately before applying it (`gh label create <name> --color <hex> 2>/dev/null || true`; colors: model:light `D4C5F9`, model:medium `A371F7`, model:heavy `6F42C1`, effort:low `BFE5E5`, effort:medium `76C7C7`, effort:high `1D7874`, effort:xhigh `0E4F4C`, effort:max `05403D`, good first issue `7057FF`, help wanted `008672`). Use repeated `--label` flags. Never relabel a deduplicated existing issue.
- **`future` is almost never correct.** Do NOT use it to park a choice you could make yourself. The narrow legitimate park is work a **human must personally drive** — a real fidelity/validation run only they can judge, or a step that needs **specific hardware/credentials** the agent doesn't have (e.g. a CUDA box, an Apple-Silicon-only validation). Mark those `blocked` (skipped by autonomous claim runs), not `future`, and say in the body exactly what human action unblocks it. `blocked` also covers a genuine dependency on another unshipped issue/PR.
- **`future` is almost never correct.** Do NOT use it to park a choice you could make yourself. The narrow legitimate park is work a **human must personally drive** — a real fidelity/validation run only they can judge, or a step that needs **specific hardware/credentials** the agent doesn't have (e.g. a CUDA box, an Apple-Silicon-only validation). Mark those `blocked` (skipped by autonomous claim runs), not `future`, and say in the body exactly what human action unblocks it. `blocked` also covers a genuine dependency on another unshipped issue/PR — for that case, name the dependency on its own line as `Blocked by #N` (or `Blocked by #N, #M` for more than one): the `issue-reconcile` scheduled task (`blockedIssueReconcile.js`) parses exactly that line, and removes the label automatically once every named issue is closed. An issue with no `Blocked by` line is never auto-unblocked, so the human/hardware case is unaffected.
- **`needs-input` is a last resort, not a reflex.** When claiming an ambiguous issue, prefer proceeding on your best interpretation and shipping it. Fall back to `needs-input` only when proceeding would be **destructive/irreversible** or genuinely requires the human (hardware, credentials, a personal judgment call) — never merely because more than one reasonable reading exists.
33 changes: 33 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,19 @@ PGPASSWORD=portos
# GROK_TIMEOUT_MS — keep it above the 20-minute cloud-lane idle watchdog.
# GROK_VIDEO_TIMEOUT_MS=1800000

# Maximum fal.ai queue video-generation runtime in milliseconds (videoGen/fal.js;
# default: 1200000 / 20 minutes) — a queue render can sit behind other tenants'
# jobs before it starts, so this bounds the whole submit→poll→download run.
# FAL_VIDEO_TIMEOUT_MS=1200000

# Maximum reactor.inc fast-h3 video-generation runtime in milliseconds
# (videoGen/reactor.js; default: 1200000 / 20 minutes) — same reasoning as
# FAL_VIDEO_TIMEOUT_MS above.
# REACTOR_VIDEO_TIMEOUT_MS=1200000
# Optional Python executable in an environment with reactor-sdk installed.
# Defaults to data/venvs/reactor created by npm run setup:reactor.
# REACTOR_PYTHON_PATH=

# Maximum Antigravity image-generation runtime in milliseconds (default: 1200000 / 20 minutes)
# AGY_IMAGEGEN_TIMEOUT_MS=1200000

Expand Down Expand Up @@ -150,6 +163,17 @@ PGPASSWORD=portos
# CivitAI API key for LoRA / model downloads from civitai.com
# CIVITAI_API_KEY=your_civitai_api_key_here

# fal.ai API key for the fal.ai queue video backend (Video Gen page, FableLoom).
# Settings > Video Gen's stored key wins when both are set.
# FAL_KEY=your_fal_api_key_here

# reactor.inc API key for the reactor.inc fast-h3 video backend (Video Gen
# page, FableLoom). Settings > Video Gen's stored key wins when both are set.
# REACTOR_API_KEY=your_reactor_api_key_here

# Artificial Analysis API key for synchronizing model quality, speed, and pricing comparison benchmarks
# ARTIFICIAL_ANALYSIS_API_KEY=your_artificial_analysis_api_key_here

# Absolute path to the bash binary used to run PortOS's bundled *.sh scripts
# (e.g. scripts/db.sh). Auto-detected if unset; on Windows it prefers Git Bash,
# because a bare `bash` often resolves to WSL, which can't see drive paths.
Expand Down Expand Up @@ -181,6 +205,11 @@ PGPASSWORD=portos
# Path to the media-models registry JSON file (defaults to data/media-models.json)
# PORTOS_MEDIA_MODELS_FILE=/path/to/custom/media-models.json

# Pinokio installation used by the explicit Models Status duplicate scan.
# PINOKIO_HOME takes precedence over PINOKIO_PATH; default: ~/pinokio.
# PINOKIO_HOME=/path/to/pinokio
# PINOKIO_PATH=/path/to/pinokio

# LM Studio models directory override (default: ~/LM Studio/models)
# LM_STUDIO_MODELS_DIR=/path/to/lm-studio/models

Expand Down Expand Up @@ -292,3 +321,7 @@ PGPASSWORD=portos
# Auto-generated and appended to .env on the first vault write if unset. Back
# it up: losing it makes every encrypted vault value unrecoverable.
# PRIVACY_VAULT_KEY=<64 hex chars>

# Set by AI Providers > Model host setup after successful dedicated setup.
# Restores the authenticated queue; the container restart policy restores Qwen.
# PORTOS_FLEET_LLM_ENABLED=0
14 changes: 14 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ jobs:
lint_files: ${{ steps.plan.outputs.lint_files }}
build: ${{ steps.plan.outputs.build }}
smoke: ${{ steps.plan.outputs.smoke }}
slashdo: ${{ steps.plan.outputs.slashdo }}
windows: ${{ steps.plan.outputs.windows }}
windows_mode: ${{ steps.plan.outputs.windows_mode }}
windows_files: ${{ steps.plan.outputs.windows_files }}
Expand Down Expand Up @@ -96,6 +97,7 @@ jobs:
LINT_MODE: ${{ steps.plan.outputs.lint_mode }}
BUILD_MODE: ${{ steps.plan.outputs.build }}
SMOKE_MODE: ${{ steps.plan.outputs.smoke }}
SLASHDO_MODE: ${{ steps.plan.outputs.slashdo }}
WINDOWS_MODE: ${{ steps.plan.outputs.windows }}
WINDOWS_TEST_MODE: ${{ steps.plan.outputs.windows_mode }}
SERVER_SHARDS: ${{ steps.plan.outputs.server_shards }}
Expand All @@ -113,6 +115,7 @@ jobs:
echo "- Client lint: \`${LINT_MODE}\`"
echo "- Client build: \`${BUILD_MODE}\`"
echo "- Server smoke: \`${SMOKE_MODE}\`"
echo "- Slashdo submodule: \`${SLASHDO_MODE}\`"
echo "- Windows server tests: \`${WINDOWS_MODE}\` (\`${WINDOWS_TEST_MODE}\`, shards \`${WINDOWS_SHARDS}\`)"
echo "- Suite selection reasons: \`${SUITE_REASONS}\`"
} >> "$GITHUB_STEP_SUMMARY"
Expand Down Expand Up @@ -274,13 +277,24 @@ jobs:
- name: Check server entry-point syntax
run: node --check server/index.js

# The submodule ships no source into this checkout by default (see
# AGENTS.md "Slashdo Commands"), so the planner's `slashdo` output is
# the only signal that the selected tests need it — an unrelated scoped
# PR must not pay for the fetch. `CI_EXPECT_SLASHDO_SUBMODULE` below
# tells the two contract suites to fail instead of skip if this step
# somehow leaves the checkout without it.
- name: Initialize slashdo submodule
if: needs.impact.outputs.slashdo == 'true'
run: git submodule update --init lib/slashdo

- name: Run server tests
if: needs.impact.outputs.server_mode != 'skip'
env:
CI_TEST_MODE: ${{ needs.impact.outputs.server_mode }}
CI_TEST_FILES: ${{ needs.impact.outputs.server_files }}
CI_TEST_SOURCES: ${{ needs.impact.outputs.server_sources }}
CI_SHARD: ${{ matrix.shard }}/${{ strategy.job-total }}
CI_EXPECT_SLASHDO_SUBMODULE: ${{ needs.impact.outputs.slashdo }}
# Keep successful-test output signal-dense. Developers can reproduce
# locally without this flag when assertion context needs app logs.
PORTOS_TEST_QUIET: 1
Expand Down
7 changes: 5 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,13 @@ regression-detection value are the goals.
- **Auth** — an optional instance password (`server/services/auth.js`, enforced by `server/services/authGate.js`) gates all of `/api/*` and `/data/*` when set, with a small always-public set (`/api/auth/status`, `/api/system/health`). Peers reach a password-gated instance via a per-peer Basic credential on the peer record, attached to every outbound hop by `peerFetch` (`server/lib/peerHttpClient.js`).
- **HTTPS** — provisioned by `npm run setup:cert`; `:5555` flips to TLS with a loopback-only HTTP mirror on `:5553`. Peer hops set `rejectUnauthorized: false` ("Tailnet is the trust boundary") — between two tailnet nodes WireGuard already supplies mutual auth, but a non-tailnet peer (plain LAN IP / non-`.ts.net` host, see `peerRequiresTailscale()`) gets no server authentication.

Because both are off by default, **never treat "the password is set" as an available guarantee** when designing a feature — gate on it explicitly, or design for the default posture. **PII must not ride the federation layer at all** — see ADR [privacy records machine-local](docs/decisions/2026-08-08-privacy-records-machine-local.md). That rule governs *records* and *status/capability payloads*; its one scoped carve-out is a submitted job body carrying the conditioning an allowlisted peer is being asked to render — the prompt (ADR [federated visual prompts](docs/decisions/2026-08-20-federated-visual-prompts.md)), and, under the same gate, lyrics and conditioning images (ADR [conditioning crosses to an allowlisted peer](docs/decisions/2026-08-22-federated-media-input-assets.md), which also records what stays refused: model weights and multi-step chain state).
Because both are off by default, **never treat "the password is set" as an available guarantee** when designing a feature — gate on it explicitly, or design for the default posture. **PII must not ride the federation layer at all** — see ADR [privacy records machine-local](docs/decisions/2026-08-08-privacy-records-machine-local.md). That rule governs *records* and *status/capability payloads*; one scoped carve-out is a submitted job body carrying the conditioning an allowlisted peer is being asked to render — the prompt (ADR [federated visual prompts](docs/decisions/2026-08-20-federated-visual-prompts.md)), and, under the same gate, lyrics and conditioning images (ADR [conditioning crosses to an allowlisted peer](docs/decisions/2026-08-22-federated-media-input-assets.md), which also records what stays refused: model weights and multi-step chain state). Explicit Eidoverse guest conversations have a separate narrow carve-out: submitted world-chat messages and live replies may cross an enabled registered peer under guest admission and the independent default-off Mind travel grant (ADR [Eidoverse guest chat](docs/decisions/2026-09-05-eidoverse-guest-chat.md)). No private records, secrets, automatic conversation-history exports, or record-bearing status payloads are authorized by that exception.

**Distribution model (across installs).** PortOS is distributed software: many independent people each run their own install, on their own machine(s), each upgrading on their own schedule — and a single user commonly runs **several machines federated as sync peers**. Backward/forward compatibility across installs and versions is first-class, NOT optional:

- **Never delete or skip migration / compatibility code on the grounds that "there's only one install."** There isn't — other people and other machines run this code and update it independently.
- On-disk format changes need a migration in `scripts/migrations/` (applied-list tracked per install in `data/migrations.applied.json`). Seed files must ship in `data.reference/`.
- **A migration that DERIVES `data/<x>` from an install's existing records ships NO `data.reference/<x>` seed, and gates on the presence of its INPUT — never the absence of its output.** `setup-data.js` runs before `run-migrations.js` and copies every `data.reference/` file the install lacks, so a seed lands first; a migration that skips because its output already exists then silently leaves shipped defaults where the user's data was, and the next write destroys the original. Declare such a path in `scripts/lib/migrationOwnedPaths.js` (its test fails if a seed reappears). The applied-list already provides re-run safety, so gating on the input costs nothing. This is not hypothetical: it replaced CoS settings with shipped defaults on any install whose update crossed #6182 — see `scripts/migrations/340-cos-config-seed-repair.js`.
- Prompt-default changes need a `PROMPT_VERSIONS` bump AND the prior default preserved in `PREVIOUS_DEFAULT_PROMPTS`, so other installs recognize their stored prompt and auto-upgrade it (`server/services/taskSchedule.js`).
- Cross-machine sync payloads stay version-gated (`server/lib/schemaVersions.js`) so a newer peer can't corrupt an older one.
- The self-update path stays fork-aware — other users run forks, not just upstream. **Never add `--force` to the server-side `gh repo sync`** (it would discard a user's fork commits; the 409 `FORK_DIVERGED` message points them at running it themselves). Don't re-hardcode the upstream slug outside `server/lib/gitRemote.js`, and new UI claiming "you are running PortOS" must read `remoteInfo.isUpstream`, not just `currentVersion`, or it lies to fork users. Mechanism: [docs/SELF_UPDATE.md](docs/SELF_UPDATE.md).
Expand Down Expand Up @@ -122,7 +123,9 @@ Client- and server-specific conventions live in nested memory files that load wh

### Slashdo Commands (`lib/slashdo`)

PortOS bundles [slashdo](https://github.com/atomantic/slashdo) as a git submodule at `lib/slashdo`, providing slash commands (`/do:next`, `/do:review`, `/do:pr`, `/do:push`, `/do:release`, …) without a separate global install. The `.claude/commands/do/` symlinks expose them as project-level slash commands. `/do:next` claims the next PLAN.md item (or GitHub issue with `--issues`) in an isolated worktree and ships a PR. CoS agents can inline a command's content into a prompt via `loadSlashdoCommand(name)` from `server/services/subAgentSpawner.js` (it resolves `!cat` lib includes automatically).
PortOS bundles [slashdo](https://github.com/atomantic/slashdo) as a git submodule at `lib/slashdo`, providing slash commands (`/do:next`, `/do:review`, `/do:pr`, `/do:push`, `/do:release`, …) without a separate global install. The `.claude/commands/do/` symlinks expose them as project-level slash commands. `/do:next` claims the next PLAN.md item (or GitHub issue with `--issues`) in an isolated worktree and ships a PR. CoS agents use the shared slashdo renderer: file-tool hosts receive a short entrypoint with supporting files read by phase; `loadSlashdoCommand(name)` from `server/services/subAgentSpawner.js` remains the eager, self-contained form for other consumers.

Project command symlinks expose slashdo source directly. In that source, `!read lib/<name>.md` means read `lib/slashdo/lib/<name>.md` when the named phase applies; resolve nested library references (including `~/.claude/lib/<name>.md` tokens) against that same bundled package root. These are required reads, not shell commands. Do not preload every phase or depend on a global slashdo installation. Staged CoS bundles instead resolve each reference relative to the file containing it.

## Module Organization

Expand Down
Loading