mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2026-08-24 23:32:19 +10:00
commit b2b0470a1d9267d042ec0ac66523c6635bf5b199
Author: Amruth Pillai <im.amruth@gmail.com>
Date: Tue May 19 13:13:38 2026 +0200
chore: update .gitignore to include .vite-hooks and modify pnpm-lock.yaml for dependencies
commit d28fadb5cd8706c874e616102878b4a394ec84c1
Author: Amruth Pillai <im.amruth@gmail.com>
Date: Tue May 19 13:08:04 2026 +0200
fix: remove timestamp conflict guard
commit c6998d9dbab19d09d3c8054feef1d2e4117555eb
Author: Amruth Pillai <im.amruth@gmail.com>
Date: Tue May 19 12:11:51 2026 +0200
chore(release): v5.1.5
commit f33d168711804880e1f12e88d24290aae16cc258
Author: Amruth Pillai <im.amruth@gmail.com>
Date: Tue May 19 11:58:35 2026 +0200
revert: compose.yml
commit d961e6535811a10c335525fb33a08d03e737278d
Author: Amruth Pillai <im.amruth@gmail.com>
Date: Tue May 19 11:58:08 2026 +0200
refactor(agent): replace 'revert' terminology with 'restore' for clarity, resolves #3086
commit 17f351171be218e33f01c469d95e4164d4c8dc57
Author: Amruth Pillai <im.amruth@gmail.com>
Date: Tue May 19 11:10:41 2026 +0200
refactor(pdf): simplify sidebar section filtering and update summary feature logic
commit d55179b9d76879e3204de185e8b53fadd0a107ed
Author: Amruth Pillai <im.amruth@gmail.com>
Date: Tue May 19 09:53:37 2026 +0200
chore: update pnpm-lock.yaml and turbo.json
commit 7cade6980e1a04352536bd44ef773f338c4ef599
Author: Amruth Pillai <im.amruth@gmail.com>
Date: Tue May 19 09:38:30 2026 +0200
fix(polyfill): add tested polyfill for Map Upsert methods
commit 26d175bb9c53d93225d1e907678445252c13d660
Merge: 1cf33dc6c 5b1297fa2
Author: Amruth Pillai <im.amruth@gmail.com>
Date: Tue May 19 09:23:29 2026 +0200
Merge remote-tracking branch 'origin/main' into feat/explore-hono-orpc-migration
# Conflicts:
# packages/api/src/services/agent-url.ts
# packages/runtime-externals/package.json
commit 1cf33dc6c9d81735730ad656e16dab6501c6d6a1
Author: Amruth Pillai <im.amruth@gmail.com>
Date: Tue May 19 09:22:12 2026 +0200
chore: preserve branch changes before main sync
commit b380a4b00fdbcdd81ff4f8ef72b330fd027ccda5
Author: Amruth Pillai <im.amruth@gmail.com>
Date: Mon May 18 07:50:28 2026 +0200
chore: lot of fixes for monorepo migration
commit 8fcf0ec64e1c29572ebaff494338368bfcf75760
Author: Amruth Pillai <im.amruth@gmail.com>
Date: Fri May 15 13:57:17 2026 +0200
chore: update knip version and refine web app routing with new SEO endpoints
commit 234e68086ff15610a93877354c98e2c020364533
Author: Amruth Pillai <im.amruth@gmail.com>
Date: Fri May 15 12:10:06 2026 +0200
refactor(auth): update OAuth routes to include API prefix and remove unused schema endpoint
commit 91c84b9a8496b0ce21d71cae9f8b2a027638c9ac
Author: Amruth Pillai <im.amruth@gmail.com>
Date: Fri May 15 11:54:29 2026 +0200
chore: update dependencies and enhance PWA metadata in web app
commit 150117d4a5a9dd6cd92c64891aad8cae90f6a7af
Author: Amruth Pillai <im.amruth@gmail.com>
Date: Fri May 15 11:12:35 2026 +0200
docs: revise manifest-only pwa testing scope
commit 6b939a55661aec9dd8122b184e4b60a5c7325fb5
Author: Amruth Pillai <im.amruth@gmail.com>
Date: Fri May 15 11:11:33 2026 +0200
docs: add manifest-only pwa design
commit 1422e1fc96c400948b273210a1067251087d15d4
Author: Amruth Pillai <im.amruth@gmail.com>
Date: Fri May 15 11:05:04 2026 +0200
chore(dev): simplify server proxy config
commit bc2ff5a9f6fda41e6c40333c8f163aa23a6c5e48
Author: Amruth Pillai <im.amruth@gmail.com>
Date: Fri May 15 11:04:50 2026 +0200
docs: add unsafe oauth redirect plan
commit 445359ebe9b96c1515bf1c4c3f73ba8a8448ec12
Author: Amruth Pillai <im.amruth@gmail.com>
Date: Fri May 15 11:04:34 2026 +0200
feat(auth): add unsafe oauth redirect flag
commit 73fffdd24598e56b2793f7657919bc794835892e
Author: Amruth Pillai <im.amruth@gmail.com>
Date: Fri May 15 10:55:02 2026 +0200
docs: design unsafe oauth redirect flag
commit c0066aa19c15fc8a4c8e5179ed49889c117519f4
Author: Amruth Pillai <im.amruth@gmail.com>
Date: Fri May 15 10:22:04 2026 +0200
chore: update translation source paths
commit 9033da082418d252aafd6c2eed72f71f014be3d9
Author: Amruth Pillai <im.amruth@gmail.com>
Date: Fri May 15 10:09:25 2026 +0200
refactor(arch): react spa + hono migration
commit 6f27936c11bda895977dc63ee550c3346d4ce24b
Author: Amruth Pillai <im.amruth@gmail.com>
Date: Fri May 15 01:10:47 2026 +0200
docs: add docker nightly tagging design
commit ecc1fd9a88a0ee1dca2f1977dfc17f74527fe1da
Author: Amruth Pillai <im.amruth@gmail.com>
Date: Thu May 14 20:05:44 2026 +0200
feat: migrate to hono spa server
34 KiB
34 KiB
Monorepo Architecture Reorg Worklog
Append-only log for implementation, validation, and delegation notes.
Status note: This file is chronological. Earlier entries may mention paths that were moved by later tasks. Use the latest handoff plus
AGENTS.mdanddocs/contributing/architecture.mdxfor current-state guidance.
2026-05-14
- Started implementation on branch
feat/explore-hono-orpc-migration. - Initial dirty files existed before architecture implementation:
apps/server/package.jsonpackage.jsonpackages/api/package.jsonpackages/env/package.jsonpackages/utils/package.jsonpnpm-lock.yaml
- Created coordination artifacts:
docs/superpowers/plans/2026-05-14-monorepo-architecture-reorg.mddocs/superpowers/handoffs/2026-05-14-monorepo-architecture-reorg.mddocs/superpowers/worklogs/2026-05-14-monorepo-architecture-reorg.md
- Task 1 completed:
- Created
packages/resumeas@reactive-resume/resume. - Moved
packages/utils/src/resume/patch.tstopackages/resume/src/patch.ts. - Moved
packages/utils/src/network-icons.tstopackages/resume/src/icons.ts. - Moved the patch and network icon tests into
packages/resume/src. - Updated all old
@reactive-resume/utils/resume/patchand@reactive-resume/utils/network-iconsimports to@reactive-resume/resume/patchand@reactive-resume/resume/icons. - Updated package manifests and
pnpm-lock.yamlfor the new package and consumer dependency edges. - Removed
fast-json-patchfrom@reactive-resume/utilsand@reactive-resume/ai; it now belongs to@reactive-resume/resume. - Did not remove
@reactive-resume/schemafrom@reactive-resume/utilsbecause DOCX files still import schema and Task 2 owns that extraction.
- Created
- Validation for Task 1:
- Initial
pnpm --filter @reactive-resume/resume testfailed before Vitest because pnpm wanted to refresh modules in a non-TTY. - Retried with
CI=true; it failed because the new workspace package was not yet represented in the frozen lockfile. - Ran
pnpm install --lockfile-only --no-frozen-lockfile; completed with no downloads. - A later test run triggered pnpm dependency status install, but
node_moduleshad been purged and registry access was blocked by sandbox DNS (ENOTFOUND/fetch failed). - Ran
pnpm install --no-frozen-lockfilewith network approval to restorenode_modules; completed. pnpm --filter @reactive-resume/resume testpassed: 2 files, 43 tests.pnpm --filter @reactive-resume/resume typecheckpassed.pnpm --filter @reactive-resume/ai typecheckpassed.pnpm --filter @reactive-resume/api typecheckpassed.pnpm --filter web typecheckpassed.- Additional direct-consumer checks passed:
pnpm --filter @reactive-resume/db typecheck,pnpm --filter @reactive-resume/import typecheck, andpnpm --filter @reactive-resume/utils typecheck. - Focused
pnpm exec biome check ...initially found import-order/type-import issues;pnpm exec biome check --write ...fixed 10 touched files. - Focused
pnpm exec biome check ...passed afterward on the touched package/source/manifests.
- Initial
- Task 1 review correction:
- Spec review found
packages/dbhad a type-only manifest dependency on@reactive-resume/resume. - Replaced the DB import with a local structural
StoredJsonPatchOperationtype for JSONB column annotations inpackages/db/src/schema/agent.ts. - Removed
@reactive-resume/resumefrompackages/db/package.jsonandpnpm-lock.yaml.
- Spec review found
- Task 1 review validation:
pnpm --filter @reactive-resume/db typecheckpassed after the DB boundary correction.pnpm --filter @reactive-resume/api typecheckpassed.pnpm --filter web typecheckpassed.pnpm --filter @reactive-resume/resume testpassed: 2 files, 43 tests.pnpm --filter @reactive-resume/resume typecheckpassed.- Code-quality review noted unrelated dependency bumps in package manifests; those files were already dirty before this architecture work and were not treated as part of Task 1.
- Task 2 completed:
- Created
packages/docxas@reactive-resume/docxwith source-consumed root export. - Moved DOCX implementation/tests from
packages/utils/src/resume/docxintopackages/docx/src. - Updated web DOCX callers to import
buildDocxfrom@reactive-resume/docx. - Removed the old
@reactive-resume/utils/resume/docxexport. - Removed
docxand@reactive-resume/schemafrom@reactive-resume/utils. - Added
@reactive-resume/docxas a web dependency.
- Created
- Task 2 validation:
pnpm --filter @reactive-resume/docx testpassed: 5 files, 46 tests.pnpm --filter @reactive-resume/docx typecheckpassed.pnpm --filter @reactive-resume/utils typecheckpassed.pnpm --filter web typecheckpassed.- Spec review found only stale coordination text; plan and handoff were corrected.
- Task 2 completed:
- Created
packages/docxas@reactive-resume/docxwith source-consumed root export"." -> "./src/index.ts". - Moved
packages/utils/src/resume/docx/*topackages/docx/src/*, keeping the implementation and tests colocated. - Updated builder DOCX export callers and the export-section test mock from
@reactive-resume/utils/resume/docxto@reactive-resume/docx. - Removed the old
@reactive-resume/utils./resume/docxexport. - Removed
docxand@reactive-resume/schemafrom@reactive-resume/utils; the new DOCX package owns those dependencies and depends on@reactive-resume/utilsonly for shared color parsing. - Added
@reactive-resume/docxas a web dependency and refreshedpnpm-lock.yaml.
- Created
- Validation for Task 2:
- Initial
pnpm --filter @reactive-resume/docx testfailed on pnpm's non-TTY dependency-status install guard. CI=true pnpm --filter @reactive-resume/docx testthen failed because sandbox DNS blocked registry fetches while pnpm recreatednode_modules.- Retried
CI=true pnpm --filter @reactive-resume/docx testwith network approval; passed: 5 files, 46 tests. pnpm --filter @reactive-resume/docx typecheckpassed.pnpm --filter @reactive-resume/utils typecheckpassed.pnpm --filter web typecheckpassed.pnpm --filter web test -- 'src/routes/builder/$resumeId/-sidebar/right/sections/export.test.tsx'passed; Vitest reported 78 files and 430 tests.- Focused
pnpm exec biome check --write ...passed on the moved DOCX package, touched web callers, and package manifests; no fixes were applied.
- Initial
- Task 3 in progress:
- Added
packages/pdf/src/browser.tsxwithcreateResumePdfBlob({ data, template, resolveSectionTitle }). - Added
packages/pdf/src/server.tsxwithcreateResumePdfFile({ data, filename, template, resolveSectionTitle }). - Added
@reactive-resume/pdf/browserand@reactive-resume/pdf/serverpackage exports. - Kept Lingui locale loading in
apps/web/src/libs/resume/pdf-document.tsx; the web wrapper now resolves localized section titles and delegates blob generation to@reactive-resume/pdf/browser. - Updated
apps/web/src/libs/resume/pdf-document.server.tsxto delegate file generation to@reactive-resume/pdf/serverafter resolving localized section titles. - Updated
apps/web/src/components/resume/preview.browser.tsxso the PDF.js canvas viewer remains in web but PDF blob generation goes through the web-local wrapper. - Updated
apps/server/src/handlers/resume-pdf.tsxto reuse@reactive-resume/pdf/serverand preserve the existingFileresponse body flow. - Added package helper tests for browser/server generation adapters.
- Added
- Task 3 validation so far:
- Red test:
pnpm --filter @reactive-resume/pdf test -- src/browser.test.tsx src/server.test.tsxfailed becausepackages/pdf/src/browser.tsxandpackages/pdf/src/server.tsxdid not exist. - Interim implementation test exposed Vitest/Rolldown JSX transform limits for newly imported package TSX helpers; helpers now use
createElementwhile keeping requested.tsxfilenames. pnpm --filter @reactive-resume/pdf test -- src/browser.test.tsx src/server.test.tsxpassed; Vitest reported 17 files and 139 tests.- Initial focused web preview test failed because the test still mocked the old
useLocalizedResumeDocumentgeneration path. - Updated
apps/web/src/components/resume/preview.browser.test.tsxto mock/assertcreateResumePdfBlob. pnpm --filter web test -- src/components/resume/preview.browser.test.tsxpassed; Vitest reported 78 files and 430 tests.pnpm --filter web test -- 'src/routes/builder/$resumeId/-sidebar/right/sections/export.test.tsx' 'src/routes/$username/-components/public-resume.test.tsx' 'src/routes/$username/-components/pdf-viewer.test.tsx'passed; Vitest reported 78 files and 430 tests.
- Red test:
- Task 4 completed:
- Created
packages/mcpas@reactive-resume/mcpwith source-consumed exports for the compact public surface and direct server-card/tool/prompt/resource subpaths. - Moved MCP helper implementation and tests from
apps/web/src/routes/mcp/-helpersintopackages/mcp/src, then removed the empty web MCP helper route directory. - Updated
apps/server/src/handlers/mcp.tsandapps/server/src/handlers/metadata.tsto import from@reactive-resume/mcp, removing the app-to-app source imports fromapps/serverintoapps/web. - Preserved in-process MCP execution through the injected oRPC
RouterClient; no HTTP RPC calls were introduced inside the server process. - Renamed MCP tool values to canonical unprefixed snake_case names:
list_resumes,list_resume_tags,read_resume,get_resume_analysis,create_resume,import_resume,duplicate_resume,apply_resume_patch,update_resume,delete_resume,lock_resume,unlock_resume, andget_resume_statistics. - Updated prompts, server instructions, server-card metadata, and tests to use the canonical names and removed
reactive_resume_*aliases/instructions. - Added
packages/ai/src/tools/resume-tool-contracts.tswith the shared JSON Patch operations contract and reused it frompackages/ai/src/tools/patch-resume.tsand MCP patch schemas. - Updated package manifests and
pnpm-lock.yaml;webno longer owns@modelcontextprotocol/sdk, andservernow depends on@reactive-resume/mcp.
- Created
- Validation for Task 4:
- Initial
pnpm --filter @reactive-resume/mcp testreported no matching package before creation. - After package creation,
pnpm --filter @reactive-resume/mcp testhit pnpm's non-TTY dependency-status install guard. CI=true pnpm --filter @reactive-resume/mcp testthen failed with a frozen-lockfile mismatch after moving dependencies.- Ran
pnpm install --lockfile-only --no-frozen-lockfile; completed. - A later
CI=true pnpm --filter @reactive-resume/mcp testfailed because sandbox DNS blocked registry fetches while pnpm restorednode_modules. - Retried
CI=true pnpm --filter @reactive-resume/mcp testwith network approval; passed: 4 files, 29 tests. pnpm --filter @reactive-resume/mcp typecheckinitially failed because the package type graph reaches API/auth TSX and tests had optional text access; fixed by enabling JSX in the package tsconfig and narrowing test content access.- Final validation commands passed:
pnpm --filter @reactive-resume/mcp test,pnpm --filter @reactive-resume/mcp typecheck,pnpm --filter server typecheck,pnpm --filter @reactive-resume/ai typecheck, focusedpnpm exec biome check ..., andrg -n "\\.\\./\\.\\./\\.\\./web/src|apps/web/src|web/src/routes/mcp" apps/server/src packages/mcp/src. - Initial final validation found
pnpm exec biome check ...import/format issues in touched PDF/web files and type errors around the React element type passed intopdf(...)andrenderToBuffer(...). - Added narrow render-boundary casts using
Parameters<typeof pdf>[0]andParameters<typeof renderToBuffer>[0]. - Ran
pnpm exec biome check --write ...; Biome fixed 4 touched files. pnpm --filter @reactive-resume/pdf testpassed: 17 files, 139 tests.pnpm --filter @reactive-resume/pdf typecheckpassed.pnpm --filter web typecheckpassed.pnpm --filter server typecheckpassed.pnpm exec biome check packages/pdf/src/browser.tsx packages/pdf/src/server.tsx packages/pdf/src/browser.test.tsx packages/pdf/src/server.test.tsx packages/pdf/package.json apps/web/src/libs/resume/pdf-document.tsx apps/web/src/libs/resume/pdf-document.server.tsx apps/web/src/components/resume/preview.browser.tsx apps/web/src/components/resume/preview.browser.test.tsx apps/server/src/handlers/resume-pdf.tsx docs/superpowers/plans/2026-05-14-monorepo-architecture-reorg.md docs/superpowers/worklogs/2026-05-14-monorepo-architecture-reorg.md docs/superpowers/handoffs/2026-05-14-monorepo-architecture-reorg.mdpassed.pnpm --filter web test -- src/components/resume/preview.browser.test.tsxpassed; Vitest reported 78 files and 430 tests.pnpm --filter web test -- 'src/routes/builder/$resumeId/-sidebar/right/sections/export.test.tsx' 'src/routes/$username/-components/public-resume.test.tsx' 'src/routes/$username/-components/pdf-viewer.test.tsx'passed; Vitest reported 78 files and 430 tests.
- Initial
- Task 4 review correction:
- Spec review found stale MCP guide references to removed prefixed tool names and the unavailable
tailor_resumeprompt. - Updated
docs/guides/using-the-mcp-server.mdxto document canonical tool names such aslist_resumes,read_resume, andapply_resume_patch, and removedtailor_resume. - Removed the last code-side literal reference to the old prefixed tool-name family from
packages/mcp/src/tool-annotations.test.ts. - Re-ran
rg "reactive_resume_|tailor_resume|web/src/routes/mcp|apps/web/src|\\.\\./\\.\\./\\.\\./web" apps/server packages/mcp packages/ai/src docs/guides/using-the-mcp-server.mdx -n; no matches. - Re-ran
pnpm --filter @reactive-resume/mcp test,pnpm --filter @reactive-resume/mcp typecheck,pnpm --filter server typecheck,pnpm --filter @reactive-resume/ai typecheck, and focusedpnpm exec biome check ...; all passed.
- Spec review found stale MCP guide references to removed prefixed tool names and the unavailable
- Task 5 review correction:
- Spec review found stale root project guidance that still pointed API work at
packages/api/src/routers/*andpackages/api/src/services/*. - Updated
AGENTS.mdso the normative guidance now points API work atpackages/api/src/features/*and documents the newresume,docx,pdf, andmcppackage ownership boundaries. - Re-ran
pnpm --filter @reactive-resume/api test: 19 files, 155 tests passed. - Re-ran
pnpm --filter @reactive-resume/api typecheck,pnpm --filter server typecheck, andpnpm --filter web typecheck; all passed. - Re-ran focused
pnpm exec biome check ...onAGENTS.md, API/server/web touchpoints, and coordination docs; passed.
- Spec review found stale root project guidance that still pointed API work at
- Task 7 slice 1 review correction:
- Spec review found the moved public resume route missing its expected
ssr: "data-only"setting and the builder preview route missingssr: false. - Restored
ssr: "data-only"inapps/web/src/routes/$username/$slug.tsx. - Restored
ssr: falseinapps/web/src/routes/builder/$resumeId/index.tsx. - Updated
AGENTS.mdand the handoff notes to point browser-only resume preview/public viewer code atapps/web/src/features/resume/*instead of the removedcomponents/resumeandlibs/resumepaths.
- Spec review found the moved public resume route missing its expected
- Task 5 completed:
- Moved API routers and service/helpers from the old technical-layer folders into
packages/api/src/features/*. - Agent is now feature-owned under
features/agent, with procedure modules forthreads,messages,attachments, andactions, run-state inruns, tool construction intools, and remaining shared runtime orchestration inservice.ts. - Finer-grained follow-up:
features/agent/service.tsstill contains shared thread/message/action orchestration because the run lifecycle, message persistence, attachment linking, and patch transaction helpers are tightly coupled; splitting that service body further should be a dedicated follow-up with behavior-specific tests. - Resume is now feature-owned under
features/resume, with procedure modules forcrud,tags,statistics,analysis,event-router,sharing, andexport; access helpers and event publication moved under the same feature. - Finer-grained follow-up:
features/resume/service.tsremains the DB-backed facade for shared transaction helpers, update notifications, access/statistics coupling, and storage cleanup. The public procedure surface is capability-split, and further DB-service extraction should preserve the existing transaction and event behavior. - Moved the authenticated PDF download procedure from
apps/server/src/handlers/resume-pdf.tsxintopackages/api/src/features/resume/export.ts; it now calls@reactive-resume/pdf/server. - Removed the old API package
./services/*and./helpers/*wildcard exports. - Added explicit API runtime/type exports for
./features/storage,./features/resume,./features/resume/export, and./features/flags. - Updated
apps/serverto import storage/PDF runtime surfaces from explicit API feature exports. - Updated
apps/webto keep API imports type-only, including theFeatureFlagstype from@reactive-resume/api/features/flags. - Added
@reactive-resume/pdfas an API package dependency and refreshedpnpm-lock.yaml.
- Moved API routers and service/helpers from the old technical-layer folders into
- Validation for Task 5:
- Initial
pnpm --filter @reactive-resume/api typecheckfailed because pnpm attempted a non-TTY dependency-status install after package metadata changes. - Retried with
CI=true; sandbox DNS blocked registry fetches while rebuildingnode_modules. - Retried
CI=true pnpm --filter @reactive-resume/api typecheckwith network approval; dependency restoration completed and the first compiler pass found moved import paths that needed correction. pnpm --filter @reactive-resume/api testinitially failed because the moved agent service test mocked the new./servicemodule instead of its relocated AI/resume dependencies; fixed the mocks.- Final focused validations passed:
pnpm --filter @reactive-resume/api test,pnpm --filter @reactive-resume/api typecheck,pnpm --filter server typecheck,pnpm --filter web typecheck, andpnpm --filter @reactive-resume/mcp typecheck. - Focused Biome check initially reported import-order/format issues;
pnpm exec biome check --write ...fixed 7 touched API files. - Re-ran focused Biome check after the write pass; it passed.
- Repo scans passed for no remaining
@reactive-resume/api/services/*or@reactive-resume/api/helpers/*imports outsidepackages/api, no internal../servicesor../helpersimports, and no./services/*or./helpers/*wildcard exports inpackages/api/package.json.
- Initial
- Task 6 completed:
- Reorganized
apps/server/srcinto runtime adapter areas:http,rpc,mcp,openapi,static, andstartup. - Moved route registration into
apps/server/src/http/app.tsand keptapps/server/src/index.tsas the process entrypoint that runs startup checks and starts Hono. - Moved common response/cookie helpers to
http/headers.ts, auth and health HTTP handlers tohttp, oRPC request handling and locale extraction torpc, MCP auth/server setup/transport handling tomcp, OpenAPI and well-known metadata toopenapi, uploads/schema/web-dist serving tostatic, and migrations/local-storage lifecycle checks tostartup. - Kept the public route order and paths from the previous
index.ts, including servingapps/web/dist. - Preserved explicit API runtime imports only:
@reactive-resume/api/routers,@reactive-resume/api/features/storage, and@reactive-resume/api/features/resume/export.
- Reorganized
- Validation for Task 6:
- Baseline before moving files:
pnpm --filter server testpassed: 1 file, 1 test. - Interim validation after moving files:
pnpm --filter server typecheckpassed. - Interim validation after moving files:
pnpm --filter server testpassed: 1 file, 1 test. - Final
pnpm --filter server testpassed: 1 file, 1 test. - Final
pnpm --filter server typecheckpassed. - Final
pnpm --filter @reactive-resume/api typecheckpassed. - Focused
pnpm exec biome check apps/server/src docs/superpowers/plans/2026-05-14-monorepo-architecture-reorg.md docs/superpowers/worklogs/2026-05-14-monorepo-architecture-reorg.md docs/superpowers/handoffs/2026-05-14-monorepo-architecture-reorg.mdinitially found import-order issues inapps/server/src/http/app.tsandapps/server/src/mcp/handler.ts; after manual import ordering fixes, the same command passed. rg -n "apps/web/src|from ['\"][^'\"]*web/src|@reactive-resume/api/services/" apps/server/srcreturned no matches.rg -n "@reactive-resume/api/services/" apps/server packages/api apps/web packagesreturned no matches.rg -n "from ['\"][^'\"]*apps/web/src|from ['\"][^'\"]*web/src|apps/web/src" apps/serverreturned no matches.
- Baseline before moving files:
- Task 7 slice 1 completed:
- Moved
apps/web/src/components/resume/builder-resume-draft.tstoapps/web/src/features/resume/builder/draft.tsand updated builder/dialog consumers to import the feature-owned draft store directly. - Moved builder preview files and colocated tests from
apps/web/src/components/resumetoapps/web/src/features/resume/preview, includingpreview.tsx,preview.browser.tsx,preview.shared.tsx,pdf-canvas.tsx, and preview shared tests. - Moved dashboard resume thumbnail sizing helpers to
features/resume/preview/resume-thumbnail.shared.tsand moved PDF.js thumbnail rendering intofeatures/resume/preview/pdf-thumbnail.ts, so directpdfjs-distusage stays underfeatures/resume. - Moved web-local PDF document wrappers from
apps/web/src/libs/resume/pdf-document*.tsxtoapps/web/src/features/resume/export/pdf-document*.tsx; the wrappers still resolve localized section titles in web and call@reactive-resume/pdf/browseror@reactive-resume/pdf/server. - Moved public resume route components and tests from
apps/web/src/routes/$username/-componentstoapps/web/src/features/resume/public, includingpublic-resume.tsx,pdf-viewer.tsx,pdf-viewer.css, and their tests. - Updated the public resume route to lazy-load
features/resume/public/public-resumewhile preserving its loader, redirects, metadata, and route settings. - Removed the now-empty
apps/web/src/components/resumeandapps/web/src/routes/$username/-componentsdirectories. - Broader Task 7 remains open for command palette, theme, locale, user, auth, settings, and Task 8 dialog-registry work.
- Moved
- Task 7 slice 2 completed:
- Moved command palette implementation/tests to
apps/web/src/features/command-palette. - Moved theme provider, combobox, toggle button, and tests to
apps/web/src/features/theme. - Moved locale combobox implementation/tests to
apps/web/src/features/locale. - Moved user dropdown implementation to
apps/web/src/features/user. - Moved auth layout, page UI, and social auth component into
apps/web/src/features/auth; auth route files now keep route guards/search validation and compose feature pages. - Moved settings page UI and authentication/integration subcomponents into
apps/web/src/features/settings; settings route files now keep dashboard headers and compose feature pages. - Left
apps/web/src/routes/dashboard/settings/job-search.tsxroute-only because it is already a redirect shim. pnpm --filter web test -- src/features/command-palette src/features/theme src/features/localepassed; Vitest reported 74 files and 402 tests.pnpm --filter web typecheckpassed.- Focused Biome passed on the moved shell/auth/settings files and their route/import consumers; it checked 64 files with no fixes applied after a formatting write pass.
rg -n "@/components/(command-palette|theme|locale|user)" apps/web/srcandrg -n "components/(command-palette|theme|locale|user)" apps/web/srcreturned no matches.
- Moved command palette implementation/tests to
- Task 8 completed:
- Added dialog schema registries under
apps/web/src/dialogs/{auth,api-key,resume}/schema.tsand composed them throughapps/web/src/dialogs/schemas.ts. - Added domain renderer registries under
apps/web/src/dialogs/{auth,api-key,resume}/registry.tsx, with shared renderer helper types inapps/web/src/dialogs/renderer-registry.ts. - Reduced
apps/web/src/dialogs/store.tsto the single global dialog runtime/store while preserving typedopenDialog(type, data)andDialogProps<T>exports. - Reduced
apps/web/src/dialogs/manager.tsxto render via composed registries instead of directly importing all auth/API-key/resume dialog components. - Added a store test assertion that the central schema union is built from the domain schema registries.
- Added dialog schema registries under
- Validation for Task 8 so far:
- Red check:
pnpm --filter web test -- src/dialogs/store.test.tsfailed because./schemasdid not exist. pnpm --filter web test -- src/dialogs/store.test.tspassed after the registry implementation.- Initial
pnpm --filter web typecheckfound renderer-entry variance errors; fixed by typing renderer entries as an existential union of concrete dialog renderers. pnpm --filter web typecheckpassed after the renderer type fix.pnpm --filter web test -- src/dialogs/store.test.ts src/dialogs/resume/template/data.test.ts src/dialogs/resume/template/gallery.test.tsxpassed; Vitest reported 74 files and 403 tests.- Final
pnpm --filter web typecheckpassed. - Final
pnpm --filter web test -- src/dialogs/store.test.ts src/dialogs/resume/template/data.test.ts src/dialogs/resume/template/gallery.test.tsxpassed; Vitest reported 74 files and 403 tests. - Focused
pnpm exec biome check ...passed on the touched dialog registry/store/manager files and Task 8 coordination docs; Biome checked 12 TypeScript files and ignored Markdown. rg -n "ts-pattern|Create[A-Za-z]+Dialog|Update[A-Za-z]+Dialog|TemplateGalleryDialog|from \"\\./(api-key|auth|resume)" apps/web/src/dialogs/manager.tsxreturned no matches.rg -n "@reactive-resume/schema/resume/data|awardItemSchema|certificationItemSchema|coverLetterItemSchema|customSectionSchema|educationItemSchema|experienceItemSchema|interestItemSchema|languageItemSchema|profileItemSchema|projectItemSchema|publicationItemSchema|referenceItemSchema|skillItemSchema|summaryItemSchema|volunteerItemSchema|z\\.object\\(\\{ type" apps/web/src/dialogs/store.tsreturned no matches.
- Red check:
- Task 9 completed:
- Inspected installed Turbo and Biome versions and local schemas/docs:
pnpm exec turbo --version:2.9.12pnpm exec biome --version:2.4.15node_modules/.pnpm/turbo@2.9.12/node_modules/turbo/schema.jsonincludes rootboundaries,dependencies,dependents,implicitDependencies, and workspacetags.- Context7/Biome docs and
node_modules/@biomejs/biome/configuration_schema.jsonconfirm local.gritplugins can be loaded throughbiome.jsonplugins.
- Updated
turbo.jsonwith executable boundaries:- Deny dependencies on app workspaces
webandserver, preventing package-to-app and app-to-app imports. - Add root test-tool implicit dependencies for
vitest,@testing-library/jest-dom,@testing-library/react, and@testing-library/user-eventso test imports do not require duplicating root test devDependencies in every workspace package. - Add tag rules for app, server, browser, universal, domain, and UI layers.
- Deny dependencies on app workspaces
- Added workspace
turbo.jsonfiles withextends: ["//"]and boundary tags for both apps and all packages. - Added
@boundaries-ignore root shared Vitest configto every workspacevitest.config.tsimport of../../vitest.shared; this is the only allowed cross-package source import left for the shared root test config. - Updated
biome.jsonwithstyle.noRestrictedImportspatterns for:@reactive-resume/*/src/**apps/**packages/**
- Added
tooling/grit/no-cross-workspace-src-imports.gritand registered it inbiome.jsonas a second layer for import/export/dynamic import sources that reference another workspace'ssrctree. - Removed the cross-workspace
@reactive-resume/ui/* -> ../../packages/ui/src/*path alias fromapps/web/tsconfig.json; web now relies on the UI package export map.
- Inspected installed Turbo and Biome versions and local schemas/docs:
- Files changed for Task 9:
turbo.jsonapps/server/turbo.jsonapps/web/turbo.jsonapps/web/tsconfig.jsonbiome.jsontooling/grit/no-cross-workspace-src-imports.gritapps/server/vitest.config.tsapps/web/vitest.config.tspackages/ai/turbo.jsonpackages/ai/vitest.config.tspackages/api/turbo.jsonpackages/api/vitest.config.tspackages/auth/turbo.jsonpackages/auth/vitest.config.tspackages/config/turbo.jsonpackages/config/vitest.config.tspackages/db/turbo.jsonpackages/db/vitest.config.tspackages/docx/turbo.jsonpackages/docx/vitest.config.tspackages/email/turbo.jsonpackages/email/vitest.config.tspackages/env/turbo.jsonpackages/env/vitest.config.tspackages/fonts/turbo.jsonpackages/fonts/vitest.config.tspackages/import/turbo.jsonpackages/import/vitest.config.tspackages/mcp/turbo.jsonpackages/mcp/vitest.config.tspackages/pdf/turbo.jsonpackages/pdf/vitest.config.tspackages/resume/turbo.jsonpackages/resume/vitest.config.tspackages/runtime-externals/turbo.jsonpackages/schema/turbo.jsonpackages/schema/vitest.config.tspackages/scripts/turbo.jsonpackages/ui/turbo.jsonpackages/ui/vitest.config.tspackages/utils/turbo.jsonpackages/utils/vitest.config.tsdocs/superpowers/worklogs/2026-05-14-monorepo-architecture-reorg.mddocs/superpowers/handoffs/2026-05-14-monorepo-architecture-reorg.md
- Validation for Task 9:
- Baseline
pnpm exec turbo boundariesfailed with 321 issues before configuration, mostly undeclared root test-tool imports and shared root Vitest config imports. - Intermediate
pnpm exec turbo boundariespassed after adding implicit dependencies and the Vitest config boundary-ignore comments. - Final
pnpm exec turbo boundariespassed: checked 660 files in 20 packages, no issues found. pnpm exec biome check biome.json turbo.json tooling/grit/no-cross-workspace-src-imports.grit apps/web/tsconfig.json apps/server/turbo.json apps/web/turbo.json packages/*/turbo.jsonpassed: checked 24 files, no fixes applied.pnpm --filter web typecheckpassed.pnpm --filter @reactive-resume/api typecheckpassed.pnpm --filter server typecheckpassed.
- Baseline
- Remaining risks for Task 9:
- The current Turbo tags are coarse layer tags. They enforce the current obvious app/browser/server/domain/UI direction, but future package splits may need more granular tags or per-package dependency/dependent rules.
- The GritQL plugin is intentionally narrow: it only covers code import/export sources. JSON/tsconfig source-path aliases are covered separately by
noRestrictedImports, manual scans, and the removal of the web-to-UI source alias. - The shared root
vitest.sharedimport remains intentionally ignored in workspace Vitest configs. Moving that helper into a package would remove the ignore comments but would be a broader test-infra reorg.
- Task 10 completed:
- Updated
AGENTS.mdwith executable boundary rules, package-role/runtime tags, a placement decision tree, and thepnpm exec turbo boundariesvalidation command. - Replaced the stale public architecture guide at
docs/contributing/architecture.mdx, which still described an old single-srclayout, with the current monorepo runtime map, workspace ownership table, boundary rules, feature placement guide, API layout, PDF/DOCX boundaries, and MCP boundary. - Added
docs/adr/0001-workspace-boundaries.mdwith the accepted decision, context, consequences, and rejected alternatives. - Left MCP and AI Agent user guides unchanged in this task because Task 4 already updated MCP tool names, and
docs/guides/ai-agent-tools.mdxalready documents the canonicalread_resumeandapply_resume_patchtool names. - Did not add local package READMEs;
AGENTS.md, the architecture guide, the ADR,turbo.json, workspaceturbo.jsontags, andbiome.jsonare the source of truth.
- Updated
- Validation for Task 10:
rg -n "src/integrations|src/components/resume|packages/api/src/services|packages/api/src/helpers|reactive_resume_|tailor_resume|Radix UI|ORPC" AGENTS.md docs/contributing/architecture.mdx docs/adr/0001-workspace-boundaries.md docs/guides/using-the-mcp-server.mdx docs/guides/ai-agent-tools.mdxreturned only the expectedORPCClientlabels in the architecture mermaid diagram.pnpm exec biome check AGENTS.md docs/contributing/architecture.mdx docs/adr/0001-workspace-boundaries.md docs/superpowers/plans/2026-05-14-monorepo-architecture-reorg.md docs/superpowers/worklogs/2026-05-14-monorepo-architecture-reorg.md docs/superpowers/handoffs/2026-05-14-monorepo-architecture-reorg.mddid not process files because this Biome config ignores Markdown/MDX; there is no dedicated docs check script inpackage.json.
- Task 11 completed:
- Ran
pnpm install --lockfile-only; first pass was already up to date, and a later pass updatedpnpm-lock.yamlafter removing stale app dependencies. - Ran
pnpm installafter manifest cleanup so pnpm's dependency-status check would stop trying to purge modules from non-TTY subcommands. - Cleaned up final
pnpm knipfindings:- Deleted unused
apps/web/src/features/resume/export/pdf-document.server.tsx. - Removed unused app dependencies from
apps/server/package.jsonandapps/web/package.json. - Removed unused internal exports in dialog registries, startup checks, API AI helpers, and agent tool helpers.
- Reattached
pdfExportRateLimittodownloadResumePdfProcedure. - Removed stale jobs rate-limit middleware exports that no current router uses.
- Deleted unused
pnpm knipnow exits successfully with only the existing configuration hint:src/server.ts apps/web knip.json Refine entry pattern (no matches).
- Ran
- Final validation for Task 11:
pnpm install --lockfile-onlypassed.pnpm exec biome check .passed: 756 files checked, no fixes applied.pnpm exec turbo boundariespassed: 659 files checked in 20 packages, no issues found.pnpm knippassed with one configuration hint and no unused files/dependencies/exports.pnpm typecheckpassed: 18 successful tasks.pnpm testpassed: 18 successful tasks; notable totals include web 74 files/403 tests, UI 42 files/421 tests, API 19 files/155 tests, PDF 17 files/139 tests.pnpm buildpassed: web and server builds completed.