From f89acb436865cf536fffed2b23d4d72a7ecff0db Mon Sep 17 00:00:00 2001 From: Amruth Pillai Date: Sat, 12 Sep 2026 11:18:32 +0200 Subject: [PATCH] chore: migrate repository links to reactive-resume/reactive-resume --- .github/.well-known/funding.json | 4 +- .github/ISSUE_TEMPLATE/config.yml | 4 +- .orchestration/plan-27a-diagnostic.md | 2 +- AGENTS.md | 2 +- Dockerfile | 2 +- README.md | 28 +- apps/server/src/openapi/generator.ts | 2 +- apps/server/src/static/web.ts | 4 +- apps/web/public/funding.json | 4 +- .../input/github-stars-button.test.tsx | 2 +- .../components/input/github-stars-button.tsx | 2 +- apps/web/src/components/ui/copyright.test.tsx | 2 +- apps/web/src/components/ui/copyright.tsx | 2 +- .../src/dialogs/resume/import.dialog.test.tsx | 2 +- apps/web/src/features/homepage/page.tsx | 2 +- .../web/src/features/homepage/site-footer.tsx | 2 +- apps/web/src/libs/seo.ts | 2 +- .../routes/_home/-sections/footer.test.tsx | 2 +- .../web/src/routes/_home/-sections/footer.tsx | 6 +- .../$resumeId/-components/pan-focus.test.ts | 2 +- .../$resumeId/-components/pan-focus.ts | 2 +- .../-sidebar/right/sections/information.tsx | 8 +- compose.yml | 2 +- docs/agents/container-publishing.md | 35 +- docs/changelog/index.mdx | 906 +++++++++--------- docs/contributing/development.mdx | 4 +- docs/contributing/translations.mdx | 4 +- docs/docs.json | 6 +- docs/execution/approved-issue-plans-ledger.md | 98 +- docs/getting-started.mdx | 8 +- docs/getting-started/quickstart.mdx | 4 +- .../guides/accessing-the-previous-version.mdx | 2 +- docs/guides/checking-service-status.mdx | 2 +- docs/legal/license.mdx | 2 +- docs/research/europass/README.md | 12 +- docs/self-hosting/docker.mdx | 8 +- docs/self-hosting/examples.mdx | 6 +- docs/self-hosting/migration.mdx | 2 +- docs/spec.json | 2 +- .../plans/2026-07-28-seo-aeo-performance.md | 4 +- ...antic-css-reference-and-docs-generation.md | 2 +- .../plans/2026-09-05-open-issue-audit.md | 572 +++++------ docs/use-cases/free-resume-builder.mdx | 2 +- docs/use-cases/open-source-resume-builder.mdx | 4 +- .../privacy-focused-resume-builder.mdx | 2 +- package.json | 2 +- .../api/src/features/statistics/service.ts | 2 +- packages/dsh-plugin/README.md | 2 +- packages/dsh-plugin/package.json | 6 +- .../src/semantic/item-header-binding.test.tsx | 2 +- plans/01-account-login-recovery.md | 2 +- plans/02-hosted-v4-account-recovery.md | 4 +- plans/03-mcp-registration.md | 2 +- plans/04-ai-provider-compatibility.md | 2 +- plans/05-ai-provider-migrations.md | 2 +- plans/06-image-storage-delivery.md | 2 +- plans/07-aio-deployment.md | 2 +- plans/08-root-public-resume.md | 2 +- plans/09-external-version-backup.md | 2 +- plans/10-legacy-link-routing.md | 4 +- plans/11-job-search-policy.md | 2 +- plans/12-preview-and-export-failures.md | 2 +- plans/13-font-glyph-and-spacing.md | 2 +- plans/14-rtl-export-layout.md | 4 +- plans/15-picture-fitting-and-style.md | 2 +- plans/16-imported-table-borders.md | 6 +- plans/17-list-and-skill-pagination.md | 2 +- plans/18-preview-export-geometry.md | 2 +- plans/19-literal-rich-text-whitespace.md | 2 +- plans/20-section-restoration.md | 2 +- plans/21-section-heading-visibility.md | 2 +- plans/22-skill-keyword-presentation.md | 2 +- plans/23-pagination-controls.md | 2 +- plans/24-date-layout.md | 2 +- plans/25-entry-company-logos.md | 2 +- plans/26-secondary-color.md | 2 +- plans/27-offline-fonts.md | 2 +- plans/28-basics-custom-styles.md | 2 +- plans/29-onyx-profile-header.md | 2 +- plans/30-ats-export-evaluation.md | 2 +- plans/31-document-accessibility.md | 2 +- plans/32-section-date-sorting.md | 2 +- plans/33-europass-template.md | 2 +- plans/34-gengar-skill-layout.md | 2 +- plans/35-resume-import-errors.md | 2 +- plans/ORCHESTRATOR.md | 2 +- plans/PR-HANDOFF.md | 4 +- server.json | 2 +- 88 files changed, 943 insertions(+), 936 deletions(-) diff --git a/.github/.well-known/funding.json b/.github/.well-known/funding.json index 1b1c2c82e..10475f0cb 100644 --- a/.github/.well-known/funding.json +++ b/.github/.well-known/funding.json @@ -20,8 +20,8 @@ "url": "https://rxresu.me" }, "repositoryUrl": { - "url": "https://github.com/reactive-resume/app", - "wellKnown": "https://github.com/reactive-resume/app/blob/main/.github/.well-known/funding-manifest-urls" + "url": "https://github.com/reactive-resume/reactive-resume", + "wellKnown": "https://github.com/reactive-resume/reactive-resume/blob/main/.github/.well-known/funding-manifest-urls" }, "licenses": ["spdx:MIT"], "tags": ["data", "design", "productivity", "resume-builder"] diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 862552ba2..029dc0f54 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,8 +1,8 @@ blank_issues_enabled: false contact_links: - name: Questions and support - url: https://github.com/reactive-resume/app/discussions/categories/q-a + url: https://github.com/reactive-resume/reactive-resume/discussions/categories/q-a about: Get help with setup, configuration, and using Reactive Resume. - name: Security vulnerability - url: https://github.com/reactive-resume/app/security/advisories/new + url: https://github.com/reactive-resume/reactive-resume/security/advisories/new about: Report security vulnerabilities privately. diff --git a/.orchestration/plan-27a-diagnostic.md b/.orchestration/plan-27a-diagnostic.md index 0a3ddccbb..a21098559 100644 --- a/.orchestration/plan-27a-diagnostic.md +++ b/.orchestration/plan-27a-diagnostic.md @@ -1,7 +1,7 @@ # Plan 27 Phase A diagnostic evidence Date: 2026-09-06 -Issue: [#3377](https://github.com/amruthpillai/reactive-resume/issues/3377) +Issue: [#3377](https://github.com/reactive-resume/reactive-resume/issues/3377)
Revision: `2a4a1583b` (`origin/main` at run start) Scope: Phase A, steps 1–2 only. No resolver, runtime behavior, or remote-source behavior changed. diff --git a/AGENTS.md b/AGENTS.md index 11e1882fb..94bb391cf 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -31,7 +31,7 @@ Boundaries: code/commits/PRs written normal. ## Agent skills -- Issues and specs: GitHub Issues for `reactive-resume/app`. See `docs/agents/issue-tracker.md`. +- Issues and specs: GitHub Issues for `reactive-resume/reactive-resume`. See `docs/agents/issue-tracker.md`. - Domain docs use a multi-context layout. See `docs/agents/domain.md`. ## Overview diff --git a/Dockerfile b/Dockerfile index b99e6f022..dade01e01 100644 --- a/Dockerfile +++ b/Dockerfile @@ -48,7 +48,7 @@ LABEL org.opencontainers.image.description="A free and open-source resume builde LABEL org.opencontainers.image.vendor="Amruth Pillai" LABEL org.opencontainers.image.url="https://rxresu.me" LABEL org.opencontainers.image.documentation="https://docs.rxresu.me" -LABEL org.opencontainers.image.source="https://github.com/reactive-resume/app" +LABEL org.opencontainers.image.source="https://github.com/reactive-resume/reactive-resume" ENV NODE_ENV="production" \ PORT=3000 \ diff --git a/README.md b/README.md index 60163f007..36ea4f52a 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ > [!IMPORTANT] -> **Repository moved:** Reactive Resume now lives at **[`reactive-resume/app`](https://github.com/reactive-resume/app)** on GitHub. -> **Docker Hub stays at `amruthpillai/reactive-resume`.** GHCR is now available at `ghcr.io/reactive-resume/app`. -> Verified GHCR tags: `latest`, `v5`, `v5.3`, and `v5.3.0` (AMD64 and ARM64). Future GHCR updates use the new namespace; historical images remain at the old address. See [migration details](https://github.com/reactive-resume/app/issues/3503). +> **Repository moved:** Reactive Resume now lives at **[`reactive-resume/reactive-resume`](https://github.com/reactive-resume/reactive-resume)** on GitHub. +> **Docker Hub stays at `amruthpillai/reactive-resume`.** GHCR builds now publish to `ghcr.io/reactive-resume/reactive-resume`. +> Release GHCR tags: `latest`, `v5`, `v5.3`, and `v5.3.0` (AMD64 and ARM64). Future GHCR updates use the new namespace; historical images remain at the old address. See [migration details](https://github.com/reactive-resume/reactive-resume/issues/3503). > GitHub Sponsors and Open Collective funding links remain unchanged.
@@ -20,9 +20,9 @@

- Reactive Resume Version - GitHub Stars - License + Reactive Resume Version + GitHub Stars + License Docker Pulls Discord Crowdin @@ -149,7 +149,7 @@ The quickest way to run Reactive Resume locally: ```bash # Clone the repository -git clone --depth=1 https://github.com/reactive-resume/app.git reactive-resume +git clone --depth=1 https://github.com/reactive-resume/reactive-resume.git reactive-resume cd reactive-resume # Start all services @@ -203,7 +203,7 @@ Pull the latest image from Docker Hub or GitHub Container Registry: docker pull amruthpillai/reactive-resume:latest # GitHub Container Registry -docker pull ghcr.io/reactive-resume/app:latest +docker pull ghcr.io/reactive-resume/reactive-resume:latest ``` See the [self-hosting guide](https://docs.rxresu.me/self-hosting/docker) for complete instructions. @@ -225,7 +225,7 @@ Other ways to support: - Star this repository - Report reproducible bugs and suggest actionable features -- Help other users in [GitHub Discussions](https://github.com/reactive-resume/app/discussions/categories/q-a) +- Help other users in [GitHub Discussions](https://github.com/reactive-resume/reactive-resume/discussions/categories/q-a) - Improve documentation - Help with translations @@ -235,11 +235,11 @@ Other ways to support: ## Star History - + - - - Star History Chart + + + Star History Chart @@ -255,7 +255,7 @@ Every contribution helps, whether it is a typo fix or a new feature. See the [development setup guide](https://docs.rxresu.me/contributing/development) for how to run the project locally. -Maintainers review the [`status: needs triage` queue](https://github.com/reactive-resume/app/issues?q=is%3Aissue+is%3Aopen+label%3A%22status%3A+needs+triage%22) +Maintainers review the [`status: needs triage` queue](https://github.com/reactive-resume/reactive-resume/issues?q=is%3Aissue+is%3Aopen+label%3A%22status%3A+needs+triage%22) weekly. Triaged bugs become `status: confirmed`; feature proposals become `status: accepted`; reports that need details become `status: needs info`. diff --git a/apps/server/src/openapi/generator.ts b/apps/server/src/openapi/generator.ts index 1253ea063..532b52008 100644 --- a/apps/server/src/openapi/generator.ts +++ b/apps/server/src/openapi/generator.ts @@ -84,7 +84,7 @@ export async function generateOpenApiSpec({ appUrl, version }: GenerateOpenApiSp title: "Reactive Resume", version, description: "Reactive Resume API", - license: { name: "MIT", url: "https://github.com/reactive-resume/app/blob/main/LICENSE" }, + license: { name: "MIT", url: "https://github.com/reactive-resume/reactive-resume/blob/main/LICENSE" }, contact: { name: "Amruth Pillai", email: "hello@amruthpillai.com", url: "https://amruthpillai.com" }, }, servers: [{ url: `${appUrl}/api/openapi` }], diff --git a/apps/server/src/static/web.ts b/apps/server/src/static/web.ts index c122cb398..a1f0ddcd0 100644 --- a/apps/server/src/static/web.ts +++ b/apps/server/src/static/web.ts @@ -127,13 +127,13 @@ function createRootSeoMarkup(canonicalUrl: string) { price: "0", priceCurrency: "USD", }, - codeRepository: "https://github.com/reactive-resume/app", + codeRepository: "https://github.com/reactive-resume/reactive-resume", }, { "@type": "Project", name: "Reactive Resume", url: canonicalUrl, - sameAs: ["https://github.com/reactive-resume/app"], + sameAs: ["https://github.com/reactive-resume/reactive-resume"], }, { "@type": "FAQPage", diff --git a/apps/web/public/funding.json b/apps/web/public/funding.json index 1b1c2c82e..10475f0cb 100644 --- a/apps/web/public/funding.json +++ b/apps/web/public/funding.json @@ -20,8 +20,8 @@ "url": "https://rxresu.me" }, "repositoryUrl": { - "url": "https://github.com/reactive-resume/app", - "wellKnown": "https://github.com/reactive-resume/app/blob/main/.github/.well-known/funding-manifest-urls" + "url": "https://github.com/reactive-resume/reactive-resume", + "wellKnown": "https://github.com/reactive-resume/reactive-resume/blob/main/.github/.well-known/funding-manifest-urls" }, "licenses": ["spdx:MIT"], "tags": ["data", "design", "productivity", "resume-builder"] diff --git a/apps/web/src/components/input/github-stars-button.test.tsx b/apps/web/src/components/input/github-stars-button.test.tsx index 22332706c..ebd895a02 100644 --- a/apps/web/src/components/input/github-stars-button.test.tsx +++ b/apps/web/src/components/input/github-stars-button.test.tsx @@ -42,7 +42,7 @@ describe("GithubStarsButton", () => { it("renders an anchor pointing at the project repo with rel=noopener noreferrer and target=_blank", () => { renderButton(); const link = screen.getByRole("button") as HTMLAnchorElement; - expect(link.href).toBe("https://github.com/reactive-resume/app"); + expect(link.href).toBe("https://github.com/reactive-resume/reactive-resume"); expect(link.target).toBe("_blank"); expect(link.rel).toBe("noopener noreferrer"); }); diff --git a/apps/web/src/components/input/github-stars-button.tsx b/apps/web/src/components/input/github-stars-button.tsx index f9d8e80da..3190e0539 100644 --- a/apps/web/src/components/input/github-stars-button.tsx +++ b/apps/web/src/components/input/github-stars-button.tsx @@ -20,7 +20,7 @@ export function GithubStarsButton() { render={ diff --git a/apps/web/src/components/ui/copyright.test.tsx b/apps/web/src/components/ui/copyright.test.tsx index 85f3c0211..3bef13802 100644 --- a/apps/web/src/components/ui/copyright.test.tsx +++ b/apps/web/src/components/ui/copyright.test.tsx @@ -24,7 +24,7 @@ describe("Copyright", () => { it("renders the MIT license link", () => { renderCopyright(); const link = screen.getByRole("link", { name: "MIT" }); - expect(link.getAttribute("href")).toBe("https://github.com/reactive-resume/app/blob/main/LICENSE"); + expect(link.getAttribute("href")).toBe("https://github.com/reactive-resume/reactive-resume/blob/main/LICENSE"); expect(link.getAttribute("rel")).toBe("noopener noreferrer"); }); diff --git a/apps/web/src/components/ui/copyright.tsx b/apps/web/src/components/ui/copyright.tsx index 5e9159f0c..51d9573a6 100644 --- a/apps/web/src/components/ui/copyright.tsx +++ b/apps/web/src/components/ui/copyright.tsx @@ -10,7 +10,7 @@ export function Copyright({ className, ...props }: Props) { Licensed under{" "} { }); describe("ImportResumeDialog — Set up a provider", () => { - // https://github.com/amruthpillai/reactive-resume/issues/3307 + // https://github.com/reactive-resume/reactive-resume/issues/3307 it("confirms before leaving instead of navigating behind the dialog", async () => { renderDialog(); const link = await selectWordFile(); diff --git a/apps/web/src/features/homepage/page.tsx b/apps/web/src/features/homepage/page.tsx index c2571afff..5b05ba075 100644 --- a/apps/web/src/features/homepage/page.tsx +++ b/apps/web/src/features/homepage/page.tsx @@ -21,7 +21,7 @@ import "./styles.css"; const ExportPlayground = lazy(() => import("./export-playground")); const AtsPlayground = lazy(() => import("./ats-playground")); -const githubUrl = "https://github.com/reactive-resume/app"; +const githubUrl = "https://github.com/reactive-resume/reactive-resume"; const buttonClass = "inline-flex min-h-[52px] items-center justify-center gap-3 rounded-[4px] border border-[#f1f0eb] bg-[#f1f0eb] px-[19px] py-[14px] text-[14px] font-[550] text-[#151516] [transition:background-color_150ms_ease,transform_150ms_cubic-bezier(0.23,1,0.32,1)] hover:bg-[#d9d8d2] active:transform-[scale(0.97)] max-[540px]:min-h-[49px] max-[540px]:gap-[18px] max-[540px]:px-[15px] max-[540px]:py-3 max-[540px]:text-[13px]"; const brandClass = "inline-flex shrink-0 items-center gap-[11px] font-[550] tracking-[-0.04em] max-[540px]:gap-2"; diff --git a/apps/web/src/features/homepage/site-footer.tsx b/apps/web/src/features/homepage/site-footer.tsx index 6e0af186f..c35a7c4ac 100644 --- a/apps/web/src/features/homepage/site-footer.tsx +++ b/apps/web/src/features/homepage/site-footer.tsx @@ -14,7 +14,7 @@ import { m } from "motion/react"; import { cn } from "@reactive-resume/utils/style"; import { wrap } from "./classes"; -const githubUrl = "https://github.com/reactive-resume/app"; +const githubUrl = "https://github.com/reactive-resume/reactive-resume"; const licenseUrl = `${githubUrl}/blob/main/LICENSE`; type FooterLink = { label: string } & ( diff --git a/apps/web/src/libs/seo.ts b/apps/web/src/libs/seo.ts index a169f9711..c52f563ec 100644 --- a/apps/web/src/libs/seo.ts +++ b/apps/web/src/libs/seo.ts @@ -1,6 +1,6 @@ const productionRootUrl = "https://rxresu.me/"; const appName = "Reactive Resume"; -const repositoryUrl = "https://github.com/reactive-resume/app"; +const repositoryUrl = "https://github.com/reactive-resume/reactive-resume"; type JsonLd = Record; diff --git a/apps/web/src/routes/_home/-sections/footer.test.tsx b/apps/web/src/routes/_home/-sections/footer.test.tsx index bf72bcb37..fbe35f8b3 100644 --- a/apps/web/src/routes/_home/-sections/footer.test.tsx +++ b/apps/web/src/routes/_home/-sections/footer.test.tsx @@ -47,7 +47,7 @@ describe("Footer", () => { it("renders social media icon links to GitHub, LinkedIn, and X", () => { const { container } = renderFooter(); const hrefs = Array.from(container.querySelectorAll("a")).map((a) => a.href); - expect(hrefs.some((h) => h.includes("github.com/reactive-resume/app"))).toBe(true); + expect(hrefs.some((h) => h.includes("github.com/reactive-resume/reactive-resume"))).toBe(true); expect(hrefs.some((h) => h.includes("linkedin.com/in/amruthpillai"))).toBe(true); expect(hrefs.some((h) => h.includes("x.com/KingOKings"))).toBe(true); }); diff --git a/apps/web/src/routes/_home/-sections/footer.tsx b/apps/web/src/routes/_home/-sections/footer.tsx index 10a0adf93..0b92c3c6c 100644 --- a/apps/web/src/routes/_home/-sections/footer.tsx +++ b/apps/web/src/routes/_home/-sections/footer.tsx @@ -27,19 +27,19 @@ type SocialLink = { const getResourceLinks = (): FooterLinkItem[] => [ { url: "https://docs.rxresu.me", label: t`Documentation` }, { url: "https://opencollective.com/reactive-resume/donate", label: t`Sponsorships` }, - { url: "https://github.com/reactive-resume/app", label: t`Source Code` }, + { url: "https://github.com/reactive-resume/reactive-resume", label: t`Source Code` }, { url: "https://docs.rxresu.me/changelog", label: t`Changelog` }, ]; const getCommunityLinks = (): FooterLinkItem[] => [ - { url: "https://github.com/reactive-resume/app/issues", label: t`Report an issue` }, + { url: "https://github.com/reactive-resume/reactive-resume/issues", label: t`Report an issue` }, { url: "https://crowdin.com/project/reactive-resume", label: t`Translations` }, { url: "https://reddit.com/r/reactiveresume", label: t`Subreddit` }, { url: "https://discord.gg/aSyA5ZSxpb", label: t`Discord` }, ]; const socialLinks: SocialLink[] = [ - { url: "https://github.com/reactive-resume/app", label: t`GitHub`, icon: GithubLogoIcon }, + { url: "https://github.com/reactive-resume/reactive-resume", label: t`GitHub`, icon: GithubLogoIcon }, { url: "https://linkedin.com/in/amruthpillai", label: t`LinkedIn`, icon: LinkedinLogoIcon }, { url: "https://x.com/KingOKings", label: t`X (Twitter)`, icon: XLogoIcon }, ]; diff --git a/apps/web/src/routes/builder/$resumeId/-components/pan-focus.test.ts b/apps/web/src/routes/builder/$resumeId/-components/pan-focus.test.ts index 61ac9df23..840edb776 100644 --- a/apps/web/src/routes/builder/$resumeId/-components/pan-focus.test.ts +++ b/apps/web/src/routes/builder/$resumeId/-components/pan-focus.test.ts @@ -41,7 +41,7 @@ describe("blurFocusedElementOnPan", () => { // The issue: closing a dialog restores focus to its trigger, and because react-zoom-pan-pinch // preventDefault()s the canvas mousedown the browser never moves focus away. Space then // activates the still-focused trigger on keyup and reopens the dialog. - // https://github.com/amruthpillai/reactive-resume/issues/3300 + // https://github.com/reactive-resume/reactive-resume/issues/3300 it("stops a Space keypress after panning from re-activating the last dialog trigger", () => { const trigger = document.createElement("button"); const openDialog = vi.fn(); diff --git a/apps/web/src/routes/builder/$resumeId/-components/pan-focus.ts b/apps/web/src/routes/builder/$resumeId/-components/pan-focus.ts index 8e83e9850..d69e5b09c 100644 --- a/apps/web/src/routes/builder/$resumeId/-components/pan-focus.ts +++ b/apps/web/src/routes/builder/$resumeId/-components/pan-focus.ts @@ -8,7 +8,7 @@ * that opened the last dialog, since closing a dialog restores focus to its trigger. A Space * keypress then activates that still-focused button on keyup and the dialog reopens. * - * @see https://github.com/amruthpillai/reactive-resume/issues/3300 + * @see https://github.com/reactive-resume/reactive-resume/issues/3300 */ export function blurFocusedElementOnPan(): void { if (typeof document === "undefined") return; diff --git a/apps/web/src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx b/apps/web/src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx index fc8b061a6..94dfd5e34 100644 --- a/apps/web/src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx +++ b/apps/web/src/routes/builder/$resumeId/-sidebar/right/sections/information.tsx @@ -59,7 +59,7 @@ export function InformationSectionBuilder() { className="text-xs" nativeButton={false} render={ - + Source Code } @@ -71,7 +71,11 @@ export function InformationSectionBuilder() { className="text-xs" nativeButton={false} render={ - + Report a Bug } diff --git a/compose.yml b/compose.yml index 6c3d8daf5..653df5848 100644 --- a/compose.yml +++ b/compose.yml @@ -78,7 +78,7 @@ services: condition: service_healthy reactive_resume: - # image: ghcr.io/reactive-resume/app:latest + # image: ghcr.io/reactive-resume/reactive-resume:latest build: context: . dockerfile: Dockerfile diff --git a/docs/agents/container-publishing.md b/docs/agents/container-publishing.md index 74d191fe8..115bbe177 100644 --- a/docs/agents/container-publishing.md +++ b/docs/agents/container-publishing.md @@ -1,8 +1,8 @@ # Container publishing -The repository is `reactive-resume/app`. Docker Hub remains +The repository is `reactive-resume/reactive-resume`. Docker Hub remains `docker.io/amruthpillai/reactive-resume`; GHCR follows the repository as -`ghcr.io/reactive-resume/app`. Do not derive Docker Hub's image name from `github.repository`. +`ghcr.io/reactive-resume/reactive-resume`. Do not derive Docker Hub's image name from `github.repository`. ## Builds and release safety @@ -20,7 +20,7 @@ Manual canaries first run a cache-only build on each architecture, then publish, and sign both registry images. Run one with: ```bash -gh workflow run docker-build.yml --repo reactive-resume/app --ref main -f release=false +gh workflow run docker-build.yml --repo reactive-resume/reactive-resume --ref main -f release=false ``` Both registries retain SBOMs, maximum provenance, and Cosign signatures. Publishing uses @@ -35,29 +35,32 @@ Docker configuration with explicit empty registry credentials to prove anonymous (a completely empty directory can still discover a system credential helper): ```bash -docker buildx imagetools inspect ghcr.io/reactive-resume/app:v5.3.0 +docker buildx imagetools inspect ghcr.io/reactive-resume/reactive-resume:v5.3.0 registry_config=$(mktemp -d) printf '%s\n' '{"auths":{"ghcr.io":{}}}' > "$registry_config/config.json" -docker --config "$registry_config" pull --platform linux/amd64 ghcr.io/reactive-resume/app:v5.3.0 -docker --config "$registry_config" pull --platform linux/arm64 ghcr.io/reactive-resume/app:v5.3.0 +docker --config "$registry_config" pull --platform linux/amd64 ghcr.io/reactive-resume/reactive-resume:v5.3.0 +docker --config "$registry_config" pull --platform linux/arm64 ghcr.io/reactive-resume/reactive-resume:v5.3.0 rm -r "$registry_config" ``` -On September 11, 2026, `latest`, `v5`, `v5.3`, and `v5.3.0` were copied to the new public -GHCR package. Both architectures were pulled anonymously; the original Cosign signature, +On September 11, 2026, `latest`, `v5`, `v5.3`, and `v5.3.0` were copied to the then-current +public GHCR package, `ghcr.io/reactive-resume/app`. Both architectures were pulled anonymously; the original Cosign signature, SBOMs, provenance, and image digest were verified. The signed Blacksmith canary -[`canary-34582818410-1`](https://github.com/reactive-resume/app/actions/runs/34582818410) +[`canary-34582818410-1`](https://github.com/reactive-resume/reactive-resume/actions/runs/34582818410) also passed on both registries without deploying production. -Historical v5.3.0 has digest +The original v5.3.0 at the previous GHCR address has digest `sha256:c487ec5edcfe054bcb312fcd498f868e56f274756d0046b01c83f210855017ab`. Copy complete image indexes rather than rebuilding historical releases or using a single-platform pull/tag/push. Preserve embedded attestation manifests and copy attached signatures separately. Verify the resulting digest before moving aliases. Retain the old -GHCR package for historical pulls; future updates publish under the new namespace. +GHCR packages for historical pulls; future updates publish under the new namespace. +The repository rename does not rename registry packages. Rebuilt images use the new +repository source label and signing identity; historical digests and signatures do not change. +Release aliases are mutable: pin the original digest above if you need the pre-rename artifact. New signatures identify -`https://github.com/reactive-resume/app/.github/workflows/docker-build.yml@`. +`https://github.com/reactive-resume/reactive-resume/.github/workflows/docker-build.yml@`. Historical signatures and image source labels retain the old repository identity. Verify historical v5.3.0 with its original workflow identity, even at its new registry address: @@ -68,8 +71,8 @@ cosign verify \ ghcr.io/reactive-resume/app@sha256:c487ec5edcfe054bcb312fcd498f868e56f274756d0046b01c83f210855017ab ``` -On September 11, 2026, GitHub reported `use_immutable_subject: true` and subject prefix -`repo:reactive-resume@245328954/app@249995750`. Inspect actual claims when updating external +After the rename, GitHub reports `use_immutable_subject: true` and subject prefix +`repo:reactive-resume@245328954/reactive-resume@249995750`. Inspect actual claims when updating external OIDC trust policies; the repository URL alone does not describe the subject. ## Independent migration items @@ -79,13 +82,13 @@ OIDC trust policies; the repository URL alone does not describe the subject. Changing that identifier creates a separate registry identity and requires its own migration. - The old GitHub repository redirects to the new repository. Never recreate the old repository. - The old Pages address `https://amruthpillai.github.io/reactive-resume/` returned 404 on - September 11, 2026. GitHub now reports `https://reactive-resume.github.io/app/`; repository + September 11, 2026. GitHub now reports `https://reactive-resume.github.io/reactive-resume/`; repository redirects do not redirect Pages traffic. No active repository references use the old Pages URL. - Confirm documentation hosting, Crowdin, Docker Hub source metadata, sponsorship access rewards, and any external OIDC policies in their owning accounts. Repository transfer alone does not verify those integrations. -Track availability and supported copied tags in [migration issue #3503](https://github.com/reactive-resume/app/issues/3503). +Track availability and supported copied tags in [migration issue #3503](https://github.com/reactive-resume/reactive-resume/issues/3503). No database reset, volume deletion, or resume-data migration is required. References: [Blacksmith Docker caching](https://docs.blacksmith.sh/blacksmith-caching/docker-builds), diff --git a/docs/changelog/index.mdx b/docs/changelog/index.mdx index df03dd7d7..c236512f3 100644 --- a/docs/changelog/index.mdx +++ b/docs/changelog/index.mdx @@ -7,625 +7,625 @@ rss: true ## Highlights -- **Manage cover letters in one shared library.** Create, import, search, edit, duplicate, preview, download, and reuse cover letters from the dashboard or resume builder. Letters now keep their own template while still letting you copy sender details and content from a resume. ([#3255](https://github.com/amruthpillai/reactive-resume/issues/3255)) [1d4194a20](https://github.com/amruthpillai/reactive-resume/commit/1d4194a20), [df2e21ef9](https://github.com/amruthpillai/reactive-resume/commit/df2e21ef9), [a3784558b](https://github.com/amruthpillai/reactive-resume/commit/a3784558b) -- **MCP connections now use a complete OAuth consent flow.** Dynamic client registration works again, signed authorization requests survive login and two-factor authentication, and a new screen asks users to explicitly Allow or Deny access. ([#3392](https://github.com/amruthpillai/reactive-resume/issues/3392)) [fe9b59e11](https://github.com/amruthpillai/reactive-resume/commit/fe9b59e11) -- **Import PDF resumes without configuring an AI provider.** PDFs with readable text are now parsed locally in the browser and turned into an editable resume, while the existing AI-assisted path remains available when a provider is connected. Thanks to [@Syed-Ali-Abbas-Zaidi](https://github.com/Syed-Ali-Abbas-Zaidi). ([#3334](https://github.com/amruthpillai/reactive-resume/issues/3334)) [cce6d64af](https://github.com/amruthpillai/reactive-resume/commit/cce6d64af) -- **Do more from the application tracker.** Export the current filtered view to CSV, save contact email and phone details, and turn a generated cover letter into a PDF attachment. Thanks to [@emanuelet](https://github.com/emanuelet). ([#3393](https://github.com/amruthpillai/reactive-resume/issues/3393)) [a3585a24e](https://github.com/amruthpillai/reactive-resume/commit/a3585a24e), [1f0844b39](https://github.com/amruthpillai/reactive-resume/commit/1f0844b39), [bf27792ca](https://github.com/amruthpillai/reactive-resume/commit/bf27792ca) -- **Recover and reorganize resume sections more safely.** Restore hidden printable sections, sort dated entries on demand, and choose whether each section heading appears in the exported resume. ([#2725](https://github.com/amruthpillai/reactive-resume/issues/2725), [#3060](https://github.com/amruthpillai/reactive-resume/issues/3060)) [5850230f8](https://github.com/amruthpillai/reactive-resume/commit/5850230f8), [b85d285b6](https://github.com/amruthpillai/reactive-resume/commit/b85d285b6), [368858a56](https://github.com/amruthpillai/reactive-resume/commit/368858a56) -- **Choose how profile photos fit.** Cover fills the frame, Contain keeps the whole image visible, and the crop dialog can now upload the original file without cropping. Upload limits are clearer and crop compression is preserved. ([#3305](https://github.com/amruthpillai/reactive-resume/issues/3305)) [ab67831e4](https://github.com/amruthpillai/reactive-resume/commit/ab67831e4), [fa4115072](https://github.com/amruthpillai/reactive-resume/commit/fa4115072), [40c997a39](https://github.com/amruthpillai/reactive-resume/commit/40c997a39) -- **Resume previews expose a clearer outline to screen readers.** Entries and nested roles use consistent heading levels, while paragraphs, lists, emphasis, and safe links retain their meaning in the accessible view. [9f0202eac](https://github.com/amruthpillai/reactive-resume/commit/9f0202eac), [acd2a9cfe](https://github.com/amruthpillai/reactive-resume/commit/acd2a9cfe) -- **Public sharing is more configurable.** Hide the PDF download button per resume, count successful public downloads correctly, or serve one configured public resume directly from your self-hosted root URL. ([#3360](https://github.com/amruthpillai/reactive-resume/issues/3360), [#3366](https://github.com/amruthpillai/reactive-resume/issues/3366)) [14c7c0651](https://github.com/amruthpillai/reactive-resume/commit/14c7c0651), [cddb01f03](https://github.com/amruthpillai/reactive-resume/commit/cddb01f03), [744eaa902](https://github.com/amruthpillai/reactive-resume/commit/744eaa902) +- **Manage cover letters in one shared library.** Create, import, search, edit, duplicate, preview, download, and reuse cover letters from the dashboard or resume builder. Letters now keep their own template while still letting you copy sender details and content from a resume. ([#3255](https://github.com/reactive-resume/reactive-resume/issues/3255)) [1d4194a20](https://github.com/reactive-resume/reactive-resume/commit/1d4194a20), [df2e21ef9](https://github.com/reactive-resume/reactive-resume/commit/df2e21ef9), [a3784558b](https://github.com/reactive-resume/reactive-resume/commit/a3784558b) +- **MCP connections now use a complete OAuth consent flow.** Dynamic client registration works again, signed authorization requests survive login and two-factor authentication, and a new screen asks users to explicitly Allow or Deny access. ([#3392](https://github.com/reactive-resume/reactive-resume/issues/3392)) [fe9b59e11](https://github.com/reactive-resume/reactive-resume/commit/fe9b59e11) +- **Import PDF resumes without configuring an AI provider.** PDFs with readable text are now parsed locally in the browser and turned into an editable resume, while the existing AI-assisted path remains available when a provider is connected. Thanks to [@Syed-Ali-Abbas-Zaidi](https://github.com/Syed-Ali-Abbas-Zaidi). ([#3334](https://github.com/reactive-resume/reactive-resume/issues/3334)) [cce6d64af](https://github.com/reactive-resume/reactive-resume/commit/cce6d64af) +- **Do more from the application tracker.** Export the current filtered view to CSV, save contact email and phone details, and turn a generated cover letter into a PDF attachment. Thanks to [@emanuelet](https://github.com/emanuelet). ([#3393](https://github.com/reactive-resume/reactive-resume/issues/3393)) [a3585a24e](https://github.com/reactive-resume/reactive-resume/commit/a3585a24e), [1f0844b39](https://github.com/reactive-resume/reactive-resume/commit/1f0844b39), [bf27792ca](https://github.com/reactive-resume/reactive-resume/commit/bf27792ca) +- **Recover and reorganize resume sections more safely.** Restore hidden printable sections, sort dated entries on demand, and choose whether each section heading appears in the exported resume. ([#2725](https://github.com/reactive-resume/reactive-resume/issues/2725), [#3060](https://github.com/reactive-resume/reactive-resume/issues/3060)) [5850230f8](https://github.com/reactive-resume/reactive-resume/commit/5850230f8), [b85d285b6](https://github.com/reactive-resume/reactive-resume/commit/b85d285b6), [368858a56](https://github.com/reactive-resume/reactive-resume/commit/368858a56) +- **Choose how profile photos fit.** Cover fills the frame, Contain keeps the whole image visible, and the crop dialog can now upload the original file without cropping. Upload limits are clearer and crop compression is preserved. ([#3305](https://github.com/reactive-resume/reactive-resume/issues/3305)) [ab67831e4](https://github.com/reactive-resume/reactive-resume/commit/ab67831e4), [fa4115072](https://github.com/reactive-resume/reactive-resume/commit/fa4115072), [40c997a39](https://github.com/reactive-resume/reactive-resume/commit/40c997a39) +- **Resume previews expose a clearer outline to screen readers.** Entries and nested roles use consistent heading levels, while paragraphs, lists, emphasis, and safe links retain their meaning in the accessible view. [9f0202eac](https://github.com/reactive-resume/reactive-resume/commit/9f0202eac), [acd2a9cfe](https://github.com/reactive-resume/reactive-resume/commit/acd2a9cfe) +- **Public sharing is more configurable.** Hide the PDF download button per resume, count successful public downloads correctly, or serve one configured public resume directly from your self-hosted root URL. ([#3360](https://github.com/reactive-resume/reactive-resume/issues/3360), [#3366](https://github.com/reactive-resume/reactive-resume/issues/3366)) [14c7c0651](https://github.com/reactive-resume/reactive-resume/commit/14c7c0651), [cddb01f03](https://github.com/reactive-resume/reactive-resume/commit/cddb01f03), [744eaa902](https://github.com/reactive-resume/reactive-resume/commit/744eaa902) ## Cover Letters & Applications -- Added a persistent cover-letter library with ownership-safe saves, revision checks, search, import, duplication, PDF preview and download, resume-content copying, and application attachment snapshots. ([#3255](https://github.com/amruthpillai/reactive-resume/issues/3255)) [1d4194a20](https://github.com/amruthpillai/reactive-resume/commit/1d4194a20) -- Separated cover-letter templates from resume-based sender details. Refreshing sender information no longer changes the selected letter template, and the resume builder now links directly to its cover letter. [df2e21ef9](https://github.com/amruthpillai/reactive-resume/commit/df2e21ef9), [a3784558b](https://github.com/amruthpillai/reactive-resume/commit/a3784558b) -- Added one-click PDF generation and attachment for Application Copilot cover letters, with retryable progress states. Thanks to [@emanuelet](https://github.com/emanuelet). [bf27792ca](https://github.com/amruthpillai/reactive-resume/commit/bf27792ca) -- Added contact email and phone fields to applications. Thanks to [@emanuelet](https://github.com/emanuelet). [1f0844b39](https://github.com/amruthpillai/reactive-resume/commit/1f0844b39) -- Added CSV export for the current filtered application list. ([#3393](https://github.com/amruthpillai/reactive-resume/issues/3393)) [a3585a24e](https://github.com/amruthpillai/reactive-resume/commit/a3585a24e) -- Fixed saved application notes not appearing in the detail view. ([#3391](https://github.com/amruthpillai/reactive-resume/issues/3391)) [00a1357de](https://github.com/amruthpillai/reactive-resume/commit/00a1357de) -- Fixed cover-letter copy failures so errors are reported without leaving stale content behind. Thanks to [@emanuelet](https://github.com/emanuelet). [ef47baf24](https://github.com/amruthpillai/reactive-resume/commit/ef47baf24) -- Fixed Application Copilot provider failures returning an internal-server error instead of a useful upstream-provider error. Thanks to [@santhiprakash](https://github.com/santhiprakash). ([#3312](https://github.com/amruthpillai/reactive-resume/issues/3312)) [c4eb9d860](https://github.com/amruthpillai/reactive-resume/commit/c4eb9d860) +- Added a persistent cover-letter library with ownership-safe saves, revision checks, search, import, duplication, PDF preview and download, resume-content copying, and application attachment snapshots. ([#3255](https://github.com/reactive-resume/reactive-resume/issues/3255)) [1d4194a20](https://github.com/reactive-resume/reactive-resume/commit/1d4194a20) +- Separated cover-letter templates from resume-based sender details. Refreshing sender information no longer changes the selected letter template, and the resume builder now links directly to its cover letter. [df2e21ef9](https://github.com/reactive-resume/reactive-resume/commit/df2e21ef9), [a3784558b](https://github.com/reactive-resume/reactive-resume/commit/a3784558b) +- Added one-click PDF generation and attachment for Application Copilot cover letters, with retryable progress states. Thanks to [@emanuelet](https://github.com/emanuelet). [bf27792ca](https://github.com/reactive-resume/reactive-resume/commit/bf27792ca) +- Added contact email and phone fields to applications. Thanks to [@emanuelet](https://github.com/emanuelet). [1f0844b39](https://github.com/reactive-resume/reactive-resume/commit/1f0844b39) +- Added CSV export for the current filtered application list. ([#3393](https://github.com/reactive-resume/reactive-resume/issues/3393)) [a3585a24e](https://github.com/reactive-resume/reactive-resume/commit/a3585a24e) +- Fixed saved application notes not appearing in the detail view. ([#3391](https://github.com/reactive-resume/reactive-resume/issues/3391)) [00a1357de](https://github.com/reactive-resume/reactive-resume/commit/00a1357de) +- Fixed cover-letter copy failures so errors are reported without leaving stale content behind. Thanks to [@emanuelet](https://github.com/emanuelet). [ef47baf24](https://github.com/reactive-resume/reactive-resume/commit/ef47baf24) +- Fixed Application Copilot provider failures returning an internal-server error instead of a useful upstream-provider error. Thanks to [@santhiprakash](https://github.com/santhiprakash). ([#3312](https://github.com/reactive-resume/reactive-resume/issues/3312)) [c4eb9d860](https://github.com/reactive-resume/reactive-resume/commit/c4eb9d860) ## Resume Builder & Editing -- Added a Compact resume-library view alongside Grid and List, with the selected view remembered for the browser session. ([#3247](https://github.com/amruthpillai/reactive-resume/issues/3247)) [1f308af72](https://github.com/amruthpillai/reactive-resume/commit/1f308af72) -- Added local PDF resume import for users without an AI provider. Scanned PDFs without readable text now receive a clear error instead of entering a blocked import path. Thanks to [@Syed-Ali-Abbas-Zaidi](https://github.com/Syed-Ali-Abbas-Zaidi). ([#3334](https://github.com/amruthpillai/reactive-resume/issues/3334)) [cce6d64af](https://github.com/amruthpillai/reactive-resume/commit/cce6d64af) -- Added hidden-section recovery so printable sections missing from the layout can be restored without disturbing authored placement. [5850230f8](https://github.com/amruthpillai/reactive-resume/commit/5850230f8) -- Added one-shot ascending or descending date sorting for supported sections. Sorting is explicit and does not keep rearranging later edits. ([#2725](https://github.com/amruthpillai/reactive-resume/issues/2725)) [b85d285b6](https://github.com/amruthpillai/reactive-resume/commit/b85d285b6) -- Added per-section heading visibility, allowing repeated or unnecessary headings to be hidden without hiding section content. ([#3060](https://github.com/amruthpillai/reactive-resume/issues/3060)) [368858a56](https://github.com/amruthpillai/reactive-resume/commit/368858a56) -- Added Inline and List presentation options for skill keywords, including controlled line breaks for long skill lists. Thanks to [@diego-vega-centeno](https://github.com/diego-vega-centeno). ([#2785](https://github.com/amruthpillai/reactive-resume/issues/2785)) [8df1b2555](https://github.com/amruthpillai/reactive-resume/commit/8df1b2555), [870388192](https://github.com/amruthpillai/reactive-resume/commit/870388192) -- Added whole-paragraph indentation and kept authored spaces intact through editing and export. ([#3397](https://github.com/amruthpillai/reactive-resume/issues/3397)) [f468651c7](https://github.com/amruthpillai/reactive-resume/commit/f468651c7), [ea97de5ec](https://github.com/amruthpillai/reactive-resume/commit/ea97de5ec) -- Preserved imported tables as editable rich-text tables instead of flattening or losing their structure. [999cd618c](https://github.com/amruthpillai/reactive-resume/commit/999cd618c) -- Saved pending resume edits before navigation, preventing the last change from being lost when leaving the builder. [a4bdc54b2](https://github.com/amruthpillai/reactive-resume/commit/a4bdc54b2) -- Removed empty custom sections and their now-unused pages after moving the final item elsewhere. ([#3180](https://github.com/amruthpillai/reactive-resume/issues/3180)) [97ccb4ba0](https://github.com/amruthpillai/reactive-resume/commit/97ccb4ba0) -- Preserved explicitly entered `http://` links instead of silently rewriting them to HTTPS. ([#2735](https://github.com/amruthpillai/reactive-resume/issues/2735)) [2cbb0f63e](https://github.com/amruthpillai/reactive-resume/commit/2cbb0f63e) -- Kept the color picker preview synchronized with the stylesheet source. ([#3291](https://github.com/amruthpillai/reactive-resume/issues/3291)) [735e70092](https://github.com/amruthpillai/reactive-resume/commit/735e70092) -- Rendered resume thumbnails at their displayed pixel density for clearer cards without unnecessary work. [2e711fd14](https://github.com/amruthpillai/reactive-resume/commit/2e711fd14) -- Added clearer explanations for content that intentionally overflows an authored page and for unsupported CSS gradients. [0fbeeeb4c](https://github.com/amruthpillai/reactive-resume/commit/0fbeeeb4c), [38832014b](https://github.com/amruthpillai/reactive-resume/commit/38832014b) -- Hardened rich-text paste handling and removed an unsafe clipboard parsing pattern. [97f34b7cc](https://github.com/amruthpillai/reactive-resume/commit/97f34b7cc) +- Added a Compact resume-library view alongside Grid and List, with the selected view remembered for the browser session. ([#3247](https://github.com/reactive-resume/reactive-resume/issues/3247)) [1f308af72](https://github.com/reactive-resume/reactive-resume/commit/1f308af72) +- Added local PDF resume import for users without an AI provider. Scanned PDFs without readable text now receive a clear error instead of entering a blocked import path. Thanks to [@Syed-Ali-Abbas-Zaidi](https://github.com/Syed-Ali-Abbas-Zaidi). ([#3334](https://github.com/reactive-resume/reactive-resume/issues/3334)) [cce6d64af](https://github.com/reactive-resume/reactive-resume/commit/cce6d64af) +- Added hidden-section recovery so printable sections missing from the layout can be restored without disturbing authored placement. [5850230f8](https://github.com/reactive-resume/reactive-resume/commit/5850230f8) +- Added one-shot ascending or descending date sorting for supported sections. Sorting is explicit and does not keep rearranging later edits. ([#2725](https://github.com/reactive-resume/reactive-resume/issues/2725)) [b85d285b6](https://github.com/reactive-resume/reactive-resume/commit/b85d285b6) +- Added per-section heading visibility, allowing repeated or unnecessary headings to be hidden without hiding section content. ([#3060](https://github.com/reactive-resume/reactive-resume/issues/3060)) [368858a56](https://github.com/reactive-resume/reactive-resume/commit/368858a56) +- Added Inline and List presentation options for skill keywords, including controlled line breaks for long skill lists. Thanks to [@diego-vega-centeno](https://github.com/diego-vega-centeno). ([#2785](https://github.com/reactive-resume/reactive-resume/issues/2785)) [8df1b2555](https://github.com/reactive-resume/reactive-resume/commit/8df1b2555), [870388192](https://github.com/reactive-resume/reactive-resume/commit/870388192) +- Added whole-paragraph indentation and kept authored spaces intact through editing and export. ([#3397](https://github.com/reactive-resume/reactive-resume/issues/3397)) [f468651c7](https://github.com/reactive-resume/reactive-resume/commit/f468651c7), [ea97de5ec](https://github.com/reactive-resume/reactive-resume/commit/ea97de5ec) +- Preserved imported tables as editable rich-text tables instead of flattening or losing their structure. [999cd618c](https://github.com/reactive-resume/reactive-resume/commit/999cd618c) +- Saved pending resume edits before navigation, preventing the last change from being lost when leaving the builder. [a4bdc54b2](https://github.com/reactive-resume/reactive-resume/commit/a4bdc54b2) +- Removed empty custom sections and their now-unused pages after moving the final item elsewhere. ([#3180](https://github.com/reactive-resume/reactive-resume/issues/3180)) [97ccb4ba0](https://github.com/reactive-resume/reactive-resume/commit/97ccb4ba0) +- Preserved explicitly entered `http://` links instead of silently rewriting them to HTTPS. ([#2735](https://github.com/reactive-resume/reactive-resume/issues/2735)) [2cbb0f63e](https://github.com/reactive-resume/reactive-resume/commit/2cbb0f63e) +- Kept the color picker preview synchronized with the stylesheet source. ([#3291](https://github.com/reactive-resume/reactive-resume/issues/3291)) [735e70092](https://github.com/reactive-resume/reactive-resume/commit/735e70092) +- Rendered resume thumbnails at their displayed pixel density for clearer cards without unnecessary work. [2e711fd14](https://github.com/reactive-resume/reactive-resume/commit/2e711fd14) +- Added clearer explanations for content that intentionally overflows an authored page and for unsupported CSS gradients. [0fbeeeb4c](https://github.com/reactive-resume/reactive-resume/commit/0fbeeeb4c), [38832014b](https://github.com/reactive-resume/reactive-resume/commit/38832014b) +- Hardened rich-text paste handling and removed an unsafe clipboard parsing pattern. [97f34b7cc](https://github.com/reactive-resume/reactive-resume/commit/97f34b7cc) ## PDF Export & Templates -- Preserved vertical margins when an item continues onto another page. ([#3337](https://github.com/amruthpillai/reactive-resume/issues/3337)) [bf71253ca](https://github.com/amruthpillai/reactive-resume/commit/bf71253ca) -- Kept dates aligned when optional fields are empty, constrained Onyx headlines to page margins, and aligned Ditgar item headers with body text. ([#3338](https://github.com/amruthpillai/reactive-resume/issues/3338), [#3339](https://github.com/amruthpillai/reactive-resume/issues/3339), [#3068](https://github.com/amruthpillai/reactive-resume/issues/3068)) [a2d6bc0c6](https://github.com/amruthpillai/reactive-resume/commit/a2d6bc0c6), [a95e63246](https://github.com/amruthpillai/reactive-resume/commit/a95e63246), [873835a57](https://github.com/amruthpillai/reactive-resume/commit/873835a57) -- Added optional German hyphenation to improve line wrapping without changing existing resumes by default. ([#3340](https://github.com/amruthpillai/reactive-resume/issues/3340)) [7d809da6f](https://github.com/amruthpillai/reactive-resume/commit/7d809da6f) -- Restored picture borders and soft shadows in PDF output. ([#3017](https://github.com/amruthpillai/reactive-resume/issues/3017)) [57fee67d2](https://github.com/amruthpillai/reactive-resume/commit/57fee67d2) -- Fixed skill ratings across templates: grid rows now align, icon opacity reflects the selected level, and Gengar keeps the intended rating order. ([#3343](https://github.com/amruthpillai/reactive-resume/issues/3343), [#3352](https://github.com/amruthpillai/reactive-resume/issues/3352), [#2611](https://github.com/amruthpillai/reactive-resume/issues/2611)) [6d39074c5](https://github.com/amruthpillai/reactive-resume/commit/6d39074c5), [93e8d192a](https://github.com/amruthpillai/reactive-resume/commit/93e8d192a), [2a4a1583b](https://github.com/amruthpillai/reactive-resume/commit/2a4a1583b) -- Localized default section headings in server-rendered PDFs, applied semantic heading colors, and stopped the first character of headings from being clipped. Thanks to [@santhiprakash](https://github.com/santhiprakash). ([#2804](https://github.com/amruthpillai/reactive-resume/issues/2804), [#3348](https://github.com/amruthpillai/reactive-resume/issues/3348), [#3380](https://github.com/amruthpillai/reactive-resume/issues/3380)) [b6842fb76](https://github.com/amruthpillai/reactive-resume/commit/b6842fb76), [d53b89ba2](https://github.com/amruthpillai/reactive-resume/commit/d53b89ba2), [e0c2f6d88](https://github.com/amruthpillai/reactive-resume/commit/e0c2f6d88) -- Kept unordered-list markers with their first text fragment across page breaks and moved ordered-list markers clear of body text. ([#3344](https://github.com/amruthpillai/reactive-resume/issues/3344)) [ea2beb845](https://github.com/amruthpillai/reactive-resume/commit/ea2beb845), [8d4cf8a2f](https://github.com/amruthpillai/reactive-resume/commit/8d4cf8a2f) -- Preserved imported rich-text content even when older data lacks semantic descendants. [aada38088](https://github.com/amruthpillai/reactive-resume/commit/aada38088) -- Improved text placement and font handling by honoring requested font metrics, isolating cached glyph metadata, preserving authored Unicode spaces, and retaining glyph positions in RTL previews. [8354c39c4](https://github.com/amruthpillai/reactive-resume/commit/8354c39c4), [d10eb4a55](https://github.com/amruthpillai/reactive-resume/commit/d10eb4a55), [05e48a7cb](https://github.com/amruthpillai/reactive-resume/commit/05e48a7cb), [5c8338c17](https://github.com/amruthpillai/reactive-resume/commit/5c8338c17) -- Centered the resume preview correctly in RTL interfaces. ([#2745](https://github.com/amruthpillai/reactive-resume/issues/2745)) [9fdcec2ec](https://github.com/amruthpillai/reactive-resume/commit/9fdcec2ec) -- Allowed gaps between level decorations in custom styles. [f629ea1ea](https://github.com/amruthpillai/reactive-resume/commit/f629ea1ea) +- Preserved vertical margins when an item continues onto another page. ([#3337](https://github.com/reactive-resume/reactive-resume/issues/3337)) [bf71253ca](https://github.com/reactive-resume/reactive-resume/commit/bf71253ca) +- Kept dates aligned when optional fields are empty, constrained Onyx headlines to page margins, and aligned Ditgar item headers with body text. ([#3338](https://github.com/reactive-resume/reactive-resume/issues/3338), [#3339](https://github.com/reactive-resume/reactive-resume/issues/3339), [#3068](https://github.com/reactive-resume/reactive-resume/issues/3068)) [a2d6bc0c6](https://github.com/reactive-resume/reactive-resume/commit/a2d6bc0c6), [a95e63246](https://github.com/reactive-resume/reactive-resume/commit/a95e63246), [873835a57](https://github.com/reactive-resume/reactive-resume/commit/873835a57) +- Added optional German hyphenation to improve line wrapping without changing existing resumes by default. ([#3340](https://github.com/reactive-resume/reactive-resume/issues/3340)) [7d809da6f](https://github.com/reactive-resume/reactive-resume/commit/7d809da6f) +- Restored picture borders and soft shadows in PDF output. ([#3017](https://github.com/reactive-resume/reactive-resume/issues/3017)) [57fee67d2](https://github.com/reactive-resume/reactive-resume/commit/57fee67d2) +- Fixed skill ratings across templates: grid rows now align, icon opacity reflects the selected level, and Gengar keeps the intended rating order. ([#3343](https://github.com/reactive-resume/reactive-resume/issues/3343), [#3352](https://github.com/reactive-resume/reactive-resume/issues/3352), [#2611](https://github.com/reactive-resume/reactive-resume/issues/2611)) [6d39074c5](https://github.com/reactive-resume/reactive-resume/commit/6d39074c5), [93e8d192a](https://github.com/reactive-resume/reactive-resume/commit/93e8d192a), [2a4a1583b](https://github.com/reactive-resume/reactive-resume/commit/2a4a1583b) +- Localized default section headings in server-rendered PDFs, applied semantic heading colors, and stopped the first character of headings from being clipped. Thanks to [@santhiprakash](https://github.com/santhiprakash). ([#2804](https://github.com/reactive-resume/reactive-resume/issues/2804), [#3348](https://github.com/reactive-resume/reactive-resume/issues/3348), [#3380](https://github.com/reactive-resume/reactive-resume/issues/3380)) [b6842fb76](https://github.com/reactive-resume/reactive-resume/commit/b6842fb76), [d53b89ba2](https://github.com/reactive-resume/reactive-resume/commit/d53b89ba2), [e0c2f6d88](https://github.com/reactive-resume/reactive-resume/commit/e0c2f6d88) +- Kept unordered-list markers with their first text fragment across page breaks and moved ordered-list markers clear of body text. ([#3344](https://github.com/reactive-resume/reactive-resume/issues/3344)) [ea2beb845](https://github.com/reactive-resume/reactive-resume/commit/ea2beb845), [8d4cf8a2f](https://github.com/reactive-resume/reactive-resume/commit/8d4cf8a2f) +- Preserved imported rich-text content even when older data lacks semantic descendants. [aada38088](https://github.com/reactive-resume/reactive-resume/commit/aada38088) +- Improved text placement and font handling by honoring requested font metrics, isolating cached glyph metadata, preserving authored Unicode spaces, and retaining glyph positions in RTL previews. [8354c39c4](https://github.com/reactive-resume/reactive-resume/commit/8354c39c4), [d10eb4a55](https://github.com/reactive-resume/reactive-resume/commit/d10eb4a55), [05e48a7cb](https://github.com/reactive-resume/reactive-resume/commit/05e48a7cb), [5c8338c17](https://github.com/reactive-resume/reactive-resume/commit/5c8338c17) +- Centered the resume preview correctly in RTL interfaces. ([#2745](https://github.com/reactive-resume/reactive-resume/issues/2745)) [9fdcec2ec](https://github.com/reactive-resume/reactive-resume/commit/9fdcec2ec) +- Allowed gaps between level decorations in custom styles. [f629ea1ea](https://github.com/reactive-resume/reactive-resume/commit/f629ea1ea) ## Sharing, Authentication & Accessibility -- Added a per-resume setting to hide the public PDF download button. ([#3360](https://github.com/amruthpillai/reactive-resume/issues/3360)) [14c7c0651](https://github.com/amruthpillai/reactive-resume/commit/14c7c0651) -- Counted successful public PDF downloads in resume statistics. ([#3366](https://github.com/amruthpillai/reactive-resume/issues/3366)) [cddb01f03](https://github.com/amruthpillai/reactive-resume/commit/cddb01f03) -- Added `ROOT_RESUME_ID` so self-hosters can publish one resume directly at the site root. [744eaa902](https://github.com/amruthpillai/reactive-resume/commit/744eaa902) -- Replaced resume-specific social preview images with a neutral preview and hid the “build your own resume” signup link when registration is disabled. ([#3359](https://github.com/amruthpillai/reactive-resume/issues/3359), [#3401](https://github.com/amruthpillai/reactive-resume/issues/3401)) [0878b256a](https://github.com/amruthpillai/reactive-resume/commit/0878b256a), [18b5aa474](https://github.com/amruthpillai/reactive-resume/commit/18b5aa474) -- Added password confirmation, labels, and immediate validation to resume sharing, including the documented minimum length. ([#3370](https://github.com/amruthpillai/reactive-resume/issues/3370)) [321f2fb43](https://github.com/amruthpillai/reactive-resume/commit/321f2fb43) -- Fixed label targeting for Slug, Tags, Sidebar Width, and related form controls. Thanks to [@santhiprakash](https://github.com/santhiprakash). ([#3369](https://github.com/amruthpillai/reactive-resume/issues/3369)) [ea3980cba](https://github.com/amruthpillai/reactive-resume/commit/ea3980cba) -- Added accessible labels to remaining website and picture inputs and restored hover feedback on primary buttons. ([#3251](https://github.com/amruthpillai/reactive-resume/issues/3251)) [5a6f5d4d6](https://github.com/amruthpillai/reactive-resume/commit/5a6f5d4d6), [ddbbbde80](https://github.com/amruthpillai/reactive-resume/commit/ddbbbde80) -- Improved the builder's screen-reader outline with entry and nested-role headings, semantic rich text, safe links, stable section order, and correct handling of hidden content. This advances [#2844](https://github.com/amruthpillai/reactive-resume/issues/2844); public viewer and exported-document accessibility remain separate work. [9f0202eac](https://github.com/amruthpillai/reactive-resume/commit/9f0202eac), [acd2a9cfe](https://github.com/amruthpillai/reactive-resume/commit/acd2a9cfe) +- Added a per-resume setting to hide the public PDF download button. ([#3360](https://github.com/reactive-resume/reactive-resume/issues/3360)) [14c7c0651](https://github.com/reactive-resume/reactive-resume/commit/14c7c0651) +- Counted successful public PDF downloads in resume statistics. ([#3366](https://github.com/reactive-resume/reactive-resume/issues/3366)) [cddb01f03](https://github.com/reactive-resume/reactive-resume/commit/cddb01f03) +- Added `ROOT_RESUME_ID` so self-hosters can publish one resume directly at the site root. [744eaa902](https://github.com/reactive-resume/reactive-resume/commit/744eaa902) +- Replaced resume-specific social preview images with a neutral preview and hid the “build your own resume” signup link when registration is disabled. ([#3359](https://github.com/reactive-resume/reactive-resume/issues/3359), [#3401](https://github.com/reactive-resume/reactive-resume/issues/3401)) [0878b256a](https://github.com/reactive-resume/reactive-resume/commit/0878b256a), [18b5aa474](https://github.com/reactive-resume/reactive-resume/commit/18b5aa474) +- Added password confirmation, labels, and immediate validation to resume sharing, including the documented minimum length. ([#3370](https://github.com/reactive-resume/reactive-resume/issues/3370)) [321f2fb43](https://github.com/reactive-resume/reactive-resume/commit/321f2fb43) +- Fixed label targeting for Slug, Tags, Sidebar Width, and related form controls. Thanks to [@santhiprakash](https://github.com/santhiprakash). ([#3369](https://github.com/reactive-resume/reactive-resume/issues/3369)) [ea3980cba](https://github.com/reactive-resume/reactive-resume/commit/ea3980cba) +- Added accessible labels to remaining website and picture inputs and restored hover feedback on primary buttons. ([#3251](https://github.com/reactive-resume/reactive-resume/issues/3251)) [5a6f5d4d6](https://github.com/reactive-resume/reactive-resume/commit/5a6f5d4d6), [ddbbbde80](https://github.com/reactive-resume/reactive-resume/commit/ddbbbde80) +- Improved the builder's screen-reader outline with entry and nested-role headings, semantic rich text, safe links, stable section order, and correct handling of hidden content. This advances [#2844](https://github.com/reactive-resume/reactive-resume/issues/2844); public viewer and exported-document accessibility remain separate work. [9f0202eac](https://github.com/reactive-resume/reactive-resume/commit/9f0202eac), [acd2a9cfe](https://github.com/reactive-resume/reactive-resume/commit/acd2a9cfe) ## Self-Hosting & Integrations -- Restored MCP OAuth dynamic client registration and resource-aware authorization. A new consent screen shows the signed-in account and requesting client, requires an explicit Allow or Deny decision, and preserves signed requests through login, registration, social authentication, passkeys, and two-factor authentication. Existing OAuth rows survive the upgrade, but previously registered clients must reconnect to establish resource grants. ([#3392](https://github.com/amruthpillai/reactive-resume/issues/3392)) [fe9b59e11](https://github.com/amruthpillai/reactive-resume/commit/fe9b59e11) -- Added the OAuth provider tables required by Better Auth and aligned the account schema with Better Auth 1.7.3 while preserving existing issuer values. [fe9b59e11](https://github.com/amruthpillai/reactive-resume/commit/fe9b59e11), [cea27a97b](https://github.com/amruthpillai/reactive-resume/commit/cea27a97b) -- Supported S3-compatible buckets that have object ACLs disabled. [35cecf9c9](https://github.com/amruthpillai/reactive-resume/commit/35cecf9c9) -- Loaded local environment overrides correctly in Docker Compose. ([#3361](https://github.com/amruthpillai/reactive-resume/issues/3361)) [53288fcd3](https://github.com/amruthpillai/reactive-resume/commit/53288fcd3) -- Exposed the running application version through the health endpoint. ([#3347](https://github.com/amruthpillai/reactive-resume/issues/3347)) [cd1c597ff](https://github.com/amruthpillai/reactive-resume/commit/cd1c597ff) -- Invalidated cached build tasks when consumed workspace source changes, preventing stale application builds. [7390c81b7](https://github.com/amruthpillai/reactive-resume/commit/7390c81b7) -- Added `AI_TEST_TIMEOUT_MS` for slower AI-provider health checks. Thanks to [@santhiprakash](https://github.com/santhiprakash). ([#3374](https://github.com/amruthpillai/reactive-resume/issues/3374)) [861ba8bf6](https://github.com/amruthpillai/reactive-resume/commit/861ba8bf6) -- Rejected invalid resume writes instead of silently coercing values outside the published schema. ([#3368](https://github.com/amruthpillai/reactive-resume/issues/3368)) [779ea5cb4](https://github.com/amruthpillai/reactive-resume/commit/779ea5cb4) -- Preserved optional Nodemailer settings in strict TypeScript configurations. [165841af4](https://github.com/amruthpillai/reactive-resume/commit/165841af4) -- Refreshed interface and documentation copy, synchronized translation catalogs from Crowdin, and updated workspace dependencies. [f29b92e2f](https://github.com/amruthpillai/reactive-resume/commit/f29b92e2f), [d277518d2](https://github.com/amruthpillai/reactive-resume/commit/d277518d2), [7fef84078](https://github.com/amruthpillai/reactive-resume/commit/7fef84078), [e272037be](https://github.com/amruthpillai/reactive-resume/commit/e272037be) +- Restored MCP OAuth dynamic client registration and resource-aware authorization. A new consent screen shows the signed-in account and requesting client, requires an explicit Allow or Deny decision, and preserves signed requests through login, registration, social authentication, passkeys, and two-factor authentication. Existing OAuth rows survive the upgrade, but previously registered clients must reconnect to establish resource grants. ([#3392](https://github.com/reactive-resume/reactive-resume/issues/3392)) [fe9b59e11](https://github.com/reactive-resume/reactive-resume/commit/fe9b59e11) +- Added the OAuth provider tables required by Better Auth and aligned the account schema with Better Auth 1.7.3 while preserving existing issuer values. [fe9b59e11](https://github.com/reactive-resume/reactive-resume/commit/fe9b59e11), [cea27a97b](https://github.com/reactive-resume/reactive-resume/commit/cea27a97b) +- Supported S3-compatible buckets that have object ACLs disabled. [35cecf9c9](https://github.com/reactive-resume/reactive-resume/commit/35cecf9c9) +- Loaded local environment overrides correctly in Docker Compose. ([#3361](https://github.com/reactive-resume/reactive-resume/issues/3361)) [53288fcd3](https://github.com/reactive-resume/reactive-resume/commit/53288fcd3) +- Exposed the running application version through the health endpoint. ([#3347](https://github.com/reactive-resume/reactive-resume/issues/3347)) [cd1c597ff](https://github.com/reactive-resume/reactive-resume/commit/cd1c597ff) +- Invalidated cached build tasks when consumed workspace source changes, preventing stale application builds. [7390c81b7](https://github.com/reactive-resume/reactive-resume/commit/7390c81b7) +- Added `AI_TEST_TIMEOUT_MS` for slower AI-provider health checks. Thanks to [@santhiprakash](https://github.com/santhiprakash). ([#3374](https://github.com/reactive-resume/reactive-resume/issues/3374)) [861ba8bf6](https://github.com/reactive-resume/reactive-resume/commit/861ba8bf6) +- Rejected invalid resume writes instead of silently coercing values outside the published schema. ([#3368](https://github.com/reactive-resume/reactive-resume/issues/3368)) [779ea5cb4](https://github.com/reactive-resume/reactive-resume/commit/779ea5cb4) +- Preserved optional Nodemailer settings in strict TypeScript configurations. [165841af4](https://github.com/reactive-resume/reactive-resume/commit/165841af4) +- Refreshed interface and documentation copy, synchronized translation catalogs from Crowdin, and updated workspace dependencies. [f29b92e2f](https://github.com/reactive-resume/reactive-resume/commit/f29b92e2f), [d277518d2](https://github.com/reactive-resume/reactive-resume/commit/d277518d2), [7fef84078](https://github.com/reactive-resume/reactive-resume/commit/7fef84078), [e272037be](https://github.com/reactive-resume/reactive-resume/commit/e272037be) -**Full Changelog**: [v5.2.9...v5.3.0](https://github.com/amruthpillai/reactive-resume/compare/v5.2.9...v5.3.0) +**Full Changelog**: [v5.2.9...v5.3.0](https://github.com/reactive-resume/reactive-resume/compare/v5.2.9...v5.3.0) ## Highlights -- **A free ATS checker that never uploads your resume.** Drop a PDF on [rxresu.me/ats-checker](https://rxresu.me/ats-checker) and it opens the file the way a parser would, pulls the text out, and reports what survived: whether the file carries real text or a picture of one, whether a multi-column layout scrambles the reading order, and whether your name, email, phone, links and dates come through intact. Everything runs in your browser — the file is never uploaded, nothing is stored, and no account is needed. Paste a job description and it will also tell you which of the posting's terms already appear in your resume. [#3382](https://github.com/amruthpillai/reactive-resume/pull/3382) -- **A score you can actually audit.** The report gives one number from 0 to 100 across readability, layout, sections, contact details and dates — and shows its working. Every finding cites the text that triggered it and the page it sits on, and the report states how many checks ran and how many were honestly skipped rather than quietly counting them as passes. Employment gaps, writing style and length are reported as unscored tips; they never move the score. [#3382](https://github.com/amruthpillai/reactive-resume/pull/3382) -- **Resume analysis has been replaced by the ATS check.** The old AI-scored analysis is gone, along with its stored results, its `get_resume_analysis` MCP tool, and the `POST /ai/analyze-resume` endpoint. What replaces it is deterministic and evidence-backed, with an optional AI second opinion on your writing that deliberately returns no score of its own. Self-hosters: read the upgrade note below. [#3382](https://github.com/amruthpillai/reactive-resume/pull/3382) -- **Bold text finally looks bold.** Most resumes pair Regular with SemiBold, which rendered `` almost indistinguishably from body text. Bold now resolves to the font family's true Bold face, so emphasis reads as emphasis — existing resumes will export with visibly stronger bold text. Thanks to [@santhiprakash](https://github.com/santhiprakash). [e065a1082](https://github.com/amruthpillai/reactive-resume/commit/e065a1082) +- **A free ATS checker that never uploads your resume.** Drop a PDF on [rxresu.me/ats-checker](https://rxresu.me/ats-checker) and it opens the file the way a parser would, pulls the text out, and reports what survived: whether the file carries real text or a picture of one, whether a multi-column layout scrambles the reading order, and whether your name, email, phone, links and dates come through intact. Everything runs in your browser — the file is never uploaded, nothing is stored, and no account is needed. Paste a job description and it will also tell you which of the posting's terms already appear in your resume. [#3382](https://github.com/reactive-resume/reactive-resume/pull/3382) +- **A score you can actually audit.** The report gives one number from 0 to 100 across readability, layout, sections, contact details and dates — and shows its working. Every finding cites the text that triggered it and the page it sits on, and the report states how many checks ran and how many were honestly skipped rather than quietly counting them as passes. Employment gaps, writing style and length are reported as unscored tips; they never move the score. [#3382](https://github.com/reactive-resume/reactive-resume/pull/3382) +- **Resume analysis has been replaced by the ATS check.** The old AI-scored analysis is gone, along with its stored results, its `get_resume_analysis` MCP tool, and the `POST /ai/analyze-resume` endpoint. What replaces it is deterministic and evidence-backed, with an optional AI second opinion on your writing that deliberately returns no score of its own. Self-hosters: read the upgrade note below. [#3382](https://github.com/reactive-resume/reactive-resume/pull/3382) +- **Bold text finally looks bold.** Most resumes pair Regular with SemiBold, which rendered `` almost indistinguishably from body text. Bold now resolves to the font family's true Bold face, so emphasis reads as emphasis — existing resumes will export with visibly stronger bold text. Thanks to [@santhiprakash](https://github.com/santhiprakash). [e065a1082](https://github.com/reactive-resume/reactive-resume/commit/e065a1082) ## Resume Builder -- The right sidebar's **ATS Check** section now runs live checks against your resume as you type — missing dates, malformed links, prose stranded in a narrow sidebar — before you export anything. [#3382](https://github.com/amruthpillai/reactive-resume/pull/3382) -- **Run deep check** renders your current resume to a PDF in your browser and runs the full file check against those exact bytes, which is the same file a recruiter receives. [#3382](https://github.com/amruthpillai/reactive-resume/pull/3382) -- Once a report exists, you can ask your own AI provider to review the writing — weak phrasing, bullets that describe duties rather than outcomes, and where a rewrite would land better. It sends only the extracted text, never the PDF. [#3382](https://github.com/amruthpillai/reactive-resume/pull/3382) -- Section detection understands more of the headings people actually use, so conventional sections are recognized across a wider range of resumes. [#3382](https://github.com/amruthpillai/reactive-resume/pull/3382) -- Toasts no longer slide underneath dialogs and sheets. [#3382](https://github.com/amruthpillai/reactive-resume/pull/3382) +- The right sidebar's **ATS Check** section now runs live checks against your resume as you type — missing dates, malformed links, prose stranded in a narrow sidebar — before you export anything. [#3382](https://github.com/reactive-resume/reactive-resume/pull/3382) +- **Run deep check** renders your current resume to a PDF in your browser and runs the full file check against those exact bytes, which is the same file a recruiter receives. [#3382](https://github.com/reactive-resume/reactive-resume/pull/3382) +- Once a report exists, you can ask your own AI provider to review the writing — weak phrasing, bullets that describe duties rather than outcomes, and where a rewrite would land better. It sends only the extracted text, never the PDF. [#3382](https://github.com/reactive-resume/reactive-resume/pull/3382) +- Section detection understands more of the headings people actually use, so conventional sections are recognized across a wider range of resumes. [#3382](https://github.com/reactive-resume/reactive-resume/pull/3382) +- Toasts no longer slide underneath dialogs and sheets. [#3382](https://github.com/reactive-resume/reactive-resume/pull/3382) ## AI Agent -- Picking a provider when starting a thread now uses the same provider picker as the rest of the app, showing the label, provider and model consistently instead of one long concatenated line. [#3382](https://github.com/amruthpillai/reactive-resume/pull/3382) +- Picking a provider when starting a thread now uses the same provider picker as the rest of the app, showing the label, provider and model consistently instead of one long concatenated line. [#3382](https://github.com/reactive-resume/reactive-resume/pull/3382) ## PDF Export & Fonts -- Bold text now uses the font family's true Bold face. Most resumes store their typography as Regular plus SemiBold, which rendered `` almost indistinguishably from body text on faces like Open Sans; bold now resolves to the family's 700 weight where it has one, and to its heaviest bold-class face where it does not. Existing resumes will export with visibly stronger bold text. Thanks to [@santhiprakash](https://github.com/santhiprakash). [e065a1082](https://github.com/amruthpillai/reactive-resume/commit/e065a1082) -- Long bullet-list lines no longer spill past the page margin. Thanks to [@santhiprakash](https://github.com/santhiprakash). [a416d0111](https://github.com/amruthpillai/reactive-resume/commit/a416d0111) -- Emoji render instead of dropping out as blank boxes. They are drawn as monochrome outlines, because the color emoji format cannot be embedded in a PDF, and the fallback font is only loaded when your resume actually contains emoji. Thanks to [@santhiprakash](https://github.com/santhiprakash). [b47f80532](https://github.com/amruthpillai/reactive-resume/commit/b47f80532) -- Vazirmatn is available in the font catalog again, so Persian and Arabic resumes that ask for it no longer fall back to a Latin serif and lose their glyphs on export. Thanks to [@santhiprakash](https://github.com/santhiprakash). [2761bd671](https://github.com/amruthpillai/reactive-resume/commit/2761bd671) +- Bold text now uses the font family's true Bold face. Most resumes store their typography as Regular plus SemiBold, which rendered `` almost indistinguishably from body text on faces like Open Sans; bold now resolves to the family's 700 weight where it has one, and to its heaviest bold-class face where it does not. Existing resumes will export with visibly stronger bold text. Thanks to [@santhiprakash](https://github.com/santhiprakash). [e065a1082](https://github.com/reactive-resume/reactive-resume/commit/e065a1082) +- Long bullet-list lines no longer spill past the page margin. Thanks to [@santhiprakash](https://github.com/santhiprakash). [a416d0111](https://github.com/reactive-resume/reactive-resume/commit/a416d0111) +- Emoji render instead of dropping out as blank boxes. They are drawn as monochrome outlines, because the color emoji format cannot be embedded in a PDF, and the fallback font is only loaded when your resume actually contains emoji. Thanks to [@santhiprakash](https://github.com/santhiprakash). [b47f80532](https://github.com/reactive-resume/reactive-resume/commit/b47f80532) +- Vazirmatn is available in the font catalog again, so Persian and Arabic resumes that ask for it no longer fall back to a Latin serif and lose their glyphs on export. Thanks to [@santhiprakash](https://github.com/santhiprakash). [2761bd671](https://github.com/reactive-resume/reactive-resume/commit/2761bd671) ## Self-Hosting & Maintenance -- **A migration drops the `resume_analysis` table.** Any saved analyses are deleted when you upgrade; they have no equivalent in the new report, which is computed on demand rather than stored. No action is needed beyond the usual upgrade. [#3382](https://github.com/amruthpillai/reactive-resume/pull/3382) -- **Two API surfaces were removed.** MCP clients calling `get_resume_analysis` and API clients calling `POST /ai/analyze-resume` will start failing; the replacement is `POST /ai/ats-review`, which reviews extracted resume text and returns qualitative feedback without a score. [#3382](https://github.com/amruthpillai/reactive-resume/pull/3382) -- `/ats-checker` is listed in the sitemap and carries its own preview card, so the page is indexable and shares cleanly. [#3382](https://github.com/amruthpillai/reactive-resume/pull/3382) +- **A migration drops the `resume_analysis` table.** Any saved analyses are deleted when you upgrade; they have no equivalent in the new report, which is computed on demand rather than stored. No action is needed beyond the usual upgrade. [#3382](https://github.com/reactive-resume/reactive-resume/pull/3382) +- **Two API surfaces were removed.** MCP clients calling `get_resume_analysis` and API clients calling `POST /ai/analyze-resume` will start failing; the replacement is `POST /ai/ats-review`, which reviews extracted resume text and returns qualitative feedback without a score. [#3382](https://github.com/reactive-resume/reactive-resume/pull/3382) +- `/ats-checker` is listed in the sitemap and carries its own preview card, so the page is indexable and shares cleanly. [#3382](https://github.com/reactive-resume/reactive-resume/pull/3382) - Routine dependency updates across the workspace, including the AI SDK providers, Better Auth, TipTap, TanStack Query, Hono and the build toolchain. All patch and minor releases; no breaking upgrades. -- Translations synced from Crowdin, with the new ATS checker strings covered across every supported language. [7fac6f29c](https://github.com/amruthpillai/reactive-resume/commit/7fac6f29c) +- Translations synced from Crowdin, with the new ATS checker strings covered across every supported language. [7fac6f29c](https://github.com/reactive-resume/reactive-resume/commit/7fac6f29c) -**Full Changelog**: [v5.2.8...v5.2.9](https://github.com/amruthpillai/reactive-resume/compare/v5.2.8...v5.2.9) +**Full Changelog**: [v5.2.8...v5.2.9](https://github.com/reactive-resume/reactive-resume/compare/v5.2.8...v5.2.9) ## Highlights -- **The AI agent now asks before it edits your resume.** Changes arrive as a proposal you approve or reject, so you see what the assistant wants to touch before anything is written. Once you trust a conversation, you can turn the review step off for that thread alone. The agent also survives a server restart mid-reply instead of leaving the thread stuck, and long conversations are trimmed as they grow so they keep working past the point they used to stall. [c8081ac2f](https://github.com/amruthpillai/reactive-resume/commit/c8081ac2f) -- **Custom Styles can finally reach every item header.** `item-header` used to match only some sections, and on stacked headers only the first row — certifications, awards, projects, publications and references quietly ignored it. It now covers the full header row of every section on every template, and a new `item-header-row` part lets you stop a long title from pushing its trailing date onto a line of its own. [4d53a6d1d](https://github.com/amruthpillai/reactive-resume/commit/4d53a6d1d), [00be67f70](https://github.com/amruthpillai/reactive-resume/commit/00be67f70) -- **Self-hosters using a custom OAuth provider must update one URL.** The callback path changed from `/api/auth/oauth2/callback/custom` to `/api/auth/callback/custom`. Update the redirect URI registered with your identity provider before upgrading, or custom sign-in will fail. Installs that use `OAUTH_DISCOVERY_URL` need one additional SQL statement — both steps are written up in the [SSO documentation](https://docs.rxresu.me/self-hosting/sso). [bdac806c7](https://github.com/amruthpillai/reactive-resume/commit/bdac806c7) +- **The AI agent now asks before it edits your resume.** Changes arrive as a proposal you approve or reject, so you see what the assistant wants to touch before anything is written. Once you trust a conversation, you can turn the review step off for that thread alone. The agent also survives a server restart mid-reply instead of leaving the thread stuck, and long conversations are trimmed as they grow so they keep working past the point they used to stall. [c8081ac2f](https://github.com/reactive-resume/reactive-resume/commit/c8081ac2f) +- **Custom Styles can finally reach every item header.** `item-header` used to match only some sections, and on stacked headers only the first row — certifications, awards, projects, publications and references quietly ignored it. It now covers the full header row of every section on every template, and a new `item-header-row` part lets you stop a long title from pushing its trailing date onto a line of its own. [4d53a6d1d](https://github.com/reactive-resume/reactive-resume/commit/4d53a6d1d), [00be67f70](https://github.com/reactive-resume/reactive-resume/commit/00be67f70) +- **Self-hosters using a custom OAuth provider must update one URL.** The callback path changed from `/api/auth/oauth2/callback/custom` to `/api/auth/callback/custom`. Update the redirect URI registered with your identity provider before upgrading, or custom sign-in will fail. Installs that use `OAUTH_DISCOVERY_URL` need one additional SQL statement — both steps are written up in the [SSO documentation](https://docs.rxresu.me/self-hosting/sso). [bdac806c7](https://github.com/reactive-resume/reactive-resume/commit/bdac806c7) ## AI Agent -- Resume edits are gated behind an approval step, with a per-conversation setting to skip it once you are comfortable. Tool activity, token usage, and each step the assistant takes are now visible in the thread. [c8081ac2f](https://github.com/amruthpillai/reactive-resume/commit/c8081ac2f) -- Copying a conversation as JSON no longer embeds full resume documents, so the file stays small and your resume content does not travel with a transcript you might paste elsewhere. [8ce899a04](https://github.com/amruthpillai/reactive-resume/commit/8ce899a04) -- Resume analysis is told today's date, so it no longer misjudges how recent your most recent role is. Thanks to [@emanuelet](https://github.com/emanuelet). [#3353](https://github.com/amruthpillai/reactive-resume/pull/3353) -- Agent edits to a newly created resume no longer fail permanently with a version conflict. [39f36b4ac](https://github.com/amruthpillai/reactive-resume/commit/39f36b4ac) +- Resume edits are gated behind an approval step, with a per-conversation setting to skip it once you are comfortable. Tool activity, token usage, and each step the assistant takes are now visible in the thread. [c8081ac2f](https://github.com/reactive-resume/reactive-resume/commit/c8081ac2f) +- Copying a conversation as JSON no longer embeds full resume documents, so the file stays small and your resume content does not travel with a transcript you might paste elsewhere. [8ce899a04](https://github.com/reactive-resume/reactive-resume/commit/8ce899a04) +- Resume analysis is told today's date, so it no longer misjudges how recent your most recent role is. Thanks to [@emanuelet](https://github.com/emanuelet). [#3353](https://github.com/reactive-resume/reactive-resume/pull/3353) +- Agent edits to a newly created resume no longer fail permanently with a version conflict. [39f36b4ac](https://github.com/reactive-resume/reactive-resume/commit/39f36b4ac) ## Custom Styles -- `item-header` now applies to the whole header row of every section on every template, instead of being silently dropped on sections whose header did not start with the one element it looked for. Rendered output is unchanged apart from the rows that should have been styled all along. [4d53a6d1d](https://github.com/amruthpillai/reactive-resume/commit/4d53a6d1d) -- Added `template-part[name="item-header-row"]`, the split row holding a title and its trailing date. Set `flex-wrap: nowrap` on it to keep the date pinned right down a long list of certifications. [00be67f70](https://github.com/amruthpillai/reactive-resume/commit/00be67f70) -- Under `nowrap`, long item titles no longer overlap the date beside them. [ebcaa4729](https://github.com/amruthpillai/reactive-resume/commit/ebcaa4729) +- `item-header` now applies to the whole header row of every section on every template, instead of being silently dropped on sections whose header did not start with the one element it looked for. Rendered output is unchanged apart from the rows that should have been styled all along. [4d53a6d1d](https://github.com/reactive-resume/reactive-resume/commit/4d53a6d1d) +- Added `template-part[name="item-header-row"]`, the split row holding a title and its trailing date. Set `flex-wrap: nowrap` on it to keep the date pinned right down a long list of certifications. [00be67f70](https://github.com/reactive-resume/reactive-resume/commit/00be67f70) +- Under `nowrap`, long item titles no longer overlap the date beside them. [ebcaa4729](https://github.com/reactive-resume/reactive-resume/commit/ebcaa4729) ## Accounts & Sign-in -- Disconnecting a linked provider works again. Sessions last a week, but the unlink endpoint rejected any session older than a day, so the button failed for nearly everyone. [39590eaff](https://github.com/amruthpillai/reactive-resume/commit/39590eaff) -- Sign-in and account errors now show the actual reason instead of collapsing to a generic message. [39590eaff](https://github.com/amruthpillai/reactive-resume/commit/39590eaff) -- Sign-in failures that happen before your provider can redirect you now land on a proper page explaining what went wrong, translated into every supported language, rather than a wall of JSON. [bdac806c7](https://github.com/amruthpillai/reactive-resume/commit/bdac806c7), [b960e3273](https://github.com/amruthpillai/reactive-resume/commit/b960e3273) +- Disconnecting a linked provider works again. Sessions last a week, but the unlink endpoint rejected any session older than a day, so the button failed for nearly everyone. [39590eaff](https://github.com/reactive-resume/reactive-resume/commit/39590eaff) +- Sign-in and account errors now show the actual reason instead of collapsing to a generic message. [39590eaff](https://github.com/reactive-resume/reactive-resume/commit/39590eaff) +- Sign-in failures that happen before your provider can redirect you now land on a proper page explaining what went wrong, translated into every supported language, rather than a wall of JSON. [bdac806c7](https://github.com/reactive-resume/reactive-resume/commit/bdac806c7), [b960e3273](https://github.com/reactive-resume/reactive-resume/commit/b960e3273) ## Self-Hosting & Maintenance -- Upgraded to Better Auth 1.7. Beyond the callback URL change above, accounts are now identified by the issuer your provider advertises; the startup migration backfills existing accounts and refuses to proceed if the backfill would merge two accounts together. [bdac806c7](https://github.com/amruthpillai/reactive-resume/commit/bdac806c7) -- The DeepSeek Harness plugin now lives in this repository and is published from it. It reads MCP tool names directly from the server, so a renamed tool breaks its prompt guide in the same pull request rather than days later through a scheduled job. [65618a82a](https://github.com/amruthpillai/reactive-resume/commit/65618a82a) -- Routine dependency updates across the workspace, including the AI SDK providers, the PDF renderer, and the build toolchain. [8ffe50a58](https://github.com/amruthpillai/reactive-resume/commit/8ffe50a58) +- Upgraded to Better Auth 1.7. Beyond the callback URL change above, accounts are now identified by the issuer your provider advertises; the startup migration backfills existing accounts and refuses to proceed if the backfill would merge two accounts together. [bdac806c7](https://github.com/reactive-resume/reactive-resume/commit/bdac806c7) +- The DeepSeek Harness plugin now lives in this repository and is published from it. It reads MCP tool names directly from the server, so a renamed tool breaks its prompt guide in the same pull request rather than days later through a scheduled job. [65618a82a](https://github.com/reactive-resume/reactive-resume/commit/65618a82a) +- Routine dependency updates across the workspace, including the AI SDK providers, the PDF renderer, and the build toolchain. [8ffe50a58](https://github.com/reactive-resume/reactive-resume/commit/8ffe50a58) -**Full Changelog**: [v5.2.7...v5.2.8](https://github.com/amruthpillai/reactive-resume/compare/v5.2.7...v5.2.8) +**Full Changelog**: [v5.2.7...v5.2.8](https://github.com/reactive-resume/reactive-resume/compare/v5.2.7...v5.2.8) ## Highlights -- **Custom Styles now compile in your browser.** Semantic CSS is compiled and resolved locally for the editor, preview, public resumes, and exports, so diagnostics appear as you type instead of after a save and a server round-trip. Self-hosted servers no longer run a stylesheet preflight worker on every edit, and server-side PDF generation stays available as a fallback when a browser cannot render locally. [9509b5bc2](https://github.com/amruthpillai/reactive-resume/commit/9509b5bc2) -- **Shared resume links now unfurl with a preview card.** Posting a public resume link to X, LinkedIn, Slack, or any chat app shows the name, headline, and template preview instead of a bare URL. The homepage's own card and structured data reach crawlers again — the static file handler had been answering the root request before the code that injects them could run. [9d0dc3670](https://github.com/amruthpillai/reactive-resume/commit/9d0dc3670), [36c35c9bd](https://github.com/amruthpillai/reactive-resume/commit/36c35c9bd) -- **The AI agent asks instead of guessing.** When a request is ambiguous, the assistant now offers a short set of choices inline in the chat rather than picking an interpretation and running with it. [eedf2faf0](https://github.com/amruthpillai/reactive-resume/commit/eedf2faf0) +- **Custom Styles now compile in your browser.** Semantic CSS is compiled and resolved locally for the editor, preview, public resumes, and exports, so diagnostics appear as you type instead of after a save and a server round-trip. Self-hosted servers no longer run a stylesheet preflight worker on every edit, and server-side PDF generation stays available as a fallback when a browser cannot render locally. [9509b5bc2](https://github.com/reactive-resume/reactive-resume/commit/9509b5bc2) +- **Shared resume links now unfurl with a preview card.** Posting a public resume link to X, LinkedIn, Slack, or any chat app shows the name, headline, and template preview instead of a bare URL. The homepage's own card and structured data reach crawlers again — the static file handler had been answering the root request before the code that injects them could run. [9d0dc3670](https://github.com/reactive-resume/reactive-resume/commit/9d0dc3670), [36c35c9bd](https://github.com/reactive-resume/reactive-resume/commit/36c35c9bd) +- **The AI agent asks instead of guessing.** When a request is ambiguous, the assistant now offers a short set of choices inline in the chat rather than picking an interpretation and running with it. [eedf2faf0](https://github.com/reactive-resume/reactive-resume/commit/eedf2faf0) ## Sharing & Search -- Twitter card tags are declared with the attribute X actually reads, so the title, description, and banner image appear in link previews again. [1e23a453a](https://github.com/amruthpillai/reactive-resume/commit/1e23a453a) -- Resume preview cards are built only for resumes that are public and not password-protected, and generating one no longer counts as a visit in your statistics. [9d0dc3670](https://github.com/amruthpillai/reactive-resume/commit/9d0dc3670) -- Shortened the site description so it is no longer cut off in mobile search results. [d0fa9ae8d](https://github.com/amruthpillai/reactive-resume/commit/d0fa9ae8d) +- Twitter card tags are declared with the attribute X actually reads, so the title, description, and banner image appear in link previews again. [1e23a453a](https://github.com/reactive-resume/reactive-resume/commit/1e23a453a) +- Resume preview cards are built only for resumes that are public and not password-protected, and generating one no longer counts as a visit in your statistics. [9d0dc3670](https://github.com/reactive-resume/reactive-resume/commit/9d0dc3670) +- Shortened the site description so it is no longer cut off in mobile search results. [d0fa9ae8d](https://github.com/reactive-resume/reactive-resume/commit/d0fa9ae8d) ## AI Agent -- Added inline questions with selectable answers, along with a clearer empty state when a thread has no messages yet. [eedf2faf0](https://github.com/amruthpillai/reactive-resume/commit/eedf2faf0) -- The message box keeps focus after you send, so you can keep typing while a reply streams in instead of clicking back into it. [7c7dbaf21](https://github.com/amruthpillai/reactive-resume/commit/7c7dbaf21) -- Fixed a rendering bug that could duplicate or drop parts of a long, multi-step reply as it streamed. [762b999d1](https://github.com/amruthpillai/reactive-resume/commit/762b999d1) +- Added inline questions with selectable answers, along with a clearer empty state when a thread has no messages yet. [eedf2faf0](https://github.com/reactive-resume/reactive-resume/commit/eedf2faf0) +- The message box keeps focus after you send, so you can keep typing while a reply streams in instead of clicking back into it. [7c7dbaf21](https://github.com/reactive-resume/reactive-resume/commit/7c7dbaf21) +- Fixed a rendering bug that could duplicate or drop parts of a long, multi-step reply as it streamed. [762b999d1](https://github.com/reactive-resume/reactive-resume/commit/762b999d1) ## Job Applications -- Application auto-fill now works from a pasted job posting instead of a URL. Fetching arbitrary URLs from the server meant owning redirect, size, and private-address defences plus per-site scraping quirks, so the URL field has been removed — paste the posting text and the fields below it are filled in as before. Auto-fill is offered only when an AI provider is configured and tested, and only for a paste long enough to be a real posting. [da2f1f824](https://github.com/amruthpillai/reactive-resume/commit/da2f1f824) +- Application auto-fill now works from a pasted job posting instead of a URL. Fetching arbitrary URLs from the server meant owning redirect, size, and private-address defences plus per-site scraping quirks, so the URL field has been removed — paste the posting text and the fields below it are filled in as before. Auto-fill is offered only when an AI provider is configured and tested, and only for a paste long enough to be a real posting. [da2f1f824](https://github.com/reactive-resume/reactive-resume/commit/da2f1f824) ## Settings & Interface -- **Danger Zone** is now **Account**, at `/dashboard/settings/account`, since the page covers account-level actions rather than only destructive ones. [7a14b0dfb](https://github.com/amruthpillai/reactive-resume/commit/7a14b0dfb) -- API keys created without an expiry date are listed again instead of disappearing from the key list. [8affc567e](https://github.com/amruthpillai/reactive-resume/commit/8affc567e) -- Testing an AI provider is now time-bounded and reports why it failed, so a rejected key, a wrong model name, and an unreachable host are no longer indistinguishable from a connection that appears stuck. Thanks to [@MrTig-afk](https://github.com/MrTig-afk). [#3319](https://github.com/amruthpillai/reactive-resume/pull/3319) -- Rebuilt the notification toasts on the same component library as the rest of the interface, for consistent styling, stacking, and screen-reader behaviour. [170550ed5](https://github.com/amruthpillai/reactive-resume/commit/170550ed5), [23ceee214](https://github.com/amruthpillai/reactive-resume/commit/23ceee214), [e2554c9be](https://github.com/amruthpillai/reactive-resume/commit/e2554c9be) +- **Danger Zone** is now **Account**, at `/dashboard/settings/account`, since the page covers account-level actions rather than only destructive ones. [7a14b0dfb](https://github.com/reactive-resume/reactive-resume/commit/7a14b0dfb) +- API keys created without an expiry date are listed again instead of disappearing from the key list. [8affc567e](https://github.com/reactive-resume/reactive-resume/commit/8affc567e) +- Testing an AI provider is now time-bounded and reports why it failed, so a rejected key, a wrong model name, and an unreachable host are no longer indistinguishable from a connection that appears stuck. Thanks to [@MrTig-afk](https://github.com/MrTig-afk). [#3319](https://github.com/reactive-resume/reactive-resume/pull/3319) +- Rebuilt the notification toasts on the same component library as the rest of the interface, for consistent styling, stacking, and screen-reader behaviour. [170550ed5](https://github.com/reactive-resume/reactive-resume/commit/170550ed5), [23ceee214](https://github.com/reactive-resume/reactive-resume/commit/23ceee214), [e2554c9be](https://github.com/reactive-resume/reactive-resume/commit/e2554c9be) ## Reliability, Self-Hosting & Maintenance -- The server no longer carries the stylesheet control plane — apply state, preflight, revisions, render-data versions, and mismatch negotiation are gone, along with the unused resume columns that backed them. Expect lower memory and CPU use on instances where Custom Styles are in active use. [9509b5bc2](https://github.com/amruthpillai/reactive-resume/commit/9509b5bc2) -- The conflict-marker pre-commit check now runs correctly on Windows. Thanks to [@MrTig-afk](https://github.com/MrTig-afk). [#3320](https://github.com/amruthpillai/reactive-resume/pull/3320) -- Test suites are isolated from one another and the OpenAPI specification is built once per suite, removing a class of order-dependent failures and timeouts that made local runs unreliable. [e8508e6d0](https://github.com/amruthpillai/reactive-resume/commit/e8508e6d0), [60d044076](https://github.com/amruthpillai/reactive-resume/commit/60d044076), [bfdd29f94](https://github.com/amruthpillai/reactive-resume/commit/bfdd29f94), [ac062bbcb](https://github.com/amruthpillai/reactive-resume/commit/ac062bbcb) -- Organized GitHub issue triage. [#3325](https://github.com/amruthpillai/reactive-resume/pull/3325) -- Synced the latest Crowdin translation catalogs. [#3327](https://github.com/amruthpillai/reactive-resume/pull/3327), [#3328](https://github.com/amruthpillai/reactive-resume/pull/3328), [#3330](https://github.com/amruthpillai/reactive-resume/pull/3330) -- Refreshed workspace dependencies and development tooling. [9dc2aade4](https://github.com/amruthpillai/reactive-resume/commit/9dc2aade4) +- The server no longer carries the stylesheet control plane — apply state, preflight, revisions, render-data versions, and mismatch negotiation are gone, along with the unused resume columns that backed them. Expect lower memory and CPU use on instances where Custom Styles are in active use. [9509b5bc2](https://github.com/reactive-resume/reactive-resume/commit/9509b5bc2) +- The conflict-marker pre-commit check now runs correctly on Windows. Thanks to [@MrTig-afk](https://github.com/MrTig-afk). [#3320](https://github.com/reactive-resume/reactive-resume/pull/3320) +- Test suites are isolated from one another and the OpenAPI specification is built once per suite, removing a class of order-dependent failures and timeouts that made local runs unreliable. [e8508e6d0](https://github.com/reactive-resume/reactive-resume/commit/e8508e6d0), [60d044076](https://github.com/reactive-resume/reactive-resume/commit/60d044076), [bfdd29f94](https://github.com/reactive-resume/reactive-resume/commit/bfdd29f94), [ac062bbcb](https://github.com/reactive-resume/reactive-resume/commit/ac062bbcb) +- Organized GitHub issue triage. [#3325](https://github.com/reactive-resume/reactive-resume/pull/3325) +- Synced the latest Crowdin translation catalogs. [#3327](https://github.com/reactive-resume/reactive-resume/pull/3327), [#3328](https://github.com/reactive-resume/reactive-resume/pull/3328), [#3330](https://github.com/reactive-resume/reactive-resume/pull/3330) +- Refreshed workspace dependencies and development tooling. [9dc2aade4](https://github.com/reactive-resume/reactive-resume/commit/9dc2aade4) -**Full Changelog**: [v5.2.6...v5.2.7](https://github.com/amruthpillai/reactive-resume/compare/v5.2.6...v5.2.7) +**Full Changelog**: [v5.2.6...v5.2.7](https://github.com/reactive-resume/reactive-resume/compare/v5.2.6...v5.2.7) ## Highlights -- **Check your resume's ATS parseability as you edit.** The builder now runs a deterministic, private check in your browser for contact details, dates, section structure, reading order, font size, line height, and margins. Findings explain what to change and can jump directly to the affected field. Thanks to [@Syed-Ali-Abbas-Zaidi](https://github.com/Syed-Ali-Abbas-Zaidi). [#3314](https://github.com/amruthpillai/reactive-resume/pull/3314) -- **Download cover letters through MCP.** AI clients can now request a short-lived PDF download URL for either a resume or its visible cover letter. The selected document is cryptographically bound to the URL, so it cannot be switched after signing. Thanks to [@ignaciocarre](https://github.com/ignaciocarre). [#3304](https://github.com/amruthpillai/reactive-resume/pull/3304) -- **Clearer JSON imports.** Reactive Resume, Reactive Resume v4, and JSON Resume files are detected and routed to the correct parser, while malformed files now produce concise, readable validation messages instead of raw error dumps. Thanks to [@MrTig-afk](https://github.com/MrTig-afk). [#3296](https://github.com/amruthpillai/reactive-resume/pull/3296) -- **Semantic CSS is now the standard Custom Styles experience.** New resumes use it by default, the legacy feature flag and banner have been removed, and explicit activation no longer fails on an obsolete legacy-renderer parity check. [3589b534f](https://github.com/amruthpillai/reactive-resume/commit/3589b534f), [#3316](https://github.com/amruthpillai/reactive-resume/pull/3316) +- **Check your resume's ATS parseability as you edit.** The builder now runs a deterministic, private check in your browser for contact details, dates, section structure, reading order, font size, line height, and margins. Findings explain what to change and can jump directly to the affected field. Thanks to [@Syed-Ali-Abbas-Zaidi](https://github.com/Syed-Ali-Abbas-Zaidi). [#3314](https://github.com/reactive-resume/reactive-resume/pull/3314) +- **Download cover letters through MCP.** AI clients can now request a short-lived PDF download URL for either a resume or its visible cover letter. The selected document is cryptographically bound to the URL, so it cannot be switched after signing. Thanks to [@ignaciocarre](https://github.com/ignaciocarre). [#3304](https://github.com/reactive-resume/reactive-resume/pull/3304) +- **Clearer JSON imports.** Reactive Resume, Reactive Resume v4, and JSON Resume files are detected and routed to the correct parser, while malformed files now produce concise, readable validation messages instead of raw error dumps. Thanks to [@MrTig-afk](https://github.com/MrTig-afk). [#3296](https://github.com/reactive-resume/reactive-resume/pull/3296) +- **Semantic CSS is now the standard Custom Styles experience.** New resumes use it by default, the legacy feature flag and banner have been removed, and explicit activation no longer fails on an obsolete legacy-renderer parity check. [3589b534f](https://github.com/reactive-resume/reactive-resume/commit/3589b534f), [#3316](https://github.com/reactive-resume/reactive-resume/pull/3316) ## Resume Builder & PDF Exports -- Fixed missing spaces around bold rich text in PDF exports without changing quoted HTML attributes. Thanks to [@shehraan](https://github.com/shehraan). [#3273](https://github.com/amruthpillai/reactive-resume/pull/3273) -- Added Noto punctuation fallbacks so bullets and other punctuation render correctly when the selected Latin font does not contain those glyphs. Thanks to [@santhiprakash](https://github.com/santhiprakash). [#3294](https://github.com/amruthpillai/reactive-resume/pull/3294) -- Stopped empty or whitespace-only skill proficiency values from producing phantom PDF text nodes in the Gengar template. Thanks to [@santhiprakash](https://github.com/santhiprakash). [#3289](https://github.com/amruthpillai/reactive-resume/pull/3289) -- The icon picker once again lets you choose the empty option to remove an icon. Thanks to [@garudaccs](https://github.com/garudaccs). [#3298](https://github.com/amruthpillai/reactive-resume/pull/3298) -- Panning the builder canvas now releases focus from the active field, preventing accidental edits while navigating the preview. Thanks to [@Syed-Ali-Abbas-Zaidi](https://github.com/Syed-Ali-Abbas-Zaidi). [#3303](https://github.com/amruthpillai/reactive-resume/pull/3303) -- The template gallery now uses fast, stable preview images instead of rendering every template live. [#3302](https://github.com/amruthpillai/reactive-resume/pull/3302) -- Moving from the import dialog to AI provider settings now asks for confirmation before discarding the current import. Thanks to [@Syed-Ali-Abbas-Zaidi](https://github.com/Syed-Ali-Abbas-Zaidi). [#3308](https://github.com/amruthpillai/reactive-resume/pull/3308) +- Fixed missing spaces around bold rich text in PDF exports without changing quoted HTML attributes. Thanks to [@shehraan](https://github.com/shehraan). [#3273](https://github.com/reactive-resume/reactive-resume/pull/3273) +- Added Noto punctuation fallbacks so bullets and other punctuation render correctly when the selected Latin font does not contain those glyphs. Thanks to [@santhiprakash](https://github.com/santhiprakash). [#3294](https://github.com/reactive-resume/reactive-resume/pull/3294) +- Stopped empty or whitespace-only skill proficiency values from producing phantom PDF text nodes in the Gengar template. Thanks to [@santhiprakash](https://github.com/santhiprakash). [#3289](https://github.com/reactive-resume/reactive-resume/pull/3289) +- The icon picker once again lets you choose the empty option to remove an icon. Thanks to [@garudaccs](https://github.com/garudaccs). [#3298](https://github.com/reactive-resume/reactive-resume/pull/3298) +- Panning the builder canvas now releases focus from the active field, preventing accidental edits while navigating the preview. Thanks to [@Syed-Ali-Abbas-Zaidi](https://github.com/Syed-Ali-Abbas-Zaidi). [#3303](https://github.com/reactive-resume/reactive-resume/pull/3303) +- The template gallery now uses fast, stable preview images instead of rendering every template live. [#3302](https://github.com/reactive-resume/reactive-resume/pull/3302) +- Moving from the import dialog to AI provider settings now asks for confirmation before discarding the current import. Thanks to [@Syed-Ali-Abbas-Zaidi](https://github.com/Syed-Ali-Abbas-Zaidi). [#3308](https://github.com/reactive-resume/reactive-resume/pull/3308) ## AI, Authentication & Integrations -- Stopping or archiving an AI agent run now cancels it cleanly instead of surfacing an unhandled stream error that could terminate the server. [04100aa9e](https://github.com/amruthpillai/reactive-resume/commit/04100aa9e) -- Social sign-in can create an account directly when registration is enabled, removing the need to visit the registration screen first. [2d6ea9ce8](https://github.com/amruthpillai/reactive-resume/commit/2d6ea9ce8) -- MCP OAuth JWT verification now uses the server's loopback JWKS endpoint, fixing verification on deployments whose public URL cannot be reached from inside the container. Thanks to [@santhiprakash](https://github.com/santhiprakash). [#3297](https://github.com/amruthpillai/reactive-resume/pull/3297) +- Stopping or archiving an AI agent run now cancels it cleanly instead of surfacing an unhandled stream error that could terminate the server. [04100aa9e](https://github.com/reactive-resume/reactive-resume/commit/04100aa9e) +- Social sign-in can create an account directly when registration is enabled, removing the need to visit the registration screen first. [2d6ea9ce8](https://github.com/reactive-resume/reactive-resume/commit/2d6ea9ce8) +- MCP OAuth JWT verification now uses the server's loopback JWKS endpoint, fixing verification on deployments whose public URL cannot be reached from inside the container. Thanks to [@santhiprakash](https://github.com/santhiprakash). [#3297](https://github.com/reactive-resume/reactive-resume/pull/3297) ## Reliability, Accessibility & Self-Hosting -- Semantic CSS PDF preflight now warms and reuses one worker instead of cold-starting a renderer for every edit, making style activation reliable on slower or CPU-constrained servers. [e6a31aab9](https://github.com/amruthpillai/reactive-resume/commit/e6a31aab9) -- Unhandled promise rejections are logged without taking down the entire Node.js process; uncaught exceptions continue to use Node's fail-fast behavior. [efd950bd9](https://github.com/amruthpillai/reactive-resume/commit/efd950bd9) -- Restored consistent PDF line metrics after the React PDF dependency update, preserving the established browser-to-PDF layout. [b4f245a38](https://github.com/amruthpillai/reactive-resume/commit/b4f245a38) -- Added an accessible label to the two-factor secret copy button, restored visible keyboard focus in the template gallery, and prevented duplicate API keys from double submission. [ba1f46995](https://github.com/amruthpillai/reactive-resume/commit/ba1f46995) -- Production and development containers now use the official pnpm image, and the contributor guide documents the matching Docker and `dotenvx` workflows. [28d698635](https://github.com/amruthpillai/reactive-resume/commit/28d698635) +- Semantic CSS PDF preflight now warms and reuses one worker instead of cold-starting a renderer for every edit, making style activation reliable on slower or CPU-constrained servers. [e6a31aab9](https://github.com/reactive-resume/reactive-resume/commit/e6a31aab9) +- Unhandled promise rejections are logged without taking down the entire Node.js process; uncaught exceptions continue to use Node's fail-fast behavior. [efd950bd9](https://github.com/reactive-resume/reactive-resume/commit/efd950bd9) +- Restored consistent PDF line metrics after the React PDF dependency update, preserving the established browser-to-PDF layout. [b4f245a38](https://github.com/reactive-resume/reactive-resume/commit/b4f245a38) +- Added an accessible label to the two-factor secret copy button, restored visible keyboard focus in the template gallery, and prevented duplicate API keys from double submission. [ba1f46995](https://github.com/reactive-resume/reactive-resume/commit/ba1f46995) +- Production and development containers now use the official pnpm image, and the contributor guide documents the matching Docker and `dotenvx` workflows. [28d698635](https://github.com/reactive-resume/reactive-resume/commit/28d698635) ## Documentation & Localization -- Corrected the development guide's environment, migration, and app-name instructions. Thanks to [@santhiprakash](https://github.com/santhiprakash). [#3286](https://github.com/amruthpillai/reactive-resume/pull/3286), [#3287](https://github.com/amruthpillai/reactive-resume/pull/3287) -- Clarified the Redis URLs and Compose startup order used by repository automation and development agents. Thanks to [@santhiprakash](https://github.com/santhiprakash). [#3288](https://github.com/amruthpillai/reactive-resume/pull/3288) -- Synced the latest Crowdin translation catalogs. [#3280](https://github.com/amruthpillai/reactive-resume/pull/3280), [#3281](https://github.com/amruthpillai/reactive-resume/pull/3281), [#3315](https://github.com/amruthpillai/reactive-resume/pull/3315) +- Corrected the development guide's environment, migration, and app-name instructions. Thanks to [@santhiprakash](https://github.com/santhiprakash). [#3286](https://github.com/reactive-resume/reactive-resume/pull/3286), [#3287](https://github.com/reactive-resume/reactive-resume/pull/3287) +- Clarified the Redis URLs and Compose startup order used by repository automation and development agents. Thanks to [@santhiprakash](https://github.com/santhiprakash). [#3288](https://github.com/reactive-resume/reactive-resume/pull/3288) +- Synced the latest Crowdin translation catalogs. [#3280](https://github.com/reactive-resume/reactive-resume/pull/3280), [#3281](https://github.com/reactive-resume/reactive-resume/pull/3281), [#3315](https://github.com/reactive-resume/reactive-resume/pull/3315) - Refreshed workspace dependencies and development tooling. -**Full Changelog**: [v5.2.5...v5.2.6](https://github.com/amruthpillai/reactive-resume/compare/v5.2.5...v5.2.6) +**Full Changelog**: [v5.2.5...v5.2.6](https://github.com/reactive-resume/reactive-resume/compare/v5.2.5...v5.2.6) ## Highlights -- **Custom Styles are now Semantic CSS.** Custom Styles use a new CSS-like language built for resume PDFs. Selectors describe resume content — `section[type="experience"]`, `region[placement="sidebar"]`, `field[name="position"]`, `list-marker` — instead of a template's internal markup, so a stylesheet keeps working across templates and can be copied between resumes. Builder settings are exposed as read-only `--resume-*` variables, and the editor keeps your draft, status, undo history, and last valid stylesheet separate so a broken rule never replaces a working PDF. [d2ffbf961](https://github.com/amruthpillai/reactive-resume/commit/d2ffbf961) -- **Editable application timeline.** Application history is now a real timeline you can curate: add a note with its own date, edit or delete an entry, and see which stage each entry belongs to, alongside a stage-entered date. Available in the app and through MCP. [18d0c14aa](https://github.com/amruthpillai/reactive-resume/commit/18d0c14aa) -- **LinkedIn job posting auto-fill.** Pasting a LinkedIn job URL into an application now fills in the title, company, location, and description directly from the posting. [47349e7ab](https://github.com/amruthpillai/reactive-resume/commit/47349e7ab) -- **A faster homepage.** Homepage SEO metadata is rendered by the server on the first response, and the hero video no longer sits on the largest-contentful-paint path. [418c7887e](https://github.com/amruthpillai/reactive-resume/commit/418c7887e), [1e665fbe7](https://github.com/amruthpillai/reactive-resume/commit/1e665fbe7) +- **Custom Styles are now Semantic CSS.** Custom Styles use a new CSS-like language built for resume PDFs. Selectors describe resume content — `section[type="experience"]`, `region[placement="sidebar"]`, `field[name="position"]`, `list-marker` — instead of a template's internal markup, so a stylesheet keeps working across templates and can be copied between resumes. Builder settings are exposed as read-only `--resume-*` variables, and the editor keeps your draft, status, undo history, and last valid stylesheet separate so a broken rule never replaces a working PDF. [d2ffbf961](https://github.com/reactive-resume/reactive-resume/commit/d2ffbf961) +- **Editable application timeline.** Application history is now a real timeline you can curate: add a note with its own date, edit or delete an entry, and see which stage each entry belongs to, alongside a stage-entered date. Available in the app and through MCP. [18d0c14aa](https://github.com/reactive-resume/reactive-resume/commit/18d0c14aa) +- **LinkedIn job posting auto-fill.** Pasting a LinkedIn job URL into an application now fills in the title, company, location, and description directly from the posting. [47349e7ab](https://github.com/reactive-resume/reactive-resume/commit/47349e7ab) +- **A faster homepage.** Homepage SEO metadata is rendered by the server on the first response, and the hero video no longer sits on the largest-contentful-paint path. [418c7887e](https://github.com/reactive-resume/reactive-resume/commit/418c7887e), [1e665fbe7](https://github.com/reactive-resume/reactive-resume/commit/1e665fbe7) ## Custom Styles (Semantic CSS) -- Added the Semantic CSS editor under **Design → Custom Styles**, with live status, error line and column numbers, "selector matches nothing" warnings, stylesheet undo and redo, **Reset to applied stylesheet**, **Copy stylesheet**, and a focus mode that opens full-width on mobile. [d2ffbf961](https://github.com/amruthpillai/reactive-resume/commit/d2ffbf961) -- Resumes still using the previous Custom Styles form get a converted stylesheet draft to review; the original legacy rules stay active until you select **Activate Semantic CSS**, and remain available for rollback. [d2ffbf961](https://github.com/amruthpillai/reactive-resume/commit/d2ffbf961) -- Added semantic selectors, attributes, and template-specific parts for all 15 templates, plus pagination and page-size controls (`break-inside`, `orphans`, `widows`, `-resume-min-presence-ahead`, `size`) and PDF-dimension media queries. [d2ffbf961](https://github.com/amruthpillai/reactive-resume/commit/d2ffbf961) +- Added the Semantic CSS editor under **Design → Custom Styles**, with live status, error line and column numbers, "selector matches nothing" warnings, stylesheet undo and redo, **Reset to applied stylesheet**, **Copy stylesheet**, and a focus mode that opens full-width on mobile. [d2ffbf961](https://github.com/reactive-resume/reactive-resume/commit/d2ffbf961) +- Resumes still using the previous Custom Styles form get a converted stylesheet draft to review; the original legacy rules stay active until you select **Activate Semantic CSS**, and remain available for rollback. [d2ffbf961](https://github.com/reactive-resume/reactive-resume/commit/d2ffbf961) +- Added semantic selectors, attributes, and template-specific parts for all 15 templates, plus pagination and page-size controls (`break-inside`, `orphans`, `widows`, `-resume-min-presence-ahead`, `size`) and PDF-dimension media queries. [d2ffbf961](https://github.com/reactive-resume/reactive-resume/commit/d2ffbf961) - New resumes start in Semantic CSS mode automatically, while existing legacy styles remain active until their converted draft is explicitly activated. -- Invalid style intents are now filtered out instead of discarding the whole rule set, so one bad entry no longer drops your valid custom styles. [689e7e24d](https://github.com/amruthpillai/reactive-resume/commit/689e7e24d) -- Custom style numeric inputs are clamped to their supported ranges. [2a0782517](https://github.com/amruthpillai/reactive-resume/commit/2a0782517) -- Award titles can now be un-bolded through custom styles. [08d859010](https://github.com/amruthpillai/reactive-resume/commit/08d859010) +- Invalid style intents are now filtered out instead of discarding the whole rule set, so one bad entry no longer drops your valid custom styles. [689e7e24d](https://github.com/reactive-resume/reactive-resume/commit/689e7e24d) +- Custom style numeric inputs are clamped to their supported ranges. [2a0782517](https://github.com/reactive-resume/reactive-resume/commit/2a0782517) +- Award titles can now be un-bolded through custom styles. [08d859010](https://github.com/reactive-resume/reactive-resume/commit/08d859010) ## Application Tracker -- Added timeline entry creation with a custom date, plus update and delete for individual entries, across the API, the detail sheet, and MCP tools. [18d0c14aa](https://github.com/amruthpillai/reactive-resume/commit/18d0c14aa) -- Job posting fetches now work with HTTPS postings that previously failed to load. [d4cf260ae](https://github.com/amruthpillai/reactive-resume/commit/d4cf260ae) +- Added timeline entry creation with a custom date, plus update and delete for individual entries, across the API, the detail sheet, and MCP tools. [18d0c14aa](https://github.com/reactive-resume/reactive-resume/commit/18d0c14aa) +- Job posting fetches now work with HTTPS postings that previously failed to load. [d4cf260ae](https://github.com/reactive-resume/reactive-resume/commit/d4cf260ae) ## AI & Integrations -- The model for a saved AI provider can now be edited inline from settings, instead of deleting and re-adding the provider. [47349e7ab](https://github.com/amruthpillai/reactive-resume/commit/47349e7ab) -- Fixed the OAuth protected-resource metadata so MCP clients receive the correct authorization server list. [1124d3dfd](https://github.com/amruthpillai/reactive-resume/commit/1124d3dfd) +- The model for a saved AI provider can now be edited inline from settings, instead of deleting and re-adding the provider. [47349e7ab](https://github.com/reactive-resume/reactive-resume/commit/47349e7ab) +- Fixed the OAuth protected-resource metadata so MCP clients receive the correct authorization server list. [1124d3dfd](https://github.com/reactive-resume/reactive-resume/commit/1124d3dfd) ## Resume Builder & PDF Exports -- Fixed rich-text editing in the builder, where `Enter` and list editing had stopped working. [b303b8975](https://github.com/amruthpillai/reactive-resume/commit/b303b8975) -- Page margin values are clamped to 0–100, so pasting an out-of-range value no longer crashes the builder. [4ac19f81b](https://github.com/amruthpillai/reactive-resume/commit/4ac19f81b) -- The profile picture delete icon now clears the image correctly. [0eb9ce012](https://github.com/amruthpillai/reactive-resume/commit/0eb9ce012) -- Fixed list markers and bullet indentation when a list splits across a page break in the exported PDF. [ed5d10c49](https://github.com/amruthpillai/reactive-resume/commit/ed5d10c49), [d536b1921](https://github.com/amruthpillai/reactive-resume/commit/d536b1921) -- Fixed skill name sizing so long skill names lay out correctly in PDF exports. [e34e7be6e](https://github.com/amruthpillai/reactive-resume/commit/e34e7be6e) +- Fixed rich-text editing in the builder, where `Enter` and list editing had stopped working. [b303b8975](https://github.com/reactive-resume/reactive-resume/commit/b303b8975) +- Page margin values are clamped to 0–100, so pasting an out-of-range value no longer crashes the builder. [4ac19f81b](https://github.com/reactive-resume/reactive-resume/commit/4ac19f81b) +- The profile picture delete icon now clears the image correctly. [0eb9ce012](https://github.com/reactive-resume/reactive-resume/commit/0eb9ce012) +- Fixed list markers and bullet indentation when a list splits across a page break in the exported PDF. [ed5d10c49](https://github.com/reactive-resume/reactive-resume/commit/ed5d10c49), [d536b1921](https://github.com/reactive-resume/reactive-resume/commit/d536b1921) +- Fixed skill name sizing so long skill names lay out correctly in PDF exports. [e34e7be6e](https://github.com/reactive-resume/reactive-resume/commit/e34e7be6e) ## Performance & SEO -- The homepage now ships SEO metadata in the initial server response, resolved against the instance's public URL. [418c7887e](https://github.com/amruthpillai/reactive-resume/commit/418c7887e), [50f50b267](https://github.com/amruthpillai/reactive-resume/commit/50f50b267) -- The homepage hero now loads a poster image first and takes the video off the LCP path. [1e665fbe7](https://github.com/amruthpillai/reactive-resume/commit/1e665fbe7) -- The PDF renderer is loaded lazily on the server, cutting cold-start time for instances that are not exporting a PDF yet. [bb1fb3a7d](https://github.com/amruthpillai/reactive-resume/commit/bb1fb3a7d) +- The homepage now ships SEO metadata in the initial server response, resolved against the instance's public URL. [418c7887e](https://github.com/reactive-resume/reactive-resume/commit/418c7887e), [50f50b267](https://github.com/reactive-resume/reactive-resume/commit/50f50b267) +- The homepage hero now loads a poster image first and takes the video off the LCP path. [1e665fbe7](https://github.com/reactive-resume/reactive-resume/commit/1e665fbe7) +- The PDF renderer is loaded lazily on the server, cutting cold-start time for instances that are not exporting a PDF yet. [bb1fb3a7d](https://github.com/reactive-resume/reactive-resume/commit/bb1fb3a7d) ## Reliability & Self-Hosting -- Fixed OAuth sign-in mapping the session to the account id instead of the user id. [34c03b1f7](https://github.com/amruthpillai/reactive-resume/commit/34c03b1f7) -- Limited immutable cache headers to hashed media assets so mutable uploads are no longer cached indefinitely. [dd0531091](https://github.com/amruthpillai/reactive-resume/commit/dd0531091) -- Preserved the Cloudflare Rocket Loader exclusion and the bootstrap script attribute order through the production build. [93c06934b](https://github.com/amruthpillai/reactive-resume/commit/93c06934b), [048eab3b4](https://github.com/amruthpillai/reactive-resume/commit/048eab3b4) -- Simplified URL security checks, shared template styles, and test fixtures, removing roughly 1,000 lines of redundant code. [9110e8699](https://github.com/amruthpillai/reactive-resume/commit/9110e8699) -- Refreshed workspace dependencies. [326606682](https://github.com/amruthpillai/reactive-resume/commit/326606682), [164a27930](https://github.com/amruthpillai/reactive-resume/commit/164a27930) +- Fixed OAuth sign-in mapping the session to the account id instead of the user id. [34c03b1f7](https://github.com/reactive-resume/reactive-resume/commit/34c03b1f7) +- Limited immutable cache headers to hashed media assets so mutable uploads are no longer cached indefinitely. [dd0531091](https://github.com/reactive-resume/reactive-resume/commit/dd0531091) +- Preserved the Cloudflare Rocket Loader exclusion and the bootstrap script attribute order through the production build. [93c06934b](https://github.com/reactive-resume/reactive-resume/commit/93c06934b), [048eab3b4](https://github.com/reactive-resume/reactive-resume/commit/048eab3b4) +- Simplified URL security checks, shared template styles, and test fixtures, removing roughly 1,000 lines of redundant code. [9110e8699](https://github.com/reactive-resume/reactive-resume/commit/9110e8699) +- Refreshed workspace dependencies. [326606682](https://github.com/reactive-resume/reactive-resume/commit/326606682), [164a27930](https://github.com/reactive-resume/reactive-resume/commit/164a27930) ## Documentation & Localization -- Rewrote the Custom Styles guide as **Applying Custom Styles**, covering conversion, selectors, builder variables, pagination, diagnosis, and portability. The JSON Resume schema guide and the resume-builder skill schema reference are now generated from the schema so they stay in sync. [d2ffbf961](https://github.com/amruthpillai/reactive-resume/commit/d2ffbf961) -- Added 17 comparison pages covering Reactive Resume against mainstream resume builders, AI and ATS tools, design editors, and career and template services. [9d6426b2e](https://github.com/amruthpillai/reactive-resume/commit/9d6426b2e) -- Canonicalized the getting started routes and fixed the contributing guide's troubleshooting code blocks. [a4897c20d](https://github.com/amruthpillai/reactive-resume/commit/a4897c20d), [e6b4733c5](https://github.com/amruthpillai/reactive-resume/commit/e6b4733c5) -- Pinned the v4 migration script checkout in the self-hosting migration guide, and aligned the documented pnpm version with the `packageManager` field. [ac9813909](https://github.com/amruthpillai/reactive-resume/commit/ac9813909), [15f8bce98](https://github.com/amruthpillai/reactive-resume/commit/15f8bce98) -- Synced Crowdin translation catalogs, including strings for the application timeline. [9085a199c](https://github.com/amruthpillai/reactive-resume/commit/9085a199c), [79e4a3ddc](https://github.com/amruthpillai/reactive-resume/commit/79e4a3ddc), [d50948dde](https://github.com/amruthpillai/reactive-resume/commit/d50948dde) +- Rewrote the Custom Styles guide as **Applying Custom Styles**, covering conversion, selectors, builder variables, pagination, diagnosis, and portability. The JSON Resume schema guide and the resume-builder skill schema reference are now generated from the schema so they stay in sync. [d2ffbf961](https://github.com/reactive-resume/reactive-resume/commit/d2ffbf961) +- Added 17 comparison pages covering Reactive Resume against mainstream resume builders, AI and ATS tools, design editors, and career and template services. [9d6426b2e](https://github.com/reactive-resume/reactive-resume/commit/9d6426b2e) +- Canonicalized the getting started routes and fixed the contributing guide's troubleshooting code blocks. [a4897c20d](https://github.com/reactive-resume/reactive-resume/commit/a4897c20d), [e6b4733c5](https://github.com/reactive-resume/reactive-resume/commit/e6b4733c5) +- Pinned the v4 migration script checkout in the self-hosting migration guide, and aligned the documented pnpm version with the `packageManager` field. [ac9813909](https://github.com/reactive-resume/reactive-resume/commit/ac9813909), [15f8bce98](https://github.com/reactive-resume/reactive-resume/commit/15f8bce98) +- Synced Crowdin translation catalogs, including strings for the application timeline. [9085a199c](https://github.com/reactive-resume/reactive-resume/commit/9085a199c), [79e4a3ddc](https://github.com/reactive-resume/reactive-resume/commit/79e4a3ddc), [d50948dde](https://github.com/reactive-resume/reactive-resume/commit/d50948dde) -**Full Changelog**: [v5.2.3...v5.2.5](https://github.com/amruthpillai/reactive-resume/compare/v5.2.3...v5.2.5) +**Full Changelog**: [v5.2.3...v5.2.5](https://github.com/reactive-resume/reactive-resume/compare/v5.2.3...v5.2.5) ## Highlights - **More AI provider choices.** The AI settings page now supports Mistral AI, Cohere, xAI Grok, Groq, DeepSeek, Together.ai, Fireworks, Cerebras, and Perplexity, with provider defaults filled in for each. Ollama is now labeled as Ollama Cloud to make the hosted integration clearer. -- **Cleaner cover-letter exports.** Cover-letter PDF, DOCX, and Markdown downloads now export the letter without resume header chrome by default, and PDF downloads include a new toggle for adding the resume header back when needed. [8570c1c70](https://github.com/amruthpillai/reactive-resume/commit/8570c1c70) -- **More accurate public resume statistics.** Rapid repeat views from the same client are now de-duplicated before incrementing public resume view counts. [97ab3c973](https://github.com/amruthpillai/reactive-resume/commit/97ab3c973) +- **Cleaner cover-letter exports.** Cover-letter PDF, DOCX, and Markdown downloads now export the letter without resume header chrome by default, and PDF downloads include a new toggle for adding the resume header back when needed. [8570c1c70](https://github.com/reactive-resume/reactive-resume/commit/8570c1c70) +- **More accurate public resume statistics.** Rapid repeat views from the same client are now de-duplicated before incrementing public resume view counts. [97ab3c973](https://github.com/reactive-resume/reactive-resume/commit/97ab3c973) ## AI & Integrations - Added first-class AI SDK support for Mistral AI, Cohere, xAI, Groq, DeepSeek, Together.ai, Fireworks, Cerebras, and Perplexity across saved provider settings and AI service calls. - Made AI provider connection tests work with OpenAI-compatible models that do not support structured output, with a clearer error when a model returns too much text during the test. -- Published Reactive Resume MCP registry metadata so MCP clients and directories can discover the hosted remote server. [73daf22b2](https://github.com/amruthpillai/reactive-resume/commit/73daf22b2) +- Published Reactive Resume MCP registry metadata so MCP clients and directories can discover the hosted remote server. [73daf22b2](https://github.com/reactive-resume/reactive-resume/commit/73daf22b2) ## Resume Builder & Exports -- Fixed cover-letter-only exports across PDF, DOCX, and Markdown so they no longer include resume contact details or a redundant cover-letter heading. [8570c1c70](https://github.com/amruthpillai/reactive-resume/commit/8570c1c70) +- Fixed cover-letter-only exports across PDF, DOCX, and Markdown so they no longer include resume contact details or a redundant cover-letter heading. [8570c1c70](https://github.com/reactive-resume/reactive-resume/commit/8570c1c70) - Added an **Include resume header** option for cover-letter PDF downloads. - Improved the layout page header so the **Full Width** and **Delete Page** controls fit better in narrow builder sidebars. - Simplified the current-template card by removing its hover live preview; template switching still opens the full template gallery. ## Reliability & Self-Hosting -- Added report-only CSP, frame blocking, `nosniff`, and stricter referrer headers to web app shell responses, and tightened public upload headers to rely on same-site resource policy instead of an unconditional CORS header. [9bde7d544](https://github.com/amruthpillai/reactive-resume/commit/9bde7d544) -- Limited application bulk update and delete requests to 200 selected items per operation to avoid oversized bulk actions. [c9b3fa5c1](https://github.com/amruthpillai/reactive-resume/commit/c9b3fa5c1) -- Resume lock and password mutations now return `NOT_FOUND` when the resume is missing instead of silently succeeding. [e47cf6e77](https://github.com/amruthpillai/reactive-resume/commit/e47cf6e77) -- Reduced repeated work in the font picker by computing the font family options once per app process. [7e0657946](https://github.com/amruthpillai/reactive-resume/commit/7e0657946) +- Added report-only CSP, frame blocking, `nosniff`, and stricter referrer headers to web app shell responses, and tightened public upload headers to rely on same-site resource policy instead of an unconditional CORS header. [9bde7d544](https://github.com/reactive-resume/reactive-resume/commit/9bde7d544) +- Limited application bulk update and delete requests to 200 selected items per operation to avoid oversized bulk actions. [c9b3fa5c1](https://github.com/reactive-resume/reactive-resume/commit/c9b3fa5c1) +- Resume lock and password mutations now return `NOT_FOUND` when the resume is missing instead of silently succeeding. [e47cf6e77](https://github.com/reactive-resume/reactive-resume/commit/e47cf6e77) +- Reduced repeated work in the font picker by computing the font family options once per app process. [7e0657946](https://github.com/reactive-resume/reactive-resume/commit/7e0657946) - Refreshed workspace dependencies, including AI SDK provider packages, Lingui, oRPC, Hono, Tiptap, and test tooling. ## Documentation & Localization -- Tightened SEO titles and descriptions across the documentation site. [5270a2a9a](https://github.com/amruthpillai/reactive-resume/commit/5270a2a9a) -- Corrected the README feature list to describe structured Style Rules instead of custom CSS. [66078609a](https://github.com/amruthpillai/reactive-resume/commit/66078609a) -- Synced Crowdin translation catalogs and added locale strings for the new AI providers and cover-letter export option. [b87a9d828](https://github.com/amruthpillai/reactive-resume/commit/b87a9d828), [25021507a](https://github.com/amruthpillai/reactive-resume/commit/25021507a) +- Tightened SEO titles and descriptions across the documentation site. [5270a2a9a](https://github.com/reactive-resume/reactive-resume/commit/5270a2a9a) +- Corrected the README feature list to describe structured Style Rules instead of custom CSS. [66078609a](https://github.com/reactive-resume/reactive-resume/commit/66078609a) +- Synced Crowdin translation catalogs and added locale strings for the new AI providers and cover-letter export option. [b87a9d828](https://github.com/reactive-resume/reactive-resume/commit/b87a9d828), [25021507a](https://github.com/reactive-resume/reactive-resume/commit/25021507a) -**Full Changelog**: [v5.2.2...v5.2.3](https://github.com/amruthpillai/reactive-resume/compare/v5.2.2...v5.2.3) +**Full Changelog**: [v5.2.2...v5.2.3](https://github.com/reactive-resume/reactive-resume/compare/v5.2.2...v5.2.3) ## Highlights -- **Application Tracker REST and MCP parity.** The job application pipeline is now available outside the web app through authenticated REST endpoints and MCP tools, so agents can create records, import rows, move stages, add notes, manage follow-ups, attach sent PDFs, and inspect pipeline health. [2dad27da5](https://github.com/amruthpillai/reactive-resume/commit/2dad27da5), [bf2dc5bbd](https://github.com/amruthpillai/reactive-resume/commit/bf2dc5bbd) -- **Agent-only application tracking.** MCP clients can now operate the Application Tracker end to end, including Application Copilot actions for job auto-fill, match scoring, tailored resume copies, cover letters, and recruiter follow-ups. [bf2dc5bbd](https://github.com/amruthpillai/reactive-resume/commit/bf2dc5bbd), [93abb1102](https://github.com/amruthpillai/reactive-resume/commit/93abb1102) +- **Application Tracker REST and MCP parity.** The job application pipeline is now available outside the web app through authenticated REST endpoints and MCP tools, so agents can create records, import rows, move stages, add notes, manage follow-ups, attach sent PDFs, and inspect pipeline health. [2dad27da5](https://github.com/reactive-resume/reactive-resume/commit/2dad27da5), [bf2dc5bbd](https://github.com/reactive-resume/reactive-resume/commit/bf2dc5bbd) +- **Agent-only application tracking.** MCP clients can now operate the Application Tracker end to end, including Application Copilot actions for job auto-fill, match scoring, tailored resume copies, cover letters, and recruiter follow-ups. [bf2dc5bbd](https://github.com/reactive-resume/reactive-resume/commit/bf2dc5bbd), [93abb1102](https://github.com/reactive-resume/reactive-resume/commit/93abb1102) - **New application MCP guide.** The docs now include a dedicated guide with practical prompts for using Reactive Resume MCP to manage applications from an AI client. ## Application Tracker API -- Added public REST coverage for listing, reading, creating, updating, importing, bulk-updating, bulk-deleting, tagging, and summarizing job applications. [2dad27da5](https://github.com/amruthpillai/reactive-resume/commit/2dad27da5) -- Added authenticated document endpoints for attaching and removing the resume or cover-letter PDF sent with an application. [2dad27da5](https://github.com/amruthpillai/reactive-resume/commit/2dad27da5), [fb3f40244](https://github.com/amruthpillai/reactive-resume/commit/fb3f40244) -- Added REST endpoints for Application Copilot actions: job posting auto-fill, resume match scoring, tailored resume creation, and message drafting. [2dad27da5](https://github.com/amruthpillai/reactive-resume/commit/2dad27da5) -- Updated the OpenAPI reference so application endpoints, multipart document uploads, statistics, and tags are visible in the docs. [fb3f40244](https://github.com/amruthpillai/reactive-resume/commit/fb3f40244) +- Added public REST coverage for listing, reading, creating, updating, importing, bulk-updating, bulk-deleting, tagging, and summarizing job applications. [2dad27da5](https://github.com/reactive-resume/reactive-resume/commit/2dad27da5) +- Added authenticated document endpoints for attaching and removing the resume or cover-letter PDF sent with an application. [2dad27da5](https://github.com/reactive-resume/reactive-resume/commit/2dad27da5), [fb3f40244](https://github.com/reactive-resume/reactive-resume/commit/fb3f40244) +- Added REST endpoints for Application Copilot actions: job posting auto-fill, resume match scoring, tailored resume creation, and message drafting. [2dad27da5](https://github.com/reactive-resume/reactive-resume/commit/2dad27da5) +- Updated the OpenAPI reference so application endpoints, multipart document uploads, statistics, and tags are visible in the docs. [fb3f40244](https://github.com/reactive-resume/reactive-resume/commit/fb3f40244) ## MCP & Agent Workflows -- Added MCP tools for every Application Tracker workflow available in the app, including create, update, note, import, bulk action, archive, delete, document attachment, document removal, tag, statistics, and Application Copilot tools. [bf2dc5bbd](https://github.com/amruthpillai/reactive-resume/commit/bf2dc5bbd) -- Improved MCP tool metadata so clients can distinguish safe reads, mutating actions, destructive actions, and AI-powered workflows more reliably. [93abb1102](https://github.com/amruthpillai/reactive-resume/commit/93abb1102) -- Updated the resume-builder skill instructions so agents are told that Reactive Resume MCP can also manage job applications, not only resumes. [ac8734be3](https://github.com/amruthpillai/reactive-resume/commit/ac8734be3) +- Added MCP tools for every Application Tracker workflow available in the app, including create, update, note, import, bulk action, archive, delete, document attachment, document removal, tag, statistics, and Application Copilot tools. [bf2dc5bbd](https://github.com/reactive-resume/reactive-resume/commit/bf2dc5bbd) +- Improved MCP tool metadata so clients can distinguish safe reads, mutating actions, destructive actions, and AI-powered workflows more reliably. [93abb1102](https://github.com/reactive-resume/reactive-resume/commit/93abb1102) +- Updated the resume-builder skill instructions so agents are told that Reactive Resume MCP can also manage job applications, not only resumes. [ac8734be3](https://github.com/reactive-resume/reactive-resume/commit/ac8734be3) ## Documentation & Reliability -- Added a parity design note for the Application Tracker REST and MCP surfaces. [3868429ce](https://github.com/amruthpillai/reactive-resume/commit/3868429ce) -- Documented application MCP automation in the MCP guide, including available tools, prompt examples, and troubleshooting for PDF attachments. [ed83a3f5e](https://github.com/amruthpillai/reactive-resume/commit/ed83a3f5e) -- Preserved shared application documents when one application removes or replaces a file also referenced by another application. [3c9c5c8c2](https://github.com/amruthpillai/reactive-resume/commit/3c9c5c8c2) +- Added a parity design note for the Application Tracker REST and MCP surfaces. [3868429ce](https://github.com/reactive-resume/reactive-resume/commit/3868429ce) +- Documented application MCP automation in the MCP guide, including available tools, prompt examples, and troubleshooting for PDF attachments. [ed83a3f5e](https://github.com/reactive-resume/reactive-resume/commit/ed83a3f5e) +- Preserved shared application documents when one application removes or replaces a file also referenced by another application. [3c9c5c8c2](https://github.com/reactive-resume/reactive-resume/commit/3c9c5c8c2) -**Full Changelog**: [v5.2.1...v5.2.2](https://github.com/amruthpillai/reactive-resume/compare/v5.2.1...v5.2.2) +**Full Changelog**: [v5.2.1...v5.2.2](https://github.com/reactive-resume/reactive-resume/compare/v5.2.1...v5.2.2) ## Highlights -- **Application Tracking is here.** Track every opportunity from saved role to offer with board, table, and insights views; search, filter, sort, tag, archive, and bulk-update applications without keeping a separate spreadsheet. [893df25af](https://github.com/amruthpillai/reactive-resume/commit/893df25af), [e99c1665d](https://github.com/amruthpillai/reactive-resume/commit/e99c1665d), [00a972155](https://github.com/amruthpillai/reactive-resume/commit/00a972155) -- **Application Copilot.** Link a resume and job description to score your fit, create a tailored resume copy, draft a cover letter, or draft a recruiter follow-up from the application detail panel. [893df25af](https://github.com/amruthpillai/reactive-resume/commit/893df25af) -- **Markdown export for resumes.** Export a resume as clean Markdown for docs, websites, AI workflows, or any place where plain text is easier to reuse than a PDF. [20c803e93](https://github.com/amruthpillai/reactive-resume/commit/20c803e93) -- **A cleaner export flow.** Resume and cover-letter downloads now live in a dedicated dialog, with separate PDF, DOCX, JSON, and print actions. [20c803e93](https://github.com/amruthpillai/reactive-resume/commit/20c803e93) +- **Application Tracking is here.** Track every opportunity from saved role to offer with board, table, and insights views; search, filter, sort, tag, archive, and bulk-update applications without keeping a separate spreadsheet. [893df25af](https://github.com/reactive-resume/reactive-resume/commit/893df25af), [e99c1665d](https://github.com/reactive-resume/reactive-resume/commit/e99c1665d), [00a972155](https://github.com/reactive-resume/reactive-resume/commit/00a972155) +- **Application Copilot.** Link a resume and job description to score your fit, create a tailored resume copy, draft a cover letter, or draft a recruiter follow-up from the application detail panel. [893df25af](https://github.com/reactive-resume/reactive-resume/commit/893df25af) +- **Markdown export for resumes.** Export a resume as clean Markdown for docs, websites, AI workflows, or any place where plain text is easier to reuse than a PDF. [20c803e93](https://github.com/reactive-resume/reactive-resume/commit/20c803e93) +- **A cleaner export flow.** Resume and cover-letter downloads now live in a dedicated dialog, with separate PDF, DOCX, JSON, and print actions. [20c803e93](https://github.com/reactive-resume/reactive-resume/commit/20c803e93) ## Application Tracking -- Added the application data model, API routes, database schema, migrations, and service tests for storing applications, contacts, documents, follow-ups, timeline activity, tags, sources, salaries, and stages. [893df25af](https://github.com/amruthpillai/reactive-resume/commit/893df25af), [4ae6d8476](https://github.com/amruthpillai/reactive-resume/commit/4ae6d8476) -- Added the dashboard Applications page with kanban board, table, insights dashboard, detail sheet, create/edit sheet, actions menu, file attachments, CSV import, and archived view. [893df25af](https://github.com/amruthpillai/reactive-resume/commit/893df25af), [00a972155](https://github.com/amruthpillai/reactive-resume/commit/00a972155) -- Added CSV import from uploads or pasted rows, with header recognition, row validation, stage parsing, tag splitting, and importer tests. [893df25af](https://github.com/amruthpillai/reactive-resume/commit/893df25af) -- Added application insights for pipeline counts, response rate, interviews, offers, funnel drop-off, weekly application volume, and source breakdowns. [893df25af](https://github.com/amruthpillai/reactive-resume/commit/893df25af), [00a972155](https://github.com/amruthpillai/reactive-resume/commit/00a972155) -- Added an end-to-end Application Tracker test covering the main application workflow. [af751e4f](https://github.com/amruthpillai/reactive-resume/commit/af751e4f) +- Added the application data model, API routes, database schema, migrations, and service tests for storing applications, contacts, documents, follow-ups, timeline activity, tags, sources, salaries, and stages. [893df25af](https://github.com/reactive-resume/reactive-resume/commit/893df25af), [4ae6d8476](https://github.com/reactive-resume/reactive-resume/commit/4ae6d8476) +- Added the dashboard Applications page with kanban board, table, insights dashboard, detail sheet, create/edit sheet, actions menu, file attachments, CSV import, and archived view. [893df25af](https://github.com/reactive-resume/reactive-resume/commit/893df25af), [00a972155](https://github.com/reactive-resume/reactive-resume/commit/00a972155) +- Added CSV import from uploads or pasted rows, with header recognition, row validation, stage parsing, tag splitting, and importer tests. [893df25af](https://github.com/reactive-resume/reactive-resume/commit/893df25af) +- Added application insights for pipeline counts, response rate, interviews, offers, funnel drop-off, weekly application volume, and source breakdowns. [893df25af](https://github.com/reactive-resume/reactive-resume/commit/893df25af), [00a972155](https://github.com/reactive-resume/reactive-resume/commit/00a972155) +- Added an end-to-end Application Tracker test covering the main application workflow. [af751e4f](https://github.com/reactive-resume/reactive-resume/commit/af751e4f) ## Import & Export -- Added Markdown export support for resumes, powered by new shared resume-section and Markdown helpers so exports preserve the resume's core structure in a portable text format. [20c803e93](https://github.com/amruthpillai/reactive-resume/commit/20c803e93) -- Split resume and cover-letter download behavior so each export path uses the right file and filename. [20c803e93](https://github.com/amruthpillai/reactive-resume/commit/20c803e93) -- Updated PDF download URL handling and export tests for the new download dialog. [20c803e93](https://github.com/amruthpillai/reactive-resume/commit/20c803e93) +- Added Markdown export support for resumes, powered by new shared resume-section and Markdown helpers so exports preserve the resume's core structure in a portable text format. [20c803e93](https://github.com/reactive-resume/reactive-resume/commit/20c803e93) +- Split resume and cover-letter download behavior so each export path uses the right file and filename. [20c803e93](https://github.com/reactive-resume/reactive-resume/commit/20c803e93) +- Updated PDF download URL handling and export tests for the new download dialog. [20c803e93](https://github.com/reactive-resume/reactive-resume/commit/20c803e93) ## Documentation -- Added guides for tracking job applications and importing applications from CSV, including screenshots and troubleshooting notes. [540796cd6](https://github.com/amruthpillai/reactive-resume/commit/540796cd6) -- Refreshed the resume export and cover-letter guides to match the new download flow. [be43b455](https://github.com/amruthpillai/reactive-resume/commit/be43b455) +- Added guides for tracking job applications and importing applications from CSV, including screenshots and troubleshooting notes. [540796cd6](https://github.com/reactive-resume/reactive-resume/commit/540796cd6) +- Refreshed the resume export and cover-letter guides to match the new download flow. [be43b455](https://github.com/reactive-resume/reactive-resume/commit/be43b455) ## Reliability & Performance -- Improved Application Tracker rendering, tile colors, file-attachment handling, and dashboard responsiveness. [00a972155](https://github.com/amruthpillai/reactive-resume/commit/00a972155) -- Cut builder per-keystroke render cost by tightening the builder header, dock, design panel, and section form updates. [5c75147d](https://github.com/amruthpillai/reactive-resume/commit/5c75147d) -- Improved mobile layouts across the agent pages, builder header, dashboard resume list, and dashboard resume grid. [8416a921](https://github.com/amruthpillai/reactive-resume/commit/8416a921) -- Eliminated layout shift from the homepage hero video by reserving its rendered space. [be1acbc2](https://github.com/amruthpillai/reactive-resume/commit/be1acbc2) -- Fixed server-side rendering for auth email templates by importing React where the template runtime needs it. [af751e4f](https://github.com/amruthpillai/reactive-resume/commit/af751e4f) +- Improved Application Tracker rendering, tile colors, file-attachment handling, and dashboard responsiveness. [00a972155](https://github.com/reactive-resume/reactive-resume/commit/00a972155) +- Cut builder per-keystroke render cost by tightening the builder header, dock, design panel, and section form updates. [5c75147d](https://github.com/reactive-resume/reactive-resume/commit/5c75147d) +- Improved mobile layouts across the agent pages, builder header, dashboard resume list, and dashboard resume grid. [8416a921](https://github.com/reactive-resume/reactive-resume/commit/8416a921) +- Eliminated layout shift from the homepage hero video by reserving its rendered space. [be1acbc2](https://github.com/reactive-resume/reactive-resume/commit/be1acbc2) +- Fixed server-side rendering for auth email templates by importing React where the template runtime needs it. [af751e4f](https://github.com/reactive-resume/reactive-resume/commit/af751e4f) ## Self-Hosting & Maintenance -- Added the Better Auth two-factor schema migration. [9f9268f3](https://github.com/amruthpillai/reactive-resume/commit/9f9268f3) -- Added design-sync inputs and preview files for Reactive Resume UI components. [a28e3baa](https://github.com/amruthpillai/reactive-resume/commit/a28e3baa), [6e7fc680](https://github.com/amruthpillai/reactive-resume/commit/6e7fc680) -- Synced translation catalogs for the new Application Tracking and export copy. [e99c1665](https://github.com/amruthpillai/reactive-resume/commit/e99c1665), [0d1bfd4e](https://github.com/amruthpillai/reactive-resume/commit/0d1bfd4e) -- Addressed React Doctor findings, cleaned up Knip issues, updated dependencies, and refreshed TypeScript native preview versions. [5a1cc658](https://github.com/amruthpillai/reactive-resume/commit/5a1cc658), [5c1845b1](https://github.com/amruthpillai/reactive-resume/commit/5c1845b1), [91b4c1e6](https://github.com/amruthpillai/reactive-resume/commit/91b4c1e6) +- Added the Better Auth two-factor schema migration. [9f9268f3](https://github.com/reactive-resume/reactive-resume/commit/9f9268f3) +- Added design-sync inputs and preview files for Reactive Resume UI components. [a28e3baa](https://github.com/reactive-resume/reactive-resume/commit/a28e3baa), [6e7fc680](https://github.com/reactive-resume/reactive-resume/commit/6e7fc680) +- Synced translation catalogs for the new Application Tracking and export copy. [e99c1665](https://github.com/reactive-resume/reactive-resume/commit/e99c1665), [0d1bfd4e](https://github.com/reactive-resume/reactive-resume/commit/0d1bfd4e) +- Addressed React Doctor findings, cleaned up Knip issues, updated dependencies, and refreshed TypeScript native preview versions. [5a1cc658](https://github.com/reactive-resume/reactive-resume/commit/5a1cc658), [5c1845b1](https://github.com/reactive-resume/reactive-resume/commit/5c1845b1), [91b4c1e6](https://github.com/reactive-resume/reactive-resume/commit/91b4c1e6) -**Full Changelog**: [v5.2.0...v5.2.1](https://github.com/amruthpillai/reactive-resume/compare/v5.2.0...v5.2.1) +**Full Changelog**: [v5.2.0...v5.2.1](https://github.com/reactive-resume/reactive-resume/compare/v5.2.0...v5.2.1) ## Highlights -- **Undo and redo across the builder.** Every change — typing, drag-and-drop, template and layout switches — can now be undone and redone with `Cmd/Ctrl+Z` and `Cmd/Ctrl+Shift+Z`, or the new toolbar buttons. Rapid typing collapses into a single step, so undo feels natural. [b044b6cc](https://github.com/amruthpillai/reactive-resume/commit/b044b6cc) -- **Version history with one-click restore.** Reactive Resume now snapshots your resume at key moments — template switches, imports, AI edits, and periodic saves — and a new clock menu in the builder header lets you restore any earlier version. Restoring is non-destructive: it's just another change you can roll back. [b044b6cc](https://github.com/amruthpillai/reactive-resume/commit/b044b6cc) -- **An AI assistant built into the builder.** A new Sparkle button opens the AI assistant as a side panel next to your resume, so you can chat about the resume you're editing and apply changes inline without leaving the builder. Its edits show up live and are captured in version history. [a1562aaa](https://github.com/amruthpillai/reactive-resume/commit/a1562aaa) -- **A real mobile and tablet builder.** On phones and small tablets the builder now uses a full-screen layout with an Edit / Preview / Design tab bar, instead of a cramped three-panel desktop layout squeezed onto a small screen. [d933624a](https://github.com/amruthpillai/reactive-resume/commit/d933624a) -- **Preview any template with your own content.** Hovering a template — both the current-template card and every tile in the template gallery — now renders a live preview built from your actual resume data, so you can compare templates with your content before switching. [9d742f78](https://github.com/amruthpillai/reactive-resume/commit/9d742f78) -- **Polished motion across the app.** Menus, dialogs, tooltips, tabs, buttons, sheets, and form validation now share a consistent motion system with interruptible transitions and cleaner press feedback, so the builder and dashboard feel smoother end to end. [578a9832](https://github.com/amruthpillai/reactive-resume/commit/578a9832) +- **Undo and redo across the builder.** Every change — typing, drag-and-drop, template and layout switches — can now be undone and redone with `Cmd/Ctrl+Z` and `Cmd/Ctrl+Shift+Z`, or the new toolbar buttons. Rapid typing collapses into a single step, so undo feels natural. [b044b6cc](https://github.com/reactive-resume/reactive-resume/commit/b044b6cc) +- **Version history with one-click restore.** Reactive Resume now snapshots your resume at key moments — template switches, imports, AI edits, and periodic saves — and a new clock menu in the builder header lets you restore any earlier version. Restoring is non-destructive: it's just another change you can roll back. [b044b6cc](https://github.com/reactive-resume/reactive-resume/commit/b044b6cc) +- **An AI assistant built into the builder.** A new Sparkle button opens the AI assistant as a side panel next to your resume, so you can chat about the resume you're editing and apply changes inline without leaving the builder. Its edits show up live and are captured in version history. [a1562aaa](https://github.com/reactive-resume/reactive-resume/commit/a1562aaa) +- **A real mobile and tablet builder.** On phones and small tablets the builder now uses a full-screen layout with an Edit / Preview / Design tab bar, instead of a cramped three-panel desktop layout squeezed onto a small screen. [d933624a](https://github.com/reactive-resume/reactive-resume/commit/d933624a) +- **Preview any template with your own content.** Hovering a template — both the current-template card and every tile in the template gallery — now renders a live preview built from your actual resume data, so you can compare templates with your content before switching. [9d742f78](https://github.com/reactive-resume/reactive-resume/commit/9d742f78) +- **Polished motion across the app.** Menus, dialogs, tooltips, tabs, buttons, sheets, and form validation now share a consistent motion system with interruptible transitions and cleaner press feedback, so the builder and dashboard feel smoother end to end. [578a9832](https://github.com/reactive-resume/reactive-resume/commit/578a9832) ## Resume Builder -- **Control page breaks per section.** New **Keep together** and **Start on new page** options let you decide whether a section can split across pages or begins on a fresh one in the exported PDF. [155a7b27](https://github.com/amruthpillai/reactive-resume/commit/155a7b27) -- **Move sections between pages and columns from a menu.** The layout panel now has a **Move to** menu, so you can relocate a section without dragging. [02e1aff7](https://github.com/amruthpillai/reactive-resume/commit/02e1aff7) -- **Crop and zoom your profile picture.** Choosing a picture now opens a crop step with a zoom slider and drag-to-reposition before it uploads. [f4bc3e7c](https://github.com/amruthpillai/reactive-resume/commit/f4bc3e7c), [f855af47](https://github.com/amruthpillai/reactive-resume/commit/f855af47) -- **Better zoom and page controls** in the preview: a live zoom-percentage readout with Fit and 100% options, and `Cmd+0` to reset. [9c5b182a](https://github.com/amruthpillai/reactive-resume/commit/9c5b182a) -- **A primary Download button in the header**, with a menu for PDF, DOCX, JSON, and Print. [446c1843](https://github.com/amruthpillai/reactive-resume/commit/446c1843) -- **Section rail navigation** now scrolls to and highlights the section you pick, with proper tooltips and labels. [9bf606ae](https://github.com/amruthpillai/reactive-resume/commit/9bf606ae) -- **Autosave status and safer collaborative editing.** The header shows a Saving / Saved indicator; a locked resume is read-only everywhere in the builder; and changes from another tab or the AI agent are announced and no longer overwrite the field you're actively typing in. [b082bb9f](https://github.com/amruthpillai/reactive-resume/commit/b082bb9f) -- A live character counter and a tidier toolbar in the rich-text editor. [fa4ca06e](https://github.com/amruthpillai/reactive-resume/commit/fa4ca06e) +- **Control page breaks per section.** New **Keep together** and **Start on new page** options let you decide whether a section can split across pages or begins on a fresh one in the exported PDF. [155a7b27](https://github.com/reactive-resume/reactive-resume/commit/155a7b27) +- **Move sections between pages and columns from a menu.** The layout panel now has a **Move to** menu, so you can relocate a section without dragging. [02e1aff7](https://github.com/reactive-resume/reactive-resume/commit/02e1aff7) +- **Crop and zoom your profile picture.** Choosing a picture now opens a crop step with a zoom slider and drag-to-reposition before it uploads. [f4bc3e7c](https://github.com/reactive-resume/reactive-resume/commit/f4bc3e7c), [f855af47](https://github.com/reactive-resume/reactive-resume/commit/f855af47) +- **Better zoom and page controls** in the preview: a live zoom-percentage readout with Fit and 100% options, and `Cmd+0` to reset. [9c5b182a](https://github.com/reactive-resume/reactive-resume/commit/9c5b182a) +- **A primary Download button in the header**, with a menu for PDF, DOCX, JSON, and Print. [446c1843](https://github.com/reactive-resume/reactive-resume/commit/446c1843) +- **Section rail navigation** now scrolls to and highlights the section you pick, with proper tooltips and labels. [9bf606ae](https://github.com/reactive-resume/reactive-resume/commit/9bf606ae) +- **Autosave status and safer collaborative editing.** The header shows a Saving / Saved indicator; a locked resume is read-only everywhere in the builder; and changes from another tab or the AI agent are announced and no longer overwrite the field you're actively typing in. [b082bb9f](https://github.com/reactive-resume/reactive-resume/commit/b082bb9f) +- A live character counter and a tidier toolbar in the rich-text editor. [fa4ca06e](https://github.com/reactive-resume/reactive-resume/commit/fa4ca06e) ## AI Assistant -- **Embedded AI assistant panel** in the builder, scoped to the open resume and reusing the full agent chat, so edits apply to the resume in front of you. Requires a configured AI provider. [a1562aaa](https://github.com/amruthpillai/reactive-resume/commit/a1562aaa) -- **Simpler AI provider setup.** Provider settings now use a staged form — provider and API key first, advanced options collapsed — and test the connection automatically when you save. [454ccc59](https://github.com/amruthpillai/reactive-resume/commit/454ccc59) -- **Richer assistant replies.** Agent chat now renders GitHub-flavored Markdown, so tables in the assistant's responses display as real tables instead of raw text. [82d96124](https://github.com/amruthpillai/reactive-resume/commit/82d96124) -- **More reliable agent edits to sections.** The agent now targets built-in sections (`/sections/...`) and custom sections (`/customSections/...`) with the correct paths, and section-shortcut paths are normalized before a patch is applied, so edits to experience, education, and custom sections land where you expect. [82d96124](https://github.com/amruthpillai/reactive-resume/commit/82d96124) +- **Embedded AI assistant panel** in the builder, scoped to the open resume and reusing the full agent chat, so edits apply to the resume in front of you. Requires a configured AI provider. [a1562aaa](https://github.com/reactive-resume/reactive-resume/commit/a1562aaa) +- **Simpler AI provider setup.** Provider settings now use a staged form — provider and API key first, advanced options collapsed — and test the connection automatically when you save. [454ccc59](https://github.com/reactive-resume/reactive-resume/commit/454ccc59) +- **Richer assistant replies.** Agent chat now renders GitHub-flavored Markdown, so tables in the assistant's responses display as real tables instead of raw text. [82d96124](https://github.com/reactive-resume/reactive-resume/commit/82d96124) +- **More reliable agent edits to sections.** The agent now targets built-in sections (`/sections/...`) and custom sections (`/customSections/...`) with the correct paths, and section-shortcut paths are normalized before a patch is applied, so edits to experience, education, and custom sections land where you expect. [82d96124](https://github.com/reactive-resume/reactive-resume/commit/82d96124) ## Dashboard & Navigation -- **You now land in the builder right after creating a resume**, instead of being returned to the dashboard. [49f2c93f](https://github.com/amruthpillai/reactive-resume/commit/49f2c93f) -- **Search your resumes** from the dashboard once you have more than a few. [fa4ca06e](https://github.com/amruthpillai/reactive-resume/commit/fa4ca06e) -- **Command palette discoverability**: a Search button with a `⌘K` hint in the dashboard sidebar. [d10a7e5f](https://github.com/amruthpillai/reactive-resume/commit/d10a7e5f) -- The Create and Import cards collapse into compact header buttons once you have resumes. [fa4ca06e](https://github.com/amruthpillai/reactive-resume/commit/fa4ca06e) -- Fixed the command palette resume list so it reliably shows your resumes, sorted by most recently updated. [82d96124](https://github.com/amruthpillai/reactive-resume/commit/82d96124) +- **You now land in the builder right after creating a resume**, instead of being returned to the dashboard. [49f2c93f](https://github.com/reactive-resume/reactive-resume/commit/49f2c93f) +- **Search your resumes** from the dashboard once you have more than a few. [fa4ca06e](https://github.com/reactive-resume/reactive-resume/commit/fa4ca06e) +- **Command palette discoverability**: a Search button with a `⌘K` hint in the dashboard sidebar. [d10a7e5f](https://github.com/reactive-resume/reactive-resume/commit/d10a7e5f) +- The Create and Import cards collapse into compact header buttons once you have resumes. [fa4ca06e](https://github.com/reactive-resume/reactive-resume/commit/fa4ca06e) +- Fixed the command palette resume list so it reliably shows your resumes, sorted by most recently updated. [82d96124](https://github.com/reactive-resume/reactive-resume/commit/82d96124) ## Statistics -- **Views and downloads trends.** Each statistics card now shows a 30-day sparkline and how it compares to the previous period. [66ee23ee](https://github.com/amruthpillai/reactive-resume/commit/66ee23ee) +- **Views and downloads trends.** Each statistics card now shows a 30-day sparkline and how it compares to the previous period. [66ee23ee](https://github.com/reactive-resume/reactive-resume/commit/66ee23ee) ## Public Sharing -- **A proper public resume page** with an identity header (name, headline, and picture), a clear primary download action, and per-resume social / Open Graph previews, so shared links look right on LinkedIn, Slack, and iMessage. [f53d2b86](https://github.com/amruthpillai/reactive-resume/commit/f53d2b86) +- **A proper public resume page** with an identity header (name, headline, and picture), a clear primary download action, and per-resume social / Open Graph previews, so shared links look right on LinkedIn, Slack, and iMessage. [f53d2b86](https://github.com/reactive-resume/reactive-resume/commit/f53d2b86) ## Accessibility & Internationalization -- **Screen-reader access to the live preview.** The PDF preview now includes a hidden, structured text version of your resume so assistive technology can read it. [b76eb602](https://github.com/amruthpillai/reactive-resume/commit/b76eb602) -- **Landmarks, skip links, and accessible names** across the builder and dashboard, and labels for the icon-only buttons that were previously unnamed to screen readers. [d10a7e5f](https://github.com/amruthpillai/reactive-resume/commit/d10a7e5f), [82bd14e3](https://github.com/amruthpillai/reactive-resume/commit/82bd14e3), [c67f84fc](https://github.com/amruthpillai/reactive-resume/commit/c67f84fc) -- **A searchable language picker** (by English name, native name, or ISO code) and correct handling of mixed left-to-right and right-to-left text. [a41197ed](https://github.com/amruthpillai/reactive-resume/commit/a41197ed) +- **Screen-reader access to the live preview.** The PDF preview now includes a hidden, structured text version of your resume so assistive technology can read it. [b76eb602](https://github.com/reactive-resume/reactive-resume/commit/b76eb602) +- **Landmarks, skip links, and accessible names** across the builder and dashboard, and labels for the icon-only buttons that were previously unnamed to screen readers. [d10a7e5f](https://github.com/reactive-resume/reactive-resume/commit/d10a7e5f), [82bd14e3](https://github.com/reactive-resume/reactive-resume/commit/82bd14e3), [c67f84fc](https://github.com/reactive-resume/reactive-resume/commit/c67f84fc) +- **A searchable language picker** (by English name, native name, or ISO code) and correct handling of mixed left-to-right and right-to-left text. [a41197ed](https://github.com/reactive-resume/reactive-resume/commit/a41197ed) ## Settings & Data -- **Export all of your data** from the Danger Zone. [6d774cbc](https://github.com/amruthpillai/reactive-resume/commit/6d774cbc) -- **Email-verification prompts are hidden when no mail server is configured**, so self-hosted instances without SMTP don't nag you to verify. [c7f77570](https://github.com/amruthpillai/reactive-resume/commit/c7f77570) +- **Export all of your data** from the Danger Zone. [6d774cbc](https://github.com/reactive-resume/reactive-resume/commit/6d774cbc) +- **Email-verification prompts are hidden when no mail server is configured**, so self-hosted instances without SMTP don't nag you to verify. [c7f77570](https://github.com/reactive-resume/reactive-resume/commit/c7f77570) ## Import & Export -- **File-first import with auto-detection.** Pick a file and Reactive Resume detects the format; AI-based imports check for a configured provider up front. [e586a78e](https://github.com/amruthpillai/reactive-resume/commit/e586a78e) +- **File-first import with auto-detection.** Pick a file and Reactive Resume detects the format; AI-based imports check for a configured provider up front. [e586a78e](https://github.com/reactive-resume/reactive-resume/commit/e586a78e) ## Reliability & Fixes -- Made concurrent resume writes safe by wrapping patch and statistics updates in database transactions, and fixed a version-history double-snapshot. [b3f4a194](https://github.com/amruthpillai/reactive-resume/commit/b3f4a194) -- Fixed a live-preview memory leak (image blobs weren't released) and serialized preview renders so they don't stack up. [f005be78](https://github.com/amruthpillai/reactive-resume/commit/f005be78) -- Public link previews now show your name instead of a generic "Resume" placeholder. [4da7a2e0](https://github.com/amruthpillai/reactive-resume/commit/4da7a2e0) -- Fixed the first-paint loading shell so the app reliably mounts. [47465fbb](https://github.com/amruthpillai/reactive-resume/commit/47465fbb) -- Used the compact brand icon on the first-paint and loading screens for a cleaner startup. [82d96124](https://github.com/amruthpillai/reactive-resume/commit/82d96124) -- **PDF list rendering fixes**: bullet alignment and margins, nested list layout, page breaks that keep the marker with its item, and text that continues after a line break. [#3202](https://github.com/amruthpillai/reactive-resume/pull/3202), [#3198](https://github.com/amruthpillai/reactive-resume/pull/3198), [#3178](https://github.com/amruthpillai/reactive-resume/pull/3178), [#3186](https://github.com/amruthpillai/reactive-resume/pull/3186) -- Kept the server running through transient Postgres disconnects (for example, idle drops from serverless Postgres providers like Neon) by handling database pool errors and reconnecting on the next query. Thanks to [@helder-mattos](https://github.com/helder-mattos). [#3172](https://github.com/amruthpillai/reactive-resume/pull/3172) -- Fixed the Atlas Cloud sponsor logo so the whole logo reliably opens the sponsor site in a new tab. [#3170](https://github.com/amruthpillai/reactive-resume/pull/3170) +- Made concurrent resume writes safe by wrapping patch and statistics updates in database transactions, and fixed a version-history double-snapshot. [b3f4a194](https://github.com/reactive-resume/reactive-resume/commit/b3f4a194) +- Fixed a live-preview memory leak (image blobs weren't released) and serialized preview renders so they don't stack up. [f005be78](https://github.com/reactive-resume/reactive-resume/commit/f005be78) +- Public link previews now show your name instead of a generic "Resume" placeholder. [4da7a2e0](https://github.com/reactive-resume/reactive-resume/commit/4da7a2e0) +- Fixed the first-paint loading shell so the app reliably mounts. [47465fbb](https://github.com/reactive-resume/reactive-resume/commit/47465fbb) +- Used the compact brand icon on the first-paint and loading screens for a cleaner startup. [82d96124](https://github.com/reactive-resume/reactive-resume/commit/82d96124) +- **PDF list rendering fixes**: bullet alignment and margins, nested list layout, page breaks that keep the marker with its item, and text that continues after a line break. [#3202](https://github.com/reactive-resume/reactive-resume/pull/3202), [#3198](https://github.com/reactive-resume/reactive-resume/pull/3198), [#3178](https://github.com/reactive-resume/reactive-resume/pull/3178), [#3186](https://github.com/reactive-resume/reactive-resume/pull/3186) +- Kept the server running through transient Postgres disconnects (for example, idle drops from serverless Postgres providers like Neon) by handling database pool errors and reconnecting on the next query. Thanks to [@helder-mattos](https://github.com/helder-mattos). [#3172](https://github.com/reactive-resume/reactive-resume/pull/3172) +- Fixed the Atlas Cloud sponsor logo so the whole logo reliably opens the sponsor site in a new tab. [#3170](https://github.com/reactive-resume/reactive-resume/pull/3170) ## Localization & Maintenance -- Synced the latest translation catalogs from Crowdin. [#3167](https://github.com/amruthpillai/reactive-resume/pull/3167), [#3183](https://github.com/amruthpillai/reactive-resume/pull/3183) -- Added a Playwright end-to-end test setup, removed dead code and unused exports, and refreshed workspace dependencies. [dfd2c77b](https://github.com/amruthpillai/reactive-resume/commit/dfd2c77b), [a4999c04](https://github.com/amruthpillai/reactive-resume/commit/a4999c04) +- Synced the latest translation catalogs from Crowdin. [#3167](https://github.com/reactive-resume/reactive-resume/pull/3167), [#3183](https://github.com/reactive-resume/reactive-resume/pull/3183) +- Added a Playwright end-to-end test setup, removed dead code and unused exports, and refreshed workspace dependencies. [dfd2c77b](https://github.com/reactive-resume/reactive-resume/commit/dfd2c77b), [a4999c04](https://github.com/reactive-resume/reactive-resume/commit/a4999c04) -**Full Changelog**: [v5.1.9...v5.2.0](https://github.com/amruthpillai/reactive-resume/compare/v5.1.9...v5.2.0) +**Full Changelog**: [v5.1.9...v5.2.0](https://github.com/reactive-resume/reactive-resume/compare/v5.1.9...v5.2.0) ## Highlights -- **Better multilingual PDF rendering.** PDF generation now uses script-aware Noto fallback stacks for Korean, Japanese, Traditional and Simplified Chinese, Arabic, Hebrew, and Thai, so non-Latin resumes render more reliably in the live preview and exported PDFs. [#3158](https://github.com/amruthpillai/reactive-resume/pull/3158) -- **Hide Link Underline setting.** Resume page settings now include a dedicated **Hide Link Underline** option that is saved with the resume and respected by PDF templates. [5fb4976ec](https://github.com/amruthpillai/reactive-resume/commit/5fb4976ec), [#3134](https://github.com/amruthpillai/reactive-resume/issues/3134) -- **Sponsor placements.** The landing page and docs now include optional sponsor placements for Atlas Cloud, controlled by a new feature flag so deployments can opt in when appropriate. [f14d8ce69](https://github.com/amruthpillai/reactive-resume/commit/f14d8ce69) +- **Better multilingual PDF rendering.** PDF generation now uses script-aware Noto fallback stacks for Korean, Japanese, Traditional and Simplified Chinese, Arabic, Hebrew, and Thai, so non-Latin resumes render more reliably in the live preview and exported PDFs. [#3158](https://github.com/reactive-resume/reactive-resume/pull/3158) +- **Hide Link Underline setting.** Resume page settings now include a dedicated **Hide Link Underline** option that is saved with the resume and respected by PDF templates. [5fb4976ec](https://github.com/reactive-resume/reactive-resume/commit/5fb4976ec), [#3134](https://github.com/reactive-resume/reactive-resume/issues/3134) +- **Sponsor placements.** The landing page and docs now include optional sponsor placements for Atlas Cloud, controlled by a new feature flag so deployments can opt in when appropriate. [f14d8ce69](https://github.com/reactive-resume/reactive-resume/commit/f14d8ce69) ## Resume Builder & Rendering -- Added the **Hide Link Underline** page option to the builder, resume schema, default resume data, import path, and shared PDF link rendering. [5fb4976ec](https://github.com/amruthpillai/reactive-resume/commit/5fb4976ec), [90a9bb9cf](https://github.com/amruthpillai/reactive-resume/commit/90a9bb9cf), [#3134](https://github.com/amruthpillai/reactive-resume/issues/3134) -- Fixed mixed CJK and Latin word wrapping so CJK text can still break per character without splitting Latin words letter by letter. [#3136](https://github.com/amruthpillai/reactive-resume/pull/3136) -- Added locale and content-aware PDF fallback fonts for Korean, Japanese, Chinese, Arabic, Hebrew, and Thai, while keeping CJK-specific line breaking limited to CJK scripts. [#3158](https://github.com/amruthpillai/reactive-resume/pull/3158) -- Fixed redacted resume access checks so placeholder resume data uses a non-empty name. [#3138](https://github.com/amruthpillai/reactive-resume/pull/3138) +- Added the **Hide Link Underline** page option to the builder, resume schema, default resume data, import path, and shared PDF link rendering. [5fb4976ec](https://github.com/reactive-resume/reactive-resume/commit/5fb4976ec), [90a9bb9cf](https://github.com/reactive-resume/reactive-resume/commit/90a9bb9cf), [#3134](https://github.com/reactive-resume/reactive-resume/issues/3134) +- Fixed mixed CJK and Latin word wrapping so CJK text can still break per character without splitting Latin words letter by letter. [#3136](https://github.com/reactive-resume/reactive-resume/pull/3136) +- Added locale and content-aware PDF fallback fonts for Korean, Japanese, Chinese, Arabic, Hebrew, and Thai, while keeping CJK-specific line breaking limited to CJK scripts. [#3158](https://github.com/reactive-resume/reactive-resume/pull/3158) +- Fixed redacted resume access checks so placeholder resume data uses a non-empty name. [#3138](https://github.com/reactive-resume/reactive-resume/pull/3138) ## AI, MCP & Self-Hosting -- Fixed AI resume analysis when model responses wrap JSON in Markdown code fences. [#3142](https://github.com/amruthpillai/reactive-resume/pull/3142) -- Added `FLAG_DISABLE_API_RATE_LIMIT` for trusted self-hosted deployments that need to disable authentication API rate limiting, and documented it in the Docker self-hosting guide. [#3149](https://github.com/amruthpillai/reactive-resume/pull/3149) -- Added `FLAG_SHOW_SPONSORS`, sponsor assets, landing-page placement, docs navigation, and README sponsor information for Atlas Cloud. [f14d8ce69](https://github.com/amruthpillai/reactive-resume/commit/f14d8ce69) -- Fixed the MCP PDF download test mock to match the current tool behavior. [#3144](https://github.com/amruthpillai/reactive-resume/pull/3144) +- Fixed AI resume analysis when model responses wrap JSON in Markdown code fences. [#3142](https://github.com/reactive-resume/reactive-resume/pull/3142) +- Added `FLAG_DISABLE_API_RATE_LIMIT` for trusted self-hosted deployments that need to disable authentication API rate limiting, and documented it in the Docker self-hosting guide. [#3149](https://github.com/reactive-resume/reactive-resume/pull/3149) +- Added `FLAG_SHOW_SPONSORS`, sponsor assets, landing-page placement, docs navigation, and README sponsor information for Atlas Cloud. [f14d8ce69](https://github.com/reactive-resume/reactive-resume/commit/f14d8ce69) +- Fixed the MCP PDF download test mock to match the current tool behavior. [#3144](https://github.com/reactive-resume/reactive-resume/pull/3144) ## Localization & Maintenance -- Synced translation catalogs from Crowdin across the app. [#3132](https://github.com/amruthpillai/reactive-resume/pull/3132), [#3135](https://github.com/amruthpillai/reactive-resume/pull/3135), [#3148](https://github.com/amruthpillai/reactive-resume/pull/3148), [#3162](https://github.com/amruthpillai/reactive-resume/pull/3162) -- Updated workspace dependencies and refreshed linting/tooling configuration. [042d076ef](https://github.com/amruthpillai/reactive-resume/commit/042d076ef), [37faf592b](https://github.com/amruthpillai/reactive-resume/commit/37faf592b), [ef5ff30b](https://github.com/amruthpillai/reactive-resume/commit/ef5ff30b) +- Synced translation catalogs from Crowdin across the app. [#3132](https://github.com/reactive-resume/reactive-resume/pull/3132), [#3135](https://github.com/reactive-resume/reactive-resume/pull/3135), [#3148](https://github.com/reactive-resume/reactive-resume/pull/3148), [#3162](https://github.com/reactive-resume/reactive-resume/pull/3162) +- Updated workspace dependencies and refreshed linting/tooling configuration. [042d076ef](https://github.com/reactive-resume/reactive-resume/commit/042d076ef), [37faf592b](https://github.com/reactive-resume/reactive-resume/commit/37faf592b), [ef5ff30b](https://github.com/reactive-resume/reactive-resume/commit/ef5ff30b) -**Full Changelog**: [v5.1.8...v5.1.9](https://github.com/amruthpillai/reactive-resume/compare/v5.1.8...v5.1.9) +**Full Changelog**: [v5.1.8...v5.1.9](https://github.com/reactive-resume/reactive-resume/compare/v5.1.8...v5.1.9) ## Highlights -- **Section heading icons for PDF templates.** Resume section titles can now show customizable Phosphor icons in PDF output. Pick icons from the builder, hide individual section icons, or use the new page setting to hide heading icons separately from item-level icons. [b932711f0](https://github.com/amruthpillai/reactive-resume/commit/b932711f0) -- **Multicolor text highlights.** The rich text editor now includes a highlight color picker with presets and custom colors. Dark highlights automatically switch marked text to white for readability, and highlight colors carry through PDF and DOCX exports. [e96a51f31](https://github.com/amruthpillai/reactive-resume/commit/e96a51f31) -- **MCP PDF downloads.** MCP clients can now create short-lived authenticated PDF download URLs for resumes, making agent workflows able to retrieve generated PDF exports directly. [0df7f2113](https://github.com/amruthpillai/reactive-resume/commit/0df7f2113) +- **Section heading icons for PDF templates.** Resume section titles can now show customizable Phosphor icons in PDF output. Pick icons from the builder, hide individual section icons, or use the new page setting to hide heading icons separately from item-level icons. [b932711f0](https://github.com/reactive-resume/reactive-resume/commit/b932711f0) +- **Multicolor text highlights.** The rich text editor now includes a highlight color picker with presets and custom colors. Dark highlights automatically switch marked text to white for readability, and highlight colors carry through PDF and DOCX exports. [e96a51f31](https://github.com/reactive-resume/reactive-resume/commit/e96a51f31) +- **MCP PDF downloads.** MCP clients can now create short-lived authenticated PDF download URLs for resumes, making agent workflows able to retrieve generated PDF exports directly. [0df7f2113](https://github.com/reactive-resume/reactive-resume/commit/0df7f2113) ## Resume Builder & Editing -- Added per-section icon pickers for summary, built-in sections, and custom section dialogs, with sensible default icons for existing resumes and a `"none"` option for hiding a specific section icon. [b932711f0](https://github.com/amruthpillai/reactive-resume/commit/b932711f0) -- Added a **Hide Section Icons** page option and clarified the existing **Hide Icons** setting so section heading icons and item-level icons can be controlled independently. [b932711f0](https://github.com/amruthpillai/reactive-resume/commit/b932711f0) -- Replaced the single-color rich text highlight toggle with a full highlight color picker, including preset colors, custom colors, and a clear action. [e96a51f31](https://github.com/amruthpillai/reactive-resume/commit/e96a51f31) -- Synced new builder, section icon, and rich text editor labels across locale catalogs. [b932711f0](https://github.com/amruthpillai/reactive-resume/commit/b932711f0), [1507d869c](https://github.com/amruthpillai/reactive-resume/commit/1507d869c), [e96a51f31](https://github.com/amruthpillai/reactive-resume/commit/e96a51f31) +- Added per-section icon pickers for summary, built-in sections, and custom section dialogs, with sensible default icons for existing resumes and a `"none"` option for hiding a specific section icon. [b932711f0](https://github.com/reactive-resume/reactive-resume/commit/b932711f0) +- Added a **Hide Section Icons** page option and clarified the existing **Hide Icons** setting so section heading icons and item-level icons can be controlled independently. [b932711f0](https://github.com/reactive-resume/reactive-resume/commit/b932711f0) +- Replaced the single-color rich text highlight toggle with a full highlight color picker, including preset colors, custom colors, and a clear action. [e96a51f31](https://github.com/reactive-resume/reactive-resume/commit/e96a51f31) +- Synced new builder, section icon, and rich text editor labels across locale catalogs. [b932711f0](https://github.com/reactive-resume/reactive-resume/commit/b932711f0), [1507d869c](https://github.com/reactive-resume/reactive-resume/commit/1507d869c), [e96a51f31](https://github.com/reactive-resume/reactive-resume/commit/e96a51f31) ## Resume Rendering & Exports -- Added section heading icon rendering to shared PDF templates, including heading-size scaling, default icon fallbacks for legacy resume data, and support for custom sections. [b932711f0](https://github.com/amruthpillai/reactive-resume/commit/b932711f0) -- Preserved custom highlight colors in PDF and DOCX exports, including automatic white text on dark highlight colors. [e96a51f31](https://github.com/amruthpillai/reactive-resume/commit/e96a51f31) -- Fixed experience entries with role progression so the main position and period still render in the header without repeating the period below it. [9ce5bacd2](https://github.com/amruthpillai/reactive-resume/commit/9ce5bacd2) -- Fixed Custom Styles font size rules for resume icons and level indicators so those values affect actual icon dimensions in PDFs and builder previews. [1414fecad](https://github.com/amruthpillai/reactive-resume/commit/1414fecad), [e00ff8cec](https://github.com/amruthpillai/reactive-resume/commit/e00ff8cec) -- Fixed the Glalie template contact-list border so it stays square instead of inheriting the picture border radius. [c1d11236a](https://github.com/amruthpillai/reactive-resume/commit/c1d11236a) +- Added section heading icon rendering to shared PDF templates, including heading-size scaling, default icon fallbacks for legacy resume data, and support for custom sections. [b932711f0](https://github.com/reactive-resume/reactive-resume/commit/b932711f0) +- Preserved custom highlight colors in PDF and DOCX exports, including automatic white text on dark highlight colors. [e96a51f31](https://github.com/reactive-resume/reactive-resume/commit/e96a51f31) +- Fixed experience entries with role progression so the main position and period still render in the header without repeating the period below it. [9ce5bacd2](https://github.com/reactive-resume/reactive-resume/commit/9ce5bacd2) +- Fixed Custom Styles font size rules for resume icons and level indicators so those values affect actual icon dimensions in PDFs and builder previews. [1414fecad](https://github.com/reactive-resume/reactive-resume/commit/1414fecad), [e00ff8cec](https://github.com/reactive-resume/reactive-resume/commit/e00ff8cec) +- Fixed the Glalie template contact-list border so it stays square instead of inheriting the picture border radius. [c1d11236a](https://github.com/reactive-resume/reactive-resume/commit/c1d11236a) ## MCP, API & Maintenance -- Added the `download_resume_pdf` MCP tool, returning a signed PDF download URL that expires after 10 minutes. [0df7f2113](https://github.com/amruthpillai/reactive-resume/commit/0df7f2113) -- Added the authenticated `/api/resumes/:id/pdf` download route used by MCP PDF downloads, with no-store caching, token validation, ownership checks, and safer PDF generation errors. [0df7f2113](https://github.com/amruthpillai/reactive-resume/commit/0df7f2113), [a8c70d784](https://github.com/amruthpillai/reactive-resume/commit/a8c70d784), [152279473](https://github.com/amruthpillai/reactive-resume/commit/152279473) -- Made MCP server cards, OpenAPI output, schema JSON, and server metadata use runtime-safe app version handling in development. [d09ad2cdc](https://github.com/amruthpillai/reactive-resume/commit/d09ad2cdc) -- Updated the release Docker workflow to purge Cloudflare cache after publishing a release image, so cached release artifacts refresh after deployment. [6852f586e](https://github.com/amruthpillai/reactive-resume/commit/6852f586e) +- Added the `download_resume_pdf` MCP tool, returning a signed PDF download URL that expires after 10 minutes. [0df7f2113](https://github.com/reactive-resume/reactive-resume/commit/0df7f2113) +- Added the authenticated `/api/resumes/:id/pdf` download route used by MCP PDF downloads, with no-store caching, token validation, ownership checks, and safer PDF generation errors. [0df7f2113](https://github.com/reactive-resume/reactive-resume/commit/0df7f2113), [a8c70d784](https://github.com/reactive-resume/reactive-resume/commit/a8c70d784), [152279473](https://github.com/reactive-resume/reactive-resume/commit/152279473) +- Made MCP server cards, OpenAPI output, schema JSON, and server metadata use runtime-safe app version handling in development. [d09ad2cdc](https://github.com/reactive-resume/reactive-resume/commit/d09ad2cdc) +- Updated the release Docker workflow to purge Cloudflare cache after publishing a release image, so cached release artifacts refresh after deployment. [6852f586e](https://github.com/reactive-resume/reactive-resume/commit/6852f586e) -**Full Changelog**: [v5.1.7...v5.1.8](https://github.com/amruthpillai/reactive-resume/compare/v5.1.7...v5.1.8) +**Full Changelog**: [v5.1.7...v5.1.8](https://github.com/reactive-resume/reactive-resume/compare/v5.1.7...v5.1.8) ## Highlights -- **Custom Styles replaces Custom CSS.** Reactive Resume now has a structured Custom Styles panel in the builder for fine-grained resume styling without raw CSS. Because v5 renders resumes through React PDF instead of browser HTML/CSS, Custom Styles uses safe, semantic rules that work consistently in the live preview, exported PDFs, public resumes, and server-side generation. [b04eef147](https://github.com/amruthpillai/reactive-resume/commit/b04eef147), [c6a654191](https://github.com/amruthpillai/reactive-resume/commit/c6a654191), [16f4d2c07](https://github.com/amruthpillai/reactive-resume/commit/16f4d2c07) +- **Custom Styles replaces Custom CSS.** Reactive Resume now has a structured Custom Styles panel in the builder for fine-grained resume styling without raw CSS. Because v5 renders resumes through React PDF instead of browser HTML/CSS, Custom Styles uses safe, semantic rules that work consistently in the live preview, exported PDFs, public resumes, and server-side generation. [b04eef147](https://github.com/reactive-resume/reactive-resume/commit/b04eef147), [c6a654191](https://github.com/reactive-resume/reactive-resume/commit/c6a654191), [16f4d2c07](https://github.com/reactive-resume/reactive-resume/commit/16f4d2c07) Custom Styles section in the right sidebar with target scope, style slot, style controls, and applied rules -- **Better live resume sync.** The builder now handles local edits, Agent updates, MCP changes, and API updates more reliably by saving the latest resume draft and merging server metadata without losing in-progress changes. [dd1e37e57](https://github.com/amruthpillai/reactive-resume/commit/dd1e37e57) -- **More accessible links across the app and exports.** Link handling was refreshed across web UI, dialogs, PDF preview/rendering, email, and shared UI components for improved accessibility behavior. [8da780c86](https://github.com/amruthpillai/reactive-resume/commit/8da780c86) +- **Better live resume sync.** The builder now handles local edits, Agent updates, MCP changes, and API updates more reliably by saving the latest resume draft and merging server metadata without losing in-progress changes. [dd1e37e57](https://github.com/reactive-resume/reactive-resume/commit/dd1e37e57) +- **More accessible links across the app and exports.** Link handling was refreshed across web UI, dialogs, PDF preview/rendering, email, and shared UI components for improved accessibility behavior. [8da780c86](https://github.com/reactive-resume/reactive-resume/commit/8da780c86) ## Custom Styles -- Added a new **Custom Styles** section to the builder's right sidebar with target scope, style slot, style controls, and applied-rule management. [b04eef147](https://github.com/amruthpillai/reactive-resume/commit/b04eef147), [c6a654191](https://github.com/amruthpillai/reactive-resume/commit/c6a654191) -- Added style rule metadata to resume data so styling can be saved with the resume and preserved during imports from Reactive Resume v4 JSON. [b04eef147](https://github.com/amruthpillai/reactive-resume/commit/b04eef147) -- Added target scopes for **All sections**, **Section type**, and **Specific section**, allowing broad defaults or precise overrides for duplicate and custom sections. [b04eef147](https://github.com/amruthpillai/reactive-resume/commit/b04eef147) -- Added semantic style slots for section containers, headings, item containers, primary and secondary text, links, icons, level indicators, rich-text paragraphs, lists, list rows, list content, inline links, bold text, and highlights. [b04eef147](https://github.com/amruthpillai/reactive-resume/commit/b04eef147), [c6a654191](https://github.com/amruthpillai/reactive-resume/commit/c6a654191) -- Added structured controls for color, typography, spacing, borders, opacity, text decoration, alignment, and transforms, with empty fields falling back to the selected template. [b04eef147](https://github.com/amruthpillai/reactive-resume/commit/b04eef147) -- Added shared PDF style-rule resolution so Custom Styles layer on top of every template and apply consistently to rich text, lists, contact items, level indicators, and template-owned section rendering. [b04eef147](https://github.com/amruthpillai/reactive-resume/commit/b04eef147), [c6a654191](https://github.com/amruthpillai/reactive-resume/commit/c6a654191) -- Added focused tests for style rule schema validation, PDF style resolution, rich-text style inheritance, and the Custom Styles builder UI. [b04eef147](https://github.com/amruthpillai/reactive-resume/commit/b04eef147), [c6a654191](https://github.com/amruthpillai/reactive-resume/commit/c6a654191) +- Added a new **Custom Styles** section to the builder's right sidebar with target scope, style slot, style controls, and applied-rule management. [b04eef147](https://github.com/reactive-resume/reactive-resume/commit/b04eef147), [c6a654191](https://github.com/reactive-resume/reactive-resume/commit/c6a654191) +- Added style rule metadata to resume data so styling can be saved with the resume and preserved during imports from Reactive Resume v4 JSON. [b04eef147](https://github.com/reactive-resume/reactive-resume/commit/b04eef147) +- Added target scopes for **All sections**, **Section type**, and **Specific section**, allowing broad defaults or precise overrides for duplicate and custom sections. [b04eef147](https://github.com/reactive-resume/reactive-resume/commit/b04eef147) +- Added semantic style slots for section containers, headings, item containers, primary and secondary text, links, icons, level indicators, rich-text paragraphs, lists, list rows, list content, inline links, bold text, and highlights. [b04eef147](https://github.com/reactive-resume/reactive-resume/commit/b04eef147), [c6a654191](https://github.com/reactive-resume/reactive-resume/commit/c6a654191) +- Added structured controls for color, typography, spacing, borders, opacity, text decoration, alignment, and transforms, with empty fields falling back to the selected template. [b04eef147](https://github.com/reactive-resume/reactive-resume/commit/b04eef147) +- Added shared PDF style-rule resolution so Custom Styles layer on top of every template and apply consistently to rich text, lists, contact items, level indicators, and template-owned section rendering. [b04eef147](https://github.com/reactive-resume/reactive-resume/commit/b04eef147), [c6a654191](https://github.com/reactive-resume/reactive-resume/commit/c6a654191) +- Added focused tests for style rule schema validation, PDF style resolution, rich-text style inheritance, and the Custom Styles builder UI. [b04eef147](https://github.com/reactive-resume/reactive-resume/commit/b04eef147), [c6a654191](https://github.com/reactive-resume/reactive-resume/commit/c6a654191) ## Builder, Accessibility & Agent Updates -- Reworked resume draft saving so the builder queues full draft saves, retries failed saves, and avoids overwriting newer local edits when server responses arrive out of order. [dd1e37e57](https://github.com/amruthpillai/reactive-resume/commit/dd1e37e57) -- Added a resume update subscription for Agent threads so resume previews can refresh when external Agent changes land. [dd1e37e57](https://github.com/amruthpillai/reactive-resume/commit/dd1e37e57) -- Improved import, picture, information, resume analysis, homepage, Agent, and shared UI link behavior for better accessibility and safer rendering. [8da780c86](https://github.com/amruthpillai/reactive-resume/commit/8da780c86) -- Added safer PDF text style handling for links and rich text so invalid or unsupported link styles do not leak into React PDF output. [8da780c86](https://github.com/amruthpillai/reactive-resume/commit/8da780c86) -- Improved combobox behavior and tests used by Custom Styles and other builder controls. [c6a654191](https://github.com/amruthpillai/reactive-resume/commit/c6a654191), [b49158263](https://github.com/amruthpillai/reactive-resume/commit/b49158263) +- Reworked resume draft saving so the builder queues full draft saves, retries failed saves, and avoids overwriting newer local edits when server responses arrive out of order. [dd1e37e57](https://github.com/reactive-resume/reactive-resume/commit/dd1e37e57) +- Added a resume update subscription for Agent threads so resume previews can refresh when external Agent changes land. [dd1e37e57](https://github.com/reactive-resume/reactive-resume/commit/dd1e37e57) +- Improved import, picture, information, resume analysis, homepage, Agent, and shared UI link behavior for better accessibility and safer rendering. [8da780c86](https://github.com/reactive-resume/reactive-resume/commit/8da780c86) +- Added safer PDF text style handling for links and rich text so invalid or unsupported link styles do not leak into React PDF output. [8da780c86](https://github.com/reactive-resume/reactive-resume/commit/8da780c86) +- Improved combobox behavior and tests used by Custom Styles and other builder controls. [c6a654191](https://github.com/reactive-resume/reactive-resume/commit/c6a654191), [b49158263](https://github.com/reactive-resume/reactive-resume/commit/b49158263) ## Docs, Localization & Maintenance -- Added a full **Using Custom Styles** guide with screenshots, target-scope guidance, style-slot reference tables, practical examples, and notes on when to use Custom Styles instead of the broader Design, Typography, Layout, and Page settings. [16f4d2c07](https://github.com/amruthpillai/reactive-resume/commit/16f4d2c07) -- Added an architecture decision record explaining why structured Style Rules are the supported replacement for raw Custom CSS in the React PDF rendering model. [b04eef147](https://github.com/amruthpillai/reactive-resume/commit/b04eef147) -- Added a Custom Styles header-target design note for future styling scope decisions. [7bff6644d](https://github.com/amruthpillai/reactive-resume/commit/7bff6644d) -- Synced missing translations for Custom Styles and related builder text across locale catalogs. [b49158263](https://github.com/amruthpillai/reactive-resume/commit/b49158263) -- Removed React Doctor from package scripts, refreshed task dependencies in `turbo.json`, and cleaned up related workspace dependency entries. [8461aa65](https://github.com/amruthpillai/reactive-resume/commit/8461aa65) +- Added a full **Using Custom Styles** guide with screenshots, target-scope guidance, style-slot reference tables, practical examples, and notes on when to use Custom Styles instead of the broader Design, Typography, Layout, and Page settings. [16f4d2c07](https://github.com/reactive-resume/reactive-resume/commit/16f4d2c07) +- Added an architecture decision record explaining why structured Style Rules are the supported replacement for raw Custom CSS in the React PDF rendering model. [b04eef147](https://github.com/reactive-resume/reactive-resume/commit/b04eef147) +- Added a Custom Styles header-target design note for future styling scope decisions. [7bff6644d](https://github.com/reactive-resume/reactive-resume/commit/7bff6644d) +- Synced missing translations for Custom Styles and related builder text across locale catalogs. [b49158263](https://github.com/reactive-resume/reactive-resume/commit/b49158263) +- Removed React Doctor from package scripts, refreshed task dependencies in `turbo.json`, and cleaned up related workspace dependency entries. [8461aa65](https://github.com/reactive-resume/reactive-resume/commit/8461aa65) -**Full Changelog**: [v5.1.6...v5.1.7](https://github.com/amruthpillai/reactive-resume/compare/v5.1.6...v5.1.7) +**Full Changelog**: [v5.1.6...v5.1.7](https://github.com/reactive-resume/reactive-resume/compare/v5.1.6...v5.1.7) ## Highlights -- **Right-to-left PDF support across all templates.** Resumes in RTL locales now mirror layout, alignment, and rich text direction consistently across every PDF template, not just Rhyhorn. [24c882fa9](https://github.com/amruthpillai/reactive-resume/commit/24c882fa9), [266bc291e](https://github.com/amruthpillai/reactive-resume/commit/266bc291e) -- **More reliable social login for upgraded accounts.** OAuth sign-in now reconciles existing email-based accounts with legacy GitHub-linked profiles, so migrated users can sign back in without creating duplicate accounts. [86fff7237](https://github.com/amruthpillai/reactive-resume/commit/86fff7237) +- **Right-to-left PDF support across all templates.** Resumes in RTL locales now mirror layout, alignment, and rich text direction consistently across every PDF template, not just Rhyhorn. [24c882fa9](https://github.com/reactive-resume/reactive-resume/commit/24c882fa9), [266bc291e](https://github.com/reactive-resume/reactive-resume/commit/266bc291e) +- **More reliable social login for upgraded accounts.** OAuth sign-in now reconciles existing email-based accounts with legacy GitHub-linked profiles, so migrated users can sign back in without creating duplicate accounts. [86fff7237](https://github.com/reactive-resume/reactive-resume/commit/86fff7237) ## Resume Rendering & Exports -- Added shared RTL layout helpers and a single `rtl` flag on the PDF render provider, then migrated every template page to mirrored layout styles. [24c882fa9](https://github.com/amruthpillai/reactive-resume/commit/24c882fa9) -- Fixed plain rich text rendering in PDFs by routing paragraph content through dedicated `PdfText` renderers. [24c882fa9](https://github.com/amruthpillai/reactive-resume/commit/24c882fa9) -- Mapped legacy `Times New Roman` font selections to the PDF-compatible `Times-Roman` family so older resumes keep rendering correctly. [24c882fa9](https://github.com/amruthpillai/reactive-resume/commit/24c882fa9) -- Reduced the default vertical gap between list items in PDF templates for tighter, more readable bullet and numbered lists. [17cddbad6](https://github.com/amruthpillai/reactive-resume/commit/17cddbad6) -- Fixed color parsing for 3-digit hex values such as `#abc`, which previously failed to convert correctly in the builder. [273e17c0d](https://github.com/amruthpillai/reactive-resume/commit/273e17c0d) +- Added shared RTL layout helpers and a single `rtl` flag on the PDF render provider, then migrated every template page to mirrored layout styles. [24c882fa9](https://github.com/reactive-resume/reactive-resume/commit/24c882fa9) +- Fixed plain rich text rendering in PDFs by routing paragraph content through dedicated `PdfText` renderers. [24c882fa9](https://github.com/reactive-resume/reactive-resume/commit/24c882fa9) +- Mapped legacy `Times New Roman` font selections to the PDF-compatible `Times-Roman` family so older resumes keep rendering correctly. [24c882fa9](https://github.com/reactive-resume/reactive-resume/commit/24c882fa9) +- Reduced the default vertical gap between list items in PDF templates for tighter, more readable bullet and numbered lists. [17cddbad6](https://github.com/reactive-resume/reactive-resume/commit/17cddbad6) +- Fixed color parsing for 3-digit hex values such as `#abc`, which previously failed to convert correctly in the builder. [273e17c0d](https://github.com/reactive-resume/reactive-resume/commit/273e17c0d) ## Authentication -- Added OAuth profile reconciliation that matches returning users by normalized email and legacy GitHub username/display name before creating a new account. [86fff7237](https://github.com/amruthpillai/reactive-resume/commit/86fff7237) +- Added OAuth profile reconciliation that matches returning users by normalized email and legacy GitHub username/display name before creating a new account. [86fff7237](https://github.com/reactive-resume/reactive-resume/commit/86fff7237) ## AI & Agent Workflows -- Fixed Agent thread deletion to remove attachments and mark the thread deleted before storage cleanup, preventing inconsistent database state when storage cleanup fails partway through. [7557ab13a](https://github.com/amruthpillai/reactive-resume/commit/7557ab13a) +- Fixed Agent thread deletion to remove attachments and mark the thread deleted before storage cleanup, preventing inconsistent database state when storage cleanup fails partway through. [7557ab13a](https://github.com/reactive-resume/reactive-resume/commit/7557ab13a) ## Docs & Maintenance -- Updated the Docker quick-start guide to use a shallow clone for faster setup. Thanks to [@umairkhurshid](https://github.com/umairkhurshid). [75e944613](https://github.com/amruthpillai/reactive-resume/commit/75e944613) -- Centralized RTL locale detection in `@reactive-resume/utils/locale` and removed duplicate web-side helpers. [c66560ee1](https://github.com/amruthpillai/reactive-resume/commit/c66560ee1) -- Ran React Doctor lint passes, refreshed translations, and added dynamic imports where appropriate. [39e88dd36](https://github.com/amruthpillai/reactive-resume/commit/39e88dd36) -- Updated workspace dependencies. [3596102c6](https://github.com/amruthpillai/reactive-resume/commit/3596102c6), [6ec4da791](https://github.com/amruthpillai/reactive-resume/commit/6ec4da791), [7eea6675c](https://github.com/amruthpillai/reactive-resume/commit/7eea6675c) +- Updated the Docker quick-start guide to use a shallow clone for faster setup. Thanks to [@umairkhurshid](https://github.com/umairkhurshid). [75e944613](https://github.com/reactive-resume/reactive-resume/commit/75e944613) +- Centralized RTL locale detection in `@reactive-resume/utils/locale` and removed duplicate web-side helpers. [c66560ee1](https://github.com/reactive-resume/reactive-resume/commit/c66560ee1) +- Ran React Doctor lint passes, refreshed translations, and added dynamic imports where appropriate. [39e88dd36](https://github.com/reactive-resume/reactive-resume/commit/39e88dd36) +- Updated workspace dependencies. [3596102c6](https://github.com/reactive-resume/reactive-resume/commit/3596102c6), [6ec4da791](https://github.com/reactive-resume/reactive-resume/commit/6ec4da791), [7eea6675c](https://github.com/reactive-resume/reactive-resume/commit/7eea6675c) -**Full Changelog**: [v5.1.5...v5.1.6](https://github.com/amruthpillai/reactive-resume/compare/v5.1.5...v5.1.6) +**Full Changelog**: [v5.1.5...v5.1.6](https://github.com/reactive-resume/reactive-resume/compare/v5.1.5...v5.1.6) @@ -640,9 +640,9 @@ rss: true ## Highlights -- **Dedicated Hono server runtime.** Reactive Resume now builds a separate `apps/server` app that mounts auth, RPC, MCP, OpenAPI, uploads, schema JSON, SEO endpoints, health checks, and the built web app from one Node.js process. [ecc1fd9a8](https://github.com/amruthpillai/reactive-resume/commit/ecc1fd9a8), [9033da082](https://github.com/amruthpillai/reactive-resume/commit/9033da082) -- **Clearer self-hosting runtime model.** The Docker image now builds both `web` and `server`, runs `node apps/server/dist/index.mjs`, and keeps `/api/health` pointed at the production server port. [ecc1fd9a8](https://github.com/amruthpillai/reactive-resume/commit/ecc1fd9a8) -- **Safer Agent restore behavior.** Agent edits now store a resume snapshot before applying a patch, so restoring an action can roll the draft back to the exact prior state and mark later agent patches as rolled back. [d961e6535](https://github.com/amruthpillai/reactive-resume/commit/d961e6535) +- **Dedicated Hono server runtime.** Reactive Resume now builds a separate `apps/server` app that mounts auth, RPC, MCP, OpenAPI, uploads, schema JSON, SEO endpoints, health checks, and the built web app from one Node.js process. [ecc1fd9a8](https://github.com/reactive-resume/reactive-resume/commit/ecc1fd9a8), [9033da082](https://github.com/reactive-resume/reactive-resume/commit/9033da082) +- **Clearer self-hosting runtime model.** The Docker image now builds both `web` and `server`, runs `node apps/server/dist/index.mjs`, and keeps `/api/health` pointed at the production server port. [ecc1fd9a8](https://github.com/reactive-resume/reactive-resume/commit/ecc1fd9a8) +- **Safer Agent restore behavior.** Agent edits now store a resume snapshot before applying a patch, so restoring an action can roll the draft back to the exact prior state and mark later agent patches as rolled back. [d961e6535](https://github.com/reactive-resume/reactive-resume/commit/d961e6535) ## Self-Hosting & Environment @@ -652,7 +652,7 @@ rss: true - Updated `compose.dev.yml` to expose both `3000` and `3001`, add an app profile, and health-check the Hono server port. - Startup checks now run from the server process, including database migrations and local storage writability validation when S3-compatible storage is not configured. - Removed `OAUTH_DYNAMIC_CLIENT_REDIRECT_HOSTS`. Dynamic OAuth client registration now allows the app origin and loopback callbacks by default. -- Added `FLAG_ALLOW_UNSAFE_OAUTH_REDIRECT_URI` for trusted self-hosted deployments that intentionally need arbitrary redirect URIs, including custom schemes, private hosts, or non-loopback `http://` callbacks. Keep this disabled on public or multi-tenant instances. [445359ebe](https://github.com/amruthpillai/reactive-resume/commit/445359ebe) +- Added `FLAG_ALLOW_UNSAFE_OAUTH_REDIRECT_URI` for trusted self-hosted deployments that intentionally need arbitrary redirect URIs, including custom schemes, private hosts, or non-loopback `http://` callbacks. Keep this disabled on public or multi-tenant instances. [445359ebe](https://github.com/reactive-resume/reactive-resume/commit/445359ebe) - Removed the documented `BETTER_AUTH_URL` and `BETTER_AUTH_SECRET` override path. Auth metadata, JWKS, and OAuth callback URLs are now derived from `APP_URL` and `AUTH_SECRET`. - Removed Cloudflare URL extraction environment variables. Live Agent web research now depends on the selected AI provider and model supporting native web search. - Renamed the Crowdin token example from `CROWDIN_PERSONAL_TOKEN` to `CROWDIN_API_TOKEN`. @@ -661,7 +661,7 @@ rss: true - Moved API/auth/MCP/OpenAPI/static route ownership out of the web app and into `apps/server`. - Changed the web app build to a Vite/TanStack Router SPA output under `apps/web/dist`, with the Hono server serving the built app and static fallback responses. -- Added `robots.txt`, `sitemap.xml`, `llms.txt`, structured data helpers, and server-owned SEO responses. [8fcf0ec64](https://github.com/amruthpillai/reactive-resume/commit/8fcf0ec64) +- Added `robots.txt`, `sitemap.xml`, `llms.txt`, structured data helpers, and server-owned SEO responses. [8fcf0ec64](https://github.com/reactive-resume/reactive-resume/commit/8fcf0ec64) - Added package-boundary rules to Turborepo and per-workspace `turbo.json` files to enforce browser, server, domain, adapter, and infra ownership. - Split focused domains into new packages: `@reactive-resume/docx`, `@reactive-resume/mcp`, and `@reactive-resume/resume`. - Moved development-only scripts from `packages/scripts` to `tooling` so workspace packages contain app/runtime code rather than private repo tooling. @@ -678,9 +678,9 @@ rss: true ## Resume Rendering & Exports - Moved browser PDF preview code into `apps/web/src/features/resume/preview` and public resume viewer code into `apps/web/src/features/resume/public`. -- Added direct PDF.js canvas preview and thumbnail rendering through legacy PDF.js entrypoints, with tests that prevent browser preview code from importing the modern PDF.js runtime. [7cade6980](https://github.com/amruthpillai/reactive-resume/commit/7cade6980) +- Added direct PDF.js canvas preview and thumbnail rendering through legacy PDF.js entrypoints, with tests that prevent browser preview code from importing the modern PDF.js runtime. [7cade6980](https://github.com/reactive-resume/reactive-resume/commit/7cade6980) - Added explicit `@reactive-resume/pdf/browser` and `@reactive-resume/pdf/server` generation adapters. -- Simplified shared sidebar summary handling for PDF templates and added focused coverage for featured summary behavior. [17f351171](https://github.com/amruthpillai/reactive-resume/commit/17f351171) +- Simplified shared sidebar summary handling for PDF templates and added focused coverage for featured summary behavior. [17f351171](https://github.com/reactive-resume/reactive-resume/commit/17f351171) ## Docs & Maintenance @@ -690,7 +690,7 @@ rss: true - Added and updated architecture notes, plans, and specs for the Hono migration, monorepo reorganization, Docker tagging, manifest-only PWA behavior, unsafe OAuth redirect policy, and Agent snapshot restore design. - Updated Knip configuration so server runtime dependencies that are imported by the built server bundle are treated as intentional dependencies. -**Full Changelog**: [v5.1.4...v5.1.5](https://github.com/amruthpillai/reactive-resume/compare/v5.1.4...v5.1.5) +**Full Changelog**: [v5.1.4...v5.1.5](https://github.com/reactive-resume/reactive-resume/compare/v5.1.4...v5.1.5) @@ -702,67 +702,67 @@ rss: true ## Highlights -- **New AI Agent workspace.** Added a dedicated full-screen Agent workspace for working on isolated AI draft copies of resumes. Threads include a sidebar, chat, tool activity, file attachments, and a read-only resume preview with PDF download support. [#3062](https://github.com/amruthpillai/reactive-resume/pull/3062) +- **New AI Agent workspace.** Added a dedicated full-screen Agent workspace for working on isolated AI draft copies of resumes. Threads include a sidebar, chat, tool activity, file attachments, and a read-only resume preview with PDF download support. [#3062](https://github.com/reactive-resume/reactive-resume/pull/3062) AI Agent workspace showing thread sidebar, chat, and resume preview -- **Reviewable and reversible agent edits.** Agent-applied resume patches now appear as expandable tool activity, with raw JSON Patch details, operation summaries, revert support, and clear conflict handling when the resume has changed. [#3062](https://github.com/amruthpillai/reactive-resume/pull/3062) +- **Reviewable and reversible agent edits.** Agent-applied resume patches now appear as expandable tool activity, with raw JSON Patch details, operation summaries, revert support, and clear conflict handling when the resume has changed. [#3062](https://github.com/reactive-resume/reactive-resume/pull/3062) AI Agent chat showing an applied patch with raw JSON details -- **Public resumes now render with PDF.js.** Public resume pages now use the PDF.js-based viewer path, improving parity between the public page, builder preview, and exported PDF. [#3061](https://github.com/amruthpillai/reactive-resume/pull/3061) +- **Public resumes now render with PDF.js.** Public resume pages now use the PDF.js-based viewer path, improving parity between the public page, builder preview, and exported PDF. [#3061](https://github.com/reactive-resume/reactive-resume/pull/3061) ## AI & Agent Workflows -- Added server-side AI provider management with encrypted credentials, provider testing, and provider/model capability checks. This replaces the old local AI store and keeps AI configuration centralized. [#3062](https://github.com/amruthpillai/reactive-resume/pull/3062) -- Added Agent tools for reading resume drafts, using provider-native web search when supported, reading supported attachments, asking follow-up questions, and applying JSON Patch updates to the AI draft. [#3062](https://github.com/amruthpillai/reactive-resume/pull/3062) -- Added archive and delete actions for Agent threads, including read-only archived states, in-flight run cleanup when archiving, and ownership checks before destructive deletion. [#3062](https://github.com/amruthpillai/reactive-resume/pull/3062) -- Added attachment upload rate limits, private S3 ACLs for Agent attachments, runtime validation for streamed messages, transactional patch/action writes, and a unique message sequence index for safer Agent runs. [#3062](https://github.com/amruthpillai/reactive-resume/pull/3062) -- Added `FLAG_ALLOW_UNSAFE_AI_BASE_URL` for trusted self-hosted deployments that need private or local AI provider URLs, while still restricting provider URLs to `http` or `https`. Thanks to [@SirSKillz](https://github.com/SirSKillz). [#3059](https://github.com/amruthpillai/reactive-resume/pull/3059) +- Added server-side AI provider management with encrypted credentials, provider testing, and provider/model capability checks. This replaces the old local AI store and keeps AI configuration centralized. [#3062](https://github.com/reactive-resume/reactive-resume/pull/3062) +- Added Agent tools for reading resume drafts, using provider-native web search when supported, reading supported attachments, asking follow-up questions, and applying JSON Patch updates to the AI draft. [#3062](https://github.com/reactive-resume/reactive-resume/pull/3062) +- Added archive and delete actions for Agent threads, including read-only archived states, in-flight run cleanup when archiving, and ownership checks before destructive deletion. [#3062](https://github.com/reactive-resume/reactive-resume/pull/3062) +- Added attachment upload rate limits, private S3 ACLs for Agent attachments, runtime validation for streamed messages, transactional patch/action writes, and a unique message sequence index for safer Agent runs. [#3062](https://github.com/reactive-resume/reactive-resume/pull/3062) +- Added `FLAG_ALLOW_UNSAFE_AI_BASE_URL` for trusted self-hosted deployments that need private or local AI provider URLs, while still restricting provider URLs to `http` or `https`. Thanks to [@SirSKillz](https://github.com/SirSKillz). [#3059](https://github.com/reactive-resume/reactive-resume/pull/3059) ## Resume Rendering & Fonts -- Restored legacy local font names from v5.0.x by mapping them to metric-compatible bundled web fonts, preventing upgraded resumes from unexpectedly changing line breaks, page counts, or overall layout. Thanks to [@JamesGoslings](https://github.com/JamesGoslings). [#3057](https://github.com/amruthpillai/reactive-resume/pull/3057) -- Added metric-compatible aliases for `Times New Roman`, `Cambria`, `Arial`, `Garamond`, and `Calibri`, including Carlito as the Calibri-compatible target. [#3057](https://github.com/amruthpillai/reactive-resume/pull/3057) -- Improved resume preview spacing normalization and added focused coverage for the public PDF viewer and preview helpers. [#3061](https://github.com/amruthpillai/reactive-resume/pull/3061), [#3062](https://github.com/amruthpillai/reactive-resume/pull/3062) +- Restored legacy local font names from v5.0.x by mapping them to metric-compatible bundled web fonts, preventing upgraded resumes from unexpectedly changing line breaks, page counts, or overall layout. Thanks to [@JamesGoslings](https://github.com/JamesGoslings). [#3057](https://github.com/reactive-resume/reactive-resume/pull/3057) +- Added metric-compatible aliases for `Times New Roman`, `Cambria`, `Arial`, `Garamond`, and `Calibri`, including Carlito as the Calibri-compatible target. [#3057](https://github.com/reactive-resume/reactive-resume/pull/3057) +- Improved resume preview spacing normalization and added focused coverage for the public PDF viewer and preview helpers. [#3061](https://github.com/reactive-resume/reactive-resume/pull/3061), [#3062](https://github.com/reactive-resume/reactive-resume/pull/3062) ## Self-Hosting, Docs & Maintenance -- Added a development Dockerfile plus improved Compose development services and health checks for running Reactive Resume with local dependencies. [1294d3354](https://github.com/amruthpillai/reactive-resume/commit/1294d3354) -- Updated self-hosting documentation for Redis, encrypted AI provider credentials, provider-native web research, private Agent attachments, S3 path-style storage, and unsafe AI base URL behavior. [#3062](https://github.com/amruthpillai/reactive-resume/pull/3062), [#3059](https://github.com/amruthpillai/reactive-resume/pull/3059) -- Added new and refreshed guides for the AI Agent workspace, Agent tools, AI setup, builder dock, dashboard management, importing, exporting, public sharing, and private notes. [#3062](https://github.com/amruthpillai/reactive-resume/pull/3062), [affa1d664](https://github.com/amruthpillai/reactive-resume/commit/affa1d664) -- Removed a stale Custom CSS documentation link now that custom CSS is no longer part of the v5.1 renderer flow. [#3056](https://github.com/amruthpillai/reactive-resume/pull/3056) -- Added a Reactive Resume design system reference and updated dependencies across the workspace. [#3062](https://github.com/amruthpillai/reactive-resume/pull/3062) +- Added a development Dockerfile plus improved Compose development services and health checks for running Reactive Resume with local dependencies. [1294d3354](https://github.com/reactive-resume/reactive-resume/commit/1294d3354) +- Updated self-hosting documentation for Redis, encrypted AI provider credentials, provider-native web research, private Agent attachments, S3 path-style storage, and unsafe AI base URL behavior. [#3062](https://github.com/reactive-resume/reactive-resume/pull/3062), [#3059](https://github.com/reactive-resume/reactive-resume/pull/3059) +- Added new and refreshed guides for the AI Agent workspace, Agent tools, AI setup, builder dock, dashboard management, importing, exporting, public sharing, and private notes. [#3062](https://github.com/reactive-resume/reactive-resume/pull/3062), [affa1d664](https://github.com/reactive-resume/reactive-resume/commit/affa1d664) +- Removed a stale Custom CSS documentation link now that custom CSS is no longer part of the v5.1 renderer flow. [#3056](https://github.com/reactive-resume/reactive-resume/pull/3056) +- Added a Reactive Resume design system reference and updated dependencies across the workspace. [#3062](https://github.com/reactive-resume/reactive-resume/pull/3062) -**Full Changelog**: [v5.1.3...v5.1.4](https://github.com/amruthpillai/reactive-resume/compare/v5.1.3...v5.1.4) +**Full Changelog**: [v5.1.3...v5.1.4](https://github.com/reactive-resume/reactive-resume/compare/v5.1.3...v5.1.4) ## Highlights -- **New Scizor resume template.** Added the new **Scizor** layout to the template lineup, including builder support, schema/docs updates, and localization strings. [00dafd0c6](https://github.com/amruthpillai/reactive-resume/commit/00dafd0c6), [5f63dc876](https://github.com/amruthpillai/reactive-resume/commit/5f63dc876) +- **New Scizor resume template.** Added the new **Scizor** layout to the template lineup, including builder support, schema/docs updates, and localization strings. [00dafd0c6](https://github.com/reactive-resume/reactive-resume/commit/00dafd0c6), [5f63dc876](https://github.com/reactive-resume/reactive-resume/commit/5f63dc876) Scizor template preview -- **Smarter page settings in the builder.** Empty sections are now hidden from page settings to reduce noise and make layout management easier. [#3052](https://github.com/amruthpillai/reactive-resume/pull/3052) -- **Faster, smoother preview loading.** Improved resume preview loading behavior and added focused tests for preview components. [92a0e3ddb](https://github.com/amruthpillai/reactive-resume/commit/92a0e3ddb) +- **Smarter page settings in the builder.** Empty sections are now hidden from page settings to reduce noise and make layout management easier. [#3052](https://github.com/reactive-resume/reactive-resume/pull/3052) +- **Faster, smoother preview loading.** Improved resume preview loading behavior and added focused tests for preview components. [92a0e3ddb](https://github.com/reactive-resume/reactive-resume/commit/92a0e3ddb) ## Resume Builder & PDF Export Fixes -- Increased header name line height in PDF templates to prevent descender clipping. [#3050](https://github.com/amruthpillai/reactive-resume/pull/3050) -- Improved CJK rendering reliability across PDF output, including better handling of hyphenation callbacks and italic fallback behavior. [62b0a1d53](https://github.com/amruthpillai/reactive-resume/commit/62b0a1d53), [83a407bc1](https://github.com/amruthpillai/reactive-resume/commit/83a407bc1), [33103536a](https://github.com/amruthpillai/reactive-resume/commit/33103536a), [64ac3ff32](https://github.com/amruthpillai/reactive-resume/commit/64ac3ff32) -- Fixed split-row right-side content promotion behavior to preserve layout consistency in exports. [#3039](https://github.com/amruthpillai/reactive-resume/pull/3039) -- Improved rich text and section data handling by filtering invalid or empty items and tightening schema validation for safer rendering. [334ea48bc](https://github.com/amruthpillai/reactive-resume/commit/334ea48bc), [0713cf20d](https://github.com/amruthpillai/reactive-resume/commit/0713cf20d), [4ebe9e5a6](https://github.com/amruthpillai/reactive-resume/commit/4ebe9e5a6) +- Increased header name line height in PDF templates to prevent descender clipping. [#3050](https://github.com/reactive-resume/reactive-resume/pull/3050) +- Improved CJK rendering reliability across PDF output, including better handling of hyphenation callbacks and italic fallback behavior. [62b0a1d53](https://github.com/reactive-resume/reactive-resume/commit/62b0a1d53), [83a407bc1](https://github.com/reactive-resume/reactive-resume/commit/83a407bc1), [33103536a](https://github.com/reactive-resume/reactive-resume/commit/33103536a), [64ac3ff32](https://github.com/reactive-resume/reactive-resume/commit/64ac3ff32) +- Fixed split-row right-side content promotion behavior to preserve layout consistency in exports. [#3039](https://github.com/reactive-resume/reactive-resume/pull/3039) +- Improved rich text and section data handling by filtering invalid or empty items and tightening schema validation for safer rendering. [334ea48bc](https://github.com/reactive-resume/reactive-resume/commit/334ea48bc), [0713cf20d](https://github.com/reactive-resume/reactive-resume/commit/0713cf20d), [4ebe9e5a6](https://github.com/reactive-resume/reactive-resume/commit/4ebe9e5a6) ## Quality, Docs & Maintenance -- Expanded automated coverage significantly, including monorepo-wide unit/component tests and an additional ~500 tests across core packages. [6a01207b6](https://github.com/amruthpillai/reactive-resume/commit/6a01207b6), [#3038](https://github.com/amruthpillai/reactive-resume/pull/3038) -- Migrated the test environment from jsdom to happy-dom for faster and more stable test runs. [7a60a42a0](https://github.com/amruthpillai/reactive-resume/commit/7a60a42a0) -- Updated documentation and defaults, including AGENTS guidance and export format notes. [#3054](https://github.com/amruthpillai/reactive-resume/pull/3054), [71aadbd73](https://github.com/amruthpillai/reactive-resume/commit/71aadbd73), [a93e7bd19](https://github.com/amruthpillai/reactive-resume/pull/3024) -- Synced translation catalogs from Crowdin and added template-specific translation updates for Scizor. [#3053](https://github.com/amruthpillai/reactive-resume/pull/3053), [e574d4005](https://github.com/amruthpillai/reactive-resume/pull/3037), [#3026](https://github.com/amruthpillai/reactive-resume/pull/3026), [#3023](https://github.com/amruthpillai/reactive-resume/pull/3023), [c5787fe15](https://github.com/amruthpillai/reactive-resume/commit/c5787fe15) -- Updated dependencies and repository cleanup tasks, including PostCSS refresh and Knip fixes. [e35ff8391](https://github.com/amruthpillai/reactive-resume/commit/e35ff8391), [3cd228bd8](https://github.com/amruthpillai/reactive-resume/commit/3cd228bd8), [978cbaf1f](https://github.com/amruthpillai/reactive-resume/commit/978cbaf1f), [0daf868cd](https://github.com/amruthpillai/reactive-resume/commit/0daf868cd) +- Expanded automated coverage significantly, including monorepo-wide unit/component tests and an additional ~500 tests across core packages. [6a01207b6](https://github.com/reactive-resume/reactive-resume/commit/6a01207b6), [#3038](https://github.com/reactive-resume/reactive-resume/pull/3038) +- Migrated the test environment from jsdom to happy-dom for faster and more stable test runs. [7a60a42a0](https://github.com/reactive-resume/reactive-resume/commit/7a60a42a0) +- Updated documentation and defaults, including AGENTS guidance and export format notes. [#3054](https://github.com/reactive-resume/reactive-resume/pull/3054), [71aadbd73](https://github.com/reactive-resume/reactive-resume/commit/71aadbd73), [a93e7bd19](https://github.com/reactive-resume/reactive-resume/pull/3024) +- Synced translation catalogs from Crowdin and added template-specific translation updates for Scizor. [#3053](https://github.com/reactive-resume/reactive-resume/pull/3053), [e574d4005](https://github.com/reactive-resume/reactive-resume/pull/3037), [#3026](https://github.com/reactive-resume/reactive-resume/pull/3026), [#3023](https://github.com/reactive-resume/reactive-resume/pull/3023), [c5787fe15](https://github.com/reactive-resume/reactive-resume/commit/c5787fe15) +- Updated dependencies and repository cleanup tasks, including PostCSS refresh and Knip fixes. [e35ff8391](https://github.com/reactive-resume/reactive-resume/commit/e35ff8391), [3cd228bd8](https://github.com/reactive-resume/reactive-resume/commit/3cd228bd8), [978cbaf1f](https://github.com/reactive-resume/reactive-resume/commit/978cbaf1f), [0daf868cd](https://github.com/reactive-resume/reactive-resume/commit/0daf868cd) -**Full Changelog**: [v5.1.2...v5.1.3](https://github.com/amruthpillai/reactive-resume/compare/v5.1.2...v5.1.3) +**Full Changelog**: [v5.1.2...v5.1.3](https://github.com/reactive-resume/reactive-resume/compare/v5.1.2...v5.1.3) @@ -772,70 +772,70 @@ rss: true ## Highlights -- **AI Resume Assistant.** Added a chat window inside the resume builder for targeted resume edits. The assistant can draft JSON Patch proposals, show before/after previews, and lets you accept or reject each change before anything is applied. [#3022](https://github.com/amruthpillai/reactive-resume/pull/3022) -- **Better CJK PDF output.** Added automatic CJK fallback font registration so Chinese, Japanese, and Korean text renders correctly in both the live PDF preview and exported PDFs. [#3016](https://github.com/amruthpillai/reactive-resume/pull/3016) +- **AI Resume Assistant.** Added a chat window inside the resume builder for targeted resume edits. The assistant can draft JSON Patch proposals, show before/after previews, and lets you accept or reject each change before anything is applied. [#3022](https://github.com/reactive-resume/reactive-resume/pull/3022) +- **Better CJK PDF output.** Added automatic CJK fallback font registration so Chinese, Japanese, and Korean text renders correctly in both the live PDF preview and exported PDFs. [#3016](https://github.com/reactive-resume/reactive-resume/pull/3016) ## Resume Builder & Exports -- Added a builder dock shortcut for the AI assistant, with a draggable and resizable desktop window plus a mobile sheet layout. [#3022](https://github.com/amruthpillai/reactive-resume/pull/3022) -- Added review controls for AI-generated proposals, including proposal queues, raw JSON Patch inspection, accept/reject actions, and stale-proposal handling when the resume changes. [#3022](https://github.com/amruthpillai/reactive-resume/pull/3022) -- Fixed rich text PDF rendering when text blocks contain top-level inline content around lists or paragraphs. [42e83cc6](https://github.com/amruthpillai/reactive-resume/commit/42e83cc6) -- Kept Latin-only PDF output unchanged while applying fallback fonts only when CJK glyphs are needed. [#3016](https://github.com/amruthpillai/reactive-resume/pull/3016) +- Added a builder dock shortcut for the AI assistant, with a draggable and resizable desktop window plus a mobile sheet layout. [#3022](https://github.com/reactive-resume/reactive-resume/pull/3022) +- Added review controls for AI-generated proposals, including proposal queues, raw JSON Patch inspection, accept/reject actions, and stale-proposal handling when the resume changes. [#3022](https://github.com/reactive-resume/reactive-resume/pull/3022) +- Fixed rich text PDF rendering when text blocks contain top-level inline content around lists or paragraphs. [42e83cc6](https://github.com/reactive-resume/reactive-resume/commit/42e83cc6) +- Kept Latin-only PDF output unchanged while applying fallback fonts only when CJK glyphs are needed. [#3016](https://github.com/reactive-resume/reactive-resume/pull/3016) ## Sharing & Imports -- Fixed public resume URLs returning a server error when the owner-only dashboard title was redacted to an empty string for viewers. [#3012](https://github.com/amruthpillai/reactive-resume/pull/3012) -- Improved v4 JSON imports so custom section content, hidden items, and skill/language levels migrate correctly into v5 resumes. [#3013](https://github.com/amruthpillai/reactive-resume/pull/3013) +- Fixed public resume URLs returning a server error when the owner-only dashboard title was redacted to an empty string for viewers. [#3012](https://github.com/reactive-resume/reactive-resume/pull/3012) +- Improved v4 JSON imports so custom section content, hidden items, and skill/language levels migrate correctly into v5 resumes. [#3013](https://github.com/reactive-resume/reactive-resume/pull/3013) ## Self-Hosting -- Fixed Docker local-storage health checks by resolving the data directory through `LOCAL_STORAGE_PATH` instead of relying on the runtime working directory. [#3004](https://github.com/amruthpillai/reactive-resume/pull/3004) -- Added startup validation for the local storage directory so misconfigured volume permissions fail early with a clearer error. [#3004](https://github.com/amruthpillai/reactive-resume/pull/3004) -- Updated `.env.example`, the Dockerfile, Compose configuration, and Docker self-hosting docs for the new local storage path behavior. [#3004](https://github.com/amruthpillai/reactive-resume/pull/3004) +- Fixed Docker local-storage health checks by resolving the data directory through `LOCAL_STORAGE_PATH` instead of relying on the runtime working directory. [#3004](https://github.com/reactive-resume/reactive-resume/pull/3004) +- Added startup validation for the local storage directory so misconfigured volume permissions fail early with a clearer error. [#3004](https://github.com/reactive-resume/reactive-resume/pull/3004) +- Updated `.env.example`, the Dockerfile, Compose configuration, and Docker self-hosting docs for the new local storage path behavior. [#3004](https://github.com/reactive-resume/reactive-resume/pull/3004) ## Maintenance & Localization -- Synced translation catalogs from Crowdin. [#3005](https://github.com/amruthpillai/reactive-resume/pull/3005) +- Synced translation catalogs from Crowdin. [#3005](https://github.com/reactive-resume/reactive-resume/pull/3005) - Updated dependencies and lockfile entries needed for the AI assistant, PDF rich text normalization, and related test coverage. -**Full Changelog**: [v5.1.1...v5.1.2](https://github.com/amruthpillai/reactive-resume/compare/v5.1.1...v5.1.2) +**Full Changelog**: [v5.1.1...v5.1.2](https://github.com/reactive-resume/reactive-resume/compare/v5.1.1...v5.1.2) ## Highlights -- **Free-form resume pages.** Added a new **Free-form** page format for resumes that should keep A4 width while allowing content to flow beyond a fixed page height. This is useful for long-form web-style resumes while preserving predictable export sizing. [#2991](https://github.com/amruthpillai/reactive-resume/issues/2991) -- **PDF downloads through the API.** Added an authenticated `GET /resumes/{id}/pdf` endpoint so API clients can generate and download a resume PDF directly. The OpenAPI spec has been updated with the new route. [5042ad9d](https://github.com/amruthpillai/reactive-resume/commit/5042ad9d) +- **Free-form resume pages.** Added a new **Free-form** page format for resumes that should keep A4 width while allowing content to flow beyond a fixed page height. This is useful for long-form web-style resumes while preserving predictable export sizing. [#2991](https://github.com/reactive-resume/reactive-resume/issues/2991) +- **PDF downloads through the API.** Added an authenticated `GET /resumes/{id}/pdf` endpoint so API clients can generate and download a resume PDF directly. The OpenAPI spec has been updated with the new route. [5042ad9d](https://github.com/reactive-resume/reactive-resume/commit/5042ad9d) ## Resume Builder & Exports -- Fixed nested lists in PDF rendering so rich text with sub-lists exports correctly. [#2993](https://github.com/amruthpillai/reactive-resume/issues/2993) -- Fixed inline item links in exported PDFs and made resume links consistently underlined. [#2978](https://github.com/amruthpillai/reactive-resume/issues/2978) -- Added italic font registration for PDF generation and falls back to **IBM Plex Serif** when a selected font is unavailable. [6d54ffa8](https://github.com/amruthpillai/reactive-resume/commit/6d54ffa8), [4c771307](https://github.com/amruthpillai/reactive-resume/commit/4c771307) -- Improved header name line height across templates for cleaner PDF output. [#2976](https://github.com/amruthpillai/reactive-resume/issues/2976) -- Added prose styles to the rich text editor so formatted content is easier to read while editing. [#2984](https://github.com/amruthpillai/reactive-resume/issues/2984) +- Fixed nested lists in PDF rendering so rich text with sub-lists exports correctly. [#2993](https://github.com/reactive-resume/reactive-resume/issues/2993) +- Fixed inline item links in exported PDFs and made resume links consistently underlined. [#2978](https://github.com/reactive-resume/reactive-resume/issues/2978) +- Added italic font registration for PDF generation and falls back to **IBM Plex Serif** when a selected font is unavailable. [6d54ffa8](https://github.com/reactive-resume/reactive-resume/commit/6d54ffa8), [4c771307](https://github.com/reactive-resume/reactive-resume/commit/4c771307) +- Improved header name line height across templates for cleaner PDF output. [#2976](https://github.com/reactive-resume/reactive-resume/issues/2976) +- Added prose styles to the rich text editor so formatted content is easier to read while editing. [#2984](https://github.com/reactive-resume/reactive-resume/issues/2984) - Added a preview control to toggle page stacking and adjusted the default preview zoom for a better builder canvas experience. ## Fixes -- Fixed a runtime error when enabling two-factor authentication. [#2981](https://github.com/amruthpillai/reactive-resume/issues/2981) -- Fixed excessive re-renders in the Experience section when editing role progression. [#2983](https://github.com/amruthpillai/reactive-resume/issues/2983) -- Removed route preloading to avoid unwanted route work while navigating the app. [#2949](https://github.com/amruthpillai/reactive-resume/issues/2949) -- Relaxed resume data parsing to accept compatible objects with additional fields. [#2793](https://github.com/amruthpillai/reactive-resume/issues/2793) +- Fixed a runtime error when enabling two-factor authentication. [#2981](https://github.com/reactive-resume/reactive-resume/issues/2981) +- Fixed excessive re-renders in the Experience section when editing role progression. [#2983](https://github.com/reactive-resume/reactive-resume/issues/2983) +- Removed route preloading to avoid unwanted route work while navigating the app. [#2949](https://github.com/reactive-resume/reactive-resume/issues/2949) +- Relaxed resume data parsing to accept compatible objects with additional fields. [#2793](https://github.com/reactive-resume/reactive-resume/issues/2793) - Updated dialog layout behavior so tall dialogs scroll correctly on smaller screens. - Updated the sample resume picture URL to point to a valid bundled image. ## Self-Hosting -- Automatically loads `.env` from the workspace root for server-side code, improving local and self-hosted configuration behavior. [#2987](https://github.com/amruthpillai/reactive-resume/issues/2987) -- Restored the local storage path to `/app/data` in the official container image and clarified the Docker storage documentation. [#2990](https://github.com/amruthpillai/reactive-resume/issues/2990) +- Automatically loads `.env` from the workspace root for server-side code, improving local and self-hosted configuration behavior. [#2987](https://github.com/reactive-resume/reactive-resume/issues/2987) +- Restored the local storage path to `/app/data` in the official container image and clarified the Docker storage documentation. [#2990](https://github.com/reactive-resume/reactive-resume/issues/2990) ## Maintenance & Localization -- Synced translation catalogs from Crowdin. [#2995](https://github.com/amruthpillai/reactive-resume/pull/2995), [#2997](https://github.com/amruthpillai/reactive-resume/pull/2997) +- Synced translation catalogs from Crowdin. [#2995](https://github.com/reactive-resume/reactive-resume/pull/2995), [#2997](https://github.com/reactive-resume/reactive-resume/pull/2997) - Removed unused dependencies, stale generated cache artifacts, and obsolete tests from the repository. -**Full Changelog**: [v5.1.0...v5.1.1](https://github.com/amruthpillai/reactive-resume/compare/v5.1.0...v5.1.1) +**Full Changelog**: [v5.1.0...v5.1.1](https://github.com/reactive-resume/reactive-resume/compare/v5.1.0...v5.1.1) @@ -882,57 +882,57 @@ rss: true - Tightened the boundary between server-only and client-only code: server modules (database, storage, auth) are lazy-imported so they no longer leak into the client bundle. - Reverse-proxy timeout guidance in the nginx example has been simplified now that no long-running PDF generation request flows through the proxy. -**Full Changelog**: [v5.0.20...v5.1.0](https://github.com/amruthpillai/reactive-resume/compare/v5.0.20...v5.1.0) +**Full Changelog**: [v5.0.20...v5.1.0](https://github.com/reactive-resume/reactive-resume/compare/v5.0.20...v5.1.0) ## Features & Improvements -- Added the new **Meowth** resume template (compact ATS-friendly layout with an inline three-column entry header), thanks to [@JamesGoslings](https://github.com/JamesGoslings). [#2923](https://github.com/amruthpillai/reactive-resume/pull/2923) -- Added support for custom icon colors on section items, thanks to [@Ruzenie](https://github.com/Ruzenie). [#2928](https://github.com/amruthpillai/reactive-resume/pull/2928) -- Improved account-related email UX with better templates for password reset and email verification. [b87f2007](https://github.com/amruthpillai/reactive-resume/commit/b87f2007) -- Consolidated separate settings pages into a single **Integrations** page. [5d8126d4](https://github.com/amruthpillai/reactive-resume/commit/5d8126d4) +- Added the new **Meowth** resume template (compact ATS-friendly layout with an inline three-column entry header), thanks to [@JamesGoslings](https://github.com/JamesGoslings). [#2923](https://github.com/reactive-resume/reactive-resume/pull/2923) +- Added support for custom icon colors on section items, thanks to [@Ruzenie](https://github.com/Ruzenie). [#2928](https://github.com/reactive-resume/reactive-resume/pull/2928) +- Improved account-related email UX with better templates for password reset and email verification. [b87f2007](https://github.com/reactive-resume/reactive-resume/commit/b87f2007) +- Consolidated separate settings pages into a single **Integrations** page. [5d8126d4](https://github.com/reactive-resume/reactive-resume/commit/5d8126d4) ## Fixes -- Added a targeted Chinese localization fix for the `Skills` section title (`zh-CN`). [#2931](https://github.com/amruthpillai/reactive-resume/pull/2931) -- Allowed MCP localhost loopback only for local MCP clients, improving local integration behavior while keeping external access restrictions intact. [623ca5c6](https://github.com/amruthpillai/reactive-resume/commit/623ca5c6) +- Added a targeted Chinese localization fix for the `Skills` section title (`zh-CN`). [#2931](https://github.com/reactive-resume/reactive-resume/pull/2931) +- Allowed MCP localhost loopback only for local MCP clients, improving local integration behavior while keeping external access restrictions intact. [623ca5c6](https://github.com/reactive-resume/reactive-resume/commit/623ca5c6) ## Maintenance & Localization -- Updated dependencies and lockfile, including cleanup of unused exports (Knip). [e1bccbcc](https://github.com/amruthpillai/reactive-resume/commit/e1bccbcc) -- Synced translation catalogs from Crowdin. [#2922](https://github.com/amruthpillai/reactive-resume/pull/2922), [#2925](https://github.com/amruthpillai/reactive-resume/pull/2925), [#2926](https://github.com/amruthpillai/reactive-resume/pull/2926), [#2932](https://github.com/amruthpillai/reactive-resume/pull/2932), [#2934](https://github.com/amruthpillai/reactive-resume/pull/2934), [#2935](https://github.com/amruthpillai/reactive-resume/pull/2935) -- Updated docs to list **Meowth** alongside existing templates. [#2929](https://github.com/amruthpillai/reactive-resume/pull/2929) +- Updated dependencies and lockfile, including cleanup of unused exports (Knip). [e1bccbcc](https://github.com/reactive-resume/reactive-resume/commit/e1bccbcc) +- Synced translation catalogs from Crowdin. [#2922](https://github.com/reactive-resume/reactive-resume/pull/2922), [#2925](https://github.com/reactive-resume/reactive-resume/pull/2925), [#2926](https://github.com/reactive-resume/reactive-resume/pull/2926), [#2932](https://github.com/reactive-resume/reactive-resume/pull/2932), [#2934](https://github.com/reactive-resume/reactive-resume/pull/2934), [#2935](https://github.com/reactive-resume/reactive-resume/pull/2935) +- Updated docs to list **Meowth** alongside existing templates. [#2929](https://github.com/reactive-resume/reactive-resume/pull/2929) -**Full Changelog**: [v5.0.19...v5.0.20](https://github.com/amruthpillai/reactive-resume/compare/v5.0.19...v5.0.20) +**Full Changelog**: [v5.0.19...v5.0.20](https://github.com/reactive-resume/reactive-resume/compare/v5.0.19...v5.0.20) ## Highlights -- Added **OpenRouter** as an AI provider, thanks to [@iagodemacedo](https://github.com/iagodemacedo). [#2906](https://github.com/amruthpillai/reactive-resume/pull/2906) -- Added Chinese font options, thanks to [@Platinum1154](https://github.com/Platinum1154). [#2905](https://github.com/amruthpillai/reactive-resume/pull/2905) -- Added text color support to the rich text editor, including DOCX export handling for colored text, thanks to [@Platinum1154](https://github.com/Platinum1154). [#2903](https://github.com/amruthpillai/reactive-resume/pull/2903) -- Fixed MCP tool names for Claude Desktop compatibility. [#2885](https://github.com/amruthpillai/reactive-resume/pull/2885) -- Improved Docker-based local development support and refreshed self-hosting setup guidance. [849aad64](https://github.com/amruthpillai/reactive-resume/commit/849aad64), [c0387298](https://github.com/amruthpillai/reactive-resume/commit/c0387298) +- Added **OpenRouter** as an AI provider, thanks to [@iagodemacedo](https://github.com/iagodemacedo). [#2906](https://github.com/reactive-resume/reactive-resume/pull/2906) +- Added Chinese font options, thanks to [@Platinum1154](https://github.com/Platinum1154). [#2905](https://github.com/reactive-resume/reactive-resume/pull/2905) +- Added text color support to the rich text editor, including DOCX export handling for colored text, thanks to [@Platinum1154](https://github.com/Platinum1154). [#2903](https://github.com/reactive-resume/reactive-resume/pull/2903) +- Fixed MCP tool names for Claude Desktop compatibility. [#2885](https://github.com/reactive-resume/reactive-resume/pull/2885) +- Improved Docker-based local development support and refreshed self-hosting setup guidance. [849aad64](https://github.com/reactive-resume/reactive-resume/commit/849aad64), [c0387298](https://github.com/reactive-resume/reactive-resume/commit/c0387298) ## Fixes & Security - Thank you to [@shaxbozaka](https://github.com/shaxbozaka) for running a security audit on Reactive Resume and helping make the app more secure. -- Hardened auth, OAuth, AI URL validation, printer/export endpoints, resume access controls, Browserless configuration, and public route exposure. [a42dbcd4](https://github.com/amruthpillai/reactive-resume/commit/a42dbcd4) +- Hardened auth, OAuth, AI URL validation, printer/export endpoints, resume access controls, Browserless configuration, and public route exposure. [a42dbcd4](https://github.com/reactive-resume/reactive-resume/commit/a42dbcd4) - Removed the public RPC surface for the printer-only resume fetch endpoint by moving it behind a server function, further shrinking the attack surface for `getByIdForPrinter`, thanks to [@shaxbozaka](https://github.com/shaxbozaka). -- Corrected Computer Modern Sans italic font file mappings, thanks to [@russellbrenner](https://github.com/russellbrenner). [#2881](https://github.com/amruthpillai/reactive-resume/pull/2881) -- Improved email handling and user lookup in OAuth configuration, thanks to [@VedantBhawsar](https://github.com/VedantBhawsar). [#2874](https://github.com/amruthpillai/reactive-resume/pull/2874) -- Aligned role period text in experience items, thanks to [@JamesGoslings](https://github.com/JamesGoslings). [#2908](https://github.com/amruthpillai/reactive-resume/pull/2908) -- Reduced resume preview wheel zoom sensitivity, thanks to [@GoldenSection0618](https://github.com/GoldenSection0618). [#2911](https://github.com/amruthpillai/reactive-resume/pull/2911) -- Prevented orphaned section headings at page breaks, thanks to [@5queezer](https://github.com/5queezer). [#2851](https://github.com/amruthpillai/reactive-resume/pull/2851) -- Added top margin handling for subsequent PDF pages, based on feedback from [@trigger-xyz](https://github.com/trigger-xyz). [bbc38d2f](https://github.com/amruthpillai/reactive-resume/commit/bbc38d2f) +- Corrected Computer Modern Sans italic font file mappings, thanks to [@russellbrenner](https://github.com/russellbrenner). [#2881](https://github.com/reactive-resume/reactive-resume/pull/2881) +- Improved email handling and user lookup in OAuth configuration, thanks to [@VedantBhawsar](https://github.com/VedantBhawsar). [#2874](https://github.com/reactive-resume/reactive-resume/pull/2874) +- Aligned role period text in experience items, thanks to [@JamesGoslings](https://github.com/JamesGoslings). [#2908](https://github.com/reactive-resume/reactive-resume/pull/2908) +- Reduced resume preview wheel zoom sensitivity, thanks to [@GoldenSection0618](https://github.com/GoldenSection0618). [#2911](https://github.com/reactive-resume/reactive-resume/pull/2911) +- Prevented orphaned section headings at page breaks, thanks to [@5queezer](https://github.com/5queezer). [#2851](https://github.com/reactive-resume/reactive-resume/pull/2851) +- Added top margin handling for subsequent PDF pages, based on feedback from [@trigger-xyz](https://github.com/trigger-xyz). [bbc38d2f](https://github.com/reactive-resume/reactive-resume/commit/bbc38d2f) ## Maintenance & Localization -- Updated dependencies and lockfile, including security-focused package pins and Vite+ version pins. [c6e8df0a](https://github.com/amruthpillai/reactive-resume/commit/c6e8df0a), [847d69b6](https://github.com/amruthpillai/reactive-resume/commit/847d69b6), [9b3916d4](https://github.com/amruthpillai/reactive-resume/commit/9b3916d4) -- Added `SECURITY.md`. [9e1e593d](https://github.com/amruthpillai/reactive-resume/commit/9e1e593d) -- Added focused tests for auth, printer/export, URL validation, form edge cases, rich text DOCX output, font handling, and CSS sanitization hardening. [d0af9f4b](https://github.com/amruthpillai/reactive-resume/commit/d0af9f4b) -- Synced translation catalogs from Crowdin and moved syncing to GitHub Actions. [#2886](https://github.com/amruthpillai/reactive-resume/pull/2886), [#2918](https://github.com/amruthpillai/reactive-resume/pull/2918) +- Updated dependencies and lockfile, including security-focused package pins and Vite+ version pins. [c6e8df0a](https://github.com/reactive-resume/reactive-resume/commit/c6e8df0a), [847d69b6](https://github.com/reactive-resume/reactive-resume/commit/847d69b6), [9b3916d4](https://github.com/reactive-resume/reactive-resume/commit/9b3916d4) +- Added `SECURITY.md`. [9e1e593d](https://github.com/reactive-resume/reactive-resume/commit/9e1e593d) +- Added focused tests for auth, printer/export, URL validation, form edge cases, rich text DOCX output, font handling, and CSS sanitization hardening. [d0af9f4b](https://github.com/reactive-resume/reactive-resume/commit/d0af9f4b) +- Synced translation catalogs from Crowdin and moved syncing to GitHub Actions. [#2886](https://github.com/reactive-resume/reactive-resume/pull/2886), [#2918](https://github.com/reactive-resume/reactive-resume/pull/2918) ## New Contributors - [@russellbrenner](https://github.com/russellbrenner), [@VedantBhawsar](https://github.com/VedantBhawsar), [@JamesGoslings](https://github.com/JamesGoslings), [@GoldenSection0618](https://github.com/GoldenSection0618), [@iagodemacedo](https://github.com/iagodemacedo), and [@Platinum1154](https://github.com/Platinum1154) -**Full Changelog**: [v5.0.17...v5.0.19](https://github.com/amruthpillai/reactive-resume/compare/v5.0.17...v5.0.19) +**Full Changelog**: [v5.0.17...v5.0.19](https://github.com/reactive-resume/reactive-resume/compare/v5.0.17...v5.0.19) @@ -951,22 +951,22 @@ rss: true - Improved the **MCP server** experience: updated tools, resources, and prompts; added an MCP server card at `/.well-known/mcp/server-card.json` for compatible clients; refreshed the **Using the MCP server** guide. ## Fixes -- Fixed [#2865](https://github.com/amruthpillai/reactive-resume/issues/2865), incorrect spacing between resume section items in shared layouts. -- Fixed [#2868](https://github.com/amruthpillai/reactive-resume/issues/2868) affecting resume item presentation and linked titles in shared item components. +- Fixed [#2865](https://github.com/reactive-resume/reactive-resume/issues/2865), incorrect spacing between resume section items in shared layouts. +- Fixed [#2868](https://github.com/reactive-resume/reactive-resume/issues/2868) affecting resume item presentation and linked titles in shared item components. ## Maintenance & CI - Downgraded the Cosign installer action to v3 in the Docker build workflow for more reliable image signing. -- Synced translation catalogs from Crowdin. [#2864](https://github.com/amruthpillai/reactive-resume/pull/2864) +- Synced translation catalogs from Crowdin. [#2864](https://github.com/reactive-resume/reactive-resume/pull/2864) - Dependency and lockfile updates (including changes bundled with MCP and analysis work). ## Features & Improvements - Updated shared resume item layouts (Experience, Education, Awards, Certifications, Publications, References, Volunteer) for better alignment and spacing consistency. -- Generated printer pages now set a meaningful document title from the resume owner's name (` - Resume`) for cleaner PDF metadata and tab titles. [#2863](https://github.com/amruthpillai/reactive-resume/pull/2863) +- Generated printer pages now set a meaningful document title from the resume owner's name (` - Resume`) for cleaner PDF metadata and tab titles. [#2863](https://github.com/reactive-resume/reactive-resume/pull/2863) ## Fixes -- Fixed [#2733](https://github.com/amruthpillai/reactive-resume/issues/2733), where date ranges could appear on a separate line unexpectedly in resume items. [#2862](https://github.com/amruthpillai/reactive-resume/pull/2862) +- Fixed [#2733](https://github.com/reactive-resume/reactive-resume/issues/2733), where date ranges could appear on a separate line unexpectedly in resume items. [#2862](https://github.com/reactive-resume/reactive-resume/pull/2862) - Adjusted Experience section form field ordering/labels so `Location`, `Position`, and `Period` are mapped and displayed correctly. ## Maintenance & Localization @@ -1007,24 +1007,24 @@ rss: true ## Features -- Implemented OAuth 2.1 support for MCP authentication, thanks to @5queezer. [#2829](https://github.com/amruthpillai/reactive-resume/pull/2829) -- Migrated from using Biome to Oxlint/Oxfmt for linting and formatting, with a new autofix CI workflow. [#2822](https://github.com/amruthpillai/reactive-resume/pull/2822) +- Implemented OAuth 2.1 support for MCP authentication, thanks to @5queezer. [#2829](https://github.com/reactive-resume/reactive-resume/pull/2829) +- Migrated from using Biome to Oxlint/Oxfmt for linting and formatting, with a new autofix CI workflow. [#2822](https://github.com/reactive-resume/reactive-resume/pull/2822) ## Fixes -- Fixed an issue with the slider component for "Sidebar Width" in the resume builder. [#2830](https://github.com/amruthpillai/reactive-resume/issues/2830) +- Fixed an issue with the slider component for "Sidebar Width" in the resume builder. [#2830](https://github.com/reactive-resume/reactive-resume/issues/2830) ## Features & Improvements -- Added **Job Listings with AI-Powered Resume Tailoring**, a major new feature that integrates job search (via JSearch API) directly into the dashboard with AI-driven resume tailoring to match job descriptions. [#2788](https://github.com/amruthpillai/reactive-resume/pull/2788) +- Added **Job Listings with AI-Powered Resume Tailoring**, a major new feature that integrates job search (via JSearch API) directly into the dashboard with AI-driven resume tailoring to match job descriptions. [#2788](https://github.com/reactive-resume/reactive-resume/pull/2788) - Search for jobs with filters for location (city, state, country), employment type, remote status, and more. - View detailed job listings in a slide-out panel with apply links and tags. - Tailor your resume to a specific job posting using AI — rewrites skills, experience, and references for optimal fit. - Per-user API quota management with usage tracking in settings. - Pagination with 30 results per page. -- Added **DOCX resume export** — generate and download tailored resumes as Word documents. [#2788](https://github.com/amruthpillai/reactive-resume/pull/2788) +- Added **DOCX resume export** — generate and download tailored resumes as Word documents. [#2788](https://github.com/reactive-resume/reactive-resume/pull/2788) - Migrated the entire project toolchain to **Vite+** (`vp` CLI), unifying Vite, Vitest, Oxlint, and Oxfmt under a single developer experience. -- Migrated from **Biome to Oxlint/Oxfmt** for linting and formatting, with a new autofix CI workflow. [#2822](https://github.com/amruthpillai/reactive-resume/pull/2822) +- Migrated from **Biome to Oxlint/Oxfmt** for linting and formatting, with a new autofix CI workflow. [#2822](https://github.com/reactive-resume/reactive-resume/pull/2822) - Added **Slovenian** locale support. - Added a new `Progress` UI component. @@ -1038,8 +1038,8 @@ rss: true ## Maintenance & Dependencies - Updated dependencies across the board, including `@typescript/native-preview`, `vite-plus`, and others. - Added database migrations for missing indexes. -- Synced translations from Crowdin. [#2820](https://github.com/amruthpillai/reactive-resume/pull/2820), [#2824](https://github.com/amruthpillai/reactive-resume/pull/2824) -- Updated French translation for 'Volunteer' to 'Bénévolat'. [#2823](https://github.com/amruthpillai/reactive-resume/pull/2823) +- Synced translations from Crowdin. [#2820](https://github.com/reactive-resume/reactive-resume/pull/2820), [#2824](https://github.com/reactive-resume/reactive-resume/pull/2824) +- Updated French translation for 'Volunteer' to 'Bénévolat'. [#2823](https://github.com/reactive-resume/reactive-resume/pull/2823) - Multiple translation and language updates across all locales. ## New Contributors @@ -1077,15 +1077,15 @@ rss: true ## Fixes -- Show section titles for summary-type custom sections in the resume builder. [#2744](https://github.com/amruthpillai/reactive-resume/pull/2744) -- Prevent browser password managers and Edge autofill/save prompts from appearing on AI settings API key fields. [#2719](https://github.com/amruthpillai/reactive-resume/pull/2719) +- Show section titles for summary-type custom sections in the resume builder. [#2744](https://github.com/reactive-resume/reactive-resume/pull/2744) +- Prevent browser password managers and Edge autofill/save prompts from appearing on AI settings API key fields. [#2719](https://github.com/reactive-resume/reactive-resume/pull/2719) - Replace deprecated Tailwind CSS classes: use `inset-s-*`/`inset-e-*` instead of `start-*`/`end-*`. -- Fix PDF downloader to work correctly in offline mode. [#2743](https://github.com/amruthpillai/reactive-resume/pull/2743) -- Make bold formatting visible for `` in the resume rich text editor (uses plain `font-weight: bold` fallback if the CSS variable is unset). Fixes [#2730](https://github.com/amruthpillai/reactive-resume/issues/2730) -- Prevent credentials sign-in from dropping `session_token` Set-Cookie, improves login reliability. [#2718](https://github.com/amruthpillai/reactive-resume/pull/2718) -- Remove redundant `resume-` prefix from download filename; add spacing between pages in shared view. [#2709](https://github.com/amruthpillai/reactive-resume/pull/2709) -- Normalize autocomplete tokens for login and register forms. [#2714](https://github.com/amruthpillai/reactive-resume/pull/2714) -- Fix improper chips reordering and update dependency/translations. [#2711](https://github.com/amruthpillai/reactive-resume/issues/2711) +- Fix PDF downloader to work correctly in offline mode. [#2743](https://github.com/reactive-resume/reactive-resume/pull/2743) +- Make bold formatting visible for `` in the resume rich text editor (uses plain `font-weight: bold` fallback if the CSS variable is unset). Fixes [#2730](https://github.com/reactive-resume/reactive-resume/issues/2730) +- Prevent credentials sign-in from dropping `session_token` Set-Cookie, improves login reliability. [#2718](https://github.com/reactive-resume/reactive-resume/pull/2718) +- Remove redundant `resume-` prefix from download filename; add spacing between pages in shared view. [#2709](https://github.com/reactive-resume/reactive-resume/pull/2709) +- Normalize autocomplete tokens for login and register forms. [#2714](https://github.com/reactive-resume/reactive-resume/pull/2714) +- Fix improper chips reordering and update dependency/translations. [#2711](https://github.com/reactive-resume/reactive-resume/issues/2711) - Fix clipping of heading in Lapras resume template. - Remove error-causing plugins in oRPC integration. - Remove duplicate database indexes; add index for `created_at` on user and resume tables. @@ -1134,8 +1134,8 @@ rss: true ## Features & Improvements -- Implemented Atomic Resume Patching API for fine-grained, partial updates to resumes via a new PATCH endpoint. [#2692](https://github.com/amruthpillai/reactive-resume/pull/2692) -- API endpoint `PUT /resume/{id}` now returns the updated resume object rather than void, with explicit DTOs for input/output. [#2688](https://github.com/amruthpillai/reactive-resume/pull/2688) +- Implemented Atomic Resume Patching API for fine-grained, partial updates to resumes via a new PATCH endpoint. [#2692](https://github.com/reactive-resume/reactive-resume/pull/2692) +- API endpoint `PUT /resume/{id}` now returns the updated resume object rather than void, with explicit DTOs for input/output. [#2688](https://github.com/reactive-resume/reactive-resume/pull/2688) - Added error logging for API server errors (server-side only) to improve debugging and reliability. - Refactored and cleaned up imports/exports for clarity and maintainability. - Added `.devcontainer` configuration for improved contributor development environment. @@ -1155,18 +1155,18 @@ rss: true - Added `useFormBlocker` hook to prevent dialogs from being closed with unsaved form changes. ## Fixes -- Fixed keyword spacing issue in the interests section. [#2631](https://github.com/amruthpillai/reactive-resume/pull/2631) +- Fixed keyword spacing issue in the interests section. [#2631](https://github.com/reactive-resume/reactive-resume/pull/2631) - Fixed AI connection test and improved error reporting for AI provider issues. ## Features & Improvements - Brought back Undo/Redo functionality in the resume builder for an improved editing experience. -- Sidebar builder now arranges dynamically based on the section type in each template. [#2564](https://github.com/amruthpillai/reactive-resume/pull/2603) +- Sidebar builder now arranges dynamically based on the section type in each template. [#2564](https://github.com/reactive-resume/reactive-resume/pull/2603) - Added PWA (Progressive Web App) support and updated PDF example file links in documentation. ## Fixes -- Removed extra spacing when proficiency is empty. [#2607](https://github.com/amruthpillai/reactive-resume/pull/2626) +- Removed extra spacing when proficiency is empty. [#2607](https://github.com/reactive-resume/reactive-resume/pull/2626) - Fixed Pikachu template: header/page picture rendering, and respect for `fullWidth` property. - General template improvements for layout and rendering consistency. - Fixed GitHub OAuth login for users migrated from previous versions. @@ -1186,7 +1186,7 @@ rss: true - Added support for printing Free-Form PDFs (no fixed page height), allowing for custom-fit page content. [(link)](/guides/selecting-page-format) - Allow overriding the default endpoint for all AI providers, not just Ollama; default endpoint now visible in AI settings. - Updated the chip input component: supports adding, editing, removing, and reordering keywords for skills and other sections. -- Improved RTL support across the app, thanks to @obreo. [(link)](https://github.com/amruthpillai/reactive-resume/pull/2583) +- Improved RTL support across the app, thanks to @obreo. [(link)](https://github.com/reactive-resume/reactive-resume/pull/2583) ## Fixes - Updated translation configuration to remove line numbers, reducing unnecessary diffs. @@ -1238,5 +1238,5 @@ This release is a major overhaul of Reactive Resume. The app was redesigned and - Icon style selector for indicators (stars, circles, custom, etc.) - Sidebar width adjustment and full-width page support -That list is not exhaustive. Send feedback via [contact](https://amruthpillai.com/#contact) or [GitHub issues](https://github.com/amruthpillai/reactive-resume/issues). +That list is not exhaustive. Send feedback via [contact](https://amruthpillai.com/#contact) or [GitHub issues](https://github.com/reactive-resume/reactive-resume/issues). diff --git a/docs/contributing/development.mdx b/docs/contributing/development.mdx index cdf81c04d..9135f5cc9 100644 --- a/docs/contributing/development.mdx +++ b/docs/contributing/development.mdx @@ -17,7 +17,7 @@ These steps set up Reactive Resume for local development, whether you're contrib ```bash - git clone https://github.com/reactive-resume/app.git reactive-resume + git clone https://github.com/reactive-resume/reactive-resume.git reactive-resume cd reactive-resume ``` @@ -318,7 +318,7 @@ pnpm run typecheck How the project and codebase are structured. - + View the source code and contribute to the project. diff --git a/docs/contributing/translations.mdx b/docs/contributing/translations.mdx index 547037bcf..519f9ceea 100644 --- a/docs/contributing/translations.mdx +++ b/docs/contributing/translations.mdx @@ -106,7 +106,7 @@ If your language is not listed in the Crowdin project, you can request it to be To request a new language: -1. Go to the [GitHub Issues](https://github.com/reactive-resume/app/issues) page +1. Go to the [GitHub Issues](https://github.com/reactive-resume/reactive-resume/issues) page 2. Click **New Issue** 3. Select the appropriate template or create a blank issue 4. Title it something like: "Add [Language Name] to Reactive Resume" @@ -152,7 +152,7 @@ Translations submitted on Crowdin are synced to the codebase periodically. Once Official Crowdin documentation for translators. - + Report issues or request new languages. diff --git a/docs/docs.json b/docs/docs.json index 8488f81e8..643e22d04 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -177,7 +177,7 @@ { "icon": "github", "anchor": "Source Code", - "href": "https://github.com/reactive-resume/app" + "href": "https://github.com/reactive-resume/reactive-resume" } ] } @@ -190,7 +190,7 @@ "links": [ { "label": "Support", - "href": "https://github.com/reactive-resume/app/issues" + "href": "https://github.com/reactive-resume/reactive-resume/issues" } ], "primary": { @@ -205,7 +205,7 @@ "footer": { "socials": { "website": "https://rxresu.me", - "github": "https://github.com/reactive-resume/app" + "github": "https://github.com/reactive-resume/reactive-resume" } } } diff --git a/docs/execution/approved-issue-plans-ledger.md b/docs/execution/approved-issue-plans-ledger.md index 6c26b8946..265c63f95 100644 --- a/docs/execution/approved-issue-plans-ledger.md +++ b/docs/execution/approved-issue-plans-ledger.md @@ -42,40 +42,40 @@ pass. Issue comments and state changes are recorded when explicitly directed by | Unit | Issues | Status / current validity | Owner | Worktree / branch | Base → head | Dependencies | Evidence | Tests | PR | Next action | Blockers | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 01 account login/recovery | #3166, #3164, #3078, #3046, #2897, #2837 | blocked | audit `task_855fbee0a803` | `codex-audit-backend-01-06` | `7a98f6662` → no source change | none | zero drift; live issues remain split; #3046/#3078 have merged #3095 candidate only | auth 42, email 6, focused/full API/server suites and affected typechecks/boundaries passed in audit | — | select exact auth/mail/API boundary only after current sanitized trace | current cloud digest, provider/account method, request/status trace, controlled mailbox | -| 02 hosted v4 recovery | #3181, #2760 | merged partial unit | implementation/review chain complete | `codex/issue-3181-recovery-procedure` | `7a98f6662` → `325d1fcd1` → merge `549135bb3` | #2760 identity branch depends on 01 evidence | Unicode format-character IDs rejected across all manifest fields; bot cleanup preserved; scanner extraction and relaxed canonicalization rejected with independent evidence; four hosted threads replied/resolved | fresh coordinator 83 comparator, 381 API, 21 auth tests plus gates green; exhaustive Unicode/mutation rereview clean; all exact-head hosted checks green; approved, mergeable, zero unresolved threads | [#3460](https://github.com/amruthpillai/reactive-resume/pull/3460) | retain external recovery gate | real recovery still needs verified owner, snapshot, mapping, private delivery | +| 02 hosted v4 recovery | #3181, #2760 | merged partial unit | implementation/review chain complete | `codex/issue-3181-recovery-procedure` | `7a98f6662` → `325d1fcd1` → merge `549135bb3` | #2760 identity branch depends on 01 evidence | Unicode format-character IDs rejected across all manifest fields; bot cleanup preserved; scanner extraction and relaxed canonicalization rejected with independent evidence; four hosted threads replied/resolved | fresh coordinator 83 comparator, 381 API, 21 auth tests plus gates green; exhaustive Unicode/mutation rereview clean; all exact-head hosted checks green; approved, mergeable, zero unresolved threads | [#3460](https://github.com/reactive-resume/reactive-resume/pull/3460) | retain external recovery gate | real recovery still needs verified owner, snapshot, mapping, private delivery | | 03 MCP registration | #3398, #3153 | blocked; historical source fix present | audit `task_855fbee0a803` | `codex-audit-backend-01-06` | `7a98f6662` → no source change | coordinate DB/startup with 05 | merged #3421 (`fe9b59e`) is present on main and current source schema/startup/auth contracts match plan, but deployed behavior is not verified | #3421 hosted checks successful; audit auth/server/API/DB tests, typechecks, boundaries passed | #3421 merged before run | obtain deployed digest/log correlation, then rerun exact Codex/Claude DCR → consent → PKCE → MCP flow | deployed digest/log correlation and exact client retest unavailable; source no-change evidence cannot prove deployment | | 04 AI provider compatibility | #2732, #2766, #2723, #2708 | blocked | audit `task_855fbee0a803` | `codex-audit-backend-01-06` | `7a98f6662` → no source change | serialize edits to AI service | zero drift; historical #2708 Responses path and #2766 structured Test path absent; remaining tuples differ | focused API 96 and full API suites/typecheck/boundaries passed in audit | — | select wire/state/import/base-path unit only after exact current tuple fails | provider/model/base URL/path/version/action/error tuple and allowed endpoint unavailable | | 05 AI provider migrations | #3152 | blocked | audit `task_855fbee0a803` | `codex-audit-backend-01-06` | `7a98f6662` → no source change | coordinate DB/startup with 03 | zero drift; table schema, migration, startup ordering, Docker copy path coherent; `42P01` historical cause unresolved | audit API/server/DB tests, typechecks, boundaries passed; no real PostgreSQL migration fixture | — | choose config/packaging/startup/migration repair only after disposable reproduction | affected image layout/digest, working directory, DB schema/search path/journal, fresh+upgrade DB fixture | | 06 image storage delivery | #2684, #2778 | blocked | audit `task_855fbee0a803` | `codex-audit-backend-01-06` | `7a98f6662` → no source change | coordinate 12/15/25 renderer/image fixtures | #2684 ACL cause fixed by merged #3432 (`35cecf9`); #2778 Browserless path obsolete; current topology unproved | #3432 hosted checks successful; audit storage/upload/PDF tests, typechecks, boundaries passed | #3432 merged before run | deployment retest plus shared real-encoding/backend/render fixture before repair | deployed digest; disposable S3/Garage/SeaweedFS/MinIO/proxy and browser/server raster matrix unavailable | -| 07 AIO deployment | #2722 | docs merged; feature declined | implementation/review chain complete | `codex/issue-2722-postgres-docs` | `7a98f6662` → `171637526` → merge `ee52636c1` | none | image and repository update flows now separate through correct `reactive-resume`/`reactive_resume` log commands; clean rereview | fresh Compose/DB/docs coordinator gates and all exact-head hosted checks green; approved; zero unresolved threads | [#3457](https://github.com/amruthpillai/reactive-resume/pull/3457) | documentation complete; #2722 disposition declined | AIO implementation explicitly declined; optional Unraid host smoke unavailable | -| 08 root public resume | #2669 | merged partial unit | implementation/review chain complete | `codex/issue-2669-root-public-resume` | `38832014b` → `576fad5ef` → merge `744eaa902` | none | optional server-only root mapping is public-only, preserves password identity, rejects hostile target/Host input, and owns canonical/static metadata safely; independent review clean | 1,392 implementation tests plus disabled/enabled production E2E; post-main focused 123 tests and type/lint gates green | [#3470](https://github.com/amruthpillai/reactive-resume/pull/3470) | retain broader custom-domain/TLS issue scope | feature remains narrower than arbitrary domain/TLS registry | -| 09 external version backup | #2705 | merged | implementation/review chain complete | `codex/issue-2705-git-backup-docs` | `7a98f6662` → `4ffdd96bd` → merge `772bf1452` | none | clean round-4 rereview; command-site prose requires unused output; replies document selected revision and fresh-file fixes | fresh coordinator 152 tests plus Markdown/diff/scope and all exact-head hosted checks green; approved; zero unresolved threads | [#3458](https://github.com/amruthpillai/reactive-resume/pull/3458) | complete | DB integration/E2E unavailable; no sync/remote/whole-account restore | -| 10 legacy link routing | #2836 | skipped by maintainer | implementation/review chain complete before cancellation | `codex/issue-2836-retired-link-notices` | `7a98f6662` → hosted `3eac878d` | none | implementation was technically reviewed, then maintainer rejected product scope due redirect-lifecycle and error-handling overhead | PR closed unmerged; issue note records not-planned rationale | [#3463](https://github.com/amruthpillai/reactive-resume/pull/3463) | no further implementation | explicitly out of plan; branch/worktree retained for auditability | -| 11 job search policy | #3010 | merged | implementation/review chain complete | `codex/issue-3010-jsearch-docs` | `7a98f6662` → `1d0397884` → merge `8c5804ed0` | none | two valid wording comments fixed; independent full-diff re-review found no issues; replies carry commit evidence | 52 focused tests plus Markdown/link/diff/base/scope and all exact-head hosted checks green; approved; zero unresolved threads | [#3459](https://github.com/amruthpillai/reactive-resume/pull/3459) | complete | real provider/browser optional gate unavailable; removal motive unknown | +| 07 AIO deployment | #2722 | docs merged; feature declined | implementation/review chain complete | `codex/issue-2722-postgres-docs` | `7a98f6662` → `171637526` → merge `ee52636c1` | none | image and repository update flows now separate through correct `reactive-resume`/`reactive_resume` log commands; clean rereview | fresh Compose/DB/docs coordinator gates and all exact-head hosted checks green; approved; zero unresolved threads | [#3457](https://github.com/reactive-resume/reactive-resume/pull/3457) | documentation complete; #2722 disposition declined | AIO implementation explicitly declined; optional Unraid host smoke unavailable | +| 08 root public resume | #2669 | merged partial unit | implementation/review chain complete | `codex/issue-2669-root-public-resume` | `38832014b` → `576fad5ef` → merge `744eaa902` | none | optional server-only root mapping is public-only, preserves password identity, rejects hostile target/Host input, and owns canonical/static metadata safely; independent review clean | 1,392 implementation tests plus disabled/enabled production E2E; post-main focused 123 tests and type/lint gates green | [#3470](https://github.com/reactive-resume/reactive-resume/pull/3470) | retain broader custom-domain/TLS issue scope | feature remains narrower than arbitrary domain/TLS registry | +| 09 external version backup | #2705 | merged | implementation/review chain complete | `codex/issue-2705-git-backup-docs` | `7a98f6662` → `4ffdd96bd` → merge `772bf1452` | none | clean round-4 rereview; command-site prose requires unused output; replies document selected revision and fresh-file fixes | fresh coordinator 152 tests plus Markdown/diff/scope and all exact-head hosted checks green; approved; zero unresolved threads | [#3458](https://github.com/reactive-resume/reactive-resume/pull/3458) | complete | DB integration/E2E unavailable; no sync/remote/whole-account restore | +| 10 legacy link routing | #2836 | skipped by maintainer | implementation/review chain complete before cancellation | `codex/issue-2836-retired-link-notices` | `7a98f6662` → hosted `3eac878d` | none | implementation was technically reviewed, then maintainer rejected product scope due redirect-lifecycle and error-handling overhead | PR closed unmerged; issue note records not-planned rationale | [#3463](https://github.com/reactive-resume/reactive-resume/pull/3463) | no further implementation | explicitly out of plan; branch/worktree retained for auditability | +| 11 job search policy | #3010 | merged | implementation/review chain complete | `codex/issue-3010-jsearch-docs` | `7a98f6662` → `1d0397884` → merge `8c5804ed0` | none | two valid wording comments fixed; independent full-diff re-review found no issues; replies carry commit evidence | 52 focused tests plus Markdown/link/diff/base/scope and all exact-head hosted checks green; approved; zero unresolved threads | [#3459](https://github.com/reactive-resume/reactive-resume/pull/3459) | complete | real provider/browser optional gate unavailable; removal motive unknown | | 12 preview/export failures | #3323, #3290, #3033, #3007, #2609 | blocked corrective work; diagnostic-ready | audit `task_1c6582ccdeae` | `codex-audit-rendering-12-19` | `7a98f6662` → no source change | renderer ownership; share observation harness with 18 | zero drift; staged-preview/error-boundary baselines remain; reports cross persistence/font/PDF/viewer/deployment boundaries | audit focused web/PDF suites, affected typechecks, boundaries, build passed | — | isolate PT Sans, browser/config, and template-selection boundaries; no shared fix | exact JSON/output/browser/config/current reproduction missing | | 13 font/glyph/spacing | #3249, #3159, #3147, #3093, #3089, #2988 | blocked corrective work; diagnostic-ready | audit `task_1c6582ccdeae` | `codex-audit-rendering-12-19` | `7a98f6662` → no source change | serialize font sources with 14/27 | merged metrics/cache/Unicode fixes present and passing; residuals require per-font/per-symptom fixtures | audit focused PDF/font suites, affected typechecks, boundaries, build passed | — | retain regressions; create residual unit only from exact failing font fixture | missing Ropa Sans/source strings/font hashes/before-after artifacts | | 14 RTL export layout | #3275 | blocked corrective work; diagnostic-ready | audit `task_1c6582ccdeae` | `codex-audit-rendering-12-19` | `7a98f6662` → no source change | serialize renderer/fonts with 13/27 | merged canvas-direction fix remains; broader shaping/bidi cause unproved | audit RTL/preview suites, affected typechecks, boundaries, build passed | — | run controlled same-bytes export matrix against approved shaping oracle | exact JSON/font/version and known-good reference absent | -| 15 picture fitting/style | #3168, #3088, #2794, #2782 | 15A merged; other causes blocked | implementation/review/finalization chain complete | `codex/issue-2782-picture-fit` | `7a98f6662` → `6e071ebcd` → merge `ab67831e4` | coordinate 06/25; schema/PDF owner exclusion | clean independent exact-head rereview; five threads resolved; fresh CodeRabbit approval; schema/retry fixes valid; rejected requests documented | focused tests/typechecks/boundaries/build/Biome green; exact-head hosted E2E 35/35 and all code checks green; Mintlify parser failure proven pre-existing; normal merge required no bypass | [#3461](https://github.com/amruthpillai/reactive-resume/pull/3461) | partial unit complete | delivery/centering issues still lack source revisions/assets/expected crop | -| 16 imported table borders | #3196 | merged | implementation/review chain complete | `codex/issue-3196-editable-tables` | `7a98f6662` → `b170290e9` → merge `999cd618c` | rich-text owner; Plan 19 stacked from reviewed head | table grammar/grid and link semantics now fail closed when Tiptap cannot round-trip; borderless PDF test is color-independent; final focused rereview clean | focused/broad web/PDF tests, typechecks, boundaries, build, narrow Biome, authenticated E2E, independent review, and hosted checks green | [#3464](https://github.com/amruthpillai/reactive-resume/pull/3464) | complete | historical visual equivalence lacks reporter HTML/JSON but feature contract is approved | +| 15 picture fitting/style | #3168, #3088, #2794, #2782 | 15A merged; other causes blocked | implementation/review/finalization chain complete | `codex/issue-2782-picture-fit` | `7a98f6662` → `6e071ebcd` → merge `ab67831e4` | coordinate 06/25; schema/PDF owner exclusion | clean independent exact-head rereview; five threads resolved; fresh CodeRabbit approval; schema/retry fixes valid; rejected requests documented | focused tests/typechecks/boundaries/build/Biome green; exact-head hosted E2E 35/35 and all code checks green; Mintlify parser failure proven pre-existing; normal merge required no bypass | [#3461](https://github.com/reactive-resume/reactive-resume/pull/3461) | partial unit complete | delivery/centering issues still lack source revisions/assets/expected crop | +| 16 imported table borders | #3196 | merged | implementation/review chain complete | `codex/issue-3196-editable-tables` | `7a98f6662` → `b170290e9` → merge `999cd618c` | rich-text owner; Plan 19 stacked from reviewed head | table grammar/grid and link semantics now fail closed when Tiptap cannot round-trip; borderless PDF test is color-independent; final focused rereview clean | focused/broad web/PDF tests, typechecks, boundaries, build, narrow Biome, authenticated E2E, independent review, and hosted checks green | [#3464](https://github.com/reactive-resume/reactive-resume/pull/3464) | complete | historical visual equivalence lacks reporter HTML/JSON but feature contract is approved | | 17 list/skill pagination | #2751, #3040 | blocked corrective work; diagnostic-ready | audit `task_1c6582ccdeae` | `codex-audit-rendering-12-19` | `7a98f6662` → no source change | renderer owner shared with 13/14/18 | merged ordered-marker/wrap/level-gap fixes present; current residual not reproduced | audit focused PDF suites, typecheck, boundaries, build passed | — | retain controls; add fix only from exact failing list/skill fixture | #2751 source absent; #3040 current fixture no longer proves residual clipping | -| 18 preview/export geometry | #2683 | diagnostic merged; runtime fix blocked | implementation/review/remediation/rereview chain complete | `codex/issue-2683-preview-export-geometry` | `cdb7bdd2f` → `ce372b54b` → `5f5dca844` → merge `11d619d3d` | share output-boundary harness with 12; viewer owner exclusion | opt-in production-path E2E verifies exact disposable DB identity, persisted source/revision and export target, positive pages/ink/sentinels, measured zoom scale, stable transform/clip geometry, all formats/margins/fit/overflow, and DPR1/2; synthetic matrix did not reproduce mismatch | dedicated PostgreSQL/production-server E2E 2/2; web 949, PDF 1,073, two typechecks, collection, Biome, boundaries 1,452, diff hygiene; seven review findings remediated and focused rereview clean | [#3483](https://github.com/amruthpillai/reactive-resume/pull/3483) | retain #2683 pending original JSON/browser fixture; no runtime change from negative synthetic evidence | exact reporter JSON/PDF/browser/DPR/zoom/page settings absent; no measured first divergence | -| 19 literal rich-text whitespace | #3397 | merged | implementation/review/remediation chain complete | `codex/issue-3397-literal-whitespace` | `38832014b` → `2f6942fb7` → merge `ea97de5ec` | Plan 16 merged; coordinate DOCX/PDF/editor with 31 | literal whitespace preserved through editor transforms, clipboard/table normalization, PDF layout/textkit geometry, and DOCX; final bare `TD`/`TH` gap fixed | post-main web 102, PDF 106, DOCX 20, three typechecks, Biome, diff green; dedicated Chromium E2E 2/2 | [#3472](https://github.com/amruthpillai/reactive-resume/pull/3472) | complete | direct Word/LibreOffice visual unavailable; XML/four-space contract verified | -| 20 section restoration | #3378, #3265, #2921 | 20A merged for #2921; residuals split | implementation/review chain complete | `codex/issue-2921-hidden-section-recovery` | `7a98f6662` → `792d7f8e2` → merge `5850230f8` | 20A before 21/31; placement semantics before 29 | collapsed navigation reopens real accordion before deferred row focus/scroll; final independent review found no issues | focused tests, typechecks, boundaries, build, PO checks, diff gates, authenticated E2E, and all hosted checks green; approved/mergeable/clean | [#3462](https://github.com/amruthpillai/reactive-resume/pull/3462) | begin dependent Plan 21 when owner slot permits | #3378/#3265 need version/action/sanitized JSON; defensive fix cannot close them | -| 21 section heading visibility | #3060 | merged | implementation/review chain complete | `codex/issue-3060-section-heading-visibility` | `2a4a1583b` → `3ce4321cb` → merge `368858a56` | 20A and 34 merged; unblocks 23B and 31 | Q1–Q3 implemented across schema, builder menus, Move-to defaults, PDF/DOCX visual omission, accessibility labels, generated references, and recovery fixtures | full 19-task suite; post-main schema 103, PDF 125, DOCX 15, web 30; four typechecks, boundaries, Biome, Markdown, diff; independent review clean | [#3477](https://github.com/amruthpillai/reactive-resume/pull/3477) | complete; issue closed by merge | no remaining approved scope | -| 22 skill keyword presentation | #2785 | merged | implementation/review/remediation chain complete | `codex/issue-2785-skill-keyword-layout` | `38832014b` → `3c06c3b0b` → merge `870388192` | must precede/serialize 34 | built-in/custom inline/list schema, menus, PDF, DOCX, accessible HTML, import, locales, generated docs, and recovery hashes updated; both independent reviews clean | 1,280 affected tests and build; post-main 80 focused tests; remediation tooling 97/97, type/lint/diff green | [#3469](https://github.com/amruthpillai/reactive-resume/pull/3469) | complete; Plan 34 dispatched | no product gate | -| 23 pagination controls | #3350, #3090 | 23A and diagnostic 23B merged; 23C blocked | implementation/review/remediation chain complete | `codex/issue-3350-item-pagination` | `368858a56` → `f2769dce5` → merge `5e8284e49` | possible 23C requires renderer-safe fallback | deterministic physical-page matrix asserts every token exactly once and separates authored pages from physical overflow; installed renderer proves `wrap=false` truncates oversized items, so no unsafe control shipped | 11 focused pagination tests, PDF typecheck, Biome, boundaries, Markdown, diff; independent review gaps remediated | [#3478](https://github.com/amruthpillai/reactive-resume/pull/3478) | retain item-control issue pending safe fallback | oversized keep-together fallback is lossy; widow/orphan UI remains deferred | -| 24 date layout | #3155, #2841 | characterization merged; behavior blocked | implementation/review/remediation chain complete | `codex/issue-3155-date-layout-characterization` | `66c25efe1` → `77a549988` → merge `cdb7bdd2f` | 24B needs explicit numeric geometry; mutual exclusion with 32 | deterministic executable JSON/PNG coordinate/raster baselines cover all Q7/custom sections, nested roles, Chikorita/Ditto LTR/RTL, all 15 templates, and #2841 controls; no runtime behavior changed | 14 focused tests, PDF typecheck, Biome, boundaries, Markdown, diff after current-main integration; independent findings remediated | [#3480](https://github.com/amruthpillai/reactive-resume/pull/3480) | retain issues pending width units/bounds/default visual target | numeric width/bounds/default geometry cannot be invented | +| 18 preview/export geometry | #2683 | diagnostic merged; runtime fix blocked | implementation/review/remediation/rereview chain complete | `codex/issue-2683-preview-export-geometry` | `cdb7bdd2f` → `ce372b54b` → `5f5dca844` → merge `11d619d3d` | share output-boundary harness with 12; viewer owner exclusion | opt-in production-path E2E verifies exact disposable DB identity, persisted source/revision and export target, positive pages/ink/sentinels, measured zoom scale, stable transform/clip geometry, all formats/margins/fit/overflow, and DPR1/2; synthetic matrix did not reproduce mismatch | dedicated PostgreSQL/production-server E2E 2/2; web 949, PDF 1,073, two typechecks, collection, Biome, boundaries 1,452, diff hygiene; seven review findings remediated and focused rereview clean | [#3483](https://github.com/reactive-resume/reactive-resume/pull/3483) | retain #2683 pending original JSON/browser fixture; no runtime change from negative synthetic evidence | exact reporter JSON/PDF/browser/DPR/zoom/page settings absent; no measured first divergence | +| 19 literal rich-text whitespace | #3397 | merged | implementation/review/remediation chain complete | `codex/issue-3397-literal-whitespace` | `38832014b` → `2f6942fb7` → merge `ea97de5ec` | Plan 16 merged; coordinate DOCX/PDF/editor with 31 | literal whitespace preserved through editor transforms, clipboard/table normalization, PDF layout/textkit geometry, and DOCX; final bare `TD`/`TH` gap fixed | post-main web 102, PDF 106, DOCX 20, three typechecks, Biome, diff green; dedicated Chromium E2E 2/2 | [#3472](https://github.com/reactive-resume/reactive-resume/pull/3472) | complete | direct Word/LibreOffice visual unavailable; XML/four-space contract verified | +| 20 section restoration | #3378, #3265, #2921 | 20A merged for #2921; residuals split | implementation/review chain complete | `codex/issue-2921-hidden-section-recovery` | `7a98f6662` → `792d7f8e2` → merge `5850230f8` | 20A before 21/31; placement semantics before 29 | collapsed navigation reopens real accordion before deferred row focus/scroll; final independent review found no issues | focused tests, typechecks, boundaries, build, PO checks, diff gates, authenticated E2E, and all hosted checks green; approved/mergeable/clean | [#3462](https://github.com/reactive-resume/reactive-resume/pull/3462) | begin dependent Plan 21 when owner slot permits | #3378/#3265 need version/action/sanitized JSON; defensive fix cannot close them | +| 21 section heading visibility | #3060 | merged | implementation/review chain complete | `codex/issue-3060-section-heading-visibility` | `2a4a1583b` → `3ce4321cb` → merge `368858a56` | 20A and 34 merged; unblocks 23B and 31 | Q1–Q3 implemented across schema, builder menus, Move-to defaults, PDF/DOCX visual omission, accessibility labels, generated references, and recovery fixtures | full 19-task suite; post-main schema 103, PDF 125, DOCX 15, web 30; four typechecks, boundaries, Biome, Markdown, diff; independent review clean | [#3477](https://github.com/reactive-resume/reactive-resume/pull/3477) | complete; issue closed by merge | no remaining approved scope | +| 22 skill keyword presentation | #2785 | merged | implementation/review/remediation chain complete | `codex/issue-2785-skill-keyword-layout` | `38832014b` → `3c06c3b0b` → merge `870388192` | must precede/serialize 34 | built-in/custom inline/list schema, menus, PDF, DOCX, accessible HTML, import, locales, generated docs, and recovery hashes updated; both independent reviews clean | 1,280 affected tests and build; post-main 80 focused tests; remediation tooling 97/97, type/lint/diff green | [#3469](https://github.com/reactive-resume/reactive-resume/pull/3469) | complete; Plan 34 dispatched | no product gate | +| 23 pagination controls | #3350, #3090 | 23A and diagnostic 23B merged; 23C blocked | implementation/review/remediation chain complete | `codex/issue-3350-item-pagination` | `368858a56` → `f2769dce5` → merge `5e8284e49` | possible 23C requires renderer-safe fallback | deterministic physical-page matrix asserts every token exactly once and separates authored pages from physical overflow; installed renderer proves `wrap=false` truncates oversized items, so no unsafe control shipped | 11 focused pagination tests, PDF typecheck, Biome, boundaries, Markdown, diff; independent review gaps remediated | [#3478](https://github.com/reactive-resume/reactive-resume/pull/3478) | retain item-control issue pending safe fallback | oversized keep-together fallback is lossy; widow/orphan UI remains deferred | +| 24 date layout | #3155, #2841 | characterization merged; behavior blocked | implementation/review/remediation chain complete | `codex/issue-3155-date-layout-characterization` | `66c25efe1` → `77a549988` → merge `cdb7bdd2f` | 24B needs explicit numeric geometry; mutual exclusion with 32 | deterministic executable JSON/PNG coordinate/raster baselines cover all Q7/custom sections, nested roles, Chikorita/Ditto LTR/RTL, all 15 templates, and #2841 controls; no runtime behavior changed | 14 focused tests, PDF typecheck, Biome, boundaries, Markdown, diff after current-main integration; independent findings remediated | [#3480](https://github.com/reactive-resume/reactive-resume/pull/3480) | retain issues pending width units/bounds/default visual target | numeric width/bounds/default geometry cannot be invented | | 25 experience company logos | #3379 | blocked implementation; contract-design-ready | audit `task_47ed7eb02d48` | `codex-audit-builder-20-34` | `7a98f6662` → no source change | 25A → 25B; coordinate 06/15 | current generic uploader has eager deletion and no reference counting/ownership validation; unsafe to reuse unchanged | audit relevant package suites/typechecks/boundaries passed | — | define asset ownership, accepted types, retention/orphan/copy/undo contract and tests | storage ownership/lifetime contract requires new decision | | 26 secondary color | #3373 | inventory-ready; implementation blocked | audit `task_47ed7eb02d48` | `codex-audit-builder-20-34` | `7a98f6662` → no source change | 26A → 26B; serialize semantic docs with 28 | theme has three roles; primary consumers are not classified decorative vs semantic | audit schema/PDF suites and typechecks/boundaries passed | — | enumerate primary consumers and approve decorative truth table | consumer classification/visual contract not selected | -| 27 offline fonts | #3377 | diagnostic merged; production resolver blocked | implementation/review/remediation chain complete | `codex/issue-3377-offline-font-diagnostic` | `2a4a1583b` → `397d9e43b` → merge `f783908b0` | 27A informs 30A; 27B needs external gate | opt-in four-surface cold-network fixture, deterministic marker crops, tested blank/tofu classification, enforced browser download, and bounded administrator-hosted manifest evidence; no production behavior changed | helper 8, fonts 55, PDF 35, targeted TypeScript, Playwright collection, Biome, boundaries, Markdown, diff; independent findings remediated | [#3479](https://github.com/amruthpillai/reactive-resume/pull/3479) | retain issue pending host-level cold-server proof | production resolver remains blocked until controlled restart/egress evidence and asset-hosting design are proven | -| 28 basics custom styles | #3137 | merged partial unit | implementation/review/remediation complete | `codex/issue-3137-semantic-css-diagnostics` | `b85d285b6` → `28c933b55` → merge `38832014b` | serialize semantic docs/tests with 26 | gradients remain unsupported; false-positive recognition and direct-LINK assertions fixed; both threads resolved and CodeRabbit approved | main-integrated package gates plus remediation resume 47/47, PDF 10/10, typechecks, Biome, and diff green; unrelated baseline E2E flakes documented | [#3468](https://github.com/amruthpillai/reactive-resume/pull/3468) | retain residual issue until reporter names remaining failure | reporter has not named remaining failure; keep issue open | +| 27 offline fonts | #3377 | diagnostic merged; production resolver blocked | implementation/review/remediation chain complete | `codex/issue-3377-offline-font-diagnostic` | `2a4a1583b` → `397d9e43b` → merge `f783908b0` | 27A informs 30A; 27B needs external gate | opt-in four-surface cold-network fixture, deterministic marker crops, tested blank/tofu classification, enforced browser download, and bounded administrator-hosted manifest evidence; no production behavior changed | helper 8, fonts 55, PDF 35, targeted TypeScript, Playwright collection, Biome, boundaries, Markdown, diff; independent findings remediated | [#3479](https://github.com/reactive-resume/reactive-resume/pull/3479) | retain issue pending host-level cold-server proof | production resolver remains blocked until controlled restart/egress evidence and asset-hosting design are proven | +| 28 basics custom styles | #3137 | merged partial unit | implementation/review/remediation complete | `codex/issue-3137-semantic-css-diagnostics` | `b85d285b6` → `28c933b55` → merge `38832014b` | serialize semantic docs/tests with 26 | gradients remain unsupported; false-positive recognition and direct-LINK assertions fixed; both threads resolved and CodeRabbit approved | main-integrated package gates plus remediation resume 47/47, PDF 10/10, typechecks, Biome, and diff green; unrelated baseline E2E flakes documented | [#3468](https://github.com/reactive-resume/reactive-resume/pull/3468) | retain residual issue until reporter names remaining failure | reporter has not named remaining failure; keep issue open | | 29 Onyx profile header | #2812 | blocked | audit `task_47ed7eb02d48` | `codex-audit-builder-20-34` | `7a98f6662` → no source change | placement semantics 20; accessibility order 31 | historical Onyx-only PR obsolete; no persisted generic placement owner exists | audit relevant suites/typechecks/boundaries passed | — | choose generic placement capability and produce one-page/overflow visual contract | new persisted-interface choice plus visual contract required | -| 30 ATS export evaluation | #2845 | diagnostic merged; preset not warranted | implementation/review/remediation/rereview chain complete | `codex/issue-2845-ats-export-evaluation` | `f783908b0` → `f89873f08` → `d17e188b0` → merge `10eb3bdbc` | current renderer/font diagnostics informed 30A; 30B requires measured material deficiency | occurrence-aware grouping, complete visible/link and hidden-channel coverage, portable JSZip DOCX extraction, and positive numbering fidelity now measure existing exports; two-column PDF and DOCX recover 106/106 expected occurrences, full-width PDF 105/106, and DOCX telephone-target omission is explicit | evaluator 108/108, four affected typechecks, Biome, boundaries 1,117, diff hygiene; independent review found five gaps and focused rereview found one final label gap, all remediated | [#3482](https://github.com/amruthpillai/reactive-resume/pull/3482) | retain #2845 pending vendor-side evidence; do not add preset from current measurements | no vendor accuracy claim; local extraction evidence shows no material deficiency warranting preset | -| 31 document accessibility | #2844 | HTML residual merged; public/export audit blocked | implementation/review/remediation chain complete | `codex/issue-2844-accessibility` | `cdb7bdd2f` → `acd2a9cfe` → merge `3e62a1d60` | public viewer requires duplicate-announcement/manual gate | builder mirror now has valid H3/H4 hierarchy and safe recursive rich-text list/mark/link semantics while preserving hidden/unplaced/Q3/order rules; no public/PDF/DOCX changes or conformance claim | focused 15, full web 949, web typecheck, Biome, boundaries; independent empty-summary/blank-company findings remediated | [#3481](https://github.com/amruthpillai/reactive-resume/pull/3481) | retain #2844 for public/PDF/DOCX/manual evidence | dedicated E2E environment and manual screen-reader transcript unavailable | -| 32 section date sorting | #2725 | merged | implementation/review chain complete | `codex/issue-2725-one-shot-sort` | `7a98f6662` → `5c07409ae` → merge `b85d285b6` | shared-file exclusion with 20–24; behavior independent of 24 | pure stable one-shot Experience/Education sort implemented with exact unresolved IDs, undo/persistence, and locked-state coverage; independent review found no issues | focused/full tests, typechecks, boundaries, build, catalogs, authenticated E2E, review, and hosted gates green | [#3465](https://github.com/amruthpillai/reactive-resume/pull/3465) | complete | broader autosort/preferences/custom/role behavior remains out of scope | -| 33 Europass template | #2689 | research merged; template blocked at approval gate | implementation/review chain complete for 33A | `codex/issue-2689-europass-research` | `2a4a1583b` → `57f2c30` → merge `578cb496a` | 33A → explicit visual approval → possible 33B | official-source mapping, canonical SVG direction, one-page/overflow/comparison artifacts, and corrected full-resolution geometry independently reviewed; no renderer code | XML/bounds/source mapping and 2480×3508 visual rereview passed | [#3475](https://github.com/amruthpillai/reactive-resume/pull/3475) | await explicit approval of proposed visual/product direction before 33B | canonical SVG direction, neutral naming, fluency labels, chronology gutter/date wrapping, and photo-free defaults require maintainer approval | -| 34 Gengar skill layout | #2611 | merged | implementation/review chain complete | `codex/issue-2611-gengar-skill-layout` | `870388192` → `f2186d4f7` → merge `2a4a1583b` | 22 merged; shared Skills renderer serialized before 21 | Gengar-only capability restores name → rating → proficiency → keywords in visual and semantic trees; other templates unchanged; independent review clean | 51 focused PDF tests, PDF typecheck, boundaries, Biome, diff green after current-main integration | [#3473](https://github.com/amruthpillai/reactive-resume/pull/3473) | complete | no historical screenshot parity claim | -| 35 resume import errors | #2768 | merged adjacent-fix unit | implementation/review chain complete | `codex/issue-2768-import-reproduction` | `38832014b` → `ae219f3d9` → merge `a6057abd7` | none | synthetic matrix proved and fixed empty-MIME rejection, v4 misclassification, and opaque offline-PDF messages; independent review found no product blocker; historical failure remains unproved | focused 26 web + 144 import; web typecheck/build; boundaries/Biome; E2E 13/13 plus repeats 12/12; post-main 158 tests/typecheck/Biome/diff green | [#3471](https://github.com/amruthpillai/reactive-resume/pull/3471) | retain historical needs-info issue | reporter artifact/version/error/steps absent; keep issue open | +| 30 ATS export evaluation | #2845 | diagnostic merged; preset not warranted | implementation/review/remediation/rereview chain complete | `codex/issue-2845-ats-export-evaluation` | `f783908b0` → `f89873f08` → `d17e188b0` → merge `10eb3bdbc` | current renderer/font diagnostics informed 30A; 30B requires measured material deficiency | occurrence-aware grouping, complete visible/link and hidden-channel coverage, portable JSZip DOCX extraction, and positive numbering fidelity now measure existing exports; two-column PDF and DOCX recover 106/106 expected occurrences, full-width PDF 105/106, and DOCX telephone-target omission is explicit | evaluator 108/108, four affected typechecks, Biome, boundaries 1,117, diff hygiene; independent review found five gaps and focused rereview found one final label gap, all remediated | [#3482](https://github.com/reactive-resume/reactive-resume/pull/3482) | retain #2845 pending vendor-side evidence; do not add preset from current measurements | no vendor accuracy claim; local extraction evidence shows no material deficiency warranting preset | +| 31 document accessibility | #2844 | HTML residual merged; public/export audit blocked | implementation/review/remediation chain complete | `codex/issue-2844-accessibility` | `cdb7bdd2f` → `acd2a9cfe` → merge `3e62a1d60` | public viewer requires duplicate-announcement/manual gate | builder mirror now has valid H3/H4 hierarchy and safe recursive rich-text list/mark/link semantics while preserving hidden/unplaced/Q3/order rules; no public/PDF/DOCX changes or conformance claim | focused 15, full web 949, web typecheck, Biome, boundaries; independent empty-summary/blank-company findings remediated | [#3481](https://github.com/reactive-resume/reactive-resume/pull/3481) | retain #2844 for public/PDF/DOCX/manual evidence | dedicated E2E environment and manual screen-reader transcript unavailable | +| 32 section date sorting | #2725 | merged | implementation/review chain complete | `codex/issue-2725-one-shot-sort` | `7a98f6662` → `5c07409ae` → merge `b85d285b6` | shared-file exclusion with 20–24; behavior independent of 24 | pure stable one-shot Experience/Education sort implemented with exact unresolved IDs, undo/persistence, and locked-state coverage; independent review found no issues | focused/full tests, typechecks, boundaries, build, catalogs, authenticated E2E, review, and hosted gates green | [#3465](https://github.com/reactive-resume/reactive-resume/pull/3465) | complete | broader autosort/preferences/custom/role behavior remains out of scope | +| 33 Europass template | #2689 | research merged; template blocked at approval gate | implementation/review chain complete for 33A | `codex/issue-2689-europass-research` | `2a4a1583b` → `57f2c30` → merge `578cb496a` | 33A → explicit visual approval → possible 33B | official-source mapping, canonical SVG direction, one-page/overflow/comparison artifacts, and corrected full-resolution geometry independently reviewed; no renderer code | XML/bounds/source mapping and 2480×3508 visual rereview passed | [#3475](https://github.com/reactive-resume/reactive-resume/pull/3475) | await explicit approval of proposed visual/product direction before 33B | canonical SVG direction, neutral naming, fluency labels, chronology gutter/date wrapping, and photo-free defaults require maintainer approval | +| 34 Gengar skill layout | #2611 | merged | implementation/review chain complete | `codex/issue-2611-gengar-skill-layout` | `870388192` → `f2186d4f7` → merge `2a4a1583b` | 22 merged; shared Skills renderer serialized before 21 | Gengar-only capability restores name → rating → proficiency → keywords in visual and semantic trees; other templates unchanged; independent review clean | 51 focused PDF tests, PDF typecheck, boundaries, Biome, diff green after current-main integration | [#3473](https://github.com/reactive-resume/reactive-resume/pull/3473) | complete | no historical screenshot parity claim | +| 35 resume import errors | #2768 | merged adjacent-fix unit | implementation/review chain complete | `codex/issue-2768-import-reproduction` | `38832014b` → `ae219f3d9` → merge `a6057abd7` | none | synthetic matrix proved and fixed empty-MIME rejection, v4 misclassification, and opaque offline-PDF messages; independent review found no product blocker; historical failure remains unproved | focused 26 web + 144 import; web typecheck/build; boundaries/Biome; E2E 13/13 plus repeats 12/12; post-main 158 tests/typecheck/Biome/diff green | [#3471](https://github.com/reactive-resume/reactive-resume/pull/3471) | retain historical needs-info issue | reporter artifact/version/error/steps absent; keep issue open | ## Active orchestration @@ -246,11 +246,11 @@ pass. Issue comments and state changes are recorded when explicitly directed by ## Publication log -- Planning package: PR [#3455](https://github.com/amruthpillai/reactive-resume/pull/3455), merged as +- Planning package: PR [#3455](https://github.com/reactive-resume/reactive-resume/pull/3455), merged as `42527ad83bdc5720bd76eef9c9da102384f21f6f` after final Plan 10 not-planned corrections and independent rereview. -- Coordinator ledger: PR [#3456](https://github.com/amruthpillai/reactive-resume/pull/3456), merged as +- Coordinator ledger: PR [#3456](https://github.com/reactive-resume/reactive-resume/pull/3456), merged as `981d7581f5ccb7eb02177f7f449a20fe5aee3976` after completion audit and focused rereview. -- Final ledger refresh: PR [#3485](https://github.com/amruthpillai/reactive-resume/pull/3485) records the terminal +- Final ledger refresh: PR [#3485](https://github.com/reactive-resume/reactive-resume/pull/3485) records the terminal execution snapshot; its own eventual merge commit is intentionally left to GitHub state to avoid a self-referential update. - Merged 2026-09-06 after exact-head revalidation: #3453 (`a4bdc54b2`), #3454 (`2e711fd14`), #3457 (`ee52636c1`), #3458 (`772bf1452`), #3459 (`8c5804ed0`), #3460 (`549135bb3`), @@ -260,48 +260,48 @@ pass. Issue comments and state changes are recorded when explicitly directed by #3474 (`97f34b7cc`), #3475 (`578cb496a`), #3476 (`66c25efe1`), #3477 (`368858a56`), and #3478 (`5e8284e49`), #3479 (`f783908b0`), #3480 (`cdb7bdd2f`), #3481 (`3e62a1d60`), and #3482 (`10eb3bdbc`), #3483 (`11d619d3d`), and CI regression fix #3484 (`778fd4b7d`). -- Plan 10: PR [#3463](https://github.com/amruthpillai/reactive-resume/pull/3463), closed unmerged by maintainer direction; - issue [#2836 comment](https://github.com/amruthpillai/reactive-resume/issues/2836#issuecomment-5556080394) records not-planned rationale. -- Plan 16: PR [#3464](https://github.com/amruthpillai/reactive-resume/pull/3464), merged as +- Plan 10: PR [#3463](https://github.com/reactive-resume/reactive-resume/pull/3463), closed unmerged by maintainer direction; + issue [#2836 comment](https://github.com/reactive-resume/reactive-resume/issues/2836#issuecomment-5556080394) records not-planned rationale. +- Plan 16: PR [#3464](https://github.com/reactive-resume/reactive-resume/pull/3464), merged as `999cd618cb2e54826aa860c298c7114045f8ebdd` after hosted checks passed. -- Plan 32: PR [#3465](https://github.com/amruthpillai/reactive-resume/pull/3465), merged as +- Plan 32: PR [#3465](https://github.com/reactive-resume/reactive-resume/pull/3465), merged as `b85d285b69843612e9d7f0ab802248982e7bf0ea` after latest-main integration and hosted approval. -- Recovery hash hotfix: PR [#3466](https://github.com/amruthpillai/reactive-resume/pull/3466), merged as +- Recovery hash hotfix: PR [#3466](https://github.com/reactive-resume/reactive-resume/pull/3466), merged as `695cdb851431a0fe7a17b05bbd9630129fdd0759`; canonical fixtures refreshed after Plan 15A changed default bytes. -- Plan 23A: PR [#3467](https://github.com/amruthpillai/reactive-resume/pull/3467), merged as +- Plan 23A: PR [#3467](https://github.com/reactive-resume/reactive-resume/pull/3467), merged as `0fbeeeb4c48993333384e4d31a0950ab8bf91b01`; relevant E2E passed and unrelated baseline flakes were documented. -- Plan 28: PR [#3468](https://github.com/amruthpillai/reactive-resume/pull/3468), merged as +- Plan 28: PR [#3468](https://github.com/reactive-resume/reactive-resume/pull/3468), merged as `38832014b969580d217be268257040ffc4f95ff6`; gradients remain unsupported and issue #3137 stays open. -- Plan 22: PR [#3469](https://github.com/amruthpillai/reactive-resume/pull/3469), merged as +- Plan 22: PR [#3469](https://github.com/reactive-resume/reactive-resume/pull/3469), merged as `870388192e38a34e70ba036027b20e3ec789dba0`; generated references and recovery hashes were refreshed and rereviewed. -- Plan 08: PR [#3470](https://github.com/amruthpillai/reactive-resume/pull/3470), merged as +- Plan 08: PR [#3470](https://github.com/reactive-resume/reactive-resume/pull/3470), merged as `744eaa902eeb90ea0473cf84549d71f51e7beab5`; broader custom-domain/TLS issue scope remains open. -- Plan 35: PR [#3471](https://github.com/amruthpillai/reactive-resume/pull/3471), merged as +- Plan 35: PR [#3471](https://github.com/reactive-resume/reactive-resume/pull/3471), merged as `a6057abd7951a05c47b4785114f3e5eff670066e`; historical issue #2768 remains open/needs-info. -- Plan 19: PR [#3472](https://github.com/amruthpillai/reactive-resume/pull/3472), merged as +- Plan 19: PR [#3472](https://github.com/reactive-resume/reactive-resume/pull/3472), merged as `ea97de5ec4e9adced7e83d6ff02e208727961887`; issue #3397 closed. -- Plan 34: PR [#3473](https://github.com/amruthpillai/reactive-resume/pull/3473), merged as +- Plan 34: PR [#3473](https://github.com/reactive-resume/reactive-resume/pull/3473), merged as `2a4a1583be097290906a1252045c57e73b78b1a9`; issue #2611 closed. -- Plan 19 static-analysis follow-up: PR [#3474](https://github.com/amruthpillai/reactive-resume/pull/3474), merged as +- Plan 19 static-analysis follow-up: PR [#3474](https://github.com/reactive-resume/reactive-resume/pull/3474), merged as `97f34b7ccda73eb8d767205741d68465cbc1c0c1`. -- Plan 33A: PR [#3475](https://github.com/amruthpillai/reactive-resume/pull/3475), merged as +- Plan 33A: PR [#3475](https://github.com/reactive-resume/reactive-resume/pull/3475), merged as `578cb496aa326751dd2ab1bea53db868daa35908`; issue #2689 remains open at its explicit visual/product gate. -- Imported-table E2E repair: PR [#3476](https://github.com/amruthpillai/reactive-resume/pull/3476), merged as +- Imported-table E2E repair: PR [#3476](https://github.com/reactive-resume/reactive-resume/pull/3476), merged as `66c25efe18775f91640e66d1b2c6868bc70f0b55`; exact Plan 16 table topology remains enforced. -- Plan 21: PR [#3477](https://github.com/amruthpillai/reactive-resume/pull/3477), merged as +- Plan 21: PR [#3477](https://github.com/reactive-resume/reactive-resume/pull/3477), merged as `368858a56fc9c3152b540c39829908e2c3ea04c5`; issue #3060 closed. -- Plan 23B: PR [#3478](https://github.com/amruthpillai/reactive-resume/pull/3478), merged as +- Plan 23B: PR [#3478](https://github.com/reactive-resume/reactive-resume/pull/3478), merged as `5e8284e49fcca1fc0d56660205872038bd307c84`; issue #3350 remains open because installed renderer clips oversized non-wrapping items. -- Plan 27A: PR [#3479](https://github.com/amruthpillai/reactive-resume/pull/3479), merged as +- Plan 27A: PR [#3479](https://github.com/reactive-resume/reactive-resume/pull/3479), merged as `f783908b0e0054869e4ecdae3f4cad75402e2fd5`; issue #3377 remains open pending controlled cold-server egress proof. -- Plan 24A: PR [#3480](https://github.com/amruthpillai/reactive-resume/pull/3480), merged as +- Plan 24A: PR [#3480](https://github.com/reactive-resume/reactive-resume/pull/3480), merged as `cdb7bdd2fe06d491eb57f8c1aa93fa48011acdb5`; #3155/#2841 remain open pending numeric date-column geometry. -- Plan 31 HTML residual: PR [#3481](https://github.com/amruthpillai/reactive-resume/pull/3481), merged as +- Plan 31 HTML residual: PR [#3481](https://github.com/reactive-resume/reactive-resume/pull/3481), merged as `3e62a1d604041e3769a7fc8f5b2ec8224d0663a4`; #2844 remains open for public/export/manual accessibility evidence. -- Plan 30 diagnostic: PR [#3482](https://github.com/amruthpillai/reactive-resume/pull/3482), merged as +- Plan 30 diagnostic: PR [#3482](https://github.com/reactive-resume/reactive-resume/pull/3482), merged as `10eb3bdbc77a903a792f1e6bfa7cba0db9dea130`; #2845 remains open pending vendor-side evidence, and current measurements do not justify a preset. -- Plan 18 diagnostic: PR [#3483](https://github.com/amruthpillai/reactive-resume/pull/3483), merged as +- Plan 18 diagnostic: PR [#3483](https://github.com/reactive-resume/reactive-resume/pull/3483), merged as `11d619d3d9c7da87bb38463147a7aac4bc35b092`; #2683 remains open pending original JSON/browser evidence, and no synthetic mismatch justified a runtime change. -- Geometry E2E CI regression: PR [#3484](https://github.com/amruthpillai/reactive-resume/pull/3484), merged as +- Geometry E2E CI regression: PR [#3484](https://github.com/reactive-resume/reactive-resume/pull/3484), merged as `778fd4b7d9a2de07852f32d87713c4a6187cf4d4`; ordinary baseline runs skip both destructive diagnostics unless explicitly opted in. diff --git a/docs/getting-started.mdx b/docs/getting-started.mdx index 379099aa7..907f39ae9 100644 --- a/docs/getting-started.mdx +++ b/docs/getting-started.mdx @@ -35,7 +35,7 @@ Reactive Resume is a free and open-source resume builder that makes it easy to c Reactive Resume is licensed under MIT. You can use it for free, modify it, and even host your own instance. The - entire codebase is available on [GitHub](https://github.com/reactive-resume/app). + entire codebase is available on [GitHub](https://github.com/reactive-resume/reactive-resume). @@ -91,10 +91,10 @@ Use the hosted version, or run your own instance. ## Community & support - + Star the repo, report reproducible bugs, propose features, and contribute to the project. - + Ask questions about setup, configuration, and using Reactive Resume. @@ -109,6 +109,6 @@ Use the hosted version, or run your own instance. - **Need help?** Start a [GitHub Discussion](https://github.com/reactive-resume/app/discussions/categories/q-a). + **Need help?** Start a [GitHub Discussion](https://github.com/reactive-resume/reactive-resume/discussions/categories/q-a). GitHub Issues are reserved for reproducible bugs and actionable feature proposals. diff --git a/docs/getting-started/quickstart.mdx b/docs/getting-started/quickstart.mdx index 529d74bd5..40f30299e 100644 --- a/docs/getting-started/quickstart.mdx +++ b/docs/getting-started/quickstart.mdx @@ -72,7 +72,7 @@ Before you begin, ensure you have the following installed: ```bash - git clone https://github.com/reactive-resume/app.git reactive-resume + git clone https://github.com/reactive-resume/reactive-resume.git reactive-resume cd reactive-resume ``` @@ -232,6 +232,6 @@ A complete list of the environment variables you can configure: - **Having trouble?** Check our [GitHub Issues](https://github.com/reactive-resume/app/issues) or reach out via + **Having trouble?** Check our [GitHub Issues](https://github.com/reactive-resume/reactive-resume/issues) or reach out via [email](mailto:hello@amruthpillai.com). diff --git a/docs/guides/accessing-the-previous-version.mdx b/docs/guides/accessing-the-previous-version.mdx index 886134833..56a66f874 100644 --- a/docs/guides/accessing-the-previous-version.mdx +++ b/docs/guides/accessing-the-previous-version.mdx @@ -77,4 +77,4 @@ problem. That requires a separate session, create, list, and reload diagnosis; a ## Questions or issues? -If you run into problems accessing v4, or have questions about migrating your resumes, open an issue on [GitHub](https://github.com/reactive-resume/app/issues). +If you run into problems accessing v4, or have questions about migrating your resumes, open an issue on [GitHub](https://github.com/reactive-resume/reactive-resume/issues). diff --git a/docs/guides/checking-service-status.mdx b/docs/guides/checking-service-status.mdx index 8e83accd3..bb4d52924 100644 --- a/docs/guides/checking-service-status.mdx +++ b/docs/guides/checking-service-status.mdx @@ -39,7 +39,7 @@ If the servers are under high load or unreachable: - For major outages or planned maintenance, announcements may be posted on our [GitHub repository](https://github.com/reactive-resume/app). + For major outages or planned maintenance, announcements may be posted on our [GitHub repository](https://github.com/reactive-resume/reactive-resume). diff --git a/docs/legal/license.mdx b/docs/legal/license.mdx index babc7219e..9118b47d2 100644 --- a/docs/legal/license.mdx +++ b/docs/legal/license.mdx @@ -9,7 +9,7 @@ Reactive Resume is open-source software. The project is published under the **MI If you are running a modified/self-hosted instance, you may have additional notices or third-party licenses that apply (for example, fonts, icons, or other bundled assets). -For the upstream repository, see: [reactive-resume/app](https://github.com/reactive-resume/app) +For the upstream repository, see: [reactive-resume/reactive-resume](https://github.com/reactive-resume/reactive-resume) --- diff --git a/docs/research/europass/README.md b/docs/research/europass/README.md index 2848a6773..8182471c1 100644 --- a/docs/research/europass/README.md +++ b/docs/research/europass/README.md @@ -23,17 +23,17 @@ two complete ResumeData objects under `onePage` and `overflow`; neither is an of Access/revalidation date: **2026-09-06**. Research base: `b85d285b69843612e9d7f0ab802248982e7bf0ea`. Planning authority: commit `a2557b2ad40e06e1e63eb655f286e6a78fe6bf0d`, -[Plan 33](https://github.com/amruthpillai/reactive-resume/blob/a2557b2ad40e06e1e63eb655f286e6a78fe6bf0d/plans/33-europass-template.md) +[Plan 33](https://github.com/reactive-resume/reactive-resume/blob/a2557b2ad40e06e1e63eb655f286e6a78fe6bf0d/plans/33-europass-template.md) and its recorded decisions. Approval covers this research/proposal unit; concrete visual approval remains open. -Read-only `gh issue view 2689` confirmed the [issue](https://github.com/amruthpillai/reactive-resume/issues/2689) +Read-only `gh issue view 2689` confirmed the [issue](https://github.com/reactive-resume/reactive-resume/issues/2689) is open, last updated 2026-08-16. Its request for a built-in option is relevant; assertions about compulsory formats are not adopted. The linked community converter remains third-party work, not an import contract. -The complete open-PR list returned four PRs: [#3455](https://github.com/amruthpillai/reactive-resume/pull/3455) -(planning), [#3456](https://github.com/amruthpillai/reactive-resume/pull/3456) (execution ledger), -[#3467](https://github.com/amruthpillai/reactive-resume/pull/3467) (authored-page guidance), and -[#3468](https://github.com/amruthpillai/reactive-resume/pull/3468) (stylesheet diagnostics). +The complete open-PR list returned four PRs: [#3455](https://github.com/reactive-resume/reactive-resume/pull/3455) +(planning), [#3456](https://github.com/reactive-resume/reactive-resume/pull/3456) (execution ledger), +[#3467](https://github.com/reactive-resume/reactive-resume/pull/3467) (authored-page guidance), and +[#3468](https://github.com/reactive-resume/reactive-resume/pull/3468) (stylesheet diagnostics). None proposed a Europass renderer. Pagination guidance is adjacent work; no shared source is changed here. The schema still has 15 template IDs and no Europass ID. The plan's targeted drift check from `7a98f6662` diff --git a/docs/self-hosting/docker.mdx b/docs/self-hosting/docker.mdx index 95bd1c4de..5aa1931fd 100644 --- a/docs/self-hosting/docker.mdx +++ b/docs/self-hosting/docker.mdx @@ -28,7 +28,7 @@ planned. Follow the [Docker Compose quickstart](#quickstart-using-docker-compose You can pull the latest app image from: - Docker Hub: `amruthpillai/reactive-resume:latest` -- GitHub Container Registry: `ghcr.io/reactive-resume/app:latest` +- GitHub Container Registry: `ghcr.io/reactive-resume/reactive-resume:latest` ## Minimum requirements @@ -191,7 +191,7 @@ services: reactive-resume: image: amruthpillai/reactive-resume:latest - # image: ghcr.io/reactive-resume/app:latest + # image: ghcr.io/reactive-resume/reactive-resume:latest restart: unless-stopped ports: - "3000:3000" @@ -216,7 +216,7 @@ volumes: - Prefer pulling from Docker Hub? Keep amruthpillai/reactive-resume:latest. Prefer GHCR? Swap it to ghcr.io/reactive-resume/app:latest. + Prefer pulling from Docker Hub? Keep amruthpillai/reactive-resume:latest. Prefer GHCR? Swap it to ghcr.io/reactive-resume/reactive-resume:latest. @@ -254,7 +254,7 @@ docker compose logs -f reactive-resume Use your platform's generic container configuration to create two separately managed containers: one for Reactive Resume and one for PostgreSQL. No official Unraid Community Applications template is provided. -- Use the official `amruthpillai/reactive-resume:latest` or `ghcr.io/reactive-resume/app:latest` image for the +- Use the official `amruthpillai/reactive-resume:latest` or `ghcr.io/reactive-resume/reactive-resume:latest` image for the app container. - Map the app's container port `3000` to the host port you want to use. - Connect both containers to a private container network. Set the host in `DATABASE_URL` to the PostgreSQL container or diff --git a/docs/self-hosting/examples.mdx b/docs/self-hosting/examples.mdx index 508677c61..7f1057fcf 100644 --- a/docs/self-hosting/examples.mdx +++ b/docs/self-hosting/examples.mdx @@ -15,7 +15,7 @@ They go further than the basic setup in the [Self-hosting with Docker](/self-hos **Share your setup.** If you have a working configuration that isn't covered here, I'd love to include it. [Open a - pull request](https://github.com/reactive-resume/app) with your example added to this page. + pull request](https://github.com/reactive-resume/reactive-resume) with your example added to this page. --- @@ -352,7 +352,7 @@ services: replicas: 1 reactive_resume: - image: ghcr.io/reactive-resume/app:latest + image: ghcr.io/reactive-resume/reactive-resume:latest networks: - traefik_network - reactive_resume_network @@ -457,7 +457,7 @@ Have a different deployment setup that works well? Consider contributing it here - Podman configurations - Cloud-specific deployments (AWS ECS, Google Cloud Run, Azure Container Apps) -To contribute, [open a pull request](https://github.com/reactive-resume/app) with your example added to this page. Include: +To contribute, [open a pull request](https://github.com/reactive-resume/reactive-resume) with your example added to this page. Include: 1. A brief description of when/why someone would use this setup 2. The complete Docker Compose (or equivalent) configuration diff --git a/docs/self-hosting/migration.mdx b/docs/self-hosting/migration.mdx index 9590a8bac..0c70f47f3 100644 --- a/docs/self-hosting/migration.mdx +++ b/docs/self-hosting/migration.mdx @@ -150,7 +150,7 @@ To run the migration scripts, you need the following installed on your host mach Clone the Reactive Resume repository and check out the last tag that includes the migration scripts: ```bash - git clone https://github.com/reactive-resume/app.git reactive-resume + git clone https://github.com/reactive-resume/reactive-resume.git reactive-resume cd reactive-resume git checkout tags/v5.0.20 pnpm install diff --git a/docs/spec.json b/docs/spec.json index 232066a20..97e0985ce 100644 --- a/docs/spec.json +++ b/docs/spec.json @@ -5,7 +5,7 @@ "description": "Reactive Resume API", "license": { "name": "MIT", - "url": "https://github.com/reactive-resume/app/blob/main/LICENSE" + "url": "https://github.com/reactive-resume/reactive-resume/blob/main/LICENSE" }, "contact": { "name": "Amruth Pillai", diff --git a/docs/superpowers/plans/2026-07-28-seo-aeo-performance.md b/docs/superpowers/plans/2026-07-28-seo-aeo-performance.md index edd56275b..db1bfe71b 100644 --- a/docs/superpowers/plans/2026-07-28-seo-aeo-performance.md +++ b/docs/superpowers/plans/2026-07-28-seo-aeo-performance.md @@ -188,13 +188,13 @@ function createRootSeoMarkup(canonicalUrl: string) { price: "0", priceCurrency: "USD", }, - codeRepository: "https://github.com/amruthpillai/reactive-resume", + codeRepository: "https://github.com/reactive-resume/reactive-resume", }, { "@type": "Project", name: "Reactive Resume", url: canonicalUrl, - sameAs: ["https://github.com/amruthpillai/reactive-resume"], + sameAs: ["https://github.com/reactive-resume/reactive-resume"], }, { "@type": "FAQPage", diff --git a/docs/superpowers/plans/2026-07-29-semantic-css-reference-and-docs-generation.md b/docs/superpowers/plans/2026-07-29-semantic-css-reference-and-docs-generation.md index 12ae11d81..48e8b6073 100644 --- a/docs/superpowers/plans/2026-07-29-semantic-css-reference-and-docs-generation.md +++ b/docs/superpowers/plans/2026-07-29-semantic-css-reference-and-docs-generation.md @@ -248,7 +248,7 @@ export async function generateOpenApiSpec({ appUrl, version }: { appUrl: string; title: "Reactive Resume", version, description: "Reactive Resume API", - license: { name: "MIT", url: "https://github.com/amruthpillai/reactive-resume/blob/main/LICENSE" }, + license: { name: "MIT", url: "https://github.com/reactive-resume/reactive-resume/blob/main/LICENSE" }, contact: { name: "Amruth Pillai", email: "hello@amruthpillai.com", url: "https://amruthpillai.com" }, }, servers: [{ url: `${appUrl}/api/openapi` }], 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 ea55c96ba..dbcdd0214 100644 --- a/docs/superpowers/plans/2026-09-05-open-issue-audit.md +++ b/docs/superpowers/plans/2026-09-05-open-issue-audit.md @@ -21,55 +21,55 @@ Issues fixed only in unmerged PRs remain open. Already-fixed issues close only w - 115 issues triaged: the initial 114 plus new report #3433. Verification continues for reports needing exact fixtures or deployment reproduction. - 44 implementation PRs created by this audit: 42 earlier PRs are merged; navigation fix #3453 and thumbnail fix #3454 are open. Audit-only documentation PRs #3418, #3440, #3444 and #3452 are excluded and are all merged. The final #3452 ledger and its merged #3450/#3451 verification updates are preserved. -- 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). +- 50 audited issues closed: 49 evidence-backed or reporter-confirmed closures plus one product-decision closure (#3272). Complete closure set: [#2650](https://github.com/reactive-resume/reactive-resume/issues/2650), [#2735](https://github.com/reactive-resume/reactive-resume/issues/2735), [#2739](https://github.com/reactive-resume/reactive-resume/issues/2739), [#2745](https://github.com/reactive-resume/reactive-resume/issues/2745), [#2804](https://github.com/reactive-resume/reactive-resume/issues/2804), [#2805](https://github.com/reactive-resume/reactive-resume/issues/2805), [#2878](https://github.com/reactive-resume/reactive-resume/issues/2878), [#3008](https://github.com/reactive-resume/reactive-resume/issues/3008), [#3017](https://github.com/reactive-resume/reactive-resume/issues/3017), [#3051](https://github.com/reactive-resume/reactive-resume/issues/3051), [#3068](https://github.com/reactive-resume/reactive-resume/issues/3068), [#3146](https://github.com/reactive-resume/reactive-resume/issues/3146), [#3174](https://github.com/reactive-resume/reactive-resume/issues/3174), [#3175](https://github.com/reactive-resume/reactive-resume/issues/3175), [#3180](https://github.com/reactive-resume/reactive-resume/issues/3180), [#3200](https://github.com/reactive-resume/reactive-resume/issues/3200), [#3247](https://github.com/reactive-resume/reactive-resume/issues/3247), [#3251](https://github.com/reactive-resume/reactive-resume/issues/3251), [#3255](https://github.com/reactive-resume/reactive-resume/issues/3255), [#3272](https://github.com/reactive-resume/reactive-resume/issues/3272), [#3285](https://github.com/reactive-resume/reactive-resume/issues/3285), [#3291](https://github.com/reactive-resume/reactive-resume/issues/3291), [#3305](https://github.com/reactive-resume/reactive-resume/issues/3305), [#3311](https://github.com/reactive-resume/reactive-resume/issues/3311), [#3312](https://github.com/reactive-resume/reactive-resume/issues/3312), [#3334](https://github.com/reactive-resume/reactive-resume/issues/3334), [#3337](https://github.com/reactive-resume/reactive-resume/issues/3337), [#3338](https://github.com/reactive-resume/reactive-resume/issues/3338), [#3339](https://github.com/reactive-resume/reactive-resume/issues/3339), [#3340](https://github.com/reactive-resume/reactive-resume/issues/3340), [#3341](https://github.com/reactive-resume/reactive-resume/issues/3341), [#3343](https://github.com/reactive-resume/reactive-resume/issues/3343), [#3344](https://github.com/reactive-resume/reactive-resume/issues/3344), [#3347](https://github.com/reactive-resume/reactive-resume/issues/3347), [#3348](https://github.com/reactive-resume/reactive-resume/issues/3348), [#3352](https://github.com/reactive-resume/reactive-resume/issues/3352), [#3359](https://github.com/reactive-resume/reactive-resume/issues/3359), [#3360](https://github.com/reactive-resume/reactive-resume/issues/3360), [#3361](https://github.com/reactive-resume/reactive-resume/issues/3361), [#3366](https://github.com/reactive-resume/reactive-resume/issues/3366), [#3368](https://github.com/reactive-resume/reactive-resume/issues/3368), [#3369](https://github.com/reactive-resume/reactive-resume/issues/3369), [#3370](https://github.com/reactive-resume/reactive-resume/issues/3370), [#3374](https://github.com/reactive-resume/reactive-resume/issues/3374), [#3380](https://github.com/reactive-resume/reactive-resume/issues/3380), [#3391](https://github.com/reactive-resume/reactive-resume/issues/3391), [#3392](https://github.com/reactive-resume/reactive-resume/issues/3392), [#3393](https://github.com/reactive-resume/reactive-resume/issues/3393), [#3401](https://github.com/reactive-resume/reactive-resume/issues/3401), [#3433](https://github.com/reactive-resume/reactive-resume/issues/3433). - In progress: navigation-save PR #3453 has green checks on its published head, but a valid unbounded-wait review finding now requires a follow-up and fresh verification; measured thumbnail-resolution fix #3454 awaits its remaining hosted checks and owner review. Concurrent multi-tab overwrite under #2828 is also reproduced; conflict recovery awaits a product decision. Controlled square-picture (#2794) and Times-Roman (#3089) probes pass, with exact reporter fixtures requested in posted comments. Exact original reproduction remains needed 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. +- Baseline server/API typecheck errors in `packages/email/src/transport.ts` are fixed separately by [#3416](https://github.com/reactive-resume/reactive-resume/pull/3416). All three affected package typechecks and existing email tests pass there. | Issue | Fix PR | Result | | --- | --- | --- | -| [#3391](https://github.com/amruthpillai/reactive-resume/issues/3391) | [#3402](https://github.com/amruthpillai/reactive-resume/pull/3402) | Saved application notes now appear as escaped, wrapping text. Merged by repository owner; issue closed. | -| [#2735](https://github.com/amruthpillai/reactive-resume/issues/2735) | [#3403](https://github.com/amruthpillai/reactive-resume/pull/3403) | Explicit HTTP URLs survive paste and edits; bare hosts retain HTTPS defaults. 12 URL input tests passed. | -| [#3347](https://github.com/amruthpillai/reactive-resume/issues/3347) | [#3404](https://github.com/amruthpillai/reactive-resume/pull/3404) | Health exposes the build version and its endpoint appears in OpenAPI. Public errors are generic; diagnostic details remain in server logs. 74 server tests pass. | -| [#3251](https://github.com/amruthpillai/reactive-resume/issues/3251) | [#3405](https://github.com/amruthpillai/reactive-resume/pull/3405) | Primary button hover applies to native buttons and links. Compiled Tailwind behavior verified. | -| [#3338](https://github.com/amruthpillai/reactive-resume/issues/3338) | [#3406](https://github.com/amruthpillai/reactive-resume/pull/3406) | Dates align correctly when the opposite optional field is blank. Four actual-PDF layout regressions and 687 PDF tests passed. | -| [#3370](https://github.com/amruthpillai/reactive-resume/issues/3370) | [#3407](https://github.com/amruthpillai/reactive-resume/pull/3407) | Labeled password and confirmation dialog validates length/matching and retains failures. 605 web tests, typecheck, and updated browser E2E passed. | -| [#3339](https://github.com/amruthpillai/reactive-resume/issues/3339) | [#3408](https://github.com/amruthpillai/reactive-resume/pull/3408) | Onyx headlines wrap within page margins. Three actual-PDF regressions and 686 PDF tests passed. | -| [#3401](https://github.com/amruthpillai/reactive-resume/issues/3401) | [#3409](https://github.com/amruthpillai/reactive-resume/pull/3409) | Public signup footer is hidden when registration is disabled, as approved. Four public-page tests passed. | -| [#3359](https://github.com/amruthpillai/reactive-resume/issues/3359) | [#3410](https://github.com/amruthpillai/reactive-resume/pull/3410) | Public social previews use neutral branding instead of a sample identity. Personal title/description remain intact. | -| [#3361](https://github.com/amruthpillai/reactive-resume/issues/3361) | [#3411](https://github.com/amruthpillai/reactive-resume/pull/3411) | Compose loads optional .env after sample defaults; docs distinguish repository Compose from standalone quickstart. Both actual configurations verified. | -| [#3352](https://github.com/amruthpillai/reactive-resume/issues/3352) | [#3412](https://github.com/amruthpillai/reactive-resume/pull/3412) | SVG icon opacity reaches actual PDF drawing operations; reporter fixture renders distinct ratings. Six graphics-state tests and 689 PDF tests passed. | -| [#3368](https://github.com/amruthpillai/reactive-resume/issues/3368) | [#3413](https://github.com/amruthpillai/reactive-resume/pull/3413) | Submitted writes reject values outside published bounds while stored reads and historical migrations remain tolerant. Legacy JSON fixtures and schema/API/domain/import suites verified. | -| [#3366](https://github.com/amruthpillai/reactive-resume/issues/3366) | [#3414](https://github.com/amruthpillai/reactive-resume/pull/3414) | Head `d99662282`: public PDF downloads record explicit events after browser save initiation. API docs now describe password verification and the HttpOnly access cookie. 348 API tests and scoped Biome checks pass. Existing browser CI verifies PDF bytes, totals/daily downloads and unchanged views. | -| [#3348](https://github.com/amruthpillai/reactive-resume/issues/3348) | [#3415](https://github.com/amruthpillai/reactive-resume/pull/3415) | Semantic section heading and icon colors reach actual PDF drawing commands. Five graphics-state regressions and 688 PDF tests passed. | -| [#3180](https://github.com/amruthpillai/reactive-resume/issues/3180) | [#3417](https://github.com/amruthpillai/reactive-resume/pull/3417) | Moving items validates destinations and prunes only emptied custom source sections and affected empty pages; exact round-trip JSON, undo, 605 web tests and typecheck verified. | -| [#3360](https://github.com/amruthpillai/reactive-resume/issues/3360) | [#3419](https://github.com/amruthpillai/reactive-resume/pull/3419) | Merged head `1ba4224c4`: per-resume download-button preference persists, backs up with account data, and hides both public buttons. Final verification passed 777 web tests, 381 API tests, both package typechecks, and 26 E2E scenarios; all review and static-analysis gates passed. | -| [#3305](https://github.com/amruthpillai/reactive-resume/issues/3305) | [#3420](https://github.com/amruthpillai/reactive-resume/pull/3420) | JPEG/WebP encoding is preserved and oversized crops shrink proportionally until within 10MiB. Near-limit JPEG browser reproduction now uploads successfully; transparency is preserved for PNG/WebP. Validation errors explain the upload limit. | -| [#3392](https://github.com/amruthpillai/reactive-resume/issues/3392) | [#3421](https://github.com/amruthpillai/reactive-resume/pull/3421) | Head `895fec3`: refreshed with current main, preserving both OAuth consent and application-export translations. Four affected package typechecks, 744 web tests, 105 server tests (four opt-in database cases skipped) and locale compilation pass. MCP registration, provider schema and explicit Allow/Deny consent restored; signed queries and repeated resources survive login. 98 server tests with real PostgreSQL and 636 web tests pass. Production OAuth exchanges for both advertised-root and /mcp resources reach MCP initialize HTTP 200; an issued client-audience ID token receives HTTP 401. Intentional service audience aliases retained; production E2E CI passes. | -| [#3337](https://github.com/amruthpillai/reactive-resume/issues/3337) | [#3422](https://github.com/amruthpillai/reactive-resume/pull/3422) | PDF page padding repeats across overflow while preserving template backgrounds; 45 actual-PDF geometry/raster cases pass; template background review claims checked against main and resolved styles. | -| [#3175](https://github.com/amruthpillai/reactive-resume/issues/3175) | [#3422](https://github.com/amruthpillai/reactive-resume/pull/3422) | Shared continuation-margin fix covers five affected templates, explicit headerless pages and full-width pages. | -| [#3255](https://github.com/amruthpillai/reactive-resume/issues/3255) | [#3423](https://github.com/amruthpillai/reactive-resume/pull/3423) | Approved shared library with copied resume styling, explicit refresh, retained conflict drafts, JSON/PDF export and application snapshots. Three production browser scenarios, 325 API tests, 598 web tests and combined migrations verified; browser CI and autofix pass. Codacy applies a SQL Server-only rule to the PostgreSQL migration. | -| [#3369](https://github.com/amruthpillai/reactive-resume/issues/3369) | [#3424](https://github.com/amruthpillai/reactive-resume/pull/3424) | Connects remaining Basics Website, Picture Size and shared WebsiteField labels. Three missing-name reproductions corrected; 10 DOM tests and web typecheck pass. Complements #3387, whose standalone primitive prop regressions were reproduced and reported on its review. | -| [#3247](https://github.com/amruthpillai/reactive-resume/issues/3247) | [#3425](https://github.com/amruthpillai/reactive-resume/pull/3425) | Adds compact thumbnails and per-account tab-session Grid/Compact/List preference. Five hook tests plus production browser navigation, reload, explicit URL override and mobile sizing pass. | -| [#3393](https://github.com/amruthpillai/reactive-resume/issues/3393) | [#3426](https://github.com/amruthpillai/reactive-resume/pull/3426) | CSV exports current filters or all applications with date range, contacts, notes and chronological history. 611 web tests and production browser downloads, owner isolation and mobile header checks pass. | -| [#3017](https://github.com/amruthpillai/reactive-resume/issues/3017) | [#3427](https://github.com/amruthpillai/reactive-resume/pull/3427) | Head `c315633f6`: picture borders and soft shadows preserve authored padding and insets. 708 PDF tests across 59 files, 25 targeted cases, compiled-server raster checks, three Chromium/Node PNG parity fixtures and production builds pass. Percentage picture width/height shadows remain a documented limitation. | -| [#2804](https://github.com/amruthpillai/reactive-resume/issues/2804) | [#3428](https://github.com/amruthpillai/reactive-resume/pull/3428) | Server PDFs lacked default section headings despite correct browser rendering. Generated locale subset restores saved resume language; 689 PDF tests, API tests and production normal/fallback browser paths pass. | -| [#3249](https://github.com/amruthpillai/reactive-resume/issues/3249) | [#3430](https://github.com/amruthpillai/reactive-resume/pull/3430) | Head `50bac62ed`: font metrics respect USE_TYPO_METRICS while preserving CJK fallbacks, including the selectable Noto Sans HK review correction. 699 PDF tests and 16 actual-font cases pass. Exact Roboto Condensed and controlled IBM fixtures improve; current Ropa Sans remains unchanged and historical optical alignment scope stays separate. | -| [#3291](https://github.com/amruthpillai/reactive-resume/issues/3291) | [#3431](https://github.com/amruthpillai/reactive-resume/pull/3431) | Head `b15f4983b`: color picker tracks current CSS through repeated presets, external edits and undo; spaced RGB/HSL tokens regain swatches. Approved hex output preserves optional alpha and named/modern RGB roundtrips. 78 focused tests and four previously verified production browser scenarios pass; all review feedback resolved. | -| [#2684](https://github.com/amruthpillai/reactive-resume/issues/2684) | [#3432](https://github.com/amruthpillai/reactive-resume/pull/3432) | Removes unsupported S3 object ACLs. Real SDK wire-contract stub reproduces AWS documented rejection; real Ceph gateway separately verifies public proxy and private access behavior. Exact reported deployment cause remains unproven; PR relates to the issue without closing it. | -| [#3040](https://github.com/amruthpillai/reactive-resume/issues/3040) | [#3434](https://github.com/amruthpillai/reactive-resume/pull/3434) | Head `2e29a4412`: permits Semantic CSS gap, row-gap and column-gap on level indicators. Seven actual-PDF raster regressions, 690 PDF tests and 1,349 resume-domain tests pass. Original vertical clipping and automatic pagination scope remain unproven; PR relates without closing #3040. | -| [#3340](https://github.com/amruthpillai/reactive-resume/issues/3340) | [#3435](https://github.com/amruthpillai/reactive-resume/pull/3435) | Head `27c17d8c1`: approved opt-in German hyphenation preserves default-off output and per-document isolation. 722 PDF tests across 59 files including 11 actual-PDF cases, 111 schema tests, 599 web tests, three package typechecks and production builds pass. Four Chromium locale/toggle exports, built-server PDF parity and exact shipped third-party notices verified. | -| [#3343](https://github.com/amruthpillai/reactive-resume/issues/3343) | [#3437](https://github.com/amruthpillai/reactive-resume/pull/3437) | Head `d154f31b8`: skill ratings align at the bottom of each multi-column row by default. Nine actual-PDF regressions and all 692 PDF tests pass. Single-column raster is byte-identical; CI and review approved. | -| [#3196](https://github.com/amruthpillai/reactive-resume/issues/3196) | [#3438](https://github.com/amruthpillai/reactive-resume/pull/3438) | Head `165535b5f`: preserves imported rich text without individually addressable semantic descendants. Seven actual-PDF regressions, all 690 PDF tests and a production import/save/reload/export reproduction pass. Original missing-border report remains open; this is a separate regression discovered during its investigation. | -| [#3344](https://github.com/amruthpillai/reactive-resume/issues/3344) | [#3443](https://github.com/amruthpillai/reactive-resume/pull/3443) | Head `45a38fdc9`: synchronized with main including continuation margins; 81 combined list/page-margin regressions and all 894 PDF tests pass. Scoped React PDF layout patch keeps list markers with their first text fragments, respecting orphan counts, reordering, RTL and explicit pagination hints. 36 targeted cases pass; current-main failure reproduced, single-page raster byte-identical. All CI checks pass on synchronized head. Independent review clean; 36 focused tests and a separate 250-word content-break probe pass. Extreme orphan/font-size limitations also reproduce on unchanged main. Repository owner merged this PR; issue closed. | -| [#3068](https://github.com/amruthpillai/reactive-resume/issues/3068) | [#3445](https://github.com/amruthpillai/reactive-resume/pull/3445) | Merged head `5a3eff985`: corrects shared Ditgar main-section border/padding compensation, aligning titles with descriptions and links. Actual-PDF baseline: 16 failures and five controls; all 21 cases pass after the fix. Final verification passed all 923 PDF tests, package typecheck, and 25 E2E scenarios; all review and static-analysis gates passed. | -| [#2745](https://github.com/amruthpillai/reactive-resume/issues/2745) | [#3446](https://github.com/amruthpillai/reactive-resume/pull/3446) | Merged head `ab0a47bf2`: isolates left-origin zoom coordinates from RTL interface positioning while retaining Arabic dock and per-resume direction. Production-main regression fails with a 1324.8px center error and English control passes; all four UI/resume locale combinations pass after fix at initial load, actual size, and fit-to-view. Build, web typecheck, boundaries, E2E, review, and static-analysis gates passed. | -| [#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. | -| [#2828](https://github.com/amruthpillai/reactive-resume/issues/2828) | [#3453](https://github.com/amruthpillai/reactive-resume/pull/3453) | Open head `7fe189f5f`: flushes queued edits and retries the latest draft before leaving the builder; failed saves retain the draft and block SPA navigation. Two real Chromium/PostgreSQL scenarios and 804 web tests pass; independent review clean. Published-head checks all pass, but a valid navigation-wait review finding requires a follow-up; those checks are not final verification of the correction. Original historical loss and simultaneous-tab conflict recovery remain separate open scope. | -| [#3246](https://github.com/amruthpillai/reactive-resume/issues/3246) | [#3454](https://github.com/amruthpillai/reactive-resume/pull/3454) | Open head `c2db4ec8d`: rasterizes the measured contain-fit size at device pixel density, retaining the previous thumbnail during upgrades. All 22 production measurements cover at least 100.18% of displayed pixels; 804 web tests and independent lifecycle review pass. At the snapshot, autofix, Codacy and Greptile pass; E2E and CodeRabbit are pending. Exact original self-hosted screenshot equivalence remains unproven. | +| [#3391](https://github.com/reactive-resume/reactive-resume/issues/3391) | [#3402](https://github.com/reactive-resume/reactive-resume/pull/3402) | Saved application notes now appear as escaped, wrapping text. Merged by repository owner; issue closed. | +| [#2735](https://github.com/reactive-resume/reactive-resume/issues/2735) | [#3403](https://github.com/reactive-resume/reactive-resume/pull/3403) | Explicit HTTP URLs survive paste and edits; bare hosts retain HTTPS defaults. 12 URL input tests passed. | +| [#3347](https://github.com/reactive-resume/reactive-resume/issues/3347) | [#3404](https://github.com/reactive-resume/reactive-resume/pull/3404) | Health exposes the build version and its endpoint appears in OpenAPI. Public errors are generic; diagnostic details remain in server logs. 74 server tests pass. | +| [#3251](https://github.com/reactive-resume/reactive-resume/issues/3251) | [#3405](https://github.com/reactive-resume/reactive-resume/pull/3405) | Primary button hover applies to native buttons and links. Compiled Tailwind behavior verified. | +| [#3338](https://github.com/reactive-resume/reactive-resume/issues/3338) | [#3406](https://github.com/reactive-resume/reactive-resume/pull/3406) | Dates align correctly when the opposite optional field is blank. Four actual-PDF layout regressions and 687 PDF tests passed. | +| [#3370](https://github.com/reactive-resume/reactive-resume/issues/3370) | [#3407](https://github.com/reactive-resume/reactive-resume/pull/3407) | Labeled password and confirmation dialog validates length/matching and retains failures. 605 web tests, typecheck, and updated browser E2E passed. | +| [#3339](https://github.com/reactive-resume/reactive-resume/issues/3339) | [#3408](https://github.com/reactive-resume/reactive-resume/pull/3408) | Onyx headlines wrap within page margins. Three actual-PDF regressions and 686 PDF tests passed. | +| [#3401](https://github.com/reactive-resume/reactive-resume/issues/3401) | [#3409](https://github.com/reactive-resume/reactive-resume/pull/3409) | Public signup footer is hidden when registration is disabled, as approved. Four public-page tests passed. | +| [#3359](https://github.com/reactive-resume/reactive-resume/issues/3359) | [#3410](https://github.com/reactive-resume/reactive-resume/pull/3410) | Public social previews use neutral branding instead of a sample identity. Personal title/description remain intact. | +| [#3361](https://github.com/reactive-resume/reactive-resume/issues/3361) | [#3411](https://github.com/reactive-resume/reactive-resume/pull/3411) | Compose loads optional .env after sample defaults; docs distinguish repository Compose from standalone quickstart. Both actual configurations verified. | +| [#3352](https://github.com/reactive-resume/reactive-resume/issues/3352) | [#3412](https://github.com/reactive-resume/reactive-resume/pull/3412) | SVG icon opacity reaches actual PDF drawing operations; reporter fixture renders distinct ratings. Six graphics-state tests and 689 PDF tests passed. | +| [#3368](https://github.com/reactive-resume/reactive-resume/issues/3368) | [#3413](https://github.com/reactive-resume/reactive-resume/pull/3413) | Submitted writes reject values outside published bounds while stored reads and historical migrations remain tolerant. Legacy JSON fixtures and schema/API/domain/import suites verified. | +| [#3366](https://github.com/reactive-resume/reactive-resume/issues/3366) | [#3414](https://github.com/reactive-resume/reactive-resume/pull/3414) | Head `d99662282`: public PDF downloads record explicit events after browser save initiation. API docs now describe password verification and the HttpOnly access cookie. 348 API tests and scoped Biome checks pass. Existing browser CI verifies PDF bytes, totals/daily downloads and unchanged views. | +| [#3348](https://github.com/reactive-resume/reactive-resume/issues/3348) | [#3415](https://github.com/reactive-resume/reactive-resume/pull/3415) | Semantic section heading and icon colors reach actual PDF drawing commands. Five graphics-state regressions and 688 PDF tests passed. | +| [#3180](https://github.com/reactive-resume/reactive-resume/issues/3180) | [#3417](https://github.com/reactive-resume/reactive-resume/pull/3417) | Moving items validates destinations and prunes only emptied custom source sections and affected empty pages; exact round-trip JSON, undo, 605 web tests and typecheck verified. | +| [#3360](https://github.com/reactive-resume/reactive-resume/issues/3360) | [#3419](https://github.com/reactive-resume/reactive-resume/pull/3419) | Merged head `1ba4224c4`: per-resume download-button preference persists, backs up with account data, and hides both public buttons. Final verification passed 777 web tests, 381 API tests, both package typechecks, and 26 E2E scenarios; all review and static-analysis gates passed. | +| [#3305](https://github.com/reactive-resume/reactive-resume/issues/3305) | [#3420](https://github.com/reactive-resume/reactive-resume/pull/3420) | JPEG/WebP encoding is preserved and oversized crops shrink proportionally until within 10MiB. Near-limit JPEG browser reproduction now uploads successfully; transparency is preserved for PNG/WebP. Validation errors explain the upload limit. | +| [#3392](https://github.com/reactive-resume/reactive-resume/issues/3392) | [#3421](https://github.com/reactive-resume/reactive-resume/pull/3421) | Head `895fec3`: refreshed with current main, preserving both OAuth consent and application-export translations. Four affected package typechecks, 744 web tests, 105 server tests (four opt-in database cases skipped) and locale compilation pass. MCP registration, provider schema and explicit Allow/Deny consent restored; signed queries and repeated resources survive login. 98 server tests with real PostgreSQL and 636 web tests pass. Production OAuth exchanges for both advertised-root and /mcp resources reach MCP initialize HTTP 200; an issued client-audience ID token receives HTTP 401. Intentional service audience aliases retained; production E2E CI passes. | +| [#3337](https://github.com/reactive-resume/reactive-resume/issues/3337) | [#3422](https://github.com/reactive-resume/reactive-resume/pull/3422) | PDF page padding repeats across overflow while preserving template backgrounds; 45 actual-PDF geometry/raster cases pass; template background review claims checked against main and resolved styles. | +| [#3175](https://github.com/reactive-resume/reactive-resume/issues/3175) | [#3422](https://github.com/reactive-resume/reactive-resume/pull/3422) | Shared continuation-margin fix covers five affected templates, explicit headerless pages and full-width pages. | +| [#3255](https://github.com/reactive-resume/reactive-resume/issues/3255) | [#3423](https://github.com/reactive-resume/reactive-resume/pull/3423) | Approved shared library with copied resume styling, explicit refresh, retained conflict drafts, JSON/PDF export and application snapshots. Three production browser scenarios, 325 API tests, 598 web tests and combined migrations verified; browser CI and autofix pass. Codacy applies a SQL Server-only rule to the PostgreSQL migration. | +| [#3369](https://github.com/reactive-resume/reactive-resume/issues/3369) | [#3424](https://github.com/reactive-resume/reactive-resume/pull/3424) | Connects remaining Basics Website, Picture Size and shared WebsiteField labels. Three missing-name reproductions corrected; 10 DOM tests and web typecheck pass. Complements #3387, whose standalone primitive prop regressions were reproduced and reported on its review. | +| [#3247](https://github.com/reactive-resume/reactive-resume/issues/3247) | [#3425](https://github.com/reactive-resume/reactive-resume/pull/3425) | Adds compact thumbnails and per-account tab-session Grid/Compact/List preference. Five hook tests plus production browser navigation, reload, explicit URL override and mobile sizing pass. | +| [#3393](https://github.com/reactive-resume/reactive-resume/issues/3393) | [#3426](https://github.com/reactive-resume/reactive-resume/pull/3426) | CSV exports current filters or all applications with date range, contacts, notes and chronological history. 611 web tests and production browser downloads, owner isolation and mobile header checks pass. | +| [#3017](https://github.com/reactive-resume/reactive-resume/issues/3017) | [#3427](https://github.com/reactive-resume/reactive-resume/pull/3427) | Head `c315633f6`: picture borders and soft shadows preserve authored padding and insets. 708 PDF tests across 59 files, 25 targeted cases, compiled-server raster checks, three Chromium/Node PNG parity fixtures and production builds pass. Percentage picture width/height shadows remain a documented limitation. | +| [#2804](https://github.com/reactive-resume/reactive-resume/issues/2804) | [#3428](https://github.com/reactive-resume/reactive-resume/pull/3428) | Server PDFs lacked default section headings despite correct browser rendering. Generated locale subset restores saved resume language; 689 PDF tests, API tests and production normal/fallback browser paths pass. | +| [#3249](https://github.com/reactive-resume/reactive-resume/issues/3249) | [#3430](https://github.com/reactive-resume/reactive-resume/pull/3430) | Head `50bac62ed`: font metrics respect USE_TYPO_METRICS while preserving CJK fallbacks, including the selectable Noto Sans HK review correction. 699 PDF tests and 16 actual-font cases pass. Exact Roboto Condensed and controlled IBM fixtures improve; current Ropa Sans remains unchanged and historical optical alignment scope stays separate. | +| [#3291](https://github.com/reactive-resume/reactive-resume/issues/3291) | [#3431](https://github.com/reactive-resume/reactive-resume/pull/3431) | Head `b15f4983b`: color picker tracks current CSS through repeated presets, external edits and undo; spaced RGB/HSL tokens regain swatches. Approved hex output preserves optional alpha and named/modern RGB roundtrips. 78 focused tests and four previously verified production browser scenarios pass; all review feedback resolved. | +| [#2684](https://github.com/reactive-resume/reactive-resume/issues/2684) | [#3432](https://github.com/reactive-resume/reactive-resume/pull/3432) | Removes unsupported S3 object ACLs. Real SDK wire-contract stub reproduces AWS documented rejection; real Ceph gateway separately verifies public proxy and private access behavior. Exact reported deployment cause remains unproven; PR relates to the issue without closing it. | +| [#3040](https://github.com/reactive-resume/reactive-resume/issues/3040) | [#3434](https://github.com/reactive-resume/reactive-resume/pull/3434) | Head `2e29a4412`: permits Semantic CSS gap, row-gap and column-gap on level indicators. Seven actual-PDF raster regressions, 690 PDF tests and 1,349 resume-domain tests pass. Original vertical clipping and automatic pagination scope remain unproven; PR relates without closing #3040. | +| [#3340](https://github.com/reactive-resume/reactive-resume/issues/3340) | [#3435](https://github.com/reactive-resume/reactive-resume/pull/3435) | Head `27c17d8c1`: approved opt-in German hyphenation preserves default-off output and per-document isolation. 722 PDF tests across 59 files including 11 actual-PDF cases, 111 schema tests, 599 web tests, three package typechecks and production builds pass. Four Chromium locale/toggle exports, built-server PDF parity and exact shipped third-party notices verified. | +| [#3343](https://github.com/reactive-resume/reactive-resume/issues/3343) | [#3437](https://github.com/reactive-resume/reactive-resume/pull/3437) | Head `d154f31b8`: skill ratings align at the bottom of each multi-column row by default. Nine actual-PDF regressions and all 692 PDF tests pass. Single-column raster is byte-identical; CI and review approved. | +| [#3196](https://github.com/reactive-resume/reactive-resume/issues/3196) | [#3438](https://github.com/reactive-resume/reactive-resume/pull/3438) | Head `165535b5f`: preserves imported rich text without individually addressable semantic descendants. Seven actual-PDF regressions, all 690 PDF tests and a production import/save/reload/export reproduction pass. Original missing-border report remains open; this is a separate regression discovered during its investigation. | +| [#3344](https://github.com/reactive-resume/reactive-resume/issues/3344) | [#3443](https://github.com/reactive-resume/reactive-resume/pull/3443) | Head `45a38fdc9`: synchronized with main including continuation margins; 81 combined list/page-margin regressions and all 894 PDF tests pass. Scoped React PDF layout patch keeps list markers with their first text fragments, respecting orphan counts, reordering, RTL and explicit pagination hints. 36 targeted cases pass; current-main failure reproduced, single-page raster byte-identical. All CI checks pass on synchronized head. Independent review clean; 36 focused tests and a separate 250-word content-break probe pass. Extreme orphan/font-size limitations also reproduce on unchanged main. Repository owner merged this PR; issue closed. | +| [#3068](https://github.com/reactive-resume/reactive-resume/issues/3068) | [#3445](https://github.com/reactive-resume/reactive-resume/pull/3445) | Merged head `5a3eff985`: corrects shared Ditgar main-section border/padding compensation, aligning titles with descriptions and links. Actual-PDF baseline: 16 failures and five controls; all 21 cases pass after the fix. Final verification passed all 923 PDF tests, package typecheck, and 25 E2E scenarios; all review and static-analysis gates passed. | +| [#2745](https://github.com/reactive-resume/reactive-resume/issues/2745) | [#3446](https://github.com/reactive-resume/reactive-resume/pull/3446) | Merged head `ab0a47bf2`: isolates left-origin zoom coordinates from RTL interface positioning while retaining Arabic dock and per-resume direction. Production-main regression fails with a 1324.8px center error and English control passes; all four UI/resume locale combinations pass after fix at initial load, actual size, and fit-to-view. Build, web typecheck, boundaries, E2E, review, and static-analysis gates passed. | +| [#3275](https://github.com/reactive-resume/reactive-resume/issues/3275) | [#3447](https://github.com/reactive-resume/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/reactive-resume/reactive-resume/issues/3397) | [#3448](https://github.com/reactive-resume/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/reactive-resume/reactive-resume/issues/2751) | [#3449](https://github.com/reactive-resume/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/reactive-resume/reactive-resume/issues/3093) | [#3450](https://github.com/reactive-resume/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/reactive-resume/reactive-resume/issues/3093) | [#3451](https://github.com/reactive-resume/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. | +| [#2828](https://github.com/reactive-resume/reactive-resume/issues/2828) | [#3453](https://github.com/reactive-resume/reactive-resume/pull/3453) | Open head `7fe189f5f`: flushes queued edits and retries the latest draft before leaving the builder; failed saves retain the draft and block SPA navigation. Two real Chromium/PostgreSQL scenarios and 804 web tests pass; independent review clean. Published-head checks all pass, but a valid navigation-wait review finding requires a follow-up; those checks are not final verification of the correction. Original historical loss and simultaneous-tab conflict recovery remain separate open scope. | +| [#3246](https://github.com/reactive-resume/reactive-resume/issues/3246) | [#3454](https://github.com/reactive-resume/reactive-resume/pull/3454) | Open head `c2db4ec8d`: rasterizes the measured contain-fit size at device pixel density, retaining the previous thumbnail during upgrades. All 22 production measurements cover at least 100.18% of displayed pixels; 804 web tests and independent lifecycle review pass. At the snapshot, autofix, Codacy and Greptile pass; E2E and CodeRabbit are pending. Exact original self-hosted screenshot equivalence remains unproven. | ## Product decisions @@ -112,7 +112,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u ## Issue evidence and next actions -### [#3433](https://github.com/amruthpillai/reactive-resume/issues/3433) — First interest keyword missing first letter when it is capital E +### [#3433](https://github.com/reactive-resume/reactive-resume/issues/3433) — First interest keyword missing first letter when it is capital E **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Closed with evidence. @@ -123,13 +123,13 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Existing PR #3386 changes section-heading padding only; affected field paths in sections.tsx:1226 and :1332 do not consume getSectionHeadingTextStyle. No demonstrated duplicate/fix relationship. - Reported v5.2.9 uses renderer 4.8.1 versus current 4.9.0, and PDF.js 6.2.108 versus 6.3.289. Clean detached v5.2.9 with its original frozen dependencies also renders/extracts all eight strings intact in both fields for IBM Plex Serif, Helvetica and IBM Plex Sans: /tmp/v529-fixture-3433-*.pdf. No demonstrated fix across versions; reporter font/styles remain unknown. - Production Chromium (33.8 s) and Firefox 153 on macOS (35.2 s) browser workflows pass: typing 16 fields, DB save, reload and PDF download preserve EDH/EPFL/ADH/BDH/CDH/FDH/EEDH/eDH twice each in Azurill with IBM Plex Serif 400/600. Evidence: /tmp/issue-3433-ui-chromium.json and /tmp/issue-3433-ui-firefox.json. Exact reporter Firefox 155/Linux environment remains unverified; issue comment 5552405183 updated. -- Reporter confirmed on 2026-09-05 that restarting their setup made the problem disappear; issue closed as completed. https://github.com/amruthpillai/reactive-resume/issues/3433#issuecomment-5552950562. No specific code fix established. +- Reporter confirmed on 2026-09-05 that restarting their setup made the problem disappear; issue closed as completed. https://github.com/reactive-resume/reactive-resume/issues/3433#issuecomment-5552950562. No specific code fix established. **Action plan:** - Issue closed after reporter-confirmed recovery. No code fix is attributed to this report. -### [#3401](https://github.com/amruthpillai/reactive-resume/issues/3401) — Remove "Build your own resume" from footer +### [#3401](https://github.com/reactive-resume/reactive-resume/issues/3401) — Remove "Build your own resume" from footer **Assessment:** `product_decision`. **Confidence:** medium. **State:** Closed with evidence. @@ -142,13 +142,13 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3409. No further implementation planned for this report. See evidence for the contribution of each fix. -**Implementation:** [PR #3409](https://github.com/amruthpillai/reactive-resume/pull/3409). Public signup footer is hidden when registration is disabled, as approved. Four public-page tests passed. +**Implementation:** [PR #3409](https://github.com/reactive-resume/reactive-resume/pull/3409). Public signup footer is hidden when registration is disabled, as approved. Four public-page tests passed. **Product/scope note:** User approved hide when registration disabled. -**Related PRs:** [#3409](https://github.com/amruthpillai/reactive-resume/pull/3409) +**Related PRs:** [#3409](https://github.com/reactive-resume/reactive-resume/pull/3409) -### [#3398](https://github.com/amruthpillai/reactive-resume/issues/3398) — MCP OAuth login fails during dynamic client registration with HTTP 500 +### [#3398](https://github.com/reactive-resume/reactive-resume/issues/3398) — MCP OAuth login fails during dynamic client registration with HTTP 500 **Assessment:** `confirmed_bug`. **Confidence:** medium. **State:** Open pending deployment retest and cause confirmation; related OAuth registration fix merged in #3421. @@ -156,13 +156,13 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Same main DCR path as #3392: auth config enables unauthenticated DCR while schema/auth.ts:250-292 omits clientDiscoveryId that installed plugin registration writes. - Cloud exact HTTP response/server log unavailable; do not conflate possible redirect allowlist failure with missing-schema failure. -- Now-merged #3421 covers reproduced schema-related registration HTTP500; cloud cause still needs deployment logs/retest. Linked fix without premature duplicate closure: https://github.com/amruthpillai/reactive-resume/issues/3398#issuecomment-5553215414. +- Now-merged #3421 covers reproduced schema-related registration HTTP500; cloud cause still needs deployment logs/retest. Linked fix without premature duplicate closure: https://github.com/reactive-resume/reactive-resume/issues/3398#issuecomment-5553215414. **Action plan:** - 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 +### [#3397](https://github.com/reactive-resume/reactive-resume/issues/3397) — Allow indentations without list **Assessment:** `feature`. **Confidence:** high. **State:** Open for residual literal-whitespace scope; approved whole-paragraph alternative merged. @@ -178,13 +178,13 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - 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; issue remains open for that residual scope. +**Implementation:** [PR #3448](https://github.com/reactive-resume/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. -**Related PRs:** [#3448](https://github.com/amruthpillai/reactive-resume/pull/3448) +**Related PRs:** [#3448](https://github.com/reactive-resume/reactive-resume/pull/3448) -### [#3393](https://github.com/amruthpillai/reactive-resume/issues/3393) — [Feature] Export job applications as CSV / printable report +### [#3393](https://github.com/reactive-resume/reactive-resume/issues/3393) — [Feature] Export job applications as CSV / printable report **Assessment:** `feature`. **Confidence:** medium. **State:** Closed with evidence. @@ -196,13 +196,13 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3426. No further implementation planned for this report. See evidence for the contribution of each fix. -**Implementation:** [PR #3426](https://github.com/amruthpillai/reactive-resume/pull/3426). CSV exports current filters or all applications with date range, contacts, notes and chronological history. 611 web tests and production browser downloads, owner isolation and mobile header checks pass. +**Implementation:** [PR #3426](https://github.com/reactive-resume/reactive-resume/pull/3426). CSV exports current filters or all applications with date range, contacts, notes and chronological history. 611 web tests and production browser downloads, owner isolation and mobile header checks pass. **Product/scope note:** Scope CSV first; no compliance guarantees. -**Related PRs:** [#3426](https://github.com/amruthpillai/reactive-resume/pull/3426) +**Related PRs:** [#3426](https://github.com/reactive-resume/reactive-resume/pull/3426) -### [#3392](https://github.com/amruthpillai/reactive-resume/issues/3392) — [Bug] MCP OAuth flow is broken end-to-end for self-hosted instances: incomplete oauth-provider schema, wrong resource config option, and callbackURL dropped after login +### [#3392](https://github.com/reactive-resume/reactive-resume/issues/3392) — [Bug] MCP OAuth flow is broken end-to-end for self-hosted instances: incomplete oauth-provider schema, wrong resource config option, and callbackURL dropped after login **Assessment:** `confirmed_bug`. **Confidence:** high. **State:** Closed with evidence. @@ -217,11 +217,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3421. No further implementation planned for this report. See evidence for the contribution of each fix. -**Implementation:** [PR #3421](https://github.com/amruthpillai/reactive-resume/pull/3421). Head `895fec3`: refreshed with current main, preserving both OAuth consent and application-export translations. Four affected package typechecks, 744 web tests, 105 server tests (four opt-in database cases skipped) and locale compilation pass. MCP registration, provider schema and explicit Allow/Deny consent restored; signed queries and repeated resources survive login. 98 server tests with real PostgreSQL and 636 web tests pass. Production OAuth exchanges for both advertised-root and /mcp resources reach MCP initialize HTTP 200; an issued client-audience ID token receives HTTP 401. Intentional service audience aliases retained; production E2E CI passes. +**Implementation:** [PR #3421](https://github.com/reactive-resume/reactive-resume/pull/3421). Head `895fec3`: refreshed with current main, preserving both OAuth consent and application-export translations. Four affected package typechecks, 744 web tests, 105 server tests (four opt-in database cases skipped) and locale compilation pass. MCP registration, provider schema and explicit Allow/Deny consent restored; signed queries and repeated resources survive login. 98 server tests with real PostgreSQL and 636 web tests pass. Production OAuth exchanges for both advertised-root and /mcp resources reach MCP initialize HTTP 200; an issued client-audience ID token receives HTTP 401. Intentional service audience aliases retained; production E2E CI passes. -**Related PRs:** [#3421](https://github.com/amruthpillai/reactive-resume/pull/3421) +**Related PRs:** [#3421](https://github.com/reactive-resume/reactive-resume/pull/3421) -### [#3391](https://github.com/amruthpillai/reactive-resume/issues/3391) — Show Notes on job application detail view +### [#3391](https://github.com/reactive-resume/reactive-resume/issues/3391) — Show Notes on job application detail view **Assessment:** `confirmed_bug`. **Confidence:** high. **State:** Closed with evidence. @@ -233,13 +233,13 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3402. No further implementation planned for this report. See evidence for the contribution of each fix. -**Implementation:** [PR #3402](https://github.com/amruthpillai/reactive-resume/pull/3402). Saved application notes now appear as escaped, wrapping text. Merged by repository owner; issue closed. +**Implementation:** [PR #3402](https://github.com/reactive-resume/reactive-resume/pull/3402). Saved application notes now appear as escaped, wrapping text. Merged by repository owner; issue closed. **Product/scope note:** Implemented and owner-merged in #3402; issue closed. -**Related PRs:** [#3402](https://github.com/amruthpillai/reactive-resume/pull/3402) +**Related PRs:** [#3402](https://github.com/reactive-resume/reactive-resume/pull/3402) -### [#3380](https://github.com/amruthpillai/reactive-resume/issues/3380) — [Bug] First character of a section title is dropped in the builder (e.g. "Experience" renders as "xperience") +### [#3380](https://github.com/reactive-resume/reactive-resume/issues/3380) — [Bug] First character of a section title is dropped in the builder (e.g. "Experience" renders as "xperience") **Assessment:** `existing_pr`. **Confidence:** high. **State:** Closed with evidence. @@ -252,9 +252,9 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3386. No further implementation planned for this report. See evidence for the contribution of each fix. -**Related PRs:** [#3386](https://github.com/amruthpillai/reactive-resume/pull/3386) +**Related PRs:** [#3386](https://github.com/reactive-resume/reactive-resume/pull/3386) -### [#3379](https://github.com/amruthpillai/reactive-resume/issues/3379) — Add option to add company logo to entries +### [#3379](https://github.com/reactive-resume/reactive-resume/issues/3379) — Add option to add company logo to entries **Assessment:** `product_decision`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -268,20 +268,20 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u **Product/scope note:** Needs user product decision. -### [#3378](https://github.com/amruthpillai/reactive-resume/issues/3378) — Option to re add section after accidental deletion +### [#3378](https://github.com/reactive-resume/reactive-resume/issues/3378) — Option to re add section after accidental deletion **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open pending resolution/merge. **Evidence:** - Current layout/pages.tsx:200-214 moves all sections to another page before deleting a page. Layout item menu at 660 offers Move and page-break options, not section deletion. section-menu.tsx:55-65 offers reversible hidden state. -- Current main 0207e5dfc still provides Section options > Show for hidden built-in sections. Posted precise request for version, deletion action and sanitized metadata.layout to distinguish missing layout references: https://github.com/amruthpillai/reactive-resume/issues/3378#issuecomment-5553162647. +- Current main 0207e5dfc still provides Section options > Show for hidden built-in sections. Posted precise request for version, deletion action and sanitized metadata.layout to distinguish missing layout references: https://github.com/reactive-resume/reactive-resume/issues/3378#issuecomment-5553162647. **Action plan:** - Request exact version and deletion action or a sanitized affected JSON. If section IDs are absent from all layout pages, add an explicit unplaced-sections restore control preserving hidden state and items. -### [#3377](https://github.com/amruthpillai/reactive-resume/issues/3377) — Option to not use google fonts (e.g. only local ones) +### [#3377](https://github.com/reactive-resume/reactive-resume/issues/3377) — Option to not use google fonts (e.g. only local ones) **Assessment:** `feature`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -295,7 +295,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u **Product/scope note:** Pending maintainer answer requested in this audit: self-hosted font source, small bundled offline font set, or defer. Standard fonts alone do not prove fully offline rendering. -### [#3374](https://github.com/amruthpillai/reactive-resume/issues/3374) — AI Provider test timeout is too short +### [#3374](https://github.com/reactive-resume/reactive-resume/issues/3374) — AI Provider test timeout is too short **Assessment:** `existing_pr`. **Confidence:** high. **State:** Closed with evidence. @@ -307,9 +307,9 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3384. No further implementation planned for this report. See evidence for the contribution of each fix. -**Related PRs:** [#3384](https://github.com/amruthpillai/reactive-resume/pull/3384) +**Related PRs:** [#3384](https://github.com/reactive-resume/reactive-resume/pull/3384) -### [#3373](https://github.com/amruthpillai/reactive-resume/issues/3373) — Add a Secondary Color +### [#3373](https://github.com/reactive-resume/reactive-resume/issues/3373) — Add a Secondary Color **Assessment:** `product_decision`. **Confidence:** high. **State:** Open pending resolution/merge. @@ -321,7 +321,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Choose which template elements consume secondary color and default migration behavior; then schema, UI, template mappings, import/export and visual tests. -### [#3370](https://github.com/amruthpillai/reactive-resume/issues/3370) — The set-password dialog is one unlabelled field with no confirmation, and a password below the API's documented minimum is dropped in silence +### [#3370](https://github.com/reactive-resume/reactive-resume/issues/3370) — The set-password dialog is one unlabelled field with no confirmation, and a password below the API's documented minimum is dropped in silence **Assessment:** `confirmed_bug`. **Confidence:** high. **State:** Closed with evidence. @@ -334,11 +334,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3407. No further implementation planned for this report. See evidence for the contribution of each fix. -**Implementation:** [PR #3407](https://github.com/amruthpillai/reactive-resume/pull/3407). Labeled password and confirmation dialog validates length/matching and retains failures. 605 web tests, typecheck, and updated browser E2E passed. +**Implementation:** [PR #3407](https://github.com/reactive-resume/reactive-resume/pull/3407). Labeled password and confirmation dialog validates length/matching and retains failures. 605 web tests, typecheck, and updated browser E2E passed. -**Related PRs:** [#3407](https://github.com/amruthpillai/reactive-resume/pull/3407) +**Related PRs:** [#3407](https://github.com/reactive-resume/reactive-resume/pull/3407) -### [#3369](https://github.com/amruthpillai/reactive-resume/issues/3369) — FormControl stamps the label's target id on a non-labelable wrapper, so Slug, Tags and the Sidebar Width slider have no accessible name +### [#3369](https://github.com/reactive-resume/reactive-resume/issues/3369) — FormControl stamps the label's target id on a non-labelable wrapper, so Slug, Tags and the Sidebar Width slider have no accessible name **Assessment:** `existing_pr`. **Confidence:** high. **State:** Closed with evidence. @@ -353,11 +353,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3387, #3424. No further implementation planned for this report. See evidence for the contribution of each fix. -**Implementation:** [PR #3424](https://github.com/amruthpillai/reactive-resume/pull/3424). Connects remaining Basics Website, Picture Size and shared WebsiteField labels. Three missing-name reproductions corrected; 10 DOM tests and web typecheck pass. Complements #3387, whose standalone primitive prop regressions were reproduced and reported on its review. +**Implementation:** [PR #3424](https://github.com/reactive-resume/reactive-resume/pull/3424). Connects remaining Basics Website, Picture Size and shared WebsiteField labels. Three missing-name reproductions corrected; 10 DOM tests and web typecheck pass. Complements #3387, whose standalone primitive prop regressions were reproduced and reported on its review. -**Related PRs:** [#3387](https://github.com/amruthpillai/reactive-resume/pull/3387), [#3424](https://github.com/amruthpillai/reactive-resume/pull/3424) +**Related PRs:** [#3387](https://github.com/reactive-resume/reactive-resume/pull/3387), [#3424](https://github.com/reactive-resume/reactive-resume/pull/3424) -### [#3368](https://github.com/amruthpillai/reactive-resume/issues/3368) — Documented resume bounds are silently coerced instead of rejected: a write outside the published schema returns 200 and stores something the client never sent +### [#3368](https://github.com/reactive-resume/reactive-resume/issues/3368) — Documented resume bounds are silently coerced instead of rejected: a write outside the published schema returns 200 and stores something the client never sent **Assessment:** `confirmed_bug`. **Confidence:** high. **State:** Closed with evidence. @@ -369,11 +369,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3413. No further implementation planned for this report. See evidence for the contribution of each fix. -**Implementation:** [PR #3413](https://github.com/amruthpillai/reactive-resume/pull/3413). Submitted writes reject values outside published bounds while stored reads and historical migrations remain tolerant. Legacy JSON fixtures and schema/API/domain/import suites verified. +**Implementation:** [PR #3413](https://github.com/reactive-resume/reactive-resume/pull/3413). Submitted writes reject values outside published bounds while stored reads and historical migrations remain tolerant. Legacy JSON fixtures and schema/API/domain/import suites verified. -**Related PRs:** [#3413](https://github.com/amruthpillai/reactive-resume/pull/3413) +**Related PRs:** [#3413](https://github.com/reactive-resume/reactive-resume/pull/3413) -### [#3366](https://github.com/amruthpillai/reactive-resume/issues/3366) — The Downloads statistic can never be non-zero: no code path ever increments it +### [#3366](https://github.com/reactive-resume/reactive-resume/issues/3366) — The Downloads statistic can never be non-zero: no code path ever increments it **Assessment:** `confirmed_bug`. **Confidence:** high. **State:** Closed with evidence. @@ -385,13 +385,13 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3414. No further implementation planned for this report. See evidence for the contribution of each fix. -**Implementation:** [PR #3414](https://github.com/amruthpillai/reactive-resume/pull/3414). Head `d99662282`: public PDF downloads record explicit events after browser save initiation. API docs now describe password verification and the HttpOnly access cookie. 348 API tests and scoped Biome checks pass. Existing browser CI verifies PDF bytes, totals/daily downloads and unchanged views. +**Implementation:** [PR #3414](https://github.com/reactive-resume/reactive-resume/pull/3414). Head `d99662282`: public PDF downloads record explicit events after browser save initiation. API docs now describe password verification and the HttpOnly access cookie. 348 API tests and scoped Biome checks pass. Existing browser CI verifies PDF bytes, totals/daily downloads and unchanged views. **Product/scope note:** Requires explicit download event, not render counter. -**Related PRs:** [#3414](https://github.com/amruthpillai/reactive-resume/pull/3414) +**Related PRs:** [#3414](https://github.com/reactive-resume/reactive-resume/pull/3414) -### [#3361](https://github.com/amruthpillai/reactive-resume/issues/3361) — .env in compose.yml +### [#3361](https://github.com/reactive-resume/reactive-resume/issues/3361) — .env in compose.yml **Assessment:** `confirmed_bug`. **Confidence:** high. **State:** Closed with evidence. @@ -403,11 +403,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3411. No further implementation planned for this report. See evidence for the contribution of each fix. -**Implementation:** [PR #3411](https://github.com/amruthpillai/reactive-resume/pull/3411). Compose loads optional .env after sample defaults; docs distinguish repository Compose from standalone quickstart. Both actual configurations verified. +**Implementation:** [PR #3411](https://github.com/reactive-resume/reactive-resume/pull/3411). Compose loads optional .env after sample defaults; docs distinguish repository Compose from standalone quickstart. Both actual configurations verified. -**Related PRs:** [#3411](https://github.com/amruthpillai/reactive-resume/pull/3411) +**Related PRs:** [#3411](https://github.com/reactive-resume/reactive-resume/pull/3411) -### [#3360](https://github.com/amruthpillai/reactive-resume/issues/3360) — Sharing: Add a toggle to disable download feature +### [#3360](https://github.com/reactive-resume/reactive-resume/issues/3360) — Sharing: Add a toggle to disable download feature **Assessment:** `product_decision`. **Confidence:** medium. **State:** Closed with evidence. @@ -419,13 +419,13 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed by merged PR #3419. No further implementation required for this report. -**Implementation:** [PR #3419](https://github.com/amruthpillai/reactive-resume/pull/3419). Merged head `1ba4224c4`: per-resume download-button preference persists, backs up with account data, and hides both public buttons. Final verification passed 777 web tests, 381 API tests, both package typechecks, and 26 E2E scenarios; all review and static-analysis gates passed. +**Implementation:** [PR #3419](https://github.com/reactive-resume/reactive-resume/pull/3419). Merged head `1ba4224c4`: per-resume download-button preference persists, backs up with account data, and hides both public buttons. Final verification passed 777 web tests, 381 API tests, both package typechecks, and 26 E2E scenarios; all review and static-analysis gates passed. **Product/scope note:** User approved; explicitly no limitation explanation in app. -**Related PRs:** [#3419](https://github.com/amruthpillai/reactive-resume/pull/3419) +**Related PRs:** [#3419](https://github.com/reactive-resume/reactive-resume/pull/3419) -### [#3359](https://github.com/amruthpillai/reactive-resume/issues/3359) — Incorrect Link Preview Shows Template CV Instead of User's CV +### [#3359](https://github.com/reactive-resume/reactive-resume/issues/3359) — Incorrect Link Preview Shows Template CV Instead of User's CV **Assessment:** `confirmed_bug`. **Confidence:** high. **State:** Closed with evidence. @@ -437,13 +437,13 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3410. No further implementation planned for this report. See evidence for the contribution of each fix. -**Implementation:** [PR #3410](https://github.com/amruthpillai/reactive-resume/pull/3410). Public social previews use neutral branding instead of a sample identity. Personal title/description remain intact. +**Implementation:** [PR #3410](https://github.com/reactive-resume/reactive-resume/pull/3410). Public social previews use neutral branding instead of a sample identity. Personal title/description remain intact. **Product/scope note:** Neutral preview accepted by original issue; dynamic personal thumbnails can follow later. -**Related PRs:** [#3410](https://github.com/amruthpillai/reactive-resume/pull/3410) +**Related PRs:** [#3410](https://github.com/reactive-resume/reactive-resume/pull/3410) -### [#3352](https://github.com/amruthpillai/reactive-resume/issues/3352) — Level Type Icon does not show the skill level +### [#3352](https://github.com/reactive-resume/reactive-resume/issues/3352) — Level Type Icon does not show the skill level **Assessment:** `confirmed_bug`. **Confidence:** high. **State:** Closed with evidence. @@ -458,11 +458,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3412. No further implementation planned for this report. See evidence for the contribution of each fix. -**Implementation:** [PR #3412](https://github.com/amruthpillai/reactive-resume/pull/3412). SVG icon opacity reaches actual PDF drawing operations; reporter fixture renders distinct ratings. Six graphics-state tests and 689 PDF tests passed. +**Implementation:** [PR #3412](https://github.com/reactive-resume/reactive-resume/pull/3412). SVG icon opacity reaches actual PDF drawing operations; reporter fixture renders distinct ratings. Six graphics-state tests and 689 PDF tests passed. -**Related PRs:** [#3412](https://github.com/amruthpillai/reactive-resume/pull/3412) +**Related PRs:** [#3412](https://github.com/reactive-resume/reactive-resume/pull/3412) -### [#3350](https://github.com/amruthpillai/reactive-resume/issues/3350) — ``Keep together`` also for items | widow & orphan control +### [#3350](https://github.com/reactive-resume/reactive-resume/issues/3350) — ``Keep together`` also for items | widow & orphan control **Assessment:** `feature`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -477,7 +477,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u **Product/scope note:** Pending maintainer answer requested in this audit: per-item Keep together only, explicit widow/orphan UI too, or Semantic CSS only. -### [#3348](https://github.com/amruthpillai/reactive-resume/issues/3348) — Semantic CSS color has no effect on section heading text or icon +### [#3348](https://github.com/reactive-resume/reactive-resume/issues/3348) — Semantic CSS color has no effect on section heading text or icon **Assessment:** `confirmed_bug`. **Confidence:** medium. **State:** Closed with evidence. @@ -489,11 +489,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3415. No further implementation planned for this report. See evidence for the contribution of each fix. -**Implementation:** [PR #3415](https://github.com/amruthpillai/reactive-resume/pull/3415). Semantic section heading and icon colors reach actual PDF drawing commands. Five graphics-state regressions and 688 PDF tests passed. +**Implementation:** [PR #3415](https://github.com/reactive-resume/reactive-resume/pull/3415). Semantic section heading and icon colors reach actual PDF drawing commands. Five graphics-state regressions and 688 PDF tests passed. -**Related PRs:** [#3415](https://github.com/amruthpillai/reactive-resume/pull/3415) +**Related PRs:** [#3415](https://github.com/reactive-resume/reactive-resume/pull/3415) -### [#3347](https://github.com/amruthpillai/reactive-resume/issues/3347) — API endpoint that displays the running version of the software +### [#3347](https://github.com/reactive-resume/reactive-resume/issues/3347) — API endpoint that displays the running version of the software **Assessment:** `confirmed_bug`. **Confidence:** high. **State:** Closed with evidence. @@ -505,13 +505,13 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3404. No further implementation planned for this report. See evidence for the contribution of each fix. -**Implementation:** [PR #3404](https://github.com/amruthpillai/reactive-resume/pull/3404). Health exposes the build version and its endpoint appears in OpenAPI. Public errors are generic; diagnostic details remain in server logs. 74 server tests pass. +**Implementation:** [PR #3404](https://github.com/reactive-resume/reactive-resume/pull/3404). Health exposes the build version and its endpoint appears in OpenAPI. Public errors are generic; diagnostic details remain in server logs. 74 server tests pass. **Product/scope note:** Existing maintainer explicitly approved endpoint version property plus OpenAPI. -**Related PRs:** [#3404](https://github.com/amruthpillai/reactive-resume/pull/3404) +**Related PRs:** [#3404](https://github.com/reactive-resume/reactive-resume/pull/3404) -### [#3344](https://github.com/amruthpillai/reactive-resume/issues/3344) — Bullet point remains on first page if bullet is moved to next page +### [#3344](https://github.com/reactive-resume/reactive-resume/issues/3344) — Bullet point remains on first page if bullet is moved to next page **Assessment:** `confirmed_bug`. **Confidence:** high. **State:** Closed with evidence. @@ -528,11 +528,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed after repository owner merged PR #3443. Retain scoped regression coverage; hosted availability depends on deployment. -**Implementation:** [PR #3443](https://github.com/amruthpillai/reactive-resume/pull/3443). Head `45a38fdc9`: synchronized with main including continuation margins; 81 combined list/page-margin regressions and all 894 PDF tests pass. Scoped React PDF layout patch keeps list markers with their first text fragments, respecting orphan counts, reordering, RTL and explicit pagination hints. 36 targeted cases pass; current-main failure reproduced, single-page raster byte-identical. All CI checks pass on synchronized head. Independent review clean; 36 focused tests and a separate 250-word content-break probe pass. Extreme orphan/font-size limitations also reproduce on unchanged main. Repository owner merged this PR; issue closed. +**Implementation:** [PR #3443](https://github.com/reactive-resume/reactive-resume/pull/3443). Head `45a38fdc9`: synchronized with main including continuation margins; 81 combined list/page-margin regressions and all 894 PDF tests pass. Scoped React PDF layout patch keeps list markers with their first text fragments, respecting orphan counts, reordering, RTL and explicit pagination hints. 36 targeted cases pass; current-main failure reproduced, single-page raster byte-identical. All CI checks pass on synchronized head. Independent review clean; 36 focused tests and a separate 250-word content-break probe pass. Extreme orphan/font-size limitations also reproduce on unchanged main. Repository owner merged this PR; issue closed. -**Related PRs:** [#3178](https://github.com/amruthpillai/reactive-resume/pull/3178), [#3236](https://github.com/amruthpillai/reactive-resume/pull/3236), [#3443](https://github.com/amruthpillai/reactive-resume/pull/3443) +**Related PRs:** [#3178](https://github.com/reactive-resume/reactive-resume/pull/3178), [#3236](https://github.com/reactive-resume/reactive-resume/pull/3236), [#3443](https://github.com/reactive-resume/reactive-resume/pull/3443) -### [#3343](https://github.com/amruthpillai/reactive-resume/issues/3343) — Skill level icons not aligned horizontally when having multiple columns per row with different amount of lines for keywords +### [#3343](https://github.com/reactive-resume/reactive-resume/issues/3343) — Skill level icons not aligned horizontally when having multiple columns per row with different amount of lines for keywords **Assessment:** `product_decision`. **Confidence:** high. **State:** Closed with evidence. @@ -546,13 +546,13 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3437. No further implementation planned for this report. See evidence for the contribution of each fix. -**Implementation:** [PR #3437](https://github.com/amruthpillai/reactive-resume/pull/3437). Head `d154f31b8`: skill ratings align at the bottom of each multi-column row by default. Nine actual-PDF regressions and all 692 PDF tests pass. Single-column raster is byte-identical; CI and review approved. +**Implementation:** [PR #3437](https://github.com/reactive-resume/reactive-resume/pull/3437). Head `d154f31b8`: skill ratings align at the bottom of each multi-column row by default. Nine actual-PDF regressions and all 692 PDF tests pass. Single-column raster is byte-identical; CI and review approved. **Product/scope note:** User approved row-bottom skill-rating alignment. Implemented in owner-merged PR #3437; issue closed. -**Related PRs:** [#3358](https://github.com/amruthpillai/reactive-resume/pull/3358), [#3437](https://github.com/amruthpillai/reactive-resume/pull/3437) +**Related PRs:** [#3358](https://github.com/reactive-resume/reactive-resume/pull/3358), [#3437](https://github.com/reactive-resume/reactive-resume/pull/3437) -### [#3341](https://github.com/amruthpillai/reactive-resume/issues/3341) — Icons of Basics are offset vertically lower than following text +### [#3341](https://github.com/reactive-resume/reactive-resume/issues/3341) — Icons of Basics are offset vertically lower than following text **Assessment:** `duplicate`. **Confidence:** high. **State:** Closed with evidence. @@ -565,7 +565,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Consolidate into #3249 while retaining provided IBM Plex Sans Condensed JSON; raster comparison across fonts and header/section/item icons remains needed. -### [#3340](https://github.com/amruthpillai/reactive-resume/issues/3340) — Hyphenation defunct +### [#3340](https://github.com/reactive-resume/reactive-resume/issues/3340) — Hyphenation defunct **Assessment:** `confirmed_bug`. **Confidence:** high. **State:** Closed with evidence. @@ -579,13 +579,13 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3435. No further implementation planned for this report. See evidence for the contribution of each fix. -**Implementation:** [PR #3435](https://github.com/amruthpillai/reactive-resume/pull/3435). Head `27c17d8c1`: approved opt-in German hyphenation preserves default-off output and per-document isolation. 722 PDF tests across 59 files including 11 actual-PDF cases, 111 schema tests, 599 web tests, three package typechecks and production builds pass. Four Chromium locale/toggle exports, built-server PDF parity and exact shipped third-party notices verified. +**Implementation:** [PR #3435](https://github.com/reactive-resume/reactive-resume/pull/3435). Head `27c17d8c1`: approved opt-in German hyphenation preserves default-off output and per-document isolation. 722 PDF tests across 59 files including 11 actual-PDF cases, 111 schema tests, 599 web tests, three package typechecks and production builds pass. Four Chromium locale/toggle exports, built-server PDF parity and exact shipped third-party notices verified. **Product/scope note:** User approved opt-in per-resume German hyphenation using resume locale; missing/false preserves existing output. Implemented and owner-merged in PR #3435, head 27c17d8c1. -**Related PRs:** [#3435](https://github.com/amruthpillai/reactive-resume/pull/3435) +**Related PRs:** [#3435](https://github.com/reactive-resume/reactive-resume/pull/3435) -### [#3339](https://github.com/amruthpillai/reactive-resume/issues/3339) — Headline does not respect horizontal margin setting +### [#3339](https://github.com/reactive-resume/reactive-resume/issues/3339) — Headline does not respect horizontal margin setting **Assessment:** `confirmed_bug`. **Confidence:** high. **State:** Closed with evidence. @@ -598,11 +598,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3408. No further implementation planned for this report. See evidence for the contribution of each fix. -**Implementation:** [PR #3408](https://github.com/amruthpillai/reactive-resume/pull/3408). Onyx headlines wrap within page margins. Three actual-PDF regressions and 686 PDF tests passed. +**Implementation:** [PR #3408](https://github.com/reactive-resume/reactive-resume/pull/3408). Onyx headlines wrap within page margins. Three actual-PDF regressions and 686 PDF tests passed. -**Related PRs:** [#3408](https://github.com/amruthpillai/reactive-resume/pull/3408) +**Related PRs:** [#3408](https://github.com/reactive-resume/reactive-resume/pull/3408) -### [#3338](https://github.com/amruthpillai/reactive-resume/issues/3338) — Education: If no Area of Study given, Location and Period jump to the left edge +### [#3338](https://github.com/reactive-resume/reactive-resume/issues/3338) — Education: If no Area of Study given, Location and Period jump to the left edge **Assessment:** `confirmed_bug`. **Confidence:** high. **State:** Closed with evidence. @@ -615,11 +615,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3406. No further implementation planned for this report. See evidence for the contribution of each fix. -**Implementation:** [PR #3406](https://github.com/amruthpillai/reactive-resume/pull/3406). Dates align correctly when the opposite optional field is blank. Four actual-PDF layout regressions and 687 PDF tests passed. +**Implementation:** [PR #3406](https://github.com/reactive-resume/reactive-resume/pull/3406). Dates align correctly when the opposite optional field is blank. Four actual-PDF layout regressions and 687 PDF tests passed. -**Related PRs:** [#3406](https://github.com/amruthpillai/reactive-resume/pull/3406) +**Related PRs:** [#3406](https://github.com/reactive-resume/reactive-resume/pull/3406) -### [#3337](https://github.com/amruthpillai/reactive-resume/issues/3337) — Vertical margin not respected when item spans across pages in 2-column templates +### [#3337](https://github.com/reactive-resume/reactive-resume/issues/3337) — Vertical margin not respected when item spans across pages in 2-column templates **Assessment:** `confirmed_bug`. **Confidence:** high. **State:** Closed with evidence. @@ -635,11 +635,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3422. No further implementation planned for this report. See evidence for the contribution of each fix. -**Implementation:** [PR #3422](https://github.com/amruthpillai/reactive-resume/pull/3422). PDF page padding repeats across overflow while preserving template backgrounds; 45 actual-PDF geometry/raster cases pass; template background review claims checked against main and resolved styles. +**Implementation:** [PR #3422](https://github.com/reactive-resume/reactive-resume/pull/3422). PDF page padding repeats across overflow while preserving template backgrounds; 45 actual-PDF geometry/raster cases pass; template background review claims checked against main and resolved styles. -**Related PRs:** [#3422](https://github.com/amruthpillai/reactive-resume/pull/3422) +**Related PRs:** [#3422](https://github.com/reactive-resume/reactive-resume/pull/3422) -### [#3334](https://github.com/amruthpillai/reactive-resume/issues/3334) — Import a PDF resume without requiring an AI provider +### [#3334](https://github.com/reactive-resume/reactive-resume/issues/3334) — Import a PDF resume without requiring an AI provider **Assessment:** `existing_pr`. **Confidence:** medium. **State:** Closed with evidence. @@ -654,9 +654,9 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u **Product/scope note:** PR #3400 merged at head `d23d7566d`; hosted availability depends on deployment. -**Related PRs:** [#3400](https://github.com/amruthpillai/reactive-resume/pull/3400) +**Related PRs:** [#3400](https://github.com/reactive-resume/reactive-resume/pull/3400) -### [#3323](https://github.com/amruthpillai/reactive-resume/issues/3323) — I am able to download resume but unable to get the content/data that I have added in the template +### [#3323](https://github.com/reactive-resume/reactive-resume/issues/3323) — I am able to download resume but unable to get the content/data that I have added in the template **Assessment:** `needs_reproduction`. **Confidence:** low. **State:** Open pending resolution/merge. @@ -669,7 +669,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Obtain sanitized input/output and exact version/download path; compare server stored resume and PDF extraction before selecting owner. -### [#3312](https://github.com/amruthpillai/reactive-resume/issues/3312) — [Bug] INTERNAL SERVER ERROR on Application Copilot section +### [#3312](https://github.com/reactive-resume/reactive-resume/issues/3312) — [Bug] <title>INTERNAL SERVER ERROR on Application Copilot section **Assessment:** `existing_pr`. **Confidence:** high. **State:** Closed with evidence. @@ -682,9 +682,9 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3333. No further implementation planned for this report. See evidence for the contribution of each fix. -**Related PRs:** [#3333](https://github.com/amruthpillai/reactive-resume/pull/3333) +**Related PRs:** [#3333](https://github.com/reactive-resume/reactive-resume/pull/3333) -### [#3311](https://github.com/amruthpillai/reactive-resume/issues/3311) — [Bug] Basics box on Glalie doesn't have formatting +### [#3311](https://github.com/reactive-resume/reactive-resume/issues/3311) — [Bug] Basics box on Glalie doesn't have formatting **Assessment:** `already_fixed`. **Confidence:** high. **State:** Closed with evidence. @@ -693,15 +693,15 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - GlaliePage.tsx:244-250 deliberately fixes contactList borderRadius to 0. Commit c1d11236a / merged PR #3121 removed inherited picture.borderRadius to resolve #3119. - Current Semantic CSS has contact-list node; lack of old picture-radius coupling is intentional. - Actual Glalie PDFs on unchanged main e549d114e verify contact-list { border-radius: 12pt; } rounds all corners; background-color and border width/color also render. Four PDF fixtures visually inspected; picture styles remain identical under contact CSS, and picture radius/size/rotation changes leave contact styles unchanged. /tmp/issue-3311-reproduction/results.json. -- Closed completed with tested Semantic CSS guidance, activation step and official documentation: https://github.com/amruthpillai/reactive-resume/issues/3311#issuecomment-5552427620. +- Closed completed with tested Semantic CSS guidance, activation step and official documentation: https://github.com/reactive-resume/reactive-resume/issues/3311#issuecomment-5552427620. **Action plan:** - Closed with current supported formatting evidence; no dedicated-control requirement inferred and no picture-radius coupling restored. Reopen only with a minimal failing current-version fixture. -**Related PRs:** [#3121](https://github.com/amruthpillai/reactive-resume/pull/3121) +**Related PRs:** [#3121](https://github.com/reactive-resume/reactive-resume/pull/3121) -### [#3305](https://github.com/amruthpillai/reactive-resume/issues/3305) — [Bug] Input validation failed when uploading photo to resume +### [#3305](https://github.com/reactive-resume/reactive-resume/issues/3305) — [Bug] Input validation failed when uploading photo to resume **Assessment:** `confirmed_bug`. **Confidence:** high. **State:** Closed with evidence. @@ -715,11 +715,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3420. No further implementation planned for this report. See evidence for the contribution of each fix. -**Implementation:** [PR #3420](https://github.com/amruthpillai/reactive-resume/pull/3420). JPEG/WebP encoding is preserved and oversized crops shrink proportionally until within 10MiB. Near-limit JPEG browser reproduction now uploads successfully; transparency is preserved for PNG/WebP. Validation errors explain the upload limit. +**Implementation:** [PR #3420](https://github.com/reactive-resume/reactive-resume/pull/3420). JPEG/WebP encoding is preserved and oversized crops shrink proportionally until within 10MiB. Near-limit JPEG browser reproduction now uploads successfully; transparency is preserved for PNG/WebP. Validation errors explain the upload limit. -**Related PRs:** [#3420](https://github.com/amruthpillai/reactive-resume/pull/3420) +**Related PRs:** [#3420](https://github.com/reactive-resume/reactive-resume/pull/3420) -### [#3291](https://github.com/amruthpillai/reactive-resume/issues/3291) — [Bug] color picker visual bug +### [#3291](https://github.com/reactive-resume/reactive-resume/issues/3291) — [Bug] color picker visual bug **Assessment:** `confirmed_bug`. **Confidence:** high. **State:** Closed with evidence. @@ -732,13 +732,13 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3431. No further implementation planned for this report. See evidence for the contribution of each fix. -**Implementation:** [PR #3431](https://github.com/amruthpillai/reactive-resume/pull/3431). Head `b15f4983b`: color picker tracks current CSS through repeated presets, external edits and undo; spaced RGB/HSL tokens regain swatches. Approved hex output preserves optional alpha and named/modern RGB roundtrips. 78 focused tests and four previously verified production browser scenarios pass; all review feedback resolved. +**Implementation:** [PR #3431](https://github.com/reactive-resume/reactive-resume/pull/3431). Head `b15f4983b`: color picker tracks current CSS through repeated presets, external edits and undo; spaced RGB/HSL tokens regain swatches. Approved hex output preserves optional alpha and named/modern RGB roundtrips. 78 focused tests and four previously verified production browser scenarios pass; all review feedback resolved. **Product/scope note:** User-approved hex output with alpha when needed was implemented and owner-merged in #3431 at b15f4983b. -**Related PRs:** [#3293](https://github.com/amruthpillai/reactive-resume/pull/3293), [#3431](https://github.com/amruthpillai/reactive-resume/pull/3431) +**Related PRs:** [#3293](https://github.com/reactive-resume/reactive-resume/pull/3293), [#3431](https://github.com/reactive-resume/reactive-resume/pull/3431) -### [#3290](https://github.com/amruthpillai/reactive-resume/issues/3290) — [Bug] resume preview unavailable and download. All the pages are black +### [#3290](https://github.com/reactive-resume/reactive-resume/issues/3290) — [Bug] resume preview unavailable and download. All the pages are black **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -751,7 +751,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Obtain sanitized JSON, downloaded PDF and current browser/version; inspect actual PDF color operators/style/background and font failures. -### [#3285](https://github.com/amruthpillai/reactive-resume/issues/3285) — [Bug] Semantic CSS parity check fails on skill keyword lists (gengar template) due to legacy renderer's phantom empty text node +### [#3285](https://github.com/reactive-resume/reactive-resume/issues/3285) — [Bug] Semantic CSS parity check fails on skill keyword lists (gengar template) due to legacy renderer's phantom empty text node **Assessment:** `already_fixed`. **Confidence:** high. **State:** Closed with evidence. @@ -763,9 +763,9 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3289, #3316. No further implementation planned for this report. See evidence for the contribution of each fix. -**Related PRs:** [#3289](https://github.com/amruthpillai/reactive-resume/pull/3289), [#3316](https://github.com/amruthpillai/reactive-resume/pull/3316) +**Related PRs:** [#3289](https://github.com/reactive-resume/reactive-resume/pull/3289), [#3316](https://github.com/reactive-resume/reactive-resume/pull/3316) -### [#3275](https://github.com/amruthpillai/reactive-resume/issues/3275) — [Bug] RTL resumes render incorrectly +### [#3275](https://github.com/reactive-resume/reactive-resume/issues/3275) — [Bug] RTL resumes render incorrectly **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open for broader exported-PDF reproduction; related builder-canvas fix merged. @@ -780,11 +780,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Repository owner merged PR #3447 after all CI checks passed. Continue reproducing broader historical exported-PDF claims with exact fixtures; the builder canvas fix does not establish their causes. -**Implementation:** [PR #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. +**Implementation:** [PR #3447](https://github.com/reactive-resume/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. -**Related PRs:** [#3099](https://github.com/amruthpillai/reactive-resume/pull/3099), [#3158](https://github.com/amruthpillai/reactive-resume/pull/3158), [#3331](https://github.com/amruthpillai/reactive-resume/pull/3331), [#3447](https://github.com/amruthpillai/reactive-resume/pull/3447) +**Related PRs:** [#3099](https://github.com/reactive-resume/reactive-resume/pull/3099), [#3158](https://github.com/reactive-resume/reactive-resume/pull/3158), [#3331](https://github.com/reactive-resume/reactive-resume/pull/3331), [#3447](https://github.com/reactive-resume/reactive-resume/pull/3447) -### [#3272](https://github.com/amruthpillai/reactive-resume/issues/3272) — [Bug] No Cover Letter header in Firefox and Chromium on Linux Mint +### [#3272](https://github.com/reactive-resume/reactive-resume/issues/3272) — [Bug] No Cover Letter header in Firefox and Chromium on Linux Mint **Assessment:** `product_decision`. **Confidence:** high. **State:** Closed by product decision (not planned). @@ -792,7 +792,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - CoverLetterSection in packages/pdf/src/templates/shared/sections.tsx:1441 hardcodes showHeading=false. semantic/tree.ts:431-434 intentionally omits cover-letter heading. - Cover-letter export removes resume chrome (8570c1c70); identical behavior across platforms, not Firefox/Linux rendering failure. -- Verified current CoverLetterSection omits the heading while retaining recipient and content. Closed as not planned with the user-approved explanation: https://github.com/amruthpillai/reactive-resume/issues/3272#issuecomment-5552512328. +- Verified current CoverLetterSection omits the heading while retaining recipient and content. Closed as not planned with the user-approved explanation: https://github.com/reactive-resume/reactive-resume/issues/3272#issuecomment-5552512328. **Action plan:** @@ -800,7 +800,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u **Product/scope note:** User approved retaining omitted cover-letter section headings; explained intentional cross-browser behavior and closed as not planned. -### [#3265](https://github.com/amruthpillai/reactive-resume/issues/3265) — [Bug] The sections do not appear in the design +### [#3265](https://github.com/reactive-resume/reactive-resume/issues/3265) — [Bug] The sections do not appear in the design **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -813,7 +813,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Reproduce screenshot with source JSON; distinguish empty/hidden section filtering from missing drag targets and source layout corruption. -### [#3255](https://github.com/amruthpillai/reactive-resume/issues/3255) — [Feature] Add a "Cover Letters" section for managing and exporting generated cover letters +### [#3255](https://github.com/reactive-resume/reactive-resume/issues/3255) — [Feature] Add a "Cover Letters" section for managing and exporting generated cover letters **Assessment:** `product_decision`. **Confidence:** medium. **State:** Closed with evidence. @@ -826,13 +826,13 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Resolved in owner-merged PR #3423: shared library/builder stores independent owned documents, copies selected resume styling and supports explicit styling refresh. Application attachments remain exported snapshots. -**Implementation:** [PR #3423](https://github.com/amruthpillai/reactive-resume/pull/3423). Approved shared library with copied resume styling, explicit refresh, retained conflict drafts, JSON/PDF export and application snapshots. Three production browser scenarios, 325 API tests, 598 web tests and combined migrations verified; browser CI and autofix pass. Codacy applies a SQL Server-only rule to the PostgreSQL migration. +**Implementation:** [PR #3423](https://github.com/reactive-resume/reactive-resume/pull/3423). Approved shared library with copied resume styling, explicit refresh, retained conflict drafts, JSON/PDF export and application snapshots. Three production browser scenarios, 325 API tests, 598 web tests and combined migrations verified; browser CI and autofix pass. Codacy applies a SQL Server-only rule to the PostgreSQL migration. **Product/scope note:** Approved and implemented in #3423: independently saved cover-letter library with copied resume styling and explicit refresh. Library and builder edit the shared document; applications attach exported snapshots. -**Related PRs:** [#3395](https://github.com/amruthpillai/reactive-resume/pull/3395), [#3423](https://github.com/amruthpillai/reactive-resume/pull/3423) +**Related PRs:** [#3395](https://github.com/reactive-resume/reactive-resume/pull/3395), [#3423](https://github.com/reactive-resume/reactive-resume/pull/3423) -### [#3251](https://github.com/amruthpillai/reactive-resume/issues/3251) — [Bug] <title>Missing hover state styling on the builder download button +### [#3251](https://github.com/reactive-resume/reactive-resume/issues/3251) — [Bug] <title>Missing hover state styling on the builder download button **Assessment:** `confirmed_bug`. **Confidence:** high. **State:** Closed with evidence. @@ -845,11 +845,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3405. No further implementation planned for this report. See evidence for the contribution of each fix. -**Implementation:** [PR #3405](https://github.com/amruthpillai/reactive-resume/pull/3405). Primary button hover applies to native buttons and links. Compiled Tailwind behavior verified. +**Implementation:** [PR #3405](https://github.com/reactive-resume/reactive-resume/pull/3405). Primary button hover applies to native buttons and links. Compiled Tailwind behavior verified. -**Related PRs:** [#3405](https://github.com/amruthpillai/reactive-resume/pull/3405) +**Related PRs:** [#3405](https://github.com/reactive-resume/reactive-resume/pull/3405) -### [#3249](https://github.com/amruthpillai/reactive-resume/issues/3249) — [Bug] multiple fonts are improperly aligned vertically +### [#3249](https://github.com/reactive-resume/reactive-resume/issues/3249) — [Bug] multiple fonts are improperly aligned vertically **Assessment:** `confirmed_bug`. **Confidence:** high. **State:** Open for remaining Ropa Sans reproduction; reproduced font-metric fix merged in #3430. @@ -869,11 +869,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - PR #3430 was merged by the repository owner on 2026-09-05; retain Ropa Sans limitation and keep the issue open until that separate historical report is reproduced. -**Implementation:** [PR #3430](https://github.com/amruthpillai/reactive-resume/pull/3430). Head `50bac62ed`: font metrics respect USE_TYPO_METRICS while preserving CJK fallbacks, including the selectable Noto Sans HK review correction. 699 PDF tests and 16 actual-font cases pass. Exact Roboto Condensed and controlled IBM fixtures improve; current Ropa Sans remains unchanged and historical optical alignment scope stays separate. +**Implementation:** [PR #3430](https://github.com/reactive-resume/reactive-resume/pull/3430). Head `50bac62ed`: font metrics respect USE_TYPO_METRICS while preserving CJK fallbacks, including the selectable Noto Sans HK review correction. 699 PDF tests and 16 actual-font cases pass. Exact Roboto Condensed and controlled IBM fixtures improve; current Ropa Sans remains unchanged and historical optical alignment scope stays separate. -**Related PRs:** [#3430](https://github.com/amruthpillai/reactive-resume/pull/3430) +**Related PRs:** [#3430](https://github.com/reactive-resume/reactive-resume/pull/3430) -### [#3247](https://github.com/amruthpillai/reactive-resume/issues/3247) — [Feature] More viewing options on the résumé page. +### [#3247](https://github.com/reactive-resume/reactive-resume/issues/3247) — [Feature] More viewing options on the résumé page. **Assessment:** `feature`. **Confidence:** medium. **State:** Closed with evidence. @@ -886,13 +886,13 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3425. No further implementation planned for this report. See evidence for the contribution of each fix. -**Implementation:** [PR #3425](https://github.com/amruthpillai/reactive-resume/pull/3425). Adds compact thumbnails and per-account tab-session Grid/Compact/List preference. Five hook tests plus production browser navigation, reload, explicit URL override and mobile sizing pass. +**Implementation:** [PR #3425](https://github.com/reactive-resume/reactive-resume/pull/3425). Adds compact thumbnails and per-account tab-session Grid/Compact/List preference. Five hook tests plus production browser navigation, reload, explicit URL override and mobile sizing pass. **Product/scope note:** Requires small layout choice; existing thumbnail quality issue #3246 stays separate. -**Related PRs:** [#3425](https://github.com/amruthpillai/reactive-resume/pull/3425) +**Related PRs:** [#3425](https://github.com/reactive-resume/reactive-resume/pull/3425) -### [#3246](https://github.com/amruthpillai/reactive-resume/issues/3246) — [Bug] The thumbnails are appearing in low quality. +### [#3246](https://github.com/reactive-resume/reactive-resume/issues/3246) — [Bug] The thumbnails are appearing in low quality. **Assessment:** `confirmed_bug`. **Confidence:** high for current thumbnail undersampling. **State:** Open; independently reviewed fix #3454 awaits checks/review. Exact original self-hosted environment remains unverified. @@ -908,11 +908,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Follow #3454 hosted checks and owner review, then re-test the reported self-hosted deployment at its actual card size/DPR before attributing the original screenshot or closing it. Preserve the canvas budget and verify both fresh and cached views. -**Implementation:** [PR #3454](https://github.com/amruthpillai/reactive-resume/pull/3454), open head `c2db4ec8de2c46aed6447fba66331b8349edbfb5`. Fixes demonstrated current undersampling; no claim that the reporter's unavailable environment was reproduced exactly. +**Implementation:** [PR #3454](https://github.com/reactive-resume/reactive-resume/pull/3454), open head `c2db4ec8de2c46aed6447fba66331b8349edbfb5`. Fixes demonstrated current undersampling; no claim that the reporter's unavailable environment was reproduced exactly. -**Related PRs:** [#3454](https://github.com/amruthpillai/reactive-resume/pull/3454) +**Related PRs:** [#3454](https://github.com/reactive-resume/reactive-resume/pull/3454) -### [#3200](https://github.com/amruthpillai/reactive-resume/issues/3200) — [Feature] Removing Titles or Headlines - e.g. "Summary" / "Experience" +### [#3200](https://github.com/reactive-resume/reactive-resume/issues/3200) — [Feature] Removing Titles or Headlines - e.g. "Summary" / "Experience" **Assessment:** `already_fixed`. **Confidence:** high. **State:** Closed with evidence. @@ -926,9 +926,9 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Request is satisfied through current in-builder Semantic CSS for PDF preview/export; no additional implementation needed. -**Related PRs:** [#3274](https://github.com/amruthpillai/reactive-resume/pull/3274) +**Related PRs:** [#3274](https://github.com/reactive-resume/reactive-resume/pull/3274) -### [#3196](https://github.com/amruthpillai/reactive-resume/issues/3196) — [Bug] The table have not rows and columms +### [#3196](https://github.com/reactive-resume/reactive-resume/issues/3196) — [Bug] The table have not rows and columms **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open for original missing-border reproduction; separate imported-content fix merged in #3438. @@ -938,17 +938,17 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Original screenshot inspected directly: table text is visible in three columns but grid lines are absent. Exact HTML/JSON is still missing, so a content-loss reproduction is not evidence that its border problem is fixed. - Separate regression found and fixed in PR #3438, head 165535b5f: rich-text fields containing bare table cells or raw text in unknown wrappers lacked a semantic host and disappeared in Semantic CSS mode. Three actual-PDF cases failed before the fix; all seven regression cases pass afterward. All 690 PDF tests across 58 files, typecheck, boundaries, formatting and production builds pass. - Production Chromium JSON import, unrelated edit, save/reload and PDF export fails before the fix and passes afterward in 11.9 s; table cell coordinates and browser preview verified. Artifacts: /tmp/rr-3196-imported-table.pdf and /tmp/rr-3196-imported-table.png. -- Issue follow-up https://github.com/amruthpillai/reactive-resume/issues/3196#issuecomment-5552909919 links merged PR #3438 as a separate regression and requests the exact JSON/HTML, inline table styles, version, and template needed to diagnose the still-open border report. +- Issue follow-up https://github.com/reactive-resume/reactive-resume/issues/3196#issuecomment-5552909919 links merged PR #3438 as a separate regression and requests the exact JSON/HTML, inline table styles, version, and template needed to diagnose the still-open border report. **Action plan:** - PR #3438 is owner-merged as a separate imported-content regression. Keep #3196 open for its original missing-border behavior; obtain original JSON/HTML, including inline styles and table attributes, and distinguish renderer border handling from editor normalization. The custom heading concern is covered by verified Semantic CSS guidance from #3200. -**Implementation:** [PR #3438](https://github.com/amruthpillai/reactive-resume/pull/3438). Head `165535b5f`: preserves imported rich text without individually addressable semantic descendants. Seven actual-PDF regressions, all 690 PDF tests and a production import/save/reload/export reproduction pass. Original missing-border report remains open; this is a separate regression discovered during its investigation. +**Implementation:** [PR #3438](https://github.com/reactive-resume/reactive-resume/pull/3438). Head `165535b5f`: preserves imported rich text without individually addressable semantic descendants. Seven actual-PDF regressions, all 690 PDF tests and a production import/save/reload/export reproduction pass. Original missing-border report remains open; this is a separate regression discovered during its investigation. -**Related PRs:** [#3438](https://github.com/amruthpillai/reactive-resume/pull/3438) +**Related PRs:** [#3438](https://github.com/reactive-resume/reactive-resume/pull/3438) -### [#3181](https://github.com/amruthpillai/reactive-resume/issues/3181) — [Bug] Move resumes from v4 to v5 again +### [#3181](https://github.com/reactive-resume/reactive-resume/issues/3181) — [Bug] Move resumes from v4 to v5 again **Assessment:** `product_decision`. **Confidence:** high. **State:** Open pending resolution/merge. @@ -961,7 +961,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Ask maintainer operational policy for v4 retention/recovery; inspect available backups/account mapping privately with authorization; never rerun data migration blindly. -### [#3180](https://github.com/amruthpillai/reactive-resume/issues/3180) — [Bug] Blank page with empty section remains +### [#3180](https://github.com/reactive-resume/reactive-resume/issues/3180) — [Bug] Blank page with empty section remains **Assessment:** `confirmed_bug`. **Confidence:** high. **State:** Closed with evidence. @@ -975,11 +975,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3417. No further implementation planned for this report. See evidence for the contribution of each fix. -**Implementation:** [PR #3417](https://github.com/amruthpillai/reactive-resume/pull/3417). Moving items validates destinations and prunes only emptied custom source sections and affected empty pages; exact round-trip JSON, undo, 605 web tests and typecheck verified. +**Implementation:** [PR #3417](https://github.com/reactive-resume/reactive-resume/pull/3417). Moving items validates destinations and prunes only emptied custom source sections and affected empty pages; exact round-trip JSON, undo, 605 web tests and typecheck verified. -**Related PRs:** [#3188](https://github.com/amruthpillai/reactive-resume/pull/3188), [#3417](https://github.com/amruthpillai/reactive-resume/pull/3417) +**Related PRs:** [#3188](https://github.com/reactive-resume/reactive-resume/pull/3188), [#3417](https://github.com/reactive-resume/reactive-resume/pull/3417) -### [#3175](https://github.com/amruthpillai/reactive-resume/issues/3175) — [Bug] Long section overflow onto next page does not respect page top margin +### [#3175](https://github.com/reactive-resume/reactive-resume/issues/3175) — [Bug] Long section overflow onto next page does not respect page top margin **Assessment:** `confirmed_bug`. **Confidence:** high. **State:** Closed with evidence. @@ -996,11 +996,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Resolved in merged PR #3422; regression suite covers Ditto physical page margins and headerless/full-width layouts. -**Implementation:** [PR #3422](https://github.com/amruthpillai/reactive-resume/pull/3422). Shared continuation-margin fix covers five affected templates, explicit headerless pages and full-width pages. +**Implementation:** [PR #3422](https://github.com/reactive-resume/reactive-resume/pull/3422). Shared continuation-margin fix covers five affected templates, explicit headerless pages and full-width pages. -**Related PRs:** [#3422](https://github.com/amruthpillai/reactive-resume/pull/3422) +**Related PRs:** [#3422](https://github.com/reactive-resume/reactive-resume/pull/3422) -### [#3174](https://github.com/amruthpillai/reactive-resume/issues/3174) — [Bug] Inputting a large line height causes custom rules deletion +### [#3174](https://github.com/reactive-resume/reactive-resume/issues/3174) — [Bug] Inputting a large line height causes custom rules deletion **Assessment:** `already_fixed`. **Confidence:** high. **State:** Closed with evidence. @@ -1009,15 +1009,15 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Legacy numeric custom-style inputs clamp line height to 0.5–4 in merged PR #3262 / commit 2a0782517c55266ea20d7ac749821f3a7a90896d. - Current Semantic CSS production browser probe passed in 7.0 s: line-height: 5 and an unrelated rule persist through save/reload; invalid line-height shows an explicit diagnostic and preserves authored source. Artifact /tmp/issue-3174-browser-evidence.json; report /tmp/reactive-resume-review-3174.md. - Legacy JSON filtering remains unchanged; PR #3413 does not reject legacy style-rule bounds. Its explicit write regression passed. -- Closed as completed on 2026-09-05 at 14:21:57 UTC with a verified scoped comment: https://github.com/amruthpillai/reactive-resume/issues/3174#issuecomment-5552437914. +- Closed as completed on 2026-09-05 at 14:21:57 UTC with a verified scoped comment: https://github.com/reactive-resume/reactive-resume/issues/3174#issuecomment-5552437914. **Action plan:** - Completed: posted scoped verified closure; current editor behavior resolved, legacy JSON compatibility accurately disclosed. -**Related PRs:** [#3241](https://github.com/amruthpillai/reactive-resume/pull/3241), [#3262](https://github.com/amruthpillai/reactive-resume/pull/3262), [#3274](https://github.com/amruthpillai/reactive-resume/pull/3274) +**Related PRs:** [#3241](https://github.com/reactive-resume/reactive-resume/pull/3241), [#3262](https://github.com/reactive-resume/reactive-resume/pull/3262), [#3274](https://github.com/reactive-resume/reactive-resume/pull/3274) -### [#3168](https://github.com/amruthpillai/reactive-resume/issues/3168) — [Bug] Main picture disappeared from all my CVs + Headline section is glitched +### [#3168](https://github.com/reactive-resume/reactive-resume/issues/3168) — [Bug] Main picture disappeared from all my CVs + Headline section is glitched **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1031,7 +1031,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Separate picture load/cache behavior from headline layout; reproduce supplied JPEG in authenticated/public private windows with cache disabled and inspect upload fetch status; preserve both symptoms. -### [#3166](https://github.com/amruthpillai/reactive-resume/issues/3166) — [Bug] Resume blocked +### [#3166](https://github.com/reactive-resume/reactive-resume/issues/3166) — [Bug] Resume blocked **Assessment:** `needs_reproduction`. **Confidence:** low. **State:** Open pending resolution/merge. @@ -1044,7 +1044,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Capture auth method, current timestamp, sanitized response/redirect, browser and whether account migrated; separate SMTP delivery from login; inspect relevant deployment logs. Do not close merely because stale or another commenter recovered. -### [#3164](https://github.com/amruthpillai/reactive-resume/issues/3164) — [Bug] <title>not able to log in or opt for forgot password +### [#3164](https://github.com/reactive-resume/reactive-resume/issues/3164) — [Bug] <title>not able to log in or opt for forgot password **Assessment:** `needs_reproduction`. **Confidence:** low. **State:** Open pending resolution/merge. @@ -1057,7 +1057,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Capture auth method, current timestamp, sanitized response/redirect, browser and whether account migrated; separate SMTP delivery from login; inspect relevant deployment logs. Do not close merely because stale or another commenter recovered. -### [#3159](https://github.com/amruthpillai/reactive-resume/issues/3159) — [Bug] <title> +### [#3159](https://github.com/reactive-resume/reactive-resume/issues/3159) — [Bug] <title> **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1070,7 +1070,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Request exact glyph/sample and sanitized JSON; inspect encoding versus unsupported font versus layout; avoid speculative duplicate closure. -### [#3155](https://github.com/amruthpillai/reactive-resume/issues/3155) — [Feature] Option to use date aligned to the left, rather than the right. +### [#3155](https://github.com/reactive-resume/reactive-resume/issues/3155) — [Feature] Option to use date aligned to the left, rather than the right. **Assessment:** `product_decision`. **Confidence:** high. **State:** Open pending resolution/merge. @@ -1082,9 +1082,9 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Choose simple date-first row versus dedicated date column, width and line wrapping. Implement template-aware setting and verify long/localized ranges. -**Related PRs:** [#3345](https://github.com/amruthpillai/reactive-resume/pull/3345), [#3357](https://github.com/amruthpillai/reactive-resume/pull/3357) +**Related PRs:** [#3345](https://github.com/reactive-resume/reactive-resume/pull/3345), [#3357](https://github.com/reactive-resume/reactive-resume/pull/3357) -### [#3153](https://github.com/amruthpillai/reactive-resume/issues/3153) — [Bug] <title> +### [#3153](https://github.com/reactive-resume/reactive-resume/issues/3153) — [Bug] <title> **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1096,9 +1096,9 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u **Action plan:** -- Obtain registration HTTP status/error and requested redirect URI or hosted server logs. Do not infer schema failure or redirect-policy rejection from the generic Claude message; #3421 is related, not proven resolution. https://github.com/amruthpillai/reactive-resume/issues/3153#issuecomment-5553215519 +- Obtain registration HTTP status/error and requested redirect URI or hosted server logs. Do not infer schema failure or redirect-policy rejection from the generic Claude message; #3421 is related, not proven resolution. https://github.com/reactive-resume/reactive-resume/issues/3153#issuecomment-5553215519 -### [#3152](https://github.com/amruthpillai/reactive-resume/issues/3152) — [Bug] Enabling REDIS_URL and ENCRYPTION_SECRET pointing to adjacent fresh Redis server throws "relation "ai_providers" does not exist" errors, v5.1.4, self-hosted +### [#3152](https://github.com/reactive-resume/reactive-resume/issues/3152) — [Bug] Enabling REDIS_URL and ENCRYPTION_SECRET pointing to adjacent fresh Redis server throws "relation "ai_providers" does not exist" errors, v5.1.4, self-hosted **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1114,7 +1114,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Keep open as needs_reproduction. Obtain original image digest, startup migration logs, database/schema search_path and redacted migration ledger from affected deployment. Exact v5.1.4/current migration fixtures pass, so do not add duplicate table migration or close as already fixed. -### [#3147](https://github.com/amruthpillai/reactive-resume/issues/3147) — [Bug] keyword text clipping into primary text for sidebar sections +### [#3147](https://github.com/reactive-resume/reactive-resume/issues/3147) — [Bug] keyword text clipping into primary text for sidebar sections **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1126,11 +1126,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u **Action plan:** -- Posted current-main reconstruction evidence and requested original sanitized JSON/font/sidebar/styles. Keep open until exact vertical clipping fixture is compared. https://github.com/amruthpillai/reactive-resume/issues/3147#issuecomment-5553205204 +- Posted current-main reconstruction evidence and requested original sanitized JSON/font/sidebar/styles. Keep open until exact vertical clipping fixture is compared. https://github.com/reactive-resume/reactive-resume/issues/3147#issuecomment-5553205204 -**Related PRs:** [#3253](https://github.com/amruthpillai/reactive-resume/pull/3253) +**Related PRs:** [#3253](https://github.com/reactive-resume/reactive-resume/pull/3253) -### [#3146](https://github.com/amruthpillai/reactive-resume/issues/3146) — [Bug] Section Item Primary Text bolding not working correctly +### [#3146](https://github.com/reactive-resume/reactive-resume/issues/3146) — [Bug] Section Item Primary Text bolding not working correctly **Assessment:** `already_fixed`. **Confidence:** high. **State:** Closed with evidence. @@ -1146,24 +1146,24 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u **Product/scope note:** Closed as resolved by merged #3335. -**Related PRs:** [#3335](https://github.com/amruthpillai/reactive-resume/pull/3335) +**Related PRs:** [#3335](https://github.com/reactive-resume/reactive-resume/pull/3335) -### [#3137](https://github.com/amruthpillai/reactive-resume/issues/3137) — [Feature] Custom Styles does not allow for modification of the Basics section +### [#3137](https://github.com/reactive-resume/reactive-resume/issues/3137) — [Feature] Custom Styles does not allow for modification of the Basics section **Assessment:** `feature`. **Confidence:** high. **State:** Open pending resolution/merge. **Evidence:** - Semantic CSS now exposes header, name, headline, contact nodes and page/region styling (docs/applying-custom-styles.mdx:74-97), introduced #3274. Guide :337 explicitly excludes gradients, so original full branding expectation only partly addressed. -- Posted current Semantic CSS header/contact/page selector guidance and requested exact remaining template/CSS layout; gradients remain unsupported. https://github.com/amruthpillai/reactive-resume/issues/3137#issuecomment-5553162766. +- Posted current Semantic CSS header/contact/page selector guidance and requested exact remaining template/CSS layout; gradients remain unsupported. https://github.com/reactive-resume/reactive-resume/issues/3137#issuecomment-5553162766. **Action plan:** - Explain supported Semantic CSS header selectors; ask which missing concrete layout remains. Treat gradient support separately as product/rendering decision; do not close full request solely on header support. -**Related PRs:** [#3274](https://github.com/amruthpillai/reactive-resume/pull/3274) +**Related PRs:** [#3274](https://github.com/reactive-resume/reactive-resume/pull/3274) -### [#3093](https://github.com/amruthpillai/reactive-resume/issues/3093) — [Bug] <title>The noto serif SC font is displaying spaces incorrectly. +### [#3093](https://github.com/reactive-resume/reactive-resume/issues/3093) — [Bug] <title>The noto serif SC font is displaying spaces incorrectly. **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open for exact original screenshot reproduction; two separately reproduced fixes published in #3450 and #3451. @@ -1182,13 +1182,13 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - 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. +**Implementation:** [PR #3450](https://github.com/reactive-resume/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. +**Additional implementation:** [PR #3451](https://github.com/reactive-resume/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) +**Related PRs:** [#3450](https://github.com/reactive-resume/reactive-resume/pull/3450), [#3451](https://github.com/reactive-resume/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 +### [#3090](https://github.com/reactive-resume/reactive-resume/issues/3090) — [Bug] Automatic extension to new page does not create a new page **Assessment:** `product_decision`. **Confidence:** high. **State:** Open pending resolution/merge. @@ -1201,7 +1201,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Decide overflow-page UI explanation and whether per-physical-page sidebar control is supported; preserve authored-page CSS identity; do not close as fixed or exact duplicate of dismissed UX request. -### [#3089](https://github.com/amruthpillai/reactive-resume/issues/3089) — [Bug] CV preview rendering regression after v5.1.0: widened spacing and clipped words +### [#3089](https://github.com/reactive-resume/reactive-resume/issues/3089) — [Bug] CV preview rendering regression after v5.1.0: widened spacing and clipped words **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open awaiting exact resume JSON, PDF and environment details after controlled Times-Roman reproduction passed. @@ -1211,15 +1211,15 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - A controlled Rhyhorn fixture transcribes the four visible skill labels/keywords at 12pt, line height 1.5 and a full-width skills column. Four PDF tests with Times-Roman, Tinos, Helvetica and Courier retain all text on one page. - Two production browser cases, Times-Roman and Tinos, show exact RGBA parity between actual builder canvas and independent PDF.js rendering. Visual inspection confirms all words and labels are visible with correct bold weight and no horizontal clipping. Evidence: `/tmp/rr-3089-production-proof/README.md` and `/tmp/rr-3089-probe`. - Shared text `overflow: hidden` has already been removed; standard Times-Roman mapping is retained and Tinos is already selectable. A local Poppler/fontconfig fallback-weight artifact did not reproduce in the actual browser and is not classified as an app defect. -- Posted [bounded findings and sanitized-fixture request](https://github.com/amruthpillai/reactive-resume/issues/3089#issuecomment-5554037446). No source change or PR was made; the original exact layout remains unproven. +- Posted [bounded findings and sanitized-fixture request](https://github.com/reactive-resume/reactive-resume/issues/3089#issuecomment-5554037446). No source change or PR was made; the original exact layout remains unproven. **Action plan:** - Obtain sanitized resume JSON, downloaded PDF, browser and deployed version, then compare the original Times-Roman advances and clipped regions with current output. Keep any Times New Roman alias or font-mapping choice separate from this unproven historical regression. -**Related PRs:** [#3186](https://github.com/amruthpillai/reactive-resume/pull/3186) +**Related PRs:** [#3186](https://github.com/reactive-resume/reactive-resume/pull/3186) -### [#3088](https://github.com/amruthpillai/reactive-resume/issues/3088) — Photo / Bold / Spacing +### [#3088](https://github.com/reactive-resume/reactive-resume/issues/3088) — Photo / Bold / Spacing **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1232,9 +1232,9 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Isolate remaining photo and language-spacing defects using sanitized JSON; verify bold font family/weight and underline toggle on current main; retain unresolved parts. -**Related PRs:** [#3335](https://github.com/amruthpillai/reactive-resume/pull/3335) +**Related PRs:** [#3335](https://github.com/reactive-resume/reactive-resume/pull/3335) -### [#3078](https://github.com/amruthpillai/reactive-resume/issues/3078) — [Bug] <title>login issue +### [#3078](https://github.com/reactive-resume/reactive-resume/issues/3078) — [Bug] <title>login issue **Assessment:** `needs_reproduction`. **Confidence:** low. **State:** Open pending resolution/merge. @@ -1247,7 +1247,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Capture auth method, current timestamp, sanitized response/redirect, browser and whether account migrated; separate SMTP delivery from login; inspect relevant deployment logs. Do not close merely because stale or another commenter recovered. -### [#3068](https://github.com/amruthpillai/reactive-resume/issues/3068) — [Bug] Text alignment issue in Ditgar template with two-column layout +### [#3068](https://github.com/reactive-resume/reactive-resume/issues/3068) — [Bug] Text alignment issue in Ditgar template with two-column layout **Assessment:** `confirmed_bug`. **Confidence:** high. **State:** Closed with evidence. @@ -1262,11 +1262,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed by merged PR #3445. No further implementation required for this report. -**Implementation:** [PR #3445](https://github.com/amruthpillai/reactive-resume/pull/3445). Merged head `5a3eff985`: corrects shared Ditgar main-section border/padding compensation, aligning titles with descriptions and links. Actual-PDF baseline: 16 failures and five controls; all 21 cases pass after the fix. Final verification passed all 923 PDF tests, package typecheck, and 25 E2E scenarios; all review and static-analysis gates passed. +**Implementation:** [PR #3445](https://github.com/reactive-resume/reactive-resume/pull/3445). Merged head `5a3eff985`: corrects shared Ditgar main-section border/padding compensation, aligning titles with descriptions and links. Actual-PDF baseline: 16 failures and five controls; all 21 cases pass after the fix. Final verification passed all 923 PDF tests, package typecheck, and 25 E2E scenarios; all review and static-analysis gates passed. -**Related PRs:** [#3357](https://github.com/amruthpillai/reactive-resume/pull/3357), [#3445](https://github.com/amruthpillai/reactive-resume/pull/3445) +**Related PRs:** [#3357](https://github.com/reactive-resume/reactive-resume/pull/3357), [#3445](https://github.com/reactive-resume/reactive-resume/pull/3445) -### [#3060](https://github.com/amruthpillai/reactive-resume/issues/3060) — “Move To” Feature Repeats Category Headers Across Pages in v5.1.3 +### [#3060](https://github.com/reactive-resume/reactive-resume/issues/3060) — “Move To” Feature Repeats Category Headers Across Pages in v5.1.3 **Assessment:** `product_decision`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1279,7 +1279,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Decide explicit hide-heading flag versus blank-title semantics; preserve builder accessible labels; test moved custom Experience on Kakuna with separator absent. -### [#3051](https://github.com/amruthpillai/reactive-resume/issues/3051) — [Bug] export PDF data different for English and German +### [#3051](https://github.com/reactive-resume/reactive-resume/issues/3051) — [Bug] export PDF data different for English and German **Assessment:** `already_fixed`. **Confidence:** high. **State:** Closed with evidence. @@ -1292,9 +1292,9 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Close resolved report; localized Resume/Lebenslauf suffix is separate feature if desired. -**Related PRs:** [#2863](https://github.com/amruthpillai/reactive-resume/pull/2863) +**Related PRs:** [#2863](https://github.com/reactive-resume/reactive-resume/pull/2863) -### [#3046](https://github.com/amruthpillai/reactive-resume/issues/3046) — [Bug] <title>unable to connect using google or GitHub +### [#3046](https://github.com/reactive-resume/reactive-resume/issues/3046) — [Bug] <title>unable to connect using google or GitHub **Assessment:** `needs_reproduction`. **Confidence:** low. **State:** Open pending resolution/merge. @@ -1307,7 +1307,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Capture auth method, current timestamp, sanitized response/redirect, browser and whether account migrated; separate SMTP delivery from login; inspect relevant deployment logs. Do not close merely because stale or another commenter recovered. -### [#3040](https://github.com/amruthpillai/reactive-resume/issues/3040) — [Bug] skill icon section does not overflow correctly +### [#3040](https://github.com/reactive-resume/reactive-resume/issues/3040) — [Bug] skill icon section does not overflow correctly **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1327,11 +1327,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Second horizontal defect alreadyfixed via#3253/reporterconfirmation; preserve this distinction in any issue update. - Do not silently add wrap=false toskills: existing maintainerdecision leaves pagination author-controlled; track optional keep-together under#3350. -**Implementation:** [PR #3434](https://github.com/amruthpillai/reactive-resume/pull/3434). Head `2e29a4412`: permits Semantic CSS gap, row-gap and column-gap on level indicators. Seven actual-PDF raster regressions, 690 PDF tests and 1,349 resume-domain tests pass. Original vertical clipping and automatic pagination scope remain unproven; PR relates without closing #3040. +**Implementation:** [PR #3434](https://github.com/reactive-resume/reactive-resume/pull/3434). Head `2e29a4412`: permits Semantic CSS gap, row-gap and column-gap on level indicators. Seven actual-PDF raster regressions, 690 PDF tests and 1,349 resume-domain tests pass. Original vertical clipping and automatic pagination scope remain unproven; PR relates without closing #3040. -**Related PRs:** [#3253](https://github.com/amruthpillai/reactive-resume/pull/3253), [#3422](https://github.com/amruthpillai/reactive-resume/pull/3422), [#3434](https://github.com/amruthpillai/reactive-resume/pull/3434) +**Related PRs:** [#3253](https://github.com/reactive-resume/reactive-resume/pull/3253), [#3422](https://github.com/reactive-resume/reactive-resume/pull/3422), [#3434](https://github.com/reactive-resume/reactive-resume/pull/3434) -### [#3033](https://github.com/amruthpillai/reactive-resume/issues/3033) — [Bug] White pages on existing CVs +### [#3033](https://github.com/reactive-resume/reactive-resume/issues/3033) — [Bug] White pages on existing CVs **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1344,7 +1344,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Verify exact older-browser failure no longer occurs with legacy entrypoints; separately render preserved PT Sans/weight data and inspect font errors before closing original report. -### [#3017](https://github.com/amruthpillai/reactive-resume/issues/3017) — [Bug] <title>Line width and Shadow width not working +### [#3017](https://github.com/reactive-resume/reactive-resume/issues/3017) — [Bug] <title>Line width and Shadow width not working **Assessment:** `confirmed_bug`. **Confidence:** high. **State:** Closed with evidence. @@ -1361,11 +1361,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3427. No further implementation planned for this report. See evidence for the contribution of each fix. -**Implementation:** [PR #3427](https://github.com/amruthpillai/reactive-resume/pull/3427). Head `c315633f6`: picture borders and soft shadows preserve authored padding and insets. 708 PDF tests across 59 files, 25 targeted cases, compiled-server raster checks, three Chromium/Node PNG parity fixtures and production builds pass. Percentage picture width/height shadows remain a documented limitation. +**Implementation:** [PR #3427](https://github.com/reactive-resume/reactive-resume/pull/3427). Head `c315633f6`: picture borders and soft shadows preserve authored padding and insets. 708 PDF tests across 59 files, 25 targeted cases, compiled-server raster checks, three Chromium/Node PNG parity fixtures and production builds pass. Percentage picture width/height shadows remain a documented limitation. -**Related PRs:** [#3427](https://github.com/amruthpillai/reactive-resume/pull/3427) +**Related PRs:** [#3427](https://github.com/reactive-resume/reactive-resume/pull/3427) -### [#3010](https://github.com/amruthpillai/reactive-resume/issues/3010) — [Bug] Jsearch/RapidAPI missing from versions newer than 5.0.20? +### [#3010](https://github.com/reactive-resume/reactive-resume/issues/3010) — [Bug] Jsearch/RapidAPI missing from versions newer than 5.0.20? **Assessment:** `product_decision`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1380,9 +1380,9 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u **Product/scope note:** Pending maintainer answer requested in this audit: keep JSearch/RapidAPI removed and explain the current manual workflow, or restore built-in job search. No restoration authorized yet. -**Related PRs:** [#2788](https://github.com/amruthpillai/reactive-resume/pull/2788) +**Related PRs:** [#2788](https://github.com/reactive-resume/reactive-resume/pull/2788) -### [#3008](https://github.com/amruthpillai/reactive-resume/issues/3008) — [Bug] Public resume page throws INTERNAL_SERVER_ERROR due to output validation failure when name is redacted +### [#3008](https://github.com/reactive-resume/reactive-resume/issues/3008) — [Bug] Public resume page throws INTERNAL_SERVER_ERROR due to output validation failure when name is redacted **Assessment:** `already_fixed`. **Confidence:** high. **State:** Closed with evidence. @@ -1396,9 +1396,9 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Close as already fixed, linking #3012 and #3138. -**Related PRs:** [#3012](https://github.com/amruthpillai/reactive-resume/pull/3012), [#3138](https://github.com/amruthpillai/reactive-resume/pull/3138) +**Related PRs:** [#3012](https://github.com/reactive-resume/reactive-resume/pull/3012), [#3138](https://github.com/reactive-resume/reactive-resume/pull/3138) -### [#3007](https://github.com/amruthpillai/reactive-resume/issues/3007) — [Bug] <title>Center View doesn't show the layout of the resume +### [#3007](https://github.com/reactive-resume/reactive-resume/issues/3007) — [Bug] <title>Center View doesn't show the layout of the resume **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1411,7 +1411,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Reproduce minimal resume in reported Firefox/Zen; inspect PDF.js and font errors; test self-hosted missing optional AI config separately; do not infer one shared cause. -### [#2988](https://github.com/amruthpillai/reactive-resume/issues/2988) — [Bug] v5.1.0 react-pdf regressions: missing Phosphor icons, broken IBM Plex Serif fi/fl ligatures, missing template borders +### [#2988](https://github.com/reactive-resume/reactive-resume/issues/2988) — [Bug] v5.1.0 react-pdf regressions: missing Phosphor icons, broken IBM Plex Serif fi/fl ligatures, missing template borders **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1423,9 +1423,9 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u **Action plan:** -- Posted evidence and requested the sanitized v5.0.20/v5.1.0 PDFs offered by the reporter, plus matching JSON, to compare remaining border/spacing differences. Keep open. https://github.com/amruthpillai/reactive-resume/issues/2988#issuecomment-5553175062 +- Posted evidence and requested the sanitized v5.0.20/v5.1.0 PDFs offered by the reporter, plus matching JSON, to compare remaining border/spacing differences. Keep open. https://github.com/reactive-resume/reactive-resume/issues/2988#issuecomment-5553175062 -### [#2921](https://github.com/amruthpillai/reactive-resume/issues/2921) — [Feature] Improve builder UI for hidden resume sections +### [#2921](https://github.com/reactive-resume/reactive-resume/issues/2921) — [Feature] Improve builder UI for hidden resume sections **Assessment:** `feature`. **Confidence:** high. **State:** Open pending resolution/merge. @@ -1437,7 +1437,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Keep fixed layout portion; choose compact hidden-section group with restore action for built-in, summary and custom sections. Preserve original layout positions on unhide. Add visibility/restoration tests. -### [#2897](https://github.com/amruthpillai/reactive-resume/issues/2897) — [Bug] GitHub Third Party oauth failed to login +### [#2897](https://github.com/reactive-resume/reactive-resume/issues/2897) — [Bug] GitHub Third Party oauth failed to login **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1450,9 +1450,9 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Capture current GitHub callback error and correlate account provider ID/email mapping; use existing OAuth mapper tests as regression base if collision reproduced; do not infer all creation failures fixed by historical change. -**Related PRs:** [#2874](https://github.com/amruthpillai/reactive-resume/pull/2874), [#3256](https://github.com/amruthpillai/reactive-resume/pull/3256) +**Related PRs:** [#2874](https://github.com/reactive-resume/reactive-resume/pull/2874), [#3256](https://github.com/reactive-resume/reactive-resume/pull/3256) -### [#2878](https://github.com/amruthpillai/reactive-resume/issues/2878) — [Bug] Unable to import a previously exported json resume through either of the 3 JSON options +### [#2878](https://github.com/reactive-resume/reactive-resume/issues/2878) — [Bug] Unable to import a previously exported json resume through either of the 3 JSON options **Assessment:** `already_fixed`. **Confidence:** high. **State:** Closed with evidence. @@ -1464,9 +1464,9 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3296. No further implementation planned for this report. See evidence for the contribution of each fix. -**Related PRs:** [#3296](https://github.com/amruthpillai/reactive-resume/pull/3296) +**Related PRs:** [#3296](https://github.com/reactive-resume/reactive-resume/pull/3296) -### [#2845](https://github.com/amruthpillai/reactive-resume/issues/2845) — [Feature] Export for import ready to successfactors and workday +### [#2845](https://github.com/reactive-resume/reactive-resume/issues/2845) — [Feature] Export for import ready to successfactors and workday **Assessment:** `product_decision`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1480,7 +1480,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u **Product/scope note:** Needs decision on vendor-specific claims/presets. -### [#2844](https://github.com/amruthpillai/reactive-resume/issues/2844) — [Feature] Improved accessibility +### [#2844](https://github.com/reactive-resume/reactive-resume/issues/2844) — [Feature] Improved accessibility **Assessment:** `feature`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1494,7 +1494,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u **Product/scope note:** Broad request remains valid; no closure based on generic accessibility labels. -### [#2841](https://github.com/amruthpillai/reactive-resume/issues/2841) — [Bug] Chikorita v5 Regression: Missing/Changed UI Features Compared to v4 +### [#2841](https://github.com/reactive-resume/reactive-resume/issues/2841) — [Bug] Chikorita v5 Regression: Missing/Changed UI Features Compared to v4 **Assessment:** `product_decision`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1507,7 +1507,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Confirm desired ordering and indicator-size defaults versus custom styles; explain implemented underline toggle without closing unresolved visual decisions. -### [#2837](https://github.com/amruthpillai/reactive-resume/issues/2837) — [Bug] Password recovery +### [#2837](https://github.com/reactive-resume/reactive-resume/issues/2837) — [Bug] Password recovery **Assessment:** `needs_reproduction`. **Confidence:** low. **State:** Open pending resolution/merge. @@ -1520,7 +1520,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Capture auth method, current timestamp, sanitized response/redirect, browser and whether account migrated; separate SMTP delivery from login; inspect relevant deployment logs. Do not close merely because stale or another commenter recovered. -### [#2836](https://github.com/amruthpillai/reactive-resume/issues/2836) — [Feature] Old links usage --> notification +### [#2836](https://github.com/reactive-resume/reactive-resume/issues/2836) — [Feature] Old links usage --> notification **Assessment:** `feature`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1534,7 +1534,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u **Product/scope note:** Cannot attribute arbitrary missing URLs safely without mapping. -### [#2828](https://github.com/amruthpillai/reactive-resume/issues/2828) — [Bug] Two files reverted to an older version and recent changes were lost +### [#2828](https://github.com/reactive-resume/reactive-resume/issues/2828) — [Bug] Two files reverted to an older version and recent changes were lost **Assessment:** `confirmed_bug`. **Confidence:** high for the reproduced current paths. **State:** Open; navigation fix #3453 needs a bounded-wait follow-up and fresh verification, multi-tab recovery awaits a product decision, and historical incident equivalence remains unproven. @@ -1553,11 +1553,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Await the user's choice between merging non-overlapping edits with explicit conflicting-value choices, or stopping on every concurrent edit to compare drafts. Then implement paired accepted baseline data/revision, conflict-time latest-data retrieval and rebasing that retains edits made during the request. Keep conflict drafts editable while autosave pauses; never resolve by discarding or reloading the draft. - Cover stable-ID item fields/additions/removals, one-sided and competing reorders, and atomic positional arrays in the chosen recovery design. The guard alone does not protect the full builder workflow. -**Implementation:** [PR #3453](https://github.com/amruthpillai/reactive-resume/pull/3453), open head `7fe189f5fecca95a40e135186553af976150547e`. The published navigation-save path was independently verified; the subsequent bounded-wait correction still requires verification. Simultaneous overwrite and exact historical cause remain outside this PR. +**Implementation:** [PR #3453](https://github.com/reactive-resume/reactive-resume/pull/3453), open head `7fe189f5fecca95a40e135186553af976150547e`. The published navigation-save path was independently verified; the subsequent bounded-wait correction still requires verification. Simultaneous overwrite and exact historical cause remain outside this PR. -**Related PRs:** [#3453](https://github.com/amruthpillai/reactive-resume/pull/3453) +**Related PRs:** [#3453](https://github.com/reactive-resume/reactive-resume/pull/3453) -### [#2812](https://github.com/amruthpillai/reactive-resume/issues/2812) — [Bug] Profiles used to render nicely in top right of header, but now they render below the header +### [#2812](https://github.com/reactive-resume/reactive-resume/issues/2812) — [Bug] Profiles used to render nicely in top right of header, but now they render below the header **Assessment:** `product_decision`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1570,7 +1570,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Decide whether restore dedicated profile area or offer template variant; test long profile URLs/multiple accounts and first-page-only header. -### [#2805](https://github.com/amruthpillai/reactive-resume/issues/2805) — [Bug] "Not Found" error when setting custom AI Base URL (https://api.z.ai/api/coding/paas/v4) +### [#2805](https://github.com/reactive-resume/reactive-resume/issues/2805) — [Bug] "Not Found" error when setting custom AI Base URL (https://api.z.ai/api/coding/paas/v4) **Assessment:** `already_fixed`. **Confidence:** high. **State:** Closed with evidence. @@ -1585,9 +1585,9 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Closed original connection routing mismatch with evidence. Keep PDF/file capability reports separate (#2723/#3334). -**Related PRs:** [#2970](https://github.com/amruthpillai/reactive-resume/pull/2970) +**Related PRs:** [#2970](https://github.com/reactive-resume/reactive-resume/pull/2970) -### [#2804](https://github.com/amruthpillai/reactive-resume/issues/2804) — [Bug] Link sharing non-english resume results in english titles +### [#2804](https://github.com/reactive-resume/reactive-resume/issues/2804) — [Bug] Link sharing non-english resume results in english titles **Assessment:** `confirmed_bug`. **Confidence:** high. **State:** Closed with evidence. @@ -1600,11 +1600,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3428. No further implementation planned for this report. See evidence for the contribution of each fix. -**Implementation:** [PR #3428](https://github.com/amruthpillai/reactive-resume/pull/3428). Server PDFs lacked default section headings despite correct browser rendering. Generated locale subset restores saved resume language; 689 PDF tests, API tests and production normal/fallback browser paths pass. +**Implementation:** [PR #3428](https://github.com/reactive-resume/reactive-resume/pull/3428). Server PDFs lacked default section headings despite correct browser rendering. Generated locale subset restores saved resume language; 689 PDF tests, API tests and production normal/fallback browser paths pass. -**Related PRs:** [#3428](https://github.com/amruthpillai/reactive-resume/pull/3428) +**Related PRs:** [#3428](https://github.com/reactive-resume/reactive-resume/pull/3428) -### [#2794](https://github.com/amruthpillai/reactive-resume/issues/2794) — [Bug] Off-center cropping/padding in resume square picture +### [#2794](https://github.com/reactive-resume/reactive-resume/issues/2794) — [Bug] Off-center cropping/padding in resume square picture **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open awaiting the original square PNG, sanitized resume JSON and environment details after bounded negative reproduction. @@ -1614,13 +1614,13 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Current production Onyx/Chromium probe uploads a controlled 600x600 image with edge markers and compares the actual builder canvas with independently rasterized downloaded PDF bytes. All 72 exact RGBA comparisons pass across DPR 1/1.25/2/3, settled builder zoom 75/100/115%, and six shadow/border/radius/padding combinations. Raw PNG bytes are also tested because normal opaque-PNG upload re-encodes to JPEG. - Across 144 bitmap/screenshot measurements, left/right marker widths differ by at most 1 CSS pixel and shadow/frame centers by at most 0.5 CSS pixel. Independent Poppler rendering agrees on image-edge bounds. Artifacts and reproduction harness: `/tmp/rr-2794-probes/README.md`. - No current preview-only crop was reproduced. Fixed 120pt Onyx fixture and Chromium checks do not establish the original resume or historical root cause; browser full-page zoom was not separately varied. No production change or PR was justified. -- Posted [evidence and exact-fixture request](https://github.com/amruthpillai/reactive-resume/issues/2794#issuecomment-5554042963); issue remains open. +- Posted [evidence and exact-fixture request](https://github.com/reactive-resume/reactive-resume/issues/2794#issuecomment-5554042963); issue remains open. **Action plan:** - Obtain the reporter's original square PNG, sanitized resume JSON, browser and deployed version; compare its preview/export pixels and physical bounds. Keep this separate from non-square fitting report #2782 and do not close on shared-pipeline proof alone. -### [#2785](https://github.com/amruthpillai/reactive-resume/issues/2785) — [Feature] <title> allow line breaks in skills keywords +### [#2785](https://github.com/reactive-resume/reactive-resume/issues/2785) — [Feature] <title> allow line breaks in skills keywords **Assessment:** `feature`. **Confidence:** high. **State:** Open awaiting keyword-presentation scope decision. @@ -1633,9 +1633,9 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Await the pending choice between per-section Inline/Bulleted list, per-item presentation, or deferral. Once scope is chosen, add the corresponding schema/UI setting and PDF/DOCX rendering with columns, long-keyword wrapping and template tests; preserve the inline default. Do not assume the unanswered scope choice. -**Related PRs:** [#3358](https://github.com/amruthpillai/reactive-resume/pull/3358) +**Related PRs:** [#3358](https://github.com/reactive-resume/reactive-resume/pull/3358) -### [#2782](https://github.com/amruthpillai/reactive-resume/issues/2782) — [Bug] Picture is cropped when inserted and could find a way to resize it accordingly +### [#2782](https://github.com/reactive-resume/reactive-resume/issues/2782) — [Bug] Picture is cropped when inserted and could find a way to resize it accordingly **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1648,7 +1648,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Reproduce portrait with chosen aspectRatio and crop dialog; verify uncropped source retention and ability to match original ratio; decide contain fit/padding if preserving full non-square image required. -### [#2778](https://github.com/amruthpillai/reactive-resume/issues/2778) — [Bug] Pictures in export not exists +### [#2778](https://github.com/reactive-resume/reactive-resume/issues/2778) — [Bug] Pictures in export not exists **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1661,7 +1661,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Test current self-hosted S3 or nginx split storage with real upload, public/export requests, non-2xx and content-type handling; retain missing image report pending positive current reproduction result. -### [#2768](https://github.com/amruthpillai/reactive-resume/issues/2768) — Failed to import the resume; neither the PDF version nor the JSON version works. +### [#2768](https://github.com/reactive-resume/reactive-resume/issues/2768) — Failed to import the resume; neither the PDF version nor the JSON version works. **Assessment:** `needs_reproduction`. **Confidence:** low. **State:** Open pending resolution/merge. @@ -1673,9 +1673,9 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Wait for sanitized PDF/JSON and browser/version, test without translation extensions, capture console stack and import network response. -**Related PRs:** [#3400](https://github.com/amruthpillai/reactive-resume/pull/3400) +**Related PRs:** [#3400](https://github.com/reactive-resume/reactive-resume/pull/3400) -### [#2766](https://github.com/amruthpillai/reactive-resume/issues/2766) — [Bug?] ERROR [oRPC]: Error: No object generated: response did not match schema. +### [#2766](https://github.com/reactive-resume/reactive-resume/issues/2766) — [Bug?] ERROR [oRPC]: Error: No object generated: response did not match schema. **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open awaiting exact current Lemonade/provider/model confirmation. @@ -1685,13 +1685,13 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Imports still parse and validate generated resume JSON (service.ts:327-340); model returning HTTP 200 does not prove schema-valid response. - Eighteen current AI service tests pass on `05e48a7`, including an actual SDK-to-stub-HTTP contract showing a plain chat request for `1` with no `response_format`. This establishes the current connection-test contract, not exact Lemonade/model compatibility. -- Posted [current requirements and a scoped reproduction request](https://github.com/amruthpillai/reactive-resume/issues/2766#issuecomment-5554087250), distinguishing connection testing from schema-valid resume generation and PDF-attachment import. No additional source change or closure was made. +- Posted [current requirements and a scoped reproduction request](https://github.com/reactive-resume/reactive-resume/issues/2766#issuecomment-5554087250), distinguishing connection testing from schema-valid resume generation and PDF-attachment import. No additional source change or closure was made. **Action plan:** - Re-test exact Lemonade provider/model on current version; separate simple test from resume parsing, capture sanitized generated output and validation issue. -### [#2760](https://github.com/amruthpillai/reactive-resume/issues/2760) — I lost access to my resumes +### [#2760](https://github.com/reactive-resume/reactive-resume/issues/2760) — I lost access to my resumes **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1704,7 +1704,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Preserve canonical issue; compare authenticated list response, filters and owner IDs against create response; inspect hosted account/migration state before any recovery operation. -### [#2751](https://github.com/amruthpillai/reactive-resume/issues/2751) — [Bug] <title>Export pdf format, the item number not complete +### [#2751](https://github.com/reactive-resume/reactive-resume/issues/2751) — [Bug] <title>Export pdf format, the item number not complete **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open for original missing-digit reproduction; related marker-overlap fix merged. @@ -1720,11 +1720,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - 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, so the issue remains open. +**Implementation:** [PR #3449](https://github.com/reactive-resume/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) +**Related PRs:** [#3178](https://github.com/reactive-resume/reactive-resume/pull/3178), [#3236](https://github.com/reactive-resume/reactive-resume/pull/3236), [#3242](https://github.com/reactive-resume/reactive-resume/pull/3242), [#3449](https://github.com/reactive-resume/reactive-resume/pull/3449) -### [#2745](https://github.com/amruthpillai/reactive-resume/issues/2745) — [Bug] The dynamic resume page in the builder lags when in Arabic language +### [#2745](https://github.com/reactive-resume/reactive-resume/issues/2745) — [Bug] The dynamic resume page in the builder lags when in Arabic language **Assessment:** `confirmed_bug`. **Confidence:** high. **State:** Closed with evidence. @@ -1739,11 +1739,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed by merged PR #3446. No further implementation required for this report. Broader RTL PDF text rendering remains separately tracked under #3275. -**Implementation:** [PR #3446](https://github.com/amruthpillai/reactive-resume/pull/3446). Merged head `ab0a47bf2`: isolates left-origin zoom coordinates from RTL interface positioning while retaining Arabic dock and per-resume direction. Production-main regression fails with a 1324.8px center error and English control passes; all four UI/resume locale combinations pass after fix at initial load, actual size, and fit-to-view. Build, web typecheck, boundaries, E2E, review, and static-analysis gates passed. +**Implementation:** [PR #3446](https://github.com/reactive-resume/reactive-resume/pull/3446). Merged head `ab0a47bf2`: isolates left-origin zoom coordinates from RTL interface positioning while retaining Arabic dock and per-resume direction. Production-main regression fails with a 1324.8px center error and English control passes; all four UI/resume locale combinations pass after fix at initial load, actual size, and fit-to-view. Build, web typecheck, boundaries, E2E, review, and static-analysis gates passed. -**Related PRs:** [#3446](https://github.com/amruthpillai/reactive-resume/pull/3446) +**Related PRs:** [#3446](https://github.com/reactive-resume/reactive-resume/pull/3446) -### [#2739](https://github.com/amruthpillai/reactive-resume/issues/2739) — [Feature] Select the text and change its color in rich text editor +### [#2739](https://github.com/reactive-resume/reactive-resume/issues/2739) — [Feature] Select the text and change its color in rich text editor **Assessment:** `already_fixed`. **Confidence:** high. **State:** Closed with evidence. @@ -1755,9 +1755,9 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Close with instructions to select text and use Text Color toolbar picker. -**Related PRs:** [#2903](https://github.com/amruthpillai/reactive-resume/pull/2903) +**Related PRs:** [#2903](https://github.com/reactive-resume/reactive-resume/pull/2903) -### [#2735](https://github.com/amruthpillai/reactive-resume/issues/2735) — [Feature] Don't force secure httpS on URLs +### [#2735](https://github.com/reactive-resume/reactive-resume/issues/2735) — [Feature] Don't force secure httpS on URLs **Assessment:** `confirmed_bug`. **Confidence:** high. **State:** Closed with evidence. @@ -1769,11 +1769,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3403. No further implementation planned for this report. See evidence for the contribution of each fix. -**Implementation:** [PR #3403](https://github.com/amruthpillai/reactive-resume/pull/3403). Explicit HTTP URLs survive paste and edits; bare hosts retain HTTPS defaults. 12 URL input tests passed. +**Implementation:** [PR #3403](https://github.com/reactive-resume/reactive-resume/pull/3403). Explicit HTTP URLs survive paste and edits; bare hosts retain HTTPS defaults. 12 URL input tests passed. -**Related PRs:** [#3403](https://github.com/amruthpillai/reactive-resume/pull/3403) +**Related PRs:** [#3403](https://github.com/reactive-resume/reactive-resume/pull/3403) -### [#2732](https://github.com/amruthpillai/reactive-resume/issues/2732) — [Bug] <title>Test connection with gemini works but not able to enable AI +### [#2732](https://github.com/reactive-resume/reactive-resume/issues/2732) — [Bug] <title>Test connection with gemini works but not able to enable AI **Assessment:** `needs_reproduction`. **Confidence:** low. **State:** Open pending resolution/merge. @@ -1786,7 +1786,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Ask for one current toggle reproduction and separate import/provider failure; inspect saved enabled/testStatus and update response. -### [#2725](https://github.com/amruthpillai/reactive-resume/issues/2725) — [Feature] <Flexible Sorting for Profile Sections (Experience & Education)> +### [#2725](https://github.com/reactive-resume/reactive-resume/issues/2725) — [Feature] <Flexible Sorting for Profile Sections (Experience & Education)> **Assessment:** `product_decision`. **Confidence:** high. **State:** Open pending resolution/merge. @@ -1798,7 +1798,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Choose parser fallback and stable ordering for unparseable/date-free/ongoing ranges; add explicit user-triggered reverse chronological action preserving manual order until invoked. Test localized months and unknown dates. -### [#2723](https://github.com/amruthpillai/reactive-resume/issues/2723) — AI connection test succeeds but resume import fails with Bad Gateway +### [#2723](https://github.com/reactive-resume/reactive-resume/issues/2723) — AI connection test succeeds but resume import fails with Bad Gateway **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1811,9 +1811,9 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Keep open for scoped reproduction: version/provider/model/base URL/file/error. Use deterministic PDF fallback PR #3400 as related, not proof AI integration fixed. -**Related PRs:** [#3400](https://github.com/amruthpillai/reactive-resume/pull/3400) +**Related PRs:** [#3400](https://github.com/reactive-resume/reactive-resume/pull/3400) -### [#2722](https://github.com/amruthpillai/reactive-resume/issues/2722) — [Feature] All-in-One (AIO) Docker Container +### [#2722](https://github.com/reactive-resume/reactive-resume/issues/2722) — [Feature] All-in-One (AIO) Docker Container **Assessment:** `product_decision`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1827,7 +1827,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u **Product/scope note:** App-only consolidation exists; database-in-container request remains unmet. -### [#2708](https://github.com/amruthpillai/reactive-resume/issues/2708) — [Bug] Open WebUI current config? +### [#2708](https://github.com/reactive-resume/reactive-resume/issues/2708) — [Bug] Open WebUI current config? **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1843,9 +1843,9 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Keep open pending exact current OpenWebUI version/base path/provider/model and response body. Historical Responses-selection cause is fixed, but the reported HTTP200 mismatch cannot be proven identical without its response. Current official OpenWebUI API guidance documents /api/chat/completions, so /api is the corresponding compatible-provider base URL. No additional source change justified by the bounded fixture. -**Related PRs:** [#2814](https://github.com/amruthpillai/reactive-resume/pull/2814) +**Related PRs:** [#2814](https://github.com/reactive-resume/reactive-resume/pull/2814) -### [#2705](https://github.com/amruthpillai/reactive-resume/issues/2705) — [Feature] Save JSON versions in a version control system +### [#2705](https://github.com/reactive-resume/reactive-resume/issues/2705) — [Feature] Save JSON versions in a version control system **Assessment:** `product_decision`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1859,7 +1859,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u **Product/scope note:** Internal history is mitigation, not fulfillment. -### [#2689](https://github.com/amruthpillai/reactive-resume/issues/2689) — [Bug] Title: Bring back Europass CV template - Critical for German job market compliance +### [#2689](https://github.com/reactive-resume/reactive-resume/issues/2689) — [Bug] Title: Bring back Europass CV template - Critical for German job market compliance **Assessment:** `product_decision`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1873,7 +1873,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u **Product/scope note:** Treat as template feature request, not verified regulatory defect. -### [#2684](https://github.com/amruthpillai/reactive-resume/issues/2684) — [Bug] S3 uploads fail with 500 error despite healthy S3 connection +### [#2684](https://github.com/reactive-resume/reactive-resume/issues/2684) — [Bug] S3 uploads fail with 500 error despite healthy S3 connection **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open awaiting reporter confirmation or original S3 error; unsupported-ACL fix merged in #3432. @@ -1886,11 +1886,11 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - PR #3432 was merged by the repository owner on 2026-09-05 and removes unsupported object ACL requests. Keep the issue open until the reporter confirms or supplies the original S3 error; authenticated proxy and private/public attachment behavior remain verified. -**Implementation:** [PR #3432](https://github.com/amruthpillai/reactive-resume/pull/3432). Removes unsupported S3 object ACLs. Real SDK wire-contract stub reproduces AWS documented rejection; real Ceph gateway separately verifies public proxy and private access behavior. Exact reported deployment cause remains unproven; PR relates to the issue without closing it. +**Implementation:** [PR #3432](https://github.com/reactive-resume/reactive-resume/pull/3432). Removes unsupported S3 object ACLs. Real SDK wire-contract stub reproduces AWS documented rejection; real Ceph gateway separately verifies public proxy and private access behavior. Exact reported deployment cause remains unproven; PR relates to the issue without closing it. -**Related PRs:** [#3432](https://github.com/amruthpillai/reactive-resume/pull/3432) +**Related PRs:** [#3432](https://github.com/reactive-resume/reactive-resume/pull/3432) -### [#2683](https://github.com/amruthpillai/reactive-resume/issues/2683) — [Bug] Downloaded PDF has space but Playground shows no space. +### [#2683](https://github.com/reactive-resume/reactive-resume/issues/2683) — [Bug] Downloaded PDF has space but Playground shows no space. **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1903,7 +1903,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Compare exact data preview/export physical page sizes, margins, overflow and scale; verify downloaded PDF pixels against preview before closure. -### [#2669](https://github.com/amruthpillai/reactive-resume/issues/2669) — [Feature] Ability to have a public resume as root page via a reverse proxy +### [#2669](https://github.com/reactive-resume/reactive-resume/issues/2669) — [Feature] Ability to have a public resume as root page via a reverse proxy **Assessment:** `product_decision`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1917,7 +1917,7 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u **Product/scope note:** Needs product architecture decision; iframe advice does not fulfill request. -### [#2650](https://github.com/amruthpillai/reactive-resume/issues/2650) — [Bug] 🐛 Import feature throws `map is not a function` error +### [#2650](https://github.com/reactive-resume/reactive-resume/issues/2650) — [Bug] 🐛 Import feature throws `map is not a function` error **Assessment:** `already_fixed`. **Confidence:** high. **State:** Closed with evidence. @@ -1929,9 +1929,9 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Issue closed; relevant merged PRs: #3296. No further implementation planned for this report. See evidence for the contribution of each fix. -**Related PRs:** [#3296](https://github.com/amruthpillai/reactive-resume/pull/3296) +**Related PRs:** [#3296](https://github.com/reactive-resume/reactive-resume/pull/3296) -### [#2611](https://github.com/amruthpillai/reactive-resume/issues/2611) — Gengar template +### [#2611](https://github.com/reactive-resume/reactive-resume/issues/2611) — Gengar template **Assessment:** `product_decision`. **Confidence:** medium. **State:** Open pending resolution/merge. @@ -1944,9 +1944,9 @@ Remaining-work readiness differs from classification: 2 open issues have fixes u - Decide template-specific skill ordering/default rectangle design; compare original v4/v5 fixture; avoid changing shared order across all templates inadvertently. -**Related PRs:** [#3289](https://github.com/amruthpillai/reactive-resume/pull/3289) +**Related PRs:** [#3289](https://github.com/reactive-resume/reactive-resume/pull/3289) -### [#2609](https://github.com/amruthpillai/reactive-resume/issues/2609) — [Bug] Ditto and Kikorita templates do not work +### [#2609](https://github.com/reactive-resume/reactive-resume/issues/2609) — [Bug] Ditto and Kikorita templates do not work **Assessment:** `needs_reproduction`. **Confidence:** medium. **State:** Open pending resolution/merge. diff --git a/docs/use-cases/free-resume-builder.mdx b/docs/use-cases/free-resume-builder.mdx index d79bcbd59..07fd91620 100644 --- a/docs/use-cases/free-resume-builder.mdx +++ b/docs/use-cases/free-resume-builder.mdx @@ -50,7 +50,7 @@ Open [rxresu.me](https://rxresu.me) to create a resume, or follow [Creating your <Card title="Use the hosted app" icon="rocket" href="https://rxresu.me"> Open the official Reactive Resume instance. </Card> - <Card title="Source code" icon="github" href="https://github.com/reactive-resume/app"> + <Card title="Source code" icon="github" href="https://github.com/reactive-resume/reactive-resume"> View the project repository. </Card> <Card title="License" icon="scale-balanced" href="/legal/license"> diff --git a/docs/use-cases/open-source-resume-builder.mdx b/docs/use-cases/open-source-resume-builder.mdx index 3405c403f..b022e5143 100644 --- a/docs/use-cases/open-source-resume-builder.mdx +++ b/docs/use-cases/open-source-resume-builder.mdx @@ -7,7 +7,7 @@ Reactive Resume is an open-source resume builder. The source code is public, the ## What open source means here -The project repository is on [GitHub](https://github.com/reactive-resume/app). You can read the code, report issues, contribute improvements, and see how the builder, the API, the self-hosting setup, and the documentation are put together. +The project repository is on [GitHub](https://github.com/reactive-resume/reactive-resume). You can read the code, report issues, contribute improvements, and see how the builder, the API, the self-hosting setup, and the documentation are put together. The license is documented in [License](/legal/license). @@ -44,7 +44,7 @@ To contribute or to understand the codebase, start with the contributor docs. Th <Card title="Translations" icon="language" href="/contributing/translations"> Help translate the app. </Card> - <Card title="GitHub repository" icon="github" href="https://github.com/reactive-resume/app"> + <Card title="GitHub repository" icon="github" href="https://github.com/reactive-resume/reactive-resume"> Browse issues, pull requests, and source code. </Card> </CardGroup> diff --git a/docs/use-cases/privacy-focused-resume-builder.mdx b/docs/use-cases/privacy-focused-resume-builder.mdx index bd0da2693..1909d5fbb 100644 --- a/docs/use-cases/privacy-focused-resume-builder.mdx +++ b/docs/use-cases/privacy-focused-resume-builder.mdx @@ -21,7 +21,7 @@ Do not treat public sharing as access control. Use password protection, or keep ## Open source and self-hosting -The source code is on [GitHub](https://github.com/reactive-resume/app), so you can read how the application works. If you need direct control over infrastructure, storage, auth providers, and deployment policy, run your own instance. +The source code is on [GitHub](https://github.com/reactive-resume/reactive-resume), so you can read how the application works. If you need direct control over infrastructure, storage, auth providers, and deployment policy, run your own instance. Start with: diff --git a/package.json b/package.json index 6190ad5ee..1ba7d8c78 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ }, "repository": { "type": "git", - "url": "https://github.com/reactive-resume/app.git" + "url": "https://github.com/reactive-resume/reactive-resume.git" }, "engines": { "node": ">=24" diff --git a/packages/api/src/features/statistics/service.ts b/packages/api/src/features/statistics/service.ts index d0425f193..0160acaca 100644 --- a/packages/api/src/features/statistics/service.ts +++ b/packages/api/src/features/statistics/service.ts @@ -3,7 +3,7 @@ import { db } from "@reactive-resume/db/client"; import * as schema from "@reactive-resume/db/schema"; const CACHE_DURATION_MS = 6 * 60 * 60 * 1000; // 6 hours -const GITHUB_API_URL = "https://api.github.com/repos/reactive-resume/app"; +const GITHUB_API_URL = "https://api.github.com/repos/reactive-resume/reactive-resume"; const GITHUB_REQUEST_TIMEOUT_MS = 5_000; const GITHUB_REQUEST_MAX_ATTEMPTS = 2; diff --git a/packages/dsh-plugin/README.md b/packages/dsh-plugin/README.md index c13c741e2..3f48f1038 100644 --- a/packages/dsh-plugin/README.md +++ b/packages/dsh-plugin/README.md @@ -48,7 +48,7 @@ You could wire the bridge yourself with a raw `@deepseek-ai/dsh-mcp-client` row. ## Development -This package lives in the [Reactive Resume monorepo](https://github.com/reactive-resume/app) at `packages/dsh-plugin`, next to `packages/mcp` — the server it bridges. `src/tool-names.test.ts` checks every tool the prompt guide names against `@reactive-resume/mcp/tool-names`, so renaming a tool breaks this package in the same pull request. +This package lives in the [Reactive Resume monorepo](https://github.com/reactive-resume/reactive-resume) at `packages/dsh-plugin`, next to `packages/mcp` — the server it bridges. `src/tool-names.test.ts` checks every tool the prompt guide names against `@reactive-resume/mcp/tool-names`, so renaming a tool breaks this package in the same pull request. ```bash pnpm --filter dsh-plugin-reactive-resume test diff --git a/packages/dsh-plugin/package.json b/packages/dsh-plugin/package.json index 917f12b51..85965567e 100644 --- a/packages/dsh-plugin/package.json +++ b/packages/dsh-plugin/package.json @@ -13,12 +13,12 @@ "author": "Amruth Pillai", "repository": { "type": "git", - "url": "git+https://github.com/reactive-resume/app.git", + "url": "git+https://github.com/reactive-resume/reactive-resume.git", "directory": "packages/dsh-plugin" }, - "homepage": "https://github.com/reactive-resume/app/tree/main/packages/dsh-plugin#readme", + "homepage": "https://github.com/reactive-resume/reactive-resume/tree/main/packages/dsh-plugin#readme", "bugs": { - "url": "https://github.com/reactive-resume/app/issues" + "url": "https://github.com/reactive-resume/reactive-resume/issues" }, "type": "module", "main": "dist/index.js", diff --git a/packages/pdf/src/semantic/item-header-binding.test.tsx b/packages/pdf/src/semantic/item-header-binding.test.tsx index 7e6ec7e8b..f27d7fcc8 100644 --- a/packages/pdf/src/semantic/item-header-binding.test.tsx +++ b/packages/pdf/src/semantic/item-header-binding.test.tsx @@ -73,7 +73,7 @@ const renderHeaderBoxes = async (template: Template): Promise<string[]> => { .map((node) => nodeText(node)); }; -// https://github.com/amruthpillai/reactive-resume/issues/3349: the resolved `item-header` style used +// https://github.com/reactive-resume/reactive-resume/issues/3349: the resolved `item-header` style used // to be bound onto the first child that happened to be a literal `View`, so sections whose header // starts with anything else lost it entirely and stacked headers only styled their first row. describe("item-header binding", () => { diff --git a/plans/01-account-login-recovery.md b/plans/01-account-login-recovery.md index 302d917c2..9dc4e2072 100644 --- a/plans/01-account-login-recovery.md +++ b/plans/01-account-login-recovery.md @@ -2,7 +2,7 @@ **Planned at:** `7a98f6662ffc6fd5a1a7281c30ab3829fe3722ec` (2026-09-05). **Status:** needs_reproduction; no common current root cause proved. **Priority:** P1 investigation. **Effort:** 1–2 days diagnosis; 0.5–2 days per proved fix. **Risk:** High: account ownership and authentication. -**Issues:** [#3166](https://github.com/amruthpillai/reactive-resume/issues/3166), [#3164](https://github.com/amruthpillai/reactive-resume/issues/3164), [#3078](https://github.com/amruthpillai/reactive-resume/issues/3078), [#3046](https://github.com/amruthpillai/reactive-resume/issues/3046), [#2897](https://github.com/amruthpillai/reactive-resume/issues/2897), [#2837](https://github.com/amruthpillai/reactive-resume/issues/2837). +**Issues:** [#3166](https://github.com/reactive-resume/reactive-resume/issues/3166), [#3164](https://github.com/reactive-resume/reactive-resume/issues/3164), [#3078](https://github.com/reactive-resume/reactive-resume/issues/3078), [#3046](https://github.com/reactive-resume/reactive-resume/issues/3046), [#2897](https://github.com/reactive-resume/reactive-resume/issues/2897), [#2837](https://github.com/reactive-resume/reactive-resume/issues/2837). ## Execution contract diff --git a/plans/02-hosted-v4-account-recovery.md b/plans/02-hosted-v4-account-recovery.md index b0d4fa456..1f12c34c4 100644 --- a/plans/02-hosted-v4-account-recovery.md +++ b/plans/02-hosted-v4-account-recovery.md @@ -3,7 +3,7 @@ **Planned at:** `7a98f6662ffc6fd5a1a7281c30ab3829fe3722ec` (2026-09-05). **Status:** agent-selected scoped recovery plan; production access and source availability gated. **Category:** direction. **Priority:** P2. **Effort:** 0.5–1 day verification; recovery effort unknown until backups and policy exist. **Risk:** High: private account data and irreversible reconciliation. -**Issues:** [#3181](https://github.com/amruthpillai/reactive-resume/issues/3181), [#2760](https://github.com/amruthpillai/reactive-resume/issues/2760). +**Issues:** [#3181](https://github.com/reactive-resume/reactive-resume/issues/3181), [#2760](https://github.com/reactive-resume/reactive-resume/issues/2760). ## Execution contract @@ -42,7 +42,7 @@ No common root cause proved. #3181 is a hosted data availability/retention decis ## Verification steps before accessing private data -1. Read both issue bodies/comments through the authenticated issue tracker and preserve a sanitized observation table with deployment/version, date range, old/new account method, and missing versus invisible records. **Verify:** `rtk proxy gh issue view 3181 --repo amruthpillai/reactive-resume --json number,title,body,comments` and corresponding command for `2760` return the intended issue. Do not paste their personal contact information into output files. +1. Read both issue bodies/comments through the authenticated issue tracker and preserve a sanitized observation table with deployment/version, date range, old/new account method, and missing versus invisible records. **Verify:** `rtk proxy gh issue view 3181 --repo reactive-resume/reactive-resume --json number,title,body,comments` and corresponding command for `2760` return the intended issue. Do not paste their personal contact information into output files. 2. Check current source drift and the owner predicate. **Verify:** `rtk proxy rg -n 'eq\(schema.resume.userId, input.userId\)|resume_slug_user_id_unique' packages/api/src/features/resume/service.ts` finds the ownership/uniqueness boundaries. In a disposable account, create `Recovery Fixture`, reload list with empty tags, then fetch by ID as owner and another user. Browser pattern: `tests/e2e/specs/resume-lifecycle.spec.ts`; API pattern: `packages/api/src/features/resume/service.test.ts`. Expected: only owner sees the created record; no historical account data involved. 3. With an authorized operator, inspect **read-only metadata** for snapshot availability, capture date, user mapping existence and counts for a verified owner. Do not expose DB URLs or row contents. Verification artifact must explicitly say `ownerVerified`, `sourceAvailable`, `sourceTimestamp`, `targetTimestamp`, and whether both versions differ. If any value is unknown, mark unknown rather than inventing it. No production query or recovery is implied by local filesystem access. 4. For #2760, compare create response's returned resume ID, authenticated session user ID, unfiltered list response, and UI display in the same session. Redact identifiers before committing evidence. **Verify:** run the service and auth-export tests below; a future regression must isolate response omitted by server versus response hidden by client. If the server returns the record, narrow follow-up to the owning web list/cache seam rather than migration. diff --git a/plans/03-mcp-registration.md b/plans/03-mcp-registration.md index 82988cbd1..9d83e5cc0 100644 --- a/plans/03-mcp-registration.md +++ b/plans/03-mcp-registration.md @@ -2,7 +2,7 @@ **Planned at:** `7a98f6662ffc6fd5a1a7281c30ab3829fe3722ec` (2026-09-05). **Status:** historical confirmed defect fixed; remaining deployment/client evidence needed. **Priority:** P1 verification. **Effort:** 0.5–1 day local verification; operator retest dependent. **Risk:** High: OAuth security and schema evolution. -**Issues:** [#3398](https://github.com/amruthpillai/reactive-resume/issues/3398), [#3153](https://github.com/amruthpillai/reactive-resume/issues/3153). +**Issues:** [#3398](https://github.com/reactive-resume/reactive-resume/issues/3398), [#3153](https://github.com/reactive-resume/reactive-resume/issues/3153). ## Execution contract diff --git a/plans/04-ai-provider-compatibility.md b/plans/04-ai-provider-compatibility.md index 46613ca52..8cf1a3ec3 100644 --- a/plans/04-ai-provider-compatibility.md +++ b/plans/04-ai-provider-compatibility.md @@ -2,7 +2,7 @@ **Planned at:** `7a98f6662ffc6fd5a1a7281c30ab3829fe3722ec` (2026-09-05). **Status:** needs_reproduction for exact providers; current contract baseline verified. **Priority:** P1 diagnosis. **Effort:** 1–2 days matrix; 0.5–2 days per adapter defect. **Risk:** Medium/high: external requests, private documents, credential handling. -**Issues:** [#2732](https://github.com/amruthpillai/reactive-resume/issues/2732), [#2766](https://github.com/amruthpillai/reactive-resume/issues/2766), [#2723](https://github.com/amruthpillai/reactive-resume/issues/2723), [#2708](https://github.com/amruthpillai/reactive-resume/issues/2708). +**Issues:** [#2732](https://github.com/reactive-resume/reactive-resume/issues/2732), [#2766](https://github.com/reactive-resume/reactive-resume/issues/2766), [#2723](https://github.com/reactive-resume/reactive-resume/issues/2723), [#2708](https://github.com/reactive-resume/reactive-resume/issues/2708). ## Execution contract diff --git a/plans/05-ai-provider-migrations.md b/plans/05-ai-provider-migrations.md index 059a94b93..04a49ef6e 100644 --- a/plans/05-ai-provider-migrations.md +++ b/plans/05-ai-provider-migrations.md @@ -2,7 +2,7 @@ **Planned at:** `7a98f6662ffc6fd5a1a7281c30ab3829fe3722ec` (2026-09-05). **Status:** needs_reproduction; database absence observed historically, migration defect unproved. **Priority:** P1 deployment investigation. **Effort:** 0.5–1 day with deployment metadata; 1–2 days if migration repair proved. **Risk:** High: database integrity and stored credentials. -**Issues:** [#3152](https://github.com/amruthpillai/reactive-resume/issues/3152). +**Issues:** [#3152](https://github.com/reactive-resume/reactive-resume/issues/3152). ## Execution contract diff --git a/plans/06-image-storage-delivery.md b/plans/06-image-storage-delivery.md index acdc27512..d971d6535 100644 --- a/plans/06-image-storage-delivery.md +++ b/plans/06-image-storage-delivery.md @@ -2,7 +2,7 @@ **Planned at:** `7a98f6662ffc6fd5a1a7281c30ab3829fe3722ec` (2026-09-05). **Status:** needs_reproduction after historical ACL fix; two distinct failure boundaries. **Priority:** P1 diagnosis. **Effort:** 1–2 days controlled storage matrix; 1–2 days per proved defect. **Risk:** Medium/high: public/private object boundaries and external image fetching. -**Issues:** [#2684](https://github.com/amruthpillai/reactive-resume/issues/2684), [#2778](https://github.com/amruthpillai/reactive-resume/issues/2778). +**Issues:** [#2684](https://github.com/reactive-resume/reactive-resume/issues/2684), [#2778](https://github.com/reactive-resume/reactive-resume/issues/2778). ## Execution contract diff --git a/plans/07-aio-deployment.md b/plans/07-aio-deployment.md index 07599366a..72448c363 100644 --- a/plans/07-aio-deployment.md +++ b/plans/07-aio-deployment.md @@ -3,7 +3,7 @@ **Planned at:** `7a98f6662ffc6fd5a1a7281c30ab3829fe3722ec` (2026-09-05). **Status:** AIO request declined by maintainer; bounded documentation plan ready. **Category:** docs. **Priority:** P2 documentation. **Effort:** 0.5–1 day. **Risk:** Low; deployment commands must remain accurate. -**Issues:** [#2722](https://github.com/amruthpillai/reactive-resume/issues/2722). +**Issues:** [#2722](https://github.com/reactive-resume/reactive-resume/issues/2722). ## Execution contract diff --git a/plans/08-root-public-resume.md b/plans/08-root-public-resume.md index 86c66299c..388b15e04 100644 --- a/plans/08-root-public-resume.md +++ b/plans/08-root-public-resume.md @@ -3,7 +3,7 @@ **Planned at:** `7a98f6662ffc6fd5a1a7281c30ab3829fe3722ec` (2026-09-05). **Status:** agent-selected self-hosted root mode; ready for future implementation. **Category:** feature. **Priority:** P2. **Effort:** 2–4 days for optional root mode and production regression. **Risk:** High: private/public boundaries, origin and route handling. -**Issues:** [#2669](https://github.com/amruthpillai/reactive-resume/issues/2669). +**Issues:** [#2669](https://github.com/reactive-resume/reactive-resume/issues/2669). ## Execution contract diff --git a/plans/09-external-version-backup.md b/plans/09-external-version-backup.md index ccabca19b..5cc1d1d52 100644 --- a/plans/09-external-version-backup.md +++ b/plans/09-external-version-backup.md @@ -3,7 +3,7 @@ **Planned at:** `7a98f6662ffc6fd5a1a7281c30ab3829fe3722ec` (2026-09-05). **Status:** agent-selected documentation plan; ready for future execution. **Category:** docs. **Priority:** P2. **Effort:** 0.5–1 day documentation and synthetic workflow verification. **Risk:** Low for documentation; private data must stay local during verification. -**Issue:** [#2705](https://github.com/amruthpillai/reactive-resume/issues/2705). +**Issue:** [#2705](https://github.com/reactive-resume/reactive-resume/issues/2705). ## Execution contract diff --git a/plans/10-legacy-link-routing.md b/plans/10-legacy-link-routing.md index 174442987..890eb13ba 100644 --- a/plans/10-legacy-link-routing.md +++ b/plans/10-legacy-link-routing.md @@ -3,14 +3,14 @@ **Planned at:** `7a98f6662ffc6fd5a1a7281c30ab3829fe3722ec` (2026-09-05). **Status:** superseded by maintainer decision on 2026-09-06; do not implement. **Category:** declined feature. **Priority:** P2. **Effort:** 2–4 days for prospective notices and transaction tests. **Risk:** High: attribution, privacy and failed-request counting. -**Issue:** [#2836](https://github.com/amruthpillai/reactive-resume/issues/2836). +**Issue:** [#2836](https://github.com/reactive-resume/reactive-resume/issues/2836). ## Final disposition Maintainer declined this feature after planning. Retired-link support is not planned because redirect lifecycle, retention, slug reuse, ownership, privacy-safe tracking, and invalid-link error handling create disproportionate ongoing overhead. PR #3463 was closed unmerged, and the decision is recorded in -[issue #2836](https://github.com/amruthpillai/reactive-resume/issues/2836#issuecomment-5556080394). +[issue #2836](https://github.com/reactive-resume/reactive-resume/issues/2836#issuecomment-5556080394). Remaining content below is retained as historical planning evidence only. It is non-executable and must not be used to start implementation. diff --git a/plans/11-job-search-policy.md b/plans/11-job-search-policy.md index 03fd40111..6913fac11 100644 --- a/plans/11-job-search-policy.md +++ b/plans/11-job-search-policy.md @@ -3,7 +3,7 @@ **Planned at:** `7a98f6662ffc6fd5a1a7281c30ab3829fe3722ec` (2026-09-05). **Status:** agent-selected documentation plan; ready for future execution. **Category:** docs. **Priority:** P2. **Effort:** 0.5 day documentation/history verification. **Risk:** Low: factual documentation only. -**Issue:** [#3010](https://github.com/amruthpillai/reactive-resume/issues/3010). +**Issue:** [#3010](https://github.com/reactive-resume/reactive-resume/issues/3010). ## Execution contract diff --git a/plans/12-preview-and-export-failures.md b/plans/12-preview-and-export-failures.md index b06761b55..fbd6fabf7 100644 --- a/plans/12-preview-and-export-failures.md +++ b/plans/12-preview-and-export-failures.md @@ -4,7 +4,7 @@ ## Status and intent -- **Issues:** [#3323](https://github.com/amruthpillai/reactive-resume/issues/3323), [#3290](https://github.com/amruthpillai/reactive-resume/issues/3290), [#3033](https://github.com/amruthpillai/reactive-resume/issues/3033), [#3007](https://github.com/amruthpillai/reactive-resume/issues/3007), [#2609](https://github.com/amruthpillai/reactive-resume/issues/2609). +- **Issues:** [#3323](https://github.com/reactive-resume/reactive-resume/issues/3323), [#3290](https://github.com/reactive-resume/reactive-resume/issues/3290), [#3033](https://github.com/reactive-resume/reactive-resume/issues/3033), [#3007](https://github.com/reactive-resume/reactive-resume/issues/3007), [#2609](https://github.com/reactive-resume/reactive-resume/issues/2609). - **Planned at:** `7a98f6662`, 2026-09-05. Priority P1; effort M per reproduced cause; risk medium. Confidence low for historical root causes, high for current source paths below. - **Readiness:** Investigation ready; no runtime fix selected. Missing original resume/browser/deployment fixtures are material blockers to historical resolution. - **Dependencies:** None for diagnosis. Coordinate persistence findings with the builder draft owner; font-specific findings with Plan 13. Share reproduction utilities only, unless two reports prove the same failing boundary. diff --git a/plans/13-font-glyph-and-spacing.md b/plans/13-font-glyph-and-spacing.md index f3c9a2649..d2d1aba77 100644 --- a/plans/13-font-glyph-and-spacing.md +++ b/plans/13-font-glyph-and-spacing.md @@ -4,7 +4,7 @@ ## Status -- **Issues:** [#3249](https://github.com/amruthpillai/reactive-resume/issues/3249), [#3159](https://github.com/amruthpillai/reactive-resume/issues/3159), [#3147](https://github.com/amruthpillai/reactive-resume/issues/3147), [#3093](https://github.com/amruthpillai/reactive-resume/issues/3093), [#3089](https://github.com/amruthpillai/reactive-resume/issues/3089), [#2988](https://github.com/amruthpillai/reactive-resume/issues/2988). +- **Issues:** [#3249](https://github.com/reactive-resume/reactive-resume/issues/3249), [#3159](https://github.com/reactive-resume/reactive-resume/issues/3159), [#3147](https://github.com/reactive-resume/reactive-resume/issues/3147), [#3093](https://github.com/reactive-resume/reactive-resume/issues/3093), [#3089](https://github.com/reactive-resume/reactive-resume/issues/3089), [#2988](https://github.com/reactive-resume/reactive-resume/issues/2988). - **Planned at:** `7a98f6662`, 2026-09-05. Priority P2; effort M per isolated defect; risk high for dependency metric/glyph changes, medium for template-local geometry. - **Confidence:** High for current code and retained regression behavior; low/medium for historical residuals without original fixtures. - **Readiness:** Diagnostic work ready; no speculative font replacement, global line-height correction, or glyph-cache reset approved. diff --git a/plans/14-rtl-export-layout.md b/plans/14-rtl-export-layout.md index 7eb046095..1b7de249a 100644 --- a/plans/14-rtl-export-layout.md +++ b/plans/14-rtl-export-layout.md @@ -4,7 +4,7 @@ ## Status and evidence -- **Issue:** [#3275](https://github.com/amruthpillai/reactive-resume/issues/3275). +- **Issue:** [#3275](https://github.com/reactive-resume/reactive-resume/issues/3275). - **Planned at:** `7a98f6662`, 2026-09-05. Priority P2; effort L; risk high for shaping/fallback changes, medium for template-local alignment. - **Readiness/confidence:** Diagnostic plan ready; historical cause unverified. Report says self-hosted Arabic PDF direction, alignment, shaping, and section layout are inconsistent, with Hebrew/Persian also affected. It supplies a screenshot but no exact JSON, font, template, or deployment version. - **Prior work:** #3099 addressed Rhyhorn and does not establish all-template/script correctness. #3447 corrected a separately reproduced builder canvas bug: inherited RTL canvas direction changed physical text anchors. Two Arabic-locale controls differed by 35,009 pixels before that fix, English controls matched; setting canvas context direction after resize restored exact parity. Broader exported-PDF claims remain open. @@ -53,7 +53,7 @@ Add `<p>...</p>`, `<ol><li>...</li><li>Second 123</li></ol>`, a multi-line headi ### 1. Preserve exact report data and locate the failing surface -Read issue body/comments using `rtk proxy gh issue view 3275 --repo amruthpillai/reactive-resume --json body,comments`; do not post a comment. Required fixture: sanitized JSON retaining locale/font/styles/template, actual exported PDF, browser/build, and identified incorrect words/regions. If absent, record exact limits and run controlled diagnostics only. +Read issue body/comments using `rtk proxy gh issue view 3275 --repo reactive-resume/reactive-resume --json body,comments`; do not post a comment. Required fixture: sanitized JSON retaining locale/font/styles/template, actual exported PDF, browser/build, and identified incorrect words/regions. If absent, record exact limits and run controlled diagnostics only. Generate browser and server PDFs from identical saved data. Compare actual preview to an independent render of each downloaded PDF. If only preview differs, retain exact PDF bytes and investigate viewer code; if both PDFs are wrong, proceed to shaping/layout. If only one generated PDF is wrong, compare selected font files/cache state before template changes. diff --git a/plans/15-picture-fitting-and-style.md b/plans/15-picture-fitting-and-style.md index 31ccf425a..37c27908e 100644 --- a/plans/15-picture-fitting-and-style.md +++ b/plans/15-picture-fitting-and-style.md @@ -4,7 +4,7 @@ ## Status and issue coverage -- **Issues:** [#3168](https://github.com/amruthpillai/reactive-resume/issues/3168), [#3088](https://github.com/amruthpillai/reactive-resume/issues/3088), [#2794](https://github.com/amruthpillai/reactive-resume/issues/2794), [#2782](https://github.com/amruthpillai/reactive-resume/issues/2782). +- **Issues:** [#3168](https://github.com/reactive-resume/reactive-resume/issues/3168), [#3088](https://github.com/reactive-resume/reactive-resume/issues/3088), [#2794](https://github.com/reactive-resume/reactive-resume/issues/2794), [#2782](https://github.com/reactive-resume/reactive-resume/issues/2782). - **Planned at:** `7a98f6662`, 2026-09-05. Priority P2; effort M–L; risk medium (rendering) / high (storage and destructive cropping). Confidence medium for existing behavior, low for historical root causes. - **Readiness:** Diagnostics ready; #2782 implementation direction ready under delegated routine judgment. No additional product answer required for the bounded fit selector. Historical reporter equivalence still requires the missing source fixture. - **Dependencies:** Plan 06 owns upload/storage delivery if network evidence points there. Plan 13 owns font/spacing regressions. Do not duplicate either fix merely because the symptom appears near a picture. diff --git a/plans/16-imported-table-borders.md b/plans/16-imported-table-borders.md index 9ed6125e2..8a08bdeac 100644 --- a/plans/16-imported-table-borders.md +++ b/plans/16-imported-table-borders.md @@ -4,7 +4,7 @@ ## Status -- **Issue:** [#3196](https://github.com/amruthpillai/reactive-resume/issues/3196). +- **Issue:** [#3196](https://github.com/reactive-resume/reactive-resume/issues/3196). - **Planned at:** `7a98f6662`, 2026-09-05. Rendering source remains identical in the planning checkout. - **Priority / effort / risk:** P1 / M–L / high for editor changes, medium for renderer compatibility. Incorrect normalization destroys authored structure. - **Confidence:** High for the two controlled limitations below; low for their equivalence to the original report. @@ -13,7 +13,7 @@ ## Evidence, impact, and limits -The reporter used Ditgar on cloud, imported JSON, then updated a resume whose table lost its grid. The screenshot still shows text in three columns. No exact HTML/JSON or application version was supplied. [The maintainer's clarification](https://github.com/amruthpillai/reactive-resume/issues/3196#issuecomment-5552909919) explicitly distinguishes merged #3438, which fixed complete loss of text inside otherwise unrecognized semantic HTML wrappers. That fix does not establish border correctness. The custom-section-heading concern is separate and outside this plan. +The reporter used Ditgar on cloud, imported JSON, then updated a resume whose table lost its grid. The screenshot still shows text in three columns. No exact HTML/JSON or application version was supplied. [The maintainer's clarification](https://github.com/reactive-resume/reactive-resume/issues/3196#issuecomment-5552909919) explicitly distinguishes merged #3438, which fixed complete loss of text inside otherwise unrecognized semantic HTML wrappers. That fix does not establish border correctness. The custom-section-heading concern is separate and outside this plan. A fresh controlled production probe at the planned source revision established: @@ -126,7 +126,7 @@ Routine judgments do not need separate answers: preserve source while unsupporte ### 2. Obtain and classify the historical fixture -Read the existing issue through `rtk proxy gh issue view 3196 --repo amruthpillai/reactive-resume --json body,comments`. Do not post a new comment. If no source arrives, record “historical equivalence unverified” and continue only the independently authorized data-loss repair. +Read the existing issue through `rtk proxy gh issue view 3196 --repo reactive-resume/reactive-resume --json body,comments`. Do not post a new comment. If no source arrives, record “historical equivalence unverified” and continue only the independently authorized data-loss repair. Compare source tags/styles before editing with the exported JSON after editing. Branch on the first difference: table removed → editor; markup retained but only `border` attribute present → compatibility policy; supported inline borders retained yet missing from PDF → renderer regression. For the last branch, minimize to one table, one style, one template before changing code. diff --git a/plans/17-list-and-skill-pagination.md b/plans/17-list-and-skill-pagination.md index 28000ccc5..d09395308 100644 --- a/plans/17-list-and-skill-pagination.md +++ b/plans/17-list-and-skill-pagination.md @@ -4,7 +4,7 @@ ## Status and residual scope -- **Issues:** [#2751](https://github.com/amruthpillai/reactive-resume/issues/2751), [#3040](https://github.com/amruthpillai/reactive-resume/issues/3040). +- **Issues:** [#2751](https://github.com/reactive-resume/reactive-resume/issues/2751), [#3040](https://github.com/reactive-resume/reactive-resume/issues/3040). - **Planned at:** `7a98f6662`, 2026-09-05. Priority P2; effort M; risk high for page-fragmentation changes, medium for local marker sizing. Confidence medium for current controls, low for historical equivalence. - **Readiness:** Diagnostics ready. No new pagination policy authorized here. - **Dependencies:** Merged #3449 ordered-marker gutters and #3434 level gaps must remain. Plan 23/#3350 owns optional item keep-together policy; do not preempt it with `wrap={false}` on skills. diff --git a/plans/18-preview-export-geometry.md b/plans/18-preview-export-geometry.md index 9db32e245..85c0be483 100644 --- a/plans/18-preview-export-geometry.md +++ b/plans/18-preview-export-geometry.md @@ -4,7 +4,7 @@ ## Status and evidence -- **Issue:** [#2683](https://github.com/amruthpillai/reactive-resume/issues/2683). +- **Issue:** [#2683](https://github.com/reactive-resume/reactive-resume/issues/2683). - **Planned at:** `7a98f6662`, 2026-09-05. Priority P2; effort M; risk medium for preview geometry, high for page sizing changes. - **Report:** Cloud Rhyhorn playground appears to have no bottom space, while downloaded PDF has bottom space. Attachment is a video; no source JSON, page settings, browser, or exact output supplied. No comment establishes a current reproduction. - **Confidence/readiness:** Current source high confidence; original cause low confidence. Diagnostic plan ready; implementation requires exact data or a separately reproduced defect. diff --git a/plans/19-literal-rich-text-whitespace.md b/plans/19-literal-rich-text-whitespace.md index 06fbab1f3..bdd0ac896 100644 --- a/plans/19-literal-rich-text-whitespace.md +++ b/plans/19-literal-rich-text-whitespace.md @@ -4,7 +4,7 @@ ## Status and intent -- **Issue:** [#3397](https://github.com/amruthpillai/reactive-resume/issues/3397). +- **Issue:** [#3397](https://github.com/reactive-resume/reactive-resume/issues/3397). - **Planned at:** `7a98f6662`, 2026-09-05. Priority P2; effort M–L; risk high for global HTML whitespace changes. - **Readiness:** Known behavioral mismatch, high confidence; implementation direction approved. Preserve intentional whitespace in ordinary paragraphs/headings using the scoped persisted contract below. Tab width and existing line-break behavior use the labeled routine judgments below. - **Dependencies:** Existing paragraph indentation and merged #3451 literal Unicode spaces must remain. Coordinate RichInput changes with Plan16 tables. No need to reimplement paragraph indentation. diff --git a/plans/20-section-restoration.md b/plans/20-section-restoration.md index 52c51c8d1..e7e8f63e5 100644 --- a/plans/20-section-restoration.md +++ b/plans/20-section-restoration.md @@ -4,7 +4,7 @@ ## Status and scope -- **Issues:** [#3378](https://github.com/amruthpillai/reactive-resume/issues/3378), [#3265](https://github.com/amruthpillai/reactive-resume/issues/3265), [#2921](https://github.com/amruthpillai/reactive-resume/issues/2921). +- **Issues:** [#3378](https://github.com/reactive-resume/reactive-resume/issues/3378), [#3265](https://github.com/reactive-resume/reactive-resume/issues/3265), [#2921](https://github.com/reactive-resume/reactive-resume/issues/2921). - **Planned against:** `7a98f6662`, 2026-09-05. - **Priority / effort / risk:** P2 / M / medium. A mistaken restore operation can duplicate section IDs or change output visibility. - **Readiness:** #2921 describes a verified missing UI distinction. The historical removal paths in #3378 and #3265 remain unverified. Do not claim those reports fixed merely because a deliberately unplaced fixture becomes recoverable. diff --git a/plans/21-section-heading-visibility.md b/plans/21-section-heading-visibility.md index f97c7d965..82195021a 100644 --- a/plans/21-section-heading-visibility.md +++ b/plans/21-section-heading-visibility.md @@ -2,7 +2,7 @@ ## Status and decision gate -- **Issues:** [#3060](https://github.com/amruthpillai/reactive-resume/issues/3060). +- **Issues:** [#3060](https://github.com/reactive-resume/reactive-resume/issues/3060). - **Planned at:** `7a98f6662`, 2026-09-05. - **Priority / effort / risk:** P2 / M / medium; blank-title migration can change every existing resume. - **Readiness:** Product direction approved (Q1, 2026-09-05): add an explicit Show heading toggle that hides heading, icon, and separator while retaining content and the builder name. Preserve empty-title localized fallback. Q2 approved (2026-09-05): Move to creates continuations with visible headings until explicitly hidden. Q3 approved: hide visual headings consistently in preview, PDF, and DOCX while retaining section labels in the screen-reader outline. diff --git a/plans/22-skill-keyword-presentation.md b/plans/22-skill-keyword-presentation.md index dce34cdfa..f8247b413 100644 --- a/plans/22-skill-keyword-presentation.md +++ b/plans/22-skill-keyword-presentation.md @@ -8,7 +8,7 @@ Implement the selected section-level mode; do not add per-item overrides. ## Status -- **Issues:** [#2785](https://github.com/amruthpillai/reactive-resume/issues/2785). +- **Issues:** [#2785](https://github.com/reactive-resume/reactive-resume/issues/2785). - **Planned at:** `7a98f6662`, 2026-09-05. - **Priority / effort / risk:** P3 / M / medium because Skills is shared by all templates. - **Readiness:** Direction selected above. Ready for later execution after the technical verification gates; this task remains documentation-only. diff --git a/plans/23-pagination-controls.md b/plans/23-pagination-controls.md index 16092cd77..8f8b5ad25 100644 --- a/plans/23-pagination-controls.md +++ b/plans/23-pagination-controls.md @@ -8,7 +8,7 @@ Implement the Q10 guidance independently. Implement item controls only after pro ## Status -- **Issues:** [#3350](https://github.com/amruthpillai/reactive-resume/issues/3350), [#3090](https://github.com/amruthpillai/reactive-resume/issues/3090). +- **Issues:** [#3350](https://github.com/reactive-resume/reactive-resume/issues/3350), [#3090](https://github.com/reactive-resume/reactive-resume/issues/3090). - **Planned at:** `7a98f6662`, 2026-09-05. - **Priority / effort / risk:** P2 / L / high: incorrect keep-together behavior can clip content. - **Readiness:** Direction selected above. Ready for later execution after the technical verification gates; this task remains documentation-only. diff --git a/plans/24-date-layout.md b/plans/24-date-layout.md index b01bb7e1f..587762d88 100644 --- a/plans/24-date-layout.md +++ b/plans/24-date-layout.md @@ -2,7 +2,7 @@ ## Status and decision gate -- **Issues:** [#3155](https://github.com/amruthpillai/reactive-resume/issues/3155), [#2841](https://github.com/amruthpillai/reactive-resume/issues/2841). +- **Issues:** [#3155](https://github.com/reactive-resume/reactive-resume/issues/3155), [#2841](https://github.com/reactive-resume/reactive-resume/issues/2841). - **Planned at:** `7a98f6662`, 2026-09-05. Priority P3, effort M, risk medium. Q4 approved (2026-09-05): an optional dedicated left date column with entry details aligned beside it, preserving current layout by default. Q5 approved: date column follows reading start, left for LTR and right for RTL. Q6 approved: user-controlled width per section, long dates wrap within the column, and entry details stay aligned. Q7 expands support to every section type with a free-text date field, including custom equivalents. Q8 approved: support all templates, preserving each template’s current layout when disabled. Q9 approved: entries without dates leave the date column empty and retain the same detail alignment as dated entries. - **Evidence confidence:** High for current shared rendering and existing controls; the exact historical Chikorita visual parity remains unverified. #3155 asks for left-aligned dates; a comment distinguishes an outdented fixed-width date column from simple field order. #2841 bundles date/location order, large level icons, and link underlines after a v4-to-v5 migration. A contributor's CSS suggestion is not owner approval for a new global setting. diff --git a/plans/25-entry-company-logos.md b/plans/25-entry-company-logos.md index ab1a99bd5..4c7a8d752 100644 --- a/plans/25-entry-company-logos.md +++ b/plans/25-entry-company-logos.md @@ -8,7 +8,7 @@ Use the existing uploader limits and ownership rules. The storage inventory is a ## Status -- **Issue:** [#3379](https://github.com/amruthpillai/reactive-resume/issues/3379). +- **Issue:** [#3379](https://github.com/reactive-resume/reactive-resume/issues/3379). - **Planned at:** `7a98f6662`, 2026-09-05. Priority P3; effort L; risk medium/high because storage, export, and schema are involved. - **Readiness:** Direction selected above. Ready for later execution after the technical verification gates; this task remains documentation-only. - **Confidence:** High that no first-class Experience logo field exists. No decision to support arbitrary remote URLs or employer logo discovery has been made. diff --git a/plans/26-secondary-color.md b/plans/26-secondary-color.md index c4cbc5e66..481704364 100644 --- a/plans/26-secondary-color.md +++ b/plans/26-secondary-color.md @@ -8,7 +8,7 @@ Implement the explicit decorative-consumer list after source inventory; do not p ## Status -- **Issue:** [#3373](https://github.com/amruthpillai/reactive-resume/issues/3373). +- **Issue:** [#3373](https://github.com/reactive-resume/reactive-resume/issues/3373). - **Planned at:** `7a98f6662`, 2026-09-05. Priority P3, effort M, risk medium. - **Readiness:** Direction selected above. Ready for later execution after the technical verification gates; this task remains documentation-only. - **Confidence:** High for missing token/UI; which elements should consume it remains unresolved. diff --git a/plans/27-offline-fonts.md b/plans/27-offline-fonts.md index d44171518..928b4be1f 100644 --- a/plans/27-offline-fonts.md +++ b/plans/27-offline-fonts.md @@ -8,7 +8,7 @@ Inventory current source owners and define one source manifest consumed by previ ## Status -- **Issue:** [#3377](https://github.com/amruthpillai/reactive-resume/issues/3377). +- **Issue:** [#3377](https://github.com/reactive-resume/reactive-resume/issues/3377). - **Planned at:** `7a98f6662`, 2026-09-05. Priority P2, effort L, risk high for download size, licensing, and missing glyphs. - **Readiness:** Direction selected above. Ready for later execution after the technical verification gates; this task remains documentation-only. - **Evidence:** Self-hosted user requests operation without Google font access. Blocking Google alone is not equivalent to being offline: the current catalog includes other CDNs too. Confidence is high for remote catalog/fallback paths, unmeasured for a fully cold offline browser/server run. diff --git a/plans/28-basics-custom-styles.md b/plans/28-basics-custom-styles.md index 405b8bb51..460dfbb63 100644 --- a/plans/28-basics-custom-styles.md +++ b/plans/28-basics-custom-styles.md @@ -8,7 +8,7 @@ Proceed with tested documentation examples and only reproducible advertised-bind ## Status -- **Issue:** [#3137](https://github.com/amruthpillai/reactive-resume/issues/3137). +- **Issue:** [#3137](https://github.com/reactive-resume/reactive-resume/issues/3137). - **Planned at:** `7a98f6662`, 2026-09-05. Priority P3, effort S for verification/documentation, unresolved for new rendering capabilities; risk low for documentation and high for arbitrary CSS expansion. - **Readiness:** Direction selected above. Ready for later execution after the technical verification gates; this task remains documentation-only. - **Evidence:** The report bundles header branding, gradients, spacing/line breaks, and icons. On 2026-09-05 the owner explicitly stated that current Semantic CSS supports header/name/headline/contact-list/contact-item/icon/field/page/region styling, linked the guide, and requested an exact remaining template/CSS case. Confidence is high that much of the original missing selector surface now exists; historical appearance is not automatically restored. diff --git a/plans/29-onyx-profile-header.md b/plans/29-onyx-profile-header.md index 3827f64f2..ce79e17b8 100644 --- a/plans/29-onyx-profile-header.md +++ b/plans/29-onyx-profile-header.md @@ -8,7 +8,7 @@ Add one backward-compatible template option and retain profile IDs/order/links. ## Status -- **Issue:** [#2812](https://github.com/amruthpillai/reactive-resume/issues/2812). +- **Issue:** [#2812](https://github.com/reactive-resume/reactive-resume/issues/2812). - **Planned at:** `7a98f6662`, 2026-09-05. Priority P3, effort M, risk medium. - **Readiness:** Direction selected above. Ready for later execution after the technical verification gates; this task remains documentation-only. - **Evidence:** Two screenshots compare the old and new output; no source resume or dimensions are provided. High confidence in current source routing, unverified pixel parity with the older renderer. diff --git a/plans/30-ats-export-evaluation.md b/plans/30-ats-export-evaluation.md index 105a058e2..45f8249c5 100644 --- a/plans/30-ats-export-evaluation.md +++ b/plans/30-ats-export-evaluation.md @@ -8,7 +8,7 @@ Measure existing PDF/DOCX first. Add a preset only for measured deficiencies and ## Status -- **Issue:** [#2845](https://github.com/amruthpillai/reactive-resume/issues/2845). +- **Issue:** [#2845](https://github.com/reactive-resume/reactive-resume/issues/2845). - **Planned at:** `7a98f6662`, 2026-09-05. Priority P2, effort L for evaluation, risk medium/high for misleading compatibility claims. - **Readiness:** Direction selected above. Ready for later execution after the technical verification gates; this task remains documentation-only. - **Evidence:** The issue requests single-column standard-font PDF/DOCX, consistent dates, preview, and vendor-specific guarantees. Current DOCX and ATS checks already exist; do not implement a duplicate export path or equate the application's heuristic score with a vendor parser score. diff --git a/plans/31-document-accessibility.md b/plans/31-document-accessibility.md index 6b1089a1f..fb9df9fcc 100644 --- a/plans/31-document-accessibility.md +++ b/plans/31-document-accessibility.md @@ -8,7 +8,7 @@ Reuse the existing component on public HTML only after measuring PDF.js announce ## Status and execution boundary -- **Issue:** [#2844](https://github.com/amruthpillai/reactive-resume/issues/2844). +- **Issue:** [#2844](https://github.com/reactive-resume/reactive-resume/issues/2844). - **Planned at:** `7a98f6662`, 2026-09-05. Priority P2; effort M for the existing HTML mirror, L for export accessibility; risk medium. - **Readiness:** Direction selected above. Ready for later execution after the technical verification gates; this task remains documentation-only. - **Evidence confidence:** High for the source facts below; unknown for PDF tagging and assistive-technology behavior until actual output is inspected. The issue requests H1 name, H2 sections, H3 companies, H4 job titles, lists, and labels. The owner requested an exact output and acceptance criteria on 2026-08-16; the issue has not supplied a focused fixture. diff --git a/plans/32-section-date-sorting.md b/plans/32-section-date-sorting.md index 260f45869..30c26f016 100644 --- a/plans/32-section-date-sorting.md +++ b/plans/32-section-date-sorting.md @@ -8,7 +8,7 @@ No persistent autosort or implicit sorting of roles/custom sections in this incr ## Status -- **Issue:** [#2725](https://github.com/amruthpillai/reactive-resume/issues/2725). +- **Issue:** [#2725](https://github.com/reactive-resume/reactive-resume/issues/2725). - **Planned at:** `7a98f6662`, 2026-09-05. Priority P3, effort M, risk medium for unexpected reorder and free-form dates. - **Readiness:** Direction selected above. Ready for later execution after the technical verification gates; this task remains documentation-only. - **Confidence:** High that period strings are free-form and existing parsing can be reused for some cases; the selected comparator remains subject to the parser’s nullable results. diff --git a/plans/33-europass-template.md b/plans/33-europass-template.md index 3010db000..3e2c38a8a 100644 --- a/plans/33-europass-template.md +++ b/plans/33-europass-template.md @@ -8,7 +8,7 @@ Research and fixture mapping can proceed now. Visual approval remains a material ## Status and decision gate -- **Issue:** [#2689](https://github.com/amruthpillai/reactive-resume/issues/2689). +- **Issue:** [#2689](https://github.com/reactive-resume/reactive-resume/issues/2689). - **Planned at:** `7a98f6662`, 2026-09-05. Priority P3, effort L, risk medium/high for unsupported standards claims and a new template surface. - **Readiness:** Research/data mapping and visual proposal are selected by agent judgment and ready for later execution. Stop before template code for review of the actual proposed visual artifacts; their layout does not yet exist to approve. - **Evidence:** The issue asks for a built-in Europass option and makes claims about German requirements/DIN 5008. Those claims are unverified and must not be repeated as facts. A third-party XML-to-v5 converter comment is not an official template specification or import contract. diff --git a/plans/34-gengar-skill-layout.md b/plans/34-gengar-skill-layout.md index 17d341d53..af827370c 100644 --- a/plans/34-gengar-skill-layout.md +++ b/plans/34-gengar-skill-layout.md @@ -8,7 +8,7 @@ Keep the order name → rating → proficiency → keywords in both stacked and ## Status -- **Issue:** [#2611](https://github.com/amruthpillai/reactive-resume/issues/2611). +- **Issue:** [#2611](https://github.com/reactive-resume/reactive-resume/issues/2611). - **Planned at:** `7a98f6662`, 2026-09-05. Priority P3, effort M, risk medium because Skills uses shared rendering. - **Readiness:** Direction selected above. Ready for later execution after the technical verification gates; this task remains documentation-only. - **Confidence:** High for current shared order; historical rectangle dimensions and screenshot parity remain unverified. Related-issue mentions are not additional accepted requirements. diff --git a/plans/35-resume-import-errors.md b/plans/35-resume-import-errors.md index 53f4efdc9..c33dc7fb8 100644 --- a/plans/35-resume-import-errors.md +++ b/plans/35-resume-import-errors.md @@ -2,7 +2,7 @@ ## Status and scope -- **Issue:** [#2768](https://github.com/amruthpillai/reactive-resume/issues/2768). +- **Issue:** [#2768](https://github.com/reactive-resume/reactive-resume/issues/2768). - **Planned at:** `7a98f6662`, 2026-09-05. Priority P2; effort M for diagnosis; risk medium. - **Readiness:** Ready for a controlled reproduction. No verified root cause or implementation is prescribed. - **Evidence:** The report says both PDF and JSON import fail and quotes DOM `NotFoundError: Failed to execute removeChild on Node`. It labels Cloud but references localhost. No original file, application version, stack, browser version, or exact import format is available. On 2026-08-16 the owner requested a source file. The report does not establish that PDF extraction and JSON validation share a cause. diff --git a/plans/ORCHESTRATOR.md b/plans/ORCHESTRATOR.md index e6e3f5deb..9b3921e10 100644 --- a/plans/ORCHESTRATOR.md +++ b/plans/ORCHESTRATOR.md @@ -1,6 +1,6 @@ # Issue execution orchestrator prompt -You are the implementation orchestrator for `amruthpillai/reactive-resume`. Execute the approved issue plans and create reviewable PRs. Keep all PRs unmerged. This instruction explicitly authorizes dynamic sub-agent delegation, isolated worktrees, ordinary repository edits, tests, commits, pushes, and PR creation within the approved plans. +You are the implementation orchestrator for `reactive-resume/reactive-resume`. Execute the approved issue plans and create reviewable PRs. Keep all PRs unmerged. This instruction explicitly authorizes dynamic sub-agent delegation, isolated worktrees, ordinary repository edits, tests, commits, pushes, and PR creation within the approved plans. ## Bootstrap diff --git a/plans/PR-HANDOFF.md b/plans/PR-HANDOFF.md index 159a1ed55..8f6c791c9 100644 --- a/plans/PR-HANDOFF.md +++ b/plans/PR-HANDOFF.md @@ -4,8 +4,8 @@ Verified 2026-09-05 at approximately 19:21 UTC. Both PRs are open, fully reviewe | PR | Head | Behavior and verification | | --- | --- | --- | -| [#3453](https://github.com/amruthpillai/reactive-resume/pull/3453) | `ccd111da894cf7d44cc3dee06c937f70d91fef24` | Saves queued edits before leaving the builder; failed saves retain the draft. A 10-second navigation wait limit leaves a hanging write in flight, keeps the draft/Saving state, and shows an informational notice. Late acknowledgments and queued edits complete normally. 805 web tests, three production Chromium/PostgreSQL regressions, typecheck, build, repository checks, boundaries, independent review, and all hosted checks passed. | -| [#3454](https://github.com/amruthpillai/reactive-resume/pull/3454) | `80b0d3ab02cc4292f8a4514db8c2516adc1f9dc3` | Thumbnail pixels follow measured card size and DPR with bounded canvas memory, resolution-aware query identity, retained previous images, resize debounce, and offscreen deferral. Superseded queries cancel active PDF.js work and clean up loading tasks. Fifteen focused tests, the earlier 804-test full web baseline, typecheck, build, repository checks, boundaries, 22 production density measurements, independent reviews, and all final hosted checks passed. | +| [#3453](https://github.com/reactive-resume/reactive-resume/pull/3453) | `ccd111da894cf7d44cc3dee06c937f70d91fef24` | Saves queued edits before leaving the builder; failed saves retain the draft. A 10-second navigation wait limit leaves a hanging write in flight, keeps the draft/Saving state, and shows an informational notice. Late acknowledgments and queued edits complete normally. 805 web tests, three production Chromium/PostgreSQL regressions, typecheck, build, repository checks, boundaries, independent review, and all hosted checks passed. | +| [#3454](https://github.com/reactive-resume/reactive-resume/pull/3454) | `80b0d3ab02cc4292f8a4514db8c2516adc1f9dc3` | Thumbnail pixels follow measured card size and DPR with bounded canvas memory, resolution-aware query identity, retained previous images, resize debounce, and offscreen deferral. Superseded queries cancel active PDF.js work and clean up loading tasks. Fifteen focused tests, the earlier 804-test full web baseline, typecheck, build, repository checks, boundaries, 22 production density measurements, independent reviews, and all final hosted checks passed. | No additional implementation or GitHub issue comments are authorized in this planning task. The 63-issue inventory excludes #3246 and #2828 because their current PRs were the two exceptions the maintainer asked to finish. That exclusion does not mean every historical claim in either report has been verified. diff --git a/server.json b/server.json index 4caefa2a8..7d49605be 100644 --- a/server.json +++ b/server.json @@ -5,7 +5,7 @@ "description": "Free open-source resume builder with remote MCP tools for resumes and job applications.", "websiteUrl": "https://rxresu.me", "repository": { - "url": "https://github.com/reactive-resume/app", + "url": "https://github.com/reactive-resume/reactive-resume", "source": "github" }, "version": "5.2.2",