Conversation
Every Settings switch lies about its setting on the 0.3 engine. `checked` is an
HTML boolean attribute, so the `checked="false"` that a controlled component
writes reads as checked, and the property never reached the input's live state
at all. A setting stored `false` comes back reporting on after a restart, and
only agrees with itself once someone clicks it.
Measured on a build against the fixed engine, same disposable profile either
way:
stored blitzDeepProfilingEnabled: false
0.3: switch ... "visible,selected"
0.4: switch ... visible
`tests/ps-qa/06-toggles.ron` could not see it. `ValueChanges` is satisfied by the
renderer flipping the input natively, whether or not the application hears about
it, and every toggle check presses first and asserts a delta, which is exactly
what a wrong initial value survives. A check comparing a control against its
persisted setting without pressing it is what would have caught this.
The full native suite is 310/310 on the fixed engine.
Pinned at 0.4.3 rather than 0.4: 0.4.2 is a newer engine without the fixes.
The release workflow declines to publish when the committed version equals the live one, so the renderer fix would merge and reach no user. Every Settings switch on 0.8.50 reports the wrong state for a setting that is off, until someone clicks it.
`^0.4.3` and `^0.3.3` are version bumps wearing carets. `^0.4` and `^0.3` are the convention here; the lockfile decides which patch is actually used.
Two of the ten breaking changes reach this frontend.
Value-change callbacks now report the value, so `Switch` and `Checkbox`
take `onChange={(checked) => ...}` rather than an `Event`. The native
event is `onNativeChange`. The cleanup row keeps that one: its box is
rendered permanently checked, unchecking it is the keep action, and a
keep that fails has to put the tick back by writing to the element,
which only the native handler hands over.
`Input` moved its default size from `md` to `sm` so an unsized field
lines up with an unsized button. None of the eleven fields here set a
height of their own, so each names `md` to keep the row it was built
for. Which of them would rather be shorter is a look decision, not a
migration one.
The other eight do not apply: no `className`, none of the renamed
components, no `isDisabled`/`isOpen` on a library component (those
spellings are this app's own wrappers), no `color`, no query
accessors and no `PasswordField`. The Layouts application compiler was
already configured.
Typecheck, both contract checks and 394 tests pass against 4.0.0.
4.0.0 was published in error and has been unpublished from the registry, so a `^4.0.0` range now resolves to nothing at all. The value-change contract these conversions target ships as 3.1.0. The source is unchanged: it was written against this API either way. Only the number the range asks for is different.
`solid-js` and `@solidjs/web` were both `"next"`, and `bun.lock` is gitignored here, so nothing recorded what that resolved to. Today it is 2.0.0-rc.4 for every other repository in the fleet and 2.0.0-rc.6 here, decided by whichever day someone last installed. On a library still in release candidates that is a build whose behaviour changes without a commit. Pinned to 2.0.0-rc.4, which is what the rest of the fleet and the published `@pathscale/ui` peer set are built against. Typecheck, both contract checks and 394 tests pass on 3.1.0 with this pin.
Register the relaunch handler through blitz-control-protocol instead of the Tauri runtime re-export. Discover the runtime-owned descriptor by the launched process id so the local QA harness follows the same control surface.
Adds Agent::Grok across detection, models, pricing, quota, settings and the run loop, plus the frontend surfaces that name a provider. Grok specifics the other providers do not need: * Sessions are keyed by process cwd, like Claude's. `grok_session_cwd` reads `~/.grok/sessions/<urlencoded-cwd>/<id>` so resume and compact run where the session actually lives, instead of answering JSON-RPC -32603 and surfacing it as a parse error. * Prices double at 200k for the whole prompt, so a turn is steered at 180k and again at 190k, then compacted after the turn ends rather than mid-tool. * ACP does not execute `<tool_call>` markup written into assistant text. When that leaks the turn ends having done nothing, so the run resumes with a correction naming native tools. * Auto still emits `session/request_permission` for writes outside the workspace, so the approval channel opens and `auto_allows` answers. Also records a foreign namespace Prompt Syntax span rather than letting it render raw. A `<ps @Antml:invoke>` from a model blending grammars is a tool call it believed it made: the span stays inert, per PS 13.2, but every one is now logged with its verb and arguments, written to the transcript, and handed back so the call can be reissued natively.
Two latent gaps found reviewing the Grok work. `user_local_bin_is_searchable_without_overriding_shell_order` passed by accident: its input PATH already contained `/opt/homebrew/bin`, so the appended copy was deduplicated away and the indices lined up whatever order the candidates were pushed in. Start from a PATH holding none of them, so the order is actually read. `price_for` is first match wins on substring, so `grok-4.6` must precede `grok-4.5` or the shorter key shadows the longer one and bills the wrong cache read rate (0.50 against 0.30). Nothing enforced that. Check the whole table, not just the pair that prompted it.
Every table in the committed archive was v2. The app converts a v2 store on load, so each QA run migrated the fixture again before it could open it, and a restore never handed the harness the format the build actually uses. Converted through `wt-migrate migrate-v2-store`: 17 tables, 27314 rows, all verified. A restored copy now boots straight into the store with no conversion step in the log.
Added: Grok as a project agent, plus two dependency PRsFour commits on top of the UI 3.2 / WorkTable 1.10 work. Depends on (merge these first)
|
The catalogue is four agents now, ordered claude, codex, grok, copilot, and the prompt list carries grok-4.6 and grok-4.5. Also corrects a label assertion that predates this work: the pill reads "Codex" because that is what `agentLabel` has, not "OpenAI". CI never reached these before. The Rust build failed first on a worktable requirement, so the frontend suite did not run.
Merge order and remaining blockerConsolidated to one PR per repo. RustAgentAbstraction#36 was closed and cherry-picked onto #35 (same Grok branch), so history stays linear with no merge commits. Order
Version bumpsAll present: WorkTable The Rust failure is two path overrides, not this workBoth point outside the repo, so CI cannot load the manifest. They are local debugging overrides that predate this work (master has Fixed since the last comment
Frontend is 402/402 under vitest. Locally |
`spawn_resume_after_compact` ran on every successful compaction, so an owner pressing Compact was answered with a turn they did not ask for. Compaction interrupts in-flight work only when the app starts it. Grok is compacted before the 200k price cliff, mid-task and unasked, and leaving that summarised and idle strands the work that triggered it. An owner choosing the moment is the opposite: the next instruction is theirs to give. So the resume follows the trigger, not the agent, and an owner-driven compaction of a Grok project stays silent too. The `compact_project` command keeps its signature and hardcodes `Owner`, which leaves no resume parameter on the manual path and nothing the frontend can set. Only `compact_project_with`, which is not registered for IPC, can ask for `Automatic`.
Status: one blocker, upstream, not fixable from this branchFrontend is green. Two tracked path overrides point outside the repository: worktable = { path = "../WorkTable" } # Cargo.toml:30
agent-abstraction = { path = "../../../RustAgentAbstraction" } # apps/gui/Cargo.toml:67CI deliberately does not commit Why I have not simply reverted themI tried it. Today it fails differently, not better: Published maximums right now are agent-abstraction 0.4.19 and worktable 1.9.0-alpha1. This branch needs 0.4.21 and 1.10.0-beta1. Flipping the paths before those publish trades "failed to load manifest" for "failed to select a version", which is the error this branch showed before the overrides were added. The unblock
pathscale/ps-blitz#99 is independent (7 pass, 3 skip) and can merge any time; AgencyZero consumes ps-blitz through Everything else on this branch is verified locally: 326 Rust tests, clippy clean, 402/402 frontend under vitest, and the ps-qa suite 312/312 against the v3 fixture. |
WorkTable and agent-abstraction are taken by path, from sibling checkouts, so a change can be made and tested across all three without publishing between each step. CI had no such siblings, so `cargo generate-lockfile` failed inside the sidecar script before anything was compiled, and both the Rust and QA panel jobs died there. Check them out and move them beside the workspace. `actions/checkout` refuses a path outside the workspace, so they land in `.sibling` first. `ref` follows the branch carrying the matching change and moves to the default branch once that merges. Version requirements are deliberately not used here: they would force a publish before a change could be tested, which is the coupling the path dependencies exist to avoid.
`cargo fmt --all` reaches into path dependencies, so with the sibling checkouts present it began reporting WorkTable's formatting as this repository's failure. Those repositories gate their own formatting in their own CI. Naming each workspace member keeps the job answering for this repository alone. Doing that surfaced a real diff in `projects.rs`, now formatted.
…orner Message text and the prompt field both carried `overflow-wrap: anywhere` alongside `break-words`. The two are not the same: `break-word` splits a word only when that word alone cannot fit, while `anywhere` also counts the break opportunity when the renderer measures min-content width, so it split ordinary prose mid-line and ended a line on "No" with "w" under it. `break-words` alone still rescues a long identifier or url, which is what the aggressive value was reached for. The composer's inner surface also had no `overflow-hidden`. Its radius is the ring's outer radius less the ring's 1px padding, so the first attachment chip drew over the corner the ring had rounded and squared off the top-left while the right stayed round.
`resize` sets `height: auto` when the text may have got shorter, so `scrollHeight` reports the content rather than the old box. The write back was then guarded on the height having changed, and a deletion that removed a character without removing a line measured the same number, skipped the write, and left the field on `auto`. That is why deleting text made the prompt jump. `auto` drops the explicit height, so the field sized itself to its content while the viewport wrapper kept the pixel height of the previous measurement and clipped it. Over the ceiling it was worse: the field rendered at full content height inside a 168px clipped wrapper instead of scrolling. Write the height whenever the reset ran, not only when the number moved.
Added: composer and transcript text renderingTwo rendering defects reported against the running app, both confirmed fixed by the owner in a QA-profile build.
|
The step reported `passed: 312, failed: 0` and every contrast audit clean, then its own 3 minute timeout killed it at 3m00s. The previous green run finished in 2m33s, so the margin was 27 seconds and the suite grew past it. This bounds the wall clock of the whole sweep only. `QA_TIMEOUT_SCALE` still governs whether any individual outcome may be slow, so no assertion is weakened.
CI green
The QA panel job failed once on the UI commits, and the sweep was not the reason. That run reported Raised to 6 minutes. This bounds the wall clock of the whole sweep only; Checked locally before changing it: the full sweep runs in 132s against this build, and the composer group is 22 checks in 3.9s total, none near the 1250ms per-check limit. The two commits here remove a CSS class and add one style write, so there was no plausible cost to find. Frontend, Rust and Panel checks are all green on 1704b50. |
AgencyZero now takes the released UI 3.2 line and is ready for WorkTable 1.10 beta's v3 page format without dropping existing stable or experimental profile data.
The GUI resolves
@pathscale/ui3.2.3 with the Solid 2.0 RC packages on one compatible line. Native behavior fixes cover retained PillMenu paint, immediate project-item reveal, Settings search reset, transparent variant windows, and the ps-qa control bindings. The app version is 0.8.61.Storage and runtime changes:
^1.10.0-beta1;wt-migrate/v2-readersidecar reads the immutable compatible v2 registry pair, exports neutral archives for all 17 tables, and stays outside the beta runtime graph;validatedmarker permits crash recovery to promote it;Copied-profile end-to-end evidence, with no live profile changed:
03000000, removed its temporary v2 directory, recorded phasecomplete, and skipped cleanly on the second launch;validatedandsource-preservedphases recover through the same promotion state machine.Focused validation at current storage-migration head
8a20e95, patching WorkTable from the exact PR #106 headc631e0b:cargo test -p wt-migrate: 18 passed;cargo clippy -p wt-migrate --all-targets -- -D warnings: passed;cargo fmt --all -- --checkandgit diff --check: passed;Earlier cutover validation at
f4535d6, using the same PR #106 implementation line:cargo check -p az-gui --no-default-features --features webview-runtime: passed;cargo clippy -p wt-migrate -p az-gui --no-default-features --features az-gui/webview-runtime --all-targets -- -D warnings: passed;cargo test -p agency-tools -p wt-migrate: passed, including 29 agency-tools tests and 18 wt-migrate tests;cargo checkandcargo clippy --all-targets -- -D warnings: passed.The previously recorded UI candidate evidence remains 41 frontend files and 394/394 tests, with production build, TypeScript, lint, and UI ownership checks passing. Desktop and GPU QA were not rerun for this storage/runtime pass.
Registry-only CI is expected to remain red until
worktable 1.10.0-beta1is published. The consumer gate above used the review-ready WorkTable PR head rather than an application workaround.The 0.8.61 update adopts WorkTable's final typed mutation surface: declared writes pass the row key, a generated
TableColumnsselector, and the typed value; complete rows usereplace. All 22 active GUI mutation callsites were migrated without changing schema grammar.cargo check -p az-gui --all-targetspasses against WorkTable checkpoint72b018f, using the already-built frontend and local sidecar placeholders only for Tauri's build-time file checks. No JavaScript runtime ran. Registry order is WorkTable #106 and publication, then this PR.