docs: add step-by-step user guides and docs-capture test suite - #931
Draft
lazabogdan wants to merge 129 commits into
Draft
docs: add step-by-step user guides and docs-capture test suite#931lazabogdan wants to merge 129 commits into
lazabogdan wants to merge 129 commits into
Conversation
Restructure user-guides into workflow-oriented docs with screenshot capture test infrastructure. Move architecture docs to docs/architecture/. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
…endering The settings-overview docs-capture snapshot consistently differs by ~2% between local and CI macOS runners due to font hinting and subpixel rendering variance. Docs-capture screenshots illustrate documentation and don't need pixel-perfect regression accuracy, so raise their maxDiffPixelRatio to 0.03 (3%) while keeping the stricter 1% threshold for the visual regression suite. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move tool group expansion inside the waitFor retry loop so it re-expands after recovery hydration re-keys the content block groups on slow CI runners. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Cover languageFor branches, scenario fixture access, tool-use content blocks, and seedGuideStore to satisfy codecov/patch threshold. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The docs-capture baselines were re-captured against the latest main but the published guide images and baselines.sha256 manifest were not regenerated, causing the Frontend Visual Snapshots CI check to fail. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Completes the follow-on writing pass specified in the user-guides blueprint. Adds every guide the index previously listed as *coming soon*: Integrations — Atlassian connect + usage, Linear, ClickUp, Granola, and the ticketing dashboard. The three token-based connect guides are deliberately standalone and repeat their shared panel mechanics rather than cross-referencing each other, so a user connecting one tool reads exactly one file. ClickUp's workspace selection gets its own step because a connection that stops at "Saved" loads no tasks. Configure — separate Claude Code and Codex guides (also standalone, also non-overlapping), project setup and validation, and capacity tuning. The Codex guide leads with the shipped MCP requirement, since hardening approval or sandbox mode silently disables RalphX's MCP tooling. Advanced — tracked delivery with Tasks, automated supervised goals, personas, and external access, each opening with the enablement step for its off-by-default feature. Plus a top-level troubleshooting guide. Every bolded control was verified against frontend source; labels with no definition site were dropped rather than invented. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Replaces every *coming soon* placeholder in the user-guides index with a link, and adds router rows for choosing an agent runtime, project setup, tickets, and troubleshooting. Also corrects the Settings navigation described in the tour. The shipped registry groups are Models & Providers, Agents, Automation, Repository, Integrations, Notifications, and Application — the tour still described a pre-#918 structure with Harness, Workspace, General, External Access, and Preferences groups, none of which exist. The Enable Tasks toggle lives under Automation, not Planning. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The artifact pane header control is a toggle, and the pane also auto-opens on its own once the conversation's attached ideation session query resolves. On slower machines the single open click lands inside that window, reads the freshly auto-opened state, and closes the pane again — leaving the tab row mounted but hidden, so the following tab click fails with "element is not visible" / "element was detached from the DOM" until the test times out. Make the navigation fixtures converge on an open pane instead of assuming one click sticks, and add `openArtifactTab` so pane-open and tab-select retry together. Applied to the Jira, plan, and publish captures. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…nesses.md Accept main's deletion of agent-harnesses.md which was removed upstream while this branch had a pending merge. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The previous merge resolution (fad260a) claimed main deleted this file, but main still carries it. Restore from origin/main to unblock publish.
The file was an engineering doc misfiled as a user guide: orphaned from the guide index, carrying the guide set's only broken link, and naming two Settings destinations that do not exist. - git mv to docs/architecture/ (W2-3, completes the Wave 1 step-4 miss) - intro now states the maintainer audience and routes users to the two configure/using-*-with-ralphx.md guides - internal-skills.md and agent-thinking-capture.md now resolve as siblings - replace "Settings -> General -> Execution Agents" and "Settings -> Ideation -> Ideation Agents" with the shipped IA: Models & Providers -> Providers validates CLIs, Agents -> Roles sets per-role provider/model defaults. The two lane screens were merged into one role list upstream. - repoint the two tracked inbound references the move would have broken Closes proof obligations 34 and 35. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The guide set used worktree, harness, provider, plan bundle, artifact, and Workspace Review before defining them, and the only definition of "harness" lived in the orphaned file W2-3 just moved out of the tree. - new docs/user-guides/concepts.md defines the seven load-bearing terms in reader order, each pointing at the guide that puts it to work - includes the compact Claude-vs-Codex chooser (A9), routing to the two configure/using-* guides rather than restating them - linked from README.md twice: the "Start here" block and an "I want to..." row - every UI string quoted verbatim from source: Enabled/Ready/Not ready and CLI Ready/CLI Not Ready (HarnessProvidersSection.tsx:110,137), the artifact tabs (AgentsArtifactPane.tsx:411-436), Run review (AgentReviewPanel.tsx:260), and the two Repository helper texts Also repoints ten architecture cross-references this effort's own Wave 1 commit (3f56b38) broke when it deleted execution.md/merge.md/ agent-orchestration.md/configuration.md and salvaged two under new names. docs/user-guides/** now has 118 relative links, 0 broken (obligations 33, 36). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
These are the two documents a new user opens first, and they were written in the weakest style in the set: 13.7 and 15.5 words per numbered step against a 56.8 reference, a 4.8x spread. Most numbered entries were commentary wearing a procedure's clothes -- "Create the workspace" spent 9 steps on 1 real action. Reshaped, not rewritten from scratch. Every action in the old numbering survives; only commentary was demoted to indented paragraphs beneath its step. - 01: 72 steps -> 19, 44.5 words/step - 02: 65 steps -> 11 steps + 4 reference tables, 56.6 non-table words/step - reference lists (nav destinations, start modes, artifact tabs, settings groups) become tables; the plan mandates this for start modes and the same reasoning applies to the other three - all 5 screenshots and all 6 template sections preserved - first-use glosses for harness and worktree linking concepts.md Two source corrections found while verifying: - 02 omitted Database from the Application settings group (settings-registry.ts:160) -- this is W2-8 item 1, folded in here because it lands in the rewritten file - blueprint §0 gives the wizard field as "Project Name (optional)", which is unfindable by grep: the label is split across a JSX span (ExistingRepositoryStep.tsx:287). Guide names **Project Name** so obligation 1 stays provable, and states the field is optional in prose. Action inventory for obligation 29 is in .artifacts/guides-wave2/ (untracked). Obligations 28 (see note on 02), 29, 30, 31. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
connect-github.md already documented five named failure states with exact UI strings and specific remedies. The other four guides did not: ClickUp had no failure handling at all, Linear and Granola compressed it to one generic "fix the token" bullet, and Atlassian -- the most complex setup in the set -- never said what success looks like. - port the named-state -> exact UI string -> specific remedy pattern to ClickUp (5 states), Linear (4), and Granola (4) - Atlassian gets a banner-state table. Its banner is a status *label*, not a sentence like the other three panels - de-duplicate the gh-vs-stored-token contrast: it appeared verbatim in three files, now stated once in connect-github.md where it belongs - token scopes named only where verifiable: ClickUp personal tokens take no scope selection (inherit account permissions); Linear and Granola defer to the vendor's own docs rather than guess Corrects a claim in the plan itself. Both the plan and the review described a "stops at Validated" trap for Atlassian, by analogy with the ClickUp Workspace trap. That state is unreachable: validate_and_enable() (atlassian_integration_service.rs:597-612) sets enabled=true and validation_status=Valid in one operation, and the only other writers go through pending_status_for_settings(), which returns Pending or NotConfigured but never Valid. A successful Save and validate goes straight to Enabled. The guide now documents the four reachable states instead of a manufactured trap. All 28 UI strings quoted across the five guides are verbatim-verified against frontend/src. Terminal periods moved outside the quotation marks where the source string has none, so the quotes stay literally checkable (obligation 38). Obligations 37, 38. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The set had zero worked examples in 17,736 words: no sample prompt, no plan excerpt, no review finding, no @-reference. Readers were told the shape of each step but never shown one. One invented feature now runs end to end -- the composer prompt, the Plan Overview excerpt it produced, the mid-run scope correction, the blocking review finding, and the PR comment. Each callout is a blockquote with a bold lead so a reader can tell the example from the instruction, and the first one says plainly that the feature is invented. The example deliberately carries real texture rather than filler: the plan makes a gate-placement decision that a weaker plan would have got wrong, the implementation drifts out of scope and gets corrected, and the review catches a stale read. That is what makes it worth reading. Subject strings match frontend/src/api-mock/guide-scenarios.ts verbatim, so prose and screenshots corroborate each other and drift becomes a capture failure: project "RalphX Release Companion" (:46) and feature "Block publishing until the release checklist is complete" (:281, :312). Both appear in all five guides. The seeded task title "Ship a dependable release checklist" is deliberately not used as the feature name -- it is the documented trap. Also adds the first-use plan bundle gloss linking concepts.md, and the concrete @-reference example asking-about-a-codebase.md needed. Density moves from 18.7-21.1 to 26.0-33.8 words/step; W2-7 closes the rest. Obligation 32. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Three gaps the first-reader review found, all on the main path:
No duration expectations. The guides said "click Verify Plan" without hinting
whether that returns in a second or ten minutes, so a reader cannot tell a slow
step from a hung one. Hints are qualitative ("several minutes", "usually under
a minute") -- a precise figure would be wrong on the reader's hardware, model,
and repo size, and would rot silently.
No cost expectations. The only mention of provider credits in 25 guides was in
advanced/delivering-large-projects.md, five guides deep in the optional tier.
Each workflow guide now says plainly that runs consume credits, with the
relative weight: Ask is cheapest, implementation is by far the most expensive.
No way to stop. Nothing told a reader how to end a run, or what happened to
their branch if they did. Documents the real control: the composer's Send
button becomes Stop while an agent is running -- but only when the composer is
empty (AgentComposerSurface.tsx:493-494), which is exactly the kind of detail
that leaves someone hunting for a button that is not there. Also states that
stopping leaves the worktree and its changes intact, because the natural fear
is that stopping discards work.
Every workflow guide now ends with a concrete "if this did not look right"
pointer to troubleshooting.md, naming the failures likely at that specific
stage. Previously troubleshooting was two hops from the moment of panic.
Density: 26.0-33.8 -> 31.8-42.1 words/step.
Obligation 40.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1. troubleshooting.md linked project-setup-and-validation as "Configuring project setup and validation"; the target's H1 is "Teaching RalphX about your project". Matched, as the other 22 links already do. 2. delivering-large-projects.md ran steps 1-6 across three ### subsections, so "Plan approval" opened at step 2 and "PR merge" at step 4 -- a reader scanning for step 1 of PR merge found nothing. Numbering now restarts per subsection. 3. reviewing-a-pull-request.md is the last guide on the main path and ended by pointing back at the index, with no sense of arrival. It now says the main path is complete and offers four concrete directions by intent. 4. asking-about-a-codebase.md asserted "Ask is for understanding, not changing" four times in 296 words, including a whole section that only restated it. Said once, in the step where it matters. The recovered space went to what the guide is actually for -- the @-reference mechanic -- and to what to do when the question turns into work. 5. (Landed in the 01/02 rewrite) 02 omitted Database from the Application settings group. Density across the five workflow guides: 18.7-21.1 -> 34.1-41.0 words/step. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
17 of 25 guides had no screenshot, including every settings-heavy one -- the guides where a reader most needs to confirm they are looking at the right panel. This adds four captures on the existing docs-capture pipeline: - settings-atlassian -> integrations/connect-jira-and-confluence.md - providers-claude-card -> configure/using-claude-code-with-ralphx.md - providers-cli-not-ready-> configure/using-codex-with-ralphx.md - settings-capacity -> configure/capacity-and-concurrency.md They reuse the existing contract exactly (setupCapture -> applyGuideScenario -> captureGuideScreenshot); no new fixture primitives, no new Playwright project, no change to PROD_UI_FEATURE_FLAGS semantics. Image set goes 14 -> 18. Two of the six planned captures are deliberately NOT shipped, because they cannot be produced honestly in mock mode: - tasks-kanban-board. The Tasks artifact tab needs tasksEnabled, which is ideation config (api-mock/ideation.ts:476 hardcodes false), not a ui.feature_flag. Seeding the query cache does not survive the refetch that opening the conversation triggers. Forcing it would need either a new fixture primitive or an edit to the mock the visual regression suite shares -- both ruled out by the plan's own constraints. - settings-setup-validation. The project-analysis section body renders empty in mock mode with no console error and no loading state, despite the correct leaf being selected and an active project in the store. Root cause not established. Rather than leave half-built machinery behind, their scenarios and the 144-line kanban fixture branch are removed too; git history has them if the underlying seams are fixed later. The plan designates W2-6 as its one independently droppable item and names Kanban among the most droppable. Validation: npm run test:docs-capture passes twice consecutively with no baseline churn (ob 13); npm run test:visual 219 passed / 0 failed with frontend/tests/visual/snapshots untouched (ob 14, 21); 18 baselines = 18 published = 18 manifest entries = 18 resolving image refs, all with alt text (ob 16, 39); publish script is idempotent (ob 17); applyGuideScenario precedes every capture (ob 20); no task-mock/matrix/Sample strings (ob 22); __mockUiFeatureFlags confined to capture.fixtures.ts (ob 25). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.
Summary
Adds 24 new user guide files organized by workflow and topic, each illustrated with real app screenshots captured from the running UI. Consolidates 7 older user-guide files (
agent-orchestration,configuration,getting-started,github-pr-mode,graph-view,ideation-studio,kanban) into the new workflow/topic/integration/advanced structure. Moves 4 technical docs (internal-skills,merge,execution,task-state-machine) todocs/architecture/and reframes them for a maintainer audience. Adds a Playwright-based docs-capture test suite that automatically validates guide images stay fresh across UI changes.User Impact
New guides — Users installing RalphX for the first time get a clear learning path:
Each workflow guide includes real app screenshots captured from the running UI, not mockups. Settings paths verified against the current app UI (7-section consolidated navigation post PR #930).
Reorganized docs — Technical reference docs (
internal-skills,merge-pipeline,task-execution,task-state-machine) moved todocs/architecture/with added maintainer-audience headers; they remain linked from the architecture index but out of the user-guide index.README update — Simplified feature list, removed feature-tour copy, and added links to the new user guide index and per-topic guides.
Technical Context
Docs-capture suite — New
frontend/tests/docs-capture/with 5 test specs (onboarding-and-tour.spec.ts,planning-and-implementing.spec.ts,reviews-and-github.spec.ts,integrations.spec.ts,settings-panels.spec.ts) that:-docs-capture-darwin.pngbaselinesImage publishing pipeline — New
assets/scripts/publish-guide-images.pyscript that:frontend/tests/docs-capture/snapshots/toassets/public/guides/assets/public/guides/baselines.sha256<scenario-name>.png(18 total guide images)CI validation — New CI step checks that published guide images match their baseline SHAs, catching re-baselined screenshots not republished.
Risks / Follow-Ups
-darwinsuffix); other platforms will skip. CI gate is platform-aware.View full plan
User Guides: Prod Triage, Restructure, and Per-Guide Specs
Goal
Produce the specification, restructure, and the written core guides for
docs/user-guides/: a prod-reachability triage of every current guide, a delete/salvage decision for each, a task-oriented guide tree named after what a user is trying to do, a high-level spec per guide, and finished prose for the nine P0 spine guides. P1 (integrations, configure) and P2 (advanced, troubleshooting) are specified here but written in a follow-on effort. The P0 guides ship with screenshots captured by a new Playwrightdocs-captureproject, so guide images stay verified against the real UI rather than rotting silently.Scope decisions
docs/architecture/, then delete fromdocs/user-guides/merge.mdandtask-state-machine.mdare real maintainer reference, wrong audiencedocs-capturePlaywright suite — 14 images across the nine P0 guides, raw/unframed, dark theme, 1440×900 at 2×A2, A3 remain assumptions; say so if either is wrong. A7's two guides stay P1 (specified only), consistent with A1 — promoting them into the written P0 set is a scope call you have not made.
The finding that reshapes everything
Tasks ships OFF by default.
frontend/src/types/ideation-config.ts:51setstasksEnabled: false, and the settings row states: "Off by default. Disabling pauses all task-managed work immediately; history and worktrees are retained, and plans can still be implemented directly." (IdeationSettingsPanel.tsx:308-317)Six of the twelve guides —
execution.md,merge.md,task-state-machine.md,kanban.md,graph-view.md,agent-orchestration.md, about 163 KB of 227 KB — document that opt-in pipeline as if it were the product. A user who installs RalphX today and follows those guides cannot reach any of it.The actual default journey is:
Plan → Approve Plan → Implement Directly → Workspace Review → Commit & Publish → Review PR
That is exactly the spine you proposed, and it happens to be the shipped default path.
Prod-reachability triage
Ground truth:
frontend/src/components/layout/nav-items.ts:27-79andconfig/ralphx.yaml:37-49.visible: () => trueautomations_page: trueextensibility_page: false, no in-app toggleactivity_page: false, no in-app toggleatlassian_oauth: falseThere is no in-app "Labs" toggle for the config flags —
docs/handoffs/ui-feature-flag-settings-toggle.mdspecs one but it is unimplemented, soextensibility_pageandactivity_pageare unreachable for anyone running the installed app.Two more corrections the current guides need:
docs/install/homebrew.mdhas the real path;getting-started.md:80-102tells users to clone the repo and runnpm run tauri dev.AgentsArtifactPane.tsx:2175-2220). Two guides present them as destinations.docs/user-guides/is orphaned — nothing inREADME.mdlinks to it.The root README repeats the same mistake
README.md:123-143has the identical defect. Its First Workflow walks a new user through "Review proposals" → "Watch execution" → "Tasks move through Kanban" (:127-130) — the opt-in pipeline, presented as the first thing you do. Its Core Surfaces table listsKanban,Graph, andActivityas surfaces (:140-142); Activity is unreachable in prod and the other two are toggles inside the Tasks artifact.Since this effort already edits the root README to link the guide index, correcting those two sections is a small, in-scope addition — the same fix, in the doc most new users read first. It is scoped as one step and can be dropped without affecting anything else.
Disposition of the 12 existing guides
getting-started.md01-install-and-first-run.md,02-tour-of-the-app.mdideation-studio.mdworkflows/planning-a-feature.mdgithub-pr-mode.mdworkflows/reviewing-a-pull-request.md,integrations/connect-github.mdconfiguration.mdconfigure/*.mdguides;ralphx.yamlsection → maintainer docsagent-harnesses.mdconfigure/using-claude-code-with-ralphx.md+configure/using-codex-with-ralphx.md; "Architecture direction" section droppedkanban.md+graph-view.mdadvanced/task-managed-delivery.mdexecution.md+merge.mdadvanced/task-managed-delivery.md; internals →docs/architecture/task-state-machine.mddocs/architecture/task-state-machine.md— real reference, wrong audienceagent-orchestration.mdinternal-skills.mddocs/architecture/— no prod UI existsNet: 12 maintainer-ish documents → 0 remain in
docs/user-guides/.Proposed tree
24 guides in three waves:
README.md,01,02, fiveworkflows/*,integrations/connect-github.mdintegrations/*, 4configure/*advanced/*,troubleshooting.mdconnect-githubis pulled into P0 becausereviewing-a-pull-requestnames it as a hard prerequisite, and a written guide must not depend on an unwritten one.Those nine are what a user needs to go from install to a merged change on the default path, so they stand alone as a coherent set even before P1/P2 land. The directory skeleton and
README.mdrouter are created now so the later waves drop in without restructuring.Each guide's spec — audience, prerequisite, exact UI surfaces walked, and the "you can now…" outcome — is in the Implementation Blueprint, along with the writing conventions the P0 prose must follow.
Affected Files
docs/user-guides/**docs/architecture/**git mv, shown as renames)README.mdFirst WorkflowandCore Surfacesfrontend/playwright.config.tsdocs-captureproject; addtestIgnoretochromiumfrontend/src/api-mock/guide-scenarios.tsfrontend/src/api-mock/chat-scenarios.tsfrontend/tests/docs-capture/**frontend/package.jsontest:docs-capturescriptassets/scripts/publish-guide-images.pycompress-assets.py)assets/public/guides/**.github/workflows/ci.ymlNo backend, schema, or runtime code is touched.
Decisions
advanced/with an explicit "turn this on first" stepdocs/development/advanced/personas.mdREADME.mdindex + link from rootREADME.mdFirst Workflow+Core Surfacesin the same passdocs-capturePlaywright project, raw/unframed, darksetupCapturepins feature flags and integration state to the shipped baseline; captures gate on that state having settledactivityPage/extensibilityPageastrue(tauri-api-core.ts:1342-1344) whileconfig/ralphx.yaml:39-41ships bothfalse— today every web-target screenshot would show two nav destinations real users never havefrontend/src/api-mock/guide-scenarios.ts, registered into the existing scenario registryapi-mock/chat.ts(the web-mode mock) importsgetMockChatScenariofromchat-scenarios.ts; guide scenarios must extendMockChatScenarioNameandchatScenarioFixturesthere so Playwright can callwindow.__mockChatApi?.seedScenario()at test time. Guide scenario data is web-mode only — no Tauri command path imports itultraeffort. The overlap is the enable/CLI-status card, which each guide repeats rather than cross-referencesdeviceScaleFactor: 2→ 2880×1800 PNGchromiumRisks And Open Questions
P0 prose ships before P1/P2 exist, so P0 guides will link forward to files that are not yet written. Mitigation: the
README.mdrouter marks unwritten guides as coming soon rather than linking dead paths, and no P0 guide states an unwritten guide as a hard prerequisite exceptreviewing-a-pull-request→connect-github, which is why that one integration guide is pulled into P0 (see Blueprint §2).If Tasks becomes default-on,
advanced/task-managed-delivery.mdgets promoted to the spine — the tree absorbs that without reshuffling.Personas is labelled "Experimental." in its own settings row (
PersonasEnableToggle.tsx:18).advanced/personas.mdmust carry that word so a reader knows the surface may still move.Automations is not a scheduler. Cron and time-based triggers are explicitly deferred beyond V1 (
docs/features/automations.md:97). A guide that promises scheduling would document a feature that does not exist.Salvage target —
docs/architecture/has no existing state-machine or merge-internals doc, so moved files land as new documents rather than merging into existing ones.docs/external-mcp/already holds solid integrator docs;advanced/external-access.mdshould link to them rather than restate.Risks introduced by adding images
Captures show scenario data, not a real project. The suite runs against
dev:web, which is deterministic and free of personal paths or tokens. The ambient mock store is not used: it is shared with the regression suite and carries strings like"Execute task-mock-4"and"Widget matrix coverage"that would read as test scaffolding in a published guide. Blueprint §2c specifies dedicated guide scenarios instead — every capture names one, and a capture that renders ambient defaults is a bug the suite must catch (proof obligation 20).Guide scenarios add a second consumer to the mock fixtures. They live beside the regression scenarios in
frontend/src/api-mock/, so a careless edit to shared helpers can move both. Mitigated by keeping guide fixtures in their own module and by obligation 21 (the visual suite's baselines must not move when guide scenarios change).Per-harness guides go stale faster than the rest of the tree. Model catalogs and CLI capability gates move on the vendors' cadence, not ours. Mitigation is editorial, stated in both specs: the guides explain how the catalog is gated — a model absent from the list means the installed CLI does not advertise it — rather than freezing an enumerated model list into prose.
Some steps cannot be honestly captured. Real harness execution, real
git push, and a live GitHub PR do not exist in mock mode. Those steps stay prose-only. The 14-image set is bounded by what an existing spec already proves reachable.Timestamp drift is not currently handled anywhere. Fixtures use
new Date().toISOString()and there is nopage.clockormask:usage infrontend/tests. Relative labels are stable only because "now" always renders as "just now"; any surface showing an absolute date would break baselines overnight. §2c pins a fixed clock — this is new work, not an existing guarantee.The app has two independent feature-flag readers, and this effort does not fix that.
useFeatureFlags.ts:20anduiStore.ts:142each define their ownDEFAULT_FEATURE_FLAGS(both all-true for the page flags), anduiStore.ts:869fires a secondget_ui_feature_flagsinvoke at module load alongside the TanStack query. That is the WRITER/DRIFT pair in.claude/rules/big-pr-review-checklist.md, and it is why captures need an explicit settle gate rather than trusting first paint. Consolidating to one reader is production-code work and stays out of scope here — say so if you want it folded in, since the capture gate works either way.Each image is stored twice in git (test baseline + published asset). This is the deliberate price of CI-detected staleness. Worth revisiting if the image count grows well beyond 14.
Capture cost lands on every UI PR. Any change to a captured surface now fails CI until the guide and its baseline are updated. That is the intended mechanism, but it is real ongoing cost — say so if the trade is not worth it, and the image scope can be cut to a smaller set without touching the rest of the plan.
Generated by RalphX
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.