pediatric-ai-scribe-v3/public/js
Daniel 8a6a4df121 refactor: citations are a markdown-it token, and the numbers you see are display order
The old renderer rewrote the text: it found "[n]" with regexes, renumbered
them, and swapped the result back in — which broke inside `arr[2][1]`, inside
HTML attributes, and whenever two turns disagreed about what "[3]" meant. It
also had a fallback markdown renderer of its own for when the rewrite
produced something markdown-it would not parse.

Now "[n]" is an inline rule registered on the same markdown-it instance that
renders everything else. The parser decides what is prose and what is code, a
link, or a URL, so the rule never sees "[1]" inside a code span, and it steps
aside for "[1](url)". Math is two more rules on the same parser instead of a
regex pre-pass, so "$" inside a URL is no longer math.

Identity vs display: the stored "[n]" and each card's id are the source's
identity (sourceNumber) and are never rewritten. The number a reader sees is
the order of first appearance, computed at render time from the token stream
(orderSourcesByCitation), so "one, then seven" cannot happen and a saved chat
re-opens pointing at the same cards it was saved with. Stored messages and
sources are untouched; export and the modal resolve by identity.

Translated HTML gets the same links through a TreeWalker over text nodes
(linkCitationsInHtml) rather than a regex over markup.

Deleted: renderCitationLinks, normalizeAdjacentCitationClusters, the
fallback renderer (fallbackMarkdown/renderMixedList/renderFallbackTable),
renderLatexText, CITATION_SCAN. Tests that asserted rewritten text now assert
token output; harnesses that render for real are given a parser.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dv6sqaY6Vq3ChZHMem3cnU
2026-09-13 04:41:40 +02:00
..
admin fix: My Resources uses the image model you chose for it, and says so on save 2026-09-13 02:37:57 +02:00
assistant refactor: citations are a markdown-it token, and the numbers you see are display order 2026-09-13 04:41:40 +02:00
bedside
calculators
notes feat: retire Learning Hub 2026-09-12 20:14:20 +02:00
wellVisit
accountBoundary.js fix: trim the account-boundary message to what a reader needs 2026-09-12 18:36:37 +02:00
admin-docs.js docs: merge the duplicate pairs and correct them against the running app 2026-09-12 04:57:35 +02:00
admin.js feat: a revoked invitation can be deleted 2026-09-13 03:30:05 +02:00
app.js fix: a newly added model reaches every picker, including the user-facing ones 2026-09-12 17:46:18 +02:00
audioBackup.js feat: a retried transcript goes back to the tab the audio came from 2026-09-11 12:39:50 +02:00
auth.js fix: the account boundary explains itself instead of reading as an SSO failure 2026-09-12 18:24:14 +02:00
authFetch.js feat: sign in with a code emailed to you, offered beside the password 2026-09-11 20:12:03 +02:00
calc-math.js
calculators.js
chartReview.js
clinicalAssistant.js refactor: citations are a markdown-it token, and the numbers you see are display order 2026-09-13 04:41:40 +02:00
diagrams.js
documents.js
drugs-loader.js
e2e-bootstrap.js
ed-encounters.js feat: a retried transcript goes back to the tab the audio came from 2026-09-11 12:39:50 +02:00
encounters.js
extensions.js fix: image Done state, chat titles that keep whole words, and readable extension cards 2026-09-10 06:44:22 +02:00
generatedImages.js feat: PubMed search for My Resources, and an image tool that actually fires 2026-09-11 16:47:08 +02:00
hospitalCourse.js
liveEncounter.js feat: a retried transcript goes back to the tab the audio came from 2026-09-11 12:39:50 +02:00
memories.js
milestones.js
milestonesData.js
myResources.js feat: a theme is shown by a sample deck you download, not a picture 2026-09-12 22:24:05 +02:00
nextcloud.js fix: "Sign in with Nextcloud" opens the sign-in page 2026-09-12 21:36:51 +02:00
notes.js
peGuide.js
recordingModules.js feat: a retried transcript goes back to the tab the audio came from 2026-09-11 12:39:50 +02:00
secureStorage.js
shadess.js feat: a retried transcript goes back to the tab the audio came from 2026-09-11 12:39:50 +02:00
sickVisit.js feat: a retried transcript goes back to the tab the audio came from 2026-09-11 12:39:50 +02:00
soap.js feat: a retried transcript goes back to the tab the audio came from 2026-09-11 12:39:50 +02:00
speechRecognition.js
transcriptionSettings.js
ui-state.js
voiceDictation.js feat: a retried transcript goes back to the tab the audio came from 2026-09-11 12:39:50 +02:00
voicePreferences.js
wellVisit.js