feat(enrichment): add leftover conflict-marker analyzer#3338
Merged
gittensory-orb[bot] merged 1 commit intoJul 5, 2026
Merged
Conversation
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #3338 +/- ##
=======================================
Coverage 93.88% 93.88%
=======================================
Files 279 279
Lines 30530 30530
Branches 11118 11118
=======================================
Hits 28662 28662
Misses 1211 1211
Partials 657 657
🚀 New features to boost your workflow:
|
|
Important 🟪🟪🟪🟪🟪🟪🟪🟪🟪🟪🟪🟪 🔍 Gittensory is reviewing…AI analysis is in progress. This comment will update when the review is complete. 🟩 Safe / merged · 🟦 Advisory · 🟨 Held for review · 🟥 Blocked / closed · 🟪 Reviewing |
11 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #2032
What
A new local REES analyzer,
conflictMarker, that flags leftover VCS conflict markers —<<<<<<<(ours),|||||||(diff3 base),=======(separator),>>>>>>>(theirs) — accidentally committed in the ADDED lines of a PR diff. A mechanical, near-zero-false-positive catch that should block a merge. Pure compute, no network.Detection (structural, near-zero false positive)
</|/>is never valid prose or code. The ours/base/theirs markers may carry a trailing space + label (a branch or commit); the separator is a bare seven=.=======separator is a legitimate Markdown setext-H1 underline / AsciiDoc section rule, so it is not flagged in markup files (.md/.markdown/.mdx/.rst/.adoc/.asciidoc/.textile) — but the unambiguous<<<<<<</|||||||/>>>>>>>markers still are, so a real conflict landing in a Markdown file is caught by those.\ No newlineline-counter fix; findings capped (maxFindings: 25) per file and globally.Registration
Registered as a local descriptor (category
quality, costlocal, requires["files"]) with an inlinerender(), following theactions-pinadded-line-walk shape. All wiring updated:types.ts(ConflictMarkerFinding+conflictMarker?key),render.ts,analyzer-registry.test.ts, rootsrc/review/enrichment-analyzer-names.ts(the canonicalREES_ANALYZER_NAMES), roottest/unit/enrichment-wire.test.ts, and the generatedanalyzer-metadata.json/rees-analyzers.ts/.env.examplevianode scripts/generate-analyzer-metadata.mjs.Tests
review-enrichment/test/conflict-marker.test.ts(11 tests) covers: each of the four marker shapes with and without a label, exactly-seven enforcement (six/eight/indented rejected), the bare-separator-vs-labeled distinction, the markup-file=======suppression (with ours/theirs still firing there), a full three-way conflict flagged at correct locations, a Markdown setext-H1 underline not flagged, a real conflict in a Markdown file still caught, added-lines-only with line-number accuracy across mixed hunks, the per-file cap +maxFindings: 0, the entrypoint's global cap across files, and the no-files case. Analyzer metadata is regenerated and committed.