T-6C0Z-adopt-learn-web
Status: closed/done · Impact: medium · Complexity: medium
apps/learn_web is the heaviest consumer of the shared augmented packages
(eight of them) — a Nuxt 4 content/learning site. Bring it in as
apps/learn_web/, joining the ROOT Bun workspace so its @augmented/*
deps resolve to the vendored packages/ts/* members via workspace:*
(the apps/determined/* precedent, not the standalone-zoo one).
Source: https://github.com/sksizer/augmented_books at pinned rev
acedcf77652e2e7c481e95123c486c2befe2c423, path apps/learn_web/.
| Location | Role today |
|---|---|
package.json | Root workspaces list — needs an explicit apps/learn_web entry (app dirs are enumerated, not globbed) |
packages/ts/ | Destination of the vendored @augmented/* packages (T-LVLY) this app imports |
.moon/workspace.yml | apps/* glob registers the app once it carries a moon.yml |
moon.yml | Root install task notes root-anchored installs serialize on the root-bun-install mutex — joining the root workspace rides that |
apps/zoo/MIGRATION.md | pnpm→Bun conversion recipe |
Source app facts at the pinned rev: Nuxt ^4.2.2, @nuxt/content 3.10.0,
Vue ^3.5.26; own pnpm-lock.yaml; has moon.yml, layers/,
scripts/, data/, render_dist/; 64 commits of history. Depends on
@augmented/{books,context,entity,hierarchy,logging,render,utils} and
@augmented/test-vue-component.
Proposed
Section titled “Proposed”apps/learn_web/ is a root Bun workspace member. bun install at the
root links its @augmented/* deps to packages/ts/*. nuxt build
passes. No per-app lockfile.
Approach
Section titled “Approach”- Clone the pinned rev; copy
apps/learn_web/→apps/learn_web/(excludenode_modules,pnpm-lock.yaml,tsconfig.tsbuildinfo). - Add
apps/learn_webto the rootpackage.jsonworkspacesarray. - Ensure its
@augmented/*dep ranges areworkspace:*(or compatible) so they resolve to the vendored packages. - Root
bun install; fix what the Bun conversion broke — no refactors. - Keep/adjust its
moon.ymlso the project id islearn_weband its build/dev tasks runbun run …. - Verify
bun run build(nuxt build) from the app dir; run its tests if any survive the move. - Decide
render_dist/handling: if it’s a build artifact, gitignore it and note; if it’s checked-in fixture data, carry as-is.
Files to touch
Section titled “Files to touch”| Location | Kind | Change |
|---|---|---|
apps/learn_web/ | new | The vendored Nuxt app |
package.json | modify | workspaces += apps/learn_web |
bun.lock | modify | Root install absorbs the app’s deps |
Acceptance criteria
Section titled “Acceptance criteria”- AC-1: Root
bun installexits 0 withapps/learn_webas a workspace member. - AC-2: Every
@augmented/*dep resolves to the localpackages/ts/*package (symlink into rootnode_modules, not a registry fetch). - AC-3:
bun run buildsucceeds inapps/learn_web/. - AC-4: No
pnpm-lock.yamlorpackage-lock.jsonunderapps/learn_web/. - AC-5:
moon query projectslistslearn_web.
Out of scope
Section titled “Out of scope”- Content updates or app feature work.
- Porting its layers/components onto
@determined/ui(T-JCMLsurveys that).
Dependencies
Section titled “Dependencies”T-LVLY— the vendored packages must exist for install to resolve.
Discovery context
Section titled “Discovery context”- Part of the augmented_books adoption (owner decision 2026-07-18).
Post-mortem
Section titled “Post-mortem”Captured by /sdlc:task-work on 2026-07-19. PR: pending.
Acceptance criteria coverage
Section titled “Acceptance criteria coverage”- AC-1: agent-manual — root
bun installexits 0;bun.lockcarrieslearn_web@workspace:apps/learn_web. - AC-2: agent-manual — all 8
@augmented/*deps resolve to localpackages/ts/*(symlinks real-path-resolve into the vendored packages). - AC-3: agent-manual —
bun run build(nuxt) succeeds (.output/serverproduced) after two fixes (see friction): routing@nuxt/contenttonode:sqliteand skipping the client-dump prerender. Rootbunx tsc --noEmitalso clean. - AC-4: auto — no
pnpm-lock.yaml/package-lock.jsonunder the app. - AC-5: agent-manual —
moon query projectslistslearn_web.
What worked
Section titled “What worked”- All 8
@augmented/*deps resolved to the vendoredpackages/ts/*viaworkspace:*with no range changes. - The app declared no
@types/node, so the Wave 1 hoist hazard (T-LVLY/T-KTGF) did not materialize — root tsc stayed clean with no reconciliation.
Friction and automation gaps
Section titled “Friction and automation gaps”@nuxt/content+ Bun: it builds a content SQLite index viabetter-sqlite3(native, doesn’t build under Bun/CI). Fixed withcontent.experimental.sqliteConnector: 'native'(Node’snode:sqlite) + dropping thebetter-sqlite3dep — same fix asT-KTGF. Codify inapps/zoo/MIGRATION.md.- h3 v1/v2 skew (monorepo-wide follow-up). Dropping the pnpm lock floated
nuxt4.2.2→4.5.0, pulling an h3 v2 RC (via@nuxt/test-utils, also present in siblingpolish) that crashes@nuxt/content’s client SQL-dump prerender against nitro’s h3 v1. Worked around by skipping the dump prerender (nitro.prerender.ignore; content is served server-side via the native connector, so the client dump is redundant). The underlying h3 dedupe belongs at the monorepo level, not this adoption. - Vendored
@augmented/*packages have no moonbuildtask and theirdist/isn’t gitignored — the app build needspackages/ts/*/distwhich don’t exist on a fresh worktree; they had to be hand-built out-of-band. Fix (T-LVLY follow-up): addbuildtasks to those packages’moon.ymland gitignorepackages/ts/*/dist. - Wave 1 package bugs surfaced:
packages/ts/renderhas a real TS error (src/wikilinks/plugin.ts:87,stringnot assignable tostring[]; tsc emitsdistanyway), andpackages/ts/entity’s"."export points atdist/index.jsbutsrchas noindex.ts(broken main export; learn_web unaffected as it imports via subpaths). Both are latentT-LVLYpackaging bugs. - 20 server files’
createLoggerimports were repointed from the upstream deep-relative…/packages/node/logging/src/loggerpath to@augmented/logging.lefthookmarkdown-fmtwas excluded forapps/learn_web/**(212 vendored content.mdfixtures) mirroring theapps/determined/**precedent.
Depends on
Section titled “Depends on”T-LVLY