Skip to content

Answer wait: one quiet line and the sources arriving, not a five-step panel - #2437

Open
BigSimmo wants to merge 8 commits into
mainfrom
claude/loading-animation-redesign-zdcba4
Open

Answer wait: one quiet line and the sources arriving, not a five-step panel#2437
BigSimmo wants to merge 8 commits into
mainfrom
claude/loading-animation-redesign-zdcba4

Conversation

@BigSimmo

@BigSimmoBigSimmo commented Aug 27, 2026

Copy link
Copy Markdown
Owner

Summary

  • Retires AnswerProgressStepper. It was a filled accent panel carrying a 36px icon tile, a five-circle stepper with connecting rails, a scrolling ECG trace, a per-second elapsed counter and a Processing details disclosure — roughly 210px of the loudest chrome in the product, occupying the answer's own position for the four to twelve seconds before every answer, on a surface that PRs Answer mockup: take the symbol off the turn, drop the safety rail, and make the two panels one #2386 and Answer page: symbol off, one number per claim, no safety rail, one panel #2388 had just spent their whole argument quietening. It narrated the orchestrator's five stages, which the reader is not operating, and it never showed a single source.
  • Replaces it with AnswerProgress: one status line, a prose placeholder, and the arriving source rail — in that order, because that is where each one's finished counterpart lands. Arrival swaps content in place instead of removing a panel and letting everything below it jump up.
  • The evidence preview stops being a second panel. It already crossed the stream boundary before the prose (trimmed, owner-scoped, governed, consumed by the client) and was rendered as its own full block below the stepper — icon tile, heading, three-column card grid. Two loud blocks in the answer's position, both removed on arrival. It is now a horizontal rail of small cards mounted inside AnswerProgress, drawn to look like the source rail the arrived answer renders, because that is what it becomes.
  • Preview cards carry a dot, not a number.isDeliverableVerifiedUnit pins evidence_preview to sequence 0 and rejects a repeat, so the preview crosses once and complete — it cannot accrue card by card. More importantly the preview is the top slice of retrieval in retrieval order, while the final list is rebuilt from what the answer cites and re-capped by trust, so a number assigned during the wait can point at a different document once the answer lands. Numbering is what arrival buys. Pinned by a DOM test and stated in the rail's accessible name.
  • Cards show review status, not a section heading (p.12 · Current), read through the same sourceStatusShortLabel helper the arrived answer's rail uses, so the wait and the answer can never disagree about a document. Freshness is the fact that decides whether a source should be trusted at all.
  • No number the reader cannot reconcile with the screen.resultCount is candidate chunks — commonly 24 where the answer cites three — so a reader who takes "24" away has been told the wrong thing about how much evidence is behind their answer, whatever noun sat beside it. australianSourceCount is a ratio nothing on screen can confirm, so it survives as the fact without the figure ("Prioritising Australian sources"). The single count that is printed comes from answerProgressPreviewMessage and counts exactly the cards visible beneath the line.
  • The fallback route says so while it is happening ("Assembling the answer from the sources directly"). Twenty of thirty answers in the 2026-08-18 blinded read were source_only; the wait is the honest place to set that expectation rather than leaving the answer to defend it.
  • Processing details became How this answer was built, shown only after a retrying/fallback/cached run. The old disclosure held the same five stages for every question, which is why nobody opened it.
  • The elapsed counter is gone. In its place one threshold at 10s appends "taking longer than usual" and does not tick. Nothing can be done with the number while the search is healthy; re-drawing it every second in the position the eye rests on is what made the wait the subject.
  • The completed wait renders no visible chrome. The answer surface already prints its own governed provenance line above the prose ("AI-generated from N cited sources", clinical owner approved 2026-08-25), so "Answer ready in 3s" underneath it was a competing completion statement. The screen-reader announcement survives.
  • SearchProgressBanner (library/document modes) loses its filled accent band and spinning Loader2 for the same quiet line. Fill is how this app marks a hazard, and a search in flight is not one.
  • AnswerSkeleton drops its own status line and is no longer rendered beside AnswerProgress. Found in the browser rather than in a test: the screen showed "Writing the answer…" directly above "Reading your question…". There is now exactly one place that says what is happening.
  • Motion: the ECG trace, its two animation tokens, its keyframes and its compositor rules are deleted. The indicator is a 5px dot breathing on opacity — chosen because a stopped dot is a complete, correct bullet where a stopped spinner is a fragment of a circle, which is what holds the contract ui-phone-motion.spec.ts exists for after Reduce Motion set the trace to opacity: 0 and left a dead panel on a physical iPhone. The animation stays in globals.css rather than a motion-safe: utility because html[data-motion="full"] must be able to opt back in over the OS, which a Tailwind media variant cannot express.
  • Design study at /mockups/answer-loading-redesign (three directions, driven from one shared clock, with the states that are not the happy path). Design scratch; 404s in production.

