Commit graph

2 commits

Author SHA1 Message Date
abhigyantrumio
b875cd7166 fix(warn-ux): restore aggregated scope-resolution warnings and progress-safe logging
Restores the warning-UX hardening trimmed from PR #2682 as "not
Move-functional" (original fork commit 6ea5aa44): analyzing a large Rust
workspace printed one raw pino NDJSON line per callable-value-flow
overflow key straight through the live progress bar - hundreds of
{"level":40,...,"context":"actual-formal-overflow:..."} lines.

- logger.ts: warnRespectingProgressBar routes operator warnings through
  console.warn while GITNEXUS_ANALYZE_PROGRESS_ACTIVE=1 (the analyze CLI
  reroutes it into the bar), structured pino record otherwise.
- callable-value-flow.ts: overflow warnings aggregate to one bounded
  warning per language/cap (occurrences, distinct contexts, capped
  samples) instead of one onWarn per key; shared empty-collection misses;
  optional canonicalInvokeKeys threading avoids a second whole-repo scan.
- run.ts: one-line progress formatters for property-dispatch and
  callable-value-flow warnings, bounded context escaping.
- filesystem-walker.ts: large-file skip notice uses the shared helper.

Tests: callable-value-flow-worklist aggregation cases and
run-progress formatter boundary tests restored; both green. tsc clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-26 05:05:25 +05:30
Gergő Magyar
5e8690f992
feat(progress): add per-language progress reporting to scope-resolution phase (#1813)
* feat(progress): add per-language progress reporting to scope-resolution phase (#1741)

The scope-resolution phase (which can run 74+ minutes on large Java/Kotlin
repos) previously emitted zero progress updates, causing the CLI progress bar
to freeze at ~49% with a stale "Parsing code" label — making users think
the tool was stuck.

- Add `scopeResolution` to PipelinePhase type and PHASE_LABELS
- Add `onProgress` callback to `runScopeResolution` with per-file updates
  during the extract loop and sub-phase boundary markers (building scope
  model, resolving references, emitting edges)
- Wire progress through `scopeResolutionPhase` with pre-counted file totals,
  per-language labels, and pipeline-wide percent mapping (90-95 internal)
- Bump mro/communities/processes percent ranges to 95-100 to maintain
  monotonic progress after scope resolution
- Add `scopeResolution` to mro's deps (latent ordering fix: mro reads
  EXTENDS edges that scope resolution writes via preEmitInheritanceEdges)

* fix(progress): clamp overallRatio, fire final extract event, fix mro @deps JSDoc

- Clamp overallRatio to [0,1] so percent never exceeds 95 when
  readFileContents drops files (langFileCount < totalScopeFiles)
- Fire onProgress for the last file in the extract loop even when
  files.length is not divisible by progressInterval
- Update mro @deps JSDoc to include scopeResolution

* fix(progress): ensure bar redraws at every state transition

- Fire initial 'extracting' event at file 0 so the sub-phase label
  appears immediately, not after progressInterval files
- Emit a completion event at percent 95 when scope resolution finishes
  so the bar definitively reaches the phase ceiling before mro starts

* feat(progress): improve UX with human-readable elapsed, language counter, cleaner labels

- Format elapsed time as "5m 12s" / "1h 20m" instead of raw "(312s)"
  for all pipeline phases (CLI-wide improvement)
- Add language counter "[1/3]" to scope-resolution detail so users
  know how many languages remain and which is active
- Rename sub-phases for clarity: "building scope model" → "analyzing
  types", "emitting edges" → "linking symbols"
- Remove nested parentheses from detail strings for cleaner display
- Expand scope-resolution percent range from 5 to 8 points (90-98
  internal → 54-59% display) for more visible bar motion
- Re-allocate mro (98), communities (98-99), processes (99-100)

* feat(progress): typed sub-phases, i18n locales, and test coverage

- Extract ScopeResolutionSubPhase union type with exhaustive switch
  guard so adding a sub-phase without updating phase.ts is a compile
  error
- Add scopeResolution key to en and zh-CN locale files so the web UI
  shows translated labels instead of raw message fallback
- Extract formatElapsed to its own module with 7 boundary-value tests
  (0s, 59s, 60s, 3599s, 3600s, 3661s, 7323s)
- Add runScopeResolution onProgress integration test proving sub-phase
  order (extracting → analyzing types → resolving references → linking
  symbols) and the 0-file early-return path

---------

Co-authored-by: Test <test@example.com>
2026-05-25 11:53:54 +01:00