feat(cli): add rich + progress protocol/renderer skeleton (JCIRAG_PROGRESS)#326
Merged
Conversation
Propose (propose/active/INDEX-OUTPUT-REWORK-PROPOSE.md), plan (plans/active/PLAN-INDEX-OUTPUT-REWORK.md), and per-PR agent prompts (plans/active/AGENT-PROMPTS-INDEX-OUTPUT-REWORK.md) for unifying the index-build output across init/increment/install/reprocess/update and adding a real progress bar (rich + JCIRAG_PROGRESS protocol). Gating spike passed 2026-06-14: a print(file=sys.stderr) inside a CocoIndex flow function reaches the parent's captured stderr (130/130 lines relayed; pre-walk divergence 0 on the fixture). PR-1 unblocked. Planning only; no production code changed. Co-Authored-By: Claude <noreply@anthropic.com>
rich>=14,<15 (cocoindex[lancedb] requires rich>=14). New java_codebase_rag/progress.py: ProgressEvent, parse_progress_line, IndexProgressRenderer (rich Live + non-TTY fallback), ProgressRelay (parse-first, single-writer). 13 light unit tests. No production caller yet; PR-2+ wire it in. Co-Authored-By: Claude <noreply@anthropic.com>
cocoindex[lancedb]>=1.0.0a43 transitively requires rich>=14, so the originally-suggested rich>=13.7,<14 cap is unsatisfiable (pip install -e . fails). Corrected in propose Open Q5 + risk row, plan Resolved decisions + PR-1 step + DoD, and the PR-1 agent prompt. Verified compatible on rich 14.3.4. Co-Authored-By: Claude <noreply@anthropic.com>
…ne, carry-forward totals - ProgressRelay now mirrors _LineFilter's noise-continuation suppression (_suppress_next) + new test_progress_relay_suppresses_noise_continuation - remove dead _is_partial param from _route_line - clamp completed→total on status=done both directions (over-count safe) - monotonic completed (max with current) so a stray smaller done can't rewind - non-TTY done concise line carries forward last-seen total/elapsed_s Minor #6 (apply/stop atomicity) deferred to PR-2 (drain-thread wiring). Co-Authored-By: Claude <noreply@anthropic.com>
PR-1 code-quality review Minor #6: apply() issues several locked rich calls not atomic vs. a concurrent stop() from the main thread. Only matters once PR-2 wires the drain thread. Added as cross-PR risk #10 with the PR-2 mitigation (gate apply on _started, or hold the Live lock across the sequence). Co-Authored-By: Claude <noreply@anthropic.com>
HumanBean17
added a commit
that referenced
this pull request
Jun 15, 2026
Catch-up: master advanced (#322 installer cross_service_resolution, #323 config embedding.model resolution, #325 version 0.6.2, #326 PR-1 progress.py) while the index-output-rework stack was based on #320. This merges those in so the catch-up PR (#330) carries only PR-2/3/4. Conflicts resolved (both add/add, feature branch is the superset): - java_codebase_rag/progress.py (master had PR-1 state; branch has PR-1 + CallbackRenderer/make_relay/build_index_progress_context) - tests/test_progress.py (master had PR-1's 14 tests; branch adds PR-2/3/4 tests) Auto-merged cleanly: installer.py (#322 + PR-4), pyproject.toml (version 0.6.2 + rich>=14,<15), tests/test_installer.py. Verified: ruff clean; full suite 833 passed, 13 skipped (heavy-gated). Co-Authored-By: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Foundation for unified index-build progress (INDEX-OUTPUT-REWORK):
rich>=14,<15(cocoindex[lancedb]requiresrich>=14; a<14cap is unsatisfiable).java_codebase_rag/progress.py:ProgressEvent,parse_progress_line,IndexProgressRenderer(richLive+ non-TTY concise fallback),ProgressRelay(parse-first, single-writer, noise-continuation suppression, survives renderer exceptions).tests/test_progress.py.propose/active/INDEX-OUTPUT-REWORK-PROPOSE.md,plans/active/PLAN-INDEX-OUTPUT-REWORK.md,plans/active/AGENT-PROMPTS-INDEX-OUTPUT-REWORK.md.No production caller yet — PR-2/3/4 wire it in.
Stack
Base
master. PR-2feat/index-graph-progress, PR-3feat/index-vectors-progress, PR-4feat/index-installer-progressstack on top — review/merge in order.Why
The five lifecycle commands (
init/increment/install/reprocess/update) build the index through the same two subprocesses but emit inconsistent output and show no real progress (only an elapsed spinner). This effort unifies the output and adds a real progress bar. Gating spike passed:print(file=sys.stderr)inside a CocoIndex flow function reaches the parent (130/130 lines relayed; pre-walk divergence 0).Ontology / reindex / env
rich>=14,<15.Tests
.venv/bin/ruff check .clean;.venv/bin/python -m pytest tests -v-> 818 passed, 13 skipped (heavy cocoindex/torch tests gated).🤖 Generated with Claude Code