@bongos/core 1.17.1 → 1.17.3

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 (233) hide show
  1. package/.bongos-core.json +521 -281
  2. package/.claude/skills/blocker-review/SKILL.md +1 -1
  3. package/.claude/skills/builder-claim/SKILL.md +2 -0
  4. package/.claude/skills/builder-exit/SKILL.md +2 -2
  5. package/.claude/skills/builder-redteam/SKILL.md +3 -3
  6. package/.claude/skills/builder-setup/SKILL.md +2 -2
  7. package/.claude/skills/builder-start/SKILL.md +1 -1
  8. package/.claude/skills/dev/SKILL.md +1 -1
  9. package/.claude/skills/idea-triage/SKILL.md +2 -2
  10. package/.claude/skills/ideate/SKILL.md +1 -1
  11. package/.claude/skills/merge-mode/SKILL.md +1 -1
  12. package/.claude/skills/new-project/SKILL.md +3 -0
  13. package/.claude/skills/paint/SKILL.md +1 -1
  14. package/GOVERNANCE.md +1 -1
  15. package/README.md +1 -1
  16. package/clients/bongos-client/README.md +1 -1
  17. package/clients/bongos-client/bongos-client.global.js +2 -0
  18. package/clients/bongos-client/index.cjs +2 -0
  19. package/clients/bongos-client/index.d.ts +4 -2
  20. package/clients/bongos-client/index.mjs +2 -0
  21. package/docs/adr/0001-stack-choice-single-vps.md +1 -1
  22. package/docs/adr/0008-google-chat-oauth-user-auth.md +1 -1
  23. package/docs/adr/0019-red-team-bounty-payout-table.md +3 -3
  24. package/docs/adr/0020-security-model-public-stub.md +1 -1
  25. package/docs/adr/0023-kind-multipliers-and-idea-bonus.md +1 -1
  26. package/docs/adr/0024-cloneable-repo-local-first-memory.md +1 -1
  27. package/docs/adr/0026-bfg-memory-hygiene-and-cross-builder-learning.md +4 -4
  28. package/docs/adr/0027-bfg-session-inefficiency-evaluator.md +3 -3
  29. package/docs/adr/0030-builders-hall-live-updates.md +1 -1
  30. package/docs/adr/0031-cloud-dev-environments-for-builders.md +4 -4
  31. package/docs/adr/0032-discord-mirror-of-gds.md +2 -2
  32. package/docs/adr/0034-thetes-graduated-newcomer-rank.md +1 -1
  33. package/docs/adr/0044-mediterranean-palette-replacement.md +1 -1
  34. package/docs/adr/0044-per-box-live-game-preview.md +1 -1
  35. package/docs/adr/0054-session-token-reward-cost-plus.md +10 -10
  36. package/docs/adr/0057-container-cost-ledger.md +3 -3
  37. package/docs/adr/0062-medusa-instance-model-decoupling.md +4 -4
  38. package/docs/adr/0065-agpl-nonprofit-ai-first-governance.md +2 -2
  39. package/docs/adr/0085-remove-default-per-builder-spend-cap.md +1 -1
  40. package/docs/adr/0086-goal-scoped-work-hierarchy.md +1 -1
  41. package/docs/adr/0096-require-reward-before-workable.md +9 -9
  42. package/docs/adr/0097-retroactive-reward-backfill.md +3 -3
  43. package/docs/adr/0100-two-repo-instance-model.md +1 -1
  44. package/docs/adr/0101-goal-hierarchy-phase-5-judge-membership-reward.md +3 -3
  45. package/docs/adr/0103-core-first-extraction-cloud-bongos-trunk.md +3 -3
  46. package/docs/adr/0107-module-upstreaming-contribution-to-core-catalog.md +1 -1
  47. package/docs/adr/0120-pay-on-land-and-builder-owned-rebase-gate.md +6 -6
  48. package/docs/adr/0136-update-channel-subscription-policy.md +51 -0
  49. package/docs/adr/0137-upstream-publish-policy-manual-owner-gated.md +40 -0
  50. package/docs/adr/0138-bundled-module-deps-declared-per-module.md +45 -0
  51. package/docs/adr/README.md +9 -6
  52. package/docs/api/openapi.json +65 -26
  53. package/docs/api-reference.md +3 -2
  54. package/docs/architecture.md +2 -2
  55. package/docs/branding-contract.md +5 -4
  56. package/docs/canonical-permissions.md +1 -1
  57. package/docs/design/vanilla-hall-ui-redesign-scope.md +1 -1
  58. package/docs/file-map.md +18 -17
  59. package/docs/handoff-template.md +2 -2
  60. package/docs/modules-contract.md +6 -1
  61. package/docs/onboarding/diagrams/README.md +7 -7
  62. package/docs/onboarding/drachmae-and-karma.md +18 -18
  63. package/docs/onboarding/primer.md +9 -9
  64. package/docs/recipes/audit-replay.md +2 -2
  65. package/docs/recipes/builder-box-lifecycle.md +2 -2
  66. package/docs/recipes/claude-design-loop.md +1 -1
  67. package/docs/recipes/ops-gotchas.md +1 -1
  68. package/docs/recipes/private-npm-distribution.md +17 -0
  69. package/docs/recipes/staging-environment.md +1 -1
  70. package/docs/recipes/upgrading-the-core.md +55 -0
  71. package/docs/research/cursor-competitive-analysis.md +1 -1
  72. package/docs/research/llm-model-agnostic-and-cheaper-grader.md +1 -1
  73. package/modules/discord/module.json +2 -1
  74. package/modules/economy/achievements.js +9 -1
  75. package/modules/economy/credits.js +10 -1
  76. package/modules/hall-ui/public/builders.js +137 -620
  77. package/modules/hall-ui/public/goal-inbox.js +232 -0
  78. package/modules/hall-ui/public/goals-page.js +4 -1
  79. package/modules/hall-ui/public/goals.html +8 -0
  80. package/modules/hall-ui/public/hall-kit.js +474 -0
  81. package/modules/hall-ui/public/hall-widgets.js +14 -5
  82. package/modules/hall-ui/public/index.html +3 -0
  83. package/modules/hall-ui/public/instances-panel.js +24 -3
  84. package/modules/hall-ui/public/new-project-wizard.js +7 -5
  85. package/modules/hall-ui/public/style.css +168 -0
  86. package/modules/hall-ui/public/work.css +194 -0
  87. package/modules/hall-ui/public/work.html +46 -374
  88. package/modules/hall-ui/public/work.js +137 -102
  89. package/modules/lifecycle/criterion-suggest.js +80 -0
  90. package/modules/lifecycle/db.js +42 -5
  91. package/modules/lifecycle/routes/goals.js +26 -0
  92. package/modules/lifecycle/routes/tasks.js +21 -0
  93. package/modules/provisioning/CLAUDE.md +15 -0
  94. package/modules/provisioning/migrations/provisioning_001_tables.sql +160 -0
  95. package/modules/provisioning/migrations/provisioning_002_standalone_shape.sql +11 -0
  96. package/modules/provisioning/migrations/provisioning_003_github_app_manifest.sql +95 -0
  97. package/modules/provisioning/module.json +17 -0
  98. package/modules/provisioning/onboard-plan.js +37 -0
  99. package/modules/provisioning/provisioning.js +539 -0
  100. package/modules/provisioning/rate-limit.js +35 -0
  101. package/modules/provisioning/routes/provisioning.js +607 -0
  102. package/modules/provisioning/tests/provisioning.mjs +232 -0
  103. package/modules/provisioning/ui/.gitkeep +0 -0
  104. package/modules/security/secret-scrub.js +10 -0
  105. package/package-lock.json +2 -2
  106. package/package.json +7 -2
  107. package/scripts/discord/README.md +1 -1
  108. package/scripts/gds/claim.js +98 -48
  109. package/scripts/gds/claude-materialize.js +30 -9
  110. package/scripts/gds/cutover-codemod.js +241 -0
  111. package/scripts/gds/fitness.js +54 -0
  112. package/scripts/gds/init.js +59 -3
  113. package/scripts/gds/lint-infra-exec.js +70 -0
  114. package/scripts/gds/lint-workflow-exec.js +63 -0
  115. package/scripts/gds/mirror-lineage-check.js +14 -5
  116. package/scripts/gds/mirror-redact.js +8 -0
  117. package/scripts/gds/onboard.js +4 -0
  118. package/scripts/gds/package-core.js +18 -3
  119. package/scripts/gds/publish-manifest.js +60 -2
  120. package/scripts/gds/run-routine.js +51 -13
  121. package/scripts/gds/run-unit-tests.js +4 -0
  122. package/scripts/gds/update-channel.js +186 -0
  123. package/scripts/gds/upgrade.js +116 -9
  124. package/scripts/hall-preview/README.md +103 -0
  125. package/scripts/hall-preview/fixtures/access-requests.json +1 -0
  126. package/scripts/hall-preview/fixtures/achievements.json +76 -0
  127. package/scripts/hall-preview/fixtures/analytics__builder.json +251 -0
  128. package/scripts/hall-preview/fixtures/audit-log.json +1 -0
  129. package/scripts/hall-preview/fixtures/boxes__cost-ledger.json +1 -0
  130. package/scripts/hall-preview/fixtures/builders__active-claims.json +1 -0
  131. package/scripts/hall-preview/fixtures/builders__directory.json +81 -0
  132. package/scripts/hall-preview/fixtures/builders__roster.json +1 -0
  133. package/scripts/hall-preview/fixtures/goals.json +502 -0
  134. package/scripts/hall-preview/fixtures/goals__25.json +96 -0
  135. package/scripts/hall-preview/fixtures/goals__26.json +67 -0
  136. package/scripts/hall-preview/fixtures/goals__3.json +103 -0
  137. package/scripts/hall-preview/fixtures/goals__35.json +49 -0
  138. package/scripts/hall-preview/fixtures/goals__conflicts.json +154 -0
  139. package/scripts/hall-preview/fixtures/goals__detail.json +96 -0
  140. package/scripts/hall-preview/fixtures/goals__inbox.json +5 -0
  141. package/scripts/hall-preview/fixtures/goals__requests.json +3 -0
  142. package/scripts/hall-preview/fixtures/grades__by-builder.json +1 -0
  143. package/scripts/hall-preview/fixtures/inbox.json +330 -0
  144. package/scripts/hall-preview/fixtures/instance.json +124 -0
  145. package/scripts/hall-preview/fixtures/leaderboard.json +184 -0
  146. package/scripts/hall-preview/fixtures/me.json +476 -0
  147. package/scripts/hall-preview/fixtures/me__recent-ships.json +304 -0
  148. package/scripts/hall-preview/fixtures/override-requests.json +1 -0
  149. package/scripts/hall-preview/fixtures/provisioning__fleet.json +1 -0
  150. package/scripts/hall-preview/fixtures/provisioning__fleet__cost-ledger.json +1 -0
  151. package/scripts/hall-preview/fixtures/provisioning__instances.json +1 -0
  152. package/scripts/hall-preview/fixtures/public__analytics__ecosystem.json +516 -0
  153. package/scripts/hall-preview/fixtures/public__bounty-table.json +37 -0
  154. package/scripts/hall-preview/fixtures/public__cost-summary.json +742 -0
  155. package/scripts/hall-preview/fixtures/public__estimation-drift.json +41 -0
  156. package/scripts/hall-preview/fixtures/public__grades.json +50 -0
  157. package/scripts/hall-preview/fixtures/public__progress.json +124 -0
  158. package/scripts/hall-preview/fixtures/public__recent-shipped.json +426 -0
  159. package/scripts/hall-preview/fixtures/public__repo-health.json +160 -0
  160. package/scripts/hall-preview/fixtures/public__repo-info.json +5 -0
  161. package/scripts/hall-preview/fixtures/security__docs.json +1 -0
  162. package/scripts/hall-preview/fixtures/security__reports.json +1 -0
  163. package/scripts/hall-preview/fixtures/sessions__search.json +1 -0
  164. package/scripts/hall-preview/fixtures/tasks.json +2420 -0
  165. package/scripts/hall-preview/fixtures/tasks__claimable.json +2555 -0
  166. package/scripts/hall-preview/fixtures/tasks__detail.json +111 -0
  167. package/scripts/hall-preview/fixtures/tasks__peer-votes__feed.json +330 -0
  168. package/scripts/hall-preview/fixtures/versions.json +89 -0
  169. package/scripts/hall-preview/refresh-fixtures.js +77 -0
  170. package/scripts/hall-preview/server.js +178 -0
  171. package/scripts/migrate.sh +29 -4
  172. package/src/bongos/auth.js +14 -1
  173. package/src/bongos/optimizer.js +37 -2
  174. package/src/bongos/serve-internal.js +10 -1
  175. package/src/branding.js +1 -0
  176. package/src/module-api.js +12 -1
  177. package/src/module-loader/loader.js +36 -4
  178. package/src/module-loader/manifest-schema.js +16 -1
  179. package/tests/branding.mjs +11 -0
  180. package/tests/claim_error_surface.mjs +107 -0
  181. package/tests/claude_materialize.mjs +20 -0
  182. package/tests/consumer_layout_boot.mjs +302 -0
  183. package/tests/criterion_suggest.mjs +106 -0
  184. package/tests/cutover_codemod.mjs +184 -0
  185. package/tests/device_flow_start.mjs +25 -2
  186. package/tests/hook_core_resolve.mjs +125 -0
  187. package/tests/infra_exec_paths.mjs +104 -0
  188. package/tests/init.mjs +47 -0
  189. package/tests/migrate_root_resolution.mjs +97 -0
  190. package/tests/mirror_lineage_proof.mjs +14 -0
  191. package/tests/module_loader.mjs +42 -0
  192. package/tests/module_manifest.mjs +19 -0
  193. package/tests/onboard.mjs +13 -0
  194. package/tests/package_core.mjs +8 -0
  195. package/tests/provisioning_github_app_routes.mjs +15 -0
  196. package/tests/publish_manifest.mjs +52 -1
  197. package/tests/run_routine.mjs +26 -1
  198. package/tests/run_routine_two_root.mjs +77 -0
  199. package/tests/scrubber_corpus.mjs +17 -0
  200. package/tests/update_channel.mjs +186 -0
  201. package/tests/upgrade.mjs +131 -0
  202. package/tests/workflow_exec_paths.mjs +98 -0
  203. package/docs/design/container-exterior-tiles.md +0 -49
  204. package/docs/design/container-exterior.md +0 -81
  205. package/docs/design/container-interior.md +0 -77
  206. package/docs/design/world-map-scroll.md +0 -41
  207. package/docs/recipes/claude-gemini-bongos-doors.md +0 -155
  208. package/docs/recipes/cloudbongos-staging-gate.md +0 -139
  209. package/docs/recipes/cloudbongos-standup.md +0 -111
  210. package/docs/recipes/parallel-load-results-2026-05-30.md +0 -63
  211. package/docs/recipes/parallel-load-test.md +0 -32
  212. package/docs/recipes/pixel-art-pipeline.md +0 -411
  213. package/docs/recipes/staging-data.md +0 -50
  214. package/migrations/instance/018_pms_v3_planning_seed.sql +0 -131
  215. package/migrations/instance/080_gds_v4_planning_seed.sql +0 -75
  216. package/migrations/instance/110_medusa_planning_seed.sql +0 -70
  217. package/migrations/instance/120_bongos_v1_planning_seed.sql +0 -69
  218. package/migrations/instance/144_bongos_v1_module_system_criterion.sql +0 -26
  219. package/migrations/instance/159_bongos_v1_goal_hierarchy_criterion.sql +0 -29
  220. package/migrations/instance/172_v2_world_planning_seed.sql +0 -163
  221. package/migrations/instance/173_bongos_v1_c7_core_modularized.sql +0 -33
  222. package/migrations/instance/182_gdsv4_bongos_consolidation.sql +0 -132
  223. package/migrations/instance/183_gdsv4_carryover_themed_goals.sql +0 -116
  224. package/migrations/instance/186_bongos_v1_governance_planning_seed.sql +0 -69
  225. package/scripts/gds/art-stage.js +0 -152
  226. package/server.js +0 -212
  227. package/tests/art_key.mjs +0 -121
  228. package/tests/day_cycle.mjs +0 -197
  229. package/tests/snapshot_picker.mjs +0 -233
  230. package/tests/sprite_facing.mjs +0 -35
  231. package/tests/terrain_picker.mjs +0 -298
  232. package/tests/turn_in_place.mjs +0 -280
  233. package/tests/walkability.mjs +0 -188
