Skip to content

v0.3.0: local mode, centered UI, loading states, explanation rendering, expanded license - #10

Merged
VIVAAN-DHAWAN merged 3 commits into
mainfrom
feature/v0.3.0-local-mode-and-ux
Aug 21, 2026
Merged

VIVAAN-DHAWAN merged 3 commits into
mainfrom
feature/v0.3.0-local-mode-and-ux

Conversation

@VIVAAN-DHAWAN

Copy link
Copy Markdown
Owner

What this ships

Three commits, 46/46 tests passing (run three times), verified live against real GitHub PRs and real local repos.

New: diffly local — offline triage for any folder

  • Analyzes git changes on disk with zero network access — works for private, archived, or removed repositories
  • diffly local triages uncommitted working-tree edits; diffly local --base main compares a branch
  • Untracked files included; CI-check rules correctly skipped as not applicable
  • Same deterministic pipeline: symbols, blast radius, risk rules

UX overhaul

  • Centered terminal composition across wizard, setup, interactive review, doctor, and version screens — no more left-corner text-wall
  • Wizard now prompts for Repository URL with explicit format hints (owner/repo or paste any GitHub / PR URL)
  • Loading spinners with progress messaging during fetch and explanation phases, plus a 'your focused review will appear shortly' beat after inputs
  • Pasting a full PR URL into the wizard skips the number prompt entirely

Fixed: explanations were invisible

The interactive view never rendered the generated explanation even when produced. It is now a toggleable section in the interactive screen, with clear setup guidance when no LLM key is configured.

Engine fixes

  • CHECKS_PENDING evidence lists real check names (was the literal string "pending")
  • \\ No newline at end of file markers no longer skew changed-line attribution
  • Action comment publishing uses typed GitHubApiError instead of catching SystemExit and string-matching error text
  • JSON output is pure again — banners suppressed under --json

License & community files

  • LICENSE expanded from bare MIT to a documented four-part license (same MIT grant + definitions, contribution terms, verdict disclaimers, extended warranty/liability, general terms)
  • Added CONTRIBUTING.md, SECURITY.md, CHANGELOG.md; relocated stray root artifacts to docs/ and scripts/

Verification evidence

- CHECKS_PENDING evidence now lists real check names instead of the state string
- skip check-derived flags for not_applicable (local) analysis; adjust PASS reasoning
- ignore '\ No newline at end of file' markers in changed_line_numbers
- replace SystemExit string-matching with typed GitHubApiError in post_comment
- new 'diffly local' command triages git changes fully offline (private/removed repos)
  with --base branch comparison and untracked-file inclusion
- center wizard, setup, interactive, doctor, and version screens in the terminal
- add loading spinners with progress messaging during fetch phases
- render generated explanations inside the interactive review as a toggleable section
- prompt for Repository URL with format hints; accept pasted PR URLs without number
- guard bare 'diffly' against non-TTY hangs; lazy termios import keeps Windows imports safe
- add RepoRef type, -V/--version flag, python -m diffly_cli entry point
- keep JSON output pure: suppress banners when --json is set
- bump version to 0.3.0
- LICENSE: documented four-part license keeping the MIT grant with definitions,
  contribution terms, verdict disclaimers, extended warranty/liability, general terms
- add CONTRIBUTING.md, SECURITY.md, CHANGELOG.md
- move AUDIT_REPORT/visual-verification to docs/, capture scripts to scripts/
- document local mode and live example PRs in README
@github-actions

Copy link
Copy Markdown

Diffly verdict: BLOCK

#10 · 21 files · 1115 lines changed · checks: PENDING

Risk flags: AUTH_OR_SECRET (high), NEW_DEPENDENCY (medium), NO_TEST_COVERAGE (medium), CHECKS_PENDING (low)

Risk flags and reasoning
  • AUTH_OR_SECRET (high): Touches authentication, credentials, secrets, or security-sensitive files. — SECURITY.md
  • NEW_DEPENDENCY (medium): Adds or changes a dependency manifest or lockfile. — pyproject.toml
  • NO_TEST_COVERAGE (medium): Changed production files have no obvious neighboring or repository test coverage. — LICENSE; pyproject.toml; scripts/capture_real_sessions.sh; scripts/render_real_captures.py; src/diffly_cli/__init__.py; src/diffly_cli/__main__.py; src/diffly_cli/cli.py; src/diffly_cli/diffparse.py
  • CHECKS_PENDING (low): Required status checks are still pending. — pending
  • BLOCK because the pull request touches authentication, credentials, secrets, or security-sensitive files.
Blast-radius summary
File Change Symbols Direct callers Tests
CHANGELOG.md +53/-0 <top-level changes> — —
CONTRIBUTING.md +39/-0 <top-level changes> — —
LICENSE +92/-6 files, to files, to —
README.md +22/-6 <top-level changes> — —
SECURITY.md +20/-0 <top-level changes> — —
action/post_comment.py +30/-15 existing_comments, main, request existing_comments, request tests/test_action.py, tests/test_action.py
docs/audit-report.md +0/-0 — — —
docs/visual-verification.md +0/-0 — — —
pyproject.toml +1/-1 <top-level changes> — —
scripts/capture_real_sessions.sh +1/-1 <top-level changes> — —
scripts/render_real_captures.py +0/-0 — — —
src/diffly_cli/__init__.py +1/-1 <top-level changes> — —
src/diffly_cli/__main__.py +6/-0 <top-level changes> — —
src/diffly_cli/cli.py +272/-100 _emit_report, _normalize_github_path, _split_owner_repo, build_parser, center, parse_repo, positive_pr_number, run_doctor, run_local, run_pr, run_setup, run_wizard, slug, summarize_checks _emit_report, _normalize_github_path, _split_owner_repo, center, parse_repo, positive_pr_number, run_pr, run_wizard —
src/diffly_cli/diffparse.py +3/-0 <top-level changes> — —
src/diffly_cli/local.py +151/-0 _current_branch, _git, _git_author, _repository_paths, _unified_diff, _untracked_file_entries, _untracked_paths, build_local_result, resolve_repository_root _current_branch, _git, _git_author, _repository_paths, _unified_diff, _untracked_file_entries, _untracked_paths, resolve_repository_root tests/test_local.py, tests/test_local.py
src/diffly_cli/triage.py +8/-2 <top-level changes> — tests/test_triage.py, tests/test_triage.py
tests/test_action.py +50/-0 <top-level changes> — —
tests/test_local.py +141/-0 _git, repo, test_auth_change_blocks_locally, test_base_ref_compares_branch_commits_only, test_clean_tree_passes_locally, test_cli_local_command_parses, test_cli_local_rejects_non_git_folder, test_non_git_folder_is_rejected, test_not_applicable_checks_produce_no_check_flags, test_repo_with_no_changes_reports_clean_pass, test_untracked_files_are_included, test_working_tree_change_without_tests_quarantines _git —
tests/test_regressions.py +71/-1 <top-level changes> — —
tests/test_triage.py +20/-1 <top-level changes> — —

Deterministic triage is authoritative; any optional LLM explanation cannot change the verdict.

@VIVAAN-DHAWAN
VIVAAN-DHAWAN merged commit c56fced into main Aug 21, 2026
9 checks passed
@VIVAAN-DHAWAN
VIVAAN-DHAWAN deleted the feature/v0.3.0-local-mode-and-ux branch August 23, 2026 06:22
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