@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,346 @@
1
+ #!/usr/bin/env node
2
+ // Seed the BONGOS-V1 module-system child tasks — the build sequence of epic
3
+ // #1388 (BV1.R34), turned into claimable, dependency-ordered tasks per ADR 0083
4
+ // (task 1405 / BV1.R36). All link to criterion C5 (module-system-live), added by
5
+ // companion migration 144_bongos_v1_module_system_criterion.sql.
6
+ //
7
+ // Idempotent: skips tasks whose source_ref already exists; dependency wiring is
8
+ // idempotent on (task_id, depends_on_task_id). Display R## numbers are assigned
9
+ // sequentially after the current max BV1.R## (so this composes with the existing
10
+ // desktop-app R01..R36 without renumbering). Dependency edges reference the
11
+ // logical `key`, not the R## — so re-running after a partial seed is safe.
12
+ //
13
+ // Mirrors scripts/gds/seed-bongos-app-tasks.js exactly (criterion_ids in the
14
+ // POST body; engineer discipline; deps via POST /tasks/:id/dependencies).
15
+ //
16
+ // Usage: node scripts/gds/seed-bongos-module-system-tasks.js [--dry-run]
17
+
18
+ const { cliClient, requireSession } = require('./cli-lib');
19
+
20
+ const DRY = process.argv.includes('--dry-run');
21
+
22
+ // Each entry: { key, title, description, kind, discipline, priority,
23
+ // est_minutes, manual_degree, credits_reward, touches,
24
+ // criteria: ['C5'], deps: ['<key>', ...] }
25
+ const TASKS = [
26
+ // ===========================================================================
27
+ // PHASE 0 — The doorway (P5, roots)
28
+ // ===========================================================================
29
+ {
30
+ key: 'M01',
31
+ title: 'core/module-api.js — the published, semver’d doorway',
32
+ description: `Part of the module system (epic #1388, ADR 0083, design 01§3). Create \`src/module-api.js\` — the stable, semver’d import surface and the ONLY core file a module may require. Re-export the kernel capabilities a module legitimately needs: requireBuilder/requireRank (src/bongos/auth.js), a DB pool accessor (src/bongos/pool.js), the seam registry (M05), config/branding/identity (src/instance-config.js, config/branding.json), a logger. Carry a CORE_VERSION constant. Adding to it = minor bump; changing/removing = major.
33
+
34
+ **Done when:** src/module-api.js exists + exports the surface + CORE_VERSION; a nested CLAUDE.md documents the contract; unit test asserts the public surface is stable; no behavior change to OTB.`,
35
+ kind: 'feature', discipline: 'engineer', priority: 5,
36
+ est_minutes: 150, manual_degree: 2, credits_reward: 25,
37
+ touches: ['src/module-api.js', 'tests/'], criteria: ['C5'], deps: [],
38
+ },
39
+ {
40
+ key: 'M03',
41
+ title: 'module.json manifest schema + validator',
42
+ description: `Part of the module system (epic #1388, ADR 0083, design 04§4). Define the \`module.json\` manifest schema — key, coreVersion, \`contributes\` (routes, rooms, pollers, migrations, uiSections, disciplines, skills), \`provides\`/\`consumes\` (seam ports), \`prerequisites.modules\` — and a pure validator the loader (M04) and fitness (M09) both call. Model the \`contributes\` shape on the existing src/modules.js entries.
43
+
44
+ **Done when:** schema documented; validator rejects malformed manifests with clear errors; hermetic test suite green; no app wiring yet.`,
45
+ kind: 'feature', discipline: 'engineer', priority: 5,
46
+ est_minutes: 150, manual_degree: 2, credits_reward: 25,
47
+ touches: ['src/module-loader/', 'tests/'], criteria: ['C5'], deps: [],
48
+ },
49
+ {
50
+ key: 'M05',
51
+ title: 'Kernel seam registry — ports + event bus',
52
+ description: `Part of the module system (epic #1388, ADR 0083, design 04§1). Build the kernel switchboard: PORTS (registerProvider/resolve — a required capability, e.g. economy provides \`reward\`, lifecycle resolves it at ship) and EVENTS (emit/on — optional reaction, e.g. lifecycle emits \`task.shipped\`, discord reacts). No module ever holds a reference to another. Exposed through src/module-api.js (M01).
53
+
54
+ **Done when:** register/resolve + emit/on live in the kernel and re-exported via module-api.js; hermetic tests for port resolution + event fan-out; fail-clear when a required port has no provider.`,
55
+ kind: 'feature', discipline: 'engineer', priority: 5,
56
+ est_minutes: 180, manual_degree: 2, credits_reward: 30,
57
+ touches: ['src/module-loader/', 'src/module-api.js', 'tests/'], criteria: ['C5'], deps: ['M01'],
58
+ },
59
+ {
60
+ key: 'M02',
61
+ title: 'Fitness: one-way boundary checks (core↔module imports)',
62
+ description: `Part of the module system (epic #1388, ADR 0083, design 04§3). Add two pure checks to scripts/gds/fitness.js CHECKS array (rides the \`unit\` job, no workflow change), mirroring checkCoreHostBoundary: (1) "core never imports a module" — flag any require() under the kernel resolving into modules/; (2) "modules import only the published API" — flag any module require() resolving into core internals other than src/module-api.js, or into a sibling module. Fresh GRANDFATHERED set, warn-mode; green on an empty modules/ tree. Each ships with a negative test (proves it catches a violation).
63
+
64
+ **Done when:** both checks in CHECKS + exported + tested (clean-pass AND catches-violation); green on current tree.`,
65
+ kind: 'feature', discipline: 'engineer', priority: 5,
66
+ est_minutes: 150, manual_degree: 2, credits_reward: 25,
67
+ touches: ['scripts/gds/fitness.js', 'tests/fitness.mjs'], criteria: ['C5'], deps: ['M01'],
68
+ },
69
+
70
+ // ===========================================================================
71
+ // PHASE 1 — The loader (P5)
72
+ // ===========================================================================
73
+ {
74
+ key: 'M04',
75
+ title: 'The loader — discover/validate/mount modules/*/module.json',
76
+ description: `Part of the module system (epic #1388, ADR 0083, design 01§3a). Replace the closed KNOWN_MODULES registry in src/modules.js with a loader that: discovers modules/*/module.json across roots; validates each (M03); checks coreVersion compat (fail-closed); resolves→loads→mounts each enabled module’s route factory BEHIND kernel-composed auth (loader wraps audit → requireBuilder → requireRank around the module’s recipe + declared rank — the module never calls app.use); starts/stops pollers; applies migrations (enabled-gated, M10). Keep isModuleEnabled/enabledDisciplines/clientModules as a back-compat facade over the loader so nothing downstream breaks.
77
+
78
+ **Done when:** loader discovers + mounts from manifests; the back-compat facade keeps all current call sites working; OTB boots byte-identically; hermetic loader tests (mount behind auth, coreVersion mismatch refused, disabled module not mounted).`,
79
+ kind: 'feature', discipline: 'engineer', priority: 5,
80
+ est_minutes: 360, manual_degree: 2, credits_reward: 70,
81
+ touches: ['src/modules.js', 'src/module-loader/', 'src/bongos/routes.js', 'server.js', 'tests/'],
82
+ criteria: ['C5'], deps: ['M01', 'M03'],
83
+ },
84
+
85
+ // ===========================================================================
86
+ // PHASE 2 — First move: dev-box (the template) (P4)
87
+ // ===========================================================================
88
+ {
89
+ key: 'M06',
90
+ title: 'Module→core contribution seam for profile + settings UI',
91
+ description: `Part of the module system (epic #1388, ADR 0083, design 02§cross-cutting). The recurring strangler seam: src/bongos/routes/me.js (the builder-profile route) and public-builders/settings.js embed dev-box/discord/art-key surfaces (box ~16, discord ~63, art-key ~32 line-refs). Add a module→core registration hook so a module contributes its profile fields + a settings panel via the seam (M05) instead of being hardcoded into the core route/page. This is the prerequisite that lets dev-box/discord/art leave core (game has zero such coupling).
92
+
93
+ **Done when:** a module can register profile fields + a settings panel; me.js + settings.js render contributed surfaces via the hook with no behavior change; test covers a registered + an absent contribution.`,
94
+ kind: 'feature', discipline: 'engineer', priority: 4,
95
+ est_minutes: 300, manual_degree: 2, credits_reward: 55,
96
+ touches: ['src/bongos/routes/me.js', 'public-builders/settings.js', 'src/module-loader/', 'tests/'],
97
+ criteria: ['C5'], deps: ['M05'],
98
+ },
99
+ {
100
+ key: 'M07',
101
+ title: 'Move dev-box → modules/dev-box/ (the template move)',
102
+ description: `Part of the module system (epic #1388, ADR 0083, design 03 + 01§6). The most-isolated module (0 refs in server.js/routes.js bodies; box-prefixed tables; routes already flag-gated at routes.js:122) — the template every later move copies. Move src/bongos/box*.js + routes/box.js + public-builders/box-panel.js + the manifest + a nested CLAUDE.md into modules/dev-box/; register its profile fields via M06; delete the if(isModuleEnabled('dev-box')) gate; the loader mounts it. devbox-app/ (Electron) may stay separate for now.
103
+
104
+ **Done when:** dev-box runs entirely from modules/dev-box/ via the loader; the inline gate is gone; OTB behaves BYTE-IDENTICALLY (the proof); smoke green.`,
105
+ kind: 'refactor', discipline: 'engineer', priority: 4,
106
+ est_minutes: 360, manual_degree: 2, credits_reward: 70,
107
+ touches: ['modules/dev-box/', 'src/bongos/routes.js', 'src/bongos/routes/me.js'],
108
+ criteria: ['C5'], deps: ['M04', 'M06'],
109
+ },
110
+
111
+ // ===========================================================================
112
+ // PHASE 3 — Trust enforcement (P4)
113
+ // ===========================================================================
114
+ {
115
+ key: 'M08',
116
+ title: 'Fitness: every module write-route is rank-gated',
117
+ description: `Part of the module system (epic #1388, ADR 0083, design 01§3a). Do NOT re-implement — parameterize route-rank-check.js’s ROUTES_DIR (route-rank-check.js:26,151-159) so checkRouteRanks ALSO walks modules/**/routes/. Module write-routes then inherit the exact "unknown write = blocker" rule Check 4 already enforces; optionally pin authority module routes in EXPECTED_RANKS. Check 4 in fitness.js picks it up with no change.
118
+
119
+ **Done when:** a module route with no rank gate is a red build (negative test); existing core route checks unaffected; the moved dev-box routes (M07) pass.`,
120
+ kind: 'feature', discipline: 'engineer', priority: 4,
121
+ est_minutes: 150, manual_degree: 2, credits_reward: 25,
122
+ touches: ['src/bongos/route-rank-check.js', 'tests/'], criteria: ['C5'], deps: ['M04'],
123
+ },
124
+ {
125
+ key: 'M09',
126
+ title: 'Fitness: core-carries-no-module-code + module-migrations checks; flip warn→violation',
127
+ description: `Part of the module system (epic #1388, ADR 0083, design 04§3). Add two checks to fitness.js: "core carries no module-specific code" (no module key/domain term leaks into kernel files) and "module migrations are additive + namespaced" (read modules/<key>/migrations/, regex-reject DROP TABLE/DROP COLUMN/destructive ALTER, assert a <key>_ object prefix). Once the first move (M07) is clean, flip M02’s one-way checks from warn-mode to violation (the ratchet).
128
+
129
+ **Done when:** both new checks in CHECKS + exported + tested (clean-pass AND catches-violation); M02 checks now hard-fail; green on the post-M07 tree.`,
130
+ kind: 'feature', discipline: 'engineer', priority: 4,
131
+ est_minutes: 180, manual_degree: 2, credits_reward: 30,
132
+ touches: ['scripts/gds/fitness.js', 'tests/fitness.mjs'], criteria: ['C5'], deps: ['M04', 'M07'],
133
+ },
134
+
135
+ // ===========================================================================
136
+ // PHASE 4 — Module-owned migrations (P4) [migrate.sh = gate HARD-FLOOR]
137
+ // ===========================================================================
138
+ {
139
+ key: 'M10',
140
+ title: 'Module-owned migrations — generalize migrations/game/ → modules/<key>/migrations/',
141
+ description: `Part of the module system (epic #1388, ADR 0083, design 04§2 + ADR 0062 §5). Teach scripts/migrate.sh to discover modules/*/migrations/*.sql and apply each ONLY if its module is enabled (the MEDUSA_GDS_ONLY game-gate generalized to per-module enablement). schema_migrations stays STEM-KEYED so relocating a migration from migrations/game/ to modules/game/migrations/ does NOT re-run it on prod (the existing safety guarantee). Disable preserves data (mechanism is "don’t apply", never "drop"). Generalize scripts/verify-gds-only-schema.sh into a per-module presence/absence verifier. Add modules/<key>/migrations/ to PROTECTED_GLOBS (permission-path-check.js).
142
+
143
+ **NOTE:** scripts/migrate.sh is a gate HARD-FLOOR — this PR needs owner Gate approval. **Done when:** module migrations apply enabled-gated; a relocated game migration does not re-run; the per-module verifier passes for an enabled + a disabled module.`,
144
+ kind: 'infra', discipline: 'engineer', priority: 4,
145
+ est_minutes: 240, manual_degree: 3, credits_reward: 45,
146
+ touches: ['scripts/migrate.sh', 'scripts/verify-gds-only-schema.sh', 'src/bongos/permission-path-check.js'],
147
+ criteria: ['C5'], deps: ['M04'],
148
+ },
149
+
150
+ // ===========================================================================
151
+ // PHASE 5 — More moves: discord, art-pipeline (P3)
152
+ // ===========================================================================
153
+ {
154
+ key: 'M11',
155
+ title: 'Move discord → modules/discord/',
156
+ description: `Part of the module system (epic #1388, ADR 0083, design 02). Move the discord bot + broadcast (src/bongos/discord-*.js, ship-card.js, ship-broadcast.js) + routes/discord.js + the link/role UI (via the M06 profile seam) + manifest + nested CLAUDE.md into modules/discord/; relocate migrations/067_discord_*.sql to modules/discord/migrations/ (M10); delete the if(isModuleEnabled('discord')) gates in server.js + routes.js. React to lifecycle events (e.g. task.shipped) through the seam (M05), not by import.
157
+
158
+ **Done when:** discord runs entirely from modules/discord/ via the loader; gates gone; OTB byte-identical (ship broadcast + role sync still fire); fitness green.`,
159
+ kind: 'refactor', discipline: 'engineer', priority: 3,
160
+ est_minutes: 300, manual_degree: 2, credits_reward: 55,
161
+ touches: ['modules/discord/', 'server.js', 'src/bongos/routes.js', 'src/bongos/routes/me.js'],
162
+ criteria: ['C5'], deps: ['M07', 'M06', 'M10'],
163
+ },
164
+ {
165
+ key: 'M12',
166
+ title: 'Move art-pipeline → modules/art-pipeline/',
167
+ description: `Part of the module system (epic #1388, ADR 0083, design 02). The hardest clean cut: its API lives INSIDE core routes/me.js (art-key, ~32 refs) and the artist discipline threads through src/modules.js enabledDisciplines(). Carve the art-key endpoints out of me.js into a modules/art-pipeline/routes/ router; move src/bongos/art-key.js + the art/ tree (~18k LOC) + the otb-* skills + the artist-discipline contribution + manifest + nested CLAUDE.md into modules/art-pipeline/; loader mounts it; the artist discipline registers via the seam.
168
+
169
+ **Done when:** art-pipeline runs entirely from modules/art-pipeline/ via the loader; art-key API + tile generation + the artist discipline work unchanged; fitness green.`,
170
+ kind: 'refactor', discipline: 'engineer', priority: 3,
171
+ est_minutes: 360, manual_degree: 2, credits_reward: 65,
172
+ touches: ['modules/art-pipeline/', 'src/bongos/routes/me.js', 'src/modules.js'],
173
+ criteria: ['C5'], deps: ['M07', 'M06'],
174
+ },
175
+
176
+ // ===========================================================================
177
+ // PHASE 6 — Move game (the hard one) (P3)
178
+ // ===========================================================================
179
+ {
180
+ key: 'M13',
181
+ title: 'Move game → modules/game/ (Colyseus realtime seam)',
182
+ description: `Part of the module system (epic #1388, ADR 0083, design 01§6 phase 4). Game already lives outside src/bongos/ (src/rooms/, src/world/, public/game/) with its own migrations/game/ and a game-less platform-server.js — but server.js carries its static-serve tail + the Colyseus room registration. Move rooms/world/public/game/migrations into modules/game/ (M10); express a "realtime capability" seam so the loader can register Colyseus rooms for an enabled game module without server.js hardcoding them; delete the if(isModuleEnabled('game')) gates (server.js:139-143,176-178). Keep the server/client render twins in sync.
183
+
184
+ **Done when:** game runs entirely from modules/game/ via the loader; the Colyseus rooms register through the seam; OTB byte-identical (world + queue + movement); fitness green.`,
185
+ kind: 'refactor', discipline: 'engineer', priority: 3,
186
+ est_minutes: 360, manual_degree: 3, credits_reward: 70,
187
+ touches: ['modules/game/', 'server.js', 'src/rooms/register.js'],
188
+ criteria: ['C5'], deps: ['M04', 'M10'],
189
+ },
190
+
191
+ // ===========================================================================
192
+ // PHASE 7 — Developer experience (P3)
193
+ // ===========================================================================
194
+ {
195
+ key: 'M14',
196
+ title: 'bongos module new <key> scaffolder + bongos upgrade coreVersion pre-check',
197
+ description: `Part of the module system (epic #1388, ADR 0083, design 04§2). Add a scaffolder (bongos init / scripts/gds/init.js extension) that creates modules/<key>/ with a valid module.json (M03), the dir skeleton (routes/, migrations/, ui/), and a nested CLAUDE.md — no core edit needed. Add \`bongos upgrade\` that pre-checks every enabled module’s coreVersion against CORE_VERSION (M01) and refuses/warns on mismatch (fail-closed).
198
+
199
+ **Done when:** \`module new <key>\` scaffolds a loader-discoverable module that mounts with no core edit; \`bongos upgrade\` reports/refuses on coreVersion mismatch; tests cover both.`,
200
+ kind: 'feature', discipline: 'engineer', priority: 3,
201
+ est_minutes: 240, manual_degree: 2, credits_reward: 40,
202
+ touches: ['scripts/gds/init.js', 'scripts/gds/', 'tests/'], criteria: ['C5'], deps: ['M03', 'M04'],
203
+ },
204
+
205
+ // ===========================================================================
206
+ // PHASE 8 — Docs + proof (P2/P1)
207
+ // ===========================================================================
208
+ {
209
+ key: 'M15',
210
+ title: 'Rewrite docs/modules-contract.md to the plugin-API contract + index sweep',
211
+ description: `Part of the module system (epic #1388, ADR 0083 step 7). Rewrite docs/modules-contract.md as the plugin-API contract (the doorway surface, the manifest schema, the seam ports/events, the rank-gate rule, module-owned migrations) + a module-author recipe (scaffold → write → declare → enable). Sweep the indexes: CLAUDE.md quick-nav, docs/file-map.md (the modules/ tree), docs/architecture.md (core+modules section), docs/adr/README.md.
212
+
213
+ **Done when:** modules-contract.md documents the live contract + recipe; all indexes reference modules/ and ADR 0083; no stale "closed registry" claims.`,
214
+ kind: 'infra', discipline: 'engineer', priority: 2,
215
+ est_minutes: 180, manual_degree: 2, credits_reward: 30,
216
+ touches: ['docs/modules-contract.md', 'CLAUDE.md', 'docs/file-map.md', 'docs/architecture.md', 'docs/adr/README.md'],
217
+ criteria: ['C5'], deps: ['M14', 'M07', 'M11', 'M12', 'M13'],
218
+ },
219
+ {
220
+ key: 'M16',
221
+ title: 'Proof: a net-new module via the scaffolder, mounted + shipped, OTB byte-identical',
222
+ description: `Part of the module system (epic #1388, ADR 0083 — the criterion’s live proof). On a staged throwaway: run \`bongos module new demo\` (M14), give it one rank-gated route + one namespaced migration, enable it, prove the loader mounts it with NO core edit; prove OTB behaves byte-identically; prove fitness REJECTS a deliberate cross-module import (demo requires modules/dev-box internals) and a missing route rank gate. Capture the transcript in the task notes.
223
+
224
+ **Done when:** the walkthrough is documented; the scaffolded module mounts + serves; both fitness violations are caught as red builds.`,
225
+ kind: 'verify', discipline: 'engineer', priority: 1,
226
+ est_minutes: 180, manual_degree: 3, credits_reward: 35,
227
+ touches: ['docs/', 'modules/'], criteria: ['C5'],
228
+ deps: ['M07', 'M11', 'M12', 'M13', 'M14'],
229
+ },
230
+
231
+ // ===========================================================================
232
+ // PHASE 9 — Follow-on: task→module affinity (P2)
233
+ // ===========================================================================
234
+ {
235
+ key: 'M17',
236
+ title: 'task→module affinity — the touches[] successor (may re-break-out)',
237
+ description: `Part of the module system (epic #1388, ADR 0083§task→module, design 00§6 + 01§4). The research centerpiece, gated on the full roster being moved. Give a task a \`module\` label; scope the agent’s context to that module + the published API (smaller context, higher quality); make parallel-safety MODULE-DISJOINTNESS (cleaner than path overlap); make drift detection semantic ("you said dev-box, you touched game" via the ship-time diff⊆module check); retire the file-path touches[] (already advisory, ADR 0049) in favor of the module label. This is itself a sizeable feature — may be re-broken into children at a planning pass.
238
+
239
+ **Done when:** tasks carry a module label; claim-time context is module-scoped; ship-time diff⊆module is enforced; touches[] is retired or demoted to derived-from-module.`,
240
+ kind: 'feature', discipline: 'engineer', priority: 2,
241
+ est_minutes: 360, manual_degree: 3, credits_reward: 60,
242
+ touches: ['src/bongos/db.js', 'src/bongos/routes/tasks.js', 'scripts/gds/claim.js', 'scripts/gds/ship.js'],
243
+ criteria: ['C5'], deps: ['M07', 'M11', 'M12', 'M13'],
244
+ },
245
+ ];
246
+
247
+ // ---------------------------------------------------------------------------
248
+ // Main: post each task with criterion_ids; assign R## after current max; wire deps.
249
+ // ---------------------------------------------------------------------------
250
+
251
+ async function main() {
252
+ await requireSession();
253
+ const api = await cliClient();
254
+
255
+ const list = await api.tasks.getTasks({ query: { version: 'BONGOS-V1' } });
256
+ const existing = list.data?.tasks || [];
257
+ const bySourceRef = {};
258
+ let maxR = 0;
259
+ for (const t of existing) {
260
+ if (t.source_ref) bySourceRef[t.source_ref] = t;
261
+ const m = /BV1\.R(\d+)\b/.exec(t.title || '');
262
+ if (m) { const n = Number(m[1]); if (n > maxR) maxR = n; }
263
+ }
264
+ console.log(`context: ${existing.length} BONGOS-V1 tasks, maxR=R${maxR}`);
265
+
266
+ const refByKey = {};
267
+ TASKS.forEach((def, i) => { refByKey[def.key] = `R${String(maxR + 1 + i).padStart(2, '0')}`; });
268
+
269
+ const idByKey = {};
270
+ let created = 0, skipped = 0, errors = 0;
271
+
272
+ for (const def of TASKS) {
273
+ const r = refByKey[def.key];
274
+ const source_ref = `bongos-v1-${def.key.toLowerCase()}`;
275
+ if (bySourceRef[source_ref]) {
276
+ idByKey[def.key] = Number(bySourceRef[source_ref].id);
277
+ console.log(`SKIP ${def.key} (${r}) already exists: id=${bySourceRef[source_ref].id}`);
278
+ skipped++;
279
+ continue;
280
+ }
281
+ const body = {
282
+ version_id: 'BONGOS-V1',
283
+ title: `BV1.${r} — ${def.title}`,
284
+ description: def.description,
285
+ kind: def.kind,
286
+ discipline: def.discipline,
287
+ status: 'backlog',
288
+ priority: def.priority,
289
+ est_minutes: def.est_minutes,
290
+ manual_degree: def.manual_degree,
291
+ credits_reward: def.credits_reward,
292
+ touches: def.touches || [],
293
+ criterion_ids: def.criteria || [],
294
+ source: 'planning-session',
295
+ source_ref,
296
+ };
297
+ if (DRY) {
298
+ const deps = (def.deps || []).map((d) => (refByKey[d] ? `${d}=${refByKey[d]}` : d)).join(',');
299
+ console.log(`DRY ${def.key} -> ${r} P${def.priority} ${def.kind} crit=${(def.criteria || []).join('/')} deps=[${deps}] ${def.title.slice(0, 50)}`);
300
+ continue;
301
+ }
302
+ const res = await api.tasks.postTasks({ body });
303
+ if (res.status !== 201) {
304
+ console.error(`FAIL ${def.key}: status=${res.status} ${JSON.stringify(res.data).slice(0, 220)}`);
305
+ errors++;
306
+ continue;
307
+ }
308
+ idByKey[def.key] = Number(res.data.task.id);
309
+ console.log(`OK ${def.key} -> BV1.${r} task id=${idByKey[def.key]} (crit ${(def.criteria || []).join('/')})`);
310
+ created++;
311
+ }
312
+
313
+ const resolveDep = (ref) => idByKey[ref] ?? null;
314
+
315
+ let depsWired = 0, depErrors = 0;
316
+ if (!DRY) {
317
+ for (const def of TASKS) {
318
+ const deps = def.deps || [];
319
+ if (deps.length === 0) continue;
320
+ const taskId = idByKey[def.key];
321
+ if (!taskId) { console.error(`DEPS ${def.key}: no task id (create failed?), skipping`); depErrors++; continue; }
322
+ const depIds = deps.map(resolveDep).filter((n) => Number.isFinite(n));
323
+ if (depIds.length !== deps.length) {
324
+ const missing = deps.filter((d) => !Number.isFinite(resolveDep(d)));
325
+ console.error(`DEPS ${def.key}: unresolved deps [${missing.join(',')}] — wiring the resolvable ones only`);
326
+ depErrors++;
327
+ if (depIds.length === 0) continue;
328
+ }
329
+ const res = await api.tasks.postTasksIdDependencies({ id: taskId, body: { depends_on_task_ids: depIds } });
330
+ if (res.status === 200) {
331
+ console.log(`DEPS ${def.key} <- [${deps.join(',')}] (ids ${depIds.join(',')})`);
332
+ depsWired++;
333
+ } else {
334
+ console.error(`DEPS FAIL ${def.key}: ${res.status} ${JSON.stringify(res.data).slice(0, 220)}`);
335
+ depErrors++;
336
+ }
337
+ }
338
+ }
339
+
340
+ const zeroDep = TASKS.filter((d) => (d.deps || []).length === 0).map((d) => `${d.key}=${idByKey[d.key] || '?'}`);
341
+ console.log(`\nDONE created=${created} skipped=${skipped} errors=${errors} deps_wired=${depsWired} dep_errors=${depErrors} (manifest: ${TASKS.length})`);
342
+ console.log(`NEXT promote zero-dependency tasks to 'ready' (they never auto-promote): ${zeroDep.join(', ')}`);
343
+ process.exit(errors === 0 && depErrors === 0 ? 0 : 1);
344
+ }
345
+
346
+ main().catch((err) => { console.error('FATAL', err); process.exit(1); });
@@ -0,0 +1,214 @@
1
+ #!/usr/bin/env node
2
+ // Seed the 6 net-new "Cloud Bongos CLI" tasks added to GDS-V4 (C8) — the
3
+ // conda/Miniconda-style terminal-first onboarding toolkit. `bongos` is the CLI
4
+ // command (Cloud Bongos = the standalone build platform; Amazonprimea =
5
+ // instance 1). Design doc: artifact 02bcca71 (the bongos toolkit).
6
+ //
7
+ // Shape mirrors seed-medusa-tasks.js exactly:
8
+ // - POST /api/gds/tasks { version_id:'GDS-V4', criterion_ids:['C8'], ... }
9
+ // - POST /api/gds/tasks/:id/dependencies { depends_on_task_ids:[...] }
10
+ // - idempotent on source_ref (skips already-created); deps idempotent server-side.
11
+ //
12
+ // Display R## numbers are assigned dynamically from the current max V4.R## in
13
+ // the version (decorative sort prefix; deps are the load-bearing part — ADR 0049).
14
+ // Intra-cluster deps use the symbolic key (EPIC/P1/...); cross-cluster deps use
15
+ // the real 'R53'/'R54' ref, resolved from the existing GDS-V4 task list.
16
+ //
17
+ // Usage: node scripts/gds/seed-bongos-tasks.js [--dry-run]
18
+
19
+ const { cliClient, requireSession } = require('./cli-lib');
20
+
21
+ const DRY = process.argv.includes('--dry-run');
22
+
23
+ // Each entry: { key, title, description, kind, discipline, priority,
24
+ // est_minutes, manual_degree, credits_reward, touches, criteria, deps }
25
+ // `key` is the symbolic intra-cluster ref; `deps` may hold keys or real 'R##'.
26
+ const TASKS = [
27
+ {
28
+ key: 'EPIC',
29
+ title: 'Cloud Bongos `bongos` CLI — terminal-first onboarding toolkit (epic)',
30
+ description: `Part of Cloud Bongos / C8 (standalone instance). Umbrella + design home for the conda-style onboarding toolkit. Design doc: the "bongos toolkit" artifact.
31
+
32
+ The thesis: what Miniconda is to Python, the \`bongos\` CLI is to a Cloud Bongos instance — one tiny installer -> one command surface -> an isolated, reproducible, Claude-wired dev environment. Three commands from a fresh laptop to a claimed task:
33
+ curl -fsSL https://get.bongos.dev | sh -> bongos login <instance> -> bongos code -> bongos start / claim / ship
34
+
35
+ Conda mapping: installer->\`bongos\`; \`conda <verb>\`->\`bongos <verb>\`; \`conda create/activate\`->\`bongos up\`/\`bongos code\` (the dev box IS the environment); channels->instances (\`bongos login <url>\`); environment.yml->the instance manifest. Lives ALONGSIDE the /builder-* slash-commands and the desktop app (additive, not a replacement); same scripts/gds/* underneath.
36
+
37
+ Locked decisions: full product (strangers install it, AGPL self-host is the backbone); cloud box default, \`--local\` clone = Metic+; admission is invite-only via a public access-request + an Archon 👍 in Discord (the CLI files the request + polls); admission is the only box gate (first box hands-off, ADR 0059); box cost is surfaced + billed to the builder; Node-based, compiled binary in Phase 3.
38
+
39
+ **Done when:** an ADR records the bongos verb surface, the distribution model, and the instance-manifest contract; the four phase tasks below are seeded + tracked under this epic.`,
40
+ kind: 'feature', discipline: 'engineer', priority: 5,
41
+ est_minutes: 120, manual_degree: 3, credits_reward: 30,
42
+ touches: ['docs/adr/'], criteria: ['C8'], deps: [],
43
+ },
44
+ {
45
+ key: 'P1',
46
+ title: 'bongos dispatcher — one CLI over scripts/gds/* (npm)',
47
+ description: `Part of Cloud Bongos / C8. Cross-ref: EPIC. **The one genuinely missing piece** — there is no top-level CLI dispatcher today, only ~65 loose node scripts behind ~26 slash-commands.
48
+
49
+ A bin/bongos.js that routes \`bongos <verb> [args]\` to the existing scripts/gds/*.js, passing args/flags straight through. A verb registry maps: start->start.js, claim->claim.js, ship->ship.js, release->release.js, cost->cost.js, status->status.js, recall->recall.js, box->the box-ensure flow, stage->sandbox-stage/local-preview, setup/login->setup.js. \`bongos\` / \`bongos help\` prints the verb list; unknown verbs error with the list. Reuses cli-lib.js (no new auth/api code). package.json gets a \`bin\` entry so \`npm i -g\` (or npx) exposes \`bongos\`. Cross-platform Node only — no bash-isms (#686).
50
+
51
+ **Done when:** \`bongos start|claim|ship|box|cost|status|recall\` dispatch to the right script with args passed through and exit codes preserved; \`bongos help\` lists the verbs; a \`bin\` entry makes \`bongos\` runnable after an npm global install; a smoke test covers the dispatch table.`,
52
+ kind: 'feature', discipline: 'engineer', priority: 5,
53
+ est_minutes: 240, manual_degree: 2, credits_reward: 50,
54
+ touches: ['bin/', 'package.json', 'scripts/gds/'], criteria: ['C8'], deps: [],
55
+ },
56
+ {
57
+ key: 'P2',
58
+ title: 'bongos shell + bongos code — terminal & VS Code Remote-SSH into the box',
59
+ description: `Part of Cloud Bongos / C8. Cross-ref: P1, ADR 0045 (the desktop app already manages the box SSH key).
60
+
61
+ \`bongos shell\` opens a terminal session on the builder's dev box (wakes it via POST /box/ensure if needed). \`bongos code\` writes/refreshes an SSH host alias into ~/.ssh/config (reusing the ed25519 box key the Dev Box app provisions) and launches VS Code Remote-SSH at /workspace, so the laptop is a thin client and the box is the full environment with Claude's VS Code extension already installed (baked by cloud-init). Both default to the cloud box; \`--local\` (Metic+ only) targets a local clone / devcontainer instead.
62
+
63
+ Known handoff: Claude's first-time login on a box is interactive by design (device enrollment can't be scripted — the ttyd/Chromebook work proved this). \`bongos shell\` runs an interactive \`claude\` the first time so the builder completes /login once; silent thereafter.
64
+
65
+ **Done when:** \`bongos code\` from a fresh laptop wakes the box and opens VS Code attached over Remote-SSH at /workspace; \`bongos shell\` opens a working terminal on the box; the first-run \`claude\` login handoff is wired; \`--local\` is gated to Metic+.`,
66
+ kind: 'feature', discipline: 'engineer', priority: 4,
67
+ est_minutes: 300, manual_degree: 2, credits_reward: 50,
68
+ touches: ['bin/', 'scripts/gds/', 'infra/'], criteria: ['C8'], deps: ['P1'],
69
+ },
70
+ {
71
+ key: 'P3',
72
+ title: 'One-liner installer + standalone bongos binary (GitHub Releases; brew/scoop/winget)',
73
+ description: `Part of Cloud Bongos / C8. Cross-ref: P1, ADR 0045 (the devbox-app already ships per-platform binaries via a public GitHub Releases repo — reuse that distribution pattern).
74
+
75
+ A \`curl -fsSL https://get.bongos.dev | sh\` bootstrap (detects OS/arch, downloads the right binary, puts it on PATH, prints next steps) plus a compiled standalone \`bongos\` binary (bun/deno/pkg-style) so there is NO "install Node first" prerequisite — the true Miniconda feel and the on-ramp for non-Node users + self-hosters. CI builds the per-platform binaries (mac arm64/x64, win, linux) and publishes them as GitHub Release assets; add at least one package-manager recipe (brew tap / scoop / winget). The server can serve branded /downloads redirects like it does for the devbox app.
76
+
77
+ **Done when:** a single \`curl … | sh\` puts \`bongos\` on PATH on macOS/Windows/Linux with no prior Node; CI publishes per-platform binaries to a GitHub Release; at least one package-manager install path works; the installer is idempotent + re-runnable.`,
78
+ kind: 'infra', discipline: 'engineer', priority: 4,
79
+ est_minutes: 360, manual_degree: 2, credits_reward: 60,
80
+ touches: ['.github/', 'scripts/', 'bin/'], criteria: ['C8'], deps: ['P1'],
81
+ },
82
+ {
83
+ key: 'P4A',
84
+ title: 'Instance manifest endpoint — GET /api/gds/instance (brand + modules + repo)',
85
+ description: `Part of Cloud Bongos / C8. Cross-ref: R53 (branding-contract layer), R54 (feature-module selection). This is the read-API over those two configs — the conda "environment.yml" a CLI fetches to configure itself.
86
+
87
+ A small public, read-only endpoint returning the instance descriptor assembled from the R53 branding contract + the R54 module flags: product/instance name + brand (identity, copy, theme — NO secrets), enabled feature-modules, the GitHub repo binding, the rank ladder, supported auth methods (device-flow / app-pair), admission policy (invite-only vs open), and whether a managed dev-box backend is available. So \`bongos login <url>\` brands itself, knows the repo for \`--local\`, and hides verbs an instance doesn't run (e.g. no \`box\` if dev-box is off). Today GET /healthz returns only { ok, auth_configured } — this is a genuine gap.
88
+
89
+ **Done when:** GET /api/gds/instance returns a documented manifest assembled from the branding contract + module flags, contains no secrets/topology, is fetchable pre-auth (CORS read), and the CLI can brand + feature-gate itself from it. Depends on R53/R54 so the brand + module sources exist.`,
90
+ kind: 'feature', discipline: 'engineer', priority: 3,
91
+ est_minutes: 240, manual_degree: 2, credits_reward: 50,
92
+ touches: ['src/bongos/routes/', 'src/bongos/'], criteria: ['C8'], deps: ['R53', 'R54'],
93
+ },
94
+ {
95
+ key: 'P4B',
96
+ title: 'bongos login <instance> (instance-agnostic) + stranger access-request flow; folds in init/upgrade',
97
+ description: `Part of Cloud Bongos / C8. Cross-ref: P1, P4A (manifest), R64 (\`medusa/bongos upgrade\`), R65 (\`init\`), ADR 0050/0057/0059 (admission).
98
+
99
+ \`bongos login <instance-url>\` fetches the P4A manifest, runs the GitHub device-flow (browser-click, no token paste — the UI-first rule), stores a per-instance scoped session, and brands the CLI for that instance. For someone NOT yet admitted, it files the public POST /api/gds/access-requests (their GitHub username) and polls — telling them "an Archon will approve you with a 👍 in Discord" — until admission flips, then completes sign-in. No GitHub collaborator invite is involved. Default admission is invite-only. Also folds the already-planned \`bongos init\` (scaffold a brand-new instance, R65) and \`bongos upgrade\` (R64) in as subcommands of the same CLI.
100
+
101
+ **Done when:** \`bongos login <any-instance-url>\` works end-to-end including the not-yet-admitted path (files the request, polls, completes once approved); the CLI is instance-agnostic (no hard-coded amazonprimea); \`init\`/\`upgrade\` are reachable subcommands.`,
102
+ kind: 'feature', discipline: 'engineer', priority: 3,
103
+ est_minutes: 360, manual_degree: 2, credits_reward: 60,
104
+ touches: ['bin/', 'scripts/gds/'], criteria: ['C8'], deps: ['P1', 'P4A'],
105
+ },
106
+ ];
107
+
108
+ async function main() {
109
+ await requireSession();
110
+ const api = await cliClient();
111
+
112
+ // Pull the current GDS-V4 task list once: idempotency (skip existing
113
+ // source_ref), the next free R## (decorative sort prefix), and cross-cluster
114
+ // dep resolution (R53/R54 -> task id).
115
+ const list = await api.tasks.getTasks({ query: { version: 'GDS-V4' } });
116
+ const existing = list.data?.tasks || [];
117
+ const bySourceRef = {};
118
+ const idByRealRef = {}; // 'R53' -> id, parsed from the V4.R## title prefix
119
+ let maxR = 0;
120
+ for (const t of existing) {
121
+ if (t.source_ref) bySourceRef[t.source_ref] = t;
122
+ const m = /V4\.R(\d+)\b/.exec(t.title || '');
123
+ if (m) {
124
+ const n = Number(m[1]);
125
+ idByRealRef[`R${n}`] = Number(t.id);
126
+ if (n > maxR) maxR = n;
127
+ }
128
+ }
129
+ console.log(`context: ${existing.length} GDS-V4 tasks, maxR=R${maxR}, R53=${idByRealRef.R53 || '?'}, R54=${idByRealRef.R54 || '?'}`);
130
+
131
+ // Assign display R## numbers sequentially after the current max.
132
+ const refByKey = {};
133
+ TASKS.forEach((def, i) => { refByKey[def.key] = `R${maxR + 1 + i}`; });
134
+
135
+ const idByKey = {};
136
+ let created = 0, skipped = 0, errors = 0;
137
+
138
+ for (const def of TASKS) {
139
+ const r = refByKey[def.key];
140
+ const source_ref = `gds-v4-bongos-${def.key.toLowerCase()}`;
141
+ if (bySourceRef[source_ref]) {
142
+ idByKey[def.key] = Number(bySourceRef[source_ref].id);
143
+ console.log(`SKIP ${def.key} (${r}) already exists: id=${bySourceRef[source_ref].id}`);
144
+ skipped++;
145
+ continue;
146
+ }
147
+ const body = {
148
+ version_id: 'GDS-V4',
149
+ title: `V4.${r} — ${def.title}`,
150
+ description: def.description,
151
+ kind: def.kind,
152
+ discipline: def.discipline,
153
+ status: 'backlog',
154
+ priority: def.priority,
155
+ est_minutes: def.est_minutes,
156
+ manual_degree: def.manual_degree,
157
+ credits_reward: def.credits_reward,
158
+ touches: def.touches || [],
159
+ criterion_ids: def.criteria || [],
160
+ source: 'planning-session',
161
+ source_ref,
162
+ };
163
+ if (DRY) {
164
+ const deps = (def.deps || []).map((d) => (refByKey[d] ? `${d}=${refByKey[d]}` : d)).join(',');
165
+ console.log(`DRY ${def.key} -> ${r} P${def.priority} ${def.kind} crit=${(def.criteria || []).join('/')} deps=[${deps}] ${def.title.slice(0, 52)}`);
166
+ continue;
167
+ }
168
+ const res = await api.tasks.postTasks({ body });
169
+ if (res.status !== 201) {
170
+ console.error(`FAIL ${def.key}: status=${res.status} ${JSON.stringify(res.data).slice(0, 220)}`);
171
+ errors++;
172
+ continue;
173
+ }
174
+ idByKey[def.key] = Number(res.data.task.id);
175
+ console.log(`OK ${def.key} -> V4.${r} task id=${idByKey[def.key]} (crit ${(def.criteria || []).join('/')})`);
176
+ created++;
177
+ }
178
+
179
+ // Resolve a dep ref (symbolic key OR real 'R##') to a task id.
180
+ const resolveDep = (ref) => idByKey[ref] ?? idByRealRef[ref] ?? null;
181
+
182
+ let depsWired = 0, depErrors = 0;
183
+ if (!DRY) {
184
+ for (const def of TASKS) {
185
+ const deps = def.deps || [];
186
+ if (deps.length === 0) continue;
187
+ const taskId = idByKey[def.key];
188
+ if (!taskId) { console.error(`DEPS ${def.key}: no task id (create failed?), skipping`); depErrors++; continue; }
189
+ const depIds = deps.map(resolveDep).filter((n) => Number.isFinite(n));
190
+ if (depIds.length !== deps.length) {
191
+ const missing = deps.filter((d) => !Number.isFinite(resolveDep(d)));
192
+ console.error(`DEPS ${def.key}: unresolved deps [${missing.join(',')}] — wiring the resolvable ones only`);
193
+ depErrors++;
194
+ if (depIds.length === 0) continue;
195
+ }
196
+ const res = await api.tasks.postTasksIdDependencies({ id: taskId, body: { depends_on_task_ids: depIds } });
197
+ if (res.status === 200) {
198
+ console.log(`DEPS ${def.key} <- [${deps.join(',')}] (ids ${depIds.join(',')})`);
199
+ depsWired++;
200
+ } else {
201
+ console.error(`DEPS FAIL ${def.key}: ${res.status} ${JSON.stringify(res.data).slice(0, 220)}`);
202
+ depErrors++;
203
+ }
204
+ }
205
+ }
206
+
207
+ console.log(`\nDONE created=${created} skipped=${skipped} errors=${errors} deps_wired=${depsWired} dep_errors=${depErrors} (manifest: ${TASKS.length})`);
208
+ process.exit(errors === 0 && depErrors === 0 ? 0 : 1);
209
+ }
210
+
211
+ main().catch((err) => {
212
+ console.error('FATAL', err);
213
+ process.exit(1);
214
+ });