@@ -1,131 +0,0 @@
1
- -- PMS-V3 Planning Session #1 seed
2
- -- Applied under claim 166 (task 227, V3.R00 — Planning Session #1).
3
- -- Idempotent on re-run.
4
- --
5
- -- What this migration does:
6
- -- 1. Updates versions.PMS-V3.done_when to match the 9 criteria
7
- -- 2. Seeds 9 done_when_criteria rows for version_id='PMS-V3'
8
- -- 3. Renames the 9 existing PMS-V3 tasks with their V3.R## prefix
9
- -- and sets their priorities per the ranking. Existing descriptions
10
- -- are preserved.
11
- --
12
- -- Net-new tasks (81 of them) are created via scripts/pms/seed-v3-tasks.js
13
- -- which runs after this migration is applied. We split because tasks have
14
- -- rich descriptions and the API handles task_kind classification + foreign-
15
- -- key writes more cleanly than a long SQL VALUES list.
16
-
17
- BEGIN;
18
-
19
- -- Short-circuit guard: migration 019 renames versions.id 'PMS-V3' to 'GDS-V3'.
20
- -- If the rename has already happened (or this DB never had PMS-V3 at all),
21
- -- every statement below is a no-op at best and a FK violation at worst.
22
- -- Skip cleanly so a fresh restore + replay doesn't blow up the deploy.
23
- --
24
- -- We use a CTE-style WHERE-EXISTS guard on each statement (no DO block —
25
- -- DO blocks can't short-circuit the rest of the file). The criteria INSERT
26
- -- is wrapped with a SELECT-driven feed so it naturally produces zero rows
27
- -- when PMS-V3 is absent.
28
-
29
- -- ============================================================================
30
- -- 1. Update versions.PMS-V3.done_when text
31
- -- ============================================================================
32
- UPDATE versions
33
- SET done_when = 'When this is finished, multiple trusted builders will work the city in parallel — onboarded in under two hours, ranked into three tiers, shipping under their own credentials with their own karma alongside their drachmae, judged to the same quality bar, proposing scope into the next planning session, parallel-safe under load, gated by server-enforced permissions, cloneable in full with local-first memory that syncs on every ship, and able to earn drachmae by red-teaming a staging mirror of the city''s walls.'
34
- WHERE id = 'PMS-V3';
35
-
36
- -- ============================================================================
37
- -- 2. Seed 9 done_when_criteria rows for PMS-V3
38
- -- UPSERT semantics via ON CONFLICT (version_id, criterion_id).
39
- -- Outer WHERE EXISTS makes this a no-op when 019 has already renamed
40
- -- PMS-V3 → GDS-V3 (the FK check would otherwise fail).
41
- -- ============================================================================
42
- INSERT INTO done_when_criteria (version_id, criterion_id, criterion_md, sort_order)
43
- SELECT * FROM (VALUES
44
- ('PMS-V3', 'onboarding-2h',
45
- '**Trusted-newcomer onboarding to first shipped task is ≤ 2 hours.** A Metic-tier builder added by Archon today is shipping a real PMS task on `main` within 2 hours, without 1:1 help. Build environment bootstraps from `git clone` + one setup script; docs live outside CLAUDE.md, written for first-time readers; at least one newcomer-friendly task is always open per active version; `/builder-setup` no longer assumes Archon''s machine.',
46
- 1),
47
- ('PMS-V3', 'three-ranks-gate-everything',
48
- '**Three ranks exist, and they gate every privileged operation.** Xenos (default for any GitHub-authed person; read-only on public surfaces + ship only explicitly-tagged-open tasks), Metic (Archon-approved; full claim/ship, planning sessions in proposal mode, idea triage, blocker review, priority sessions), Archon (rank promotion, ratification, version close, infra). `builders.rank` enum + middleware on every privileged route + Archon-only promotion/demotion endpoint + rank visible on /builders hall.',
49
- 2),
50
- ('PMS-V3', 'per-builder-credentials',
51
- '**Every builder ships under their own credentials, with their own cost and authorship.** Per-builder Gemini key registered during `/builder-setup`; per-builder cost ledger entries; authorship in session_logs/claims/commits is the actual builder, never Archon-as-proxy; soft-cap warning before a builder hits their hard cost ceiling; Anthropic account linking via Claude Code self-verification.',
52
- 3),
53
- ('PMS-V3', 'quality-bar-holds',
54
- '**Work shipped by any builder meets the same quality bar Archon''s V2 work did.** Opus-subagent grader replaces the v1 process-audit grader and gates `completed → confirmed`; per-builder × per-kind calibration tightens the bar over time, never loosens; failed confirmations are visible to the builder with actionable feedback written to the learnings table; regressions caught by automation, not by Archon''s eye.',
55
- 4),
56
- ('PMS-V3', 'propose-ratify',
57
- '**Trusted builders propose; Archon ratifies; the cadence is structural.** Metics shape what comes next by surfacing proposals, not by writing system state directly. Planning sessions, priority sessions, idea triage, and blocker review are Metic-runnable; proposed criteria/tasks land in `idea_inbox` tagged with the source builder; Archon ratifies during the next planning session, writing them into `done_when_criteria` and `tasks`; nightly skill-usage feedback loop surfaces friction; builder analytics surface "AI dev curve" per builder; PMS-V4''s done-when criteria are mostly authored by Metic proposals captured during V3.',
58
- 5),
59
- ('PMS-V3', 'parallel-safe-under-load',
60
- '**N>1 builders work in parallel without colliding on claims, merges, or shared system state.** Claim concurrency is deterministic; merge serialization handles drift; scheduled tasks don''t multiplex per-builder state incorrectly; session-scoped hooks move off per-session onto scheduled timers where appropriate; parallel-safety bugs surfaced during V3 get fixed in V3.',
61
- 6),
62
- ('PMS-V3', 'server-enforced-perms',
63
- '**Permissions are enforced server-side; no builder can grant themselves authority by editing local files.** `rank` lives in the database, checked on every privileged request against the DB (no caching, so demotion is effectively instant); skills, hooks, and `.claude/settings.json` cannot grant authority — they can only call into server endpoints that themselves enforce rank; CLAUDE.md and other markdown files describe permissions but are never the source of truth; an ADR documents the trust boundary; a periodic auditor confirms no privileged route is missing a rank check.',
64
- 7),
65
- ('PMS-V3', 'cloneable-local-memory-server-sync',
66
- '**The repo, memory system, art pipeline, and methodology are cloneable by any Metic; memory is local-first, server-canonical on ship.** `git clone` is the onboarding path — no Archon-only handoffs beyond rank assignment. No secrets live in the repo (verified). Each builder''s local memory dir syncs to a server-side per-builder store every time a task ships; learnings remain server-canonical. Cloning the repo never exposes another builder''s local memory. Art pipeline runs end-to-end on a fresh checkout with the builder''s own Gemini key.',
67
- 8),
68
- ('PMS-V3', 'security-baseline-plus-red-team',
69
- '**The server has production-grade security basics, and Metics earn drachmae by red-teaming it.** Input validation, auth-token hygiene, rate limits on write paths, audit logging on privileged routes, dependency-scan in CI — all green before any non-Archon ships. A staging environment mirrors prod. Any Metic can role-play as an attacker on staging; confirmed vulnerabilities are filed by the discoverer and earn drachmae proportional to severity, auto-confirmed by a subagent reproducing the exploit on staging. Reported vulnerabilities are fixed in V3 unless Archon explicitly defers with an ADR. Observability dashboard (Grafana provisioned-as-code) makes regressions visible.',
70
- 9)
71
- ) AS v(version_id, criterion_id, criterion_md, sort_order)
72
- WHERE EXISTS (SELECT 1 FROM versions WHERE id = 'PMS-V3')
73
- ON CONFLICT (version_id, criterion_id) DO UPDATE
74
- SET criterion_md = EXCLUDED.criterion_md,
75
- sort_order = EXCLUDED.sort_order;
76
-
77
- -- ============================================================================
78
- -- 3. Update the 9 existing PMS-V3 task priorities + titles
79
- -- Idempotent guard: only prepend V3.R## prefix when not already there.
80
- -- These UPDATEs are intrinsically safe when PMS-V3 has been renamed:
81
- -- the tasks they reference (by id) may still exist but their version_id
82
- -- is now 'GDS-V3', and the WHERE-clause `id = N AND title NOT LIKE 'V3.R%'`
83
- -- is already idempotent (title prefix was applied on the original run).
84
- -- ============================================================================
85
-
86
- -- V3.R04 — Builder rank system (Tier 1, P5)
87
- UPDATE tasks SET priority = 5,
88
- title = 'V3.R04 — ' || title
89
- WHERE id = 106 AND title NOT LIKE 'V3.R%';
90
-
91
- -- V3.R10 — Per-builder Gemini API key (Tier 1, P5)
92
- UPDATE tasks SET priority = 5,
93
- title = 'V3.R10 — ' || title
94
- WHERE id = 91 AND title NOT LIKE 'V3.R%';
95
-
96
- -- V3.R15 — Seamless builder onboarding umbrella (Tier 1, P5)
97
- UPDATE tasks SET priority = 5,
98
- title = 'V3.R15 — ' || title
99
- WHERE id = 222 AND title NOT LIKE 'V3.R%';
100
-
101
- -- V3.R18 — Replace v1 grader with Opus subagent (Tier 2, P5)
102
- UPDATE tasks SET priority = 5,
103
- title = 'V3.R18 — ' || title
104
- WHERE id = 209 AND title NOT LIKE 'V3.R%';
105
-
106
- -- V3.R19 — Subagent grader v1 (Tier 2, P5)
107
- UPDATE tasks SET priority = 5,
108
- title = 'V3.R19 — ' || title
109
- WHERE id = 201 AND title NOT LIKE 'V3.R%';
110
-
111
- -- V3.R20 — Grader calibration + per-builder × per-kind (Tier 2, P5)
112
- UPDATE tasks SET priority = 5,
113
- title = 'V3.R20 — ' || title
114
- WHERE id = 202 AND title NOT LIKE 'V3.R%';
115
-
116
- -- V3.R21 — Auto-flip confirmed→shipped on merge (Tier 2, P5)
117
- UPDATE tasks SET priority = 5,
118
- title = 'V3.R21 — ' || title
119
- WHERE id = 98 AND title NOT LIKE 'V3.R%';
120
-
121
- -- V3.R46 — version-close.js refusal bug fix (Tier 4, P4)
122
- UPDATE tasks SET priority = 4,
123
- title = 'V3.R46 — ' || title
124
- WHERE id = 224 AND title NOT LIKE 'V3.R%';
125
-
126
- -- V3.R47 — chat-inbox triage off per-session hook (Tier 4, P4)
127
- UPDATE tasks SET priority = 4,
128
- title = 'V3.R47 — ' || title
129
- WHERE id = 220 AND title NOT LIKE 'V3.R%';
130
-
131
- COMMIT;
@@ -1,75 +0,0 @@
1
- -- GDS-V4 Planning Session #1 seed
2
- -- Applied under claim 742 (task 937, V4.R00 — Planning Session #1).
3
- -- Idempotent on re-run.
4
- --
5
- -- What this migration does:
6
- -- 1. Updates versions.GDS-V4 name + done_when to match the 6 criteria
7
- -- 2. Seeds 6 done_when_criteria rows for version_id='GDS-V4'
8
- -- 3. Renames the 2 existing open GDS-V4 carry-over tasks (263, 594) with
9
- -- their V4.R## prefix and sets their priorities per the ranking.
10
- -- Existing descriptions are preserved.
11
- --
12
- -- Net-new tasks (38 of them) are created via scripts/gds/seed-gds-v4-tasks.js
13
- -- which runs after this migration is applied (same split as the V3 planning
14
- -- seed, migration 018: tasks have rich descriptions + dependency wiring that
15
- -- the API handles more cleanly than a long SQL VALUES list).
16
- --
17
- -- Source research: 2026-06-12 retrieval-layer architecture report + BFG
18
- -- session-corpus friction mining (1,349 session_records; ceremony +
19
- -- failed-tool-use taxonomies).
20
-
21
- BEGIN;
22
-
23
- -- ============================================================================
24
- -- 1. Version name + done_when text
25
- -- ============================================================================
26
- UPDATE versions
27
- SET name = 'GDS V4 — recall, resumable pipeline, honest measurement',
28
- done_when = 'When this is finished, a builder''s session answers "have we done this before?" in one call instead of an afternoon — project knowledge (markdown and database prose alike) is searchable in one rank-scoped query and pushed into sessions at claim time; a failed ship is one command from resume instead of a consumed claim; the recurring tool-error classes (wrong-tree writes, HTML 404s, phantom smoke servers) are engineered away; the BFG''s measurements reflect real friction so the improvement is provable against the 2026-06-12 baseline; and the city watches itself on one pane of glass.'
29
- WHERE id = 'GDS-V4';
30
-
31
- -- ============================================================================
32
- -- 2. Seed 6 done_when_criteria rows for GDS-V4
33
- -- UPSERT semantics via ON CONFLICT (version_id, criterion_id).
34
- -- ============================================================================
35
- INSERT INTO done_when_criteria (version_id, criterion_id, criterion_md, sort_order)
36
- SELECT * FROM (VALUES
37
- ('GDS-V4', 'one-call-recall',
38
- '**Project knowledge is answerable in one call.** Any builder session — laptop, dev box, or browser — can ask one question and get back the relevant ADRs, recipes, session logs, learnings, ideas, and task notes, including the database prose nothing can search today. Done when: lexical search is live over repo markdown + DB prose; results are rank- and owner-scoped (Xenos never sees permission-core content; nobody sees another builder''s memory); every result cites its source so the agent can follow up; and a golden-question set mined from real sessions scores ≥80% recall@5 — whether plain text-search or embeddings gets there is decided by measurement, not taste.',
39
- 1),
40
- ('GDS-V4', 'sessions-start-knowing',
41
- '**Sessions start knowing, not hunting.** What a session needs to act correctly is pushed at claim time instead of rediscovered: its worktree root, the claims it holds, the GDS API path prefix and field enums, OS environment facts, the next free ADR/migration number, and the top recall hits for the claimed task. Done when: the guess-and-retry API errors and worktree-path floods measured in the June 2026 corpus stop appearing in new sessions.',
42
- 2),
43
- ('GDS-V4', 'failed-ship-never-strands',
44
- '**A failed ship never strands work.** Drift fails, grade failures, and merge bails leave the task one command from resume — no consumed claims, no reset-and-re-claim dance, no re-running an already-passing grader panel. Done when: a deliberately failed ship is resumed in one command, and claim_consumed_on_fail (which fired in 11 of 11 deep-dived sessions) goes quiet in new sessions.',
45
- 3),
46
- ('GDS-V4', 'machine-room-ergonomics',
47
- '**Sessions stop fighting the machine room.** The recurring tool-error classes are engineered away: cross-tree writes guarded, API 404s/409s answer in JSON with a hint instead of an HTML page, laptop sessions stop smoke-testing against a server that isn''t running. Done when: the wrong-path class (84 hits, #1 in the June 2026 corpus) and its siblings drop measurably in new sessions.',
48
- 4),
49
- ('GDS-V4', 'bfg-measures-what-hurts',
50
- '**The BFG measures what actually hurts.** The session evaluator''s numbers reflect real friction: ceremony is visible on cache-dominated marathon sessions (today they score ~99% efficient), the wrong-path footgun — the corpus''s #1 error class — is detected, harness guardrail retries stop inflating tool-error counts, and corpus coverage is reconciled. Done when: re-running the friction analysis produces numbers trustworthy enough to judge the other criteria.',
51
- 5),
52
- ('GDS-V4', 'one-pane-of-glass',
53
- '**The city watches itself on one pane of glass.** The observability carry-overs land — Grafana dashboards as code, status surface v2 — plus staleness/health visibility for the new search index. Done when: those surfaces are live and the search index cannot silently go stale.',
54
- 6)
55
- ) AS v(version_id, criterion_id, criterion_md, sort_order)
56
- WHERE EXISTS (SELECT 1 FROM versions WHERE id = 'GDS-V4')
57
- ON CONFLICT (version_id, criterion_id) DO UPDATE
58
- SET criterion_md = EXCLUDED.criterion_md,
59
- sort_order = EXCLUDED.sort_order;
60
-
61
- -- ============================================================================
62
- -- 3. Re-prefix + re-prioritize the 2 existing open carry-over tasks.
63
- -- Guarded so re-runs (and already-renamed rows) are no-ops.
64
- -- ============================================================================
65
- UPDATE tasks
66
- SET title = 'V4.R28 — ' || regexp_replace(title, '^V\d+\.R\d+\s*—\s*', ''),
67
- priority = 3
68
- WHERE id = 263 AND version_id = 'GDS-V4' AND title NOT LIKE 'V4.R%';
69
-
70
- UPDATE tasks
71
- SET title = 'V4.R29 — ' || regexp_replace(title, '^V\d+\.R\d+\s*—\s*', ''),
72
- priority = 3
73
- WHERE id = 594 AND version_id = 'GDS-V4' AND title NOT LIKE 'V4.R%';
74
-
75
- COMMIT;
@@ -1,70 +0,0 @@
1
- -- GDS-V4 Medusa Planning Session seed (2026-06-17)
2
- -- Applied under claim 982 (task 1188 — "V4 — Medusa Planning Session").
3
- -- Idempotent on re-run.
4
- --
5
- -- Adds the "Medusa" scope to GDS-V4: decouple the GDS from the Amazonprimea
6
- -- game into a standalone, configurable, self-hostable, AGPL open-source,
7
- -- non-profit, AI-first build platform. Amazonprimea becomes instance 1.
8
- --
9
- -- What this migration does:
10
- -- 1. Appends a Medusa clause to versions.GDS-V4 done_when (guarded so it
11
- -- only appends once).
12
- -- 2. Seeds 2 done_when_criteria rows (C8 + C9) for version_id='GDS-V4'
13
- -- at sort_order 8 and 9 (after the 7 existing criteria).
14
- --
15
- -- Net-new tasks (R50–R73, 24 of them) are created via
16
- -- scripts/gds/seed-medusa-tasks.js which runs AFTER this migration is applied,
17
- -- so the positional "C8"/"C9" criterion refs resolve. Same split as the
18
- -- V4 Planning Session #1 seed (migration 080 + seed-gds-v4-tasks.js).
19
- --
20
- -- Locked owner decisions (this session): one project per install (no
21
- -- multi-tenant project_id retrofit); migrate in place (OTB = instance 1, live
22
- -- prod never breaks); AGPL-3.0 (anti-monopoly); keep the Greek rank ladder
23
- -- (xenos<thetes<metic<archon) as the canonical enum (no rename); branding is a
24
- -- per-instance config layer an owner's own LLM fills; feature-module selection
25
- -- per instance; self-host canonical, managed hosting an optional later layer;
26
- -- mobile contribution deferred to a later version; AI-first as a documented
27
- -- norm (not a technical gate).
28
- --
29
- -- Source: 2026-06-17 Medusa decoupling codebase sweep (8-dimension audit +
30
- -- synthesis + critique).
31
-
32
- BEGIN;
33
-
34
- -- ============================================================================
35
- -- 1. Append a Medusa clause to the version-level done_when (once only).
36
- -- ============================================================================
37
- UPDATE versions
38
- SET done_when = done_when ||
39
- ' And the build system itself becomes Medusa — a standalone, configurable, self-hostable, AGPL-licensed, non-profit, AI-first platform decoupled from any one project, with Amazonprimea running as its first instance.'
40
- WHERE id = 'GDS-V4'
41
- AND done_when NOT LIKE '%Medusa%';
42
-
43
- -- ============================================================================
44
- -- 2. Seed the 2 Medusa done_when_criteria rows for GDS-V4 (C8 + C9).
45
- -- UPSERT via ON CONFLICT (version_id, criterion_id).
46
- -- sort_order 8/9 → positional refs "C8"/"C9" for the seed script.
47
- -- ============================================================================
48
- INSERT INTO done_when_criteria (version_id, criterion_id, criterion_md, sort_order)
49
- SELECT * FROM (VALUES
50
- ('GDS-V4', 'medusa-standalone-instance',
51
- '**Medusa runs as a configurable, self-hostable, branded instance — Amazonprimea is instance 1.** The build system is no longer a fixture of the game: it boots with no game code in the process, runs on its own database, and takes its identity, branding, and feature selection from per-instance config — Amazonprimea becomes instance 1, its surfaces (status/builders) unchanged because their look now comes from config rather than hard-coding. Done when: a Medusa-only entrypoint boots with no Colyseus/Phaser/game routes; a fresh instance''s database holds only build-system tables (game tables only when the game module is enabled); one command (docker compose) stands an instance up with zero hard-coded server IP / service name / deploy script; product name, domain, sign-in origin, repo binding, currency label and the full branding pack resolve from one config with a neutral starter an owner''s own LLM fills; the first admin is set at install time, not in a migration; core carries no hard-coded project branding (the deploy-time diagram generator reads instance branding too; Greek rank names stay by decision); an instance turns feature modules (game, art pipeline, Discord, dev boxes) on/off; an instance declares its core version and `medusa upgrade` applies new migrations + code while preserving instance config; and a second, differently-branded non-game instance is created via a generic init flow and ships one task claim->grade->ship end-to-end. Live Amazonprimea is unaffected throughout.',
52
- 8),
53
- ('GDS-V4', 'medusa-open-and-protected',
54
- '**Medusa is open, free, and protected from capture.** The platform is released to the public as open source on a deliberate delay so the live edge stays ahead of would-be cloners, under a license that stops a company from running a closed hosted fork, with non-profit, AI-first governance so it cannot be quietly captured. Done when: an AGPL-3.0 LICENSE ships in the repo; a public mirror repository carries only the publishable subset (the build system — not the game, infra secrets, or trust-boundary internals); an automated pipeline publishes to the mirror on a ~6-month delay with a redaction layer that strips secrets and prod topology even from old commits; GOVERNANCE, CONTRIBUTING, and CODE_OF_CONDUCT define the non-profit, AI-first (AI always writes the code) anti-monopoly stance; and the private<->public lineages stay consistent (migration numbering and enum values do not diverge), verified by a no-leak check on the published mirror.',
55
- 9)
56
- ) AS v(version_id, criterion_id, criterion_md, sort_order)
57
- WHERE EXISTS (SELECT 1 FROM versions WHERE id = 'GDS-V4')
58
- ON CONFLICT (version_id, criterion_id) DO UPDATE
59
- SET criterion_md = EXCLUDED.criterion_md,
60
- sort_order = EXCLUDED.sort_order;
61
-
62
- -- ============================================================================
63
- -- 3. Self-register so migrate.sh skips this file on the next deploy (it was
64
- -- hot-applied via psql under the planning session). ON CONFLICT keeps it
65
- -- safe if migrate.sh also registers it.
66
- -- ============================================================================
67
- INSERT INTO schema_migrations (version) VALUES ('110_medusa_planning_seed')
68
- ON CONFLICT DO NOTHING;
69
-
70
- COMMIT;
@@ -1,69 +0,0 @@
1
- -- Bongos App — V1 planning seed (2026-06-20)
2
- -- Owner-directed (archon). Idempotent on re-run.
3
- --
4
- -- Creates a NEW version line: BONGOS-V1 — the inaugural version of the "bongos"
5
- -- platform line. Strategic intent (owner): bongos is the successor to the GDS;
6
- -- the GDS deprecates after GDS-V4 and its infra/build-out migrates into bongos.
7
- -- What V1 SHIPS is the Cloud Bongos desktop "Feedback Capture" tool: a Zoom-style
8
- -- floating toolbar that captures narrated voice + ~1/sec snapshots and freehand
9
- -- markup over ANY on-screen target, synthesizes them into one cheap, model-agnostic
10
- -- prompt, and hands it to Claude Desktop + Claude Code. The existing Dev Box
11
- -- desktop app (ADR 0045) is absorbed as a module of the bongos app (reusing its
12
- -- Apple cert + distribution pipeline). Visual element-select is deferred to V2.
13
- --
14
- -- What this migration does:
15
- -- 1. INSERT the BONGOS-V1 versions row (track=internal, status=planning).
16
- -- 2. Seed 4 done_when_criteria (C1..C4) at sort_order 1..4.
17
- -- Net-new tasks (R01..R17) are created AFTER this is applied via
18
- -- scripts/gds/seed-bongos-app-tasks.js, so the positional C1..C4 refs resolve.
19
- -- (Same split as migration 110 + seed-medusa-tasks.js.)
20
-
21
- BEGIN;
22
-
23
- -- ============================================================================
24
- -- 1. Create the BONGOS-V1 version row.
25
- -- ============================================================================
26
- INSERT INTO versions (id, name, track, status, scope_doc_path, done_when, started_at)
27
- VALUES (
28
- 'BONGOS-V1',
29
- 'Bongos App — V1',
30
- 'internal',
31
- 'planning',
32
- 'limitations/bongos-v1.md',
33
- 'Bongos App V1 ships the Cloud Bongos desktop feedback tool: a Zoom-style floating toolbar that captures narrated voice + ~1/sec snapshots and freehand markup over any on-screen target, synthesizes them into one cheap, model-agnostic prompt, and hands it to Claude Desktop and Claude Code. The Dev Box desktop app is absorbed as a module of the bongos app. This is the inaugural version of the bongos line, the successor the GDS migrates into after GDS-V4. Visual element-select is deferred to V2.',
34
- now()
35
- )
36
- ON CONFLICT (id) DO NOTHING;
37
-
38
- -- ============================================================================
39
- -- 2. Seed the 4 done_when_criteria (C1..C4). UPSERT on (version_id, criterion_id).
40
- -- sort_order 1..4 -> positional refs C1..C4 for the seed script.
41
- -- ============================================================================
42
- INSERT INTO done_when_criteria (version_id, criterion_id, criterion_md, sort_order)
43
- SELECT * FROM (VALUES
44
- ('BONGOS-V1', 'signed-installable',
45
- '**Signed, installable, and permission-guided on Mac + Windows.** A code-signed, notarized macOS build and a signed Windows build install from a branded download and launch as a floating menu-bar/tray app, reusing the existing Dev Box app distribution + Apple Developer ID; the Dev Box switch is absorbed as a module of the bongos app rather than shipping as a separate install. Done when: the bongos app is one Electron app that contains the prior Dev Box functionality as a module; a signed+notarized Mac build and a signed Windows build install from the branded /downloads redirect and auto-update; a first-run permission wizard detects + deep-links Screen Recording and Microphone grants with live grant-state; and an unsigned dev-build path exists for local iteration.',
46
- 1),
47
- ('BONGOS-V1', 'captures-anywhere',
48
- '**Captures narrated feedback over any on-screen target.** The floating toolbar overlays any window (the Zoom annotation model) and records the microphone plus time-aligned ~1/sec snapshots of the chosen target, with freehand/box/arrow/text markup and a freeze-frame, on macOS and Windows. Done when: a transparent, always-on-top, click-through overlay draws over arbitrary other apps (surviving macOS fullscreen/Spaces and Windows multi-monitor DPI); a global hotkey summons/dismisses the bar; Record captures mic + the chosen window/screen at ~1/sec with snapshot-on-change + perceptual dedup + a frame cap; and Markup draws and freezes over any pixels.',
49
- 2),
50
- ('BONGOS-V1', 'cheap-complete-synthesis',
51
- '**Synthesizes one cheap, complete, model-agnostic prompt.** The capture is fused into a single LLM-ready bundle at a disciplined token envelope — frames dominate cost, so audio is transcribed on-device to text and frames are deduped + salience-escalated rather than sent 1/sec at full resolution. Done when: on-device transcription (whisper.cpp) yields word-timestamped text; transcript and frames are time-aligned and only transcript/markup-flagged frames escalate to full resolution; a deterministic prompt.md is assembled with inlined absolute image paths; and a typical multi-minute session lands at the disciplined envelope (~5-11k tokens), not the ~70k+ naive cost.',
52
- 3),
53
- ('BONGOS-V1', 'lands-in-claude',
54
- '**Lands in Claude — Desktop and Code — reliably and model-agnostically.** The synthesized bundle reaches both Claude surfaces without a fragile step, under a documented contract that works for any agent. Done when: a file-bundle handoff (prompt.md + image files) plus clipboard text works for Claude Desktop; a /feedback path injects the prompt and loads the image paths in Claude Code; an optional local stdio MCP server exposes the latest bundle for a hands-free pull; and an ADR + README document the architecture and the model-agnostic prompt/handoff contract.',
55
- 4)
56
- ) AS v(version_id, criterion_id, criterion_md, sort_order)
57
- WHERE EXISTS (SELECT 1 FROM versions WHERE id = 'BONGOS-V1')
58
- ON CONFLICT (version_id, criterion_id) DO UPDATE
59
- SET criterion_md = EXCLUDED.criterion_md,
60
- sort_order = EXCLUDED.sort_order;
61
-
62
- -- ============================================================================
63
- -- 3. Self-register so migrate.sh skips this file on the next deploy (it is
64
- -- hot-applied via psql under this planning seed).
65
- -- ============================================================================
66
- INSERT INTO schema_migrations (version) VALUES ('120_bongos_v1_planning_seed')
67
- ON CONFLICT DO NOTHING;
68
-
69
- COMMIT;
@@ -1,26 +0,0 @@
1
- -- BONGOS-V1 — module-system done-when criterion (C5) — 2026-06-21
2
- -- Owner-directed (archon), task 1405 (BV1.R36) / ADR 0083.
3
- --
4
- -- Adds a 5th done_when_criterion to BONGOS-V1: the project-extensible module
5
- -- system (the design scoped in docs/design/modular-architecture/, epic #1388 /
6
- -- BV1.R34). The module-system child tasks are seeded AFTER this is applied via
7
- -- scripts/gds/seed-bongos-module-system-tasks.js, so the positional ref C5
8
- -- resolves at task-create. (Same migration+seed split as 120 + seed-bongos-app-tasks.js.)
9
- --
10
- -- Idempotent on re-run: UPSERT on (version_id, criterion_id). The companion
11
- -- migration 120 already seeded C1..C4 (sort_order 1..4); this adds sort_order 5.
12
-
13
- BEGIN;
14
-
15
- INSERT INTO done_when_criteria (version_id, criterion_id, criterion_md, sort_order)
16
- SELECT * FROM (VALUES
17
- ('BONGOS-V1', 'module-system-live',
18
- '**The project-extensible module system is live — the whole product is `core + modules`.** Cloud Bongos''s closed four-module registry becomes self-describing packages the platform discovers, validates, and mounts; a host can ADD or CONFIGURE modules without forking core, and the trust boundary (ADR 0016) is ENFORCED across module routes, not trusted. Built as an incremental strangler migration (ADR 0083) — reorganize, not rewrite; single-package, single-process, no-bundler preserved. Done when: (1) `src/module-api.js` is the stable, semver''d doorway and the only core file a module may import; (2) a loader discovers/validates/mounts `modules/*/module.json` behind kernel-composed auth and replaces the hardcoded `KNOWN_MODULES` registry, with a kernel seam registry (ports + events) for cross-module capability; (3) the four feature modules (dev-box, game, discord, art-pipeline) are moved into `modules/<key>/` and the inline `if (isModuleEnabled())` gates are deleted, with OTB behaving byte-identically (the proof); (4) fitness functions fail the build on any boundary violation (core never imports a module, modules import only the published API, every module write-route is rank-gated, core carries no module code, module migrations are additive + namespaced); (5) module-owned migrations generalize the `migrations/game/` precedent to `modules/<key>/migrations/` (enabled-gated apply, disable-preserves-data); (6) `bongos module new <key>` scaffolds a module and `bongos upgrade` pre-checks coreVersion; and (7) docs/modules-contract.md documents the plugin-API contract + a module-author recipe.',
19
- 5)
20
- ) AS v(version_id, criterion_id, criterion_md, sort_order)
21
- WHERE EXISTS (SELECT 1 FROM versions WHERE id = 'BONGOS-V1')
22
- ON CONFLICT (version_id, criterion_id) DO UPDATE
23
- SET criterion_md = EXCLUDED.criterion_md,
24
- sort_order = EXCLUDED.sort_order;
25
-
26
- COMMIT;
@@ -1,29 +0,0 @@
1
- -- BONGOS-V1 — goal-scoped-work-hierarchy done-when criterion (C6) — 2026-06-24
2
- -- Owner-directed (archon), task 1507 / ADR 0086 (docs/adr/0086-goal-scoped-work-hierarchy.md).
3
- --
4
- -- Adds a 6th done_when_criterion to BONGOS-V1: the goal-scoped work hierarchy —
5
- -- assign module-scoped GOALS, not individual tasks, and let a goal's members
6
- -- author their own tasks within the goal's module wall, enforced server-side.
7
- -- A criterion cluster ALONGSIDE the ADR 0083 module work (C5). The build tasks
8
- -- (BV1.R54..R66, the ADR's Phases 1-4 + a deferred Phase-5 ADR spike + the live
9
- -- proof) are seeded AFTER this is applied via
10
- -- scripts/gds/seed-bongos-goal-hierarchy-tasks.js, so the positional ref C6
11
- -- resolves at task-create (same migration+seed split as 144 + the module seed).
12
- --
13
- -- Idempotent on re-run: UPSERT on (version_id, criterion_id). Migrations 120/144
14
- -- already seeded C1..C5 (sort_order 1..5); this adds sort_order 6.
15
-
16
- BEGIN;
17
-
18
- INSERT INTO done_when_criteria (version_id, criterion_id, criterion_md, sort_order)
19
- SELECT * FROM (VALUES
20
- ('BONGOS-V1', 'goal-scoped-work-hierarchy',
21
- '**Builders are assigned module-scoped goals, not individual tasks — and can author their own work within a goal''s wall, enforced server-side.** The owner stops hand-authoring every task; a builder joins a shared, module-scoped goal and gains bounded authority to create + organize tasks beneath it, never exceeding the goal''s module scope or touching the protected core. The six-tier hierarchy (Project → Version → Goal → Criteria → Task → Sub-task) is a per-instance config preset; enforcement is core (ADR 0086, building on ADR 0016/0043/0049/0083/0084). Done when: (1) a module-scope map (`module-scope-map.js`, importing `PROTECTED_GLOBS`) + a configurable hierarchy preset (`config/hierarchy.json` + `hierarchy-config.js`, onboarding-edited) exist; (2) a `goals` tier (shared, joinable, `scope_modules`) sits between versions and criteria, `done_when_criteria` re-parent under goals (backfilled under a per-version default goal), and `tasks` carry `goal_id`, with the `/status` rollup running Version → Goals → Criteria → Tasks; (3) a goal member can author a task via `POST /goals/:id/tasks` only if it is scope-subset + clears the protected-path gate + the auto-derived rank floor, with two fitness checks (goal routes pinned in `route-rank-check`; scope code imports `PROTECTED_GLOBS`) and an abuse-matrix test proving the wall holds; (4) a polymorphic dependency edge spans tasks/goals/criteria and resolves at the existing claim gate, a criterion auto-flags "met — pending review" when its tasks ship, a `/goal-review` cadence (Metic+) confirms → auto-achieves goals, and goals archive/reopen/carry-forward at rescope; and (5) a sub-Metic builder demonstrably authors, claims, and ships a task inside an assigned goal while being BLOCKED server-side from authoring one that touches a protected path outside scope (the live proof). Phase 5 of the ADR (an AI relevance judge + sub-Metic membership inside protected-scope goals) is deferred to its own security-reviewed ADR.',
22
- 6)
23
- ) AS v(version_id, criterion_id, criterion_md, sort_order)
24
- WHERE EXISTS (SELECT 1 FROM versions WHERE id = 'BONGOS-V1')
25
- ON CONFLICT (version_id, criterion_id) DO UPDATE
26
- SET criterion_md = EXCLUDED.criterion_md,
27
- sort_order = EXCLUDED.sort_order;
28
-
29
- COMMIT;
@@ -1,163 +0,0 @@
1
- -- 172_v2_world_planning_seed.sql
2
- -- Land Builder #25's world-building planning package (idea_inbox 416-427),
3
- -- reviewed + adjusted with Lars, folded into the existing product version V2.
4
- -- Backed by task 1569 (source_ref V2-world-planning-1).
5
- --
6
- -- Decisions baked in here:
7
- -- * World-building folds into V2 — NO new version row.
8
- -- * The warp stays in V2 (criterion connected-warps + its tasks).
9
- -- * The in-house map editor (criterion map-editor + 6 tasks) defers to V3.
10
- -- * Engineering/server lanes are split from design/art lanes (carried by the
11
- -- per-task module_key + requires_rank set in the companion seed script).
12
- --
13
- -- This migration handles DB scope-truth only:
14
- -- 1. 4 goals (3 on V2, 1 on V3)
15
- -- 2. 7 done_when_criteria (6 on V2, 1 on V3), parented to their goals
16
- -- 3. V2 + V3 versions.done_when text
17
- -- 4. +5 karma x7 to builder #25 (the proposer), mirroring ratify
18
- -- 5. idea_inbox bookkeeping (416-424 resolved; 427 left open as the durable
19
- -- world-expansion reference)
20
- --
21
- -- The 16 V2 + 6 V3 + 2 GDS-V4 tasks (with deps + criterion links) are created
22
- -- by scripts/gds/seed-v2-world-tasks.js, run against the API after this deploys.
23
- --
24
- -- Idempotent: goals guarded by NOT EXISTS (version_id,title); criteria via
25
- -- ON CONFLICT (version_id,criterion_id); karma via NOT EXISTS on a per-idea
26
- -- reason marker; idea updates are naturally idempotent.
27
-
28
- BEGIN;
29
-
30
- -- Vanilla-safe guard (task 1264 / hardware-verify R63): everything below seeds
31
- -- OTB *product* scope-truth (V2/V3 game-world planning). A vanilla Cloud Bongos
32
- -- instance has no V2/V3 version rows — no migration seeds them (they were created
33
- -- via the API on the OTB instance) — so each INSERT below would violate the
34
- -- versions foreign key on a fresh DB. Wrap the seed in a DO block that no-ops
35
- -- unless the product versions exist. (On the OTB instance this migration is
36
- -- already recorded in schema_migrations and never re-runs; the guard only bites
37
- -- on a fresh self-host DB — see docker-compose.yml / self-host.)
38
- DO $seed$
39
- BEGIN
40
- IF NOT EXISTS (SELECT 1 FROM versions WHERE id IN ('V2','V3')) THEN
41
- RAISE NOTICE '172: V2/V3 product versions absent — vanilla instance, skipping OTB world-planning seed.';
42
- RETURN;
43
- END IF;
44
-
45
- -- ---------------------------------------------------------------------------
46
- -- 1. Goals (module-scoped workspaces, ADR 0086). created_by = 1 (Archon land).
47
- -- ---------------------------------------------------------------------------
48
- INSERT INTO goals (version_id, title, description, scope_modules, status, created_by)
49
- SELECT 'V2', 'World engine (multi-map runtime)',
50
- 'File-based maps, depth rendering, and per-map warp rooms. Engineering — touches protected game code (Metic+).',
51
- ARRAY['game']::text[], 'open', 1
52
- WHERE NOT EXISTS (SELECT 1 FROM goals WHERE version_id='V2' AND title='World engine (multi-map runtime)');
53
-
54
- INSERT INTO goals (version_id, title, description, scope_modules, status, created_by)
55
- SELECT 'V2', 'Olympia art set',
56
- 'Terrain, temple kit, and decor for Olympia on the locked 64-color palette. Design — art pipeline, open to any builder.',
57
- ARRAY['art-pipeline']::text[], 'open', 1
58
- WHERE NOT EXISTS (SELECT 1 FROM goals WHERE version_id='V2' AND title='Olympia art set');
59
-
60
- INSERT INTO goals (version_id, title, description, scope_modules, status, created_by)
61
- SELECT 'V2', 'Olympia vertical slice',
62
- 'Compose the walkable Olympia map from engine + art, second connected map, and score vs the reference.',
63
- ARRAY['game']::text[], 'open', 1
64
- WHERE NOT EXISTS (SELECT 1 FROM goals WHERE version_id='V2' AND title='Olympia vertical slice');
65
-
66
- INSERT INTO goals (version_id, title, description, scope_modules, status, created_by)
67
- SELECT 'V3', 'Map authoring & editor',
68
- 'In-house map editor that round-trips maps into the game. Deferred out of V2; depends on the V2 engine shipping first.',
69
- ARRAY['game']::text[], 'open', 1
70
- WHERE NOT EXISTS (SELECT 1 FROM goals WHERE version_id='V3' AND title='Map authoring & editor');
71
-
72
- -- ---------------------------------------------------------------------------
73
- -- 2. done_when_criteria, parented to the goals above. criterion_md text is
74
- -- lifted verbatim from the ratified proposals (ideas 416-422).
75
- -- ---------------------------------------------------------------------------
76
- INSERT INTO done_when_criteria (version_id, criterion_id, criterion_md, sort_order, goal_id)
77
- VALUES
78
- ('V2', 'world-data',
79
- E'**The world loads from per-map data files, not hardcoded arrays — one source feeds both client render and server collision.**\n\n*Why:* retires the hand-mirrored map twins (`public/game/world/map.js` ↔ `src/world/map.js`, today''s top drift risk) and makes hand-designed maps possible.\n\n- A documented JSON map format at `public/assets/maps/<id>.json` with layers: ground (dense, drives autotile), decoration, objects, overlay; plus structures, warps, spawns.\n- A single shared parse + collision module (`mapFormat.js`) used by client and server; no duplicated map data.\n- Collision is *derived* from layers + structure solid-cells (generalizes today''s blocking-terrain / blocking-object rule).\n- ADR 0012 invariant intact: objects never pollute the ground autotile picker.\n- Today''s 26×20 room round-trips through the new format with identical render + walkability.',
80
- 100, (SELECT id FROM goals WHERE version_id='V2' AND title='World engine (multi-map runtime)')),
81
-
82
- ('V2', 'walk-olympia',
83
- E'**A player can walk the Olympia Sanctuary in-game at the fidelity of the reference art.**\n\n*Why:* the vertical slice that proves the whole art + rendering direction before any expansion.\n\n- Temple of Zeus, Temple of Hera, the Altis grove, the plaza, and the stadium frontage are present and recognizable from the reference sheets.\n- The camera follows the player and scrolls a map larger than the viewport (canvas no longer equals map size).\n- Movement stays client-predicted / server-authoritative.\n- The scene is staged on the sandbox and walkable end-to-end.',
84
- 200, (SELECT id FROM goals WHERE version_id='V2' AND title='Olympia vertical slice')),
85
-
86
- ('V2', 'depth-sort',
87
- E'**Tall structures render with correct depth — the player passes behind their tops and in front of their bases.**\n\n*Why:* 3/4-tilt temples, columns, and statues look wrong under today''s flat depth-0/1 layering.\n\n- 2.5D y-sort: player-plane objects and all character sprites share `depth = base*1000 + footY`.\n- An always-above overlay band carries structure tops (column capitals, roof crowns).\n- Reconciled with the existing autotile + interior-tile transform render path.\n- No z-fighting within a single structure''s footprint.',
88
- 300, (SELECT id FROM goals WHERE version_id='V2' AND title='World engine (multi-map runtime)')),
89
-
90
- ('V2', 'connected-warps',
91
- E'**At least two connected maps with working warps — the player crosses between areas server-authoritatively.**\n\n*Why:* the classic Pokémon world model (overworld → enterable complex) the reference implies.\n\n- `mapId` in player state; one Colyseus room instance per map; per-map seating + queue.\n- Warp points move the player between maps at named spawns.\n- The 100-cap becomes per-map (overworld overflow can''t block Olympia).\n- Warping into a full destination map degrades gracefully (queue handoff).',
92
- 400, (SELECT id FROM goals WHERE version_id='V2' AND title='World engine (multi-map runtime)')),
93
-
94
- ('V2', 'olympia-art-set',
95
- E'**The Olympia art set exists and passes the rubric on the locked 64-color palette.**\n\n*Why:* the slice cannot render without the terrain, building, and decor assets.\n\n- Terrain: marble plaza / flagstone, stone & cliff, river / water, forest + palm, grass variants — as autotile families where they tile.\n- Temple building kit: walls, columns / colonnade, orange-tile roof slopes, steps — authored as Pattern-B continuous illustrations sliced to the structure registry.\n- Decor: Zeus / Hera statues, altar-with-fire, amphorae, fountains.\n- All members land in the packed atlas + manifest; `tests/autotile_xverify.mjs` stays green.',
96
- 500, (SELECT id FROM goals WHERE version_id='V2' AND title='Olympia art set')),
97
-
98
- ('V2', 'scored-vs-reference',
99
- E'**The Olympia slice is scored against the reference images, and the reference becomes the durable target.**\n\n*Why:* closes the loop — proves the criterion set actually produced the intended look.\n\n- The four reference sheets are ingested into `art/references/` as the durable target.\n- `otb-design-review` scores the new tiles ≥ the rubric threshold.\n- A before/after writeup lands in `docs/reviews/` with side-by-side screenshots vs the reference.',
100
- 700, (SELECT id FROM goals WHERE version_id='V2' AND title='Olympia vertical slice')),
101
-
102
- ('V3', 'map-editor',
103
- E'**A lightweight in-house map editor lets a builder author maps that round-trip into the game.**\n\n*Why:* hand-editing JSON for scenes the size of Olympia doesn''t scale.\n\n- Paint ground with *live autotile preview* (imports the game''s `terrain.js`/`autotile.js` picker — no new autotile code).\n- Place objects + multi-tile structures; set warps, spawns, collision.\n- Save a valid map file (validated by the same `mapFormat` validator), persisted via the deploy-safe path (branch/PR per the save-model spike).\n- A map authored in the editor loads and plays in the game unchanged.',
104
- 50, (SELECT id FROM goals WHERE version_id='V3' AND title='Map authoring & editor'))
105
- ON CONFLICT (version_id, criterion_id) DO UPDATE
106
- SET criterion_md = EXCLUDED.criterion_md,
107
- sort_order = EXCLUDED.sort_order,
108
- goal_id = EXCLUDED.goal_id;
109
-
110
- -- ---------------------------------------------------------------------------
111
- -- 3. Version done_when text (broaden V2 to cover the walkable world; note the
112
- -- editor carry on V3).
113
- -- ---------------------------------------------------------------------------
114
- UPDATE versions
115
- SET done_when = 'Other players are visible in a real, walkable world: a player walks the Olympia Sanctuary in-game at reference-art fidelity, with file-based multi-layer maps feeding both client render and server collision, correct depth-sorting on tall structures, at least two connected maps with server-authoritative warps, and the Olympia art set passing the rubric on the locked palette.'
116
- WHERE id = 'V2';
117
-
118
- UPDATE versions
119
- SET done_when = COALESCE(done_when, '') ||
120
- E'\n\nAlso (folded in from the world-building plan): a lightweight in-house map editor lets a builder author maps that round-trip into the game (depends on the V2 world engine shipping first).'
121
- WHERE id = 'V3'
122
- AND done_when NOT LIKE '%in-house map editor%';
123
-
124
- -- ---------------------------------------------------------------------------
125
- -- 4. Karma to the proposer (#25), mirroring the ratify path (+5 each, x7).
126
- -- Guarded per-idea so a re-run can't double-credit.
127
- -- ---------------------------------------------------------------------------
128
- INSERT INTO karma_log (builder_id, delta, reason, granted_by)
129
- SELECT 25, 5, m.reason, 1
130
- FROM (VALUES
131
- ('proposal_ratified:idea-416'),
132
- ('proposal_ratified:idea-417'),
133
- ('proposal_ratified:idea-418'),
134
- ('proposal_ratified:idea-419'),
135
- ('proposal_ratified:idea-420'),
136
- ('proposal_ratified:idea-421'),
137
- ('proposal_ratified:idea-422')
138
- ) AS m(reason)
139
- WHERE NOT EXISTS (
140
- SELECT 1 FROM karma_log k WHERE k.builder_id = 25 AND k.reason = m.reason
141
- );
142
-
143
- -- ---------------------------------------------------------------------------
144
- -- 5. idea_inbox bookkeeping.
145
- -- 416-422 (criterion proposals) + 424 (the umbrella) -> promoted.
146
- -- 423 (superseded umbrella v1) -> discarded.
147
- -- 427 (reference manifest, future world-scale) -> LEFT OPEN on purpose as
148
- -- the durable expansion reference; 425/426 are promoted by the seed.
149
- -- ---------------------------------------------------------------------------
150
- UPDATE idea_inbox
151
- SET status = 'promoted', reviewed_at = now()
152
- WHERE id IN (416,417,418,419,420,421,422,424)
153
- AND status = 'open';
154
-
155
- UPDATE idea_inbox
156
- SET status = 'discarded', reviewed_at = now()
157
- WHERE id = 423
158
- AND status = 'open';
159
-
160
- END
161
- $seed$;
162
-
163
- COMMIT;
@@ -1,33 +0,0 @@
1
- -- 173_bongos_v1_c7_core_modularized.sql
2
- -- Adds BONGOS-V1 criterion C7 (gds-core-modularized) — the "Config B" core
3
- -- decomposition wave seeded by planning session 2026-06-26 (task 1567).
4
- -- The four feature modules (C5) shipped; this criterion owns breaking the GDS
5
- -- *core* into kernel-mediated modules. Parented under goal 10 (GDS core
6
- -- modularization). Idempotent on the (version_id, criterion_id) unique key.
7
- -- Vanilla-safe guard (task 1264 / hardware-verify R63): this criterion parents to
8
- -- goal id 10 (OTB's "GDS core modularization" goal). Goal ids aren't migration-seeded,
9
- -- so a fresh self-host DB has no goal #10 and this INSERT would violate the goal_id
10
- -- foreign key. Skip unless that goal exists. (Already applied on the OTB instance;
11
- -- guard only bites on a fresh vanilla DB.)
12
- DO $c7$
13
- BEGIN
14
- IF NOT EXISTS (SELECT 1 FROM goals WHERE id = 10) THEN
15
- RAISE NOTICE '173: goal 10 (GDS core modularization) absent — vanilla instance, skipping BONGOS-V1 C7 criterion seed.';
16
- RETURN;
17
- END IF;
18
-
19
- INSERT INTO done_when_criteria (version_id, criterion_id, criterion_md, sort_order, goal_id)
20
- VALUES (
21
- 'BONGOS-V1',
22
- 'gds-core-modularized',
23
- '**The GDS core is itself decomposed into cohesive, kernel-mediated modules — not just the four feature modules.** A bounded ~3.5k-LOC kernel (auth · rank · pool · audit · trust primitives · loader · seams) is the *only* thing core domains import, through the published doorway; the ~6k-LOC shared `db.js` is carved per-domain so each module owns its SQL; capabilities the lifecycle invokes (grade, reward) resolve through kernel **ports**, never direct imports. **Proven when ≥2 core domains live as modules with their `db.js` slices extracted, the kernel is bounded + fitness-enforced, and OTB behaves byte-identically.** The lifecycle state machine (tasks/claims/versions) is NOT split — only the capabilities it calls are extracted behind seams. (ADR 0083 §"the four module moves" + design doc 02-module-map.md §3/§6; planning 2026-06-26, task 1567.)',
24
- 7,
25
- 10
26
- )
27
- ON CONFLICT (version_id, criterion_id) DO UPDATE
28
- SET criterion_md = EXCLUDED.criterion_md,
29
- sort_order = EXCLUDED.sort_order,
30
- goal_id = EXCLUDED.goal_id;
31
-
32
- END
33
- $c7$;