phase: 124_image_chips_and_answers
All green. Final report: **Phase 124 final verification pass — all criteria verified, no defects found (nothing to fix)** - Verified the implemented phase (all 7 tasks done, changes in working tree): `BOR_ANSWER_IMAGES` toggle, `show_image` tool + refusals + `holder.shown_images`, toggle-gated prompt clause, `answer_image` frame field (None-omitting serializer) + `ChatMessage` persistence, `merge_cited_docs` auto-cite bug fix, answer-figure UI (live/restore/shared/CSS), mock triggers + E2E suite. Also confirmed the bytes route → public change matches the phase-123 shared-chat precedent (task 06 design). - `uv run pytest --cov=app --cov-report=term-missing` → **2848 passed**, TOTAL **99%** (>90% gate) - `bash .agents/validate.sh` → **validation OK** (tests + coverage + ruff + pyright) - `uv run ruff check . && uv run pyright` → clean, 0 errors - `uv run pytest tests/e2e/test_answer_images.py -v --no-cov` (isolated) → **5/5 passed** - Mock-inert spot checks: `tests/e2e/test_image_documents.py` 4/4, `tests/e2e/test_agent_document_tools.py` 4/4 **Completion criteria:** ① zero-read suggested-tier image doc chips with figure — verified (unit matrix, integration `test_zero_read_grounded_turn_auto_cites_suggested_image_doc`, E2E bug-fix flows); ② show_image → answer figure below text/above chips, second call refused, persists + restore + shared — verified (unit handler matrix, integration round-trip, E2E feature flow); ③ default-off byte-identical (3 tools, no clause, no key) — verified (unit + integration + E2E toggle-off); ④ full suite green / >90% / lint clean — verified above; ⑤ commit + phase move — harness responsibility (changes left uncommitted in working tree, no live-infrastructure changes made). **Next pending phase:** none — `todo/` holds only this phase; the pipeline is clear once the harness moves it.
This commit is contained in:
@@ -814,6 +814,53 @@ details.thinking .thinking-text ul { margin: 0 0 0.5rem; }
|
||||
}
|
||||
.source-image:hover { text-decoration: underline; } /* flat — the caption underlines, the chip pattern */
|
||||
|
||||
/* Phase 124 (task 06, TODO L3): the LLM's ANSWER IMAGE — the brain
|
||||
answer's first-class figure (A4: below the text, above the chips).
|
||||
The .source-image language at ANSWER scale — the figure is the
|
||||
answer's own image, not a chip accessory: max-width 100% of the
|
||||
.msg-body column, a 320px height cap (the 46rem chat column — a
|
||||
full-height image would blow the turn's height), contain on the
|
||||
theme's surface with the bordered-image treatment
|
||||
(.source-image-img's border/background/radius), the visible
|
||||
caption in the AA-safe muted ink (the same --ink-soft the chip
|
||||
caption uses — the row's page background, 8.6:1). Token-only (the
|
||||
zero-literal invariant — the monochrome themes carry it). The
|
||||
hover underline applies to the chat page's ANCHOR figure only (the
|
||||
shared page's figure is a plain <figure> — zero controls, the
|
||||
element-type scope keeps it out). */
|
||||
.answer-image {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: 0.2rem;
|
||||
max-width: 100%;
|
||||
min-width: 0;
|
||||
}
|
||||
.answer-image-img {
|
||||
display: block;
|
||||
max-width: 100%;
|
||||
max-height: 320px; /* the one free number (task 06): the answer scale */
|
||||
width: auto;
|
||||
height: auto;
|
||||
object-fit: contain;
|
||||
background: var(--surface);
|
||||
border: 1px solid var(--line);
|
||||
border-radius: var(--radius-sm);
|
||||
}
|
||||
.answer-image-caption {
|
||||
max-width: 100%;
|
||||
color: var(--ink-soft); /* 8.6:1 on --bg (AA) — the row's page background */
|
||||
font-size: 0.75rem;
|
||||
line-height: 1.25;
|
||||
text-align: center;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 3; /* the summary can be long; the alt + title carry the full text */
|
||||
-webkit-box-orient: vertical;
|
||||
overflow: hidden;
|
||||
}
|
||||
a.answer-image { text-decoration: none; }
|
||||
a.answer-image:hover { text-decoration: underline; } /* flat — the caption underlines, the chip pattern */
|
||||
|
||||
/* Phase 113 (task 02): the related-docs row — the SECONDARY tier of
|
||||
scored docs (phase 113 task 01's usefulness bar demotes the
|
||||
sub-floor hits out of the citation surface; on a deflected turn the
|
||||
|
||||
Reference in New Issue
Block a user