The rail degrades to nothing rather than to a placeholder: the preview unit is gated behind NEXT_PUBLIC_RAG_INCREMENTAL_EVIDENCE_PREVIEW_RENDER (#100 Phase 1) and is off by default, so today the line and the prose placeholder are the whole wait. Nothing here invents a source to fill the space.

Docs updated where they named the retired markup: docs/search-chrome-behaviour.md's physical-iPhone acceptance rubric named the ECG strip by class and would have sent a tester hunting for markup that no longer exists; docs/design-system/COMPONENTS.md named the component in its live-region adoption note. The second was found by check:dead-code-candidate.

tests/answer-activity-trace-css.test.ts pinned the deleted component and is replaced by tests/answer-progress-indicator-css.test.ts, which carries the same regression forward against the dot and additionally asserts the trace stays deleted — a partial revival is how the original defect shipped.

compactSourceSnippet now has no call site, because the evidence preview was the only surface printing a source snippet and the rail prints none. The formatter is kept as the contract any reintroduced snippet must go through, and its guard in rendered-text-formatting.test.ts becomes conditional on source.content being rendered at all. The unconditional raw-render half is unchanged and now also covers {source.content}.

Verification

  • npm run verify:pr-local

During development, use npm run verify:cheap as the faster iteration gate before the final PR-local preflight.

  • npm run verify:ui when UI, routing, styling, browser behavior, reduced-motion, or forced-colors behavior changed

UI verification not run as the full verify:ui gate: the affected Chromium journeys were run directly instead — tests/answer-progress-ui-smoke.spec.ts 5 passed (including a new geometry test pinning line → prose → rail), tests/ui-phone-motion.spec.ts 5 passed, tests/ui-universal-search.spec.ts 20 passed. Shared search-chrome foundations are untouched by this diff, so the broad gate was not the smallest check capable of detecting a plausible regression here. Chromium evidence does not close the physical Safari or installed-PWA acceptance gap; the updated rubric in docs/search-chrome-behaviour.md is what covers that.

  • npm run verify:release before release or handoff confidence claims

For retrieval, ranking, selection, chunking, source/citation rendering, or answer-contract changes, verify:pr-local runs eval:rag:offline automatically. Run the offline command directly during iteration before spending a live eval.

  • npm run eval:retrieval:quality (must stay 36/36) when retrieval, ranking, selection, chunking, or scoring behavior changed — not applicable: no retrieval, ranking, selection, chunking or scoring code is touched. This diff is presentation only.
  • npm run eval:rag -- --limit 15 + npm run eval:quality -- --rag-only — not applicable: answer generation, the synthesis prompt and answer post-processing are unchanged. The only answer-path edits are to how progress and preview sources are rendered.
  • npm run check:production-readiness — not run. No clinical workflow, privacy, environment, Supabase, source-governance or deployment behaviour changed; the change is confined to client rendering of the loading state.
  • npm run check:deployment-readiness — not applicable: no deployment startup, hosting or rollout behaviour changed.

Full offline suite: 895 test files / 10841 tests passed, 1 skipped. Design-system contract passed (1028 production files; no ratchet moved). tsc --noEmit, eslint and prettier --check all clean.

Risk and rollout

  • Risk: Low, and presentation-only. No retrieval, ranking, generation, governance or data path is touched. The realistic failure modes are visual — an indicator that disappears under reduced motion or forced colors, or a layout jump when the answer arrives — and both are now pinned by tests that did not exist in this form before (answer-progress-indicator-css.test.ts, the geometry test in answer-progress-ui-smoke.spec.ts, and the retargeted ui-phone-motion.spec.ts). The residual gap is physical iOS Safari and the installed PWA, which Chromium cannot close.
  • Rollback: Single-commit revert of the branch. No migration, no stored state, no feature flag to unwind. NEXT_PUBLIC_RAG_INCREMENTAL_EVIDENCE_PREVIEW_RENDER is untouched and remains off by default, so the arriving rail is dark in production until it is deliberately enabled.
  • Provider or production effects: None. No provider-backed command was run, and no Supabase, OpenAI, Railway or CI mutation is involved.
  • RAG impact: no retrieval behaviour change — no file under src/lib/rag/, no retrieval RPC, no golden fixture, no ranking or selection module, and no eval harness file is modified. The diff is limited to client components (answer-status.tsx, answer-evidence-preview.tsx, answer-progress.ts, ClinicalDashboard.tsx, DocumentViewer.tsx), globals.css, the tailwind-merge token list, tests, docs and a design-scratch mockup. answer-progress.ts derives display copy from the already-public stage DTO and has never influenced retrieval; answer-progress-public.ts, which owns that boundary, is unchanged.

Clinical Governance Preflight

  • Source-backed claims still require linked source verification before clinical use
    • Unchanged, and reinforced: the wait's preview cards are deliberately unnumbered so a reader cannot form a citation mapping before the answer has decided one, and each card links to the exact page it came from.
  • No patient-identifiable document workflow was introduced or expanded without explicit governance approval
    • None introduced. The composer's "Do not enter patient-identifiable information" notice is untouched.
  • Supabase target remains Clinical KB Database (sjrfecxgysukkwxsowpy)
    • No Supabase configuration, migration or client code is touched.
  • Service-role keys and private document access remain server-only
    • Unchanged. The preview unit reaching the client is the existing trimSourceForClient output already validated by isDeliverableVerifiedUnit; this diff renders it and adds nothing to what crosses the boundary.
  • Demo/synthetic content remains clearly separated from real clinical sources
    • Unchanged. All synthetic content added here is confined to src/app/mockups/** and *-mockups.tsx, which 404 in production, and to test fixtures.
  • Source metadata, review status, and outdated/unknown-source behavior remain conservative
    • Improved. The preview cards now surface each source's review status during the wait via sourceStatusShortLabel, the same helper the arrived answer's rail uses, so review_due, outdated and unknown are shown rather than silently omitted, and the two surfaces cannot disagree.
  • Deployment classification/TGA SaMD impact was checked when clinical decision-support behavior changed
    • No change to decision-support behaviour. No claim, citation, ranking or answer content is altered; only the presentation of the in-flight state, which produces no clinical output.

Notes

  • The design study at /mockups/answer-loading-redesign is kept as the record of the argument, so its Panel One is now a redraw of a component that no longer exists. Its Direction B frames still show the mockup's original conception (cards accruing one at a time, a running count during search); the shipped behaviour differs on both points for the reasons above, and reconciling the scratch page with what landed is worth a follow-up but does not affect production.
  • answerProgressStepIndex is retained and still exported. It is a correct, tested pure function describing the public stage ordering; check:dead-code-candidate refuses it as pinned by a committed test, which is the gate working as intended.

🤖 Generated with Claude Code

https://claude.ai/code/session_012kHT2YKCNnUrVckTaJW6ga


Generated by Claude Code


Note

Low Risk
Presentation-only changes to loading/progress UI with no retrieval or answer-generation path touched; main regression risk is layout, a11y live regions, and reduced-motion visibility, which the updated tests explicitly guard.

Overview
Replaces the answer wait UI — retires AnswerProgressStepper (accent panel, five-step stepper, ECG trace, elapsed counter, always-on processing details) in favor of AnswerProgress: a muted status line with a breathing dot, three prose skeleton bars, and an optional horizontal sources rail wired through ClinicalDashboard / DocumentViewer.

Evidence preview is folded into that wait, not a sibling panel: AnswerEvidencePreview becomes a scrollable rail (up to six cards) with dots instead of numbers, page + review status, and copy rules in answer-progress.ts so the line only shows counts the user can match to visible cards. Completion drops visible “answer ready” chrome; “How this answer was built” appears only after retry/fallback/cached runs.

Motion/CSS: ECG animations and .answer-activity-trace are removed; answer-progress-breath on .answer-progress-dot keeps the indicator visible under reduced motion. SearchProgressBanner and AnswerSkeleton align with the same quiet pattern (no duplicate status).

Adds /mockups/answer-loading-redesign (design record) and retargets tests (answer-progress-indicator-css, Playwright smoke/phone motion).

Reviewed by Cursor Bugbot for commit 15dcd00. Configure here.


Generated by Claude Code

The answer surface was quietened in #2386 and #2388 — the assistant tile off
the turn, one number per claim, the safety rail's colour moved into its own
icon, two panels made one. The loading state was not in that pass, so
AnswerProgressStepper still owns the four to twelve seconds before every answer
with a filled accent panel, a 36px icon tile, a five-circle stepper, four
connecting rails, a scrolling ECG trace, a per-second elapsed counter and a
Processing details disclosure. It is now the loudest element on the surface,
and it is the first thing a reader sees.
New study at /mockups/answer-loading-redesign, in four panels.
Panel One draws the real AnswerProgressStepper — imported from answer-status.tsx
rather than redrawn, so the comparison is against what ships and not against an
unflattering approximation. Both densities, counter live. Six observations
travel with it, of which the substantive one is the last: the evidence preview
already crosses the stream boundary before the prose, trimmed and owner-scoped
and consumed by the client today, and the surface currently spends that arrival
on a progress bar about the fact that it arrived.
Panel Two runs three directions off one shared eleven-beat clock, because a
loading state cannot be judged from a still. A scrubs to any beat and pauses.
Direction A is what answer-chat-perfected-v2 already drew, held for the whole
wait. Direction B adds the sources arriving — each lands in the rail as it is
found, carrying a dot rather than a number, because the evidence preview is
retrieval-ordered while the final list is rebuilt from what the answer cites,
so a number assigned during the wait can end up pointing at a different
document. Direction C names each document as it is opened and is drawn to be
rejected: retrieval opens far more documents than the answer cites, so a reader
who watches six titles go past takes all six to be behind the answer.
B is recommended. All three end on the same arrived answer and the same
numbered rail, so only the wait is being compared.
Panel Three is B at the 68ch desktop measure, with the copy for each beat mapped
to the stage that already emits it, and a list of what is deliberately dropped.
Panel Four draws the five states the current stepper renders identically —
slow, nothing found, assembled without the model, stopped, reduced motion.
Design scratch only. No production surface changes: answer-status.tsx still
ships the stepper drawn in Panel One, and removing it is the follow-up once a
direction is chosen.
Verified: tsc --noEmit clean; eslint clean on all three changed files; prettier
clean; check:design-system-contract passed (55 components, 76 roots, no ratchet
moved); route-reachability, site-map, bundle-budget and calculator-mockup-boundary
suites 62 passed (4 files); page rendered at 1440px in Chromium with zero console
errors, scrubbed and screenshotted at the searching and arrived beats.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012kHT2YKCNnUrVckTaJW6ga
The intro counted the states that need their own words and then included the
arrived state, which is there for comparison rather than as a sixth state.
Names it as such instead of miscounting the row.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012kHT2YKCNnUrVckTaJW6ga
… panel
Direction B from /mockups/answer-loading-redesign, applied to the live surface
after the clinical owner chose it (2026-08-27).
`AnswerProgressStepper` is gone. It was a filled accent panel carrying a 36px
icon tile, a five-circle stepper with connecting rails, a scrolling ECG trace, a
per-second elapsed counter and a Processing details disclosure — roughly 210px
of the loudest chrome in the product, occupying the answer's own position for
the four to twelve seconds before every answer, on a surface that PRs #2386 and
#2388 had just spent their whole argument quietening. It narrated the
orchestrator's five stages, which the reader is not operating, and it never
showed a single source.
`AnswerProgress` replaces it with one status line plus the arriving source rail.
The rail is the substantive half. The evidence preview already crossed the
stream boundary before the prose — trimmed, owner-scoped, governed, consumed by
the client — and was being rendered as a SECOND full panel below the stepper,
with its own icon tile, heading and three-column card grid. Two loud blocks in
the answer's position, both removed when the answer arrived. It is now a
horizontal rail of small cards drawn to look like the source rail the arrived
answer renders, mounted inside AnswerProgress rather than beside it, so nothing
is removed and nothing jumps when the answer lands.
Cards carry a dot, not a number. The preview is the top slice of retrieval in
retrieval order; the final list is rebuilt from what the answer cites and
re-capped by trust. A number assigned during the wait can point at a different
document once the answer lands, which is the precise failure the citation design
exists to prevent. Pinned by a DOM test, and stated in the rail's accessible
name for a reader who never sees the dot.
Checked while building, not assumed: `isDeliverableVerifiedUnit` pins
evidence_preview to sequence 0 and rejects a repeat, so the preview crosses once,
complete — it cannot accrue card by card. And it is gated behind
NEXT_PUBLIC_RAG_INCREMENTAL_EVIDENCE_PREVIEW_RENDER (#100 Phase 1), off by
default, so today the line carries the accrual alone via resultCount and the rail
is simply absent rather than a placeholder.
Improvements beyond the mockup:
- Retrieval counts passages and selection counts sources, never one noun for
both. Collapsing them is how a reader believes two dozen documents are behind
an answer that cites three. Pinned in tests/answer-progress.test.ts.
- `fallback` says "Assembling the answer from the sources directly" while it is
happening. Twenty of thirty answers in the 2026-08-18 blinded read were
source_only; the wait is the honest place to set that expectation.
- Processing details became "How this answer was built", shown only after a
retrying/fallback/cached run. The old disclosure held the same five stages for
every question, which is why nobody opened it.
- The elapsed counter is gone. In its place one threshold at 10s appends
"taking longer than usual" and does not tick. Nothing can be done with the
number while the search is healthy; re-drawing it every second in the position
the eye rests on is what made the wait the subject.
- SearchProgressBanner (library/document modes) loses its filled accent band and
spinning Loader2 for the same line. Fill is how this app marks a hazard.
- AnswerSkeleton drops its own status line. Found in the browser, not in a test:
it renders in the answer's body slot directly under AnswerProgress, so the
screen showed "Writing the answer…" above "Reading your question…". There is
now exactly one place that says what is happening.
- The completion dot is not green. A status hue that nothing else on the element
repeats is a colour-only signal, and it was redundant beside a line already
reading "Answer ready in 3s". Caught by check:design-system-contract.
Motion. The ECG trace, its two animation tokens, its keyframes and its
compositor rules are deleted; the indicator is a 5px dot breathing on opacity.
That choice is what holds the contract ui-phone-motion.spec.ts exists for, after
Reduce Motion set the trace to opacity 0 and left a dead panel on a physical
iPhone: a stopped dot is a complete, correct bullet, where a stopped spinner is a
fragment of a circle. The animation stays in globals.css rather than a
motion-safe: utility because html[data-motion="full"] must be able to opt back in
over the OS, which a Tailwind media variant cannot express.
tests/answer-activity-trace-css.test.ts pinned the deleted component, so it is
replaced by tests/answer-progress-indicator-css.test.ts carrying the same
regression forward against the dot — including an assertion that the trace stays
deleted, since a partial revival is how the original defect shipped.
docs/search-chrome-behaviour.md's physical-iPhone rubric named the ECG strip by
class and would have sent a tester hunting for markup that no longer exists;
docs/design-system/COMPONENTS.md named the component in its live-region adoption
note. Both updated — the second found by check:dead-code-candidate, which is the
gate doing its job.
Verified: verify:cheap exit 0 — 37 gates enforced, design-system contract passed
(1021 production files, no ratchet moved), 886 test files / 10733 tests passed;
Playwright chromium answer-progress-ui-smoke + ui-phone-motion 9 passed,
ui-universal-search 20 passed; driven in a real browser at 390px through
scoping → retrieving → retrieved(24) → ranking(4 AU, 2 WA) → generating and past
the 10s threshold, and again with the preview flag on to confirm six real cards
render, link to /documents/<id>?page=&chunk=, and carry no numbers.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012kHT2YKCNnUrVckTaJW6ga
…ion-redesign-zdcba4
# Conflicts:
#	data/repo-awareness-snapshot.json
…creen
Takes the pending screens from /mockups/answer-chat-perfected-v2 ("Evidence
arrives first") and applies what they get right to the live wait. Three changes,
each a defect in what shipped in the previous commit.
**Order.** The mockup draws status line → prose placeholder → sources, because
that is where each one's finished counterpart lands. The first cut put the rail
directly under the line and left AnswerSkeleton to render below it as a sibling,
so the rail sat ABOVE the prose during the wait and BELOW it after — travelling
the height of the answer at the exact moment the reader was given something to
read. That is the whole "nothing jumps" claim, and it was wrong. AnswerProgress
now owns the wait end to end, ClinicalDashboard stops rendering AnswerSkeleton
beside it, and a Playwright test pins the geometry rather than the markup.
**Counts.** The mockup prints one number and it is the number of cards visible
beneath it. Nothing else. Measured against that rule, both counts I added fail:
`resultCount` is candidate chunks — commonly 24 where the answer cites three —
so a reader who takes "24" away has been told the wrong thing about how much
evidence is behind their answer, whatever noun sat beside it; and
`australianSourceCount` is a ratio (4 of 6) nothing on screen can confirm. The
first is gone. The second survives as the fact without the figure —
"Prioritising Australian sources" — because a Perth reader does care that local
guidance is being favoured, and the per-source origin stays where it can be
checked. `answerProgressPreviewMessage` is now the only place the wait prints a
number, and it counts the rail.
Accrual does not depend on numbers: a healthy wait still moves through four
distinct clauses in about seven seconds, which is what separates working from
stuck.
**Completion.** The mockup's third frame hands the completed state to the
answer's own provenance line and prints nothing else. Production already renders
that line ("AI-generated from N cited sources", clinical owner approved
2026-08-25), so "Answer ready in 3s" underneath it was a competing completion
statement and the last of the elapsed counter. The completed wait now renders no
visible chrome — only the screen-reader announcement, plus the "How this answer
was built" disclosure when the answer left the ordinary route.
Also from the mockup: the rail cards carry review status rather than a section
heading ("p.12 · Current"), read through `sourceStatusShortLabel` so the wait and
the arrived answer can never disagree about a document. Freshness is the fact
that decides whether a source should be trusted at all; a section heading is
orientation the reader gets anyway on opening it.
One consequence worth naming: `compactSourceSnippet` now has no call site,
because the evidence preview was the only surface printing a source snippet and
the rail prints none. The formatter is kept — it is the contract any
reintroduced snippet must go through — and its guard in
rendered-text-formatting.test.ts becomes conditional on `source.content` being
rendered at all, so it fires the moment one of these surfaces touches it again.
The unconditional raw-render half is unchanged and now also covers
`{source.content}`.
Verified: tsc clean; eslint clean; prettier clean; design-system contract passed
(1028 production files, no ratchet moved); full offline suite 895 files / 10841
tests passed; Playwright chromium answer-progress-ui-smoke 5 passed (including
the new geometry test), ui-phone-motion 5 passed, ui-universal-search 20 passed;
driven in a real browser at 390px, where the rendered tops are line 88 → prose
128 with the rail structurally next, and the line reads "Searching your
documents…" then "Writing the answer…" with no digit in either.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012kHT2YKCNnUrVckTaJW6ga
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@coderabbitai

coderabbitaiBot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

Next included review available in 55 minutes.

View limit details

Limit details: You’ve used the included review currently available. Your 103 included PR review attempts over the past 7 days set your current allowance at 1 review per hour.

Your organization has reached its usage spending cap. Adjust your spending cap in the billing tab.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: b71c75bc-3604-42e7-9d0f-cd52e3dfb84d

📥 Commits

Reviewing files that changed from the base of the PR and between c9f0484 and 073b648.

⛔ Files ignored due to path filters (3)
  • docs/design-system/COMPONENTS.md is excluded by !docs/**, !**/*.md
  • docs/search-chrome-behaviour.md is excluded by !docs/**, !**/*.md
  • docs/site-map.md is excluded by !docs/**, !**/*.md
📒 Files selected for processing (21)
  • data/repo-awareness-snapshot.json
  • src/app/globals.css
  • src/app/mockups/answer-loading-redesign/page.tsx
  • src/app/mockups/mockups-layout-client.tsx
  • src/components/ClinicalDashboard.tsx
  • src/components/DocumentViewer.tsx
  • src/components/answer-loading-redesign-mockups.tsx
  • src/components/clinical-dashboard/answer-evidence-preview.tsx
  • src/components/clinical-dashboard/answer-progress.ts
  • src/components/clinical-dashboard/answer-status.tsx
  • src/lib/tailwind-merge.ts
  • tests/answer-activity-trace-css.test.ts
  • tests/answer-evidence-preview.dom.test.tsx
  • tests/answer-progress-indicator-css.test.ts
  • tests/answer-progress-ui-smoke.spec.ts
  • tests/answer-progress.test.ts
  • tests/playwright-motion-emulation-contract.test.ts
  • tests/rendered-text-formatting.test.ts
  • tests/ui-phone-motion.spec.ts
  • tests/ui-smoke.spec.ts
  • tests/ui-universal-search.spec.ts

Comment @coderabbitai help to get the list of available commands.

@supabase

supabaseBot commented Aug 27, 2026

Copy link
Copy Markdown

This pull request has been ignored for the connected project sjrfecxgysukkwxsowpy because there are no changes detected in supabase directory. You can change this behaviour in Project Integrations Settings ↗︎.


Preview Branches by Supabase.
Learn more about Supabase Branching ↗︎.

@cursor

cursorBot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_cf88f30d-7f18-461a-a02f-100e6f61b101)

