@bongos/core 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1142) hide show
  1. package/.bongos-core.json +5727 -0
  2. package/.claude/skills/blocker-review/SKILL.md +91 -0
  3. package/.claude/skills/blocker-solve/SKILL.md +96 -0
  4. package/.claude/skills/builder-backup/SKILL.md +54 -0
  5. package/.claude/skills/builder-box/SKILL.md +45 -0
  6. package/.claude/skills/builder-claim/SKILL.md +76 -0
  7. package/.claude/skills/builder-connect/SKILL.md +59 -0
  8. package/.claude/skills/builder-cost/SKILL.md +47 -0
  9. package/.claude/skills/builder-end/SKILL.md +81 -0
  10. package/.claude/skills/builder-exit/SKILL.md +88 -0
  11. package/.claude/skills/builder-key/SKILL.md +40 -0
  12. package/.claude/skills/builder-reauth/SKILL.md +50 -0
  13. package/.claude/skills/builder-redteam/SKILL.md +109 -0
  14. package/.claude/skills/builder-release/SKILL.md +41 -0
  15. package/.claude/skills/builder-setup/SKILL.md +62 -0
  16. package/.claude/skills/builder-ship/SKILL.md +79 -0
  17. package/.claude/skills/builder-stage/SKILL.md +51 -0
  18. package/.claude/skills/builder-start/SKILL.md +46 -0
  19. package/.claude/skills/close-box/SKILL.md +43 -0
  20. package/.claude/skills/design-sync/SKILL.md +69 -0
  21. package/.claude/skills/dev/SKILL.md +49 -0
  22. package/.claude/skills/feedback/SKILL.md +32 -0
  23. package/.claude/skills/figma-design-sync/SKILL.md +74 -0
  24. package/.claude/skills/goal-review/SKILL.md +89 -0
  25. package/.claude/skills/idea-triage/SKILL.md +144 -0
  26. package/.claude/skills/ideate/SKILL.md +82 -0
  27. package/.claude/skills/merge-mode/SKILL.md +169 -0
  28. package/.claude/skills/new-project/SKILL.md +108 -0
  29. package/.claude/skills/otb-character-review/SKILL.md +71 -0
  30. package/.claude/skills/otb-design-review/SKILL.md +47 -0
  31. package/.claude/skills/otb-feedback-capture/SKILL.md +45 -0
  32. package/.claude/skills/otb-figma-sync/SKILL.md +54 -0
  33. package/.claude/skills/otb-tile-generate/SKILL.md +45 -0
  34. package/.claude/skills/paint/SKILL.md +70 -0
  35. package/.claude/skills/planning-session/SKILL.md +299 -0
  36. package/.claude/skills/priority-session/SKILL.md +134 -0
  37. package/.claude/skills/read-session-export/SKILL.md +58 -0
  38. package/.claude/skills/recall/SKILL.md +52 -0
  39. package/.claude/skills/session-handoff/SKILL.md +46 -0
  40. package/.claude/skills/status/SKILL.md +33 -0
  41. package/.devcontainer/Dockerfile +69 -0
  42. package/.devcontainer/README.md +73 -0
  43. package/.devcontainer/devcontainer-lock.json +19 -0
  44. package/.devcontainer/devcontainer.json +93 -0
  45. package/.devcontainer/healthcheck.sh +84 -0
  46. package/.devcontainer/init-firewall.sh +198 -0
  47. package/.devcontainer/post-create.sh +153 -0
  48. package/.dockerignore +36 -0
  49. package/.env.local.example +32 -0
  50. package/.gitattributes +83 -0
  51. package/.gitignore +91 -0
  52. package/CLAUDE.md +242 -0
  53. package/CODE_OF_CONDUCT.md +46 -0
  54. package/CONTRIBUTING.md +51 -0
  55. package/Dockerfile +46 -0
  56. package/GOVERNANCE.md +44 -0
  57. package/LICENSE +661 -0
  58. package/README.md +88 -0
  59. package/bin/bongos.js +222 -0
  60. package/clients/bongos-client/README.md +48 -0
  61. package/clients/bongos-client/bongos-client.global.js +617 -0
  62. package/clients/bongos-client/examples/hello-world.mjs +62 -0
  63. package/clients/bongos-client/index.cjs +619 -0
  64. package/clients/bongos-client/index.d.ts +793 -0
  65. package/clients/bongos-client/index.mjs +614 -0
  66. package/clients/bongos-client/package.json +32 -0
  67. package/config/branding.neutral.json +60 -0
  68. package/config/design-tokens.neutral.json +51 -0
  69. package/config/design-tokens.schema.json +96 -0
  70. package/config/modules.neutral.json +9 -0
  71. package/docker-compose.yml +52 -0
  72. package/docker-entrypoint.sh +30 -0
  73. package/docs/adr/0001-stack-choice-single-vps.md +45 -0
  74. package/docs/adr/0002-digitalocean-over-hetzner.md +27 -0
  75. package/docs/adr/0003-cloudflare-origin-cert-over-letsencrypt.md +35 -0
  76. package/docs/adr/0004-amazonprimea-name-and-trademark-acceptance.md +45 -0
  77. package/docs/adr/0005-invisible-other-players-in-v1.md +37 -0
  78. package/docs/adr/0006-singleton-worldroom-plus-queueroom.md +30 -0
  79. package/docs/adr/0007-persistent-identity-via-localstorage-uuid.md +31 -0
  80. package/docs/adr/0008-family-based-tile-generation.md +86 -0
  81. package/docs/adr/0008-google-chat-oauth-user-auth.md +37 -0
  82. package/docs/adr/0009-autotile-architecture.md +181 -0
  83. package/docs/adr/0010-pms-architecture.md +70 -0
  84. package/docs/adr/0011-terrain-id-rendering-model.md +174 -0
  85. package/docs/adr/0012-ground-object-cell-split.md +208 -0
  86. package/docs/adr/0013-paths-as-object-overlays-with-autotile-dispatch.md +158 -0
  87. package/docs/adr/0014-families-canonical-over-vocabulary.md +103 -0
  88. package/docs/adr/0015-task-dependencies-and-auto-promotion.md +125 -0
  89. package/docs/adr/0016-trust-boundary-server-enforced-permissions.md +132 -0
  90. package/docs/adr/0017-code-simplification-and-repo-cleanliness.md +74 -0
  91. package/docs/adr/0018-three-rank-model-goes-live.md +97 -0
  92. package/docs/adr/0019-red-team-bounty-payout-table.md +52 -0
  93. package/docs/adr/0020-security-model-public-stub.md +70 -0
  94. package/docs/adr/0021-per-builder-skill-model-preferences.md +99 -0
  95. package/docs/adr/0022-secrets-policy.md +124 -0
  96. package/docs/adr/0023-kind-multipliers-and-idea-bonus.md +118 -0
  97. package/docs/adr/0024-cloneable-repo-local-first-memory.md +277 -0
  98. package/docs/adr/0024-multi-agent-system-architecture.md +125 -0
  99. package/docs/adr/0025-offsite-backup-vendor-digitalocean-spaces.md +59 -0
  100. package/docs/adr/0025-structured-criterion-task-link.md +44 -0
  101. package/docs/adr/0026-bfg-memory-hygiene-and-cross-builder-learning.md +117 -0
  102. package/docs/adr/0027-bfg-session-inefficiency-evaluator.md +170 -0
  103. package/docs/adr/0028-honest-llm-spend-accounting.md +109 -0
  104. package/docs/adr/0029-status-page-outage-resilience.md +59 -0
  105. package/docs/adr/0030-builders-hall-live-updates.md +59 -0
  106. package/docs/adr/0031-cloud-dev-environments-for-builders.md +222 -0
  107. package/docs/adr/0032-discord-mirror-of-gds.md +50 -0
  108. package/docs/adr/0033-discord-bot-service-principal.md +82 -0
  109. package/docs/adr/0034-thetes-graduated-newcomer-rank.md +53 -0
  110. package/docs/adr/0035-builder-onboarding-three-paths.md +128 -0
  111. package/docs/adr/0036-builders-subdomain-and-ui-reorg.md +40 -0
  112. package/docs/adr/0037-discord-channel-management.md +51 -0
  113. package/docs/adr/0038-chromebook-ttyd-cloudflare-tunnel.md +111 -0
  114. package/docs/adr/0039-setup-first-onboarding-ux.md +49 -0
  115. package/docs/adr/0040-remote-control-default-browser-onramp.md +47 -0
  116. package/docs/adr/0041-temporary-grader-bypass-killswitch.md +40 -0
  117. package/docs/adr/0042-builder-self-deploy-ci-auto-merge.md +82 -0
  118. package/docs/adr/0043-git-ssh-trust-boundary-and-rank-floor-on-permission-paths.md +74 -0
  119. package/docs/adr/0044-mediterranean-palette-replacement.md +73 -0
  120. package/docs/adr/0044-per-box-live-game-preview.md +57 -0
  121. package/docs/adr/0045-devbox-desktop-app.md +133 -0
  122. package/docs/adr/0046-sandbox-first-review-gate.md +72 -0
  123. package/docs/adr/0047-discord-bugs-intake-anti-abuse.md +36 -0
  124. package/docs/adr/0048-works-in-progress-ia-split.md +32 -0
  125. package/docs/adr/0049-split-parallel-safety-contract.md +46 -0
  126. package/docs/adr/0050-device-flow-admission-invite-gated-by-default.md +43 -0
  127. package/docs/adr/0051-full-session-transcript-corpus.md +57 -0
  128. package/docs/adr/0052-sandbox-for-everyone-game-only-preview.md +70 -0
  129. package/docs/adr/0053-scoped-dev-box-session.md +55 -0
  130. package/docs/adr/0054-session-token-reward-cost-plus.md +63 -0
  131. package/docs/adr/0055-server-mediated-branch-publish.md +47 -0
  132. package/docs/adr/0056-prod-deploy-script-mirror-and-healthcheck-retry.md +62 -0
  133. package/docs/adr/0057-container-cost-ledger.md +28 -0
  134. package/docs/adr/0057-discord-archon-approval-channels.md +64 -0
  135. package/docs/adr/0058-automatic-gate-surface-gatekeeper.md +64 -0
  136. package/docs/adr/0059-single-approval-remove-devbox-approval-gate.md +37 -0
  137. package/docs/adr/0060-gds-retrieval-layer.md +97 -0
  138. package/docs/adr/0061-context-layer-decomposition.md +61 -0
  139. package/docs/adr/0062-medusa-instance-model-decoupling.md +107 -0
  140. package/docs/adr/0063-generated-repo-map-symbol-skeleton.md +44 -0
  141. package/docs/adr/0064-rename-medusa-to-cloud-bongos.md +49 -0
  142. package/docs/adr/0065-agpl-nonprofit-ai-first-governance.md +69 -0
  143. package/docs/adr/0066-generated-file-map-sections.md +51 -0
  144. package/docs/adr/0067-session-start-fast-forward-pull.md +43 -0
  145. package/docs/adr/0068-shared-art-key-for-newcomers.md +38 -0
  146. package/docs/adr/0069-hall-live-channel-sse-decouple.md +35 -0
  147. package/docs/adr/0070-deterministic-session-card-delivery.md +44 -0
  148. package/docs/adr/0071-box-confirm-before-destroyed-and-drift-reconcile.md +59 -0
  149. package/docs/adr/0072-bongos-app-mac-signed-first-windows-deferred.md +35 -0
  150. package/docs/adr/0072-dev-box-code-staleness-visibility.md +39 -0
  151. package/docs/adr/0073-builder-needs-signal-and-byok-gemini-key.md +64 -0
  152. package/docs/adr/0073-secrets-scan-exclude-uri-detector.md +37 -0
  153. package/docs/adr/0074-memory-map-stays-light.md +32 -0
  154. package/docs/adr/0075-per-system-cost-attribution.md +37 -0
  155. package/docs/adr/0076-in-session-deterministic-compaction.md +58 -0
  156. package/docs/adr/0077-content-addressed-llm-cache.md +32 -0
  157. package/docs/adr/0078-deterministic-first-cron.md +48 -0
  158. package/docs/adr/0079-value-gated-autonomous-engagement.md +39 -0
  159. package/docs/adr/0080-llm-cache-api-transport-and-trust-model.md +46 -0
  160. package/docs/adr/0081-tool-agnostic-design-layer.md +62 -0
  161. package/docs/adr/0082-productized-key-storage-provisioning.md +32 -0
  162. package/docs/adr/0082-server-side-merge-conflict-auto-resolution.md +55 -0
  163. package/docs/adr/0083-modular-architecture-strangler-build-plan.md +143 -0
  164. package/docs/adr/0084-auto-derived-per-task-rank-floor.md +86 -0
  165. package/docs/adr/0085-remove-default-per-builder-spend-cap.md +39 -0
  166. package/docs/adr/0086-goal-scoped-work-hierarchy.md +123 -0
  167. package/docs/adr/0087-bongos-app-architecture-and-handoff-contract.md +49 -0
  168. package/docs/adr/0087-compete-on-governance-not-tooling-cursor.md +65 -0
  169. package/docs/adr/0088-consistent-character-generative-animation.md +169 -0
  170. package/docs/adr/0089-modular-multi-model-adversarial-grader.md +179 -0
  171. package/docs/adr/0090-metic-task-authoring.md +73 -0
  172. package/docs/adr/0091-bounding-the-kernel-and-db-carve.md +106 -0
  173. package/docs/adr/0092-hosting-module-and-on-prem-target.md +117 -0
  174. package/docs/adr/0093-tranche-2-core-carve-sequence.md +72 -0
  175. package/docs/adr/0094-repo-atlas-self-drawing-codebase-map.md +49 -0
  176. package/docs/adr/0095-borrowed-memory-and-retrieval-concepts.md +65 -0
  177. package/docs/adr/0095-cross-agent-context-management.md +58 -0
  178. package/docs/adr/0096-require-reward-before-workable.md +209 -0
  179. package/docs/adr/0097-one-active-claim-per-session-and-worktree-binding.md +46 -0
  180. package/docs/adr/0097-retroactive-reward-backfill.md +124 -0
  181. package/docs/adr/0098-public-mirror-publish-manifest.md +92 -0
  182. package/docs/adr/0099-delayed-redacted-mirror-export.md +55 -0
  183. package/docs/adr/0100-two-repo-instance-model.md +60 -0
  184. package/docs/adr/0101-goal-hierarchy-phase-5-judge-membership-reward.md +90 -0
  185. package/docs/adr/0102-finish-bounding-the-kernel.md +36 -0
  186. package/docs/adr/0103-core-first-extraction-cloud-bongos-trunk.md +70 -0
  187. package/docs/adr/0103-gdsv4-bongos-consolidation.md +28 -0
  188. package/docs/adr/0104-trust-gds-api-channel-in-auto-mode.md +42 -0
  189. package/docs/adr/0105-instance-seed-migrations-out-of-core.md +47 -0
  190. package/docs/adr/0106-goal-owner-manager-authority.md +84 -0
  191. package/docs/adr/0107-module-upstreaming-contribution-to-core-catalog.md +83 -0
  192. package/docs/adr/0108-instance-composition-configurable-root.md +87 -0
  193. package/docs/adr/0109-self-describing-openapi-and-hosted-docs.md +44 -0
  194. package/docs/adr/0110-untrack-whole-file-generated-nav-docs.md +49 -0
  195. package/docs/adr/0111-instance-hosting-provisioning-module.md +135 -0
  196. package/docs/adr/0112-private-goals-invitations-join-requests.md +72 -0
  197. package/docs/adr/0113-sandbox-studio-descope-superseded-by-0044-0052.md +41 -0
  198. package/docs/adr/0114-instance-docs-discovery-contract.md +32 -0
  199. package/docs/adr/0115-scheduled-routines-portability.md +31 -0
  200. package/docs/adr/0116-api-error-envelope-and-code-taxonomy.md +62 -0
  201. package/docs/adr/0117-api-versioning-and-deprecation-policy.md +50 -0
  202. package/docs/adr/0118-api-contract-source-of-truth-code-first.md +47 -0
  203. package/docs/adr/0119-api-pagination-contract.md +34 -0
  204. package/docs/adr/0120-pay-on-land-and-builder-owned-rebase-gate.md +108 -0
  205. package/docs/adr/0121-greenfield-vs-brownfield-onboarding-adopt-existing-repo.md +97 -0
  206. package/docs/adr/0122-onboarding-diagram-renders-deploy-rendered-off-git.md +43 -0
  207. package/docs/adr/0123-box-idle-sweep-autosave-before-destroy.md +36 -0
  208. package/docs/adr/0124-typed-api-response-bodies.md +37 -0
  209. package/docs/adr/0125-control-plane-scaffolds-standalone-instance-repo.md +36 -0
  210. package/docs/adr/0126-dedicated-cloudbongos-control-plane-droplet.md +30 -0
  211. package/docs/adr/0127-cross-box-fleet-observability.md +64 -0
  212. package/docs/adr/0128-provisioning-runner-privilege-and-db-auth-model.md +46 -0
  213. package/docs/adr/0129-cloudbongos-control-plane-pull-deploy.md +34 -0
  214. package/docs/adr/0130-provision-remote-exec-over-ssh.md +61 -0
  215. package/docs/adr/0131-rank-scoped-skill-visibility.md +47 -0
  216. package/docs/adr/0132-cohost-fleet-control-plane-migration.md +54 -0
  217. package/docs/adr/0133-github-app-manifest-onboarding-signin.md +42 -0
  218. package/docs/adr/0134-private-first-npm-distribution.md +38 -0
  219. package/docs/adr/README.md +208 -0
  220. package/docs/api/openapi.json +13720 -0
  221. package/docs/api-reference.md +437 -0
  222. package/docs/architecture.md +244 -0
  223. package/docs/branding-contract.md +66 -0
  224. package/docs/branding-fill-prompt.md +25 -0
  225. package/docs/canonical-permissions.md +241 -0
  226. package/docs/design/container-exterior-tiles.md +49 -0
  227. package/docs/design/container-exterior.md +81 -0
  228. package/docs/design/container-interior.md +77 -0
  229. package/docs/design/modular-architecture/00-research-report.md +107 -0
  230. package/docs/design/modular-architecture/01-architecture.md +125 -0
  231. package/docs/design/modular-architecture/02-module-map.md +116 -0
  232. package/docs/design/modular-architecture/03-builder-flows.md +104 -0
  233. package/docs/design/modular-architecture/04-module-lifecycle.md +62 -0
  234. package/docs/design/modular-architecture/README.md +27 -0
  235. package/docs/design/vanilla-hall-ui-redesign-scope.md +284 -0
  236. package/docs/design/world-map-scroll.md +41 -0
  237. package/docs/design-contract.md +320 -0
  238. package/docs/file-map.md +418 -0
  239. package/docs/handoff-template.md +92 -0
  240. package/docs/modules-contract.md +293 -0
  241. package/docs/onboarding/browser-terminal-guide.md +73 -0
  242. package/docs/onboarding/diagrams/01-task-lifecycle.mmd +28 -0
  243. package/docs/onboarding/diagrams/02-rank-ladder.mmd +54 -0
  244. package/docs/onboarding/diagrams/03-drachmae-karma.mmd +37 -0
  245. package/docs/onboarding/diagrams/04-architecture.mmd +51 -0
  246. package/docs/onboarding/diagrams/05-versioning.mmd +29 -0
  247. package/docs/onboarding/diagrams/README.md +94 -0
  248. package/docs/onboarding/diagrams/assertions.json +170 -0
  249. package/docs/onboarding/diagrams/puppeteer-config.json +1 -0
  250. package/docs/onboarding/diagrams/render-config.json +9 -0
  251. package/docs/onboarding/drachmae-and-karma.md +178 -0
  252. package/docs/onboarding/primer.md +202 -0
  253. package/docs/project-context.template.md +67 -0
  254. package/docs/recipes/README.md +35 -0
  255. package/docs/recipes/audit-replay.md +100 -0
  256. package/docs/recipes/bongos-cli-release.md +66 -0
  257. package/docs/recipes/builder-box-lifecycle.md +152 -0
  258. package/docs/recipes/claude-design-loop.md +143 -0
  259. package/docs/recipes/claude-gemini-bongos-doors.md +155 -0
  260. package/docs/recipes/cloudbongos-staging-gate.md +139 -0
  261. package/docs/recipes/cloudbongos-standup.md +111 -0
  262. package/docs/recipes/devbox-app-release.md +93 -0
  263. package/docs/recipes/devbox-app-windows-test.md +128 -0
  264. package/docs/recipes/failed-ship-recovery-proof.md +102 -0
  265. package/docs/recipes/figma-design-loop.md +129 -0
  266. package/docs/recipes/gds-db-backup.md +255 -0
  267. package/docs/recipes/instance-deploy.md +37 -0
  268. package/docs/recipes/managed-settings-remote-control.md +416 -0
  269. package/docs/recipes/memory-backup.md +71 -0
  270. package/docs/recipes/memory-sync-conflicts.md +98 -0
  271. package/docs/recipes/multi-builder-merge.md +78 -0
  272. package/docs/recipes/ops-gotchas.md +212 -0
  273. package/docs/recipes/overnight-builder.md +53 -0
  274. package/docs/recipes/packaging-the-core.md +49 -0
  275. package/docs/recipes/parallel-load-results-2026-05-30.md +63 -0
  276. package/docs/recipes/parallel-load-test.md +32 -0
  277. package/docs/recipes/pixel-art-pipeline.md +411 -0
  278. package/docs/recipes/private-npm-distribution.md +79 -0
  279. package/docs/recipes/search-index-ingestion.md +67 -0
  280. package/docs/recipes/self-host.md +60 -0
  281. package/docs/recipes/ship-and-regrade.md +72 -0
  282. package/docs/recipes/staging-data.md +50 -0
  283. package/docs/recipes/staging-environment.md +215 -0
  284. package/docs/recipes/upgrading-the-core.md +58 -0
  285. package/docs/research/cursor-competitive-analysis.md +255 -0
  286. package/docs/research/llm-model-agnostic-and-cheaper-grader.md +227 -0
  287. package/migrations/003_pms.sql +284 -0
  288. package/migrations/004_pms_cost_idempotency.sql +13 -0
  289. package/migrations/005_pms_smoke_filter.sql +44 -0
  290. package/migrations/006_pms_v2.sql +378 -0
  291. package/migrations/007_pms_v2_hierarchy_trigger.sql +59 -0
  292. package/migrations/008_pms_v2_migration_allocator.sql +27 -0
  293. package/migrations/009_pms_v2_blockers_table.sql +68 -0
  294. package/migrations/010_uptime.sql +29 -0
  295. package/migrations/011_backfill_v2_v3_done_when.sql +20 -0
  296. package/migrations/012_pms_v2_task_lifecycle_states.sql +82 -0
  297. package/migrations/013_claim_locking.sql +22 -0
  298. package/migrations/014_pms_task_discipline.sql +86 -0
  299. package/migrations/015_pms_estimation_calibration.sql +140 -0
  300. package/migrations/016_pms_task_grades.sql +60 -0
  301. package/migrations/017_version_progress_exclude_abandoned.sql +49 -0
  302. package/migrations/019_rename_pms_v3_to_gds_v3.sql +65 -0
  303. package/migrations/020_task_dependencies.sql +99 -0
  304. package/migrations/021_v3_renumber_and_deps.sql +224 -0
  305. package/migrations/022_v3_reconcile_dep_gated_status.sql +41 -0
  306. package/migrations/023_pms_rank.sql +30 -0
  307. package/migrations/025_builder_exit_status.sql +15 -0
  308. package/migrations/027_builders_preferred_disciplines.sql +46 -0
  309. package/migrations/028_tasks_parallel_safe.sql +71 -0
  310. package/migrations/029_rank_three_live.sql +32 -0
  311. package/migrations/030_vulnerability_reports.sql +61 -0
  312. package/migrations/031_reward_simplification.sql +57 -0
  313. package/migrations/032_repo_health_snapshots.sql +56 -0
  314. package/migrations/033_audit_log.sql +64 -0
  315. package/migrations/034_lifecycle_breakdown_leaf_only.sql +62 -0
  316. package/migrations/035_auth_token_hygiene.sql +66 -0
  317. package/migrations/037_builder_skill_model_prefs.sql +44 -0
  318. package/migrations/038_task_override_requests.sql +51 -0
  319. package/migrations/039_newcomer_friendly_column.sql +124 -0
  320. package/migrations/040_builder_karma.sql +58 -0
  321. package/migrations/041_kind_multipliers_and_idea_bonus.sql +42 -0
  322. package/migrations/042_criterion_proposal_workflow.sql +78 -0
  323. package/migrations/043_builder_onboarding_observability.sql +66 -0
  324. package/migrations/044_tasks_requires_rank.sql +97 -0
  325. package/migrations/045_builder_onboarding_state.sql +147 -0
  326. package/migrations/046_cost_log_builder_attribution.sql +42 -0
  327. package/migrations/054_builder_memory.sql +108 -0
  328. package/migrations/055_task_criteria.sql +90 -0
  329. package/migrations/058_peer_votes.sql +41 -0
  330. package/migrations/059_onboarding_pick_disciplines.sql +59 -0
  331. package/migrations/060_access_requests.sql +46 -0
  332. package/migrations/061_backfill_override_ship_attribution.sql +29 -0
  333. package/migrations/062_session_records.sql +34 -0
  334. package/migrations/063_session_records_tool_errors_idx.sql +11 -0
  335. package/migrations/064_grade_attempts.sql +18 -0
  336. package/migrations/065_bfg_principal.sql +58 -0
  337. package/migrations/066_live_notify_triggers.sql +69 -0
  338. package/migrations/067_builder_boxes.sql +117 -0
  339. package/migrations/067_discord_bot_foundation.sql +69 -0
  340. package/migrations/068_thetes_requires_rank.sql +27 -0
  341. package/migrations/069_builder_ssh_keys.sql +66 -0
  342. package/migrations/070_box_intents.sql +101 -0
  343. package/migrations/071_box_first_provision_approval.sql +46 -0
  344. package/migrations/072_onboarding_ship_three_remove_primer.sql +80 -0
  345. package/migrations/073_box_terminal_access.sql +46 -0
  346. package/migrations/075_builder_sound_prefs.sql +28 -0
  347. package/migrations/078_box_claude_active.sql +22 -0
  348. package/migrations/079_box_first_connected_at.sql +20 -0
  349. package/migrations/081_tasks_needs_migration.sql +34 -0
  350. package/migrations/084_tasks_security_sensitive.sql +24 -0
  351. package/migrations/085_security_engagement_docs.sql +34 -0
  352. package/migrations/086_rename_disciplines.sql +125 -0
  353. package/migrations/088_builders_anthropic_link.sql +28 -0
  354. package/migrations/089_builders_monthly_budget.sql +19 -0
  355. package/migrations/090_box_scoped_sessions.sql +38 -0
  356. package/migrations/091_session_token_reward.sql +44 -0
  357. package/migrations/093_tasks_sandbox_review.sql +22 -0
  358. package/migrations/102_remove_box_first_provision_approval.sql +58 -0
  359. package/migrations/103_search_chunks.sql +90 -0
  360. package/migrations/104_builder_box_blocked.sql +34 -0
  361. package/migrations/105_box_host_keys.sql +35 -0
  362. package/migrations/111_medusa_customer0_framing.sql +35 -0
  363. package/migrations/112_drop_track_check.sql +25 -0
  364. package/migrations/113_merge_lease.sql +16 -0
  365. package/migrations/114_cloudbongos_rename_live_strings.sql +32 -0
  366. package/migrations/118_currency_label_decoupling.sql +23 -0
  367. package/migrations/119_builder_behavior_prefs.sql +31 -0
  368. package/migrations/121_box_code_version.sql +37 -0
  369. package/migrations/122_builder_gemini_key.sql +30 -0
  370. package/migrations/123_cost_log_tiers.sql +33 -0
  371. package/migrations/124_cost_baseline.sql +45 -0
  372. package/migrations/125_llm_cache.sql +54 -0
  373. package/migrations/126_autonomy_runs.sql +33 -0
  374. package/migrations/143_cost_calibration.sql +63 -0
  375. package/migrations/145_backfill_task_requires_rank.sql +84 -0
  376. package/migrations/160_goal_tier.sql +88 -0
  377. package/migrations/163_polymorphic_dependencies.sql +187 -0
  378. package/migrations/164_event_sound_prefs.sql +20 -0
  379. package/migrations/165_task_module_key.sql +15 -0
  380. package/migrations/171_claims_published_head_sha.sql +24 -0
  381. package/migrations/174_close_orphaned_claims_on_terminal_tasks.sql +30 -0
  382. package/migrations/175_task_grades_diff_hash.sql +9 -0
  383. package/migrations/176_promotion_respects_open_blockers.sql +58 -0
  384. package/migrations/176_ui_discipline.sql +40 -0
  385. package/migrations/177_require_reward_before_workable.sql +76 -0
  386. package/migrations/178_reward_gate_auto_assign_revert_autopromote.sql +61 -0
  387. package/migrations/179_search_chunk_usefulness.sql +33 -0
  388. package/migrations/180_one_active_claim_per_session.sql +54 -0
  389. package/migrations/181_cost_log_skill_name.sql +33 -0
  390. package/migrations/184_claim_release_requested.sql +25 -0
  391. package/migrations/185_module_upstreaming_goal_wiring.sql +59 -0
  392. package/migrations/187_goal_sort_order.sql +30 -0
  393. package/migrations/187_tasks_kind_check_add_verify.sql +21 -0
  394. package/migrations/README.md +88 -0
  395. package/migrations/core_188_goal_visibility_and_membership_requests.sql +71 -0
  396. package/migrations/core_189_core_upgrades_ledger.sql +37 -0
  397. package/migrations/core_189_credit_log_task_id_index.sql +19 -0
  398. package/migrations/core_190_rebuild_claimable_task_views.sql +71 -0
  399. package/migrations/instance/018_pms_v3_planning_seed.sql +131 -0
  400. package/migrations/instance/080_gds_v4_planning_seed.sql +75 -0
  401. package/migrations/instance/110_medusa_planning_seed.sql +70 -0
  402. package/migrations/instance/120_bongos_v1_planning_seed.sql +69 -0
  403. package/migrations/instance/144_bongos_v1_module_system_criterion.sql +26 -0
  404. package/migrations/instance/159_bongos_v1_goal_hierarchy_criterion.sql +29 -0
  405. package/migrations/instance/172_v2_world_planning_seed.sql +163 -0
  406. package/migrations/instance/173_bongos_v1_c7_core_modularized.sql +33 -0
  407. package/migrations/instance/182_gdsv4_bongos_consolidation.sql +132 -0
  408. package/migrations/instance/183_gdsv4_carryover_themed_goals.sql +116 -0
  409. package/migrations/instance/186_bongos_v1_governance_planning_seed.sql +69 -0
  410. package/modules/autonomy/CLAUDE.md +49 -0
  411. package/modules/autonomy/db.js +50 -0
  412. package/modules/autonomy/module.json +13 -0
  413. package/modules/autonomy/pollers/routine-timers.js +146 -0
  414. package/modules/autonomy/routes/autonomy.js +37 -0
  415. package/modules/builder-settings/CLAUDE.md +58 -0
  416. package/modules/builder-settings/builder-needs.js +115 -0
  417. package/modules/builder-settings/db.js +168 -0
  418. package/modules/builder-settings/display-name.js +84 -0
  419. package/modules/builder-settings/event-sound-prefs.js +169 -0
  420. package/modules/builder-settings/interaction-prefs.js +201 -0
  421. package/modules/builder-settings/model-alloc-prefs.js +147 -0
  422. package/modules/builder-settings/module.json +10 -0
  423. package/modules/builder-settings/render-prefs.js +103 -0
  424. package/modules/builder-settings/routes/settings.js +417 -0
  425. package/modules/builder-settings/settings.js +52 -0
  426. package/modules/builder-settings/skill-prefs.js +196 -0
  427. package/modules/builder-settings/sound-prefs.js +178 -0
  428. package/modules/builder-settings/wandering-prefs.js +282 -0
  429. package/modules/dev-box/CLAUDE.md +38 -0
  430. package/modules/dev-box/box-access.js +275 -0
  431. package/modules/dev-box/box-credential.js +94 -0
  432. package/modules/dev-box/box-onboard.js +486 -0
  433. package/modules/dev-box/boxes.js +842 -0
  434. package/modules/dev-box/db.js +39 -0
  435. package/modules/dev-box/module.json +14 -0
  436. package/modules/dev-box/routes/box.js +977 -0
  437. package/modules/discord/CLAUDE.md +50 -0
  438. package/modules/discord/auth.js +54 -0
  439. package/modules/discord/bug-attachments.js +210 -0
  440. package/modules/discord/db.js +96 -0
  441. package/modules/discord/discord-approvals.js +145 -0
  442. package/modules/discord/discord-audit.js +29 -0
  443. package/modules/discord/discord-bot.js +545 -0
  444. package/modules/discord/discord-bugs.js +257 -0
  445. package/modules/discord/discord-channels.js +412 -0
  446. package/modules/discord/discord-inbound.js +147 -0
  447. package/modules/discord/discord-message-buffer.js +54 -0
  448. package/modules/discord/discord-reaction.js +186 -0
  449. package/modules/discord/discord-role-sync.js +318 -0
  450. package/modules/discord/module.json +14 -0
  451. package/modules/discord/pollers/discord-bot.js +19 -0
  452. package/modules/discord/routes/bug-attachments.js +44 -0
  453. package/modules/discord/routes/discord.js +102 -0
  454. package/modules/discord/ship-broadcast.js +78 -0
  455. package/modules/discord/webhook.js +74 -0
  456. package/modules/economy/CLAUDE.md +48 -0
  457. package/modules/economy/achievements.js +594 -0
  458. package/modules/economy/cost-classify.js +331 -0
  459. package/modules/economy/cost-summary-shape.js +90 -0
  460. package/modules/economy/cost.js +438 -0
  461. package/modules/economy/credits.js +430 -0
  462. package/modules/economy/migrations/economy_001_fix_gds_shipper_description.sql +91 -0
  463. package/modules/economy/module.json +10 -0
  464. package/modules/economy/reward.js +61 -0
  465. package/modules/economy/routes/cost.js +97 -0
  466. package/modules/economy/routes/leaderboard.js +26 -0
  467. package/modules/economy/routes/reward.js +42 -0
  468. package/modules/economy/streak.js +285 -0
  469. package/modules/grading/CLAUDE.md +42 -0
  470. package/modules/grading/db.js +39 -0
  471. package/modules/grading/grader-rubric.json +151 -0
  472. package/modules/grading/grader-workers/efficiency.js +213 -0
  473. package/modules/grading/grader-workers/extract-json.js +80 -0
  474. package/modules/grading/grader-workers/fence.js +100 -0
  475. package/modules/grading/grader-workers/hacker.js +239 -0
  476. package/modules/grading/grader-workers/index.js +183 -0
  477. package/modules/grading/grader-workers/narc.js +207 -0
  478. package/modules/grading/grader-workers/quality.js +198 -0
  479. package/modules/grading/grader-workers/rubric.js +20 -0
  480. package/modules/grading/grader-workers/worker-prompt.js +89 -0
  481. package/modules/grading/grader-workers/worker-verdict.js +50 -0
  482. package/modules/grading/grader.js +1790 -0
  483. package/modules/grading/module.json +12 -0
  484. package/modules/grading/routes/grade.js +51 -0
  485. package/modules/hall-ui/CLAUDE.md +61 -0
  486. package/modules/hall-ui/module.json +14 -0
  487. package/modules/hall-ui/public/atlas.html +180 -0
  488. package/modules/hall-ui/public/atlas.js +336 -0
  489. package/modules/hall-ui/public/box-panel.js +423 -0
  490. package/modules/hall-ui/public/brand-apply.js +117 -0
  491. package/modules/hall-ui/public/builders.js +3028 -0
  492. package/modules/hall-ui/public/chime.wav +0 -0
  493. package/modules/hall-ui/public/copy-on-click.js +174 -0
  494. package/modules/hall-ui/public/cursors/arrow.png +0 -0
  495. package/modules/hall-ui/public/cursors/hand-pointer.png +0 -0
  496. package/modules/hall-ui/public/cursors/magnifier-out.png +0 -0
  497. package/modules/hall-ui/public/cursors/magnifier.png +0 -0
  498. package/modules/hall-ui/public/diagram-viewer.css +125 -0
  499. package/modules/hall-ui/public/diagram-viewer.js +330 -0
  500. package/modules/hall-ui/public/diagrams.html +113 -0
  501. package/modules/hall-ui/public/dom-utils.js +212 -0
  502. package/modules/hall-ui/public/drachmae.html +68 -0
  503. package/modules/hall-ui/public/drachmae.js +136 -0
  504. package/modules/hall-ui/public/gate.html +143 -0
  505. package/modules/hall-ui/public/gate.js +228 -0
  506. package/modules/hall-ui/public/goals-page.js +1297 -0
  507. package/modules/hall-ui/public/goals.html +376 -0
  508. package/modules/hall-ui/public/goals.js +119 -0
  509. package/modules/hall-ui/public/hall-widgets.js +189 -0
  510. package/modules/hall-ui/public/harbor.html +167 -0
  511. package/modules/hall-ui/public/harbor.js +335 -0
  512. package/modules/hall-ui/public/index.html +116 -0
  513. package/modules/hall-ui/public/instances-panel.js +172 -0
  514. package/modules/hall-ui/public/md-reader.js +234 -0
  515. package/modules/hall-ui/public/modules.html +119 -0
  516. package/modules/hall-ui/public/modules.js +154 -0
  517. package/modules/hall-ui/public/new-project-wizard.js +186 -0
  518. package/modules/hall-ui/public/not-ready.html +48 -0
  519. package/modules/hall-ui/public/pair.html +119 -0
  520. package/modules/hall-ui/public/pair.js +132 -0
  521. package/modules/hall-ui/public/primer.css +404 -0
  522. package/modules/hall-ui/public/primer.html +85 -0
  523. package/modules/hall-ui/public/primer.js +641 -0
  524. package/modules/hall-ui/public/profile.html +85 -0
  525. package/modules/hall-ui/public/profile.js +236 -0
  526. package/modules/hall-ui/public/ranks.html +69 -0
  527. package/modules/hall-ui/public/ranks.js +206 -0
  528. package/modules/hall-ui/public/roadmap.html +209 -0
  529. package/modules/hall-ui/public/roadmap.js +375 -0
  530. package/modules/hall-ui/public/sessions.html +92 -0
  531. package/modules/hall-ui/public/sessions.js +222 -0
  532. package/modules/hall-ui/public/settings.html +640 -0
  533. package/modules/hall-ui/public/settings.js +1219 -0
  534. package/modules/hall-ui/public/shell.js +495 -0
  535. package/modules/hall-ui/public/style.css +1748 -0
  536. package/modules/hall-ui/public/task-detail.js +253 -0
  537. package/modules/hall-ui/public/task.html +83 -0
  538. package/modules/hall-ui/public/task.js +326 -0
  539. package/modules/hall-ui/public/watch.html +333 -0
  540. package/modules/hall-ui/public/watch.js +859 -0
  541. package/modules/hall-ui/public/work.html +469 -0
  542. package/modules/hall-ui/public/work.js +1292 -0
  543. package/modules/ideas/CLAUDE.md +37 -0
  544. package/modules/ideas/blockers.js +100 -0
  545. package/modules/ideas/inbox.js +459 -0
  546. package/modules/ideas/module.json +10 -0
  547. package/modules/ideas/routes/blockers.js +120 -0
  548. package/modules/ideas/routes/inbox.js +230 -0
  549. package/modules/lifecycle/CLAUDE.md +63 -0
  550. package/modules/lifecycle/conflict-resolve.js +436 -0
  551. package/modules/lifecycle/db.js +4970 -0
  552. package/modules/lifecycle/done-when.js +355 -0
  553. package/modules/lifecycle/github-push.js +969 -0
  554. package/modules/lifecycle/goal-conflicts.js +133 -0
  555. package/modules/lifecycle/hierarchy.js +104 -0
  556. package/modules/lifecycle/lifecycle.js +58 -0
  557. package/modules/lifecycle/merge-lock.js +261 -0
  558. package/modules/lifecycle/migrations/lifecycle_001_goal_first_leads.sql +28 -0
  559. package/modules/lifecycle/migrations/lifecycle_002_backfill_orphan_task_goals.sql +36 -0
  560. package/modules/lifecycle/module.json +13 -0
  561. package/modules/lifecycle/pollers/publish-reconciler.js +20 -0
  562. package/modules/lifecycle/publish-reconciler.js +418 -0
  563. package/modules/lifecycle/routes/analytics.js +63 -0
  564. package/modules/lifecycle/routes/claims.js +506 -0
  565. package/modules/lifecycle/routes/dependencies.js +82 -0
  566. package/modules/lifecycle/routes/done-when.js +136 -0
  567. package/modules/lifecycle/routes/gate-approvals.js +197 -0
  568. package/modules/lifecycle/routes/goals.js +1419 -0
  569. package/modules/lifecycle/routes/lifecycle.js +43 -0
  570. package/modules/lifecycle/routes/tasks.js +1703 -0
  571. package/modules/lifecycle/routes/versions.js +128 -0
  572. package/modules/lifecycle/ship-card.js +505 -0
  573. package/modules/lifecycle/ship-preflight.js +225 -0
  574. package/modules/lifecycle/task-classifier.js +512 -0
  575. package/modules/lifecycle/version-close.js +106 -0
  576. package/modules/memory/CLAUDE.md +40 -0
  577. package/modules/memory/learnings.js +275 -0
  578. package/modules/memory/memory.js +572 -0
  579. package/modules/memory/module.json +12 -0
  580. package/modules/memory/routes/learnings.js +90 -0
  581. package/modules/memory/routes/memory.js +916 -0
  582. package/modules/memory/routes/search.js +188 -0
  583. package/modules/memory/search-chunker.js +252 -0
  584. package/modules/memory/search.js +320 -0
  585. package/modules/onboarding/CLAUDE.md +55 -0
  586. package/modules/onboarding/approval-broadcast.js +59 -0
  587. package/modules/onboarding/db.js +54 -0
  588. package/modules/onboarding/module.json +10 -0
  589. package/modules/onboarding/newcomer-restock.js +212 -0
  590. package/modules/onboarding/onboarding-state.js +532 -0
  591. package/modules/onboarding/onboarding.js +508 -0
  592. package/modules/onboarding/port.js +63 -0
  593. package/modules/onboarding/routes/access-requests.js +208 -0
  594. package/modules/onboarding/routes/onboarding.js +54 -0
  595. package/modules/security/CLAUDE.md +44 -0
  596. package/modules/security/module.json +10 -0
  597. package/modules/security/routes/reports.js +251 -0
  598. package/modules/security/secret-scrub.js +201 -0
  599. package/modules/security/security.js +294 -0
  600. package/modules/sessions/CLAUDE.md +39 -0
  601. package/modules/sessions/bfg.js +357 -0
  602. package/modules/sessions/db.js +326 -0
  603. package/modules/sessions/module.json +10 -0
  604. package/modules/sessions/pulse.js +149 -0
  605. package/modules/sessions/routes/sessions.js +331 -0
  606. package/modules/status-ui/CLAUDE.md +47 -0
  607. package/modules/status-ui/module.json +14 -0
  608. package/modules/status-ui/public/README.md +29 -0
  609. package/modules/status-ui/public/cursors/arrow.png +0 -0
  610. package/modules/status-ui/public/cursors/hand-pointer.png +0 -0
  611. package/modules/status-ui/public/index.html +363 -0
  612. package/modules/status-ui/public/snapshots/.gitkeep +0 -0
  613. package/modules/status-ui/public/status.js +1375 -0
  614. package/modules/status-ui/public/style.css +1342 -0
  615. package/package-lock.json +975 -0
  616. package/package.json +28 -0
  617. package/public-docs/index.html +35 -0
  618. package/public-docs/redoc.standalone.js +1838 -0
  619. package/public-docs/redoc.standalone.js.LICENSE.txt +102 -0
  620. package/public-landing/buddha.png +0 -0
  621. package/public-landing/create.html +868 -0
  622. package/public-landing/index.html +168 -0
  623. package/scripts/bongos-mcp.js +28 -0
  624. package/scripts/cron/style_guide_audit.sh +134 -0
  625. package/scripts/discord/README.md +52 -0
  626. package/scripts/discord/lib.js +80 -0
  627. package/scripts/discord/post.js +51 -0
  628. package/scripts/gds/CLAUDE.md +144 -0
  629. package/scripts/gds/abandon.js +58 -0
  630. package/scripts/gds/adopt-detect.js +123 -0
  631. package/scripts/gds/adopt-import.js +111 -0
  632. package/scripts/gds/adopt-preflight.js +121 -0
  633. package/scripts/gds/api.js +78 -0
  634. package/scripts/gds/architect-audit.js +288 -0
  635. package/scripts/gds/art-stage.js +152 -0
  636. package/scripts/gds/audit-authorship.sh +243 -0
  637. package/scripts/gds/audit-deps.js +121 -0
  638. package/scripts/gds/audit-exports.js +128 -0
  639. package/scripts/gds/audit-replay.sh +161 -0
  640. package/scripts/gds/audit-ships.js +251 -0
  641. package/scripts/gds/autonomy-gate.js +135 -0
  642. package/scripts/gds/backfill-cost.js +165 -0
  643. package/scripts/gds/backfill-sessions.js +351 -0
  644. package/scripts/gds/backfill-task-rewards.js +408 -0
  645. package/scripts/gds/backup.js +94 -0
  646. package/scripts/gds/bfg-principal-token.js +65 -0
  647. package/scripts/gds/box-auth-check.js +160 -0
  648. package/scripts/gds/box-connect-lib.js +453 -0
  649. package/scripts/gds/box.js +1258 -0
  650. package/scripts/gds/build-bongos.js +94 -0
  651. package/scripts/gds/capture.js +123 -0
  652. package/scripts/gds/cf-tunnel.js +419 -0
  653. package/scripts/gds/ci-grade.js +82 -0
  654. package/scripts/gds/claim-recall.js +112 -0
  655. package/scripts/gds/claim.js +333 -0
  656. package/scripts/gds/classify-discipline.js +153 -0
  657. package/scripts/gds/claude-materialize.js +176 -0
  658. package/scripts/gds/cleanup-orphans.js +74 -0
  659. package/scripts/gds/cli-lib.js +518 -0
  660. package/scripts/gds/code.js +101 -0
  661. package/scripts/gds/codemod-rename-src-gds.js +145 -0
  662. package/scripts/gds/conductor-dispatch.js +426 -0
  663. package/scripts/gds/context-pack.js +228 -0
  664. package/scripts/gds/coreB-carve-proof.sh +716 -0
  665. package/scripts/gds/cost.js +47 -0
  666. package/scripts/gds/db-backup-nightly.sh +160 -0
  667. package/scripts/gds/db-backup-offsite.sh +152 -0
  668. package/scripts/gds/demote.js +40 -0
  669. package/scripts/gds/design-sync.js +62 -0
  670. package/scripts/gds/diagnose-achievements.js +118 -0
  671. package/scripts/gds/diagram-facts.js +319 -0
  672. package/scripts/gds/discipline-modes.json +25 -0
  673. package/scripts/gds/discord-channels.js +66 -0
  674. package/scripts/gds/do-api.js +176 -0
  675. package/scripts/gds/docs-entropy.js +403 -0
  676. package/scripts/gds/doctor.js +389 -0
  677. package/scripts/gds/feedback-latest.js +94 -0
  678. package/scripts/gds/fetch-art-key.js +106 -0
  679. package/scripts/gds/fetch-sound-prefs.js +88 -0
  680. package/scripts/gds/figma-design-sync.js +61 -0
  681. package/scripts/gds/fitness.js +1446 -0
  682. package/scripts/gds/gate-review.js +322 -0
  683. package/scripts/gds/gating.js +325 -0
  684. package/scripts/gds/gds-db-backup.service +24 -0
  685. package/scripts/gds/gds-db-backup.timer +20 -0
  686. package/scripts/gds/gds-db-offsite.service +29 -0
  687. package/scripts/gds/gds-db-offsite.timer +18 -0
  688. package/scripts/gds/gen-api-client.js +508 -0
  689. package/scripts/gds/gen-api-docs.js +1037 -0
  690. package/scripts/gds/gen-atlas.js +366 -0
  691. package/scripts/gds/gen-diagrams.js +608 -0
  692. package/scripts/gds/gen-file-map.js +196 -0
  693. package/scripts/gds/gen-repo-map.js +519 -0
  694. package/scripts/gds/gen-session-index.js +210 -0
  695. package/scripts/gds/git-merge-regen.js +147 -0
  696. package/scripts/gds/grade-smoke.js +205 -0
  697. package/scripts/gds/hooks/pre-push.js +169 -0
  698. package/scripts/gds/http-api-client.js +88 -0
  699. package/scripts/gds/init.js +903 -0
  700. package/scripts/gds/install-git-hooks.js +114 -0
  701. package/scripts/gds/key-card.js +213 -0
  702. package/scripts/gds/key-status.js +126 -0
  703. package/scripts/gds/land-watch.js +168 -0
  704. package/scripts/gds/learning-capture.js +145 -0
  705. package/scripts/gds/lib.sh +44 -0
  706. package/scripts/gds/linkify-refs.js +473 -0
  707. package/scripts/gds/local-preview-lib.js +159 -0
  708. package/scripts/gds/local-preview.js +95 -0
  709. package/scripts/gds/login.js +225 -0
  710. package/scripts/gds/main-audit.js +279 -0
  711. package/scripts/gds/me.js +88 -0
  712. package/scripts/gds/memory-map.js +174 -0
  713. package/scripts/gds/merge-lock.js +71 -0
  714. package/scripts/gds/migration-namespace.js +200 -0
  715. package/scripts/gds/mirror-lineage-check.js +319 -0
  716. package/scripts/gds/mirror-redact.js +305 -0
  717. package/scripts/gds/module.js +482 -0
  718. package/scripts/gds/newcomer-floor.config.json +13 -0
  719. package/scripts/gds/newcomer-floor.js +415 -0
  720. package/scripts/gds/newcomer-floor.templates.json +86 -0
  721. package/scripts/gds/newcomer-floor.test.js +235 -0
  722. package/scripts/gds/next-number.js +163 -0
  723. package/scripts/gds/oauth-secret.js +197 -0
  724. package/scripts/gds/onboard.js +217 -0
  725. package/scripts/gds/onboarding-analyze.js +226 -0
  726. package/scripts/gds/onboarding-config.js +178 -0
  727. package/scripts/gds/onboarding-ship.js +92 -0
  728. package/scripts/gds/package-core.js +684 -0
  729. package/scripts/gds/paste-token.js +131 -0
  730. package/scripts/gds/portability-smoke-art.sh +85 -0
  731. package/scripts/gds/portability-smoke-memory.sh +147 -0
  732. package/scripts/gds/provision.js +1324 -0
  733. package/scripts/gds/publish-manifest.js +307 -0
  734. package/scripts/gds/pulse.js +309 -0
  735. package/scripts/gds/push-main.js +45 -0
  736. package/scripts/gds/read-session-export.js +359 -0
  737. package/scripts/gds/reauth.js +149 -0
  738. package/scripts/gds/recall.js +135 -0
  739. package/scripts/gds/release.js +71 -0
  740. package/scripts/gds/render-ideas.js +173 -0
  741. package/scripts/gds/repo-metrics.js +363 -0
  742. package/scripts/gds/resolve-skill-model.js +57 -0
  743. package/scripts/gds/run-routine.js +197 -0
  744. package/scripts/gds/run-unit-tests.js +178 -0
  745. package/scripts/gds/sandbox-stage.js +653 -0
  746. package/scripts/gds/search-ingest-db.js +209 -0
  747. package/scripts/gds/search-ingest-md.js +225 -0
  748. package/scripts/gds/security-baseline-check.sh +180 -0
  749. package/scripts/gds/seed-adopt-tasks.js +75 -0
  750. package/scripts/gds/seed-api-contract-goal-tasks.js +141 -0
  751. package/scripts/gds/seed-bongos-app-tasks.js +294 -0
  752. package/scripts/gds/seed-bongos-coreB-tranche1-tasks.js +81 -0
  753. package/scripts/gds/seed-bongos-coreB-tranche2-tasks.js +100 -0
  754. package/scripts/gds/seed-bongos-goal-hierarchy-tasks.js +307 -0
  755. package/scripts/gds/seed-bongos-module-system-tasks.js +346 -0
  756. package/scripts/gds/seed-bongos-tasks.js +214 -0
  757. package/scripts/gds/seed-gds-v4-tasks.js +624 -0
  758. package/scripts/gds/seed-governance-tasks.js +340 -0
  759. package/scripts/gds/seed-medusa-tasks.js +440 -0
  760. package/scripts/gds/seed-module-upstreaming.js +219 -0
  761. package/scripts/gds/seed-productization-tasks.js +235 -0
  762. package/scripts/gds/seed-provisioning-tasks.js +83 -0
  763. package/scripts/gds/seed-staging.sh +104 -0
  764. package/scripts/gds/seed-v2-world-tasks.js +283 -0
  765. package/scripts/gds/seed-v3-tasks.js +1981 -0
  766. package/scripts/gds/session-cost.js +393 -0
  767. package/scripts/gds/session-digest.js +179 -0
  768. package/scripts/gds/session-eval.js +576 -0
  769. package/scripts/gds/session.js +404 -0
  770. package/scripts/gds/setup.js +504 -0
  771. package/scripts/gds/shell.js +100 -0
  772. package/scripts/gds/ship.js +3618 -0
  773. package/scripts/gds/smoke-batch-claim.sh +213 -0
  774. package/scripts/gds/smoke-batch-release.sh +296 -0
  775. package/scripts/gds/smoke-box.sh +150 -0
  776. package/scripts/gds/smoke-claim-consistency.sh +212 -0
  777. package/scripts/gds/smoke-dependencies.sh +84 -0
  778. package/scripts/gds/smoke-gds.js +125 -0
  779. package/scripts/gds/smoke-write.sh +168 -0
  780. package/scripts/gds/start.js +782 -0
  781. package/scripts/gds/status.js +365 -0
  782. package/scripts/gds/triage.js +366 -0
  783. package/scripts/gds/upgrade.js +421 -0
  784. package/scripts/gds/validate-design.js +254 -0
  785. package/scripts/gds/version-close.js +549 -0
  786. package/scripts/migrate.sh +183 -0
  787. package/scripts/migrate_cost_ledger.sh +178 -0
  788. package/scripts/public-mirror-export.js +291 -0
  789. package/scripts/render-diagrams.sh +88 -0
  790. package/scripts/security/dep-audit.js +276 -0
  791. package/scripts/setup-builder.js +274 -0
  792. package/scripts/setup-builder.sh +28 -0
  793. package/scripts/snapshots/backfill-history.mjs +292 -0
  794. package/scripts/snapshots/maybe-render-on-deploy.sh +66 -0
  795. package/scripts/snapshots/render-pre-art-eras.mjs +329 -0
  796. package/scripts/snapshots/render-world.mjs +322 -0
  797. package/scripts/status-mirror-sync.js +192 -0
  798. package/scripts/status-probe.mjs +185 -0
  799. package/server.js +212 -0
  800. package/src/asset-version.js +71 -0
  801. package/src/bongos/CLAUDE.md +64 -0
  802. package/src/bongos/api-errors.js +281 -0
  803. package/src/bongos/api-path-404.js +67 -0
  804. package/src/bongos/api-prefix.js +38 -0
  805. package/src/bongos/app-pair.js +172 -0
  806. package/src/bongos/auth.js +979 -0
  807. package/src/bongos/cascade-dispatch.js +123 -0
  808. package/src/bongos/db-kernel.js +252 -0
  809. package/src/bongos/db.js +911 -0
  810. package/src/bongos/goal-scope-check.js +120 -0
  811. package/src/bongos/hierarchy-config.js +189 -0
  812. package/src/bongos/live-channel.js +145 -0
  813. package/src/bongos/llm-cache.js +260 -0
  814. package/src/bongos/llm-pricing.js +220 -0
  815. package/src/bongos/metrics.js +286 -0
  816. package/src/bongos/middleware/audit.js +274 -0
  817. package/src/bongos/middleware/error-envelope.js +93 -0
  818. package/src/bongos/middleware/rate-limit.js +195 -0
  819. package/src/bongos/module-scope-map.js +271 -0
  820. package/src/bongos/optimizer.js +166 -0
  821. package/src/bongos/path-match.js +47 -0
  822. package/src/bongos/permission-path-check.js +248 -0
  823. package/src/bongos/pool.js +55 -0
  824. package/src/bongos/repo-info.js +91 -0
  825. package/src/bongos/route-rank-check.js +420 -0
  826. package/src/bongos/routes/CLAUDE.md +43 -0
  827. package/src/bongos/routes/_helpers.js +369 -0
  828. package/src/bongos/routes/audit-log.js +59 -0
  829. package/src/bongos/routes/auth.js +755 -0
  830. package/src/bongos/routes/backup.js +104 -0
  831. package/src/bongos/routes/builders.js +526 -0
  832. package/src/bongos/routes/healthz.js +16 -0
  833. package/src/bongos/routes/instance.js +129 -0
  834. package/src/bongos/routes/live.js +125 -0
  835. package/src/bongos/routes/llm-cache.js +119 -0
  836. package/src/bongos/routes/me.js +380 -0
  837. package/src/bongos/routes/modules.js +131 -0
  838. package/src/bongos/routes/optimizer.js +54 -0
  839. package/src/bongos/routes/public.js +476 -0
  840. package/src/bongos/routes/security.js +207 -0
  841. package/src/bongos/routes.js +166 -0
  842. package/src/bongos/secret-box.js +177 -0
  843. package/src/bongos/sensitive-surfaces.js +30 -0
  844. package/src/bongos/serve-internal.js +889 -0
  845. package/src/bongos/uptime-poller.js +90 -0
  846. package/src/bongos-downloads.js +70 -0
  847. package/src/branding.js +182 -0
  848. package/src/build-info.js +77 -0
  849. package/src/devbox-downloads.js +67 -0
  850. package/src/instance-config.js +200 -0
  851. package/src/module-api.js +366 -0
  852. package/src/module-loader/loader.js +268 -0
  853. package/src/module-loader/manifest-schema.js +140 -0
  854. package/src/module-loader/provenance.js +28 -0
  855. package/src/module-loader/semver.js +100 -0
  856. package/src/module-seams.js +291 -0
  857. package/src/modules.js +254 -0
  858. package/src/platform-server.js +135 -0
  859. package/src/ui/adapters/claude-design/index.js +333 -0
  860. package/src/ui/adapters/figma/index.js +328 -0
  861. package/tests/abandon_task.mjs +138 -0
  862. package/tests/achievements_reconcile.mjs +167 -0
  863. package/tests/adopt_detect.mjs +141 -0
  864. package/tests/adopt_import.mjs +132 -0
  865. package/tests/adopt_preflight.mjs +105 -0
  866. package/tests/anti_grid.mjs +89 -0
  867. package/tests/api_client.mjs +231 -0
  868. package/tests/api_docs.mjs +283 -0
  869. package/tests/api_error_envelope_buildcheck.mjs +56 -0
  870. package/tests/api_error_envelope_middleware.mjs +99 -0
  871. package/tests/api_error_registry.mjs +108 -0
  872. package/tests/api_pagination_contract.mjs +51 -0
  873. package/tests/api_path_404.mjs +96 -0
  874. package/tests/app_pair.mjs +168 -0
  875. package/tests/architect.mjs +140 -0
  876. package/tests/art_key.mjs +121 -0
  877. package/tests/art_stage.mjs +121 -0
  878. package/tests/asset_version.mjs +94 -0
  879. package/tests/atlas.mjs +69 -0
  880. package/tests/audit_deps.mjs +74 -0
  881. package/tests/audit_middleware.mjs +385 -0
  882. package/tests/auth_admission_gate.mjs +164 -0
  883. package/tests/auth_anthropic_identity.mjs +95 -0
  884. package/tests/auth_duplicate_cookie.mjs +56 -0
  885. package/tests/auth_error_brand.mjs +77 -0
  886. package/tests/auth_flow_slice1.mjs +223 -0
  887. package/tests/auth_inactive_builder.mjs +94 -0
  888. package/tests/auth_page_gate.mjs +92 -0
  889. package/tests/auth_session_ttl.mjs +155 -0
  890. package/tests/autonomous_fit_protected_paths.mjs +115 -0
  891. package/tests/autonomy_gate.mjs +85 -0
  892. package/tests/autotile_variants.mjs +256 -0
  893. package/tests/autotile_xverify.mjs +133 -0
  894. package/tests/backfill_sessions.mjs +101 -0
  895. package/tests/backfill_task_rewards.mjs +152 -0
  896. package/tests/backup_cli.mjs +104 -0
  897. package/tests/bfg.mjs +327 -0
  898. package/tests/bfg_write.mjs +423 -0
  899. package/tests/bongos_box_connect.mjs +89 -0
  900. package/tests/bongos_dispatch.mjs +74 -0
  901. package/tests/bongos_downloads.mjs +118 -0
  902. package/tests/bongos_login.mjs +34 -0
  903. package/tests/box_access.mjs +186 -0
  904. package/tests/box_auth_check.mjs +114 -0
  905. package/tests/box_code_staleness.mjs +116 -0
  906. package/tests/box_connect_e2e.mjs +196 -0
  907. package/tests/box_cost.mjs +70 -0
  908. package/tests/box_dns_repoint.mjs +151 -0
  909. package/tests/box_host_keys.mjs +102 -0
  910. package/tests/box_onboard.mjs +317 -0
  911. package/tests/box_scope_session.mjs +115 -0
  912. package/tests/box_ship_permissions.mjs +71 -0
  913. package/tests/box_terminal_ssrf.mjs +90 -0
  914. package/tests/boxes.mjs +1255 -0
  915. package/tests/branding.mjs +88 -0
  916. package/tests/bug_attachments.mjs +189 -0
  917. package/tests/build_info.mjs +88 -0
  918. package/tests/builder_needs.mjs +99 -0
  919. package/tests/cap_newcomer_tasks.mjs +114 -0
  920. package/tests/cascade-dispatch.mjs +95 -0
  921. package/tests/cf_tunnel.mjs +459 -0
  922. package/tests/claim_recall.mjs +150 -0
  923. package/tests/claims_bind_session.mjs +47 -0
  924. package/tests/claude_materialize.mjs +148 -0
  925. package/tests/cli_box_scope.mjs +52 -0
  926. package/tests/cli_lib_formatters.mjs +87 -0
  927. package/tests/cli_token_reissue.mjs +147 -0
  928. package/tests/client_bundle_route.mjs +47 -0
  929. package/tests/cloud_bongos_pack.mjs +85 -0
  930. package/tests/conductor.mjs +496 -0
  931. package/tests/confirm_attribution.mjs +156 -0
  932. package/tests/conflict_resolve.mjs +462 -0
  933. package/tests/context_pack.mjs +240 -0
  934. package/tests/cost.mjs +94 -0
  935. package/tests/cost_audit.mjs +122 -0
  936. package/tests/cost_budget_status.mjs +78 -0
  937. package/tests/cost_reconcile.mjs +102 -0
  938. package/tests/cost_summary_shape.mjs +94 -0
  939. package/tests/credit_grant.mjs +376 -0
  940. package/tests/criterion_progress.mjs +220 -0
  941. package/tests/criterion_proposal.mjs +109 -0
  942. package/tests/criterion_ref_parse.mjs +53 -0
  943. package/tests/currency_label.mjs +119 -0
  944. package/tests/day_cycle.mjs +197 -0
  945. package/tests/dependencies_migration.mjs +77 -0
  946. package/tests/dependencies_polymorphic.mjs +212 -0
  947. package/tests/deploy_instance.mjs +78 -0
  948. package/tests/devbox_downloads.mjs +122 -0
  949. package/tests/diff_derived_signals.mjs +115 -0
  950. package/tests/discord_approvals.mjs +174 -0
  951. package/tests/discord_autojoin.mjs +158 -0
  952. package/tests/discord_bot.mjs +94 -0
  953. package/tests/discord_bugs.mjs +297 -0
  954. package/tests/discord_channels.mjs +337 -0
  955. package/tests/discord_foundation.mjs +76 -0
  956. package/tests/discord_inbound.mjs +190 -0
  957. package/tests/discord_message_buffer.mjs +87 -0
  958. package/tests/discord_oauth.mjs +55 -0
  959. package/tests/discord_reaction.mjs +170 -0
  960. package/tests/discord_role_sync.mjs +151 -0
  961. package/tests/display_name.mjs +123 -0
  962. package/tests/dns_preflight.mjs +74 -0
  963. package/tests/event_sound_prefs.mjs +194 -0
  964. package/tests/eviction_policy.mjs +279 -0
  965. package/tests/figma_adapter.mjs +199 -0
  966. package/tests/file_map.mjs +91 -0
  967. package/tests/first_admin_bootstrap.mjs +40 -0
  968. package/tests/fitness.mjs +435 -0
  969. package/tests/fitness_two_root.mjs +104 -0
  970. package/tests/fixtures/session-506-digest.json +34 -0
  971. package/tests/gate_approvals.mjs +451 -0
  972. package/tests/gate_review.mjs +152 -0
  973. package/tests/git_merge_regen.mjs +151 -0
  974. package/tests/github_push_ancestry.mjs +119 -0
  975. package/tests/github_push_land_proof.mjs +127 -0
  976. package/tests/github_push_merge_driver.mjs +175 -0
  977. package/tests/goal_abuse_matrix.mjs +187 -0
  978. package/tests/goal_achievement.mjs +146 -0
  979. package/tests/goal_conflicts.mjs +305 -0
  980. package/tests/goal_dependencies_read.mjs +73 -0
  981. package/tests/goal_member_roles.mjs +420 -0
  982. package/tests/goal_membership_requests.mjs +332 -0
  983. package/tests/goal_routes.mjs +203 -0
  984. package/tests/goal_scope_check.mjs +167 -0
  985. package/tests/goal_tier.mjs +312 -0
  986. package/tests/goal_wall_proof.mjs +112 -0
  987. package/tests/grade_attempts.mjs +73 -0
  988. package/tests/grade_attribution.mjs +117 -0
  989. package/tests/grade_diff_hash.mjs +191 -0
  990. package/tests/grade_server_authoritative.mjs +305 -0
  991. package/tests/grade_unavailable_display.mjs +66 -0
  992. package/tests/grader.mjs +1960 -0
  993. package/tests/grader_bypass.mjs +57 -0
  994. package/tests/grader_panel.mjs +252 -0
  995. package/tests/grader_prompt_fencing.mjs +192 -0
  996. package/tests/helpers.mjs +52 -0
  997. package/tests/hierarchy-config.mjs +81 -0
  998. package/tests/init.mjs +463 -0
  999. package/tests/instance_config.mjs +76 -0
  1000. package/tests/instance_manifest.mjs +110 -0
  1001. package/tests/interaction_prefs.mjs +72 -0
  1002. package/tests/key-card.mjs +110 -0
  1003. package/tests/key-status.mjs +45 -0
  1004. package/tests/land_watch.mjs +115 -0
  1005. package/tests/lifecycle-card.mjs +145 -0
  1006. package/tests/lifecycle_breakdown_view.mjs +236 -0
  1007. package/tests/linkify_refs.mjs +264 -0
  1008. package/tests/live_channel.mjs +128 -0
  1009. package/tests/live_sse.mjs +122 -0
  1010. package/tests/llm-cache-route.mjs +110 -0
  1011. package/tests/llm-cache.mjs +140 -0
  1012. package/tests/llm-pricing.mjs +152 -0
  1013. package/tests/local_preview.mjs +136 -0
  1014. package/tests/main_audit.mjs +137 -0
  1015. package/tests/memory_isolation.mjs +431 -0
  1016. package/tests/memory_map.mjs +107 -0
  1017. package/tests/memory_pull.mjs +429 -0
  1018. package/tests/merge_lease.mjs +100 -0
  1019. package/tests/merge_lock.mjs +312 -0
  1020. package/tests/metrics.mjs +147 -0
  1021. package/tests/migration_allocation.mjs +146 -0
  1022. package/tests/migration_namespace.mjs +185 -0
  1023. package/tests/migrations_fresh_replay_guard.mjs +38 -0
  1024. package/tests/mirror_lineage_fulltree.mjs +45 -0
  1025. package/tests/mirror_lineage_proof.mjs +72 -0
  1026. package/tests/mirror_redact.mjs +193 -0
  1027. package/tests/model_alloc_prefs.mjs +63 -0
  1028. package/tests/module-scope-map.mjs +88 -0
  1029. package/tests/module_api.mjs +110 -0
  1030. package/tests/module_cli.mjs +292 -0
  1031. package/tests/module_contributions.mjs +148 -0
  1032. package/tests/module_loader.mjs +286 -0
  1033. package/tests/module_manifest.mjs +194 -0
  1034. package/tests/module_owned_tests.mjs +105 -0
  1035. package/tests/module_provenance.mjs +34 -0
  1036. package/tests/module_route_rank.mjs +147 -0
  1037. package/tests/module_seams.mjs +68 -0
  1038. package/tests/modules.mjs +156 -0
  1039. package/tests/modules_route.mjs +38 -0
  1040. package/tests/newcomer_floor.mjs +17 -0
  1041. package/tests/newcomer_restock.mjs +80 -0
  1042. package/tests/next_number.mjs +154 -0
  1043. package/tests/oauth_secret.mjs +60 -0
  1044. package/tests/onboard.mjs +70 -0
  1045. package/tests/onboarding_gate.mjs +267 -0
  1046. package/tests/onboarding_observability.mjs +344 -0
  1047. package/tests/onboarding_route_signals.mjs +175 -0
  1048. package/tests/onboarding_state.mjs +346 -0
  1049. package/tests/one_active_claim_per_session.mjs +111 -0
  1050. package/tests/orphaned_claim_ship.mjs +135 -0
  1051. package/tests/override_attribution.mjs +142 -0
  1052. package/tests/override_request_ownership.mjs +235 -0
  1053. package/tests/package_core.mjs +435 -0
  1054. package/tests/parallel-load.mjs +402 -0
  1055. package/tests/path_match.mjs +62 -0
  1056. package/tests/permission_path.mjs +151 -0
  1057. package/tests/platform_boot.mjs +167 -0
  1058. package/tests/pre_compact.mjs +60 -0
  1059. package/tests/preview_server.mjs +127 -0
  1060. package/tests/profile_route.mjs +197 -0
  1061. package/tests/provision.mjs +805 -0
  1062. package/tests/provisioning_github_app_routes.mjs +98 -0
  1063. package/tests/public_mirror_export.mjs +124 -0
  1064. package/tests/public_task_resolver.mjs +112 -0
  1065. package/tests/publish_branch_route.mjs +422 -0
  1066. package/tests/publish_manifest.mjs +184 -0
  1067. package/tests/publish_reconciler.mjs +728 -0
  1068. package/tests/rank_gate.mjs +463 -0
  1069. package/tests/rate_limit_public.mjs +217 -0
  1070. package/tests/read_session_export.mjs +89 -0
  1071. package/tests/recall_cli.mjs +82 -0
  1072. package/tests/recall_hints.mjs +119 -0
  1073. package/tests/recent_shipped_window.mjs +80 -0
  1074. package/tests/regrade_eligibility.mjs +202 -0
  1075. package/tests/render_prefs.mjs +122 -0
  1076. package/tests/repo_map.mjs +92 -0
  1077. package/tests/reward_gate.mjs +284 -0
  1078. package/tests/route_rank_check.mjs +243 -0
  1079. package/tests/route_validation.mjs +490 -0
  1080. package/tests/routine_timers.mjs +72 -0
  1081. package/tests/rubric_fixtures.mjs +140 -0
  1082. package/tests/run_routine.mjs +69 -0
  1083. package/tests/sandbox_stage.mjs +582 -0
  1084. package/tests/scrubber_corpus.mjs +257 -0
  1085. package/tests/search_chunker.mjs +209 -0
  1086. package/tests/search_ingest.mjs +96 -0
  1087. package/tests/search_ingest_db.mjs +88 -0
  1088. package/tests/search_isolation.mjs +204 -0
  1089. package/tests/search_route.mjs +95 -0
  1090. package/tests/secret_box.mjs +189 -0
  1091. package/tests/security_docs.mjs +186 -0
  1092. package/tests/security_route.mjs +108 -0
  1093. package/tests/served_paths_shipped.mjs +118 -0
  1094. package/tests/session-cards.mjs +142 -0
  1095. package/tests/session_506_regression.mjs +69 -0
  1096. package/tests/session_caps.mjs +238 -0
  1097. package/tests/session_cost.mjs +133 -0
  1098. package/tests/session_digest.mjs +73 -0
  1099. package/tests/session_eval.mjs +386 -0
  1100. package/tests/session_index.mjs +105 -0
  1101. package/tests/session_records.mjs +369 -0
  1102. package/tests/session_search.mjs +78 -0
  1103. package/tests/session_start_freshness.mjs +123 -0
  1104. package/tests/setup_smoke.mjs +154 -0
  1105. package/tests/ship_autolinkify.mjs +60 -0
  1106. package/tests/ship_automerge_injection.mjs +174 -0
  1107. package/tests/ship_broadcast_routing.mjs +125 -0
  1108. package/tests/ship_broadcast_server.mjs +175 -0
  1109. package/tests/ship_card.mjs +280 -0
  1110. package/tests/ship_ci_deploy.mjs +374 -0
  1111. package/tests/ship_preflight.mjs +368 -0
  1112. package/tests/ship_premerge.mjs +75 -0
  1113. package/tests/ship_resume.mjs +129 -0
  1114. package/tests/ship_upload_skip.mjs +89 -0
  1115. package/tests/ship_zero_commit.mjs +60 -0
  1116. package/tests/single_host_hall.mjs +98 -0
  1117. package/tests/skill_prefs.mjs +150 -0
  1118. package/tests/smoke_preflight.mjs +66 -0
  1119. package/tests/snapshot_picker.mjs +233 -0
  1120. package/tests/sound_prefs.mjs +198 -0
  1121. package/tests/sprite_facing.mjs +35 -0
  1122. package/tests/status-probe.mjs +89 -0
  1123. package/tests/status_backfill.mjs +94 -0
  1124. package/tests/stop_refcheck.mjs +127 -0
  1125. package/tests/streak.mjs +175 -0
  1126. package/tests/subdomain_auth.mjs +58 -0
  1127. package/tests/task_classifier_vocab.mjs +41 -0
  1128. package/tests/task_create_idempotency.mjs +96 -0
  1129. package/tests/task_goal_link.mjs +93 -0
  1130. package/tests/task_ownership_gate.mjs +125 -0
  1131. package/tests/terrain_picker.mjs +298 -0
  1132. package/tests/touches_overlap.mjs +75 -0
  1133. package/tests/triage_development.mjs +140 -0
  1134. package/tests/turn_in_place.mjs +280 -0
  1135. package/tests/upgrade.mjs +357 -0
  1136. package/tests/verify_task_guard.mjs +64 -0
  1137. package/tests/version_close.mjs +76 -0
  1138. package/tests/versions_route.mjs +93 -0
  1139. package/tests/walkability.mjs +188 -0
  1140. package/tests/wandering_prefs.mjs +176 -0
  1141. package/tests/worktree_disambiguation.mjs +105 -0
  1142. package/tests/worktree_guard.mjs +90 -0
