chore: migrate repository links to reactive-resume/reactive-resume

This commit is contained in:
Amruth Pillai
2026-09-12 11:18:32 +02:00
parent 08e61ded7b
commit f89acb4368
88 changed files with 943 additions and 936 deletions
+19 -16
View File
@@ -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@<ref>`.
`https://github.com/reactive-resume/reactive-resume/.github/workflows/docker-build.yml@<ref>`.
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),
+453 -453
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -17,7 +17,7 @@ These steps set up Reactive Resume for local development, whether you're contrib
<Steps>
<Step title="Clone the Repository">
```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
```
</Step>
@@ -318,7 +318,7 @@ pnpm run typecheck
<Card title="Project Architecture" icon="folder-open" href="/contributing/architecture">
How the project and codebase are structured.
</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">
View the source code and contribute to the project.
</Card>
</CardGroup>
+2 -2
View File
@@ -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
<Card icon="book-open" title="Crowdin Translator Docs" href="https://support.crowdin.com/for-translators/">
Official Crowdin documentation for translators.
</Card>
<Card icon="github" title="GitHub Issues" href="https://github.com/reactive-resume/app/issues">
<Card icon="github" title="GitHub Issues" href="https://github.com/reactive-resume/reactive-resume/issues">
Report issues or request new languages.
</Card>
</CardGroup>
+3 -3
View File
@@ -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"
}
}
}
+49 -49
View File
@@ -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.
+4 -4
View File
@@ -35,7 +35,7 @@ Reactive Resume is a free and open-source resume builder that makes it easy to c
<AccordionGroup>
<Accordion title="Completely Free & Open Source" icon="code-branch">
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).
</Accordion>
<Accordion title="Multiple Templates" icon="grid-2">
@@ -91,10 +91,10 @@ Use the hosted version, or run your own instance.
## Community & support
<CardGroup cols={2}>
<Card title="GitHub" icon="github" href="https://github.com/reactive-resume/app">
<Card title="GitHub" icon="github" href="https://github.com/reactive-resume/reactive-resume">
Star the repo, report reproducible bugs, propose features, and contribute to the project.
</Card>
<Card title="GitHub Discussions" icon="comments" href="https://github.com/reactive-resume/app/discussions/categories/q-a">
<Card title="GitHub Discussions" icon="comments" href="https://github.com/reactive-resume/reactive-resume/discussions/categories/q-a">
Ask questions about setup, configuration, and using Reactive Resume.
</Card>
<Card title="Reddit" icon="reddit" href="https://reddit.com/r/reactiveresume">
@@ -109,6 +109,6 @@ Use the hosted version, or run your own instance.
</CardGroup>
<Note>
**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.
</Note>
+2 -2
View File
@@ -72,7 +72,7 @@ Before you begin, ensure you have the following installed:
<Steps>
<Step title="Clone the Repository">
```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
```
</Step>
@@ -232,6 +232,6 @@ A complete list of the environment variables you can configure:
</CardGroup>
<Note>
**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).
</Note>
@@ -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).
+1 -1
View File
@@ -39,7 +39,7 @@ If the servers are under high load or unreachable:
</Step>
<Step title="Check for announcements">
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).
</Step>
</Steps>
+1 -1
View File
@@ -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)
---
+6 -6
View File
@@ -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`
+4 -4
View File
@@ -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:
</CodeGroup>
<Tip>
Prefer pulling from Docker Hub? Keep <code>amruthpillai/reactive-resume:latest</code>. Prefer GHCR? Swap it to <code>ghcr.io/reactive-resume/app:latest</code>.
Prefer pulling from Docker Hub? Keep <code>amruthpillai/reactive-resume:latest</code>. Prefer GHCR? Swap it to <code>ghcr.io/reactive-resume/reactive-resume:latest</code>.
</Tip>
<Note>
@@ -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
+3 -3
View File
@@ -15,7 +15,7 @@ They go further than the basic setup in the [Self-hosting with Docker](/self-hos
<Info>
**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.
</Info>
---
@@ -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
+1 -1
View File
@@ -150,7 +150,7 @@ To run the migration scripts, you need the following installed on your host mach
<Card title="Reactive Resume Source Code">
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
+1 -1
View File
@@ -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",
@@ -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",
@@ -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` }],
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -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">
@@ -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>
@@ -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: