phase: 150_drop_sync_result
**Phase 150 final verification pass — complete, 100% green.** All 6 task files were already in `complete/`, so this was verification + doc pass. - Verified: `#sync-progress` is the sole sync text surface + sole `aria-live` region (`role="status"`, polite, no `aria-hidden`); `span#sync-result` gone from HTML/JS/CSS/tests (incl. runtime-built `RETIRED_ID` absence pins in the unit suites); `setSyncProgress` single writer with text-driven visibility; running-only box write in `setSyncLabel`; all 9 settle/cancel sites routed; `requestCancel` pre-fetch clear is a NO-OP. - Tests: `uv run pytest` → **3463 passed**; `uv run pytest --cov=app` → **99% on app/** (>90%); `uv run ruff check .` + `uv run pyright` → clean (0 errors); `tests/e2e/test_sync_progress_box.py --no-cov` → **8 passed in isolation**; all 18 migrated sync/image-PDF E2E files green in isolation (77 tests). - Completion criteria: 1) grep clean ✅ 2) sole live region, attrs correct ✅ 3) in-flight/settle/cancel/idle box states proven by E2E + unit pins ✅ 4) icon-only running button + restore ✅ 5) full gates green ✅ 6) no completed-phase behavior change (18 family suites + full suite green) ✅ 7) commit — left to harness per pass instructions (working tree untouched, no `git add`/`commit`). - Documentation: README.md fixed 2 pre-existing inconsistencies (stale `~/Homelab`+`~/Deployments` source model in the intro — retired in phase 61 — now describes the git/local/archive Sources model; "Requires AIPI_KEY" in retrieval-quality now states `BOR_LLM_API_KEY` in `.env` or `$AIPI_KEY`, matching the scripts' real convention). Everything else (URL table, env defaults vs `app/config.py`, sync/phase-150 copy, prod claims) verified accurate. AGENTS.md: verified consistent — no changes needed. - Notable: no code changes were required — the phase implementation was correct as left; no live infrastructure touched. - Next pending phase: `151_pdf_image_extraction` in `.agents/phases/todo/`.
This commit is contained in:
@@ -21,8 +21,10 @@ in the pill even on desktop, and the fix moves the running detail
|
||||
out of the pill entirely — while a run is in flight the button is
|
||||
the spinner (the ``is-running`` class; task 02's CSS hides the label
|
||||
parts), and a detail box under the button row (``#sync-progress``)
|
||||
carries the SAME full untruncated label — wrapping, never clipped,
|
||||
``#sync-result`` staying the sole aria-live announcer. Tests 1–3
|
||||
carries the SAME full untruncated label — wrapping, never clipped.
|
||||
Phase 150 folded the announcer into the box: it is now the SOLE
|
||||
sync text surface AND the sole aria-live region (the retired
|
||||
announcer span is gone). Tests 1–3
|
||||
therefore pin the BOX: visible while the run is in flight, its text
|
||||
the pre-phase byte-identical full string ("Syncing… <full
|
||||
source/relative/path> (n/4)" / "Summarizing folders… <folder>
|
||||
@@ -30,8 +32,10 @@ source/relative/path> (n/4)" / "Summarizing folders… <folder>
|
||||
inside the viewport at 390 px and 1280 px, the button in its
|
||||
running state, and the ``title`` carrying the same full string
|
||||
(A4 — one source, two surfaces). The SETTLED pins (the phase-32
|
||||
"Synced HH:MM" label, the count span hidden + empty, the box hidden)
|
||||
are UNCHANGED. Test 4 (the pre-phase-128 rules' clip reproduction)
|
||||
"Synced HH:MM" label, the count span hidden + empty) are UNCHANGED;
|
||||
phase 150 re-pointed the box pin — the box STAYS visible at settle
|
||||
to carry the counts line (the fmtSyncResult string the retired
|
||||
announcer spoke, byte-identical). Test 4 (the pre-phase-128 rules' clip reproduction)
|
||||
pins the old markup/CSS counterfactually — the label parts still
|
||||
receive their text under any CSS (the writer is unchanged), so it
|
||||
holds on the DOM text + injected rules regardless of the phase-149
|
||||
@@ -679,9 +683,12 @@ def _settle(page: Page, app_url: str) -> None:
|
||||
count = page.locator(".sync-label-count")
|
||||
expect(count).to_be_hidden()
|
||||
expect(count).to_have_text("")
|
||||
# Phase 149 (task 01): the detail box is run-scoped — the settle
|
||||
# (the writer's default running = false) hides it again.
|
||||
expect(page.locator("#sync-progress")).to_be_hidden()
|
||||
# Phase 150: the box is NOT run-scoped — it STAYS visible at
|
||||
# settle to carry the counts line (the fmtSyncResult shape the
|
||||
# retired announcer spoke, byte-identical: the fresh 4-file
|
||||
# fixture's "4 added"), hiding only when its text is empty.
|
||||
expect(page.locator("#sync-progress")).to_be_visible()
|
||||
expect(page.locator("#sync-progress-text")).to_have_text(f"{N_FILES} added")
|
||||
expect(page.locator("#sync-error-banner")).to_be_hidden()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user