@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
@@ -0,0 +1,184 @@
1
+ {
2
+ "leaderboard": [
3
+ {
4
+ "id": "1",
5
+ "github_login": "lars589",
6
+ "display_name": "lars589",
7
+ "avatar_url": "https://avatars.githubusercontent.com/u/283020391?v=4",
8
+ "total_credits": 38644,
9
+ "karma": 10,
10
+ "rank": "archon",
11
+ "achievements": [
12
+ "first-ship",
13
+ "first-claim",
14
+ "first-parallel-claim",
15
+ "streak-3",
16
+ "streak-7"
17
+ ],
18
+ "tokens_used": "38866453596"
19
+ },
20
+ {
21
+ "id": "95",
22
+ "github_login": "jaxri",
23
+ "display_name": "Jackson Rini",
24
+ "avatar_url": "https://avatars.githubusercontent.com/u/64553469?v=4",
25
+ "total_credits": 4630,
26
+ "karma": 1,
27
+ "rank": "metic",
28
+ "achievements": [
29
+ "first-ship",
30
+ "first-claim",
31
+ "first-parallel-claim",
32
+ "streak-3",
33
+ "gds-shipper"
34
+ ],
35
+ "tokens_used": "2485218160"
36
+ },
37
+ {
38
+ "id": "94",
39
+ "github_login": "scootermack",
40
+ "display_name": "scootermack",
41
+ "avatar_url": "https://avatars.githubusercontent.com/u/295990394?v=4",
42
+ "total_credits": 2422,
43
+ "karma": 0,
44
+ "rank": "metic",
45
+ "achievements": [
46
+ "first-ship",
47
+ "first-claim",
48
+ "first-parallel-claim",
49
+ "streak-3",
50
+ "art-pipeline-shipper"
51
+ ],
52
+ "tokens_used": "966367590"
53
+ },
54
+ {
55
+ "id": "25",
56
+ "github_login": "IAMMASTERQUA",
57
+ "display_name": "IAMMASTERQUA",
58
+ "avatar_url": "https://avatars.githubusercontent.com/u/290184380?v=4",
59
+ "total_credits": 286,
60
+ "karma": 37,
61
+ "rank": "metic",
62
+ "achievements": [
63
+ "first-ship",
64
+ "first-claim",
65
+ "first-parallel-claim",
66
+ "art-pipeline-shipper",
67
+ "gds-shipper"
68
+ ],
69
+ "tokens_used": "322340908"
70
+ },
71
+ {
72
+ "id": "70",
73
+ "github_login": "kingaonline",
74
+ "display_name": "kingaonline",
75
+ "avatar_url": "https://avatars.githubusercontent.com/u/293641659?v=4",
76
+ "total_credits": 160,
77
+ "karma": 0,
78
+ "rank": "thetes",
79
+ "achievements": [
80
+ "first-ship",
81
+ "first-claim",
82
+ "art-pipeline-shipper",
83
+ "breaking-the-100c-bar"
84
+ ],
85
+ "tokens_used": "66829858"
86
+ },
87
+ {
88
+ "id": "3",
89
+ "github_login": "LarsCode",
90
+ "display_name": "LarsCode",
91
+ "avatar_url": "https://avatars.githubusercontent.com/u/35337514?v=4",
92
+ "total_credits": 71,
93
+ "karma": 0,
94
+ "rank": "xenos",
95
+ "achievements": [
96
+ "first-ship",
97
+ "first-claim",
98
+ "art-pipeline-shipper"
99
+ ],
100
+ "tokens_used": "25527381"
101
+ },
102
+ {
103
+ "id": "24",
104
+ "github_login": "bfg-system",
105
+ "display_name": "The BFG (system)",
106
+ "avatar_url": null,
107
+ "total_credits": 0,
108
+ "karma": 0,
109
+ "rank": "xenos",
110
+ "achievements": [],
111
+ "tokens_used": "0"
112
+ },
113
+ {
114
+ "id": "27",
115
+ "github_login": "willHermesLines",
116
+ "display_name": "willHermesLines",
117
+ "avatar_url": "https://avatars.githubusercontent.com/u/267458743?v=4",
118
+ "total_credits": 0,
119
+ "karma": 0,
120
+ "rank": "xenos",
121
+ "achievements": [],
122
+ "tokens_used": "0"
123
+ },
124
+ {
125
+ "id": "28",
126
+ "github_login": "discord-bot-system",
127
+ "display_name": "Discord Bot (system)",
128
+ "avatar_url": null,
129
+ "total_credits": 0,
130
+ "karma": 0,
131
+ "rank": "xenos",
132
+ "achievements": [],
133
+ "tokens_used": "0"
134
+ },
135
+ {
136
+ "id": "50",
137
+ "github_login": "Svensson-CMD",
138
+ "display_name": "Svensson-CMD",
139
+ "avatar_url": "https://avatars.githubusercontent.com/u/290959655?v=4",
140
+ "total_credits": 0,
141
+ "karma": 0,
142
+ "rank": "xenos",
143
+ "achievements": [],
144
+ "tokens_used": "0"
145
+ },
146
+ {
147
+ "id": "51",
148
+ "github_login": "MrTenkpro",
149
+ "display_name": "MrTenkpro",
150
+ "avatar_url": "https://avatars.githubusercontent.com/u/291558470?v=4",
151
+ "total_credits": 0,
152
+ "karma": 0,
153
+ "rank": "xenos",
154
+ "achievements": [],
155
+ "tokens_used": "0"
156
+ },
157
+ {
158
+ "id": "57",
159
+ "github_login": "largekristensen-svg",
160
+ "display_name": "largekristensen-svg",
161
+ "avatar_url": "https://avatars.githubusercontent.com/u/292408002?v=4",
162
+ "total_credits": 0,
163
+ "karma": 0,
164
+ "rank": "xenos",
165
+ "achievements": [],
166
+ "tokens_used": "0"
167
+ },
168
+ {
169
+ "id": "71",
170
+ "github_login": "erikwils",
171
+ "display_name": "erikwils",
172
+ "avatar_url": "https://avatars.githubusercontent.com/u/51457175?v=4",
173
+ "total_credits": 0,
174
+ "karma": 0,
175
+ "rank": "xenos",
176
+ "achievements": [],
177
+ "tokens_used": "0"
178
+ }
179
+ ],
180
+ "page": {
181
+ "limit": 100,
182
+ "offset": 0
183
+ }
184
+ }
@@ -0,0 +1,476 @@
1
+ {
2
+ "builder": {
3
+ "id": "95",
4
+ "github_id": "64553469",
5
+ "github_login": "jaxri",
6
+ "display_name": "Jackson Rini",
7
+ "avatar_url": "https://avatars.githubusercontent.com/u/64553469?v=4",
8
+ "total_credits": 4630,
9
+ "karma": 1,
10
+ "created_at": "2026-06-22T22:49:07.833Z",
11
+ "rank": "metic",
12
+ "status": "active",
13
+ "deactivated_at": null,
14
+ "reactivated_at": null,
15
+ "deactivated_reason": null,
16
+ "preferred_disciplines": [
17
+ "engineer"
18
+ ],
19
+ "system_role": null,
20
+ "anthropic_email": null,
21
+ "anthropic_user_id": null,
22
+ "monthly_budget_usd": null,
23
+ "box_blocked": false,
24
+ "box_blocked_reason": null,
25
+ "box_blocked_at": null,
26
+ "box_blocked_by": null
27
+ },
28
+ "active_claims": [
29
+ {
30
+ "claim_id": "1845",
31
+ "task_id": "2167",
32
+ "worktree_name": "frontend-redesign-ux-746bdd",
33
+ "claimed_at": "2026-07-10T18:29:41.871Z",
34
+ "head_sha": "7119fa2124f4570fc9502b2f12411cc054a7e4fc",
35
+ "reserved_migration_number": null,
36
+ "release_requested_by": null,
37
+ "release_requested_at": null,
38
+ "release_requested_note": null,
39
+ "title": "Check in the hall preview harness (fixture server + screenshot runbook)",
40
+ "touches": [
41
+ "scripts/hall-preview/server.js",
42
+ "scripts/hall-preview/README.md"
43
+ ],
44
+ "priority": 2,
45
+ "credits_reward": 50,
46
+ "version_id": "BONGOS-V1",
47
+ "module_key": null,
48
+ "streak_preview": {
49
+ "current_streak": 1,
50
+ "projected_streak": 1,
51
+ "qualifies": true,
52
+ "reason": "today-already-counted"
53
+ }
54
+ }
55
+ ],
56
+ "active_claim": {
57
+ "claim_id": "1845",
58
+ "task_id": "2167",
59
+ "worktree_name": "frontend-redesign-ux-746bdd",
60
+ "claimed_at": "2026-07-10T18:29:41.871Z",
61
+ "head_sha": "7119fa2124f4570fc9502b2f12411cc054a7e4fc",
62
+ "reserved_migration_number": null,
63
+ "release_requested_by": null,
64
+ "release_requested_at": null,
65
+ "release_requested_note": null,
66
+ "title": "Check in the hall preview harness (fixture server + screenshot runbook)",
67
+ "touches": [
68
+ "scripts/hall-preview/server.js",
69
+ "scripts/hall-preview/README.md"
70
+ ],
71
+ "priority": 2,
72
+ "credits_reward": 50,
73
+ "version_id": "BONGOS-V1",
74
+ "module_key": null,
75
+ "streak_preview": {
76
+ "current_streak": 1,
77
+ "projected_streak": 1,
78
+ "qualifies": true,
79
+ "reason": "today-already-counted"
80
+ }
81
+ },
82
+ "est_vs_actual": {
83
+ "median": 0.08,
84
+ "sample_size": 10
85
+ },
86
+ "unlocked": [
87
+ {
88
+ "builder_id": "95",
89
+ "achievement_id": "first-ship",
90
+ "unlocked_at": "2026-06-30T00:26:01.980Z",
91
+ "unlocked_by_task_id": null,
92
+ "name": "First Ship",
93
+ "description": "Ship your first task.",
94
+ "icon": "📦",
95
+ "credit_bonus": 1,
96
+ "sort_order": 10
97
+ },
98
+ {
99
+ "builder_id": "95",
100
+ "achievement_id": "first-claim",
101
+ "unlocked_at": "2026-06-22T23:04:49.435Z",
102
+ "unlocked_by_task_id": null,
103
+ "name": "First Claim",
104
+ "description": "Claim your first task.",
105
+ "icon": "🪙",
106
+ "credit_bonus": 1,
107
+ "sort_order": 20
108
+ },
109
+ {
110
+ "builder_id": "95",
111
+ "achievement_id": "first-parallel-claim",
112
+ "unlocked_at": "2026-06-30T00:26:01.980Z",
113
+ "unlocked_by_task_id": null,
114
+ "name": "First Parallel Claim",
115
+ "description": "Hold two simultaneous claims; ship both successfully.",
116
+ "icon": "⚓",
117
+ "credit_bonus": 2,
118
+ "sort_order": 30
119
+ },
120
+ {
121
+ "builder_id": "95",
122
+ "achievement_id": "streak-3",
123
+ "unlocked_at": "2026-06-30T00:51:29.738Z",
124
+ "unlocked_by_task_id": "1680",
125
+ "name": "Streak: 3 Nights",
126
+ "description": "Ship a task in 3 consecutive local-time nights (>=15min; cleanup/refactor now counts).",
127
+ "icon": "🔥",
128
+ "credit_bonus": 2,
129
+ "sort_order": 40
130
+ },
131
+ {
132
+ "builder_id": "95",
133
+ "achievement_id": "gds-shipper",
134
+ "unlocked_at": "2026-06-30T00:26:01.980Z",
135
+ "unlocked_by_task_id": null,
136
+ "name": "GDS Shipper",
137
+ "description": "Ship a task whose touches[] include src/gds/ or scripts/gds/.",
138
+ "icon": "⚙️",
139
+ "credit_bonus": 2,
140
+ "sort_order": 70
141
+ },
142
+ {
143
+ "builder_id": "95",
144
+ "achievement_id": "breaking-the-100c-bar",
145
+ "unlocked_at": "2026-06-30T00:26:01.980Z",
146
+ "unlocked_by_task_id": null,
147
+ "name": "Breaking the 100c Bar",
148
+ "description": "Cross 100 total credits.",
149
+ "icon": "💯",
150
+ "credit_bonus": 5,
151
+ "sort_order": 80
152
+ }
153
+ ],
154
+ "locked_with_progress": [
155
+ {
156
+ "achievement_id": "streak-7",
157
+ "name": "Streak: 7 Nights",
158
+ "description": "Ship a task in 7 consecutive local-time nights (>=15min; cleanup/refactor now counts).",
159
+ "icon": "🌋",
160
+ "progress_text": "track 7 consecutive ship-days"
161
+ },
162
+ {
163
+ "achievement_id": "art-pipeline-shipper",
164
+ "name": "Art Pipeline Shipper",
165
+ "description": "Ship a task whose touches[] include the art/ pipeline.",
166
+ "icon": "🎨",
167
+ "progress_text": "needs one shipped task touching art/"
168
+ },
169
+ {
170
+ "achievement_id": "subtractor",
171
+ "name": "Subtractor",
172
+ "description": "Earn the net-negative ship bonus on 3 ships — across your work you have deleted more than you have added.",
173
+ "icon": "🪓",
174
+ "progress_text": "keep building"
175
+ }
176
+ ],
177
+ "streak": {
178
+ "current": 1,
179
+ "longest": 5,
180
+ "last_ship_day": "2026-07-10",
181
+ "started_on": "2026-07-10",
182
+ "timezone": "America/New_York",
183
+ "today": "2026-07-10"
184
+ },
185
+ "grades": {
186
+ "recent": [],
187
+ "rolling": {
188
+ "n": 0,
189
+ "avg_score": "0.0",
190
+ "n_passed": 0
191
+ }
192
+ },
193
+ "karma": {
194
+ "recent": [
195
+ {
196
+ "id": "11",
197
+ "delta": 1,
198
+ "reason": "peer_vote_weekly",
199
+ "recorded_at": "2026-07-01T09:26:29.519Z",
200
+ "granted_by": null,
201
+ "granted_by_login": null,
202
+ "granted_by_display_name": null
203
+ }
204
+ ],
205
+ "delta_30d": 1
206
+ },
207
+ "onboarding": {
208
+ "current_stage": "graduated",
209
+ "completed_stages": [
210
+ "auth_complete",
211
+ "pick_disciplines",
212
+ "first_start",
213
+ "first_claim",
214
+ "ship_three"
215
+ ],
216
+ "started_at": "2026-06-22T22:49:07.839Z",
217
+ "completed_at": "2026-06-23T18:52:07.021Z",
218
+ "progress": {
219
+ "cleared": 5,
220
+ "total": 5
221
+ },
222
+ "stages": [
223
+ {
224
+ "id": "box_connect",
225
+ "source": "box",
226
+ "label": "Connect to thy dev box",
227
+ "hint": "Follow the steps in the welcome scroll above to get Claude running on thy dev box — this ticks itself the moment thou art connected.",
228
+ "detail": "",
229
+ "cleared": true,
230
+ "is_current": false
231
+ },
232
+ {
233
+ "id": "join_discord",
234
+ "source": "discord",
235
+ "label": "Join the Discord server",
236
+ "hint": "Connect Discord — thou art auto-joined to the city's server and given thy rank.",
237
+ "detail": "",
238
+ "cleared": true,
239
+ "is_current": false
240
+ },
241
+ {
242
+ "id": "pick_disciplines",
243
+ "source": "stage",
244
+ "label": "Choose thy craft — engineer, artist, or ideator",
245
+ "hint": "Pick the work that calls thee — engineer, artist, ideator, or any mix.",
246
+ "detail": "",
247
+ "cleared": true,
248
+ "is_current": false
249
+ },
250
+ {
251
+ "id": "cli_setup",
252
+ "source": "cli",
253
+ "label": "Run /builder-setup on thy dev box",
254
+ "hint": "Sign the GDS in on thy dev box with /builder-setup — this ticks itself once thou art signed in.",
255
+ "detail": "",
256
+ "cleared": true,
257
+ "is_current": false
258
+ },
259
+ {
260
+ "id": "ship_three",
261
+ "source": "stage",
262
+ "label": "Ship three works — and rise to Thetes",
263
+ "hint": "Carry three tasks through with /builder-ship — the third makes thee a Thetes.",
264
+ "detail": "3 of 3 works shipped",
265
+ "cleared": true,
266
+ "is_current": false
267
+ }
268
+ ],
269
+ "graduated": true
270
+ },
271
+ "discord": {
272
+ "linked": true,
273
+ "configured": true
274
+ },
275
+ "grader_bypass": true,
276
+ "cost": {
277
+ "spend_mtd_usd": 711.03,
278
+ "budget_mtd_usd": null,
279
+ "pct_used": 0,
280
+ "level": "ok"
281
+ },
282
+ "wandering": {
283
+ "rank": "metic",
284
+ "levels": [
285
+ {
286
+ "n": 0,
287
+ "key": "locked",
288
+ "label": "Locked",
289
+ "blurb": "Strictly the claimed task. Off-task notes are filed silently, never raised.",
290
+ "allowed": true
291
+ },
292
+ {
293
+ "n": 1,
294
+ "key": "focused",
295
+ "label": "Focused",
296
+ "blurb": "On task, full in-task initiative; at most one captured follow-up at the end.",
297
+ "allowed": true
298
+ },
299
+ {
300
+ "n": 2,
301
+ "key": "balanced",
302
+ "label": "Balanced",
303
+ "blurb": "May surface a high-value tangent mid-task as \"capture or pursue?\" — your call.",
304
+ "allowed": true
305
+ },
306
+ {
307
+ "n": 3,
308
+ "key": "exploratory",
309
+ "label": "Exploratory",
310
+ "blurb": "A thinking partner — actively surfaces adjacent work and investigations.",
311
+ "allowed": true
312
+ }
313
+ ],
314
+ "default_level": 2,
315
+ "default_key": "balanced",
316
+ "max_level": 3,
317
+ "max_key": "exploratory",
318
+ "override_level": null,
319
+ "effective_level": 2,
320
+ "effective_key": "balanced",
321
+ "effective_label": "Balanced",
322
+ "contract": "Wandering: Balanced. Stay anchored to your claim, but if you hit a genuinely high-value or blocking tangent you may surface it briefly and ask \"capture or pursue?\" — leave the call to the user. Note anomalies as observations; don't rabbit-hole.",
323
+ "inject": false
324
+ },
325
+ "interaction": {
326
+ "fields": [
327
+ {
328
+ "field": "technical_level",
329
+ "label": "Technical level",
330
+ "blurb": "How much software-engineering vocabulary to assume.",
331
+ "default_value": "non_technical",
332
+ "values": [
333
+ {
334
+ "value": "non_technical",
335
+ "label": "Non-technical (default)"
336
+ },
337
+ {
338
+ "value": "mixed",
339
+ "label": "Some technical background"
340
+ },
341
+ {
342
+ "value": "engineer",
343
+ "label": "Engineer"
344
+ }
345
+ ]
346
+ },
347
+ {
348
+ "field": "toolchain_familiarity",
349
+ "label": "Local-toolchain familiarity",
350
+ "blurb": "Whether local dev tools (package managers, ports, env vars) need step-by-step help.",
351
+ "default_value": "new",
352
+ "values": [
353
+ {
354
+ "value": "new",
355
+ "label": "New to local tooling (default)"
356
+ },
357
+ {
358
+ "value": "comfortable",
359
+ "label": "Comfortable with local tooling"
360
+ }
361
+ ]
362
+ },
363
+ {
364
+ "field": "verbosity",
365
+ "label": "Reply length",
366
+ "blurb": "How much prose to return by default.",
367
+ "default_value": "concise",
368
+ "values": [
369
+ {
370
+ "value": "concise",
371
+ "label": "Concise (default)"
372
+ },
373
+ {
374
+ "value": "detailed",
375
+ "label": "Detailed"
376
+ }
377
+ ]
378
+ }
379
+ ],
380
+ "stored": {},
381
+ "effective": {
382
+ "technical_level": "non_technical",
383
+ "toolchain_familiarity": "new",
384
+ "verbosity": "concise"
385
+ },
386
+ "contract": "",
387
+ "inject": false
388
+ },
389
+ "model_allocation": {
390
+ "slots": [
391
+ {
392
+ "slot": "main",
393
+ "label": "Main interactive session",
394
+ "blurb": "The session the builder sits in front of.",
395
+ "code_default": "opus",
396
+ "tiers": [
397
+ "haiku",
398
+ "sonnet",
399
+ "opus",
400
+ "fable"
401
+ ]
402
+ },
403
+ {
404
+ "slot": "subagentDefault",
405
+ "label": "Subagents (default)",
406
+ "blurb": "Research, audits, code review, design, code that ships, parallel build sessions.",
407
+ "code_default": "opus",
408
+ "tiers": [
409
+ "haiku",
410
+ "sonnet",
411
+ "opus",
412
+ "fable"
413
+ ]
414
+ },
415
+ {
416
+ "slot": "subagentRoutine",
417
+ "label": "Subagents (routine plumbing)",
418
+ "blurb": "Mechanical known-path GDS/DB ops: list, fetch-by-id, log a cost row, read a known file.",
419
+ "code_default": "haiku",
420
+ "tiers": [
421
+ "haiku",
422
+ "sonnet",
423
+ "opus",
424
+ "fable"
425
+ ]
426
+ }
427
+ ],
428
+ "allowed_tiers": [
429
+ "haiku",
430
+ "sonnet",
431
+ "opus",
432
+ "fable"
433
+ ],
434
+ "code_defaults": {
435
+ "main": "opus",
436
+ "subagentDefault": "opus",
437
+ "subagentRoutine": "haiku"
438
+ },
439
+ "instance_default": {
440
+ "main": "opus",
441
+ "subagentDefault": "opus",
442
+ "subagentRoutine": "haiku"
443
+ },
444
+ "override": {},
445
+ "effective": {
446
+ "main": "opus",
447
+ "subagentDefault": "opus",
448
+ "subagentRoutine": "haiku"
449
+ },
450
+ "contract": "Model allocation — main session: opus; subagents default: opus, routine plumbing: haiku. Set the Agent `model` param explicitly per this allocation."
451
+ },
452
+ "render": {
453
+ "widgets_enabled": false,
454
+ "default_enabled": true,
455
+ "override": false
456
+ },
457
+ "needs": {
458
+ "items": [
459
+ {
460
+ "id": "art_key",
461
+ "title": "Image-generation key",
462
+ "what": "The art pipeline draws your tiles and sprites with Google AI Studio (Gemini).",
463
+ "learn_more_url": "https://aistudio.google.com/app/apikey",
464
+ "state": "action_needed",
465
+ "severity": "action",
466
+ "message": "Your free art coverage has ended, so image generation now runs on your own key (you pay only for what you make). Add it to keep making art.",
467
+ "action": {
468
+ "label": "Add your key",
469
+ "href": "/settings#art-key"
470
+ }
471
+ }
472
+ ],
473
+ "action_needed_count": 1,
474
+ "has_action_needed": true
475
+ }
476
+ }