Skip to content

Codex/monthly dump#112

Merged
fortune710 merged 23 commits into
devfrom
codex/monthly-dump
Jun 1, 2026
Merged

Codex/monthly dump#112
fortune710 merged 23 commits into
devfrom
codex/monthly-dump

Conversation

@fortune710

@fortune710 fortune710 commented May 29, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

  • New Features

    • Photo grid picker for monthly dumps with Entries/Gallery sources, in-app camera capture, and 2x2/2x3 layout support
    • Month validation, image slides, progress UI, and a dedicated status screen
  • Bug Fixes

    • Improved structured logging for monthly dump notification batches
  • Tests

    • New unit and UI tests covering grid picker, camera flows, and monthly-dump creation flows
  • Documentation

    • Added frontend design standards and writing-quality (Stop Slop) guidelines

@fortune710 fortune710 self-assigned this May 29, 2026
@bolt-new-by-stackblitz

Copy link
Copy Markdown

Review PR in StackBlitz Codeflow Run & review this pull request in StackBlitz Codeflow.

@coderabbitai

coderabbitai Bot commented May 29, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

@fortune710, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 41 minutes and 59 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 9f3e0840-3415-40ab-a2ff-77eb78dbfdc6

📥 Commits

Reviewing files that changed from the base of the PR and between 4714704 and d7b944c.

📒 Files selected for processing (5)
  • .coderabbit.yaml
  • frontend/components/monthly-dumps/__tests__/photo-grid-picker.test.tsx
  • frontend/components/monthly-dumps/grid-image-picker-camera-modal.tsx
  • frontend/components/monthly-dumps/grid-image-picker.tsx
  • frontend/components/monthly-dumps/photo-grid-picker.tsx

Walkthrough

Adds a layout-switchable monthly photo grid builder (2x2/2x3) with service-side grid generation, gallery/entries pagination hooks, composed picker UI with camera capture, page integration validating month routes, AI skills docs, CI workflow, backend logging/test updates, and supporting tests/automation.

Changes

AI Skills & Infrastructure

Layer / File(s) Summary
AI Agent Skills Documentation
.agents/skills/frontend-design/SKILL.md, .agents/skills/stop-slop/*
Frontend-design skill and stop-slop skill docs added with guidance, references, examples, license, and changelog.
CI & Backend Infrastructure
.github/workflows/frontend-tests.yml, backend/.gitignore, backend/services/notification_enqueue_service.py, backend/tests/test_monthly_dump_queue_notifications.py
Adds frontend Jest CI workflow scoped to frontend/**; adds .pytest_cache to backend gitignore; replaces plain logs with structured logger.info(extra=...) and unifies Supabase client test mocking via @patch.

Monthly Dump Grid Creation Refactoring

Layer / File(s) Summary
Grid Layout Schema & Service Methods
frontend/services/monthly-dump-service.ts
Introduces MonthlyDumpGridLayout (`'2x2'
Data Fetching Hooks
frontend/hooks/use-gallery-images.ts, frontend/hooks/use-monthly-entries.ts, frontend/hooks/use-monthly-dump.ts
Adds useGalleryImages (Expo Media Library paginated by month) and useMonthlyEntries (paginated user entries by month); both dedupe results and expose loadMore/refetch; useMonthlyDump accepts nullable requestedMonth and uses MONTHLY_DUMPS bucket fallback.
Grid Picker UI Subcomponents
frontend/components/monthly-dumps/grid-image-picker-*.tsx, frontend/components/monthly-dumps/photo-grid-empty-state.tsx
Adds bottom tray, camera modal, off-screen capture canvas, grid cell component, empty-state component with permission flow, layout popover selector, right-side actions, selection pill, and GridImagePicker modal.
PhotoGridPicker Core Refactoring
frontend/components/monthly-dumps/photo-grid-picker.tsx
Refactors PhotoGridPicker to slot-based grid builder supporting 2x2/2x3; dynamic sizing, camera capture insertion, pending layout reduction UX for dropping overflow photos, composed subcomponents, and completion payload now includes gridLayout.
Supporting UI Components & Visuals
frontend/components/monthly-dumps/monthly-dump-image-slide.tsx, frontend/components/monthly-dumps/monthly-dump-status-screen.tsx, frontend/components/monthly-dumps/monthly-dump-grid-icons.tsx, frontend/components/monthly-dumps/monthly-dump-grid-prompt-slide.tsx, frontend/components/monthly-dumps/monthly-dump-progress-bar-item.tsx, frontend/components/monthly-dumps/photo-grid-empty-state.tsx, frontend/components/monthly-dumps/monthly-dump-banner.tsx
Adds image slide with gradient overlays; status screen for loading/invalid-month; SVG icons for 2x2/2x3; redesigned prompt slide with gradients and CTA; progress bar visual updates; photo-grid empty state; adds testID to banner button.
Monthly Dump Page Route Integration
frontend/app/monthly-dumps/[month].tsx
Validates month param via YYYY-MM regex; passes requestedMonth to useMonthlyDump; resets slide index on month change; conditionally renders progress bars/slides; forwards gridLayout to custom grid mutation; replaces inline loading/invalid UI with MonthlyDumpStatusScreen.
RootScreen Prefetch Effect
frontend/app/index.tsx
Calls prefetchSuggestedFriends() only when both user and session are present and includes the function in the effect dependencies.
Testing & Automation
frontend/components/monthly-dumps/__tests__/photo-grid-picker.test.tsx, frontend/maestro/monthly-dumps/*.yaml, frontend/services/__tests__/monthly-dump-service.test.ts
Adds comprehensive Jest tests for PhotoGridPicker flows and MonthlyDumpService caching; adds Maestro UI flows for grid creation from entries and gallery.
Dependencies & Configuration
frontend/package.json, skills-lock.json
Pins @tanstack/react-query to 5.85.5, adds expo-media-library ~18.2.1, updates lucide-react-native, and registers frontend-design in skills-lock.json.

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly Related PRs

Suggested Labels

codex

Poem

🐰 A grid of photos, two-by-two, or three,
With camera clicks and gallery glee,
The rabbit stitches slides in gentle art,
Picks, trims, and saves each cherished part—
A tiny hop, a perfect grid from me.

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 9.38% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The title 'Codex/monthly dump' is vague and does not clearly convey the main purpose or scope of the changes. It appears to reference a branch name rather than describing the actual modifications. Replace with a descriptive title that summarizes the primary change, such as 'Add photo grid picker and layout support for monthly dumps' or 'Implement custom grid creation UI for monthly dump photo selection'.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/monthly-dump

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 12

🧹 Nitpick comments (3)
frontend/app/index.tsx (1)

13-17: ⚡ Quick win

Use negative-first guard in the effect for guideline compliance.

Flip the condition to an early return guard (if (!user || !session) return;) before calling prefetchSuggestedFriends().

Suggested diff
   useEffect(() => {
-    if (user && session) {
-      prefetchSuggestedFriends();
-    }
-  }, [user, session, prefetchSuggestedFriends])
+    if (!user || !session) return;
+    prefetchSuggestedFriends();
+  }, [user, session, prefetchSuggestedFriends]);

As per coding guidelines, "Always evaluate negative conditions first in conditional statements (e.g., check !condition and return early instead of checking condition and nesting logic)".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@frontend/app/index.tsx` around lines 13 - 17, Change the effect to use a
negative-first early-return guard: inside the useEffect callback check if !user
|| !session and return early, then call prefetchSuggestedFriends(); update the
dependency array remains [user, session, prefetchSuggestedFriends]; locate the
useEffect in frontend/app/index.tsx to modify the callback that currently tests
if (user && session) before calling prefetchSuggestedFriends().
frontend/components/monthly-dumps/monthly-dump-grid-icons.tsx (1)

4-47: 💤 Low value

mutedColor is declared but never used in either icon.

mutedColor is part of GridIconProps and destructured with a default in both MonthlyDumpGrid2x2Icon and MonthlyDumpGrid2x3Icon, but it is never referenced in the rendered Rects. Either remove it or use it (e.g., to differentiate filled vs. empty cells).

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@frontend/components/monthly-dumps/monthly-dump-grid-icons.tsx` around lines 4
- 47, mutedColor is declared in GridIconProps and destructured in
MonthlyDumpGrid2x2Icon and MonthlyDumpGrid2x3Icon but never used; fix by
applying mutedColor to the intended cells (or remove the prop if not needed).
Specifically, update the GridCell calls inside MonthlyDumpGrid2x2Icon and
MonthlyDumpGrid2x3Icon to pass color={mutedColor} for the cells that should
appear muted (e.g., alternate or empty cells) while keeping color={color} for
filled cells, referencing the GridCell component and the GridIconProps type;
alternatively, if no muted styling is desired, remove mutedColor from
GridIconProps and the destructured defaults in MonthlyDumpGrid2x2Icon and
MonthlyDumpGrid2x3Icon.
frontend/components/monthly-dumps/grid-image-picker-cell.tsx (1)

59-84: ⚡ Quick win

Invert the slot conditional to negative-first style.

Please switch this ternary to !slot ? emptyState : filledState to match the repo rule.

As per coding guidelines, "Always evaluate negative conditions first in conditional statements (e.g., check !condition and return early instead of checking condition and nesting logic)".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@frontend/components/monthly-dumps/grid-image-picker-cell.tsx` around lines 59
- 84, The JSX currently branches with a positive-first ternary on `slot`; invert
it to negative-first by checking `!slot` first and rendering the empty state
(the <View style={styles.emptyCell}> block with `ImagePlus`) before the filled
state to conform to the repo rule; keep all existing filled-state elements (the
<Image source={{ uri: slot.content_url }} with `styles.gridImage`, the border
`styles.gridCellBorder`, the focused action layer using
`isFocused`/`pendingLayout`/`onRemove`/`Trash2`, and the removal overlay
controlled by `pendingLayout && isRemovalSelected`) unchanged other than moving
them into the else branch so behavior and handlers remain identical.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.agents/skills/frontend-design/SKILL.md:
- Line 4: The license filename reference in the SKILL metadata uses "license:
Complete terms in LICENSE.txt" which is inconsistent with the repo's actual
filename; update the value for the license key to reference the correct file
name (e.g., "license: Complete terms in LICENSE") so the 'license:' entry
matches the repository's LICENSE file and metadata consumers can resolve it
correctly.

In @.agents/skills/stop-slop/README.md:
- Line 13: The fenced code block in the README (the snippet showing the
stop-slop directory tree) lacks a language specifier and triggers MD040; update
the triple-backtick fence around that tree to include a language (e.g., change
``` to ```text) so the block is properly typed; edit the README.md entry
containing the directory tree (the fenced block showing "stop-slop/ ├── SKILL.md
...") and add the language token to the opening fence.

In @.github/workflows/frontend-tests.yml:
- Around line 18-21: Replace the floating action tags and disable credential
persistence: pin the actions/checkout and actions/setup-node uses to their
specific commit SHAs (replace actions/checkout@v5 and actions/setup-node@v4 with
the corresponding full commit SHA refs) and add the checkout input
persist-credentials: false (and optionally fetch-depth: 0) to the
actions/checkout step so credentials are not left in the runner; update the
workflow lines referencing actions/checkout and actions/setup-node accordingly.

In `@frontend/components/monthly-dumps/__tests__/photo-grid-picker.test.tsx`:
- Line 2: Remove the unused top-level import of Text, TouchableOpacity, and View
from 'react-native'—these symbols are only referenced via
require('react-native') inside the jest.mock factories (the mock blocks that
call require('react-native')), so delete the import line importing Text,
TouchableOpacity, View to satisfy the lint rule and keep the mock factories
unchanged.

In `@frontend/components/monthly-dumps/grid-image-picker-camera-modal.tsx`:
- Around line 54-56: The icon-only TouchableOpacity controls in
GridImagePickerCameraModal (the close button using onClose and
styles.cameraCloseButton and the capture button) lack accessibility props;
update both TouchableOpacity elements to include accessibilityLabel (e.g.,
"Close camera" and "Take photo"), accessibilityRole="button", and
accessibilityHint with concise action descriptions so screen readers announce
their purpose, ensuring you add these props to the TouchableOpacity that calls
onClose and to the capture handler TouchableOpacity.

In `@frontend/components/monthly-dumps/grid-image-picker-capture-canvas.tsx`:
- Around line 29-33: The ViewShot root can be collapsed on Android causing blank
PNG captures; update the ViewShot component (where viewShotRef is used and
styles.captureCanvas applied) to include collapsable={false} so the native view
isn't removed when off-screen, ensuring react-native-view-shot produces valid
captures.

In `@frontend/components/monthly-dumps/grid-image-picker-layout-popover.tsx`:
- Around line 75-82: The TouchableOpacity that renders the layout trigger
(testID "monthly-dump-grid-layout-button") and each icon-only layout option
should include accessibility properties so screen readers can discover them: add
accessibilityRole="button", a descriptive accessibilityLabel (e.g., "Grid layout
options" for the trigger or the specific layout name for each option), and an
accessibilityHint that explains the action (e.g., "Opens layout selection" or
"Selects the compact grid layout"); update the TouchableOpacity with
onPress={handleButtonPress} and the components that render CurrentLayoutIcon and
the option icons to include these
accessibilityRole/accessibilityLabel/accessibilityHint props so all interactive
icon-only controls are properly exposed to assistive tech.

In `@frontend/components/monthly-dumps/grid-image-picker.tsx`:
- Around line 188-196: Update the invalid 3-component rgba color in the
sheetContainer style: replace sheetContainer.backgroundColor = 'rgba(8,16,30)'
with a valid React Native color string such as 'rgb(8,16,30)' or
'rgba(8,16,30,1)' so the background applies correctly (look for the
sheetContainer style object used alongside SHEET_HEIGHT in
grid-image-picker.tsx).

In `@frontend/components/monthly-dumps/monthly-dump-grid-prompt-slide.tsx`:
- Line 4: Remove the unused Sparkles import from the lucide-react-native import
list (leave ArrowRight), and delete the now-unused style keys eyebrowRow,
eyebrowPill, eyebrowText, detailRow, detailChip, and detailChipText from the
styles object; ensure there are no remaining references to Sparkles or those
style keys elsewhere in this component and run lint to confirm no unused-symbol
errors remain.

In `@frontend/components/monthly-dumps/photo-grid-picker.tsx`:
- Line 446: The Text rendering in PhotoGridPicker currently always prints
"Remove {removeCount} photos" which is wrong for a single item; update the
string construction where styles.sourceTitle is used to pluralize based on
removeCount (e.g., in the component/function PhotoGridPicker where removeCount
is referenced) so it renders "Remove 1 photo" when removeCount === 1 and "Remove
N photos" otherwise (use a simple conditional or pluralization helper to choose
"photo" vs "photos").
- Around line 186-189: The tray "Entries" flow never clears focusedCellIndex, so
targetCellIndex = focusedCellIndex ?? emptyCellIndex always picks the stale
focused index and subsequent tray picks overwrite it; modify openSheet so it
resets the focus before showing the sheet (clear focusedCellIndex/nullify it) so
that targetCellIndex falls back to emptyCellIndex when assignPhotoToCell runs;
update openSheet (which currently checks isSubmitting and calls
setSheetVisible(true)) to call the focus-resetter (same state setter used by
handleCellPress) immediately before setSheetVisible(true).

In `@frontend/maestro/monthly-dumps/create-grid-from-gallery-flow.yaml`:
- Around line 12-35: The test flow taps the "open entries" button between tile
picks so GridImagePicker resets activeSource to 'entries' (useEffect on visible)
and subsequent picks (monthly-dump-grid-source-tile-1..5) will use Entries; to
fix, re-select the Gallery source before each tile selection (i.e., tap
"Gallery" prior to each monthly-dump-grid-source-tile-*), or alter the flow to
keep the sheet open across picks; look for GridImagePicker, its useEffect on
visible, and handleSelect which calls onClose when implementing the change.

---

Nitpick comments:
In `@frontend/app/index.tsx`:
- Around line 13-17: Change the effect to use a negative-first early-return
guard: inside the useEffect callback check if !user || !session and return
early, then call prefetchSuggestedFriends(); update the dependency array remains
[user, session, prefetchSuggestedFriends]; locate the useEffect in
frontend/app/index.tsx to modify the callback that currently tests if (user &&
session) before calling prefetchSuggestedFriends().

In `@frontend/components/monthly-dumps/grid-image-picker-cell.tsx`:
- Around line 59-84: The JSX currently branches with a positive-first ternary on
`slot`; invert it to negative-first by checking `!slot` first and rendering the
empty state (the <View style={styles.emptyCell}> block with `ImagePlus`) before
the filled state to conform to the repo rule; keep all existing filled-state
elements (the <Image source={{ uri: slot.content_url }} with `styles.gridImage`,
the border `styles.gridCellBorder`, the focused action layer using
`isFocused`/`pendingLayout`/`onRemove`/`Trash2`, and the removal overlay
controlled by `pendingLayout && isRemovalSelected`) unchanged other than moving
them into the else branch so behavior and handlers remain identical.

In `@frontend/components/monthly-dumps/monthly-dump-grid-icons.tsx`:
- Around line 4-47: mutedColor is declared in GridIconProps and destructured in
MonthlyDumpGrid2x2Icon and MonthlyDumpGrid2x3Icon but never used; fix by
applying mutedColor to the intended cells (or remove the prop if not needed).
Specifically, update the GridCell calls inside MonthlyDumpGrid2x2Icon and
MonthlyDumpGrid2x3Icon to pass color={mutedColor} for the cells that should
appear muted (e.g., alternate or empty cells) while keeping color={color} for
filled cells, referencing the GridCell component and the GridIconProps type;
alternatively, if no muted styling is desired, remove mutedColor from
GridIconProps and the destructured defaults in MonthlyDumpGrid2x2Icon and
MonthlyDumpGrid2x3Icon.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: b146b088-505e-4456-afc3-c1c12413c2f0

📥 Commits

Reviewing files that changed from the base of the PR and between f5acee3 and eed56eb.

⛔ Files ignored due to path filters (2)
  • frontend/bun.lock is excluded by !**/*.lock
  • frontend/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (41)
  • .agents/skills/frontend-design/SKILL.md
  • .agents/skills/stop-slop/CHANGELOG.md
  • .agents/skills/stop-slop/LICENSE
  • .agents/skills/stop-slop/README.md
  • .agents/skills/stop-slop/SKILL.md
  • .agents/skills/stop-slop/references/examples.md
  • .agents/skills/stop-slop/references/phrases.md
  • .agents/skills/stop-slop/references/structures.md
  • .github/workflows/frontend-tests.yml
  • backend/.gitignore
  • backend/services/notification_enqueue_service.py
  • backend/tests/test_monthly_dump_queue_notifications.py
  • frontend/app/index.tsx
  • frontend/app/monthly-dumps/[month].tsx
  • frontend/components/monthly-dumps/__tests__/photo-grid-picker.test.tsx
  • frontend/components/monthly-dumps/grid-image-picker-bottom-tray.tsx
  • frontend/components/monthly-dumps/grid-image-picker-camera-modal.tsx
  • frontend/components/monthly-dumps/grid-image-picker-capture-canvas.tsx
  • frontend/components/monthly-dumps/grid-image-picker-cell.tsx
  • frontend/components/monthly-dumps/grid-image-picker-empty-state.tsx
  • frontend/components/monthly-dumps/grid-image-picker-layout-popover.tsx
  • frontend/components/monthly-dumps/grid-image-picker-right-actions.tsx
  • frontend/components/monthly-dumps/grid-image-picker-selection-pill.tsx
  • frontend/components/monthly-dumps/grid-image-picker.tsx
  • frontend/components/monthly-dumps/monthly-dump-banner.tsx
  • frontend/components/monthly-dumps/monthly-dump-grid-icons.tsx
  • frontend/components/monthly-dumps/monthly-dump-grid-prompt-slide.tsx
  • frontend/components/monthly-dumps/monthly-dump-image-slide.tsx
  • frontend/components/monthly-dumps/monthly-dump-progress-bar-item.tsx
  • frontend/components/monthly-dumps/monthly-dump-status-screen.tsx
  • frontend/components/monthly-dumps/photo-grid-empty-state.tsx
  • frontend/components/monthly-dumps/photo-grid-picker.tsx
  • frontend/hooks/use-gallery-images.ts
  • frontend/hooks/use-monthly-dump.ts
  • frontend/hooks/use-monthly-entries.ts
  • frontend/maestro/monthly-dumps/create-grid-from-entries-flow.yaml
  • frontend/maestro/monthly-dumps/create-grid-from-gallery-flow.yaml
  • frontend/package.json
  • frontend/services/__tests__/monthly-dump-service.test.ts
  • frontend/services/monthly-dump-service.ts
  • skills-lock.json

