-
Notifications
You must be signed in to change notification settings - Fork 11
Troubleshooting
This page contains guides for troubleshooting common issues and using diagnostic tools.
- π Jump to Rem by ID - User Guide
- π Pre-compute Card Priorities - Error Guide
- π§Ή Rogue CardPriority Tags Sanitization
- π PDF Highlight Repair Tool
- π Page History Diagnostic & Cleanup (Debug Widget)
The "Jump to Rem by ID" feature allows you to quickly navigate to any rem in your knowledge base using its RemId. This is especially useful when investigating errors from the pre-computation process or debugging issues with specific rems.
-
Press
Ctrl+/(orCmd+/on Mac) -
Type:
Jump to Rem by ID - Enter the RemId in the popup dialog
- Press Enter or click "Jump to Rem"
- Done! The rem opens automatically
Example:
Ctrl+P β "Jump to Rem" β tfhQYD3Q2wDw4VWUH β Enter β β
When you run "Pre-compute Card Priorities" and see errors:
Step 1: Check the console for error details
Error 15/268:
RemId: tfhQYD3Q2wDw4VWUH β Copy this
Reason: Processing exception
Step 2: Jump to the rem
-
Ctrl+/β "Jump to Rem by ID" - Paste:
tfhQYD3Q2wDw4VWUH - Press Enter
Step 3: Investigate
- View the rem's content
- Check if it's corrupted
- Fix any issues
- Re-run pre-computation
When you have a list of failed RemIds:
=== FAILED REM IDs ===
abc123xyz
def456uvw
ghi789rst
Quick workflow:
-
Ctrl+/β "Jump to Rem by ID" - Paste first RemId β Enter
- Investigate the rem
- Repeat for next RemId (command stays in recent commands)
Pro tip: The command stays in your command history, so just press Ctrl+P and it will be at the top of your recent commands!
When you see "Rem not found" errors:
Use Jump to Rem to confirm:
- If popup shows "Rem not found" β The rem was deleted (orphaned)
- If rem opens β The rem exists (error was temporary)
When you run the command, a popup appears with:
βββββββββββββββββββββββββββββββββββββββ
β Jump to Rem by ID β
β β
β Enter RemId: β
β βββββββββββββββββββββββββββββββ β
β β e.g., tfhQYD3Q2wDw4VWUH β β
β βββββββββββββββββββββββββββββββ β
β β
β [Cancel] [Jump to Rem] β
β β
β π‘ Tip: Find RemIds in the β
β pre-computation error log β
βββββββββββββββββββββββββββββββββββββββ
- β Auto-focused input - Start typing immediately
- β Enter key support - Press Enter to submit
- β Error messages - Clear feedback if RemId is invalid
- β Cancel button - Close without action
- β Dark mode - Adapts to your theme
A RemId is a unique identifier for every rem in RemNote. It looks like this:
tfhQYD3Q2wDw4VWUH
-
Pre-computation error logs (Console, F12)
Error 15/268: RemId: tfhQYD3Q2wDw4VWUH -
URL bar when viewing a rem
https://www.remnote.com/document/tfhQYD3Q2wDw4VWUH -
Developer tools (for debugging)
const rem = await plugin.focus.getFocusedRem(); console.log(rem._id); // Prints RemId
π Searching for rem: tfhQYD3Q2wDw4VWUH...
β
Found rem: "What is the capital of France?"
π Opening rem in RemNote...
Result:
- Popup closes automatically
- Rem opens in RemNote
- Toast notification: "β Found: What is the capital..."
π Searching for rem: tfhQYD3Q2wDw4VWUH...
β Rem not found: tfhQYD3Q2wDw4VWUH
π‘ Possible reasons:
β’ The rem was deleted
β’ The RemId is incorrect
β’ The rem is from a different knowledge base
Result:
- Error message shown in popup: "Rem not found: tfhQYD3Q2wDw4VWUH"
- Popup stays open so you can try again
- Toast notification: "β Rem not found"
Cause: You clicked "Jump to Rem" without entering anything
Solution: Enter a RemId in the input field
Cause: The rem with this ID doesn't exist in your knowledge base
Possible reasons:
- The rem was deleted
- You copied the RemId incorrectly
- The rem is in a different knowledge base
- Typo in the RemId
Solutions:
- Double-check you copied the full RemId
- Verify you're in the correct knowledge base
- Check if the rem was recently deleted
- Try another RemId from your error list
Cause: Unexpected error during processing
Solutions:
- Try again (might be temporary)
- Reload the plugin (Settings β Plugins β Toggle off/on)
- Check console for detailed error (F12)
- Report bug if error persists
When you run the pre-computation, you'll now see an enhanced error report like this:
β
Pre-computation complete!
β’ Total rems processed: 41010
β’ Newly tagged: 40948
β’ Preserved manual priorities: 62
β’ Errors: 268
β’ Error breakdown:
- Rem not found: 245
- Processing exceptions: 23
β’ Total time: 443s
β’ Cache build time: 142s
Check console for detailed error log.
Future startups will be much faster!
What it means: The card references a Rem that no longer exists in your knowledge base.
Why this happens:
- The Rem was deleted but the card still exists
- Database inconsistency
- The card's parent Rem was removed
Impact:
- β The card was NOT tagged with cardPriority
- β No priority was assigned
- The card may not appear correctly in the queue
How to fix:
The plugin now handles this automatically! When you run "Update all inherited Card Priorities", if any "Rem not found" errors are found, it will immediately offer to clean them up:
- A summary confirms how many orphan cards were found and across how many missing Rems.
- The full list is shown in pages of 25 (so the dialog always fits on screen).
- Each page asks for your confirmation before proceeding β you can cancel at any point.
- Confirmed orphan cards are removed in parallel batches of 25 with live progress toasts.
Each candidate is double-checked with a fresh live lookup before removal, so cards belonging to Rems that were only transiently unavailable are never deleted.
Tip
If you prefer to investigate manually first, you can cancel the cleanup dialog and use the "Jump to Rem by ID" command (Ctrl+/) to inspect individual RemIds from the console log.
What it means: An unexpected error occurred while processing the Rem.
Common causes:
- Permission issues
- Corrupted Rem data
- Network timeout during processing
- Bug in the code logic
Impact:
- β The card was NOT tagged with cardPriority
- β No priority was assigned
- The Rem needs manual investigation
How to fix:
- Check the detailed error log in console
- Look for the specific error message
- Try to open the Rem manually in RemNote
- If the Rem is accessible, you can manually set priority using
Alt+P - Report the error details if it seems like a plugin bug
After pre-computation, open your browser's Developer Console (F12) and look for:
=== DETAILED ERROR LOG ===
Total errors: 268
Error 1/268:
RemId: abc123xyz
Reason: Rem not found - may have been deleted
Error 2/268:
RemId: def456uvw
Reason: Exception during processing: Cannot read property 'text' of undefined
Details: [error object]
...
At the end of the error log, you'll find:
=== FAILED REM IDs (for investigation) ===
abc123xyz
def456uvw
ghi789rst
...
=== END FAILED REM IDS ===
You can copy this list and:
- Search for these Rems in RemNote
- Check if they still exist
- Manually assign priorities if needed
After fixing issues:
- Run pre-computation again
- Check if error count decreased
- Most "Rem not found" errors should auto-resolve after card cleanup
- Error count = Rems that failed to process
- Newly tagged = Rems that were successfully tagged
- < 100 errors out of 10,000+ rems: Normal, likely deleted/orphaned cards
- > 1,000 errors: May indicate a systemic issue, investigate
- All errors are "exceptions": Likely a plugin bug, report it
A "rogue" CardPriority tag is the powerup sitting on a rem that is not a flashcard β a tag slot (SubtΓtulo, Autor, β¦), a property value, a reading-log entry, a chapter heading, or a plain list item. Rogue tags don't affect your real flashcards, but they clutter the knowledge base and inflate the "rems processed" counts.
Where they came from (fixed in v0.2.272). The inheritance cascade used to walk every descendant of a rem whose priority changed and tag all of them, regardless of whether they had cards. As of v0.2.272 the cascade only touches descendants that genuinely own flashcards, so no new rogue tags are created. The sanitizer below cleans up tags created by older versions.
Use the global command to scan your entire knowledge base and remove rogue tags in bulk:
-
Press
Ctrl+/(orCmd+/on Mac) -
Type:
Sanitize Rogue CardPriority Tags - Press Enter
You'll get a batch confirmation dialog (in chunks of 20) listing the rems about to be cleaned, then a summary toast β including how many legitimate anchors were preserved.
To inspect and clean a single rem and its descendants:
- Navigate to the rem in the editor.
- Type
/debugto open the Debug Widget below the rem. - Under Card Priority Powerup, click Sanitize Rogue Tags. This runs the same authoritative scan as the global command, scoped to this rem's subtree.
Tip
Before cleaning, click Dump Slot Structure (same section of the Debug Widget) to print a console.table of every node carrying CardPriority and/or cards β with card counts, source, and a per-node classification (ok-card / inheritance-anchor / rogue-no-card). This lets you confirm exactly what will be removed and what will be kept.
Detection is authoritative: it uses the global card index (plugin.card.getAll()) β not rem.getCards(), which under-reports cards on paused/disabled rems β to decide whether a tagged rem owns any flashcards. A rem with cards is always left alone. A rem with no cards is then classified by the powerup's source:
| Source | Meaning | Action |
|---|---|---|
inherited / default / (empty)
|
A cascade artifact β the tag was propagated/defaulted, not set on purpose. | Rogue β offered for bulk removal. |
manual |
You set this priority yourself (e.g. a priority anchor on a folder/document). | Preserved β never offered for deletion. |
incremental |
Left behind when an IncRem was dismissed, so its descendants keep inheriting its priority (second only to manual in importance). |
Preserved β never offered for deletion. |
Card-less manual and incremental tags are legitimate inheritance anchors. The sanitizer reports how many it preserved (and lists them in the console) but never deletes them. To remove one deliberately, use the Clear Card Priority button in the Priority widget.
- The sanitizer never touches a rem that owns flashcards (verified against the global card index, which counts cards on paused and disabled rems too).
- Legitimate inheritance anchors (
manual/incrementalsource, no cards) are preserved and are not offered for deletion. - Detection is read-only; nothing is written until you confirm a removal batch.
In some cases, clicking a PDF highlight pin in RemNote does not scroll the PDF to the correct page β it either does nothing or jumps to the wrong location. This section explains why that happens and how to use the plugin's built-in Debug PDF and Repair PDF tools to diagnose and fix it.
Every PDF highlight in RemNote is stored as a rem with a PDFHighlight powerup and a PdfId slot that points back to the PDF document rem. Navigation works by looking up this slot to find the PDF, then reading the highlight's position data.
The structure under a healthy PDF looks like this:
PDF Document [UploadedFile, Document]
βββ Highlights [PDF Highlight Section, Automatically Sort] β canonical container
βββ Page 08 [PDFPageNumber]
βββ "Some highlighted text..." [PDFHighlight]
βββ PDF β internal slot rem (PdfId)
βββ Data β internal slot rem (position JSON)
Highlights can break in two ways:
-
Wrong tree structure β Page nodes (
PDFPageNumber) end up directly under the PDF root instead of under theHighlightscontainer, or they land under a container that lacks the PDF Highlight Section tag (a tag that only RemNote's PDF engine can apply). RemNote cannot resolve the highlight β PDF path in either case. -
Wrong
PdfIdslot β ThePdfIdslot on aPDFHighlightrem points to a stale or incorrect rem ID. This is the root cause of pin navigation failures even when the tree structure looks correct.
Both issues can be introduced by manual reorganization of a PDF rem, restoring from a backup, or merging knowledge bases.
- Open the rem you want to inspect in the RemNote editor (the PDF document rem itself, or any rem that has the PDF as a source).
- Type
/debugin the editor to open the Debug Widget below the rem. - Scroll to the PDF Structure Debug section at the bottom of the widget.
- Click Debug PDF.
This scans every descendant of the PDF rem and prints a full annotated tree to the browser console (F12 β Console tab). For each PDFHighlight rem, it shows:
- Its
PdfIdvalue β should match the PDF document rem's ID. - Its
Dataslot (abbreviated) β contains the page number and position. - All powerups and tags β lets you spot misclassified or missing nodes.
β’ "Highlights" (clhAqggSSLsPnQRPv) #tags:[Automatically Sort] β β οΈ missing Section tag
β’ "Page 13" (R5YpgMβ¦) [PDFPageNumber]
β’ "IV) Ondas comβ¦" (BUOFZ2K2β¦) [PDFHighlight] PdfId:M2WPKqmgPTsrGYPZH
β’ "Highlights" (O2ZLmJUβ¦) #tags:[PDF Highlight Section, Automatically Sort] β β
canonical
β’ "Page 08" (Ly1DIlβ¦) [PDFPageNumber]
β’ "Esta normaβ¦" (D5tTlvFTβ¦) [PDFHighlight] PdfId:M2WPKqmgPTsrGYPZH
After diagnosing, click Repair PDF. The tool runs three independent checks and lists any issues it finds before asking for confirmation:
| Issue | What the tool does |
|---|---|
Page nodes (PDFPageNumber) sitting directly under the PDF root |
Moves them into the canonical Highlights container |
Page nodes inside a broken Highlights container (no Section tag) |
Moves them into the canonical Highlights container |
PdfId slots pointing to the wrong rem |
Updates each to the correct PDF rem ID |
PDF root missing the Document powerup |
Adds the Document powerup |
Important
The Repair PDF tool can only move pages into a canonical Highlights container β one that carries the PDF Highlight Section tag, which is applied exclusively by RemNote's own PDF engine and cannot be added programmatically. If no canonical container exists yet (e.g., the PDF has never had a highlight created through the normal PDF viewer), the tool will tell you what to do.
Scenario: You have a PDF with broken highlight pins.
Step 1 β Create one new highlight (if no canonical container exists)
Open the PDF in RemNote's PDF viewer and make any single highlight anywhere. This forces RemNote to create the canonical Highlights container with the correct PDF Highlight Section tag. You can delete this test highlight afterwards if you like.
Tip
Skip this step if the Debug PDF output already shows a Highlights container tagged with PDF Highlight Section, Automatically Sort. The canonical container already exists.
Step 2 β Run Repair PDF
- Navigate to the PDF rem (or any rem that has it as a source).
- Type
/debugβ open the Debug Widget. - Click Repair PDF.
- Review the list of detected issues in the confirmation dialog.
- Click OK to proceed.
The tool moves all misplaced page nodes to the canonical container and fixes any PdfId slots in a single pass. A toast reports the result, and the console log shows each move and PdfId fix for auditing.
Step 3 β Verify
Click Debug PDF again and confirm:
- All
Highlightscontainers now have#tags:[PDF Highlight Section, Automatically Sort]. - All
PDFHighlightrems show the correctPdfId(matching the PDF document rem ID). - Clicking a highlight pin in the PDF viewer navigates to the right page.
- It does not delete the now-empty broken
Highlightscontainer (you can delete it manually). - It cannot add the
PDF Highlight Sectiontag programmatically β that tag is system-managed. - It does not alter the position data stored in each highlight's
Dataslot.
Up to v0.2.257, addPageToHistory β the function that records reading sessions into the per-(IncRem, PDF) page-history storage β had an "auto-compute" code path that read the queue's review start-time anchor (incremReviewStartTimeKey) and stamped a duration onto every page-history entry it wrote, even when the caller was a bookmark or highlight event rather than a session boundary. The anchor was set when the queue picked an IncRem and only cleared on manual reschedule, so every subsequent bookmark in the same review compounded a longer and longer duration from the same starting point.
The visible symptom was that the Total Time on the PDF Control panel drifted away from the authoritative Total Time in Repetition History β in extreme cases by more than 5Γ (e.g. 9h 58m vs 1h 47m on the same rem). The fix in v0.2.258 stops new entries from being inflated; the tools below let you inspect and clean up the historical data already written under the old behavior.
-
Page History Dump β anytime you want to inspect the raw per-entry contents of
incremental_page_history_<remId>_<pdfRemId>storage for a given Incremental (or Dismissed) Rem, e.g. to investigate a discrepancy between PDF Control and Repetition History totals, or to confirm that recent reviews were recorded correctly. - Clean Inflated Page-History Durations β when the dump (or PDF Control vs Repetition History) shows that this rem has inflated entries to strip.
- Clean Inflated Page-History β Global Scan β once, after upgrading to v0.2.258, to clean up every IncRem and Dismissed rem in the knowledge base in a single pass.
- Navigate to the rem you want to inspect (any Incremental or Dismissed rem with PDF sources).
- Type
/debugin the editor to insert the Debug Widget below the rem. - Scroll to the relevant section.
Click Dump Page History. For every PDF source on the focused rem, the widget will:
- Print the raw storage value and the parsed
PageHistoryEntry[]to the console (F12 β Console). - Render a per-PDF summary card in the widget showing:
-
Total entries vs entries with
sessionDuration > 0. -
Sum of durations vs
getReadingStatisticstotal (these should always match; mismatch indicates a parsing bug). - Min/Max duration and count of entries hitting the 4h cap (14400 s).
- The exact storage key (
incremental_page_history_<remId>_<pdfRemId>).
-
Total entries vs entries with
- A
<details>toggle exposes the full raw JSON of every entry.
This is purely diagnostic β nothing is mutated.
The detection rule applied to every entry in the focused rem's page-history:
| Entry timestamp | Has matching rep in incRem.history? |
Action |
|---|---|---|
| < 2026-02-04 UTC | β | Keep (always) |
| β₯ 2026-02-04 UTC | yes (Β±5 s timestamp, Β±2 s duration) | Keep |
| β₯ 2026-02-04 UTC | no |
Strip sessionDuration
|
Important
The 2026-02-04 cutoff is the date when the Dismissed powerup started preserving reviewTimeSeconds on its History slot. Reps recorded before that date may have lost their reviewTimeSeconds value on dismissal β meaning page-history is sometimes the only surviving record of legitimate review time. Entries with timestamps before the cutoff are therefore always preserved, even if no matching rep can be found.
Workflow:
- Click Preview. The widget shows per-PDF before/after totals, count of entries to strip vs keep, and collapsible lists of each entry with its decision reason. The same data is logged to the console.
- Verify the proposed changes β pay particular attention to any PDF where the After total drops to zero (this is correct when the rem only has bookmark-event entries with no actual reps recorded).
- Click Apply. The widget rewrites the affected
incremental_page_history_*keys, leaving every other field on each entry (page,timestamp,highlightId) intact so bookmark navigation continues to work.
Only sessionDuration is modified. The IncRem/Dismissed History slot β which is authoritative for review time β is never touched.
This variant enumerates every IncRem and Dismissed rem in the knowledge base via the powerup tag lookup and runs the same per-rem analysis on each. Designed to be run once, immediately after upgrading.
Workflow:
- Click Scan All. Progress is shown in the widget; the console prints a full per-rem breakdown of detected inflation. For a knowledge base with a few thousand IncRems the scan typically takes 30β90 seconds.
- Review the summary card: scanned rems, affected rems, total entries to strip, total inflated time. Each affected rem expands to show its PDFs and per-PDF before/after totals.
- (Recommended) Spot-check one or two affected rems by opening Debug on them individually and running the per-rem Preview β confirm the global scan's numbers match.
- Click Apply to All. A confirmation dialog summarizes the total impact before any writes happen.
- The
IncrementalRep[]History slot on the Incremental or Dismissed powerup β Repetition History continues to display the samereviewTimeSecondsit always did. -
highlightId,page, ortimestampfields on page-history entries β bookmark pin navigation and the Reading History list view are unaffected. - Entries with timestamps before the 2026-02-04 cutoff.
- Entries whose
sessionDurationmatches a rep'sreviewTimeSeconds(within Β±2 s) at a matching timestamp (within Β±5 s) β these are legitimate end-of-session records written by the queue Next button or the Editor Review Timer.
For a given rem, the Total Time in PDF Control and the Total Time in Repetition History should now agree (or PDF Control should be a strict subset, in cases where some legitimate sessions were recorded against a different PDF source on the same IncRem). If they still diverge significantly, run Page History Dump on the rem and inspect the remaining entries against the History slot to identify the discrepancy.
- 1. Getting Started
- 2. The Philosophy: What is Incrementalism?
- 3. The Core Loop
- 4. Mastering the Queue: Prioritization & Sorting
- 5. Advanced Workflows & Use Cases
- 6. Essential References
- 7. FAQ & Troubleshooting
- 8. Changelog
- 9. Contributing to the Wiki