phase: 158_thinking_timeline
All verification complete. Every gate is green and the docs check out. Final report:
## Phase 158 final verification pass — COMPLETE
**Verified (all tasks pre-completed; this pass re-ran the full gate):**
- Unit + integration: `uv run pytest --cov=app --cov-report=term-missing` → **3618 passed, 99% coverage on `app/`** (>90% gate)
- Phase E2E in isolation: `uv run pytest tests/e2e/test_thinking_timeline.py -v --no-cov` → **6/6 passed** (order pin, fold-at-rest, live-open, restore+`segments` array, shared page, no-thinking single disclosure)
- Regression E2E, each in isolation: `test_thinking_display` 5✓, `test_tool_call_compact` 4✓, `test_turn_progress_loader` 3✓ (per-run pin updated), `test_big_read_progress` 4✓, `test_agent_document_tools` 4✓, `test_share_chat` 4✓, `test_chat_persistence` 4✓, `test_smoke` 3✓
- Lint/types: `uv run ruff check . && uv run pyright` → **clean (0 errors)**
**Completion criteria:** all 9 met — timeline E2E pins ✓, restore/shared `segments` ✓, no-thinking single-disclosure + the three UNCHANGED regression suites green ✓, pre-phase byte-identical round-trip (integration pin: key absent, never null; >50 / >32 000 / empty text / unknown kind all 422) ✓, full suite + coverage + E2E + lint ✓, `git diff --stat` footprint limited to `app/schemas.py`, `frontend/assets/{app,shared}.js`, `tests/`, README, phase files (a pre-existing owner `TODO.md` edit is out of scope, not staged by the phase commit) ✓, D15→per-run supersession recorded in the updated pin ✓. (Commit + phase move are the harness's job; task dirs already in `complete/`.)
**Documentation:** README.md — Thinking section correctly describes the phase-158 timeline; config reference matches `.env.example` exactly; page table matches registered routes; no stale single-block wording. AGENTS.md — rules and quick-reference commands all accurate. **Verified consistent — no changes needed.**
**Decisions/deviations:** none. `test_tool_call_compact.py` carries a one-line docstring-only update (referenced the removed `closeToolCalls`); its test logic is byte-identical to the phase-117 contract and green.
**Next pending phase:** none — `todo/` contains only 158.
This commit is contained in:
@@ -405,10 +405,27 @@ whole git-source refresh in one click:
|
||||
## Thinking
|
||||
|
||||
The self-hosted `turbo` model reasons before it answers. That reasoning is
|
||||
streamed with the turn as `thinking` SSE events and shown in a
|
||||
**collapsible "Thinking" block** above the answer bubble: it opens and
|
||||
fills in live while the model thinks, tucks itself away the moment the
|
||||
first answer token lands, and stays click-toggleable afterwards.
|
||||
streamed with the turn as `thinking` SSE events and shown in **
|
||||
collapsible "Thinking" blocks** above the answer bubble — one block per
|
||||
contiguous thinking run, in arrival order (phase 158): the turn renders
|
||||
as a chronological timeline (Thinking → Tool call (1) → Thinking → … →
|
||||
answer). Each block opens and fills in live while its run streams,
|
||||
and the runs tuck themselves away when the first answer token lands,
|
||||
when the turn ends, or when the turn is stopped/failed — and every
|
||||
block and tool-call disclosure stays click-toggleable afterwards. A
|
||||
thinking run that starts after the answer began (the model replied,
|
||||
called a tool, then thinks again) gets its own block above the answer
|
||||
instead of resuming on top of it.
|
||||
|
||||
The tool calls ride the same timeline: each contiguous run of tool
|
||||
calls gets its own collapsed-when-idle "Tool call(s) (N)" disclosure
|
||||
(one per run, in arrival order), and the per-line elapsed-seconds
|
||||
suffix targets the newest line of the active run.
|
||||
|
||||
The timeline is persisted with the saved turn (an optional `segments`
|
||||
array — the per-run order; the concatenated `thinking` and the `tools`
|
||||
record stay for history and older clients), so a reload and the shared
|
||||
page re-render the same timeline, collapsed.
|
||||
|
||||
To hide it, set `BOR_STREAM_THINKING=0`.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user