Conversation
- A list's header now shows its **Breakpoint** - half its non-character units, rounded up. - **Backup and restore** under Configuration. Export every list to a file, then import it on another computer to make that browser an exact copy.
|
Warning Review limit reached
Next review available in: 31 minutes You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (9)
📝 WalkthroughWalkthroughThe change adds versioned workspace backup and restore, breakpoint calculation and display, inline Markdown formatting, related tests, styling, and content updates. ChangesWorkspace backup and restore
Breakpoint calculation and display
Inline Markdown formatting
Content maintenance
Estimated code review effort: 3 (Moderate) | ~25 minutes Sequence Diagram(s)sequenceDiagram
actor User
participant ConfigDialog
participant backup
participant App
participant listRepository
User->>ConfigDialog: Select backup file
ConfigDialog->>backup: parseBackup(fileText)
backup-->>ConfigDialog: Valid SavedList[] or error
User->>ConfigDialog: Confirm replacement
ConfigDialog->>App: onReplaceAllLists(SavedList[])
App->>listRepository: replaceAllLists(SavedList[])
listRepository-->>App: Persisted collection
App-->>ConfigDialog: Updated application state
🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (3 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
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. Comment |
Deploying warmuster with
|
| Latest commit: |
b5274f1
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://4924cd6f.warmuster.pages.dev |
| Branch Preview URL: | https://dev.warmuster.pages.dev |
There was a problem hiding this comment.
Actionable comments posted: 8
🧹 Nitpick comments (1)
src/components/MarkdownContent.test.tsx (1)
21-32: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winTest literal code-span content.
The current code-span value has no Markdown marker. Add a case such as
`**literal**`and assert thatcode strongis absent. This verifies that code content does not recurse into inline formatting.🤖 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 `@src/components/MarkdownContent.test.tsx` around lines 21 - 32, Update the test named “renders bold, italic and code spans” to use Markdown formatting inside the code span, such as `**literal**`, and assert that the rendered code element contains the literal markers without a nested strong element. Preserve the existing assertions for bold, italic, and paragraph rendering.
🤖 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 `@schema.md`:
- Around line 654-659: Update the backup example near the warmuster/backup
schema to use a fenced json code block, replace the inline comment in lists with
an empty array, and describe that the array contains SavedList objects below the
block.
In `@src/App.tsx`:
- Around line 176-181: Update handleReplaceAllLists and the startup
decodeShareCode flow so restoring a backup invalidates any pending share-code
import before replacing the collection. Track and compare a restore generation
(or equivalent cancellation state), and only let the matching generation call
upsertList; ensure the restored collection remains an exact backup mirror.
In `@src/components/ConfigDialog.tsx`:
- Around line 164-165: Remove autoFocus from the destructive “Replace my lists”
button in the confirmation dialog and move it to the Cancel control, or omit
automatic focus entirely. Update the button definitions near confirmImport so
opening the dialog cannot default keyboard activation to the destructive action.
In `@src/components/MarkdownContent.tsx`:
- Line 10: Update the Markdown regex in MarkdownContent to prevent the
single-asterisk italic branch from matching asterisk characters adjacent to
another asterisk, while preserving nested parsing for `*outer **inner** text*`.
Add a regression test covering italic text containing bold text and verify it
produces nested italic and bold nodes.
In `@src/domain/backup.ts`:
- Around line 67-70: Update the list restoration mapping around pointsLimit and
units quantity to validate converted numbers with Number.isFinite before
assignment. Fall back to the existing defaults when values are non-finite,
including Infinity produced by parsed values such as 1e999, while preserving the
current minimum quantity behavior for valid finite inputs.
- Line 103: Update parseBackup to validate that all parsed lists have unique IDs
before returning the collection. Reject the backup when duplicate IDs are found
rather than filtering or silently dropping entries, while preserving normal
sanitization and return behavior for unique lists; use the list ID field and the
existing parseBackup flow, with App.tsx relying on IDs as collection identity.
In `@src/storage/listRepository.ts`:
- Around line 49-51: Update replaceAllLists to expose whether saveLists
succeeded instead of always returning the imported lists, then update the import
flow to display an error and avoid reporting restore success when persistence
fails. Preserve the existing successful restore behavior only after the browser
storage write completes.
In `@src/styles.css`:
- Around line 1602-1611: Update the .visually-hidden rule by removing the
deprecated clip declaration and adding clip-path: inset(50%) while preserving
the existing visually hidden styles.
---
Nitpick comments:
In `@src/components/MarkdownContent.test.tsx`:
- Around line 21-32: Update the test named “renders bold, italic and code spans”
to use Markdown formatting inside the code span, such as `**literal**`, and
assert that the rendered code element contains the literal markers without a
nested strong element. Preserve the existing assertions for bold, italic, and
paragraph rendering.
🪄 Autofix
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: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: f61a93c4-f65e-461b-903c-d1c5a182fd98
📒 Files selected for processing (15)
schema.mdsrc/App.tsxsrc/components/ConfigDialog.tsxsrc/components/MarkdownContent.test.tsxsrc/components/MarkdownContent.tsxsrc/components/Roster.tsxsrc/content/info/changelog.mdsrc/content/info/privacy.mdsrc/content/info/roadmap.mdsrc/domain/backup.test.tssrc/domain/backup.tssrc/domain/lists.test.tssrc/domain/lists.tssrc/storage/listRepository.tssrc/styles.css
| export function replaceAllLists(lists: SavedList[]): SavedList[] { | ||
| saveLists(lists); | ||
| return lists; |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Expose a failed persistence operation to the import flow.
saveLists suppresses storage failures, but replaceAllLists always returns the imported collection. The import dialog then reports success even if localStorage still contains the previous workspace. A refresh can undo the apparent restore.
Return a persistence result from replaceAllLists and show an import error when saving fails. Do not present the restore as complete unless the browser storage write succeeds.
🤖 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 `@src/storage/listRepository.ts` around lines 49 - 51, Update replaceAllLists
to expose whether saveLists succeeded instead of always returning the imported
lists, then update the import flow to display an error and avoid reporting
restore success when persistence fails. Preserve the existing successful restore
behavior only after the browser storage write completes.
Summary by CodeRabbit
New Features
Documentation
Bug Fixes