Conversation
The federation teleport bar rendered a "No connected guest worlds available" row above the page header even when there was nothing to travel to, and the header action buttons (Labels/Controls/World only) wrapped onto their own cramped row on narrow screens. Hide the teleport bar when there are no destinations, and collapse the action buttons to icon-only below sm so they fit alongside the title.
The compact CoS status grid shows an extra Learning row on phones, pushing the Queue/Agent controls below the fold. Keep it on the desktop sidebar grid (where there's room) and hide it under lg:.
fix: tighten Eidoverse header for mobile, hide empty federation bar
CreativeDirectorModelsDrawer (video production model editor) and AiAssignmentsTab labeled disabled providers "(disabled)" in the text but never set the <option> disabled attribute, so a user could still select and save a pin to a provider that can't actually run. Thread the enabled flag through assignmentProviderOptions and mark the option itself disabled.
fix: clarify video production setup recheck action
fix: disable selecting a disabled provider in AI model pickers
… task drawer A bare-tag CSS rule (aside.bg-port-card, header.bg-port-card) meant only for the app shell's own sidebar/mobile topbar also matched the shared Drawer panel, since it's rendered as an <aside class="bg-port-card ..."> too. On translucent "glass" themes that swapped the drawer's opaque fill for the sidebar's ~50-60%-alpha gradient, so on mobile WebKit the scrolled page behind the drawer ghosted through legibly — reported as a large blank/empty region to scroll past before reaching a scheduled task's settings. Scope the sidebar rule to dedicated .port-app-sidebar/.port-app-topbar classes, and generalize the existing .port-menu-surface opaque-surface class (previously only used by the "Run on App" picker) to .port-opaque-surface so the Drawer panel can reuse it instead of adding a one-off rule.
fix: stop the sidebar's glass-theme background from bleeding into the task drawer
feat: select configured providers and models for code review
hide CoS Learning stat tile on mobile
…ne-mtsdq1rl/agent-8784b0c5 fix: separate agent workspace lookup from JIRA prompt support
…uest schema `addTask` in cosTaskStore.js had grown to 400 lines, 250 of which were the pure mapping from a request's top-level fields onto the persisted `metadata`. The request schema (`createCosTaskSchema`, lib/cosValidation.js) lived in another file with nothing checking the two agreed, and they drifted three times: `optionalReviewers` was validated but never persisted (the task form's `~opt` badges silently fell back to the Code Review Defaults), and `discardWorktree` / `noCodeOutput` were reachable only through the raw path. Over the last 90 days 13 of the 25 feature commits that touched `addTask` also edited the schema, so every new task option paid that two-file cost. The mapping now lives in `services/cosTaskIntake.js` as `buildTaskMetadata` / `buildQueuedTask` (a verbatim move, no behavior change), and `cosTaskIntake.test.js` classifies every schema field: it either maps (a schema-valid sample must change the metadata) or is named as a non-metadata field with the reason. Adding a schema field without either fails the suite; dropping a mapping fails the field's sample. `PRIORITY_VALUES` was a second copy of taskParser.js's table; the store now re-exports the original at the same address.
…ready proves Follow-up to the intake extraction, from the simplify pass: - cosTaskIntake.js reached the lib/validation.js barrel (122-module closure) for seven names that cosValidation.js / reviewerConfig.js declare; import them there (49 modules) and pin the narrowing in importScoping.test.js. - The two buildQueuedTask tests duplicated store-level addTask cases; only the schema parity guard stays. - PRIORITY_VALUES now has one address (lib/taskParser.js); the store no longer re-exports it. - Collapse the raw/non-raw branch to a ternary and fix two relative "above/below" comments the move made stale.
…t-module-hygiene-mtsr2zpx/agent-4ef18a89 Move the CoS task intake mapping out of addTask and pin it to the request schema
…bar by default The songbook viewer's play mode stacked two full-height transport/control bars above the sheet and kept "Chords used" inside the scroller, so on a phone the sheet started a third of the way down the screen and the shapes you are reaching for scrolled away after bar 1. The header band is now three collapsible cards with remembered open state and a one-line summary while closed: Audio (the sounding transport — collapsed by default, since it is the tallest band and one you set once), Sheet controls (autoscroll/transpose/size/view/stage), and Chords used, lifted out of TabSheetView so it sits above the scroller and stays visible while the sheet moves under it.
… hooks Follow-up cleanup on the previous commit: the new CollapsibleBar and usePersistedDisclosure both re-implemented primitives the tree already had. - ui/CollapsibleSection gains a `bar` size, an `id`/`aria-controls` pass-through and an opt-in `keepMounted` (body hidden rather than unmounted, on a wrapper a caller's bodyClassName can't restyle) — enough for all three songbook cards, so CollapsibleBar is gone and the headers keep the 44px touch target. - useLocalStorageBool returns a third `toggle` element instead of a parallel persisted-boolean hook. - Both transport bars are memoized and take `pulse` only while their card is open, so a collapsed Audio card costs no per-beat reconciliation. - A play/`p` shortcut now opens the Audio card it drives, instead of sounding a kit whose transport is off screen.
…them into client/src/utils/providerTypes.js client/src/utils/providerTypes.js was the one provider table the #6364 / c82dcdf sweep left as a hand copy: commandBasename, the isXProvider vendor predicates, localRuntimeNamespace, isCodexSubscriptionProvider, PROVIDER_TYPES and isOllamaBackedProvider, each behind a "keep in lockstep" comment and none behind a parity test (the mirror suite that sweep deleted pinned the effort ladders, not these). Every vendor addition since landed the same predicate on both sides in one commit — kimi (682411f), cursor (75d755e), the grok effort flag (5cdaaf5), antigravity (d718914), the codex subscription rule (9394882, d0f5e33) — and the copies had already drifted: the server trims the codex command before matching it, the client did not. Every source is a pure leaf the browser bundle already reaches (providerModels.js, aiToolkit/constants.js) or a dependency-free aiToolkit leaf (internal/ollamaBacked.js — its public barrel pulls fs and child_process, so the browser takes the leaf that barrel itself re-exports). Two predicates move INTO providerModels.js so the browser gets them without a second module: isCodexSubscriptionProvider leaves codexAccount.js (which re-exports it for its server callers) because that module's frozen protocol tables are top-level Object.freeze calls the bundler cannot shake — importing it cost the providers chunk ~1 KB of never-read strings; and the OpenCode-on-a-local-backend gate that effortLevelsForProvider inlined becomes isOpencodeLocalProvider, so the client's effort-picker gate is the ladder's own predicate rather than a restatement of it. isGrokBuildCli is now isProcessProvider && isGrokProvider. isClaudeCommandProvider stays client-local on purpose: the server's isClaudeCommand counts a blank command as Claude, which would strip the sampling controls off api providers that carry no command at all; the type-gated form the server uses lives in providerFamilies.js, which is not browser-safe. The client test now pins identity — every name the module shares with a server leaf IS that leaf's export, which a copy cannot satisfy, and the shared set is listed so a dropped re-export or a shadowing local declaration fails too — in place of the two parity tests that became tautological. Verified with a re-inlined copy and with a shadowing declaration: only the intended rows fail.
pin the songbook chord shapes above the sheet and collapse the audio bar by default
…t-code-quality-mtsryh58/agent-6d320f1e re-export the provider predicates from server/lib instead of copying them into client/src/utils/providerTypes.js
…ement task
Add six audit task types so each category of software quality can be scheduled,
pinned to its own provider/model, and toggled between filing issues and fixing
on its own — instead of being reachable only by fanning eight sub-agents out of
a single /do:better run.
better-complexity counted cyclomatic complexity, ranked by churn
better-cognitive-load reader cost no metric captures
better-structural-drift the same fact kept in two places
better-runtime-safety latent defects not yet triggered
better-dependency-freedom whether a dependency should exist at all
better-test-quality existing tests that prove nothing
The better- prefix marks a parity obligation with the bundled slashdo lens the
mission mirrors, so an improvement here is a candidate to push upstream rather
than to drift. DO_BETTER_LENS_COVERAGE records which lane owns each lens, and
the catalog test reads the submodule and fails when a lens declared upstream has
no lane here. The prefix is hyphenated rather than "better:" because a task type
is interpolated into the CoS task id, which becomes a git branch name and a
worktree directory: git refs, Windows paths, and the TASKS.md id pattern all
reject a colon.
code-quality was doing too much, so its structural-drift half moves to the new
lane and its body now names what it cedes. Every audit mission states its
boundaries, so twenty-five lanes cannot file each other's findings.
Rewrite the eleven legacy audit prompts that predate the file-issues toggle.
None carried {modeInstructions}, so the mode banner was prepended while the body
still instructed the agent to fix and commit — the two fought on every
file-issues dispatch. Each now carries the placeholder and an evidence bar:
performance requires a quantity, security defers to the app's documented threat
model, test-coverage names the regression a new test uniquely catches. ux gets
the same treatment; its hardcoded "no branches, no PRs" contradicted the do-work
banner outright.
Also stop keyword-guessing a skill template for a registered audit type. The
security matcher claims the bare word "audit", which every audit prompt says
about itself in its opening line, so eleven of nineteen audit types were being
handed OWASP scoping guidance nobody chose.
… catalog Cleanup pass over the audit-lane commit. - workflow.js listed all 25 audit types by hand. It is exactly the catalog plus dependency-updates, so derive it. That deletes a fourth edit site per new audit type and the parity test whose only job was catching the copy going stale; the test now asserts the one thing that is still a decision, which is the single non-catalog type the stage adds. - The expansion guard re-implemented resolveTrackerFilingBlock and got its preset precedence wrong: production resolves alwaysPreset || auditPreset, and ux is the one audit type in both registries, so the test rendered a tracker block no dispatch produces. Drive the real resolver instead, and drop the ux-only render loop the catalog-wide one already covers. - Merge the two lane-registration tests, which asserted the same file-issues posture 20 lines apart, and derive the better-* list so a seventh lane cannot be added without landing in it. - Cross-check that the catalog default and the seeded schedule row agree on every audit's mode. The seeded row always sets fileIssues, so the catalog default is unreachable for a scheduled dispatch and the two could disagree unnoticed. - Drop the "primary owner first" claim from the lens map: nothing reads it, no test enforced it, and the test title asserted it anyway. - Anchor the submodule read on PATHS.slashdo. A missing file there skips rather than fails outside CI, so a stale relative path would have silently disabled the upstream-lens guard.
Schedule every do:better audit lens as its own self-improvement task
…-mtsuvc4j/agent-095086fb fix: contain scheduled handler loading and execution failures
refactor: unify media queue lane admission accounting
…t-module-hygiene-mttjug8g/agent-42b955c0 feat: give local model metadata a shared service owner
…idating all 186 The built UI was served with express.static defaults, so every content-hashed chunk under /assets/ went out with `Cache-Control: public, max-age=0`. A browser treats that as stale on arrival: measured against a spare-port server with a request-counting proxy and Chrome with service workers blocked (the default plain-HTTP tailnet posture, where no service worker can register), a warm dashboard load re-sent all 186 chunks as conditional GETs and got 186 304s back before the app could start. Over HTTP/1.1 at six connections per host that is ~31 sequential round-trip waves of pure revalidation on every reload. Vite renames a chunk whenever its bytes change and the `no-cache` index.html is what points at the current set, so `/assets/**` is safe to serve with `immutable, max-age=1y`. `mountClientDist` in services/assetMounts.js does that as a first tier and keeps the revalidate-per-load default for the rest of dist/ — `sw.js`, `manifest.json`, `fonts/`, `sky/`, `hdri/` are client/public files copied under stable names whose bytes do change. `index: false` stays on both so `/` still reaches the build-id-stamped SPA fallback, and a chunk the current build no longer ships still misses both tiers and 404s, which the stale-chunk reload depends on. Same measurement after the change: 0 asset requests on a warm load or reload, and a warm navigation to a not-yet-visited route fetches only its own new chunks (14 instead of 42).
…her than not HTML
fix: restore completed agent card mobile layout
…t-performance-mttjv4la/agent-90a874f2 Serve hashed client chunks as immutable so warm page loads stop revalidating all 186
refactor: name VideoGen hosted backend predicates (#6680)
refactor: centralize pinned video snapshot resolution
refactor: unify video asset readiness and repair warnings
perf: skip unused CoS status during live activity polls
perf: query generating 3D summaries for activity polls
fix: make Writers Room headers collapsible and stabilize Save
refactor: make self-update launch readiness explicit
…t-documentation-mttnjjg5/agent-89783d06 fix: clarify database selection during setup
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release v2.61.0
Released: 2026-09-09
Highlights
Chief of Staff and scheduled work
Providers and review operations
Communication and federation
Creative workspaces
Reliability and everyday UI
Changes
Chief of Staff, audits, and maintenance
Agent execution and task lifecycle
Providers, models, and review
Communications, federation, and voice
Creative and media workspaces
Backup, restore, update, and infrastructure
Full Changelog
Full Diff: v2.60.0...v2.61.0