feat(coord): DB migration — project-scoped missions, multi-tenant RBAC #149

Merged
jason.woltje merged 1 commits from feat/p7-020-coord-db into main 2026-03-15 19:18:18 +00:00
Owner

Summary

  • Add , , , columns to the table for multi-tenant scoping
  • Add new table for coord-managed task tracking with status, notes, PR fields
  • Both tables enforce per-user RBAC: all queries filtered by foreign key (cascade delete)
  • Generate Drizzle migration
  • Extend with userId-scoped query methods on missions repo and new mission-tasks repo
  • Extend with DB-backed mission and task CRUD (userId-gated)
  • Extend with DB-backed REST endpoints under
  • Preserve file-based coord endpoints for backwards compatibility

Closes #131

Test plan

mosaic-stack@ typecheck /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1
turbo run typecheck

• Packages in scope: @mosaic/agent, @mosaic/auth, @mosaic/brain, @mosaic/cli, @mosaic/coord, @mosaic/db, @mosaic/design-tokens, @mosaic/discord-plugin, @mosaic/gateway, @mosaic/log, @mosaic/memory, @mosaic/mosaic, @mosaic/prdy, @mosaic/quality-rails, @mosaic/queue, @mosaic/telegram-plugin, @mosaic/types, @mosaic/web
• Running typecheck in 18 packages
• Remote caching disabled, using shared worktree cache
@mosaic/mosaic:typecheck: cache hit, replaying logs d15bbf0202989a1c
@mosaic/mosaic:typecheck:
@mosaic/mosaic:typecheck: > @mosaic/mosaic@0.1.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/mosaic
@mosaic/mosaic:typecheck: > tsc --noEmit
@mosaic/mosaic:typecheck:
@mosaic/telegram-plugin:build: cache hit, replaying logs 315ca8ca45a7dd36
@mosaic/telegram-plugin:build:
@mosaic/telegram-plugin:build: > @mosaic/telegram-plugin@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/plugins/telegram
@mosaic/telegram-plugin:build: > tsc
@mosaic/telegram-plugin:build:
@mosaic/discord-plugin:build: cache hit, replaying logs cae2d5790feb533d
@mosaic/discord-plugin:build:
@mosaic/quality-rails:build: cache hit, replaying logs 248bf18d8f2882a3
@mosaic/discord-plugin:build: > @mosaic/discord-plugin@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/plugins/discord
@mosaic/discord-plugin:build: > tsc
@mosaic/discord-plugin:build:
@mosaic/quality-rails:build:
@mosaic/quality-rails:build: > @mosaic/quality-rails@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/quality-rails
@mosaic/quality-rails:build: > tsc
@mosaic/quality-rails:build:
@mosaic/prdy:build: cache hit, replaying logs 7b3953721f18f9de
@mosaic/prdy:build:
@mosaic/prdy:build: > @mosaic/prdy@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/prdy
@mosaic/prdy:build: > tsc
@mosaic/prdy:build:
@mosaic/prdy:typecheck: cache hit, replaying logs 6dd9ad310269547b
@mosaic/prdy:typecheck:
@mosaic/prdy:typecheck: > @mosaic/prdy@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/prdy
@mosaic/prdy:typecheck: > tsc --noEmit
@mosaic/prdy:typecheck:
@mosaic/types:typecheck: cache hit, replaying logs 40c622f81465266f
@mosaic/types:typecheck:
@mosaic/types:typecheck: > @mosaic/types@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1-worktrees/feat-p5-telegram-plugin/packages/types
@mosaic/types:typecheck: > tsc --noEmit
@mosaic/types:typecheck:
@mosaic/telegram-plugin:typecheck: cache hit, replaying logs 4e203cc7e94b5b26
@mosaic/telegram-plugin:typecheck:
@mosaic/telegram-plugin:typecheck: > @mosaic/telegram-plugin@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1-worktrees/feat-p5-telegram-plugin/plugins/telegram
@mosaic/telegram-plugin:typecheck: > tsc --noEmit
@mosaic/telegram-plugin:typecheck:
@mosaic/quality-rails:typecheck: cache hit, replaying logs c0a5905591d1e60e
@mosaic/quality-rails:typecheck:
@mosaic/quality-rails:typecheck: > @mosaic/quality-rails@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/quality-rails
@mosaic/quality-rails:typecheck: > tsc --noEmit
@mosaic/quality-rails:typecheck:
@mosaic/design-tokens:typecheck: cache hit, replaying logs 44b0817df068243e
@mosaic/design-tokens:typecheck:
@mosaic/design-tokens:typecheck: > @mosaic/design-tokens@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1-worktrees/feat-p5-telegram-plugin/packages/design-tokens
@mosaic/design-tokens:typecheck: > tsc --noEmit
@mosaic/design-tokens:typecheck:
@mosaic/design-tokens:build: cache hit, replaying logs d508732b1db29281
@mosaic/design-tokens:build:
@mosaic/design-tokens:build: > @mosaic/design-tokens@0.0.0 build /home/jwoltje/src/mosaic-mono-v1-worktrees/feat-p5-telegram-plugin/packages/design-tokens
@mosaic/design-tokens:build: > tsc
@mosaic/design-tokens:build:
@mosaic/mosaic:build: cache hit, replaying logs 909bb066b5e70a64
@mosaic/mosaic:build:
@mosaic/mosaic:build: > @mosaic/mosaic@0.1.0 build /home/jwoltje/src/mosaic-mono-v1/packages/mosaic
@mosaic/mosaic:build: > tsc
@mosaic/mosaic:build:
@mosaic/db:build: cache hit, replaying logs dbde47459cfeb75d
@mosaic/db:build:
@mosaic/db:build: > @mosaic/db@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/db
@mosaic/db:build: > tsc
@mosaic/db:build:
@mosaic/discord-plugin:typecheck: cache hit, replaying logs 86f09055b3b3c5e8
@mosaic/discord-plugin:typecheck:
@mosaic/discord-plugin:typecheck: > @mosaic/discord-plugin@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1-worktrees/feat-p5-telegram-plugin/plugins/discord
@mosaic/discord-plugin:typecheck: > tsc --noEmit
@mosaic/types:build: cache hit, replaying logs fa3d004906a5edcd
@mosaic/discord-plugin:typecheck:
@mosaic/types:build:
@mosaic/types:build: > @mosaic/types@0.0.0 build /home/jwoltje/src/mosaic-mono-v1-worktrees/feat-p5-telegram-plugin/packages/types
@mosaic/types:build: > tsc
@mosaic/types:build:
@mosaic/db:typecheck: cache hit, replaying logs 3a5e0ff1c20a9ca0
@mosaic/db:typecheck:
@mosaic/db:typecheck: > @mosaic/db@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/db
@mosaic/db:typecheck: > tsc --noEmit
@mosaic/db:typecheck:
@mosaic/web:typecheck: cache hit, replaying logs a512b3aa0869c81a
@mosaic/web:typecheck:
@mosaic/web:typecheck: > @mosaic/web@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/apps/web
@mosaic/web:typecheck: > tsc --noEmit
@mosaic/web:typecheck:
@mosaic/cli:typecheck: cache hit, replaying logs 6c8f4dfcf3d01db2
@mosaic/cli:typecheck:
@mosaic/cli:typecheck: > @mosaic/cli@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/cli
@mosaic/cli:typecheck: > tsc --noEmit
@mosaic/cli:typecheck:
@mosaic/auth:typecheck: cache hit, replaying logs 6cd19f5c5db0aaa6
@mosaic/auth:typecheck:
@mosaic/auth:typecheck: > @mosaic/auth@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/auth
@mosaic/auth:typecheck: > tsc --noEmit
@mosaic/auth:typecheck:
@mosaic/log:build: cache hit, replaying logs 4395377687d7c43d
@mosaic/log:build:
@mosaic/log:build: > @mosaic/log@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/log
@mosaic/log:build: > tsc
@mosaic/log:build:
@mosaic/log:typecheck: cache hit, replaying logs ea376deb7bbdb01a
@mosaic/log:typecheck:
@mosaic/log:typecheck: > @mosaic/log@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/log
@mosaic/log:typecheck: > tsc --noEmit
@mosaic/log:typecheck:
@mosaic/auth:build: cache hit, replaying logs e4728bfb2d762d8d
@mosaic/auth:build:
@mosaic/auth:build: > @mosaic/auth@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/auth
@mosaic/auth:build: > tsc
@mosaic/auth:build:
@mosaic/agent:typecheck: cache hit, replaying logs af13bdcc66bc3bc6
@mosaic/agent:typecheck:
@mosaic/agent:typecheck: > @mosaic/agent@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1-worktrees/feat-p5-telegram-plugin/packages/agent
@mosaic/agent:typecheck: > tsc --noEmit
@mosaic/agent:typecheck:
@mosaic/memory:typecheck: cache hit, replaying logs c36d997a1a412c2a
@mosaic/memory:typecheck:
@mosaic/memory:typecheck: > @mosaic/memory@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/memory
@mosaic/memory:typecheck: > tsc --noEmit
@mosaic/memory:typecheck:
@mosaic/brain:typecheck: cache hit, replaying logs ca0867ff9b15235f
@mosaic/brain:typecheck:
@mosaic/brain:typecheck: > @mosaic/brain@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/brain
@mosaic/brain:typecheck: > tsc --noEmit
@mosaic/brain:typecheck:
@mosaic/memory:build: cache hit, replaying logs 183d3fbd0b66339d
@mosaic/memory:build:
@mosaic/memory:build: > @mosaic/memory@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/memory
@mosaic/memory:build: > tsc
@mosaic/memory:build:
@mosaic/coord:typecheck: cache hit, replaying logs 992071bed06e90a8
@mosaic/coord:typecheck:
@mosaic/coord:typecheck: > @mosaic/coord@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1-worktrees/feat-p5-telegram-plugin/packages/coord
@mosaic/coord:typecheck: > tsc --noEmit
@mosaic/coord:typecheck:
@mosaic/coord:build: cache hit, replaying logs 6b1afe0fa60b3d91
@mosaic/coord:build:
@mosaic/coord:build: > @mosaic/coord@0.0.0 build /home/jwoltje/src/mosaic-mono-v1-worktrees/feat-p5-telegram-plugin/packages/coord
@mosaic/coord:build: > tsc
@mosaic/coord:build:
@mosaic/queue:typecheck: cache hit, replaying logs 4182729bc5c169ae
@mosaic/queue:typecheck:
@mosaic/queue:typecheck: > @mosaic/queue@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1-worktrees/feat-p5-telegram-plugin/packages/queue
@mosaic/queue:typecheck: > tsc --noEmit
@mosaic/queue:typecheck:
@mosaic/brain:build: cache hit, replaying logs fa2f67144403c5cd
@mosaic/brain:build:
@mosaic/brain:build: > @mosaic/brain@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/brain
@mosaic/brain:build: > tsc
@mosaic/brain:build:
@mosaic/gateway:typecheck: cache hit, replaying logs 2bb54d71d95af3d3
@mosaic/gateway:typecheck:
@mosaic/gateway:typecheck: > @mosaic/gateway@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/apps/gateway
@mosaic/gateway:typecheck: > tsc --noEmit -p tsconfig.typecheck.json
@mosaic/gateway:typecheck:

