Skip to content

T-LVLY-vendor-augmented-ts-packages

Status: closed/done · Impact: high · Complexity: medium

The sksizer/augmented_books repo (dormant since 2026-02) is being folded into this monorepo. Its shared TS packages are the substrate every one of its apps depends on; nothing here can consume them while they live in the external repo. Vendor all eleven into packages/ts/ as root Bun workspace members so the app adoptions (T-6C0Z, T-KTGF, T-UPV1) can resolve them via workspace:* and the rest of the monorepo can share them.

Source of truth for the vendor: https://github.com/sksizer/augmented_books at pinned rev acedcf77652e2e7c481e95123c486c2befe2c423. Clone to a scratch dir; copy from there (clean vendored copy, no history — the apps/zoo/MIGRATION.md recipe).

LocationRole today
package.jsonRoot Bun workspaces already glob packages/ts/* — vendored packages auto-join; no root edit needed
packages/ts/Existing shared TS packages (@sksizer/*, @determined/*); no augmented packages present
packages/ts/obsidian-bases/@sksizer/obsidian-bases — an independent implementation of the same idea as @augment/obsidian-bases; the directory-name collision forces the -augment suffix below
packages/ts/intersect/moon.ymlThe moon.yml shape existing packages/ts members follow
.moon/workspace.ymlprojects.globs includes packages/ts/* — vendored dirs register as moon projects
apps/zoo/MIGRATION.mdThe vendoring recipe: clean copy, pnpm→Bun, locks dropped

In the source repo the packages live under packages/node/* plus packages/web/test-vue-component. Internal dependency graph (all via workspace: ranges, which Bun also supports): utilsentitybooks; loggingbooks; json-canvas-corejson-canvas-vue; the rest are leaves.

Eleven packages vendored, names and scopes unchanged (rescoping to @sksizer is a separate decision — T-JCML):

Source (in augmented_books)DestinationPackage name
packages/node/bookspackages/ts/books/@augmented/books
packages/node/contextpackages/ts/context/@augmented/context
packages/node/entitypackages/ts/entity/@augmented/entity
packages/node/hierarchypackages/ts/hierarchy/@augmented/hierarchy
packages/node/json-canvas-corepackages/ts/json-canvas-core/@augment/json-canvas-core
packages/node/json-canvas-vuepackages/ts/json-canvas-vue/@augment/json-canvas-vue
packages/node/loggingpackages/ts/logging/@augmented/logging
packages/node/obsidian-basespackages/ts/obsidian-bases-augment/@augment/obsidian-bases
packages/node/renderpackages/ts/render/@augmented/render
packages/node/utilspackages/ts/utils/@augmented/utils
packages/web/test-vue-componentpackages/ts/test-vue-component/@augmented/test-vue-component

obsidian-bases-augment is explicitly temporary: T-NLKF ports its consumers onto @sksizer/obsidian-bases and deletes it. Its README gets a banner saying so.

  1. Clone the pinned rev to a scratch directory.
  2. Copy each package directory per the table (exclude node_modules, any pnpm-lock.yaml / package-lock.json, .npmrc).
  3. Per package: keep name and scope as-is; drop pnpm-only fields (packageManager, pnpm-specific publish config); ensure scripts run under Bun (bun test, tsc --noEmit or equivalent).
  4. Add a thin moon.yml per package mirroring packages/ts/intersect/moon.yml where the package has test/build tasks.
  5. Root bun install; confirm the workspace glob picked all eleven up.
  6. Run each package’s tests under bun test; typecheck packages without tests. Fix only what the Bun conversion broke — no refactors.
  7. Write the obsidian-bases-augment README banner pointing at T-NLKF.
LocationKindChange
packages/ts/books/newVendored @augmented/books
packages/ts/context/newVendored @augmented/context
packages/ts/entity/newVendored @augmented/entity
packages/ts/hierarchy/newVendored @augmented/hierarchy
packages/ts/json-canvas-core/newVendored @augment/json-canvas-core
packages/ts/json-canvas-vue/newVendored @augment/json-canvas-vue
packages/ts/logging/newVendored @augmented/logging
packages/ts/obsidian-bases-augment/newVendored @augment/obsidian-bases + temporariness banner
packages/ts/render/newVendored @augmented/render
packages/ts/utils/newVendored @augmented/utils
packages/ts/test-vue-component/newVendored @augmented/test-vue-component
bun.lockmodifyRoot install absorbs the vendored packages
  • AC-1: All eleven destination directories exist and bun install exits 0 from a clean checkout.
  • AC-2: bun test passes in every vendored package that carries tests; packages without tests typecheck clean.
  • AC-3: No pnpm-lock.yaml, package-lock.json, or .npmrc exists anywhere under packages/ts/.
  • AC-4: packages/ts/obsidian-bases-augment/README.md names T-NLKF as its planned deletion.
  • AC-5: moon query projects lists the vendored packages that received a moon.yml.
  • App adoptions (separate tasks: T-JV2A, T-6C0Z, T-KTGF, T-LAKY, T-UPV1).
  • Rescoping @augmented/@augment to @sksizer (T-JCML decides).
  • obsidian-bases convergence (T-NLKF).
  • Publishing any vendored package through the derived-libraries channel.
  • none — this is the first mover of the adoption; the app tasks depend on it.
  • Owner decision 2026-07-18: fold augmented_books into the monorepo, flat layout (apps/<name> + packages/ts/*), sharing libraries and componentry as much as possible. vimit stays behind in the source repo.

Captured by /sdlc:task-work on 2026-07-18. PR: pending.

  • AC-1: agent-manual — bun install --frozen-lockfile is clean (1830 installs across 2096 packages, no changes); all 11 destination dirs exist under packages/ts/.
  • AC-2: auto — moon run <pkg>:test passes for every vendored package that carries tests (e.g. obsidian-bases-augment 165 tests, hierarchy 73); packages without tests typecheck clean under root tsc --noEmit (exit 0).
  • AC-3: auto — no pnpm-lock.yaml / package-lock.json / .npmrc under packages/ts/.
  • AC-4: auto — packages/ts/obsidian-bases-augment/README.md names T-NLKF as its planned deletion.
  • AC-5: agent-manual — moon query projects lists the vendored packages with their moon.yml task surface (books:test, context:check, …).
  • The root Bun workspace glob (packages/ts/*) auto-absorbed all 11 vendored packages — no root workspaces edit needed.
  • The internal workspace dep graph (utilsentitybooks; loggingbooks; json-canvas-corejson-canvas-vue) resolved via workspace: ranges under Bun without changes.
  • A thin moon.yml per package registered each into the moon build graph.
  • Vendored @types/node bump broke unrelated tsc — 7 vendored packages declared @types/node ^22.x, which bun resolved as a THIRD @types/node (22.20.1) alongside the repo’s 24/26. Multiple @types/node versions conflict in TypeScript’s global scope and broke EventEmitter.on() typing in apps/sdlc’s dashboard/lease tests — a failure surfacing far from the vendored code. Caught only by the Step 7 gate’s tsc --noEmit, not by per-package tests. Fixed by aligning the seven to ^26.1.0. Automation gap: the adoption recipe should reconcile shared dev-dependency versions (@types/node, typescript) to the monorepo’s pins as a standard step, not leave the source ranges to collide.
  • Native dependency needed explicit trust — @augment/obsidian-bases’s SQLite layer pulls better-sqlite3 (native binding), which does not build on a clean bun install until better-sqlite3 is added to the root package.json trustedDependencies. The task’s ## Files to touch asserted no root edit was needed; a vendored package with a native dep is an exception the checklist should anticipate.
  • Quality baseline not seeded into the worktree — .sdlc/quality-baselines/<sha>.json is gitignored and git worktree add does not propagate it, so sdlc quality run --diff-against-baseline needed the file copied in by hand. (Same recurring gap as T-LAKY / T-F0B2.) Fix: task-work worktree init should seed/symlink .sdlc/quality-baselines/ into new worktrees.

← Back to Tasks