feat(review): render a deterministic changed-files summary in the unified comment - #3604
Conversation
…fied comment (#1957) Groups changed files by category (source/test/docs/config/generated via the existing classifyChangedFile classifier) into one collapsible table with per-category file counts and +/- totals -- no AI, no extra fetch. Gated by review.changed_files_summary in .gittensory.yml (default off, manifest-only like review.suggestions/review.tone) on top of the existing unifiedComment convergence flag, so it's configurable per-repo without any new global env var or DB/OpenAPI surface.
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
|
Warning 🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨 ⏸️ Gittensory review result - manual review recommendedReview updated: 2026-07-05 19:24:26 UTC
⏸️ Suggested Action - Manual Review
Review summary Nits — 5 non-blocking
Concerns raised — review before merging
Review context
Contributor next steps
Signal definitions
🟩 Safe / merged · 🟦 Advisory · 🟨 Held for review · 🟥 Blocked / closed 💰 Earn for open-source contributions like this. Gittensor lets GitHub contributors earn for the work they already do — register to start earning →. Checked by Gittensory, a quiet PR intelligence layer for OSS maintainers.
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #3604 +/- ##
=======================================
Coverage 93.19% 93.20%
=======================================
Files 313 313
Lines 31874 31900 +26
Branches 11666 11673 +7
=======================================
+ Hits 29705 29731 +26
Misses 1517 1517
Partials 652 652
🚀 New features to boost your workflow:
|
Summary
classifyChangedFileclassifier from feat(review): deterministic changed-file classifier (source/test/docs/config/generated) #2143), with a file count and +/- totals per category — collapsing an arbitrarily large same-category group into a single row.review.changed_files_summarymanifest toggle (default off), on top of the existingunifiedCommentconvergence flag — no new global env var, no DB/OpenAPI surface, matching the established pattern for other manifest-onlyreview.*fields (review.suggestions,review.tone, etc.).aiReviewWillRun-gated closure), since this is purely deterministic and must still render when AI review itself is skipped for a pass (author blacklisted, frozen for manual review, or AI review disabled for the repo).Closes #1957.
Example rendered table:
Scope
type(scope): short summaryConventional Commit format.CONTRIBUTING.mdand does not reintroduce GitHub Pages, VitePress,site/, orCNAME.Validation
git diff --checknpm run actionlintnpm run typechecknpm run test:coveragelocally — 100% line + branch coverage on every changed line (verified via a targeted v8 coverage pass in addition to the full run: both the newbuildChangedFilesSummaryCollapsiblepure function and the newchangedFilesSummaryEnabledForReviewgating ternary inprocessors.tsare covered on both branches).npm run test:workersnpm run build:mcpnpm run test:mcp-packnpm run ui:openapi:checknpm run ui:lintnpm run ui:typechecknpm run ui:buildnpm audit --audit-level=moderatetest/unit/changed-files-summary-collapsible.test.ts(pure-function + bridge-wiring tests, mirroringvisual-collapsible.test.ts),test/unit/focus-manifest.test.ts(parse/serialize/round-trip/resolve for the new manifest field),test/unit/signals-coverage.test.ts(fixture parity), and a newtest/unit/queue.test.tsend-to-end webhook test asserting the section renders when.gittensory.ymlopts in.Safety
review.*field likereview.suggestions.)apps/gittensory-uichanges.)UI Evidencesection below with screenshots. (N/A — the only "visible" output is a markdown table rendered inside a bot-posted GitHub PR comment, not anapps/gittensory-uipage; see the example table above instead.)README.md's "Unified review comment" bullet extended to mention the new toggle.)Notes
src/review/changed-files-classify.ts) — this PR is purely the render + wiring slice Changed-files summary table in the unified review comment #1957's own issue description calls out as the remaining scope.