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:
+13
-23
@@ -484,31 +484,21 @@
|
||||
</div>
|
||||
<!-- Phase 149 (task 01): the sync detail box — the full UNTRUNCATED live
|
||||
label ("Syncing… <source/rel/path> (n/m) · chunk n/m") in a bordered
|
||||
panel under the button row, visible ONLY while a sync/upload run is
|
||||
in flight (sources.js reveals/hides it through the single setSyncLabel
|
||||
writer). Presentational (aria-hidden) — #sync-result stays the SOLE
|
||||
aria-live announcer (one live region, no double announce). The button
|
||||
itself is the spinner while running (task 02's .is-running CSS hides
|
||||
the label parts). -->
|
||||
<div class="sync-progress" id="sync-progress" hidden aria-hidden="true">
|
||||
panel under the button row. Phase 150 (task 01) folded the
|
||||
announcer in: the previous live-region span beside it is retired,
|
||||
and THIS box is now the SOLE sync text surface AND the
|
||||
SOLE aria-live region for the sync area
|
||||
(role="status" aria-live="polite" — one live region, no double
|
||||
announce). It carries the live label while a sync/upload run is in
|
||||
flight and the settle result line after it ("N added · …",
|
||||
"Sync cancelled", the cancel-failure copy), hiding only when its
|
||||
text is empty (idle, upload settles, failures) — sources.js drives
|
||||
it through one writer, the inner span stays the textContent target
|
||||
(text only, never HTML). The button itself is the spinner while
|
||||
running (the .is-running CSS hides the label parts). -->
|
||||
<div class="sync-progress" id="sync-progress" role="status" aria-live="polite" hidden>
|
||||
<span class="sync-progress-text" id="sync-progress-text"></span>
|
||||
</div>
|
||||
<!-- #sync-result is the aria-live announcer: the last sync
|
||||
result ("N added · …") when a sync settles, and — phase 64 —
|
||||
the LIVE file label while a sync runs ("Syncing… <file>
|
||||
(n/m)"), UNTRUNCATED (the button's label spans ellipsize;
|
||||
screen readers hear the full source/relative path, which
|
||||
also rides the button title). Phase 129: during the import
|
||||
phase the label gains the pinned chunk part ("· chunk n/m"
|
||||
— the file's embed-batch position, batch granularity) and
|
||||
the announcer/title carry it too ("Syncing… <file> (n/m)
|
||||
· chunk n/m"). Phase 90: an in-flight upload
|
||||
run adopts the button with the BARE "Importing…" label (the
|
||||
run is unpack + register only — no scan, so its status
|
||||
never carries a file or counts). After an upload settles it
|
||||
stays empty — the upload's result line lives on the Sources
|
||||
page (A3). -->
|
||||
<span class="sync-result" id="sync-result" role="status" aria-live="polite"></span>
|
||||
<!-- Sync failure banner — role="alert" so a failed sync is announced. -->
|
||||
<div class="kb-banner is-error" id="sync-error-banner" role="alert" hidden>
|
||||
<svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3.6 22.2 20.4H1.8Z"/><path d="M12 9.5v4.6"/><path d="M12 17.4h.01"/></svg>
|
||||
|
||||
Reference in New Issue
Block a user