@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,38 @@
1
+ -- migration 090: box-scoped dev-box sessions (task 919, security_reports SR#2 + SR#11)
2
+ --
3
+ -- The dev-box provisioner (scripts/gds/box.js) bakes a GDS session into cloud-init
4
+ -- so box-source-fetch can clone the rank-scoped repo on first boot (#818). Until
5
+ -- now that baked token was source='cli' — a FULL-authority builder session (it can
6
+ -- claim/grade/ship/hit every requireBuilder route). source was purely informational;
7
+ -- no scope gate existed. SR#2 (HIGH): any on-box process or the metadata endpoint
8
+ -- could read it and act as the full builder, breaking the ADR 0016 trust boundary
9
+ -- (the box is OUTSIDE it).
10
+ --
11
+ -- Fix: a third session source, 'box'. auth.requireBuilder denies a 'box' session on
12
+ -- every route EXCEPT the handful the on-box crons need (allow-listed via
13
+ -- auth.allowBoxScope), so a leaked box credential can do nothing but bootstrap.
14
+ --
15
+ -- 1) Widen the source CHECK to admit 'box'. The constraint was created inline in
16
+ -- migration 003 (builder_sessions.source CHECK (source IN ('cli','web'))), so
17
+ -- Postgres auto-named it builder_sessions_source_check. Drop-if-exists keeps this
18
+ -- idempotent across environments where the name might differ.
19
+ ALTER TABLE builder_sessions
20
+ DROP CONSTRAINT IF EXISTS builder_sessions_source_check;
21
+ ALTER TABLE builder_sessions
22
+ ADD CONSTRAINT builder_sessions_source_check CHECK (source IN ('cli', 'web', 'box'));
23
+
24
+ -- 2) Retroactively scope sessions already baked onto LIVE boxes. box.js stamps the
25
+ -- baked session with user_agent='box-provision' (and only that path does), so
26
+ -- this targets exactly those tokens and downgrades them to box scope in place.
27
+ -- Safe: a running box only ever calls the 4 allow-listed bootstrap endpoints, and
28
+ -- a builder who re-authed ON the box (interactive /builder-reauth) holds a
29
+ -- SEPARATE cli/web session with a different user_agent, untouched here.
30
+ UPDATE builder_sessions
31
+ SET source = 'box'
32
+ WHERE source = 'cli'
33
+ AND user_agent = 'box-provision'
34
+ AND revoked_at IS NULL;
35
+
36
+ -- Counter hygiene: keep the migration-number allocator above this file so the next
37
+ -- reservation can't collide with 090 (per the planning-session learning).
38
+ UPDATE migration_counter SET next_number = GREATEST(next_number, 91) WHERE id = 1;
@@ -0,0 +1,44 @@
1
+ -- 091_session_token_reward.sql
2
+ -- Task 1005 — flat cost-plus SESSION TOKEN REWARD (ADR 0054).
3
+ --
4
+ -- A builder now earns drachmae for a SHIPPED session proportional to its true
5
+ -- API token cost: drachmae = round(true_cost_usd * (1 + REWARD_MARGIN_PCT/100) * 100),
6
+ -- i.e. cost-plus-20%, denominated in integer cents. Computed SERVER-SIDE from
7
+ -- uploaded per-model token counts (never a client dollar figure). Idempotent
8
+ -- per session_id, append-only, reversible.
9
+ --
10
+ -- Three additive, nullable/defaulted changes — no backfill of historical rows,
11
+ -- no destructive edits. Forward-looking only.
12
+
13
+ -- (a) Per-model token usage rides as jsonb on the session record. ship.js
14
+ -- accumulates it from the same transcript usage it already parses; promoting
15
+ -- it to a first-class column (vs burying it in the free-form metrics blob)
16
+ -- makes the reward auditable + re-computable without parsing a blob. Shape:
17
+ -- { "<model-id>": { input, output, cache_read, cache_creation } }
18
+ ALTER TABLE session_records
19
+ ADD COLUMN IF NOT EXISTS model_usage jsonb NOT NULL DEFAULT '{}'::jsonb;
20
+
21
+ -- (b) The token-reward drachmae actually granted for this session, mirrored here
22
+ -- for audit/reversibility. Authoritative payout is still the credit_log row;
23
+ -- this is an observability mirror (like drachmae_earned mirrors task credits).
24
+ ALTER TABLE session_records
25
+ ADD COLUMN IF NOT EXISTS token_reward_drachmae integer NOT NULL DEFAULT 0;
26
+
27
+ -- (c) credit_log idempotency for the session token reward. credit_log has no
28
+ -- unique constraint anywhere today. We add a nullable session_id column + a
29
+ -- PARTIAL unique index scoped to the new reason. Existing rows keep
30
+ -- session_id = NULL and are unaffected (the partial index only covers rows
31
+ -- whose reason = 'session.token_reward'). This is the hard DB-level backstop
32
+ -- against a double payout when two ship uploads of the same session race.
33
+ ALTER TABLE credit_log
34
+ ADD COLUMN IF NOT EXISTS session_id text;
35
+
36
+ CREATE UNIQUE INDEX IF NOT EXISTS uniq_credit_session_token_reward
37
+ ON credit_log (session_id)
38
+ WHERE reason = 'session.token_reward';
39
+
40
+ -- Counter hygiene: this migration was hand-authored (not handed out by the
41
+ -- claim-time allocator), so advance the allocator floor past 090 with GREATEST
42
+ -- (never a bare assignment) so a parallel claim can't reuse this number and a
43
+ -- concurrently-advanced counter is never rewound. (See 081 tail for the rule.)
44
+ UPDATE migration_counter SET next_number = GREATEST(next_number, 92) WHERE id = 1;
@@ -0,0 +1,22 @@
1
+ -- migrations/093_tasks_sandbox_review.sql
2
+ -- Task #1048 (GDS-V4) — record the builder's sandbox self-approval as a durable
3
+ -- fact on the task. ADR 0046 follow-up.
4
+ --
5
+ -- The sandbox-first review gate (#927, ADR 0046) previously recorded the
6
+ -- "reviewed on the sandbox and approved" decision ONLY in an ephemeral temp-dir
7
+ -- marker (otb-sandbox-staged.json) that vanished after the ship — nothing
8
+ -- durable said this exact game build was reviewed and signed off. Lars's
9
+ -- 2026-06-13 directive: that approval must be recorded. We persist it as a small
10
+ -- JSONB blob on the task, written by db.resolveClaim from the value ship.js
11
+ -- threads through POST /claims/:id/resolve.
12
+ --
13
+ -- Shape (server stamps `by`/`at` authoritatively; the rest is client-supplied):
14
+ -- { "by": "<github_login>", "at": "<iso8601>", "stamp": "<sha256>",
15
+ -- "url": "https://sandbox-<login>.amazonprimea.com", "method": "tty"|"flag" }
16
+ -- NULL = no sandbox review recorded for this task (laptop ship, non-game diff,
17
+ -- quick-tunnel box, --skip-stage, or a fresh-marker re-run without --approved).
18
+ --
19
+ -- Idempotent + re-runnable.
20
+
21
+ ALTER TABLE tasks
22
+ ADD COLUMN IF NOT EXISTS sandbox_review jsonb;
@@ -0,0 +1,58 @@
1
+ -- 102_remove_box_first_provision_approval.sql — ADR 0059 (task 1141): REMOVE the
2
+ -- dev-box "first-box Archon approval" gate. Reverts migration 071.
3
+ --
4
+ -- Context
5
+ -- -------
6
+ -- Migration 071 (#717, ADR 0035 Decision 2) added a 'pending_approval' state to
7
+ -- box_intents so a newcomer's FIRST paid droplet was held until an Archon ran
8
+ -- POST /box/intents/:id/approve. That double-gated admission: a builder already
9
+ -- had to be admitted to the project (the invite/member-join gate) before they
10
+ -- could ever reach /box/ensure, and then their first box was gated AGAIN.
11
+ --
12
+ -- ADR 0059 / task 1141 collapses this to a single approval — the member-join
13
+ -- (invite) admission gate — and lets an admitted builder's first box auto-drain
14
+ -- like every subsequent provision and every wake. The web tier still only RECORDS
15
+ -- A REQUEST and never holds DO_API_TOKEN (the migration-070 invariant is
16
+ -- unchanged); the box lifecycle stays operator/control-plane only. This migration
17
+ -- only removes the SECOND, redundant gate on box provisioning. The member-join /
18
+ -- access-request admission flow is untouched.
19
+ --
20
+ -- This file reverts migration 071 back to the migration-070 schema: it drains any
21
+ -- held first-box requests, removes 'pending_approval' from the state CHECK, restores
22
+ -- the migration-070 partial unique index, and drops the approval audit columns.
23
+ --
24
+ -- Do NOT edit migration 071 itself — it already ran on prod; this forward migration
25
+ -- undoes its effects.
26
+ --
27
+ -- Idempotent: safe to re-run.
28
+
29
+ -- Step 1 — drain held requests FIRST, before the tightened CHECK is re-added, so no
30
+ -- live row violates the constraint. A 'pending_approval' row was a first-box request
31
+ -- waiting on an Archon; with the gate gone, it simply becomes a normal 'pending'
32
+ -- request the control-plane runner will auto-drain.
33
+ UPDATE box_intents
34
+ SET state = 'pending', updated_at = now()
35
+ WHERE state = 'pending_approval';
36
+
37
+ -- Step 2 — restore the migration-070 state CHECK (drop 'pending_approval'). Postgres
38
+ -- has no ALTER ... DROP VALUE for a CHECK, so drop + re-add. Same constraint name
39
+ -- migration 071 used.
40
+ ALTER TABLE box_intents DROP CONSTRAINT IF EXISTS box_intents_state_check;
41
+ ALTER TABLE box_intents ADD CONSTRAINT box_intents_state_check
42
+ CHECK (state IN ('pending', 'running', 'done', 'error'));
43
+
44
+ -- Step 3 — restore the migration-070 partial unique index (one open intent per
45
+ -- builder), dropping 'pending_approval' from the open set. After step 1 no held rows
46
+ -- remain, so the open set is again {pending, running}.
47
+ DROP INDEX IF EXISTS ux_box_intents_open;
48
+ CREATE UNIQUE INDEX IF NOT EXISTS ux_box_intents_open
49
+ ON box_intents (builder_id)
50
+ WHERE state IN ('pending', 'running');
51
+
52
+ -- Step 4 — drop the approval audit columns migration 071 added. With the gate gone
53
+ -- there is nothing to attribute.
54
+ ALTER TABLE box_intents DROP COLUMN IF EXISTS approved_by;
55
+ ALTER TABLE box_intents DROP COLUMN IF EXISTS approved_at;
56
+
57
+ INSERT INTO schema_migrations (version) VALUES ('102_remove_box_first_provision_approval')
58
+ ON CONFLICT (version) DO NOTHING;
@@ -0,0 +1,90 @@
1
+ -- migration 103: search_chunks — the lexical retrieval substrate (task 944, V4.R06)
2
+ --
3
+ -- Implements ADR 0060 §2 (GDS retrieval layer: Postgres-resident, lexical-first,
4
+ -- rank-scoped, fail-open). One table in the EXISTING GDS Postgres holds every
5
+ -- searchable chunk (markdown docs + DB prose); full-text (tsvector) and trigram
6
+ -- (pg_trgm) match run as SQL against it, fused with RRF in the search route
7
+ -- (#949). No new service, no new monthly cost (CLAUDE.md §4).
8
+ --
9
+ -- SCOPING IS A FIRST-CLASS COLUMN, NOT A LATER FILTER (ADR 0060 §6 / ADR 0016):
10
+ -- * min_rank — the LOWEST builder rank that may see this chunk. The
11
+ -- search route filters in the SQL WHERE clause against the
12
+ -- caller's LIVE, server-resolved rank, so a sub-Metic query
13
+ -- can never select a Metic+ chunk in the first place. This
14
+ -- keeps the index from becoming a read-side bypass of the
15
+ -- trust boundary (the exact failure mode ADR 0016 guards).
16
+ -- * owner_builder_id — non-null ⟺ a per-builder PRIVATE chunk (e.g. a builder's
17
+ -- own memory). Returned ONLY to that owner (the route adds
18
+ -- `owner_builder_id IS NULL OR owner_builder_id = <session>`),
19
+ -- the owner always taken from the authenticated session,
20
+ -- never from input — same posture as src/bongos/routes/memory.js.
21
+ --
22
+ -- The isolation suite (#950, tests/search_isolation.mjs) is the regression guard
23
+ -- that both filters live in SQL and can't be dropped by a later refactor.
24
+
25
+ -- pg_trgm ships with standard Postgres contrib (no new package); enables the
26
+ -- trigram fuzzy-match leg (similarity / % operator + a GIN gin_trgm_ops index).
27
+ CREATE EXTENSION IF NOT EXISTS pg_trgm;
28
+
29
+ CREATE TABLE IF NOT EXISTS search_chunks (
30
+ id bigserial PRIMARY KEY,
31
+ -- 'doc' = a chunk of a repo markdown file; 'db' = a chunk of DB prose
32
+ -- (task description/value summary, learning, session-log summary, etc.).
33
+ source_kind text NOT NULL CHECK (source_kind IN ('doc', 'db')),
34
+ -- The source identity: a repo-relative path ('docs/adr/0016-....md') for docs,
35
+ -- or a typed ref ('task:431', 'learning:53') for DB prose. Together with
36
+ -- chunk_index it uniquely names a chunk, so re-ingest is an idempotent upsert.
37
+ source_ref text NOT NULL,
38
+ chunk_index int NOT NULL,
39
+ -- Breadcrumb to the chunk's section, e.g. 'CLAUDE.md > §8 Versioning > Working
40
+ -- rules'. Carried so a result is self-locating and the snippet has context.
41
+ heading_path text,
42
+ -- The source's human title, for result display.
43
+ title text,
44
+ -- The chunk text — what gets shown as a snippet and (with title + heading_path)
45
+ -- indexed into tsv.
46
+ body text NOT NULL,
47
+ -- Scoping (see header). Default 'xenos' = visible to everyone (the common case
48
+ -- for ordinary docs); permission-core docs are ingested at 'metic'.
49
+ min_rank text NOT NULL DEFAULT 'xenos'
50
+ CHECK (min_rank IN ('xenos', 'thetes', 'metic', 'archon')),
51
+ -- Per-builder private chunk owner (NULL = shared/non-private). ON DELETE CASCADE:
52
+ -- a private chunk has no meaning once its owner is gone (mirrors builder_memory).
53
+ owner_builder_id bigint REFERENCES builders(id) ON DELETE CASCADE,
54
+ -- sha256 of body — the ingestion delta key (skip re-write when unchanged).
55
+ content_hash text NOT NULL,
56
+ -- Generated FTS vector over title (weight A) + heading_path (B) + body (C), so
57
+ -- ts_rank_cd weights a title/heading hit above a body hit. Uses the 2-arg
58
+ -- to_tsvector('english', ...) form — IMMUTABLE, as a generated column requires
59
+ -- (the 1-arg form depends on default_text_search_config and is NOT immutable).
60
+ tsv tsvector GENERATED ALWAYS AS (
61
+ setweight(to_tsvector('english', coalesce(title, '')), 'A') ||
62
+ setweight(to_tsvector('english', coalesce(heading_path, '')), 'B') ||
63
+ setweight(to_tsvector('english', body), 'C')
64
+ ) STORED,
65
+ created_at timestamptz NOT NULL DEFAULT now(),
66
+ updated_at timestamptz NOT NULL DEFAULT now(),
67
+ -- One row per (source, chunk ordinal) → re-ingest is ON CONFLICT upsert.
68
+ UNIQUE (source_kind, source_ref, chunk_index)
69
+ );
70
+
71
+ -- FTS leg: GIN over the generated tsvector.
72
+ CREATE INDEX IF NOT EXISTS idx_search_chunks_tsv
73
+ ON search_chunks USING gin (tsv);
74
+
75
+ -- Trigram leg: GIN gin_trgm_ops over body for similarity() / % fuzzy match.
76
+ CREATE INDEX IF NOT EXISTS idx_search_chunks_body_trgm
77
+ ON search_chunks USING gin (body gin_trgm_ops);
78
+
79
+ -- Idempotent re-ingest + delete-by-source (the ingesters key on this).
80
+ CREATE INDEX IF NOT EXISTS idx_search_chunks_source
81
+ ON search_chunks (source_kind, source_ref);
82
+
83
+ -- Owner-scoped lookups (a builder's own private chunks). Partial — most chunks
84
+ -- are shared (owner NULL), so only index the private ones.
85
+ CREATE INDEX IF NOT EXISTS idx_search_chunks_owner
86
+ ON search_chunks (owner_builder_id) WHERE owner_builder_id IS NOT NULL;
87
+
88
+ -- Counter hygiene: keep the migration-number allocator above this file so the
89
+ -- next reservation can't collide with 103 (per the planning-session learning).
90
+ UPDATE migration_counter SET next_number = GREATEST(next_number, 104) WHERE id = 1;
@@ -0,0 +1,34 @@
1
+ -- migration 104: per-builder dev-box provisioning block (task 1163, idea 257)
2
+ --
3
+ -- Idea 257 ("Dev Box management"): an Archon needs to bar a specific builder
4
+ -- from opening dev boxes (abuse, runaway cost, a departed teammate). This adds
5
+ -- the block flag + a small audit trail to `builders`, parallel to the budget
6
+ -- ceiling (migration 089).
7
+ --
8
+ -- It is a builder-LEVEL capability flag, NOT a per-box row, deliberately:
9
+ -- * it must apply BEFORE the builder ever has a builder_boxes row (block a
10
+ -- newcomer pre-emptively), and
11
+ -- * it must SURVIVE box teardown (a destroyed box leaves a state='destroyed'
12
+ -- row; the block must outlive it), so it cannot hang off builder_boxes.
13
+ --
14
+ -- Enforced server-side in boxes.decideEnsureAction / POST /box/ensure
15
+ -- (BOX_PROVISION_BLOCKED, fail-closed) — the block bars the "open" actions
16
+ -- (provision a new box, wake a parked one) but does NOT by itself tear down a
17
+ -- box that is already running (that stays the Archon's explicit, separate
18
+ -- choice). The markdown/UI only describes this; the server is the authority
19
+ -- (ADR 0016 trust boundary). Toggled by PATCH /boxes/:builderId/block (archon);
20
+ -- the same call can optionally also enqueue a deprovision intent ("close the
21
+ -- box they have running too").
22
+
23
+ ALTER TABLE builders
24
+ ADD COLUMN IF NOT EXISTS box_blocked boolean NOT NULL DEFAULT false,
25
+ ADD COLUMN IF NOT EXISTS box_blocked_reason text,
26
+ ADD COLUMN IF NOT EXISTS box_blocked_at timestamptz,
27
+ ADD COLUMN IF NOT EXISTS box_blocked_by bigint REFERENCES builders(id);
28
+
29
+ -- Counter hygiene: keep the migration-number allocator above this file so the
30
+ -- next reservation can't collide with 104 (mirrors migration 089's tail).
31
+ UPDATE migration_counter SET next_number = GREATEST(next_number, 105) WHERE id = 1;
32
+
33
+ INSERT INTO schema_migrations (version) VALUES ('104_builder_box_blocked')
34
+ ON CONFLICT DO NOTHING;
@@ -0,0 +1,35 @@
1
+ -- 105_box_host_keys.sql — task 1187 (idea 235): authoritative box SSH host keys.
2
+ --
3
+ -- Why
4
+ -- ---
5
+ -- A re-provision is a FRESH droplet with brand-new /etc/ssh/ssh_host_* keys.
6
+ -- ssh_deletekeys:false (task 1040) only preserves them across park->wake (the
7
+ -- snapshot restores the disk); the idle-reaper DEPROVISIONS (destroys droplet +
8
+ -- snapshot), so the key changes on every reap->reprovision cycle — now routine.
9
+ -- The laptop/Desktop SSH path then throws "Host denied (verification failed)"
10
+ -- because known_hosts still pins the old box's key. Today's only recovery is TOFU
11
+ -- accept-new (which REJECTS a changed key) or the OTB Dev Box app's ssh-keyscan
12
+ -- re-pin (TOFU + racey — the 925/926 ed25519 partial-scan flakiness).
13
+ --
14
+ -- Fix: the box reports its own PUBLIC host keys UP to the GDS at provision (the
15
+ -- same report-up / serve-to-owner shape as the terminal_* columns in migration
16
+ -- 073), and the connect path WRITES known_hosts from this authoritative value —
17
+ -- no TOFU, no keyscan race. `host_keys` is newline-joined bare `<keytype> <base64>`
18
+ -- pairs (NO hostname prefix — the consumer prepends the host it dials).
19
+ --
20
+ -- PUBLIC KEYS ONLY. The box reporter reads only *.pub files; the PRIVATE half is
21
+ -- NEVER stored here. A host's public key is non-secret and is served to the box's
22
+ -- own builder via GET /box/me (no new read route, no allowBoxScope read surface).
23
+ --
24
+ -- Staleness model (same as 073): WRITTEN only when state='active'
25
+ -- (boxes.setBoxHostKeys gates on it); the value persists across park/wake (the
26
+ -- host identity survives a snapshot wake) and is replaced wholesale by the next
27
+ -- report after a re-provision. No NULL-clear on park.
28
+ --
29
+ -- Idempotent: safe to re-run.
30
+
31
+ ALTER TABLE builder_boxes ADD COLUMN IF NOT EXISTS host_keys text;
32
+ ALTER TABLE builder_boxes ADD COLUMN IF NOT EXISTS host_keys_at timestamptz;
33
+
34
+ INSERT INTO schema_migrations (version) VALUES ('105_box_host_keys')
35
+ ON CONFLICT (version) DO NOTHING;
@@ -0,0 +1,35 @@
1
+ -- GDS-V4 Medusa — customer-0 framing + vanilla brand pack (2026-06-17)
2
+ -- Applied under claim 985 (task 1215). Idempotent on re-run.
3
+ --
4
+ -- Refines the Medusa model from the planning session: Medusa runs on its own
5
+ -- plain "vanilla" brand as CUSTOMER 0 and builds itself (the GDS builds itself);
6
+ -- Amazonprimea is CUSTOMER 1. Adds the vanilla-brand-pack task (R74) via
7
+ -- scripts/gds/seed-medusa-tasks.js (re-run after this migration).
8
+ --
9
+ -- What this migration does:
10
+ -- 1. Updates the C8 (medusa-standalone-instance) criterion_md to the
11
+ -- customer-0 / customer-1 framing.
12
+ -- 2. Updates the R67 dogfood proof task description to "Medusa builds itself
13
+ -- as customer 0" (matched by source_ref; idempotent).
14
+
15
+ BEGIN;
16
+
17
+ -- 1. C8 criterion text → customer-0 / customer-1 framing.
18
+ UPDATE done_when_criteria
19
+ SET criterion_md = '**Medusa runs as a configurable, self-hostable, branded instance — Medusa itself is customer 0, Amazonprimea is customer 1.** The build system is no longer a fixture of the game: it boots with no game code in the process, runs on its own database, and takes its identity, branding, and feature selection from per-instance config. Medusa runs on its own plain "vanilla" brand as **customer 0** and builds itself (the GDS builds itself); **Amazonprimea is customer 1**, its surfaces (status/builders) unchanged because their look now comes from config rather than hard-coding. Done when: a Medusa-only entrypoint boots with no Colyseus/Phaser/game routes; a fresh instance''s database holds only build-system tables (game tables only when the game module is enabled); one command (docker compose) stands an instance up with zero hard-coded server IP / service name / deploy script; product name, domain, sign-in origin, repo binding, currency label and the full branding pack resolve from one config (the Medusa vanilla brand is customer 0''s pack; an owner''s own LLM fills a new customer''s pack); the first admin is set at install time, not in a migration; core carries no hard-coded project branding (the deploy-time diagram generator reads instance branding too; Greek rank names stay by decision); an instance turns feature modules (game, art pipeline, Discord, dev boxes) on/off; an instance declares its core version and `medusa upgrade` applies new migrations + code while preserving instance config; and Medusa builds itself as customer 0 on the vanilla brand, taking a task claim->grade->ship end-to-end. Live Amazonprimea (customer 1) is unaffected throughout.'
20
+ WHERE version_id = 'GDS-V4' AND criterion_id = 'medusa-standalone-instance';
21
+
22
+ -- 2. R67 dogfood proof → customer-0 self-build framing.
23
+ UPDATE tasks
24
+ SET description = 'Part of Medusa (C8) — the proof-task that satisfies C8 ("the GDS builds itself"). Customer 0 = Medusa itself, running on the vanilla brand pack (R74); customer 1 = Amazonprimea.
25
+
26
+ Stand Medusa up as customer 0 (its own database, vanilla brand, no game code) and take one real task through the full lifecycle on it: claim -> grade -> merge -> ship with credits awarded. Medusa building Medusa, on Medusa. (A separate non-game third project is an acceptable alternative proof, but customer-0 self-build is the truest.)
27
+
28
+ **Done when:** a task reaches ''shipped'' with credits on the customer-0 Medusa instance carrying zero game code; documented as the C8 acceptance.'
29
+ WHERE source_ref = 'gds-v4-r67';
30
+
31
+ -- Self-register so migrate.sh skips this hot-applied file on the next deploy.
32
+ INSERT INTO schema_migrations (version) VALUES ('111_medusa_customer0_framing')
33
+ ON CONFLICT DO NOTHING;
34
+
35
+ COMMIT;
@@ -0,0 +1,25 @@
1
+ -- Migration 112 — drop the product|internal track CHECK on versions (ADR 0062 §3/§5, task 1191).
2
+ --
3
+ -- The track taxonomy is now INSTANCE CONFIG (config/branding.json "tracks"), validated in the API
4
+ -- (src/bongos/routes/tasks.js validTracks()), not a hardcoded 2-value DB constraint. The column stays
5
+ -- NOT NULL — a version still HAS a track — but any value the instance configures is allowed.
6
+ --
7
+ -- Live prod unaffected: existing 'product'/'internal' rows stay valid; this only LOOSENS. The drop
8
+ -- is name-independent (finds the track CHECK by its definition) so it works regardless of the
9
+ -- auto-generated constraint name, and is a no-op if it was already dropped.
10
+
11
+ DO $$
12
+ DECLARE r record;
13
+ BEGIN
14
+ FOR r IN
15
+ SELECT conname
16
+ FROM pg_constraint
17
+ WHERE conrelid = 'versions'::regclass
18
+ AND contype = 'c'
19
+ AND pg_get_constraintdef(oid) ILIKE '%track%'
20
+ LOOP
21
+ EXECUTE format('ALTER TABLE versions DROP CONSTRAINT %I', r.conname);
22
+ END LOOP;
23
+ END $$;
24
+
25
+ INSERT INTO schema_migrations (version) VALUES ('112_drop_track_check') ON CONFLICT DO NOTHING;
@@ -0,0 +1,16 @@
1
+ -- Migration 113 — server-side merge lease (task 585 / idea 124).
2
+ --
3
+ -- A TTL'd advisory lease keyed on the merge target ("main"), so builders shipping from DIFFERENT
4
+ -- physical machines serialize their main-mutating merges. merge-lock.js handles the intra-machine
5
+ -- (single-checkout) case with a filesystem lock; this is the cross-machine counterpart, handed out
6
+ -- by the GDS API (src/bongos/db.js acquireMergeLease/releaseMergeLease). A dead holder's lease is
7
+ -- reclaimed automatically once expires_at passes — no reaper needed. Single-row-per-key table.
8
+
9
+ CREATE TABLE IF NOT EXISTS merge_lease (
10
+ key text PRIMARY KEY,
11
+ holder text NOT NULL,
12
+ acquired_at timestamptz NOT NULL DEFAULT now(),
13
+ expires_at timestamptz NOT NULL
14
+ );
15
+
16
+ INSERT INTO schema_migrations (version) VALUES ('113_merge_lease') ON CONFLICT DO NOTHING;
@@ -0,0 +1,32 @@
1
+ -- 114 — Cloud Bongos rename: rewrite live user-facing DB strings (2026-06-19, task 1244 / ADR 0064).
2
+ --
3
+ -- The platform was renamed Medusa -> Cloud Bongos (task 1242 / ADR 0064). Migration 111 had baked
4
+ -- "Medusa" into LIVE rows the API still serves (/status, the builders' hall, /recall): the GDS-V4
5
+ -- C8 + C9 done-when criteria and the R67 dogfood-proof task. Per owner directive (2026-06-19) those
6
+ -- live strings are rewritten forward here. Display text ONLY — never the criterion_id keys
7
+ -- (medusa-standalone-instance / medusa-open-and-protected, referenced by task_criteria + code) and
8
+ -- never schema_migrations version strings. Editing 110/111 directly would break idempotency.
9
+ --
10
+ -- Case-sensitive REPLACE on 'Medusa' (the platform name) leaves lowercase filenames/keys
11
+ -- (seed-medusa-tasks.js, medusa-*) untouched; the CLI 'medusa upgrade' becomes 'cloudbongos upgrade'.
12
+ -- Idempotent: REPLACE over already-rewritten text is a no-op. The other 23 R50-R74 task
13
+ -- descriptions are deliberately KEPT as history (owner "history preserved" choice).
14
+
15
+ BEGIN;
16
+
17
+ -- C8 + C9 done-when criteria — display text only (criterion_id keys stay).
18
+ UPDATE done_when_criteria
19
+ SET criterion_md = REPLACE(REPLACE(criterion_md, 'Medusa', 'Cloud Bongos'), 'medusa upgrade', 'cloudbongos upgrade')
20
+ WHERE version_id = 'GDS-V4'
21
+ AND criterion_id IN ('medusa-standalone-instance', 'medusa-open-and-protected');
22
+
23
+ -- R67 dogfood-proof task (the owner-flagged live string) — title + description.
24
+ UPDATE tasks
25
+ SET title = REPLACE(title, 'Medusa', 'Cloud Bongos'),
26
+ description = REPLACE(REPLACE(description, 'Medusa', 'Cloud Bongos'), 'medusa upgrade', 'cloudbongos upgrade')
27
+ WHERE source_ref = 'gds-v4-r67';
28
+
29
+ INSERT INTO schema_migrations (version) VALUES ('114_cloudbongos_rename_live_strings')
30
+ ON CONFLICT DO NOTHING;
31
+
32
+ COMMIT;
@@ -0,0 +1,23 @@
1
+ -- Migration 118 — document that the currency COLUMN NAMES are decoupled from the
2
+ -- configurable display LABEL (R56 / task 1195, ADR 0062 §3).
3
+ --
4
+ -- R56 makes the reward unit's *display label* instance config (branding.currency.label;
5
+ -- OTB = "drachmae", the neutral starter = "credits"), resolved at render time. The DB
6
+ -- COLUMN NAMES below keep the historical "drachmae" stem ON PURPOSE — they are fixed
7
+ -- schema identifiers, NOT user-facing copy. Renaming them would churn every query +
8
+ -- the wire field names the front-end reads, and — for token_reward_drachmae — risks
9
+ -- disturbing the migration-091 idempotency key (credit_log uniqueness on
10
+ -- reason='session.token_reward'). The cost-plus reward MATH is unchanged by R56.
11
+ --
12
+ -- These COMMENTs are the durable signpost so a future builder doesn't "tidy" the
13
+ -- column names to match a re-branded label and break the ledger. Metadata-only +
14
+ -- idempotent (COMMENT ON overwrites); changes no data and no behaviour.
15
+
16
+ COMMENT ON COLUMN session_records.drachmae_earned IS
17
+ 'Reward earned for the session, in the instance reward unit. FIXED identifier — the user-facing unit LABEL is config (branding.currency.label, R56/task 1195); do not rename to match a re-branded label.';
18
+
19
+ COMMENT ON COLUMN session_records.token_reward_drachmae IS
20
+ 'Per-session token reward (cost-plus, ADR 0054), in the instance reward unit. FIXED identifier — display label is config (R56). Do NOT rename: the migration-091 idempotency key (credit_log reason=''session.token_reward'') and the reward math depend on this column.';
21
+
22
+ COMMENT ON COLUMN vulnerability_reports.drachmae_awarded IS
23
+ 'Bounty paid for a confirmed report, in the instance reward unit. FIXED identifier — the user-facing unit LABEL is config (branding.currency.label, R56/task 1195); do not rename to match a re-branded label.';
@@ -0,0 +1,31 @@
1
+ -- 119_builder_behavior_prefs.sql — per-builder agent-behavior preferences,
2
+ -- starting with the "wandering" knob (task 1268).
3
+ --
4
+ -- One jsonb column on `builders` (behavior_prefs), default '{}'. It holds
5
+ -- reserved keys for per-builder behavior tuning; the first is 'wandering' — an
6
+ -- integer level 0..3 (Locked | Focused | Balanced | Exploratory) controlling how
7
+ -- readily an agent opens a NEW THREAD of work (a tangent, an investigation, an
8
+ -- unsolicited suggestion) vs. staying on its claimed task. A MISSING key falls
9
+ -- back to the rank-derived default resolved in src/bongos/wandering-prefs.js
10
+ -- (Xenos→Locked … Archon→Exploratory), so the column stays sparse: a builder
11
+ -- who never touches the setting has '{}' and behaves at their rank's default.
12
+ --
13
+ -- This deliberately mirrors migration 037 (skill_model_prefs) and 075
14
+ -- (sound_prefs): per-builder personalized config, sparse + irregular, read by
15
+ -- primary key, with the allowlist + defaults + the rank clamp living in code
16
+ -- (src/bongos/wandering-prefs.js) rather than a Postgres CHECK — so adding a new
17
+ -- behavior knob (or a new level) is a one-line code change, not a coordinated
18
+ -- schema migration. behavior_prefs is the blob; 'wandering' is one reserved key.
19
+ --
20
+ -- Enforcement note: the stored value is the builder's DESIRED level; the
21
+ -- effective level is clamp(override, 0, maxForRank) computed server-side on
22
+ -- every read (wandering-prefs.effectiveLevel). A Xenos who stores Exploratory is
23
+ -- still resolved to Locked — so opening this up for self-service later is safe.
24
+ --
25
+ -- Idempotent: safe to re-run.
26
+
27
+ ALTER TABLE builders
28
+ ADD COLUMN IF NOT EXISTS behavior_prefs jsonb NOT NULL DEFAULT '{}'::jsonb;
29
+
30
+ INSERT INTO schema_migrations (version) VALUES ('119_builder_behavior_prefs')
31
+ ON CONFLICT (version) DO NOTHING;
@@ -0,0 +1,37 @@
1
+ -- 121_box_code_version.sql — dev-box code-version reporting (idea 332, task 1316).
2
+ --
3
+ -- Why
4
+ -- ---
5
+ -- Boxes already auto-update: infra/box-source-fetch.sh (cron */10) `git pull
6
+ -- --ff-only`s /workspace and self-updates its own baked scripts/crons (#985). But
7
+ -- two failure modes leave a box silently STALE with no visibility:
8
+ -- 1. A box provisioned BEFORE that machinery existed has no self-update cron, so
9
+ -- it can never pull the fix — only a rebuild helps (box-LarsCode, 2026-06-07).
10
+ -- 2. When `pull --ff-only` can't fast-forward, the script logs and leaves the
11
+ -- tree as-is — stale, silently.
12
+ -- A stale box then fails CRYPTICALLY (no shared art key delivered, host-key
13
+ -- reporter absent → connect fails) and the builder has no idea the cause is old
14
+ -- code. This adds the VISIBILITY layer — the box reports its HEAD commit so the
15
+ -- server can flag "running old code → rebuild." (We never auto-reset: that would
16
+ -- clobber a builder's uncommitted work — ADR 0072.)
17
+ --
18
+ -- Columns on builder_boxes (same report-up shape as host_keys, migration 105):
19
+ -- code_sha — the box's /workspace HEAD commit sha (40-hex), reported up.
20
+ -- code_committed_at — that commit's date (ISO), for the "how far behind"
21
+ -- comparison against the server's own deployed commit date
22
+ -- (src/build-info.js).
23
+ -- code_reported_at — when the box last reported; NULL on an active box past the
24
+ -- provision grace ⇒ the box is too old to even run the
25
+ -- reporter (a pre-machinery box) ⇒ stale.
26
+ --
27
+ -- Staleness is COMPUTED in code (boxes.computeCodeStaleness), not stored, so the
28
+ -- thresholds live with the logic + tests — nothing to migrate to tune them.
29
+ --
30
+ -- Idempotent: safe to re-run.
31
+
32
+ ALTER TABLE builder_boxes ADD COLUMN IF NOT EXISTS code_sha text;
33
+ ALTER TABLE builder_boxes ADD COLUMN IF NOT EXISTS code_committed_at timestamptz;
34
+ ALTER TABLE builder_boxes ADD COLUMN IF NOT EXISTS code_reported_at timestamptz;
35
+
36
+ INSERT INTO schema_migrations (version) VALUES ('121_box_code_version')
37
+ ON CONFLICT (version) DO NOTHING;
@@ -0,0 +1,30 @@
1
+ -- 122_builder_gemini_key.sql — per-builder Gemini key, encrypted at rest (task 1013).
2
+ --
3
+ -- Pragmatic BYOK (ADR 0073). The builder's own Google AI Studio (Gemini) key
4
+ -- moves from local-file-only (~/.config/otb/gds-session.json#gemini_api_key,
5
+ -- entered via the CLI) to a server-stored encrypted column that becomes the
6
+ -- source of truth — so a browser-first builder can enter it on the Settings page
7
+ -- and it syncs down to their box at session start (mirrors the shared-key rail).
8
+ --
9
+ -- Three columns on `builders`:
10
+ -- gemini_key_enc — the AES-256-GCM blob "v1.<iv>.<tag>.<ct>" (base64url
11
+ -- parts). NULL = no own key set. The plaintext NEVER lands
12
+ -- in the DB; the master key lives only in server env
13
+ -- (BUILDER_SECRET_KEY), so a DB dump alone cannot decrypt
14
+ -- (src/bongos/secret-box.js).
15
+ -- gemini_key_last4 — last 4 chars of the plaintext, for the masked "…ABCD"
16
+ -- display (like GitHub/Stripe). Not a secret.
17
+ -- gemini_key_set_at — when it was last set/replaced.
18
+ --
19
+ -- This mirrors the sparse per-builder column pattern (migrations 119, 075, 037):
20
+ -- behaviour lives in code (secret-box.js + builder-needs.js), not in a CHECK.
21
+ --
22
+ -- Idempotent: safe to re-run.
23
+
24
+ ALTER TABLE builders
25
+ ADD COLUMN IF NOT EXISTS gemini_key_enc text,
26
+ ADD COLUMN IF NOT EXISTS gemini_key_last4 text,
27
+ ADD COLUMN IF NOT EXISTS gemini_key_set_at timestamptz;
28
+
29
+ INSERT INTO schema_migrations (version) VALUES ('122_builder_gemini_key')
30
+ ON CONFLICT (version) DO NOTHING;
@@ -0,0 +1,33 @@
1
+ -- 123_cost_log_tiers.sql — per-tier USD breakdown on cost_log (GDS-V4 task 1344,
2
+ -- System 1: Cost Attribution & Savings Ledger).
3
+ --
4
+ -- priceUsage (src/bongos/llm-pricing.js, task 1343) already computes the per-tier
5
+ -- component split (fresh input / cache-read / cache-write / output) but the
6
+ -- ledger discarded it, lumping every call into a single amount_usd. The
7
+ -- marathon-session finding (~82% of spend is cache_read, re-billed every turn for
8
+ -- hours) stays an *inference* until that tier is a queryable column. These four
9
+ -- nullable columns persist the split so costSummary() can GROUP BY tier (task
10
+ -- 1345) and the audit can report the cache_read share (task 1346).
11
+ --
12
+ -- fresh_input_usd — uncached input tokens priced at the family input rate.
13
+ -- cache_read_usd — cache-read tokens (0.1× input). The marathon cost sink.
14
+ -- cache_write_usd — cache-creation tokens: the 5m + 1h tiers SUMMED into one
15
+ -- "what we paid to write cache" figure (priceUsage splits
16
+ -- them; the ledger does not need that granularity).
17
+ -- output_usd — output tokens.
18
+ --
19
+ -- All nullable: historical rows and non-LLM rows (manual/infra/domain/compute,
20
+ -- e.g. boxes.js 'box-lifecycle' compute rows) stay NULL. The four need not sum
21
+ -- to amount_usd for legacy rows; for the session/cron rows written by
22
+ -- scripts/gds/session-cost.js they sum to amount_usd by construction.
23
+ --
24
+ -- Additive + idempotent: safe to re-run.
25
+
26
+ ALTER TABLE cost_log
27
+ ADD COLUMN IF NOT EXISTS fresh_input_usd numeric,
28
+ ADD COLUMN IF NOT EXISTS cache_read_usd numeric,
29
+ ADD COLUMN IF NOT EXISTS cache_write_usd numeric,
30
+ ADD COLUMN IF NOT EXISTS output_usd numeric;
31
+
32
+ INSERT INTO schema_migrations (version) VALUES ('123_cost_log_tiers')
33
+ ON CONFLICT (version) DO NOTHING;