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
18 KiB
18 KiB
Monorepo Architecture Reorg Handoff
This handoff is the coordination entrypoint for the Reactive Resume architecture reorganization. It intentionally references the implementation plan instead of duplicating it.
Primary Plan
- Plan:
docs/superpowers/plans/2026-05-14-monorepo-architecture-reorg.md - Worklog:
docs/superpowers/worklogs/2026-05-14-monorepo-architecture-reorg.md - Branch at start:
feat/explore-hono-orpc-migration
Current Operating Rules
- Preserve existing unrelated local changes:
apps/server/package.jsonpackage.jsonpackages/api/package.jsonpackages/env/package.jsonpackages/utils/package.jsonpnpm-lock.yaml
- Do not use
git reset --hardor destructive checkout commands. - Use green internal commits if committing is requested/appropriate.
- Use root
AGENTS.mdas the final normative architecture source of truth. - Do not create local package READMEs for architecture rules unless a package has unavoidable operational constraints.
Suggested Skills for Future Agents
subagent-driven-developmentfor executing one task slice with review gates.executing-plansfor sequential execution from the plan.documentation-writerforAGENTS.md, ADR, and public architecture docs.handoffwhen pausing or delegating a task outside Codex.turborepowhen editingturbo.json, package tags, or task graph rules.context7-mcpif checking current docs for library/framework behavior.
Delegation Guidance
External agents should be handed exactly one task from the plan plus this handoff path. They should report:
- Status:
DONE,DONE_WITH_CONCERNS,BLOCKED, orNEEDS_CONTEXT - Files changed
- Tests/commands run
- Any plan deviations
- Follow-up tasks needed
Task Ownership Status
- Task 0 Coordination Artifacts: done
- Task 1 Pure Resume Domain Package: done
- Task 2 DOCX Package: done
- Task 3 PDF Package Browser/Server Generation Surface: done
- Task 4 MCP Package and Shared Tool Contracts: done
- Task 5 API Feature Reorganization: done
- Task 6 Server Adapter Reorganization: done
- Task 7 Domain-First Web Reorganization: done
- Task 8 Dialog Registry Rework: done
- Task 9 Boundary Enforcement: done
- Task 10 Documentation and Source of Truth: done
- Task 11 Final Validation and Handoff: done
Architecture Decisions Already Locked
@reactive-resume/schemais Zod/types only.@reactive-resume/resumeowns pure resume-domain behavior.@reactive-resume/aiowns model contracts, not DB-backed agent runtime.- Agent runtime remains in
packages/api/features/agent. - MCP uses an in-process oRPC
RouterClient. - MCP tools move to canonical unprefixed snake_case names, no old aliases.
@reactive-resume/pdfowns PDF generation helpers but not PDF.js viewer UI.apps/webuses domain-first features and generic-onlysrc/components.packages/dbremains centralized.
Latest Task 1 Result
- Created
@reactive-resume/resumewith source-consumed exports:@reactive-resume/resume/patch@reactive-resume/resume/icons
- Moved JSON Patch behavior/tests and social network icon mapping/tests out of
@reactive-resume/utils. - Updated consumers in
packages/ai,packages/api,packages/db,packages/import, andapps/web. - Removed old utils exports for
./resume/patchand./network-icons. - Removed
fast-json-patchfrom@reactive-resume/utilsand@reactive-resume/ai; it now belongs to@reactive-resume/resume. - Task 2 later removed
@reactive-resume/schemafrom@reactive-resume/utilsafter moving DOCX code into@reactive-resume/docx.
Latest Task 2 Result
- Created
@reactive-resume/docxwith source-consumed root export@reactive-resume/docx. - Moved the DOCX builder, HTML conversion, link utilities, section renderers, and colocated tests from
packages/utils/src/resume/docxtopackages/docx/src. - Updated web DOCX export callers and the export-section test mock to import from
@reactive-resume/docx. - Removed the old
@reactive-resume/utils/resume/docxexport and removeddocxplus@reactive-resume/schemafrom@reactive-resume/utils. - Validation passed for
@reactive-resume/docxtests/typecheck,@reactive-resume/utilstypecheck,webtypecheck, focused web export test command, and focused Biome check.
Latest Task 3 Notes
- Added
@reactive-resume/pdf/browserand@reactive-resume/pdf/serverexports. createResumePdfBlob({ data, template, resolveSectionTitle })delegates topdf(<ResumeDocument ... />).toBlob().createResumePdfFile({ data, filename, template, resolveSectionTitle })delegates torenderToBuffer(<ResumeDocument ... />)and preserves the existingFileresponse body shape.- Lingui locale loading stays in the web-local wrappers under
apps/web/src/features/resume/export; those wrappers resolve section titles and passresolveSectionTitleinto the package helpers. - The PDF.js viewer/canvas components remain in web.
apps/web/src/features/resume/preview/preview.browser.tsxnow calls the web-local blob wrapper instead of importing@react-pdf/rendererdirectly. - The authenticated PDF export path now reaches
@reactive-resume/pdf/serverthroughpackages/api/src/features/resume/export.ts;apps/serverconsumes the explicit API feature export instead of owning PDF rendering logic directly. - Validation passed for
@reactive-resume/pdftests/typecheck,webtypecheck,servertypecheck, focused web PDF export/viewer tests, and focused Biome check.
Latest Task 4 Notes
- Created
@reactive-resume/mcpwith source-consumed exports for the compact public surface plus direct subpaths for server card, tool names, tools, prompts, and resources. - Moved MCP tools, prompts, resources, server-card generation, tool annotations, and colocated tests from
apps/web/src/routes/mcp/-helperstopackages/mcp/src. apps/server/src/mcp/handler.tsandapps/server/src/openapi/metadata.tsnow import from@reactive-resume/mcp; server-side MCP execution still uses the injected in-process oRPCRouterClient.- Canonical MCP tool names are unprefixed snake_case. Key renames:
read_resumereplaces the old get-resume tool name, andapply_resume_patchreplaces the old patch tool name. Noreactive_resume_*aliases remain. - Added
@reactive-resume/ai/tools/resume-tool-contractsand reused its JSON Patch operations schema from MCP while keeping MCP-specificidcontext in the MCP input schema. - Validation passed for
@reactive-resume/mcptests/typecheck,servertypecheck,@reactive-resume/aitypecheck, focused Biome check, and the app-to-app import scan.
Latest Task 5 Notes
packages/api/srcis now organized by feature/capability underpackages/api/src/features.- The root router still exports the same top-level API contract from
packages/api/src/routers/index.ts, but it imports feature routers fromfeatures/*/router. - Agent modules now live under
features/agent, with separate procedure modules for threads, messages, attachments, and actions; run-state lives inruns.ts, tool construction intools.ts, and the remaining shared orchestration stays inservice.ts. - Resume modules now live under
features/resume, with capability procedure modules for CRUD, tags, statistics, analysis, events, sharing, and export. Access helpers and resume update events are feature-owned. - The authenticated PDF download procedure moved to
packages/api/src/features/resume/export.tsand calls@reactive-resume/pdf/server. @reactive-resume/apino longer exports./services/*or./helpers/*; explicit exports now cover routers, context, flags type, resume runtime/export, and storage runtime.apps/serverimports storage and the PDF procedure from explicit API feature exports.apps/webAPI imports remain type-only.- Follow-up risk:
features/agent/service.tsandfeatures/resume/service.tsare still large DB-backed facades. They are feature-owned now, but further splitting should be handled as behavior-preserving follow-up work with targeted tests around run lifecycle, patch transactions, notifications, and storage cleanup. - Validation passed for API tests/typecheck, server typecheck, web typecheck, MCP typecheck, focused Biome, and old service/helper import/export scans.
Latest Task 6 Notes
apps/server/srcnow reads as a runtime adapter app:http: route composition, auth/health HTTP handlers, common header/cookie helpersrpc: oRPC fetch handler and request-locale extractionmcp: MCP auth, per-request server setup, and streamable HTTP transport handleropenapi: OpenAPI handler plus OAuth/OpenID/MCP well-known metadatastatic: upload serving,/schema.json, andapps/web/diststatic/SPA fallback servingstartup: database migrations and local-storage path checks
apps/server/src/index.tsnow only re-exportscreateApp, runs startup checks, computes the port, and starts the Hono server.- The route order and public paths from the previous
index.tswere preserved, including/api/rpc,/api/openapi,/api/auth/*,/api/health,/uploads/*,/schema.json,/auth/oauth,/mcp,/.well-known/*, and the web-dist fallback. - Server-side API imports remain on explicit runtime exports only; no
@reactive-resume/api/services/*orapps/web/srcimports were introduced. - Validation passed for server test/typecheck during implementation. Final Task 6 validation commands should still be listed in the worklog/final response after the executing agent's last run.
Latest Task 7 Slice 1 Notes
- Resume-owned web code now starts under
apps/web/src/features/resume:builder/draft.tsowns the builder resume draft store/hooks.preview/*owns the builder preview shell, PDF.js canvas renderer, shared preview helpers/tests, and dashboard thumbnail PDF rendering helpers.export/pdf-document*.tsxowns web-local PDF document/blob/file wrappers around@reactive-resume/pdf.public/*owns the public resume view, public PDF.js viewer, CSS, and tests.
- The old generic resume component folder and public-route private component folder were removed after their files moved.
- Direct
pdfjs-distimports are expected only underapps/web/src/features/resume; do not move them intopackages/pdf. - The public resume route remains responsible for loader/error/head composition, keeps
ssr: "data-only", and lazy-loads@/features/resume/public/public-resume. - The builder preview route keeps
ssr: falseand lazy-loads the preview page composition. - Remaining Task 7 work should continue moving non-resume web domains out of generic
components/routes. Task 8 still owns dialog registry decomposition beyond import updates caused by the draft-store move.
Latest Task 7 Slice 2 Notes
- App-shell code now starts under feature folders:
apps/web/src/features/command-paletteowns the command palette implementation and tests.apps/web/src/features/themeowns the theme provider, combobox, toggle button, and tests.apps/web/src/features/localeowns the locale combobox and tests.apps/web/src/features/userowns the user dropdown.
- Auth route UI now lives under
apps/web/src/features/auth; route files underapps/web/src/routes/authkeep redirects/search validation and compose the feature pages. - Settings page UI now lives under
apps/web/src/features/settings; route files underapps/web/src/routes/dashboard/settingskeep dashboard header composition and redirects.job-search.tsxremains route-only because it is already just a redirect shim. - The old
@/components/{command-palette,theme,locale,user}import paths should not be reintroduced; current consumers import from@/features/*. apps/web/src/componentsnow contains remaining generic primitive/screen folders only.- Task 8 still owns dialog registry decomposition; this slice did not decompose dialog definitions.
Latest Task 8 Notes
apps/web/src/dialogs/store.tsremains the single global dialog runtime and still exportsuseDialogStoreplusDialogProps<T>for existing callers.- Dialog schemas now compose through
apps/web/src/dialogs/schemas.tsfrom domain-owned schema entries indialogs/auth/schema.ts,dialogs/api-key/schema.ts, anddialogs/resume/schema.ts. - Dialog rendering now composes through
apps/web/src/dialogs/renderers.tsxfrom domain-owned renderer registries indialogs/auth/registry.tsx,dialogs/api-key/registry.tsx, anddialogs/resume/registry.tsx. apps/web/src/dialogs/manager.tsxonly imports the dialog shell,renderDialog, and the global store; it no longer imports every dialog implementation directly.- No settings/auth-specific dialog tests existed beyond the shared dialog store and resume template tests.
Latest Task 9 Notes
turbo.jsonnow has executableboundariesconfig:- Global dependencies deny
webandserver, preventing package-to-app and app-to-app dependency edges. - Root test tools are explicit
implicitDependencies:vitest,@testing-library/jest-dom,@testing-library/react, and@testing-library/user-event. - Tag rules cover app, server, browser, universal, domain, and UI layers.
- Global dependencies deny
- Workspace
turbo.jsonfiles now exist for both apps and every package. Each extends root config withextends: ["//"]and declares tags used by the root boundaries. - Every workspace
vitest.config.tskeeps its legitimate root shared config import with// @boundaries-ignore root shared Vitest configimmediately aboveimport { createVitestProjectConfig } from "../../vitest.shared";. biome.jsonnow enablesstyle.noRestrictedImportsfor forbidden cross-workspace source/path imports:@reactive-resume/*/src/**apps/**packages/**
biome.jsonalso registerstooling/grit/no-cross-workspace-src-imports.grit, which flags import/export/dynamic import sources that reach into another workspace'ssrctree.apps/web/tsconfig.jsonno longer maps@reactive-resume/ui/*directly to../../packages/ui/src/*; the web app uses@reactive-resume/uipackage exports instead.- Files changed by Task 9:
turbo.jsonapps/*/turbo.jsonpackages/*/turbo.jsonbiome.jsontooling/grit/no-cross-workspace-src-imports.gritapps/web/tsconfig.jsonapps/server/vitest.config.tsapps/web/vitest.config.tspackages/*/vitest.config.tsdocs/superpowers/worklogs/2026-05-14-monorepo-architecture-reorg.mddocs/superpowers/handoffs/2026-05-14-monorepo-architecture-reorg.md
- Validation passed:
pnpm exec turbo boundariespnpm 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.jsonpnpm --filter web typecheckpnpm --filter @reactive-resume/api typecheckpnpm --filter server typecheck
- Remaining risks:
- The Turbo tag set is intentionally coarse and may need finer per-package rules as future browser/server package classes settle.
- The GritQL plugin only inspects code import/export sources; keep the package export-map and tsconfig scans in the final validation list.
- The root shared Vitest config remains an intentional boundary ignore; moving it behind a package export would be a separate test-infra cleanup.
Latest Task 10 Notes
AGENTS.mdis now the operational source of truth for package roles, runtime tags, import rules, placement decisions, and validation commands.docs/contributing/architecture.mdxis now a public contributor overview of the current monorepo layout instead of the removed single-srcarchitecture.docs/adr/0001-workspace-boundaries.mdrecords the rationale for domain-first packages, explicit export maps,turbo boundaries, and Biome/Grit import enforcement.- MCP user docs already list canonical unprefixed tool names from Task 4. AI Agent tool docs already list
read_resumeandapply_resume_patch; no Task 10 changes were needed there. - Follow-up documentation audit on 2026-05-15 reconciled AGENTS and public docs with the final
apps/serverHono adapter shape, current Node/pnpm prerequisites, Base UI wording, provider-native web research behavior, and the current env schema. - Docs validation available in-repo is limited:
- Stale-text scan passed except expected
ORPCClientdiagram labels. - Biome ignored Markdown/MDX and reported that no files were processed for the docs paths.
- No dedicated docs build/check script exists in
package.json.
- Stale-text scan passed except expected
Latest Task 11 Notes
- Final cleanup after
pnpm knip:- Removed stale app dependencies from
apps/server/package.jsonandapps/web/package.json. - Deleted the unused web server PDF wrapper at
apps/web/src/features/resume/export/pdf-document.server.tsx. - Removed unnecessary exported markers from internal helper functions/constants.
- Added
pdfExportRateLimittopackages/api/src/features/resume/export.ts. - Removed unused jobs rate-limit middleware entries that no current router uses.
- Removed stale app dependencies from
- Final validation commands passed:
pnpm install --lockfile-onlypnpm installpnpm exec biome check .pnpm exec turbo boundariespnpm knippnpm typecheckpnpm testpnpm build
pnpm knipstill prints a non-failing configuration hint:src/server.ts apps/web knip.json Refine entry pattern (no matches).- Useful review anchors:
- Architecture rules:
AGENTS.md,docs/contributing/architecture.mdx,docs/adr/0001-workspace-boundaries.md. - Boundary enforcement:
turbo.json, workspaceturbo.jsonfiles,biome.json,tooling/grit/no-cross-workspace-src-imports.grit. - API feature tree:
packages/api/src/features. - Server adapter tree:
apps/server/src/{http,rpc,mcp,openapi,static,startup}. - Web feature tree:
apps/web/src/features.
- Architecture rules: