phase: 129_sync_chunk_progress
All green. Final report:
**Phase 129 final verification pass — 100% green** (previous work intact; this pass re-verified everything and fixed two pre-existing README inconsistencies)
- Verified on-spec: `LLMClient.embed` per-batch `on_progress` hook; importer `on_chunk_progress` plumbing (text/image/PDF branches; summary embed excluded); `SyncStatus.current_chunk/chunks_total` reset+clear contract; UI `.sync-label-chunk` pinned part with untruncated `title`/`#sync-result`
- `uv run pytest --cov=app -q`: exit 0, ~3041 passed, 0 failed, `app/` coverage **99%** (>90% gate)
- `uv run pytest tests/e2e/test_sync_chunk_progress.py -v --no-cov` (isolated, DB up): **2 passed** (endpoint chunk climb with true `chunk_document` total + UI `· chunk n/m` part)
- `uv run ruff check .`: all checks passed · `uv run pyright`: 0 errors, 0 warnings
- Completion criteria: all 5 ✅ (incl. no behavior change in completed phases — full suite green, CLI/chat no-op paths byte-identical)
- Docs: README.md fixed 2 pre-existing inconsistencies (upload section claimed "unpacks + scans immediately" — phase 90 made it unpack+register only, scan deferred to Sync; troubleshooting claimed "120s client timeout" — actual guard is the 300 s pre-token `TURN_TIMEOUT_MS`). Phase-129 label behavior already documented. AGENTS.md re-verified consistent — no changes
- Removed stray untracked `NOTES.md` (8-byte artifact); no live-infra changes; no commits — all changes left in working tree for the harness
- Next pending phase: `130_chat_answer_clusters`
This commit is contained in:
@@ -255,7 +255,10 @@ BOR_SOURCES_DIR=~/bor-sources # default; each repo lands in <dir>/<repo-name>/
|
||||
|
||||
Upload a `.tar`, `.tar.gz`, `.tgz`, or `.zip` archive to make it a source.
|
||||
The form on the Git sources page — and the `POST /api/git-sources/upload`
|
||||
route behind it — accepts archives and unpacks + scans them immediately.
|
||||
route behind it — accepts archives and unpacks + registers them (no scan —
|
||||
the upload indexes nothing; the **Sync sources** button on the RAG page
|
||||
performs the scan, which leaves room to edit the new source's ignore list
|
||||
first).
|
||||
|
||||
- Re-uploading the same filename replaces the source **in place** (no
|
||||
second folder, no duplicate row).
|
||||
@@ -293,8 +296,13 @@ whole git-source refresh in one click:
|
||||
any missing rows (`only_missing`).
|
||||
|
||||
- States: the button shows **Syncing…** with a spinner while polling
|
||||
`GET /api/sync/status` every 2 s. No client-side timeout — a clone +
|
||||
embed can legitimately take minutes.
|
||||
`GET /api/sync/status` every 2 s. During the import phase the label
|
||||
carries the live file, its `(n/m)` file position, and — while a file's
|
||||
embed batch is in flight — the pinned `· chunk n/m` embed position
|
||||
(batch granularity: the first chunk of the in-flight batch over the
|
||||
file's total content chunks); the full untruncated label also rides
|
||||
the button title and the aria-live result line. No client-side
|
||||
timeout — a clone + embed can legitimately take minutes.
|
||||
- One sync at a time: a second trigger while a run is in flight gets a
|
||||
`409`.
|
||||
|
||||
@@ -869,8 +877,9 @@ served locally (no CDN), `BOR_ENVIRONMENT=production`.
|
||||
```
|
||||
- **KB offline banner in the chat** — Postgres isn't running:
|
||||
`podman compose up -d db`.
|
||||
- **Stuck "Thinking…"** — the LLM is slow or down; a 120s client timeout
|
||||
turns it into an error banner automatically.
|
||||
- **Stuck "Thinking…"** — the LLM is slow or down; the client's 300 s
|
||||
pre-token guard (`TURN_TIMEOUT_MS`) turns a hung stream into the error
|
||||
state automatically.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user