---
name: frontend-design
description: Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
license: Complete terms in LICENSE.txt

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix the license filename reference.

LICENSE.txt appears inconsistent with the repository naming convention used elsewhere (LICENSE). This can break metadata consumers and confuse readers.

Suggested fix
-license: Complete terms in LICENSE.txt
+license: Complete terms in LICENSE
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
license: Complete terms in LICENSE.txt
license: Complete terms in LICENSE
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.agents/skills/frontend-design/SKILL.md at line 4, The license filename
reference in the SKILL metadata uses "license: Complete terms in LICENSE.txt"
which is inconsistent with the repo's actual filename; update the value for the
license key to reference the correct file name (e.g., "license: Complete terms
in LICENSE") so the 'license:' entry matches the repository's LICENSE file and
metadata consumers can resolve it correctly.


## Skill Structure

```

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Add a language to the fenced code block.

The code fence is missing a language specifier (MD040), which can fail markdown lint checks.

Suggested fix
-```
+```text
 stop-slop/
 ├── SKILL.md              # Core instructions
 ├── references/
 │   ├── phrases.md        # Phrases to remove
 │   ├── structures.md     # Structural patterns to avoid
 │   └── examples.md       # Before/after transformations
 ├── README.md
 └── LICENSE
</details>

<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

```suggestion

🧰 Tools
🪛 markdownlint-cli2 (0.22.1)

[warning] 13-13: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.agents/skills/stop-slop/README.md at line 13, The fenced code block in the
README (the snippet showing the stop-slop directory tree) lacks a language
specifier and triggers MD040; update the triple-backtick fence around that tree
to include a language (e.g., change ``` to ```text) so the block is properly
typed; edit the README.md entry containing the directory tree (the fenced block
showing "stop-slop/ ├── SKILL.md ...") and add the language token to the opening
fence.

Comment thread .github/workflows/frontend-tests.yml
Comment thread frontend/components/monthly-dumps/__tests__/photo-grid-picker.test.tsx Outdated
Comment thread frontend/components/monthly-dumps/grid-image-picker-camera-modal.tsx Outdated
Comment thread frontend/components/monthly-dumps/grid-image-picker.tsx
Comment thread frontend/components/monthly-dumps/photo-grid-picker.tsx
Comment thread frontend/components/monthly-dumps/photo-grid-picker.tsx Outdated
Comment thread frontend/maestro/monthly-dumps/create-grid-from-gallery-flow.yaml
@fortune710 fortune710 merged commit 1135a0c into dev Jun 1, 2026
1 check passed
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