Skip to content

## 0.7.0 2026-08-06 - #18

Merged
tpskowski merged 3 commits into
mainfrom
dev
Aug 7, 2026
Merged

tpskowski merged 3 commits into
mainfrom
dev

Conversation

@tpskowski

@tpskowski tpskowski commented Aug 7, 2026 •

Copy link
Copy Markdown
Owner
  • 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.

Summary by CodeRabbit

  • New Features

    • Export and import complete saved-list collections using local JSON backup files.
    • Added backup validation, confirmation, error feedback, and date-based filenames.
    • Displayed each list’s calculated breakpoint in the roster header.
    • Enhanced Markdown support for links, emphasis, headings, lists, and inline code.
  • Documentation

    • Documented local backup privacy and updated the changelog and roadmap.
  • Bug Fixes

    • Improved handling of invalid backup entries and unsupported backup formats.

- 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.
@coderabbitai

coderabbitai Bot commented Aug 7, 2026 •

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@tpskowski, you've reached your PR review limit, so we couldn't start this review.

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 @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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 configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 80a817a1-677d-4a60-886b-225997026e64

📥 Commits

Reviewing files that changed from the base of the PR and between 248e0a0 and b5274f1.

📒 Files selected for processing (9)
  • schema.md
  • src/App.tsx
  • src/components/ConfigDialog.tsx
  • src/components/MarkdownContent.test.tsx
  • src/components/MarkdownContent.tsx
  • src/domain/backup.test.ts
  • src/domain/backup.ts
  • src/storage/listRepository.ts
  • src/styles.css
📝 Walkthrough

Walkthrough

The change adds versioned workspace backup and restore, breakpoint calculation and display, inline Markdown formatting, related tests, styling, and content updates.

Changes

Workspace backup and restore

Layer / File(s) Summary
Backup format and persistence contract
schema.md, src/domain/backup.ts, src/domain/backup.test.ts, src/storage/listRepository.ts
Defines the backup envelope, validation, sanitization, serialization, filename format, tests, and whole-collection replacement.
Configuration import and collection replacement
src/components/ConfigDialog.tsx, src/App.tsx, src/styles.css
Adds backup export, import confirmation, error handling, collection replacement, active-list clearing, and related controls.
Backup user-facing support
src/content/info/privacy.md, src/content/info/changelog.md
Documents local backup storage and records the backup and restore feature.

Breakpoint calculation and display

Layer / File(s) Summary
Breakpoint calculation and validation
src/domain/lists.ts, src/domain/lists.test.ts
Calculates half the non-character unit quantity with upward rounding and tests the calculation.
Roster breakpoint presentation
src/components/Roster.tsx, src/styles.css
Displays the breakpoint below the roster name and adds label styling.

Inline Markdown formatting

Layer / File(s) Summary
Inline Markdown parser
src/components/MarkdownContent.tsx, src/styles.css
Adds links, bold, italic, nested emphasis, literal code spans, and inline code styling.
Inline Markdown rendering tests
src/components/MarkdownContent.test.tsx
Tests formatted content, nested markup, headings, list items, and plain-text marker cases.

Content maintenance

Layer / File(s) Summary
Release and roadmap content
src/content/info/changelog.md, src/content/info/roadmap.md
Adds historical changelog entries, updates punctuation and emphasis, and retains the roadmap item wording.

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
Loading
🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% 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 identifies the release version and date but does not describe either primary feature in the changeset. Add the main changes, such as breakpoint display and backup/restore, to the title while keeping the version and date if needed.
✅ 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.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dev

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.

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Aug 7, 2026 •

Copy link
Copy Markdown
Contributor

Deploying warmuster with  Cloudflare Pages  Cloudflare Pages

Latest commit: b5274f1
Status: ✅  Deploy successful!
Preview URL: https://4924cd6f.warmuster.pages.dev
Branch Preview URL: https://dev.warmuster.pages.dev

View logs

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 8

🧹 Nitpick comments (1)
src/components/MarkdownContent.test.tsx (1)

21-32: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Test literal code-span content.

The current code-span value has no Markdown marker. Add a case such as `**literal**` and assert that code strong is 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

📥 Commits

Reviewing files that changed from the base of the PR and between 0ec5575 and 248e0a0.

📒 Files selected for processing (15)
  • schema.md
  • src/App.tsx
  • src/components/ConfigDialog.tsx
  • src/components/MarkdownContent.test.tsx
  • src/components/MarkdownContent.tsx
  • src/components/Roster.tsx
  • src/content/info/changelog.md
  • src/content/info/privacy.md
  • src/content/info/roadmap.md
  • src/domain/backup.test.ts
  • src/domain/backup.ts
  • src/domain/lists.test.ts
  • src/domain/lists.ts
  • src/storage/listRepository.ts
  • src/styles.css

Comment thread schema.md
Comment thread src/App.tsx
Comment thread src/components/ConfigDialog.tsx Outdated
Comment thread src/components/MarkdownContent.tsx Outdated
Comment thread src/domain/backup.ts Outdated
Comment thread src/domain/backup.ts Outdated
Comment thread src/storage/listRepository.ts Outdated
Comment on lines +49 to +51
export function replaceAllLists(lists: SavedList[]): SavedList[] {
saveLists(lists);
return lists;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ 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.

Comment thread src/styles.css
@tpskowski
tpskowski merged commit 60dea1c into main Aug 7, 2026
4 checks 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