Tasks: 31 successful, 31 total
Cached: 31 cached, 31 total
Time: 67ms >>> FULL TURBO passes (31/31)

mosaic-stack@ lint /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1
turbo run lint

• Packages in scope: @mosaic/agent, @mosaic/auth, @mosaic/brain, @mosaic/cli, @mosaic/coord, @mosaic/db, @mosaic/design-tokens, @mosaic/discord-plugin, @mosaic/gateway, @mosaic/log, @mosaic/memory, @mosaic/mosaic, @mosaic/prdy, @mosaic/quality-rails, @mosaic/queue, @mosaic/telegram-plugin, @mosaic/types, @mosaic/web
• Running lint in 18 packages
• Remote caching disabled, using shared worktree cache
@mosaic/db:lint: cache hit, replaying logs 7b4eb96b8acfd551
@mosaic/db:lint:
@mosaic/db:lint: > @mosaic/db@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/db
@mosaic/db:lint: > eslint src
@mosaic/db:lint:
@mosaic/discord-plugin:lint: cache hit, replaying logs c89245f8756c09a0
@mosaic/discord-plugin:lint:
@mosaic/discord-plugin:lint: > @mosaic/discord-plugin@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/plugins/discord
@mosaic/discord-plugin:lint: > eslint src
@mosaic/discord-plugin:lint:
@mosaic/quality-rails:lint: cache hit, replaying logs 7aef18eb611d28ed
@mosaic/quality-rails:lint:
@mosaic/quality-rails:lint: > @mosaic/quality-rails@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/quality-rails
@mosaic/quality-rails:lint: > eslint src
@mosaic/quality-rails:lint:
@mosaic/telegram-plugin:lint: cache hit, replaying logs 958739d66070f05c
@mosaic/telegram-plugin:lint:
@mosaic/telegram-plugin:lint: > @mosaic/telegram-plugin@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1-worktrees/p5-telegram/plugins/telegram
@mosaic/telegram-plugin:lint: > eslint src
@mosaic/telegram-plugin:lint:
@mosaic/design-tokens:lint: cache hit, replaying logs 84099f6fb0e3a129
@mosaic/design-tokens:lint:
@mosaic/design-tokens:lint: > @mosaic/design-tokens@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/design-tokens
@mosaic/design-tokens:lint: > eslint src
@mosaic/design-tokens:lint:
@mosaic/mosaic:lint: cache hit, replaying logs a498c843ee44b35e
@mosaic/mosaic:lint:
@mosaic/mosaic:lint: > @mosaic/mosaic@0.1.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/mosaic
@mosaic/mosaic:lint: > eslint src
@mosaic/mosaic:lint:
@mosaic/prdy:lint: cache hit, replaying logs a4b15cbbcc055e16
@mosaic/prdy:lint:
@mosaic/prdy:lint: > @mosaic/prdy@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/prdy
@mosaic/prdy:lint: > eslint src
@mosaic/prdy:lint:
@mosaic/types:lint: cache hit, replaying logs 22a1e5a1eb5381b7
@mosaic/types:lint:
@mosaic/types:lint: > @mosaic/types@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/types
@mosaic/types:lint: > eslint src
@mosaic/types:lint:
@mosaic/auth:lint: cache hit, replaying logs 081ddd1331160887
@mosaic/auth:lint:
@mosaic/auth:lint: > @mosaic/auth@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/auth
@mosaic/auth:lint: > eslint src
@mosaic/auth:lint:
@mosaic/log:lint: cache hit, replaying logs 8538315fc927183f
@mosaic/log:lint:
@mosaic/log:lint: > @mosaic/log@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/log
@mosaic/log:lint: > eslint src
@mosaic/log:lint:
@mosaic/web:lint: cache hit, replaying logs b37e9658d1361569
@mosaic/web:lint:
@mosaic/web:lint: > @mosaic/web@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/apps/web
@mosaic/web:lint: > eslint src
@mosaic/web:lint:
@mosaic/cli:lint: cache hit, replaying logs 1ea89b1c02f1def9
@mosaic/cli:lint:
@mosaic/cli:lint: > @mosaic/cli@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/cli
@mosaic/cli:lint: > eslint src
@mosaic/cli:lint:
@mosaic/agent:lint: cache hit, replaying logs 56d9f68e50b2dd0f
@mosaic/agent:lint:
@mosaic/agent:lint: > @mosaic/agent@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/agent
@mosaic/agent:lint: > eslint src
@mosaic/agent:lint:
@mosaic/queue:lint: cache hit, replaying logs 180dc00560191a93
@mosaic/queue:lint:
@mosaic/queue:lint: > @mosaic/queue@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/queue
@mosaic/queue:lint: > eslint src
@mosaic/queue:lint:
@mosaic/coord:lint: cache hit, replaying logs 35412db218657700
@mosaic/coord:lint:
@mosaic/coord:lint: > @mosaic/coord@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/coord
@mosaic/coord:lint: > eslint src
@mosaic/coord:lint:
@mosaic/memory:lint: cache hit, replaying logs 4ceb300fff933618
@mosaic/memory:lint:
@mosaic/memory:lint: > @mosaic/memory@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/memory
@mosaic/memory:lint: > eslint src
@mosaic/memory:lint:
@mosaic/brain:lint: cache hit, replaying logs 8e3f09555e970659
@mosaic/brain:lint:
@mosaic/brain:lint: > @mosaic/brain@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/brain
@mosaic/brain:lint: > eslint src
@mosaic/brain:lint:
@mosaic/gateway:lint: cache hit, replaying logs 04c73e4431ee0ef9
@mosaic/gateway:lint:
@mosaic/gateway:lint: > @mosaic/gateway@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/apps/gateway
@mosaic/gateway:lint: > eslint src
@mosaic/gateway:lint:

Tasks: 18 successful, 18 total
Cached: 18 cached, 18 total
Time: 47ms >>> FULL TURBO passes (18/18)

mosaic-stack@ format:check /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1
prettier --check "**/*.{ts,tsx,js,jsx,json,md}"

Checking formatting...
All matched files use Prettier code style! passes

  • returns only missions owned by the authenticated user
  • creates a mission scoped to the authenticated user
  • returns 404 for missions owned by another user
  • returns only tasks for that mission/user

🤖 Generated with Claude Code

Fixes #131

## Summary - Add , , , columns to the table for multi-tenant scoping - Add new table for coord-managed task tracking with status, notes, PR fields - Both tables enforce per-user RBAC: all queries filtered by foreign key (cascade delete) - Generate Drizzle migration - Extend with userId-scoped query methods on missions repo and new mission-tasks repo - Extend with DB-backed mission and task CRUD (userId-gated) - Extend with DB-backed REST endpoints under - Preserve file-based coord endpoints for backwards compatibility Closes #131 ## Test plan - [ ] > mosaic-stack@ typecheck /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1 > turbo run typecheck • Packages in scope: @mosaic/agent, @mosaic/auth, @mosaic/brain, @mosaic/cli, @mosaic/coord, @mosaic/db, @mosaic/design-tokens, @mosaic/discord-plugin, @mosaic/gateway, @mosaic/log, @mosaic/memory, @mosaic/mosaic, @mosaic/prdy, @mosaic/quality-rails, @mosaic/queue, @mosaic/telegram-plugin, @mosaic/types, @mosaic/web • Running typecheck in 18 packages • Remote caching disabled, using shared worktree cache @mosaic/mosaic:typecheck: cache hit, replaying logs d15bbf0202989a1c @mosaic/mosaic:typecheck: @mosaic/mosaic:typecheck: > @mosaic/mosaic@0.1.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/mosaic @mosaic/mosaic:typecheck: > tsc --noEmit @mosaic/mosaic:typecheck: @mosaic/telegram-plugin:build: cache hit, replaying logs 315ca8ca45a7dd36 @mosaic/telegram-plugin:build: @mosaic/telegram-plugin:build: > @mosaic/telegram-plugin@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/plugins/telegram @mosaic/telegram-plugin:build: > tsc @mosaic/telegram-plugin:build: @mosaic/discord-plugin:build: cache hit, replaying logs cae2d5790feb533d @mosaic/discord-plugin:build: @mosaic/quality-rails:build: cache hit, replaying logs 248bf18d8f2882a3 @mosaic/discord-plugin:build: > @mosaic/discord-plugin@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/plugins/discord @mosaic/discord-plugin:build: > tsc @mosaic/discord-plugin:build: @mosaic/quality-rails:build: @mosaic/quality-rails:build: > @mosaic/quality-rails@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/quality-rails @mosaic/quality-rails:build: > tsc @mosaic/quality-rails:build: @mosaic/prdy:build: cache hit, replaying logs 7b3953721f18f9de @mosaic/prdy:build: @mosaic/prdy:build: > @mosaic/prdy@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/packages/prdy @mosaic/prdy:build: > tsc @mosaic/prdy:build: @mosaic/prdy:typecheck: cache hit, replaying logs 6dd9ad310269547b @mosaic/prdy:typecheck: @mosaic/prdy:typecheck: > @mosaic/prdy@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/prdy @mosaic/prdy:typecheck: > tsc --noEmit @mosaic/prdy:typecheck: @mosaic/types:typecheck: cache hit, replaying logs 40c622f81465266f @mosaic/types:typecheck: @mosaic/types:typecheck: > @mosaic/types@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1-worktrees/feat-p5-telegram-plugin/packages/types @mosaic/types:typecheck: > tsc --noEmit @mosaic/types:typecheck: @mosaic/telegram-plugin:typecheck: cache hit, replaying logs 4e203cc7e94b5b26 @mosaic/telegram-plugin:typecheck: @mosaic/telegram-plugin:typecheck: > @mosaic/telegram-plugin@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1-worktrees/feat-p5-telegram-plugin/plugins/telegram @mosaic/telegram-plugin:typecheck: > tsc --noEmit @mosaic/telegram-plugin:typecheck: @mosaic/quality-rails:typecheck: cache hit, replaying logs c0a5905591d1e60e @mosaic/quality-rails:typecheck: @mosaic/quality-rails:typecheck: > @mosaic/quality-rails@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/quality-rails @mosaic/quality-rails:typecheck: > tsc --noEmit @mosaic/quality-rails:typecheck: @mosaic/design-tokens:typecheck: cache hit, replaying logs 44b0817df068243e @mosaic/design-tokens:typecheck: @mosaic/design-tokens:typecheck: > @mosaic/design-tokens@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1-worktrees/feat-p5-telegram-plugin/packages/design-tokens @mosaic/design-tokens:typecheck: > tsc --noEmit @mosaic/design-tokens:typecheck: @mosaic/design-tokens:build: cache hit, replaying logs d508732b1db29281 @mosaic/design-tokens:build: @mosaic/design-tokens:build: > @mosaic/design-tokens@0.0.0 build /home/jwoltje/src/mosaic-mono-v1-worktrees/feat-p5-telegram-plugin/packages/design-tokens @mosaic/design-tokens:build: > tsc @mosaic/design-tokens:build: @mosaic/mosaic:build: cache hit, replaying logs 909bb066b5e70a64 @mosaic/mosaic:build: @mosaic/mosaic:build: > @mosaic/mosaic@0.1.0 build /home/jwoltje/src/mosaic-mono-v1/packages/mosaic @mosaic/mosaic:build: > tsc @mosaic/mosaic:build: @mosaic/db:build: cache hit, replaying logs dbde47459cfeb75d @mosaic/db:build: @mosaic/db:build: > @mosaic/db@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/db @mosaic/db:build: > tsc @mosaic/db:build: @mosaic/discord-plugin:typecheck: cache hit, replaying logs 86f09055b3b3c5e8 @mosaic/discord-plugin:typecheck: @mosaic/discord-plugin:typecheck: > @mosaic/discord-plugin@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1-worktrees/feat-p5-telegram-plugin/plugins/discord @mosaic/discord-plugin:typecheck: > tsc --noEmit @mosaic/types:build: cache hit, replaying logs fa3d004906a5edcd @mosaic/discord-plugin:typecheck: @mosaic/types:build: @mosaic/types:build: > @mosaic/types@0.0.0 build /home/jwoltje/src/mosaic-mono-v1-worktrees/feat-p5-telegram-plugin/packages/types @mosaic/types:build: > tsc @mosaic/types:build: @mosaic/db:typecheck: cache hit, replaying logs 3a5e0ff1c20a9ca0 @mosaic/db:typecheck: @mosaic/db:typecheck: > @mosaic/db@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/db @mosaic/db:typecheck: > tsc --noEmit @mosaic/db:typecheck: @mosaic/web:typecheck: cache hit, replaying logs a512b3aa0869c81a @mosaic/web:typecheck: @mosaic/web:typecheck: > @mosaic/web@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/apps/web @mosaic/web:typecheck: > tsc --noEmit @mosaic/web:typecheck: @mosaic/cli:typecheck: cache hit, replaying logs 6c8f4dfcf3d01db2 @mosaic/cli:typecheck: @mosaic/cli:typecheck: > @mosaic/cli@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/packages/cli @mosaic/cli:typecheck: > tsc --noEmit @mosaic/cli:typecheck: @mosaic/auth:typecheck: cache hit, replaying logs 6cd19f5c5db0aaa6 @mosaic/auth:typecheck: @mosaic/auth:typecheck: > @mosaic/auth@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/auth @mosaic/auth:typecheck: > tsc --noEmit @mosaic/auth:typecheck: @mosaic/log:build: cache hit, replaying logs 4395377687d7c43d @mosaic/log:build: @mosaic/log:build: > @mosaic/log@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/log @mosaic/log:build: > tsc @mosaic/log:build: @mosaic/log:typecheck: cache hit, replaying logs ea376deb7bbdb01a @mosaic/log:typecheck: @mosaic/log:typecheck: > @mosaic/log@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/log @mosaic/log:typecheck: > tsc --noEmit @mosaic/log:typecheck: @mosaic/auth:build: cache hit, replaying logs e4728bfb2d762d8d @mosaic/auth:build: @mosaic/auth:build: > @mosaic/auth@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/auth @mosaic/auth:build: > tsc @mosaic/auth:build: @mosaic/agent:typecheck: cache hit, replaying logs af13bdcc66bc3bc6 @mosaic/agent:typecheck: @mosaic/agent:typecheck: > @mosaic/agent@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1-worktrees/feat-p5-telegram-plugin/packages/agent @mosaic/agent:typecheck: > tsc --noEmit @mosaic/agent:typecheck: @mosaic/memory:typecheck: cache hit, replaying logs c36d997a1a412c2a @mosaic/memory:typecheck: @mosaic/memory:typecheck: > @mosaic/memory@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/memory @mosaic/memory:typecheck: > tsc --noEmit @mosaic/memory:typecheck: @mosaic/brain:typecheck: cache hit, replaying logs ca0867ff9b15235f @mosaic/brain:typecheck: @mosaic/brain:typecheck: > @mosaic/brain@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/brain @mosaic/brain:typecheck: > tsc --noEmit @mosaic/brain:typecheck: @mosaic/memory:build: cache hit, replaying logs 183d3fbd0b66339d @mosaic/memory:build: @mosaic/memory:build: > @mosaic/memory@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/memory @mosaic/memory:build: > tsc @mosaic/memory:build: @mosaic/coord:typecheck: cache hit, replaying logs 992071bed06e90a8 @mosaic/coord:typecheck: @mosaic/coord:typecheck: > @mosaic/coord@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1-worktrees/feat-p5-telegram-plugin/packages/coord @mosaic/coord:typecheck: > tsc --noEmit @mosaic/coord:typecheck: @mosaic/coord:build: cache hit, replaying logs 6b1afe0fa60b3d91 @mosaic/coord:build: @mosaic/coord:build: > @mosaic/coord@0.0.0 build /home/jwoltje/src/mosaic-mono-v1-worktrees/feat-p5-telegram-plugin/packages/coord @mosaic/coord:build: > tsc @mosaic/coord:build: @mosaic/queue:typecheck: cache hit, replaying logs 4182729bc5c169ae @mosaic/queue:typecheck: @mosaic/queue:typecheck: > @mosaic/queue@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1-worktrees/feat-p5-telegram-plugin/packages/queue @mosaic/queue:typecheck: > tsc --noEmit @mosaic/queue:typecheck: @mosaic/brain:build: cache hit, replaying logs fa2f67144403c5cd @mosaic/brain:build: @mosaic/brain:build: > @mosaic/brain@0.0.0 build /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/brain @mosaic/brain:build: > tsc @mosaic/brain:build: @mosaic/gateway:typecheck: cache hit, replaying logs 2bb54d71d95af3d3 @mosaic/gateway:typecheck: @mosaic/gateway:typecheck: > @mosaic/gateway@0.0.0 typecheck /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/apps/gateway @mosaic/gateway:typecheck: > tsc --noEmit -p tsconfig.typecheck.json @mosaic/gateway:typecheck: Tasks: 31 successful, 31 total Cached: 31 cached, 31 total Time: 67ms >>> FULL TURBO passes (31/31) - [ ] > mosaic-stack@ lint /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1 > turbo run lint • Packages in scope: @mosaic/agent, @mosaic/auth, @mosaic/brain, @mosaic/cli, @mosaic/coord, @mosaic/db, @mosaic/design-tokens, @mosaic/discord-plugin, @mosaic/gateway, @mosaic/log, @mosaic/memory, @mosaic/mosaic, @mosaic/prdy, @mosaic/quality-rails, @mosaic/queue, @mosaic/telegram-plugin, @mosaic/types, @mosaic/web • Running lint in 18 packages • Remote caching disabled, using shared worktree cache @mosaic/db:lint: cache hit, replaying logs 7b4eb96b8acfd551 @mosaic/db:lint: @mosaic/db:lint: > @mosaic/db@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/db @mosaic/db:lint: > eslint src @mosaic/db:lint: @mosaic/discord-plugin:lint: cache hit, replaying logs c89245f8756c09a0 @mosaic/discord-plugin:lint: @mosaic/discord-plugin:lint: > @mosaic/discord-plugin@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/plugins/discord @mosaic/discord-plugin:lint: > eslint src @mosaic/discord-plugin:lint: @mosaic/quality-rails:lint: cache hit, replaying logs 7aef18eb611d28ed @mosaic/quality-rails:lint: @mosaic/quality-rails:lint: > @mosaic/quality-rails@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/quality-rails @mosaic/quality-rails:lint: > eslint src @mosaic/quality-rails:lint: @mosaic/telegram-plugin:lint: cache hit, replaying logs 958739d66070f05c @mosaic/telegram-plugin:lint: @mosaic/telegram-plugin:lint: > @mosaic/telegram-plugin@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1-worktrees/p5-telegram/plugins/telegram @mosaic/telegram-plugin:lint: > eslint src @mosaic/telegram-plugin:lint: @mosaic/design-tokens:lint: cache hit, replaying logs 84099f6fb0e3a129 @mosaic/design-tokens:lint: @mosaic/design-tokens:lint: > @mosaic/design-tokens@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/design-tokens @mosaic/design-tokens:lint: > eslint src @mosaic/design-tokens:lint: @mosaic/mosaic:lint: cache hit, replaying logs a498c843ee44b35e @mosaic/mosaic:lint: @mosaic/mosaic:lint: > @mosaic/mosaic@0.1.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/mosaic @mosaic/mosaic:lint: > eslint src @mosaic/mosaic:lint: @mosaic/prdy:lint: cache hit, replaying logs a4b15cbbcc055e16 @mosaic/prdy:lint: @mosaic/prdy:lint: > @mosaic/prdy@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/prdy @mosaic/prdy:lint: > eslint src @mosaic/prdy:lint: @mosaic/types:lint: cache hit, replaying logs 22a1e5a1eb5381b7 @mosaic/types:lint: @mosaic/types:lint: > @mosaic/types@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/types @mosaic/types:lint: > eslint src @mosaic/types:lint: @mosaic/auth:lint: cache hit, replaying logs 081ddd1331160887 @mosaic/auth:lint: @mosaic/auth:lint: > @mosaic/auth@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/auth @mosaic/auth:lint: > eslint src @mosaic/auth:lint: @mosaic/log:lint: cache hit, replaying logs 8538315fc927183f @mosaic/log:lint: @mosaic/log:lint: > @mosaic/log@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/log @mosaic/log:lint: > eslint src @mosaic/log:lint: @mosaic/web:lint: cache hit, replaying logs b37e9658d1361569 @mosaic/web:lint: @mosaic/web:lint: > @mosaic/web@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/apps/web @mosaic/web:lint: > eslint src @mosaic/web:lint: @mosaic/cli:lint: cache hit, replaying logs 1ea89b1c02f1def9 @mosaic/cli:lint: @mosaic/cli:lint: > @mosaic/cli@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/cli @mosaic/cli:lint: > eslint src @mosaic/cli:lint: @mosaic/agent:lint: cache hit, replaying logs 56d9f68e50b2dd0f @mosaic/agent:lint: @mosaic/agent:lint: > @mosaic/agent@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/agent @mosaic/agent:lint: > eslint src @mosaic/agent:lint: @mosaic/queue:lint: cache hit, replaying logs 180dc00560191a93 @mosaic/queue:lint: @mosaic/queue:lint: > @mosaic/queue@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/queue @mosaic/queue:lint: > eslint src @mosaic/queue:lint: @mosaic/coord:lint: cache hit, replaying logs 35412db218657700 @mosaic/coord:lint: @mosaic/coord:lint: > @mosaic/coord@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/packages/coord @mosaic/coord:lint: > eslint src @mosaic/coord:lint: @mosaic/memory:lint: cache hit, replaying logs 4ceb300fff933618 @mosaic/memory:lint: @mosaic/memory:lint: > @mosaic/memory@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/memory @mosaic/memory:lint: > eslint src @mosaic/memory:lint: @mosaic/brain:lint: cache hit, replaying logs 8e3f09555e970659 @mosaic/brain:lint: @mosaic/brain:lint: > @mosaic/brain@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/packages/brain @mosaic/brain:lint: > eslint src @mosaic/brain:lint: @mosaic/gateway:lint: cache hit, replaying logs 04c73e4431ee0ef9 @mosaic/gateway:lint: @mosaic/gateway:lint: > @mosaic/gateway@0.0.0 lint /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1/apps/gateway @mosaic/gateway:lint: > eslint src @mosaic/gateway:lint: Tasks: 18 successful, 18 total Cached: 18 cached, 18 total Time: 47ms >>> FULL TURBO passes (18/18) - [ ] > mosaic-stack@ format:check /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a03930f1 > prettier --check "**/*.{ts,tsx,js,jsx,json,md}" Checking formatting... All matched files use Prettier code style! passes - [ ] returns only missions owned by the authenticated user - [ ] creates a mission scoped to the authenticated user - [ ] returns 404 for missions owned by another user - [ ] returns only tasks for that mission/user 🤖 Generated with [Claude Code](https://claude.com/claude-code) Fixes #131
jason.woltje added 1 commit 2026-03-15 19:18:09 +00:00
feat(coord): DB migration — project-scoped missions, multi-tenant RBAC
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
fc305e8b72
Closes #131

- Add userId, phase, milestones, config columns to missions table
- Add new mission_tasks table for coord-managed task tracking
- Both tables enforce per-user RBAC via userId foreign key
- Generate Drizzle migration (0001_magical_rattler.sql)
- Add userId-scoped query methods to brain missions repo
- Add new mission-tasks repo to brain package
- Extend CoordService with DB-backed mission and task CRUD
- Extend CoordController with DB-backed REST endpoints
- Preserve file-based coord endpoints for backwards compatibility

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
jason.woltje merged commit 22a5e9791c into main 2026-03-15 19:18:18 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mosaicstack/stack#149