@@ -0,0 +1,58 @@
1
+ -- 176_promotion_respects_open_blockers.sql — dep-ship auto-promotion must not
2
+ -- un-block a task with an open blocker (V4.R15 / task 953, promotes idea 226).
3
+ --
4
+ -- Bug: the dependency auto-promotion triggers (163) promote a backlog task to
5
+ -- 'ready' the moment its full dep set is done. But a task can sit in 'backlog'
6
+ -- while ALSO carrying an open blocker link (task_blockers -> blockers, status
7
+ -- 'open') — e.g. idea 226: task #859 was backlog + linked to operator-cutover
8
+ -- blocker #13; when its deps shipped, promotion flipped it to 'ready'
9
+ -- (claimable) and silently bypassed the open blocker. A task waiting on a
10
+ -- blocker must stay un-promoted until the blocker resolves (009's
11
+ -- blocker-resolve trigger is what should release it, not a dep ship).
12
+ --
13
+ -- Fix: fold an "no open blocker" check into task_is_fully_unblocked — the shared
14
+ -- predicate every promotion trigger (163: ship / criterion-satisfy /
15
+ -- goal-achieve) re-checks before flipping backlog -> ready. One CREATE OR
16
+ -- REPLACE fixes all three paths and fail-closes any future promotion caller.
17
+ -- The blocker check matches the resolve trigger (009): a blocker is "open" iff
18
+ -- blockers.status = 'open'; legacy markdown-anchor links (blocker_ref text, no
19
+ -- blocker_id row) are not tracked here and behave exactly as before.
20
+ --
21
+ -- Promotion still only ever flips backlog -> ready, so the AFTER triggers can't
22
+ -- recurse. Idempotent: pure CREATE OR REPLACE of the predicate function.
23
+
24
+ BEGIN;
25
+
26
+ CREATE OR REPLACE FUNCTION task_is_fully_unblocked(p_task_id bigint)
27
+ RETURNS boolean AS $$
28
+ SELECT
29
+ -- (1) no gating dependency edge points at an un-done node …
30
+ NOT EXISTS (
31
+ WITH gating AS (
32
+ SELECT d.to_kind, d.to_id
33
+ FROM dependencies d
34
+ JOIN tasks t ON t.id = p_task_id
35
+ WHERE (d.from_kind = 'task' AND d.from_id = t.id)
36
+ OR (d.from_kind = 'goal' AND d.from_id = t.goal_id)
37
+ OR (d.from_kind = 'criterion' AND d.from_id IN (
38
+ SELECT tc.criterion_id FROM task_criteria tc WHERE tc.task_id = t.id))
39
+ )
40
+ SELECT 1
41
+ FROM gating g
42
+ WHERE NOT (
43
+ (g.to_kind = 'task' AND EXISTS (SELECT 1 FROM tasks x WHERE x.id = g.to_id AND x.status = 'shipped'))
44
+ OR (g.to_kind = 'criterion' AND EXISTS (SELECT 1 FROM done_when_criteria x WHERE x.id = g.to_id AND x.satisfied))
45
+ OR (g.to_kind = 'goal' AND EXISTS (SELECT 1 FROM goals x WHERE x.id = g.to_id AND x.status = 'achieved'))
46
+ )
47
+ )
48
+ -- … AND (2) the task has no open blocker linked via task_blockers (V4.R15).
49
+ AND NOT EXISTS (
50
+ SELECT 1
51
+ FROM task_blockers tb
52
+ JOIN blockers b ON b.id = tb.blocker_id
53
+ WHERE tb.task_id = p_task_id
54
+ AND b.status = 'open'
55
+ );
56
+ $$ LANGUAGE sql STABLE;
57
+
58
+ COMMIT;
@@ -0,0 +1,40 @@
1
+ -- 176_ui_discipline.sql — task 1376 / GDS-V4: add the `ui` discipline.
2
+ --
3
+ -- The discipline set after migration 086 was:
4
+ -- engineer | artist | ideator | unclassified (tasks.discipline)
5
+ -- engineer | artist | ideator (builders.preferred_disciplines)
6
+ --
7
+ -- This adds a fifth interest area: `ui` — UI/interface DESIGN work (Figma,
8
+ -- Claude-Design, design systems, layout/wireframes). It splits out of the
9
+ -- pixel-art `artist` lane (ADR 0079): producing interface designs is a distinct
10
+ -- discipline from producing pixel-art assets, and it routes to its own /design
11
+ -- work-mode (scripts/gds/discipline-modes.json) instead of /paint.
12
+ --
13
+ -- Purely additive — no data backfill. Existing rows keep their discipline; the
14
+ -- only change is that 'ui' is now an accepted value on both CHECK constraints.
15
+ -- The task-classifier (modules/lifecycle/task-classifier.js) can now assign it,
16
+ -- and POST /tasks accepts it via VALID_DISCIPLINES.
17
+ --
18
+ -- discipline is a text column (not a native enum) and the claimable_tasks /
19
+ -- tasks_session_fit views project it by value, so no view rebuild is needed.
20
+ --
21
+ -- Constraints are dropped before being re-added with the widened set, matching
22
+ -- the pattern in migration 086. Idempotent: safe to re-run.
23
+
24
+ BEGIN;
25
+
26
+ -- tasks.discipline — add 'ui' to the accepted set.
27
+ ALTER TABLE tasks DROP CONSTRAINT IF EXISTS tasks_discipline_check;
28
+ ALTER TABLE tasks ADD CONSTRAINT tasks_discipline_check
29
+ CHECK (discipline IN ('engineer', 'artist', 'ideator', 'ui', 'unclassified'));
30
+
31
+ -- builders.preferred_disciplines — add 'ui' so a builder can opt into the lane.
32
+ -- (Never carries 'unclassified' — that's a task state, not an interest area.)
33
+ ALTER TABLE builders DROP CONSTRAINT IF EXISTS builders_preferred_disciplines_check;
34
+ ALTER TABLE builders ADD CONSTRAINT builders_preferred_disciplines_check
35
+ CHECK (preferred_disciplines <@ ARRAY['engineer', 'artist', 'ideator', 'ui']::text[]);
36
+
37
+ INSERT INTO schema_migrations (version) VALUES ('176_ui_discipline')
38
+ ON CONFLICT (version) DO NOTHING;
39
+
40
+ COMMIT;
@@ -0,0 +1,76 @@
1
+ -- 177 require a credits_reward (drachmae) before a task is workable
2
+ -- Applied under task 1670 (GDS-V4 — Require a credits_reward value before a task
3
+ -- can become READY / be CLAIMED). See docs/adr/0096-require-reward-before-workable.md.
4
+ -- Idempotent on re-run.
5
+ --
6
+ -- Problem: tasks.credits_reward defaults to 0 (migration 003). A task could be
7
+ -- promoted to 'ready' and claimed+shipped while paying 0 drachmae. This migration
8
+ -- closes the auto-promote half of the gate (the route + claim halves live in
9
+ -- modules/lifecycle/routes/tasks.js + db.js) and GRANDFATHERS every task that is
10
+ -- ALREADY workable so no currently-claimable work is stranded.
11
+ --
12
+ -- Grandfathering (the critical invariant): there are ~57 'ready' tasks with
13
+ -- credits_reward=0 right now. We must NOT make any of them unclaimable, and must
14
+ -- NOT retro-demote any 'ready' task to backlog.
15
+ -- 1. We add a reward_gate_exempt boolean and set it TRUE for every task that is
16
+ -- already at or past 'ready' (ready/active/completed/confirmed/shipped). The
17
+ -- route + claim backstop honor this flag, so existing claimable + in-flight
18
+ -- work is permanently exempt. NEW tasks default the column to FALSE, so the
19
+ -- gate applies only to future promotions/claims.
20
+ -- 2. The auto-promote predicate change below only affects FUTURE backlog->ready
21
+ -- evaluations (the triggers fire on later ship/satisfy/achieve events) — it
22
+ -- never re-evaluates a row already in 'ready', so no demotion can occur.
23
+
24
+ BEGIN;
25
+
26
+ -- (1) The grandfather flag. Idempotent: ADD COLUMN IF NOT EXISTS.
27
+ ALTER TABLE tasks ADD COLUMN IF NOT EXISTS reward_gate_exempt boolean NOT NULL DEFAULT false;
28
+
29
+ -- Stamp every task that is already workable (or beyond) as exempt. A clean no-op
30
+ -- on re-run (it only ever sets false->true on the snapshot of already-advanced
31
+ -- rows; a fresh replay re-marks the same set). Backlog/blocked rows are NOT
32
+ -- exempted — going forward they must carry a reward to advance.
33
+ UPDATE tasks
34
+ SET reward_gate_exempt = true
35
+ WHERE reward_gate_exempt = false
36
+ AND status IN ('ready', 'active', 'completed', 'confirmed', 'shipped');
37
+
38
+ -- (2) The auto-promotion predicate. A task is auto-promotable to 'ready' only when
39
+ -- it is fully dependency-unblocked AND it has something to pay (a positive
40
+ -- credits_reward) OR it is grandfathered. Adding the reward clause here (the single
41
+ -- predicate shared by all three promotion triggers — promote_dependents_on_ship /
42
+ -- _criterion_satisfy / _goal_achieve) keeps unrewarded backlog tasks OUT of 'ready'
43
+ -- without touching any row already in 'ready' (triggers never re-evaluate those).
44
+ CREATE OR REPLACE FUNCTION task_is_fully_unblocked(p_task_id bigint)
45
+ RETURNS boolean AS $$
46
+ SELECT
47
+ -- reward gate (task 1670 / ADR 0096): present + positive, or grandfathered.
48
+ EXISTS (
49
+ SELECT 1 FROM tasks t
50
+ WHERE t.id = p_task_id
51
+ AND (t.reward_gate_exempt = true OR COALESCE(t.credits_reward, 0) > 0)
52
+ )
53
+ -- dependency gate (migration 163): NONE of the task's gating edges (own + goal
54
+ -- + criterion) points at an un-done node. An orphaned `to` yields no EXISTS
55
+ -- match -> counts as un-done -> task stays blocked (fail-closed).
56
+ AND NOT EXISTS (
57
+ WITH gating AS (
58
+ SELECT d.to_kind, d.to_id
59
+ FROM dependencies d
60
+ JOIN tasks t ON t.id = p_task_id
61
+ WHERE (d.from_kind = 'task' AND d.from_id = t.id)
62
+ OR (d.from_kind = 'goal' AND d.from_id = t.goal_id)
63
+ OR (d.from_kind = 'criterion' AND d.from_id IN (
64
+ SELECT tc.criterion_id FROM task_criteria tc WHERE tc.task_id = t.id))
65
+ )
66
+ SELECT 1
67
+ FROM gating g
68
+ WHERE NOT (
69
+ (g.to_kind = 'task' AND EXISTS (SELECT 1 FROM tasks x WHERE x.id = g.to_id AND x.status = 'shipped'))
70
+ OR (g.to_kind = 'criterion' AND EXISTS (SELECT 1 FROM done_when_criteria x WHERE x.id = g.to_id AND x.satisfied))
71
+ OR (g.to_kind = 'goal' AND EXISTS (SELECT 1 FROM goals x WHERE x.id = g.to_id AND x.status = 'achieved'))
72
+ )
73
+ );
74
+ $$ LANGUAGE sql STABLE;
75
+
76
+ COMMIT;
@@ -0,0 +1,61 @@
1
+ -- 178 reward gate: AUTO-ASSIGN at the gate, revert the migration-177 auto-promote
2
+ -- reward clause.
3
+ --
4
+ -- Applied under task 1673 (GDS-V4 — amend task 1670 / ADR 0096). See the dated
5
+ -- 2026-06-28 amendment in docs/adr/0096-require-reward-before-workable.md.
6
+ -- Idempotent on re-run.
7
+ --
8
+ -- The gate no longer BLOCKS an unrewarded task from becoming workable — it
9
+ -- AUTO-ASSIGNS a capped, audited credits_reward at the promote route + the claim
10
+ -- path (both in modules/lifecycle/{routes/tasks.js,db.js}). Because claim-time
11
+ -- auto-assign covers every task, the auto-promotion predicate no longer needs a
12
+ -- reward clause: migration 177 added `(reward_gate_exempt OR credits_reward > 0)`
13
+ -- to task_is_fully_unblocked; this migration REVERTS that, restoring the
14
+ -- dependency-doneness check ONLY (the migration-163 definition). A deps-shipped
15
+ -- task now auto-promotes backlog->ready even at 0 reward; the claim path assigns a
16
+ -- real value before any work starts.
17
+ --
18
+ -- The reward_gate_exempt column (added by 177) becomes INERT: nothing reads it
19
+ -- anymore (the gate auto-assigns regardless of the flag, so the grandfathered
20
+ -- ~27 tasks earn a fair value when claimed). We leave the column in place — a
21
+ -- later migration may drop it once the backfill (task 1672) is complete. See the
22
+ -- ADR amendment.
23
+ --
24
+ -- No data backfill, no demotion: CREATE OR REPLACE only swaps the predicate body;
25
+ -- the auto-promotion triggers (migration 163) reference the same function and pick
26
+ -- up the reverted body on their next fire. Rows already in 'ready' are never
27
+ -- re-evaluated, so nothing moves.
28
+
29
+ BEGIN;
30
+
31
+ -- Revert task_is_fully_unblocked to the migration-163 deps-doneness predicate
32
+ -- (drop the 177 reward-gate clause). TRUE iff NONE of the task's gating edges
33
+ -- (own + goal + criterion) points at an un-done node. An orphaned `to` yields no
34
+ -- EXISTS match -> counts as un-done -> task stays blocked (fail-closed). This is
35
+ -- byte-identical to the 163 body.
36
+ CREATE OR REPLACE FUNCTION task_is_fully_unblocked(p_task_id bigint)
37
+ RETURNS boolean AS $$
38
+ SELECT NOT EXISTS (
39
+ WITH gating AS (
40
+ SELECT d.to_kind, d.to_id
41
+ FROM dependencies d
42
+ JOIN tasks t ON t.id = p_task_id
43
+ WHERE (d.from_kind = 'task' AND d.from_id = t.id)
44
+ OR (d.from_kind = 'goal' AND d.from_id = t.goal_id)
45
+ OR (d.from_kind = 'criterion' AND d.from_id IN (
46
+ SELECT tc.criterion_id FROM task_criteria tc WHERE tc.task_id = t.id))
47
+ )
48
+ SELECT 1
49
+ FROM gating g
50
+ WHERE NOT (
51
+ (g.to_kind = 'task' AND EXISTS (SELECT 1 FROM tasks x WHERE x.id = g.to_id AND x.status = 'shipped'))
52
+ OR (g.to_kind = 'criterion' AND EXISTS (SELECT 1 FROM done_when_criteria x WHERE x.id = g.to_id AND x.satisfied))
53
+ OR (g.to_kind = 'goal' AND EXISTS (SELECT 1 FROM goals x WHERE x.id = g.to_id AND x.status = 'achieved'))
54
+ )
55
+ );
56
+ $$ LANGUAGE sql STABLE;
57
+
58
+ INSERT INTO schema_migrations (version) VALUES ('178_reward_gate_auto_assign_revert_autopromote')
59
+ ON CONFLICT (version) DO NOTHING;
60
+
61
+ COMMIT;
@@ -0,0 +1,33 @@
1
+ -- 179 search_chunks usefulness signal — record whether a recalled chunk was
2
+ -- actually USED, and let that signal drive ranking (ADR 0095 C3, task 1660).
3
+ --
4
+ -- search_chunks is a CORE-owned table (migration 103_search_chunks.sql), so the
5
+ -- usefulness columns land as a CORE migration here, NOT a module-owned one — a
6
+ -- module migration may only touch its own memory_-namespaced tables (ADR 0083
7
+ -- §Decision #5, enforced by fitness.js). The memory module owns the *queries*
8
+ -- over search_chunks (modules/memory/search.js); core owns the table's schema.
9
+ --
10
+ -- WHY (ADR 0095 C3): nothing tracked whether recalled knowledge actually helped.
11
+ -- A usefulness signal lets high-value chunks rise and dead weight fade, keeping
12
+ -- the recall corpus high-signal as it grows. The signal is two monotonic counters
13
+ -- (a 'useful'/'not_useful' vote — claude-mem's save-result shape: useful vs
14
+ -- dead_end) plus the last-useful timestamp. The recall ranker reads them to apply
15
+ -- a small, bounded multiplicative boost to the RRF fusion score (search.js).
16
+ --
17
+ -- Additive + idempotent: ADD COLUMN IF NOT EXISTS is safe to re-run.
18
+
19
+ BEGIN;
20
+
21
+ ALTER TABLE search_chunks
22
+ -- Times a recall caller marked this chunk as having helped (the 'useful' vote).
23
+ ADD COLUMN IF NOT EXISTS useful_count integer NOT NULL DEFAULT 0,
24
+ -- Times a caller marked it as NOT helpful / a dead end (the decay vote).
25
+ ADD COLUMN IF NOT EXISTS not_useful_count integer NOT NULL DEFAULT 0,
26
+ -- When the chunk was last marked useful (carried for future time-decay /
27
+ -- observability; not yet weighted in the ranker).
28
+ ADD COLUMN IF NOT EXISTS last_useful_at timestamptz;
29
+
30
+ INSERT INTO schema_migrations (version) VALUES ('179_search_chunk_usefulness')
31
+ ON CONFLICT (version) DO NOTHING;
32
+
33
+ COMMIT;
@@ -0,0 +1,54 @@
1
+ -- 180_one_active_claim_per_session.sql
2
+ -- task 1642 — DB-level defence-in-depth behind the app-layer guard
3
+ -- (modules/lifecycle/routes/claims.js shouldRefuseSessionClaim).
4
+ --
5
+ -- THE PROBLEM. Working 2+ tasks from one worktree means every commit lands on
6
+ -- the single branch that worktree owns; /builder-ship publishes the whole
7
+ -- branch, so shipping one task drags the other's commits with it (commingled
8
+ -- ships). The cure: a CLI session (≈ one worktree, identified by
9
+ -- creator_session_id) may hold at most ONE active claim at a time.
10
+ --
11
+ -- "Active" is the claims-table convention released_at IS NULL — there is NO
12
+ -- `status` column on `claims` (the task spec's `status='active'` named a column
13
+ -- that doesn't exist on this table; the row's lifecycle lives on `tasks`). The
14
+ -- partial unique index below therefore keys on released_at IS NULL.
15
+ --
16
+ -- creator_session_id IS NOT NULL is essential: a web claim (bind_session=false)
17
+ -- stores a NULL session and is adoptable by any of the builder's CLI sessions —
18
+ -- those must never collide with each other (many NULLs are fine) nor with a
19
+ -- bound CLI claim. The app guard skips NULL sessions for the same reason.
20
+ --
21
+ -- SAFETY — a unique index FAILS to create (and would block deploy) if existing
22
+ -- rows already violate it. Before the CREATE we mop up any pre-existing
23
+ -- duplicate session-bound active claims, keeping the EARLIEST per session and
24
+ -- closing the rest (released_at=now(), outcome='abandoned'). This is the same
25
+ -- "close the dangling claim" shape as migration 174. It is idempotent: a second
26
+ -- run finds no duplicates and closes nothing. The app-layer guard in
27
+ -- modules/lifecycle/routes/claims.js is the AUTHORITATIVE enforcement going
28
+ -- forward; this index is belt-and-braces and must NOT break deploy.
29
+
30
+ -- Step 1 — heal any current violation so the unique index can be created.
31
+ -- Per session, keep the earliest active bound claim (lowest claimed_at, id as
32
+ -- tiebreak) and close every later one. A NULL creator_session_id is untouched
33
+ -- (PARTITION BY would group all NULLs, so we exclude them from the scan).
34
+ WITH ranked AS (
35
+ SELECT c.id,
36
+ ROW_NUMBER() OVER (
37
+ PARTITION BY c.creator_session_id
38
+ ORDER BY c.claimed_at, c.id
39
+ ) AS rn
40
+ FROM claims c
41
+ WHERE c.released_at IS NULL
42
+ AND c.creator_session_id IS NOT NULL
43
+ )
44
+ UPDATE claims c
45
+ SET released_at = now(),
46
+ outcome = COALESCE(c.outcome, 'abandoned')
47
+ FROM ranked r
48
+ WHERE c.id = r.id
49
+ AND r.rn > 1;
50
+
51
+ -- Step 2 — the teeth: at most one active claim per (non-null) session.
52
+ CREATE UNIQUE INDEX IF NOT EXISTS uniq_active_claim_per_session
53
+ ON claims (creator_session_id)
54
+ WHERE released_at IS NULL AND creator_session_id IS NOT NULL;
@@ -0,0 +1,33 @@
1
+ -- 181_cost_log_skill_name.sql — task #385 / V3.R85 follow-up C.
2
+ --
3
+ -- Add skill_name to cost_log so per-skill spend is measurable.
4
+ --
5
+ -- Background
6
+ -- ----------
7
+ -- ADR #304 committed to a cost-per-skill-invocation measurement, but
8
+ -- cost_log has no skill_name column, making it impossible to aggregate
9
+ -- "how much does /idea-triage cost vs /builder-ship". This migration
10
+ -- adds the column. The --skill flag on /builder-cost and the
11
+ -- resolve-skill-model.js helper (task #385 parts A+B) wire it up at the
12
+ -- call site, so a week of data after those land gives us the delta ADR
13
+ -- #304's consequences section requires.
14
+ --
15
+ -- Design
16
+ -- ------
17
+ -- * Nullable. Historical rows and non-skill-invocation costs (infra,
18
+ -- domain, art) carry no skill_name — NULL is correct, not a gap.
19
+ -- * Text, unconstrained to a skills enum. New skills are added to
20
+ -- skill-prefs.js/KNOWN_SKILLS without a migration; the cost_log column
21
+ -- should not require a parallel schema change for each one.
22
+ -- * Index on (skill_name, recorded_at DESC) for the "cost by skill over
23
+ -- time" query shape the ADR #304 consequences analysis will run.
24
+
25
+ ALTER TABLE cost_log
26
+ ADD COLUMN IF NOT EXISTS skill_name text;
27
+
28
+ CREATE INDEX IF NOT EXISTS idx_cost_log_skill_name_recorded
29
+ ON cost_log (skill_name, recorded_at DESC)
30
+ WHERE skill_name IS NOT NULL;
31
+
32
+ INSERT INTO schema_migrations (version) VALUES ('181_cost_log_skill_name')
33
+ ON CONFLICT (version) DO NOTHING;
@@ -0,0 +1,25 @@
1
+ -- 184_claim_release_requested.sql — the flag-for-release nudge (task 1736).
2
+ --
3
+ -- A goal owner/manager resolving a task conflict (GET /goals/:id/conflicts →
4
+ -- POST /goals/:id/conflicts/resolve, action 'flag_release') asks the holder of
5
+ -- the task's ACTIVE claim to wrap up or release. The flag is a soft nudge, not
6
+ -- an eviction: nothing about the claim's validity changes; the holder sees it
7
+ -- on their own claim reads (getActiveClaimsForBuilder → /api/gds/me).
8
+ --
9
+ -- Lives in core migrations/ (not modules/lifecycle/migrations/) because it
10
+ -- ALTERs the SHARED claims table — a module migration may only touch its own
11
+ -- namespaced objects (ADR 0083 §Decision #5; the fitness check enforces it).
12
+ --
13
+ -- Purely additive + idempotent; replay-safe on a fresh DB (no data touched).
14
+
15
+ BEGIN;
16
+
17
+ ALTER TABLE claims
18
+ ADD COLUMN IF NOT EXISTS release_requested_by bigint REFERENCES builders(id),
19
+ ADD COLUMN IF NOT EXISTS release_requested_at timestamptz,
20
+ ADD COLUMN IF NOT EXISTS release_requested_note text;
21
+
22
+ INSERT INTO schema_migrations (version) VALUES ('184_claim_release_requested')
23
+ ON CONFLICT (version) DO NOTHING;
24
+
25
+ COMMIT;
@@ -0,0 +1,59 @@
1
+ -- 185_module_upstreaming_goal_wiring.sql
2
+ -- ADR 0107 (task 1766) — wire up the "Module upstreaming & catalog" initiative
3
+ -- and consolidate the ADR-0103 separation spine under its proper goal.
4
+ --
5
+ -- WHY A MIGRATION (not the API): the GDS HTTP API exposes POST /goals and
6
+ -- goal-less POST /tasks (+ dependencies), but has NO endpoint to (a) attach an
7
+ -- existing task to a goal (tasks.goal_id), or (b) reparent an orphan. Those are
8
+ -- SQL-only today (the same gap the ADR-0103 consolidation used migration 182
9
+ -- for). The goal (id 29) and the 7 ecosystem tasks (1767..1773) + their deps were
10
+ -- already created via scripts/gds/seed-module-upstreaming.js; this migration does
11
+ -- only the SQL-only finishing.
12
+ --
13
+ -- ADR 0105 COMPLIANCE: this is a pure MUTATION of existing OTB rows — it INSERTs
14
+ -- NO versions/goals/criteria scope-truth, so it cannot pollute or crash a vanilla
15
+ -- self-host. Every statement is guarded on its OTB anchor existing, so on any DB
16
+ -- that is not this instance it affects ZERO rows (a clean no-op). It is therefore
17
+ -- safe to carry in core migrations/ (where it auto-applies on the OTB deploy),
18
+ -- unlike the seed files ADR 0105 relocated to migrations/instance/. Re-runnable.
19
+
20
+ BEGIN;
21
+
22
+ -- 1. Attach the ecosystem tasks (ADR 0107) to goal 29
23
+ -- "Module upstreaming & catalog". No-op unless goal 29 exists (i.e. this is OTB).
24
+ -- 1767..1773 = the original 7; 1776 = the hall Modules tab + atlas provenance (§9).
25
+ UPDATE tasks
26
+ SET goal_id = 29
27
+ WHERE id IN (1767, 1768, 1769, 1770, 1771, 1772, 1773, 1776)
28
+ AND EXISTS (SELECT 1 FROM goals WHERE id = 29);
29
+
30
+ -- 2. Consolidate the ADR-0103 separation spine under G26
31
+ -- "Cloud Bongos productization and self-host": the ADR task (1726),
32
+ -- R88 extract-core (1727), and R89 split-Amazonprimea (1728) were orphaned
33
+ -- (goal_id NULL). R85 (1689) and R86 (1690) already live under G26.
34
+ UPDATE tasks
35
+ SET goal_id = 26
36
+ WHERE id IN (1726, 1727, 1728)
37
+ AND EXISTS (SELECT 1 FROM goals WHERE id = 26);
38
+
39
+ -- 3. Record the ADR-0103 lineage edge the spine was missing: R88 (extract the
40
+ -- core, 1727) depends on R84 (package-core, 1688 — shipped, so already
41
+ -- satisfied; this only makes the dependency graph match the ADR's spine).
42
+ -- Idempotent via the composite PK.
43
+ -- Cycle-safe: this raw INSERT skips the app-level findDependencyCycle guard,
44
+ -- but a cycle needs 1688 to (transitively) depend on 1727 — no such reverse
45
+ -- edge exists, and 1688 is a shipped/older task whose dep set is settled. The
46
+ -- worst case is not corruption but an un-promotable task (the claim gate
47
+ -- fail-closes), and here the edge is already-satisfied so even that can't occur.
48
+ INSERT INTO dependencies (from_kind, from_id, to_kind, to_id)
49
+ SELECT 'task', 1727, 'task', 1688
50
+ WHERE EXISTS (SELECT 1 FROM tasks WHERE id = 1727)
51
+ AND EXISTS (SELECT 1 FROM tasks WHERE id = 1688)
52
+ ON CONFLICT DO NOTHING;
53
+
54
+ -- Self-register so this file is not re-run (the recent-migration convention;
55
+ -- migrate.sh also backfills with ON CONFLICT, so this is belt-and-suspenders).
56
+ INSERT INTO schema_migrations (version) VALUES ('185_module_upstreaming_goal_wiring')
57
+ ON CONFLICT DO NOTHING;
58
+
59
+ COMMIT;
@@ -0,0 +1,30 @@
1
+ -- 187_goal_sort_order.sql — per-version goal priority (task 1760).
2
+ --
3
+ -- goals is a CORE-owned table (created before the module system, ADR 0083
4
+ -- §Decision #5 — a module migration may only touch its OWN <key>_-namespaced
5
+ -- objects, so this schema change lives in core migrations/, not
6
+ -- modules/lifecycle/migrations/, even though the query layer is lifecycle's).
7
+ --
8
+ -- sort_order is the OWNER'S priority ordering WITHIN a version — distinct
9
+ -- from goal.status (lifecycle) and goal.created_at (creation history).
10
+ -- Backfill assigns each existing goal its current (version_id, created_at, id)
11
+ -- rank so the visible order does not jump the moment this migration lands; a
12
+ -- fresh instance with zero goals is a no-op.
13
+
14
+ BEGIN;
15
+
16
+ ALTER TABLE goals
17
+ ADD COLUMN IF NOT EXISTS sort_order integer NOT NULL DEFAULT 0;
18
+
19
+ WITH ranked AS (
20
+ SELECT id, row_number() OVER (PARTITION BY version_id ORDER BY created_at, id) - 1 AS rn
21
+ FROM goals
22
+ )
23
+ UPDATE goals g
24
+ SET sort_order = ranked.rn
25
+ FROM ranked
26
+ WHERE g.id = ranked.id
27
+ AND g.sort_order = 0
28
+ AND ranked.rn <> 0;
29
+
30
+ COMMIT;
@@ -0,0 +1,21 @@
1
+ -- 187_tasks_kind_check_add_verify.sql
2
+ -- App/DB enum drift fix. The application's VALID_KINDS gained 'verify' (kind='verify'
3
+ -- verification tasks — the ADR-0088/#1053 premature-confirm guard), but the DB
4
+ -- `tasks_kind_check` constraint (added in migration 006) was never updated to match.
5
+ -- So `POST /tasks` with kind='verify' passed app validation, then violated the CHECK
6
+ -- on INSERT and returned 500 create_failed. Surfaced landing the BONGOS-V1 Governance
7
+ -- goal — 4 proof tasks (kind='verify') 500'd and fell back to 'infra'.
8
+ --
9
+ -- Core + platform-universal (a schema constraint every instance needs, NOT OTB
10
+ -- scope-truth) → lives in migrations/ root, applies on every deploy. Idempotent:
11
+ -- drop-if-exists then re-add with the full current kind set (mirrors VALID_KINDS in
12
+ -- modules/lifecycle/task-classifier.js). A drop+re-add re-validates existing rows,
13
+ -- all of which already hold a valid kind.
14
+
15
+ ALTER TABLE tasks DROP CONSTRAINT IF EXISTS tasks_kind_check;
16
+ ALTER TABLE tasks ADD CONSTRAINT tasks_kind_check
17
+ CHECK (kind IN (
18
+ 'feature','bug','infra','refactor','spike',
19
+ 'learning-capture','cleanup','decision','blocker-resolution',
20
+ 'verify','unclassified'
21
+ ));
@@ -0,0 +1,88 @@
1
+ # Authoring a migration
2
+
3
+ Schema and data changes live here as `NNN_short_name.sql` files, applied in
4
+ filename order by [`scripts/migrate.sh`](../scripts/migrate.sh) on every deploy
5
+ and tracked by filename stem in the `schema_migrations` table.
6
+
7
+ **The one rule that has actually bitten us:** a migration may be re-applied
8
+ against a database whose data has *moved on since you wrote it* — a fresh
9
+ restore + replay, or a later migration that renamed a row your migration
10
+ references. So every migration must be a clean no-op on re-run, and any write
11
+ keyed on a **hardcoded natural key** must guard for that key still existing.
12
+
13
+ ## Checklist
14
+
15
+ - [ ] **Name it with the number reserved by your claim.** `/builder-claim` prints
16
+ `Migration number reserved for you: NNN`. Use exactly that — the allocator
17
+ (migration 008) prevents two parallel claims from colliding on a number.
18
+ Never guess the next number from `ls`.
19
+ - [ ] **Wrap the whole file in `BEGIN; … COMMIT;`** so a mid-file failure rolls
20
+ back rather than leaving the schema half-migrated.
21
+ - [ ] **Make every statement idempotent.** `migrate.sh` skips files already in
22
+ `schema_migrations`, but a fresh restore replays the whole folder — and the
23
+ file must survive that. Use `CREATE TABLE IF NOT EXISTS`,
24
+ `ALTER TABLE … ADD COLUMN IF NOT EXISTS`, `CREATE OR REPLACE`,
25
+ `DROP … IF EXISTS`, and `INSERT … ON CONFLICT DO NOTHING`.
26
+ - [ ] **Guard hardcoded natural keys with `WHERE EXISTS`.** Any `INSERT`/`UPDATE`
27
+ that hardcodes a renameable natural key — a `version_id` like `'GDS-V3'`, a
28
+ builder login, a criterion slug — must guard on that key still existing, so
29
+ it's a clean no-op if a later migration renamed or removed it:
30
+
31
+ ```sql
32
+ -- Guarded so a fresh restore + replay (or a post-rename DB) is a no-op,
33
+ -- never a FK violation.
34
+ INSERT INTO done_when_criteria (version_id, cnum, criterion_md)
35
+ SELECT 'GDS-V3', 1, '…'
36
+ WHERE EXISTS (SELECT 1 FROM versions WHERE id = 'GDS-V3')
37
+ ON CONFLICT DO NOTHING;
38
+
39
+ UPDATE versions SET done_when = '…'
40
+ WHERE id = 'GDS-V3'
41
+ AND EXISTS (SELECT 1 FROM versions WHERE id = 'GDS-V3');
42
+ ```
43
+
44
+ Why this is a real rule and not paranoia: migration `<redacted>`
45
+ hardcoded `version_id = 'PMS-V3'`; migration `019` then renamed that id to
46
+ `'GDS-V3'`. On the next fresh replay, 018 ran against a DB where `PMS-V3` no
47
+ longer existed and the deploy broke. The fix was a `WHERE EXISTS` guard on
48
+ every statement (see the head of
49
+ [`<redacted>.sql`](<redacted>.sql)). Prefer a
50
+ per-statement `WHERE EXISTS` over a `DO`-block guard — a `DO` block can't
51
+ short-circuit the rest of the file.
52
+ - [ ] **Don't `DELETE` rows that other tables reference.** Soft-revoke instead
53
+ (e.g. set `revoked_at = now()` on sessions rather than deleting — `claims`
54
+ has an FK). See the LarsCode reset session log for the pattern.
55
+ - [ ] **Self-registration is automatic.** `migrate.sh` writes the
56
+ `schema_migrations` row itself with `ON CONFLICT DO NOTHING` after a
57
+ successful apply, so you do **not** need a trailing
58
+ `INSERT INTO schema_migrations …` — but one is harmless if you copy an old
59
+ file that has it.
60
+ - [ ] **ASCII only in files read by cloud-init / shell wrappers.** Not a migration
61
+ issue per se, but the same "silently discarded on a stray byte" failure mode
62
+ bit `builder-box-cloud-init.yaml` (learning 48) — keep migrations ASCII too.
63
+ - [ ] **Test idempotence locally before shipping.** Apply, then apply again:
64
+
65
+ ```sh
66
+ scripts/migrate.sh # apply NNN
67
+ scripts/migrate.sh # must print "skip NNN (already applied)" and exit 0
68
+ ```
69
+
70
+ For the restore-replay path, drop the `schema_migrations` row for your file
71
+ and re-run — it must be a clean no-op, not an error.
72
+
73
+ ## Anatomy of a migration file
74
+
75
+ ```sql
76
+ -- NNN short human description
77
+ -- Applied under claim <id> (task <id>, <rank prefix> — <title>).
78
+ -- Idempotent on re-run.
79
+
80
+ BEGIN;
81
+
82
+ -- … guarded, idempotent statements …
83
+
84
+ COMMIT;
85
+ ```
86
+
87
+ The header comment is convention, not enforced — but it's how `git blame` and the
88
+ audit trail tie a schema change back to the task that justified it.
@@ -0,0 +1,71 @@
1
+ -- core_188_goal_visibility_and_membership_requests.sql — private goals + the
2
+ -- invite / join-request model (task 1951, ADR 0112).
3
+ --
4
+ -- Adds goal PRIVACY plus the two-sided membership-request queue a private goal
5
+ -- needs. A goal's `visibility` is 'public' (default = today's open-join) or
6
+ -- 'private'; a private goal stays VISIBLE in the goal list but non-members can't
7
+ -- self-join — they are INVITED (and accept) or REQUEST to join (approved by an
8
+ -- owner/manager/Archon). goal_membership_requests is the pending queue for BOTH
9
+ -- directions — the access_requests approval-queue pattern (modules/onboarding)
10
+ -- applied to goal membership.
11
+ --
12
+ -- goals is a CORE-owned table (created in 160_goal_tier; ADR 0083 §Decision 5 —
13
+ -- a module migration may touch only its own <key>_ objects), so these changes
14
+ -- live in core migrations/, core_-namespaced (ADR 0108 §5: a new core migration
15
+ -- numbered above LEGACY_BARE_CORE_MAX=187 must be core_-prefixed, else the
16
+ -- fitness namespacing check reds the build).
17
+ --
18
+ -- PURELY ADDITIVE + idempotent: the new column defaults 'public' so every
19
+ -- existing goal keeps today's behaviour, and the new table/indexes are IF NOT
20
+ -- EXISTS. Fresh-DB-replay safe; no hard-coded builder ids (learning 1238).
21
+ -- migrate.sh records this file's stem in schema_migrations (the modern 187
22
+ -- pattern — the file does not self-insert).
23
+
24
+ BEGIN;
25
+
26
+ -- 1. Goal privacy. Default 'public' = today's open-join semantics, unchanged.
27
+ ALTER TABLE goals
28
+ ADD COLUMN IF NOT EXISTS visibility text NOT NULL DEFAULT 'public'
29
+ CHECK (visibility IN ('public', 'private'));
30
+
31
+ -- 2. The membership-request queue — one row per pending (or resolved) ask, in
32
+ -- EITHER direction:
33
+ -- kind='invite' — a goal owner/manager asked builder_id to join; the
34
+ -- invitee accepts/declines it from their inbox.
35
+ -- kind='request' — builder_id asked to join a (private) goal; an
36
+ -- owner/manager/Archon approves/denies it.
37
+ -- created_by is who OPENED the row (the manager for an invite; the builder
38
+ -- themselves for a request); resolved_by is who closed it. Terminal states:
39
+ -- 'accepted' (→ membership added), 'rejected' (declined/denied),
40
+ -- 'cancelled' (withdrawn/rescinded by the opener).
41
+ CREATE TABLE IF NOT EXISTS goal_membership_requests (
42
+ id bigserial PRIMARY KEY,
43
+ goal_id bigint NOT NULL REFERENCES goals(id) ON DELETE CASCADE,
44
+ builder_id bigint NOT NULL REFERENCES builders(id) ON DELETE CASCADE,
45
+ kind text NOT NULL CHECK (kind IN ('invite', 'request')),
46
+ status text NOT NULL DEFAULT 'pending'
47
+ CHECK (status IN ('pending', 'accepted', 'rejected', 'cancelled')),
48
+ note text,
49
+ created_by bigint REFERENCES builders(id),
50
+ resolved_by bigint REFERENCES builders(id),
51
+ created_at timestamptz NOT NULL DEFAULT now(),
52
+ resolved_at timestamptz,
53
+ updated_at timestamptz NOT NULL DEFAULT now()
54
+ );
55
+
56
+ -- At most ONE pending ask per (goal, builder): an invite and a request can't
57
+ -- both be open for the same person on the same goal, and neither can pile up
58
+ -- duplicates (the access_requests partial-unique precedent). Resolved rows stay
59
+ -- as the audit trail and never block a later re-ask.
60
+ CREATE UNIQUE INDEX IF NOT EXISTS uniq_goal_membership_requests_pending
61
+ ON goal_membership_requests (goal_id, builder_id)
62
+ WHERE status = 'pending';
63
+
64
+ -- Inbox reads: "my pending invites/requests" (builder_id) and "this goal's
65
+ -- pending queue" (goal_id, status).
66
+ CREATE INDEX IF NOT EXISTS idx_goal_membership_requests_builder
67
+ ON goal_membership_requests (builder_id, status);
68
+ CREATE INDEX IF NOT EXISTS idx_goal_membership_requests_goal
69
+ ON goal_membership_requests (goal_id, status);
70
+
71
+ COMMIT;