@BigSimmo
BigSimmo enabled auto-merge August 27, 2026 15:43
Resolves two conflicts:
- src/components/clinical-dashboard/answer-status.tsx — main extracted
CopyButton into @/components/ui/copy-button (dropping the Clipboard,
ClipboardCheck and floatingControl imports) while this branch retired
AnswerProgressStepper (dropping Activity, Check, Loader2 and sourceCard).
The resolution takes the union of both removals and keeps this branch's
useEffect/useState additions. Confirmed by symbol scan that the only
remaining Loader2 mentions are prose in comments.
- data/repo-awareness-snapshot.json — generated; regenerated with
npm run snapshot:repo-awareness rather than hand-merged.
@cursor

cursorBot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_dc58b45f-4758-44d6-8c48-2241dee9d3a4)

Only conflict was the generated data/repo-awareness-snapshot.json, which
every concurrent PR touches. Regenerated with npm run snapshot:repo-awareness
rather than hand-merged. No code conflict this time.
@github-actions

Copy link
Copy Markdown
Contributor

CI triage

CI failed on this PR. Automated classification of the 2 failed job(s):

  • Production UI (1)not baselined: this job did NOT run on the main comparison below (path-scoped skip), so that run says nothing about it either way. Treat the comparison as absent, not green, and inspect the failing step.
  • PR requiredneeds investigation: inspect the failing step and uploaded diagnostics; rerun only after classifying the cause.

Compared with main CI run #14346 (success). That run's conclusion is an aggregate and did not exercise Production UI (1).

Classification is evidence routing, not permission to ignore a failure. Exact quarantined Playwright identities remain governed by the flake ledger.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@BigSimmo@claude