**Phase 138 final verification pass — all green, no defects found.** - Verified: blockquote pass in `frontend/assets/markdown.js` (step 2b, between escape+inline and paragraphs), guard extended to `|blockquote`, docstring updated; `.md-quote` CSS (left border + padding + `--ink-soft`, no fill, palette vars only, contrast comments, user-bubble override); unit pins + node behavior; dedicated E2E (chat / viewer / restore); mock `QUOTE_TRIGGER`/`QUOTE_ANSWER`; fixture `tests/fixtures/quote_docs/`. Thinking block confirmed on the same shared renderer (app.js L2025/L3095). - `uv run pytest tests/e2e/test_markdown_blockquotes.py -v --no-cov` → 3 passed (isolation) - `uv run pytest --cov=app --cov-report=term-missing` → 3268 passed, 9 skipped; TOTAL **99%** (>90%) - `uv run ruff check . && uv run pyright` → All checks passed; 0 errors - Criteria: quotes render in chat/viewer/restore ✅ (E2E) + thinking ✅ (shared renderer + unscoped AA CSS); `>>` collapses, fence/table `>` untouched ✅ (unit+e2e); non-quote byte-identical ✅ (exact fixture; phase-44/renderer suites pass **unedited**, confirmed by empty `git diff --stat`) - No deviations; commit + phase-dir move left to the harness per pipeline rules (working tree clean of stray changes — only phase-138 diffs present) - Next pending phase: **139_read_range_tool_lines**
2.0 KiB
2.0 KiB
Task 02 — .md-quote styling (theme-safe, WCAG AA)
Phase: 138_markdown_blockquotes · Source: TODO.md:3 — "Markdown formatted ">" quotes aren't rendering"
Story: n/a
Objective
The blockquote is visually distinct and readable in all three rendering contexts (chat bubble, thinking block, document viewer) with ONE rule set, using only the existing :root palette.
Work
frontend/assets/styles.css— add the.md-quoterule next to the other markdown element styles (the phase-44.md-table/.md-table-wrapblock is the anchor):border-left: 3px solid <palette var>(a visible-but-restrained border — pick from the existing:rootpalette, the executor's contrast judgment),padding: 0.25rem 0.75rem,margin: 0.5rem 0,color: <muted palette var>with a ≥4.5:1 contrast comment on the bubble surface per the house convention (--ink-soft's/* 8.2:1 on --surface */qualifies — verify against the actual bubble background and document it).frontend/assets/styles.css— no background fill (ASSUMPTION A2); verify the rule renders acceptably in the chat.bubble, the.thinking-textblock, and the document-viewer content region — add a scoped override only if the task-03 E2E proves a clash.
- ASSUMPTION: the built-in dark palette is the single source of truth — the
:root-drift unit test parses built-ins from this file, so no hex literal outside:rootand no second copy.
Testing & Quality
- Unit:
tests/unit/test_markdown_blockquotes.py(task 03) source-pins the.md-quoterule's presence and its palette-var-only references (the phase-44 CSS-pin pattern). - Coverage: n/a (frontend).
Completion Criteria
- the
.md-quoterule exists instyles.css, references only:rootpalette vars, and carries a ≥4.5:1 contrast comment - the quote is visually distinct in chat + viewer (the E2E screenshot, task 03)
- the theme no-op (B4) is unaffected — the rule uses existing vars; no new
ui_settingscolumn