phase: 131_read_line_ranges
All 44 progress lines are pure dots, final line at 100%, exit 0. Everything is verified. Final report: **Phase 131 — final verification pass (all 4 tasks already complete in working tree)** - **Verified implemented:** `read(offset, limit)` schema + teaching descriptions; rewritten truncation notice; full 6-row dedupe matrix + range validation + `lines: a-b of N` header + slice cap in `_execute_tool`; wire-level `offset`/`limit` on `ChatToolEvent` (absent keys dropped → non-range frames byte-identical); mock-LLM `read the lines` flow; handbook repro (wording + line numbers derived from the real PDF at test time) - **Tests:** `uv run pytest --no-cov` → 3097 passed, exit 0; `uv run pytest --cov=app` → **99% on app/** (>90%); `uv run pytest tests/e2e/test_read_line_ranges.py -v --no-cov` → 2/2 in isolation (47.6 s); `tests/integration/test_read_line_ranges_handbook.py` → 2/2 (3.5 s); 10-file targeted E2E batch pinning pre-phase surfaces (grep/ls/plain-read/ALREADY_IN_CONTEXT/truncation) → 31/31; `ruff check .` clean; `pyright` 0 errors - **Completion criteria:** all 5 green — (1) exact range lines + `lines:` header, plain reads byte-identical (existing pins pass unchanged) ✅ (2) truncated-then-range succeeds end-to-end on the real handbook; other re-reads get teaching refusals ✅ (3) find-traps answered from real PDF text, no hardcoded wording ✅ (4) coverage + isolated E2E ✅ (5) no behavior change in completed phases ✅ - **Docs:** README + AGENTS reviewed in full. Fixed 3 inconsistencies: README missing `BOR_HISTORY_MAX_TURNS`/`BOR_HISTORY_MAX_CHARS` rows (pre-existing phase-74 gap — env-tunable, unit-pinned, undocumented); `.env.example` missing the same two vars (added); `.env.example` stale `BOR_READ_MAX_CHARS` comment (still said "grep-pointer notice (phase 95)" — updated to the phase-131 workflow notice). AGENTS.md verified consistent — no changes needed. All 67 `.env.example` vars documented, all defaults match `app/config.py`, pages/auth tables match live routes - **Note:** PLAN.md §7.1 still states the retired 46rem chat column (superseded by phase 100, which AGENTS.md rule 5 records correctly) — PLAN.md is off-limits for this pass, flagged only - **Next pending phase:** `132_image_upload_feedback`
This commit is contained in:
@@ -222,6 +222,12 @@ assert SHORT_DOC.count(SHORT_SENTINEL) == 1
|
||||
# app.rag.agent constant, formatted for this fixture's counts).
|
||||
MARKER = f" (truncated — showing {READ_CAP} of {CAP_DOC_TOTAL} chars)"
|
||||
NOTICE = READ_TRUNCATION_NOTICE.format(shown=READ_CAP, total=CAP_DOC_TOTAL)
|
||||
# The bubble renders the raw LLM-side text through renderMarkdown
|
||||
# (escape-first, markdown.js) — the phase-131 notice's inline-code
|
||||
# backticks (`` `offset` `` / `` `limit` ``) become <code> elements, so
|
||||
# the DOM text_content() carries the notice with the backticks
|
||||
# stripped.
|
||||
NOTICE_RENDERED = NOTICE.replace("`", "")
|
||||
|
||||
# The scripted turns (the mock's ``READ_CAP_TRIGGER`` questions — each
|
||||
# carries its own tool call after the colon; the turn-specific flavor
|
||||
@@ -679,7 +685,7 @@ def test_truncated_read_frame_order_live_marker_and_llm_notice(
|
||||
bubble = _last_brain(page).locator(".bubble")
|
||||
text = bubble.text_content() or ""
|
||||
assert TRUNCATION_MARKER in text, text
|
||||
assert NOTICE in text, text
|
||||
assert NOTICE_RENDERED in text, text
|
||||
# The first cap chars reached the model…
|
||||
assert HEAD_SENTINEL in text, text
|
||||
# …and the past-the-cap tail did NOT (the cut is real, not cosmetic).
|
||||
@@ -761,7 +767,7 @@ def test_truncated_read_save_and_shared_fidelity(
|
||||
# told about (same stored text, same renderer).
|
||||
anon_text = anon.locator(".msg.brain .bubble").first.text_content() or ""
|
||||
assert TRUNCATION_MARKER in anon_text, anon_text
|
||||
assert NOTICE in anon_text, anon_text
|
||||
assert NOTICE_RENDERED in anon_text, anon_text
|
||||
assert HEAD_SENTINEL in anon_text, anon_text
|
||||
assert TAIL_SENTINEL not in anon_text, anon_text
|
||||
anon_ctx.close()
|
||||
|
||||
Reference in New Issue
Block a user