feat(review): add grouped review mode with viewed/commented indicators - #10
Merged
Conversation
Document comprehensive analysis of meatcheck codebase architecture and design decisions for implementing grouped file review mode with viewed/commented indicators. Includes CLI config, data model, tree building, template, event handling, and resolved implementation questions.
Plan covers adding --groups flag, per-file viewed/commented indicators in the tree sidebar, mark-as-viewed navigation, and group header highlighting. Includes 11 tasks across 3 execution stages with 11 Gherkin acceptance scenarios.
Add --groups flag to organize files into named feature groups in the
tree sidebar. Groups are specified via a JSON file containing an ordered
array of {name, files} objects. Files not in any group appear under an
auto-created "Other" group.
New features:
- Per-file "viewed" tracking with green checkmark and dimmed name
- Per-file "commented" indicator (dot) updated on comment add/delete
- "Mark as viewed" button below each file that advances to next unviewed
- Group headers with active highlighting when a file in the group is selected
- All indicators work in both grouped and ungrouped modes
- Works with both file mode and diff mode
Implementation:
- Group type, ParseGroupsFile with validation and path normalization
- buildGroupedTree for grouped sidebar, updated buildTree signature
- rebuildTree/selectFile helpers to centralize tree and view updates
- nextUnviewedFile navigation with wrap-around across groups
- Tree rebuilt on comment changes to keep indicators current
…ewed" Move the mark-viewed button from a content footer into the column header row, right-aligned next to the file path. Change button label from "Mark as viewed" to "Mark Viewed" / "Viewed ✓". Remove the content-footer CSS and revert .main grid back to auto 1fr.
jfyne
marked this pull request as ready for review
March 7, 2026 00:44
Apply gofmt formatting to tree.go and refactor buildGroupedTree to use slices.Contains instead of manual loop for checking group membership.
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.
What's changed
Adds
--groupsflag withGrouptype andParseGroupsFile,buildGroupedTreefor sidebar organization, per-file viewed/commented indicators onTreeItem,nextUnviewedFilenavigation,rebuildTree/selectFilehelpers,mark-viewedevent handler, and corresponding template/CSS updates for group headers, indicator icons, and a content footer button.Requirements
Functional Requirements (EARS):
--groupsflag is provided with a JSON file path, the system shall parse the file as an ordered array of{name, files}objects and organize the tree sidebar by groupsAcceptance Criteria:
Suggested review order
main.go--groupsflag and callsParseGroupsFilemodel.goGroupstruct, extendsTreeItemandReviewModelwith group/viewed/comment fieldsio_helpers.goParseGroupsFileto read, validate, and normalize group JSONtree.gofileHasComments,findFileBySlash, updatesbuildTreesignature, implementsbuildGroupedTreeviewed.gonextUnviewedFilewith group-aware traversal including "Other" filesapp.gorebuildTree,selectFile,mark-viewedhandler, wires group init and comment handler updatestemplate.htmlstyles.cssskill.md--groupsusage and JSON format documentationgroups_test.goParseGroupsFile— valid JSON, validation errors, path normalizationtree_test.gofileHasComments,buildTreeviewed/comments,buildGroupedTreeviewed_test.gonextUnviewedFile— ungrouped, grouped, wrap-around, edge caseshttp_render_test.gobuildTreesignature,Viewedmap init