From 7a98f6662ffc6fd5a1a7281c30ab3829fe3722ec Mon Sep 17 00:00:00 2001 From: Amruth Pillai Date: Sat, 5 Sep 2026 11:40:32 -0700 Subject: [PATCH] docs: record Unicode fixes and remaining issue actions (#3452) * docs: record Unicode fixes and remaining issue actions * docs: record final Unicode PR merges --- .../plans/2026-09-05-open-issue-audit.md | 76 +++++++++++-------- 1 file changed, 45 insertions(+), 31 deletions(-) diff --git a/docs/superpowers/plans/2026-09-05-open-issue-audit.md b/docs/superpowers/plans/2026-09-05-open-issue-audit.md index 6df16ef54..cda2085e2 100644 --- a/docs/superpowers/plans/2026-09-05-open-issue-audit.md +++ b/docs/superpowers/plans/2026-09-05-open-issue-audit.md @@ -11,14 +11,16 @@ Every initial open issue was read with its comments and compared with relevant current code, history, existing PRs, or tests. Each entry states the evidence actually obtained. Passing package tests establish a baseline; they do not prove every screenshot or production incident is resolved. Reports requiring missing fixtures or deployment data remain open. Features are not classified as bugs solely because they are absent. -Issues fixed only in unmerged PRs remain open. Already-fixed issues close only with matching evidence or reporter confirmation. Duplicate closure retains a canonical open report. Merge status below reflects the final GitHub refresh. +Issues fixed only in unmerged PRs remain open. Already-fixed issues close only with matching evidence or reporter confirmation. Duplicate closure retains a canonical open report. Merge status below reflects the latest GitHub refresh. ## Progress +**Status snapshot:** 2026-09-05 18:31 UTC. Linked PRs carry subsequent issue updates. + - 115 issues triaged: the initial 114 plus new report #3433. Verification continues for reports needing exact fixtures or deployment reproduction. -- 40 implementation PRs created by this audit; all 40 are merged. Audit-only documentation PRs #3418 and #3440 are excluded and are both merged. +- 42 implementation PRs created by this audit; all 42 are merged. Audit-only documentation PRs #3418, #3440 and #3444 are excluded and are all merged. - 50 audited issues closed: 49 evidence-backed or reporter-confirmed closures plus one product-decision closure (#3272). Complete closure set: [#2650](https://github.com/amruthpillai/reactive-resume/issues/2650), [#2735](https://github.com/amruthpillai/reactive-resume/issues/2735), [#2739](https://github.com/amruthpillai/reactive-resume/issues/2739), [#2745](https://github.com/amruthpillai/reactive-resume/issues/2745), [#2804](https://github.com/amruthpillai/reactive-resume/issues/2804), [#2805](https://github.com/amruthpillai/reactive-resume/issues/2805), [#2878](https://github.com/amruthpillai/reactive-resume/issues/2878), [#3008](https://github.com/amruthpillai/reactive-resume/issues/3008), [#3017](https://github.com/amruthpillai/reactive-resume/issues/3017), [#3051](https://github.com/amruthpillai/reactive-resume/issues/3051), [#3068](https://github.com/amruthpillai/reactive-resume/issues/3068), [#3146](https://github.com/amruthpillai/reactive-resume/issues/3146), [#3174](https://github.com/amruthpillai/reactive-resume/issues/3174), [#3175](https://github.com/amruthpillai/reactive-resume/issues/3175), [#3180](https://github.com/amruthpillai/reactive-resume/issues/3180), [#3200](https://github.com/amruthpillai/reactive-resume/issues/3200), [#3247](https://github.com/amruthpillai/reactive-resume/issues/3247), [#3251](https://github.com/amruthpillai/reactive-resume/issues/3251), [#3255](https://github.com/amruthpillai/reactive-resume/issues/3255), [#3272](https://github.com/amruthpillai/reactive-resume/issues/3272), [#3285](https://github.com/amruthpillai/reactive-resume/issues/3285), [#3291](https://github.com/amruthpillai/reactive-resume/issues/3291), [#3305](https://github.com/amruthpillai/reactive-resume/issues/3305), [#3311](https://github.com/amruthpillai/reactive-resume/issues/3311), [#3312](https://github.com/amruthpillai/reactive-resume/issues/3312), [#3334](https://github.com/amruthpillai/reactive-resume/issues/3334), [#3337](https://github.com/amruthpillai/reactive-resume/issues/3337), [#3338](https://github.com/amruthpillai/reactive-resume/issues/3338), [#3339](https://github.com/amruthpillai/reactive-resume/issues/3339), [#3340](https://github.com/amruthpillai/reactive-resume/issues/3340), [#3341](https://github.com/amruthpillai/reactive-resume/issues/3341), [#3343](https://github.com/amruthpillai/reactive-resume/issues/3343), [#3344](https://github.com/amruthpillai/reactive-resume/issues/3344), [#3347](https://github.com/amruthpillai/reactive-resume/issues/3347), [#3348](https://github.com/amruthpillai/reactive-resume/issues/3348), [#3352](https://github.com/amruthpillai/reactive-resume/issues/3352), [#3359](https://github.com/amruthpillai/reactive-resume/issues/3359), [#3360](https://github.com/amruthpillai/reactive-resume/issues/3360), [#3361](https://github.com/amruthpillai/reactive-resume/issues/3361), [#3366](https://github.com/amruthpillai/reactive-resume/issues/3366), [#3368](https://github.com/amruthpillai/reactive-resume/issues/3368), [#3369](https://github.com/amruthpillai/reactive-resume/issues/3369), [#3370](https://github.com/amruthpillai/reactive-resume/issues/3370), [#3374](https://github.com/amruthpillai/reactive-resume/issues/3374), [#3380](https://github.com/amruthpillai/reactive-resume/issues/3380), [#3391](https://github.com/amruthpillai/reactive-resume/issues/3391), [#3392](https://github.com/amruthpillai/reactive-resume/issues/3392), [#3393](https://github.com/amruthpillai/reactive-resume/issues/3393), [#3401](https://github.com/amruthpillai/reactive-resume/issues/3401), [#3433](https://github.com/amruthpillai/reactive-resume/issues/3433). -- In progress: Unicode-space preservation discovered during #3093 and remaining issue reproductions. Merged paragraph-indentation PR #3448 addresses the approved whole-paragraph alternative, while #3397 remains open for literal leading spaces and tabs. Merged ordered-list-marker PR #3449 fixes the reproduced overlap, while #2751 remains open because the original missing-digit report is unproven. RTL canvas PR #3447 is owner-merged; broader exported-PDF scope keeps #3275 open. Bullet pagination (#3344), Ditgar alignment (#3068), and Arabic preview centering (#2745) are owner-merged. Reporter confirmed #3433 no longer reproduces after restarting their setup; issue closed without an attributed code fix. #3196 remains open because merged #3438 addressed a separate content-loss regression, not missing table borders. GitHub state refreshed against the current open-issue and PR inventories. +- In progress: exact original reproduction for #3093 after the separately reproduced glyph-cache correction #3450 and Unicode-space preservation #3451 merged, plus remaining issue reproductions. Merged paragraph-indentation PR #3448 addresses the approved whole-paragraph alternative, while #3397 remains open for literal leading spaces and tabs. Merged ordered-list-marker PR #3449 fixes the reproduced overlap, while #2751 remains open because the original missing-digit report is unproven. RTL canvas PR #3447 is owner-merged; broader exported-PDF scope keeps #3275 open. Bullet pagination (#3344), Ditgar alignment (#3068), and Arabic preview centering (#2745) are owner-merged. Reporter confirmed #3433 no longer reproduces after restarting their setup; issue closed without an attributed code fix. #3196 remains open because merged #3438 addressed a separate content-loss regression, not missing table borders. GitHub state refreshed against the current open-issue and PR inventories. - Baseline server/API typecheck errors in `packages/email/src/transport.ts` are fixed separately by [#3416](https://github.com/amruthpillai/reactive-resume/pull/3416). All three affected package typechecks and existing email tests pass there. | Issue | Fix PR | Result | @@ -62,6 +64,8 @@ Issues fixed only in unmerged PRs remain open. Already-fixed issues close only w | [#3275](https://github.com/amruthpillai/reactive-resume/issues/3275) | [#3447](https://github.com/amruthpillai/reactive-resume/pull/3447) | Merged head `bdb7abb3b`: fixes inherited canvas drawing direction while preserving resume and interface DOM direction. Production baseline has two Arabic-resume failures with 35,009 differing pixels and two English-resume controls passing; final eight browser cases verify exact PDF raster parity and preview centering. All 777 web tests, build, typecheck, boundaries and repository checks pass. Independent review clean; all CI checks pass, including 34 browser scenarios. Broader exported-PDF report remains open. | | [#3397](https://github.com/amruthpillai/reactive-resume/issues/3397) | [#3448](https://github.com/amruthpillai/reactive-resume/pull/3448) | Merged head `6cfb00387`: adds approved whole-paragraph/heading indentation through existing controls, with persisted levels and PDF/DOCX export. PDF reserves at least half the available block width. All 945 PDF, 68 DOCX and 177 affected web tests pass, along with build, three typechecks and boundaries. Production authoring/save/reload/export and an independent 16-case narrow-width matrix pass; LTR/RTL continuation-page tests retain text and inset. The final quote/list fix has red/green XML coverage, a fresh 68-test DOCX pass, and all hosted checks green, including 34 browser scenarios. Literal leading whitespace/tabs and existing equivalent-width overlong-word clipping remain outside this implementation; issue remains open for that residual scope. | | [#2751](https://github.com/amruthpillai/reactive-resume/issues/2751) | [#3449](https://github.com/amruthpillai/reactive-resume/pull/3449) | Merged head `7ac7fd31b`: prevents ordered-list markers from overlapping body text, with a common gutter based on digit count, resolved font size and letter spacing. All 975 PDF tests, including marker and pagination regressions, typecheck, boundaries and repository checks pass; all hosted checks are green, including 34 browser scenarios. Independent reviews produced and verified custom-letter-spacing and linear-time list-length corrections. Direct/inherited styles, fonts, digit transitions, RTL, columns and page breaks are covered. Original missing leading digit is unproven; nested RTL list flattening matches unchanged baseline and remains separate, so the issue remains open. | +| [#3093](https://github.com/amruthpillai/reactive-resume/issues/3093) | [#3450](https://github.com/amruthpillai/reactive-resume/pull/3450) | Merged head `fa14e4bc6`: isolates character metadata when different Unicode sequences share one cached font glyph. Full 981-test PDF suite passes; all six glyph-cache regressions cover bounded cache size and distinct alias identity. Typecheck, boundaries, frozen install and repository checks pass. Independent four-runtime checks preserve geometry and bounded cache size. Production browser/server sequential exports retain exact ordinary-space text and 35.12pt width. All hosted checks and reviews pass; original screenshot equivalence remains unproven. | +| [#3093](https://github.com/amruthpillai/reactive-resume/issues/3093) | [#3451](https://github.com/amruthpillai/reactive-resume/pull/3451) | Merged head `1dbc75b26`: preserves literal ideographic and nonbreaking spaces through HTML collapse and app normalization while retaining ordinary ASCII collapse. Full 1,000-test PDF suite passes, along with typecheck, boundaries, repository checks and frozen install. Independent sequence/edge/NBSP review clean. Production browser/server exports agree at 50pt, 60pt after authoring a leading ideographic space, and 35.12pt for the ASCII control. Rebased onto merged #3450; all hosted checks and reviews pass. Named/numeric entity decoding remains unchanged. | ## Product decisions @@ -77,24 +81,24 @@ Issues fixed only in unmerged PRs remain open. Already-fixed issues close only w ## Priority order -1. Finish verified regressions with isolated PRs, actual failure reproduction, and targeted regression coverage. -2. Complete OAuth compatibility and API contract fixes without weakening authentication or stored-data compatibility. -3. Restore download statistics using explicit browser download events and implement approved sharing controls. -4. Reproduce PDF/font/overflow reports using supplied fixtures; distinguish shared causes from unrelated symptoms. -5. Review existing PRs against entire issue scope and avoid duplicate fixes. -6. Resolve product architecture questions; request precise missing data for production-only incidents. +1. Obtain exact source text, resume JSON, original PDF and environment details for #3093; compare them against the two merged Unicode fixes before attributing the screenshot. +2. Obtain exact resume JSON, exported PDFs and environment details for remaining font, layout and pagination reports; compare current output before attributing them to merged partial fixes. +3. Re-test deployed OAuth registration and S3 failures with current builds and original logs, separating fixed local causes from unverified deployment reports. +4. Resolve pending product choices for JSearch restoration (#3010), local fonts (#3377) and item pagination controls (#3350), then scope the remaining visual and architecture requests. +5. Implement accepted feature scopes through separate PRs with focused verification; retain explicit compatibility and migration behavior. +6. Close remaining reports only after matching reproduction evidence, reporter confirmation, a retained canonical duplicate, or an explicit product decision. ## Current audit classifications -| Classification | Count | -| --- | ---: | -| already_fixed | 11 | -| confirmed_bug | 27 | -| duplicate | 1 | -| existing_pr | 5 | -| feature | 10 | -| needs_reproduction | 40 | -| product_decision | 21 | +| Classification | Audited | Still open | +| --- | ---: | ---: | +| already_fixed | 11 | 0 | +| confirmed_bug | 27 | 2 | +| duplicate | 1 | 0 | +| existing_pr | 5 | 0 | +| feature | 10 | 8 | +| needs_reproduction | 40 | 39 | +| product_decision | 21 | 16 | Classification describes the reported problem against the audit baseline; implementation and closure state are tracked separately. @@ -138,7 +142,7 @@ Classification describes the reported problem against the audit baseline; implem ### [#3398](https://github.com/amruthpillai/reactive-resume/issues/3398) — MCP OAuth login fails during dynamic client registration with HTTP 500 -**Assessment:** `confirmed_bug`. **Confidence:** medium. **State:** Open pending resolution/merge. +**Assessment:** `confirmed_bug`. **Confidence:** medium. **State:** Open pending deployment retest and cause confirmation; related OAuth registration fix merged in #3421. **Evidence:** @@ -148,7 +152,7 @@ Classification describes the reported problem against the audit baseline; implem **Action plan:** -- Fix #3392 schema/config chain, verify Codex and Claude registration with supported redirects, correlate deployment logs before duplicate closure. +- PR #3421 merged the related OAuth schema/config fixes. Re-test Codex/Claude registration on that version and correlate deployment logs before attributing this report to the same cause or closing it. ### [#3397](https://github.com/amruthpillai/reactive-resume/issues/3397) — Allow indentations without list @@ -166,7 +170,7 @@ Classification describes the reported problem against the audit baseline; implem - Reproduce and define literal leading-space/tab persistence and export behavior separately. Bounded PDF inset and equivalent-width overlong-word behavior are documented. -**Implementation:** [PR #3448](https://github.com/amruthpillai/reactive-resume/pull/3448). Merged head `6cfb00387`: adds approved whole-paragraph/heading indentation through existing controls, with persisted levels and PDF/DOCX export. PDF reserves at least half the available block width. All 945 PDF, 68 DOCX and 177 affected web tests pass, along with build, three typechecks and boundaries. Production authoring/save/reload/export and an independent 16-case narrow-width matrix pass; LTR/RTL continuation-page tests retain text and inset. The final quote/list fix has red/green XML coverage, a fresh 68-test DOCX pass, and all hosted checks green, including 34 browser scenarios. Literal leading whitespace/tabs and existing equivalent-width overlong-word clipping remain outside this implementation. +**Implementation:** [PR #3448](https://github.com/amruthpillai/reactive-resume/pull/3448). Merged head `6cfb00387`: adds approved whole-paragraph/heading indentation through existing controls, with persisted levels and PDF/DOCX export. PDF reserves at least half the available block width. All 945 PDF, 68 DOCX and 177 affected web tests pass, along with build, three typechecks and boundaries. Production authoring/save/reload/export and an independent 16-case narrow-width matrix pass; LTR/RTL continuation-page tests retain text and inset. The final quote/list fix has red/green XML coverage, a fresh 68-test DOCX pass, and all hosted checks green, including 34 browser scenarios. Literal leading whitespace/tabs and existing equivalent-width overlong-word clipping remain outside this implementation; issue remains open for that residual scope. **Product/scope note:** User approved whole-paragraph indentation through the existing indent controls. Leading spaces and tabs remain part of the original request and require explicit export/persistence verification. @@ -839,16 +843,16 @@ Classification describes the reported problem against the audit baseline; implem ### [#3249](https://github.com/amruthpillai/reactive-resume/issues/3249) — [Bug] multiple fonts are improperly aligned vertically -**Assessment:** `confirmed_bug`. **Confidence:** high. **State:** Open pending resolution/merge. +**Assessment:** `confirmed_bug`. **Confidence:** high. **State:** Open for remaining Ropa Sans reproduction; reproduced font-metric fix merged in #3430. **Evidence:** - Font-specific reports reproduced by multiple commenters on 5.2.3; fonts include Roboto/Roboto Condensed/IBM Plex Sans Condensed and many templates. -- Shared templates align icon/text center; use-register-fonts.ts registers font files; external textkit metric patch and source font metrics require inspection. No actual current font-matrix PDF comparison yet. -- Exact attachment rendered: /tmp/fixture-3249.pdf and PNG; Roboto Condensed profile icon visibly sits below github label. Font baseline problem still reproduced visually; root cause not yet isolated. +- Initial baseline investigation: Shared templates align icon/text center; use-register-fonts.ts registers font files; external textkit metric patch and source font metrics require inspection. No actual current font-matrix PDF comparison yet. +- Initial baseline investigation: Exact attachment rendered: /tmp/fixture-3249.pdf and PNG; Roboto Condensed profile icon visibly sits below github label. Font baseline problem still reproduced visually; root cause not yet isolated. - Current main 00a1357de exact July14 Roboto Condensed fixture reproduces high baseline; July19 attachment ALSO Roboto Condensed and contains authored margin workaround rules. Controlled IBM Plex Sans Condensed variant reproduces same metric cause. - patches/@react-pdf__textkit.patch introduced unconditional OS/2 typo metrics in dd7623f11 (#3070). Roboto/Roboto Condensed fsSelection.useTypoMetrics=false hhea1900→typo1536/2048; IBM Plex Sans Condensed false1025→780/1000. Actual PDF baseline RED3 cases; corrected flag-aware selection restores 1.7773pt/2.45pt at10pt. -- Draft worktree .worktrees/issue-3249-font-alignment retains explicit Noto Sans/Serif SC/TC/JP/KR and Source Han CJK metric exception plus intrinsic-height safeguard. Actual PDF15 tests pass including all8 configured Noto CJK fallback families at tight lineheight. +- Initial baseline investigation: Draft worktree .worktrees/issue-3249-font-alignment retains explicit Noto Sans/Serif SC/TC/JP/KR and Source Han CJK metric exception plus intrinsic-height safeguard. Actual PDF15 tests pass including all8 configured Noto CJK fallback families at tight lineheight. - Exact fixture remains1page. IBM Sans, Roboto Flex, Geist, and Ropa Sans controlled fixtures have byte-identical raster PNGs before/after. Ropa Sans historical claim not explained by this cause (hhea equals typo); do not claim universal font alignment resolved. See /tmp/3249-font-metrics.json and /tmp/current-fixture-3249-1.png vs /tmp/fixed-fixture-3249-1.png. - Published PR #3430 commit af3bb7faf; all 698 PDF tests across 58 files passed in 19.57 s, as did the final 15 targeted tests in 20.19 s, PDF typecheck, boundaries, pnpm check, frozen offline install, and web (11.58 s) and server production builds. - PR #3430 review follow-up 50bac62: actual selectable Noto Sans HK revealed missing exception (baseline23.2 vs18pt). Narrow HK regex addition restores18pt baseline and21.6pt line spacing; all16font PDF tests and699PDF tests pass, types/Biome/boundaries/frozenofflineinstall pass. fsSelection integer suggestion disproved by fontkit2.0.4 OS2 Bitfield decoder and actual font objects. @@ -911,7 +915,7 @@ Classification describes the reported problem against the audit baseline; implem ### [#3196](https://github.com/amruthpillai/reactive-resume/issues/3196) — [Bug] The table have not rows and columms -**Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open pending resolution/merge. +**Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open for original missing-border reproduction; separate imported-content fix merged in #3438. **Evidence:** @@ -1146,7 +1150,7 @@ Classification describes the reported problem against the audit baseline; implem ### [#3093](https://github.com/amruthpillai/reactive-resume/issues/3093) — [Bug] The noto serif SC font is displaying spaces incorrectly. -**Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open pending resolution/merge. +**Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open for exact original screenshot reproduction; two separately reproduced fixes published in #3450 and #3451. **Evidence:** @@ -1154,10 +1158,20 @@ Classification describes the reported problem against the audit baseline; implem - Maintainer requested text/locale/font/template and PDF on 2026-08-16; screenshot comment lacks source. - Six current actual-PDF controls (Noto Serif SC, Noto Sans SC and IBM Plex Serif; en-US/zh-CN) show no font-specific ordinary-space defect or missing non-whitespace glyphs. Locale controls have identical glyph geometry; inspected Noto Serif raster is clean. - A separate generic rich-text defect is reproduced: U+3000 ideographic spaces collapse to U+0020 across all three fonts. At 10pt, plain text 中 文 字 is 50pt wide, while the same HTML paragraph is approximately 35pt. Installed react-pdf-html whitespace normalization uses a broad JavaScript whitespace regex. Exact original issue text/template/PDF remains unavailable. +- Sequential-PDF controls exposed a second, independently reproducible baseline bug: a Unicode-only PRE document can seed Noto Serif SC cached missing-glyph metadata with U+FFFC. Later U+200C characters inserted by CJK line-breaking reuse that metadata, bypass invisible-character suppression, and add 10pt plus a NUL glyph before ordinary spaces. Same sequence reproduces on unchanged code; it is not merely a text-extraction artifact. +- Merged PR #3450 fixes the independently reproduced glyph-cache defect. Six regressions pass, covering ZWNJ/ZWJ versus visible unsupported glyphs, ligature spelling, mark metadata, sequential documents, bounded cache size and pairwise alias identity. All 981 PDF tests, typecheck, boundaries, frozen install and repository checks pass. Independent Node/browser CJS/ESM checks preserve geometry and keep cache size unchanged after 1,000 aliases. Production browser and server exports after a Unicode-only document both retain exact ordinary-space text and 35.12pt width on two successive exports. +- Merged PR #3451 preserves literal ideographic and nonbreaking spaces through rich-text normalization. All 1,000 PDF tests pass; independent ordered rendering, ASCII collapse, PRE, literal NBSP grouping and leading/trailing Unicode seam checks are clean. Production browser/server exports retain 50pt ideographic-space width, 60pt after authoring a leading ideographic space, and 35.12pt for the ordinary-space control. The branch was rebased onto merged #3450 so its final diff contained only the Unicode-space fix. +- PR #3450 test-only follow-ups cd9384992 and fa14e4bc6 add retained-cache-size and pairwise alias-identity assertions. Independent source review is clean, all six glyph-cache tests pass, and the production patch remains unchanged. All hosted checks pass on fa14e4bc6. **Action plan:** -- Implement and review a separate scoped ideographic-space preservation fix with actual-PDF baseline/green and ordinary ASCII whitespace controls. Reference this issue without closing it; the generic Unicode-space defect is not proven to match the original screenshot. +- Keep original screenshot report open without an exact matching fixture. Obtain its source text, resume JSON, original PDF and environment details; named/numeric entity decoding is not broadened by these fixes. + +**Implementation:** [PR #3450](https://github.com/amruthpillai/reactive-resume/pull/3450). Merged head `fa14e4bc6`: isolates character metadata when different Unicode sequences share one cached font glyph. Full 981-test PDF suite passes; all six glyph-cache regressions cover bounded cache size and distinct alias identity. Typecheck, boundaries, frozen install and repository checks pass. Independent four-runtime checks preserve geometry and bounded cache size. Production browser/server sequential exports retain exact ordinary-space text and 35.12pt width. All hosted checks and reviews pass; original screenshot equivalence remains unproven. + +**Additional implementation:** [PR #3451](https://github.com/amruthpillai/reactive-resume/pull/3451). Merged head `1dbc75b26`: preserves literal ideographic and nonbreaking spaces through HTML collapse and app normalization while retaining ordinary ASCII collapse. Full 1,000-test PDF suite passes, along with typecheck, boundaries, repository checks and frozen install. Independent sequence/edge/NBSP review clean. Production browser/server exports agree at 50pt, 60pt after authoring a leading ideographic space, and 35.12pt for the ASCII control. Rebased onto merged #3450; all hosted checks and reviews pass. Named/numeric entity decoding remains unchanged. + +**Related PRs:** [#3450](https://github.com/amruthpillai/reactive-resume/pull/3450), [#3451](https://github.com/amruthpillai/reactive-resume/pull/3451) ### [#3090](https://github.com/amruthpillai/reactive-resume/issues/3090) — [Bug] Automatic extension to new page does not create a new page @@ -1665,14 +1679,14 @@ Classification describes the reported problem against the audit baseline; implem - Report Rhyhorn 5.0.10 numbered list digits truncated on export, screenshot only. Current React PDF rich-text list renderer replaced Chromium pipeline. - Later list fixes #3178/#3236/#3242 concern page-break markers; not proof of original multi-digit marker-width clipping fixed. - Original missing leading digit in 10/11 was not reproduced: digits remain present in extracted PDF text and raster output. Current renderer instead has a verified related defect: ordered markers overlap body text by 2.395pt for 10–99 and 7.869pt for 100–102 with Helvetica at 10pt; Noto Serif SC and Courier also reproduce. -- Investigating ordered-only intrinsic marker sizing with a uniform list gutter, preserving list pagination and supported marker font-size/row-gap overrides. Semantic CSS does not currently permit width/min-width/max-width or flex-basis on list markers. +- Merged PR #3449 implements ordered-marker sizing and a uniform gutter, preserving pagination and supported font-size, row-gap and letter-spacing styles. Original missing-digit equivalence remains unproven. - Independent review found a supported letter-spacing style caused a 5.9pt alignment step from item 1 to 10; corrected common gutter passes direct and inherited spacing controls with identical body x47.333332. Existing nested RTL list flattening produces byte-identical extracted text and geometry on baseline and fix. **Action plan:** - Keep historical missing-digit report open until exact source data establishes equivalence. Existing nested RTL flattening remains separately documented. -**Implementation:** [PR #3449](https://github.com/amruthpillai/reactive-resume/pull/3449). Merged head `7ac7fd31b`: prevents ordered-list markers from overlapping body text, with a common gutter based on digit count, resolved font size and letter spacing. All 975 PDF tests, including marker and pagination regressions, typecheck, boundaries and repository checks pass; all hosted checks are green, including 34 browser scenarios. Independent reviews produced and verified custom-letter-spacing and linear-time list-length corrections. Direct/inherited styles, fonts, digit transitions, RTL, columns and page breaks are covered. Original missing leading digit is unproven; nested RTL list flattening matches unchanged baseline and remains separate. +**Implementation:** [PR #3449](https://github.com/amruthpillai/reactive-resume/pull/3449). Merged head `7ac7fd31b`: prevents ordered-list markers from overlapping body text, with a common gutter based on digit count, resolved font size and letter spacing. All 975 PDF tests, including marker and pagination regressions, typecheck, boundaries and repository checks pass; all hosted checks are green, including 34 browser scenarios. Independent reviews produced and verified custom-letter-spacing and linear-time list-length corrections. Direct/inherited styles, fonts, digit transitions, RTL, columns and page breaks are covered. Original missing leading digit is unproven; nested RTL list flattening matches unchanged baseline and remains separate, so the issue remains open. **Related PRs:** [#3178](https://github.com/amruthpillai/reactive-resume/pull/3178), [#3236](https://github.com/amruthpillai/reactive-resume/pull/3236), [#3242](https://github.com/amruthpillai/reactive-resume/pull/3242), [#3449](https://github.com/amruthpillai/reactive-resume/pull/3449) @@ -1827,7 +1841,7 @@ Classification describes the reported problem against the audit baseline; implem ### [#2684](https://github.com/amruthpillai/reactive-resume/issues/2684) — [Bug] S3 uploads fail with 500 error despite healthy S3 connection -**Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open pending resolution/merge. +**Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open awaiting reporter confirmation or original S3 error; unsupported-ACL fix merged in #3432. **Evidence:**