Render the grammar v3 kinds on mobile from their declarative base (WS3 layer 3) - #2208
Closed
SawyerHood wants to merge 1 commit into
Closed
Render the grammar v3 kinds on mobile from their declarative base (WS3 layer 3)#2208SawyerHood wants to merge 1 commit into
SawyerHood wants to merge 1 commit into
Conversation
SawyerHood
force-pushed
the
ws3-l3-mobile-declarative-base
branch
from
August 21, 2026 17:38
92a7584 to
2173663
Compare
…3 layer 3) Mobile renders the declarative base for every kind and loads no plugin JS (docs/provider-plugin-api.md §5). The G4 kind map had five WS3 fallbacks; each now names a registered row renderer. - `work:file-read` / `work:search`: title-only rows (the title builder already speaks the bridge label + structured content). - `work:plan-steps`: the snapshot's steps in the agent's order, a status glyph each, the explanation and the presentation detail above. - `work:extension`: header from the presentation (label, glyph, tint), body = the presentation `detail` as Markdown; expandable only with one. - `work:delegation`: the v3 delegation item folds onto the existing delegation renderer (layer 1 projects it there). - Every work row's leading glyph is the bridge's glyph when the host knows it, tinted per theme mode from `presentation.tint` (colour grammar checked); tool rows show the presentation detail above the call card. - `/dev/work-rows` showcase gains a presentation section (reads, searches, tinted tool, plan, extension, pending variants) and the Maestro `phase4a-work-rows` flow asserts each, with screenshots. The flow runs on the macOS `mobile-e2e` runner; this Linux box has no simulator. `turbo test --filter=@bb/mobile`: 841 passed (G4 exhaustiveness, glyph/tint model tests).
SawyerHood
force-pushed
the
ws3-l3-mobile-declarative-base
branch
from
August 21, 2026 18:09
2173663 to
8cc9ea0
Compare
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.
WS3 layer 3 of 5, stacked on #2206 (layer 2: web renderers). Do not merge — the coordinator reviews, Sawyer merges the stack.
What was wrong
The contract PR's G4 kind map (
apps/mobile/src/screens/thread/timeline/item-kind-map.ts) left five WS3 fallbacks:fileRead,search,planSteps,delegationandextensionfell through toFallbackTimelineRow(a raw JSON dump). Mobile read nopresentationat all — glyphs came from aworkKindtable, an extension row had no renderer, and a tool row's bridge detail never showed. Per §5, mobile must render the declarative base for every kind with no plugin JS.What changed
renderers/work/PresentationWorkRows.tsx):FileReadWorkRowandSearchWorkRoware title-only (the shared title builder from layer 1 already reads the bridge label + the path/query);PlanStepsWorkRowlists the steps in the agent's order with a status glyph each (Square/Check/X), dims settled steps, and shows the explanation and detail;ExtensionWorkRowrenders the presentationdetailas Markdown under a host header and is expandable only when there is one. The v3delegationitem folds onto the existingDelegationWorkRow. All four registered inrenderers/work/index.ts; the kind map's five{ fallback }entries become{ row }.leadingIconForWorkRowtakes the bridge's glyph whenisIconNameknows it (per-kind fallback otherwise);leadingIconTintForWorkRow(row, mode)picks the light/dark tint for the current theme mode after a colour-grammar check;ExpandableRowHeadergainsleadingIconColor.ToolWorkRowshows the presentation detail above the call card./dev/work-rowsgains a "Presentation-driven rows" section (completed + pending reads, content + path searches, a tinted tool with detail, a plan with an active and a failed step, a tinted extension row and a pending one).e2e/flows/phase4a-work-rows.yamlasserts each and takes three screenshots (phase4a-work-rows-presentation-tool,-plan-steps,-extension).How you verified
turbo test --filter=@bb/mobile: 124 files, 841 passed — includes the G4 exhaustiveness test (every{ row }names a registered kind; nofallbackleft for WS3) and newwork-row-modeltests for the bridge glyph (known / unknown / skill-read override) and the per-mode tint (valid / refused / bb-authored rows).turbo typecheck --filter=@bb/mobileclean.mobile-e2elabel or runpnpm --filter @bb/mobile e2e:ioson a Mac; the three screenshots land in the flow's artifacts. I could not produce them here and am saying so rather than fabricating them.