Skip to content

feat(cli): graph-phase index progress (count-first pass1 + pass steps)#327

Merged
HumanBean17 merged 2 commits into
feat/index-progress-protocolfrom
feat/index-graph-progress
Jun 15, 2026
Merged

feat(cli): graph-phase index progress (count-first pass1 + pass steps)#327
HumanBean17 merged 2 commits into
feat/index-progress-protocolfrom
feat/index-graph-progress

Conversation

@HumanBean17

Copy link
Copy Markdown
Owner

What

Wires the GRAPH phase of index-build progress (PR-2 of INDEX-OUTPUT-REWORK, stacks on PR-1):

  • build_ast_graph.py emits JCIRAG_PROGRESS kind=graph under --verbose (count-first pass 1 with an EXACT filtered-walk total + per-file ticks; passes 2-6 step lines).
  • Sync (pipeline._popen_capturing_stderr) and async (cli_progress.accumulate_and_relay_subprocess_streams) drains route progress events to an on_progress callback via ProgressRelay/make_relay.
  • cli._run_with_pipeline_progress renders a determinate graph-phase bar (TTY/default) for init/increment/reprocess --graph-only; --quiet silent, --verbose raw relay. Graph task running only after the builder spawns.
  • IndexProgressRenderer.apply() no-ops after stop() (drain-thread safety); drains survive a renderer exception.

Stack

Base feat/index-progress-protocol (PR-1). PR-3/PR-4 stack above. Implements plans/active/PLAN-INDEX-OUTPUT-REWORK.md § PR-2.

Ontology / reindex

None (stays 17; pure output/UX; no re-index).

Tests

.venv/bin/python -m pytest tests -v -> 818 passed, 13 skipped. New: test_build_ast_graph_pass1_*, test_build_ast_graph_passes_2_to_6_*, test_build_ast_graph_quiet_emits_no_progress, test_cli_{init,increment}_graph_phase_progress*, test_cli_graph_progress_absent_when_quiet, plus relay/apply-stop hardening tests.

🤖 Generated with Claude Code

HumanBean17 and others added 2 commits June 15, 2026 01:11
build_ast_graph emits JCIRAG_PROGRESS kind=graph under --verbose
(count-first exact total in pass 1; pass 2-6 step lines). The sync
and async subprocess drains route progress events to an on_progress
callback via ProgressRelay (parse-first, single-writer). init/increment/
reprocess render a determinate graph-phase bar in default TTY mode
(running only after the builder spawns); --quiet silent; --verbose raw.
Renderer.apply() is a no-op after stop() (drain-thread safety).

Co-Authored-By: Claude <[email protected]>
…lay factory

- ProgressRelay guards renderer.apply() so a render-chain exception
  can't silently kill the drain thread (try/except + stderr note)
- incremental pass-1 total excludes removed files (done no longer
  undercounts then clamps)
- make_relay() factory centralizes the sync+async drain wiring
- drop unreachable console fallback in ProgressRelay._route_line

erase unused-renderer (review Minor #3) and failing-builder tests
(Minor #6) deferred.

Co-Authored-By: Claude <[email protected]>
@HumanBean17 HumanBean17 merged commit c30041a into feat/index-progress-protocol Jun 15, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant