Repository navigation
fix(cli): truthful pass-fail progress; --count/--exists mutex; docs polish (#459 #428 #429 #374 #419) - #484
HumanBean17 wants to merge 2 commits into
Conversation
…olish (#459 #428 #429 #374 #419) - graph progress: _graph_pass_progress emits status=failed (not done) when a pass body raises — kills the done→failed flicker and the spurious graph ✓ for a failed pass (#459) - jrag: --count and --exists are now mutually exclusive at parse time; both together previously fell through to the silent exists-wins precedence (#429) - jrag: rename _require_kind's local _emit closure to _emit_kind_error so it stops shadowing the module-level exit-code funnel (#428) - docs: /tmp → relative tmp/ scratch paths + Git Bash/WSL note in JRAG-CLI.md and MANUAL-VERIFICATION-CHECKLIST.md (#374) - docs: document find --fuzzy (identifier loosening, vs semantic search) in README flag table, JRAG-CLI.md Locate, and the CLI skill/agent artifacts; note the --count/--exists mutex there too (#419) - install_data: synced skills/agents copies via scripts/sync_agent_artifacts.py
Both failed on CI but not in prior master runs; neither is caused by the diff under test — master CI simply hadn't run since 2026-09-13. 1. test_populated_rollup (all 3 OSes): the synthetic watch event carried a hardcoded ts=2026-09-13T09:00:00Z, but load_events drops events older than the 7-day window — the fixture expired on 2026-09-20. Use a dynamic rfc3339_now() ts instead (same for the unused _cmd_event). 2. test_bank_chat_bulk_build_matches_committed_baseline (ubuntu only): the sampled-edges query ran LIMIT 3 without ORDER BY, riding the storage scan order — not stable across platforms/LadybugDB builds, so ubuntu sampled a different first-3 (callee_declaring_role SERVICE vs OTHER). Pin the sample with ORDER BY a.id, b.id (content-keyed node ids), make the CALLS role compare order-tolerant, and regenerate the fixture's sampled_edges (also drops storage-internal _SRC/_DST/_ID offsets from the anchor).
|
Both CI failures were latent test defects this PR's run tripped — master CI last ran 2026-09-13, the day both fixtures were written; not caused by the diff under test. Fixed in f531454:
Full local suite after the fix: 2223 passed / 45 skipped; the only remaining local failure is |
Summary
Batch of five small, verified-still-valid issues from the triage of the open issue list: one real bug, one small CLI contract tightening, one cosmetic refactor, and two docs gaps. Plus housekeeping on two stale issues.
Fixes
_graph_pass_progressemittedstatus=doneunconditionally in itsfinally, so a pass whose body raised still reportedpass=N/6 status=done→ the renderer marked the bargraph ✓underneath the parent-sidefailed(done→failed flicker; two terminal events for one failed build). Now tracks whether the body raised and emitsstatus=failedwhen it did. The renderer already treatsfailedas terminal forkind=graph, so no renderer change was needed.--countand--existsare now mutually exclusive at parse time (add_mutually_exclusive_groupon_common_parser; inherited by every query/listing/traversal subcommand). Both together previously fell through to the silent exists-wins precedence. The usage error flows through the existing cleanusage_errorenvelope (honors--format json, rc=2).--fieldsstays independent (different axis — documented no-op with the other two)._require_kind's local_emitclosure to_emit_kind_errorso it stops shadowing the module-level exit-code/output funnel added in feat(jrag): implement --count/--exists/--fields output flags (#376) #422. Pure rename, no behavior change./tmp:docs/JRAG-CLI.md(analyze-prsnippets) anddocs/MANUAL-VERIFICATION-CHECKLIST.mdnow use the relative gitignoredtmp/scratch dir, following the README precedent from feat(platform): declare Windows + macOS support (classifiers, CI matrix, README) #371, with a Git Bash/WSL note for Windows operators.find --fuzzy(identifier loosening: exact → prefix → substring on name/FQN) contrasting it with semanticsearch, in the README flag table (which also gained the--count/--exists/--fieldsrows it was missing),docs/JRAG-CLI.md§ Locate, and the CLI skill/agent artifacts (rules-of-thumb + not_found recovery row).search --fuzzy(a documented no-op) is noted as such.Housekeeping (done directly, not via this PR)
find --fuzzyshipped in feat(find): implement --fuzzy exact→prefix→contains fallback (#375) #413 (code + tests 15–20 intest_jrag_locate.pyverified).watchmode — keep the index live as files change #336 as completed —watchshipped as thejrag watchdaemon in feat: jrag watch — warm, self-refreshing index daemon #424; residuals tracked in ci: run the heavy jrag-watch tests (golden/COW/warm) in CI or nightly #425/jrag watch: skip client-side graph load when the daemon is alive (transient rc=2 during reindex) #426.Tests
test_graph_pass_progress_reports_failed_when_pass_body_raises/..._reports_done_on_clean_exit(direct unit tests of the context manager, incl. exception propagation),test_count_and_exists_together_rejected_at_parse_time(envelope shape + rc + no index access needed).render()-level exists-wins precedence test (test_exists_takes_precedence_over_count) intentionally kept: the render precedence chain itself is unchanged defense-in-depth; only the parse-time path is new.scripts/sync_agent_artifacts.pyrun — skill/agent edits are mirrored intoinstall_data(test_install_data_sync green).Test run
Full suite: 2224 passed, 45 skipped, 2 failed — both failures verified pre-existing on clean master (stash-checked) and unrelated to this diff:
tests/bench/test_grade.py::test_judge_answer_returns_grade— localclaudeCLI doesn't know theglm-5.2judge model (environmental).tests/usage/test_cmd_usage.py::test_populated_rollup— IndexError, reproduces on clean master (same family as the test: pre-existing failures in the full heavy suite (lancedb ignore assert 2>2 + 3 test-pollution) #427 pollution list).(Note for reviewers running locally: 21 tests in the first full run here failed only because this machine's venv shims still pointed at the pre-move
~/Desktop/...path —cocoindex/pipshims repaired locally; nothing in this PR touches that.)Fixes #459
Fixes #429
Fixes #428
Fixes #374
Fixes #419