@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,103 @@
1
+ # Hall preview harness
2
+
3
+ The dev-box sandbox previews the **game only** — `/builders` 404s there (idea 490) — so
4
+ hall-ui changes are reviewed here: a DB-less fixture server that serves the **real**
5
+ `modules/hall-ui/public` files through the **real** serving seams (boot-time `?v=`
6
+ content-hash stamping, `{{token}}` replacement, `window.__BRANDING__`/`__MODULES__`
7
+ injection, theme markup), answering every `/api/gds|bongos/*` read from checked-in
8
+ fixtures. Proven recipe from tasks 1723/1742, checked in by task 2167.
9
+
10
+ ## Quickstart
11
+
12
+ ```bash
13
+ node scripts/hall-preview/server.js # neutral pack, port 4600
14
+ # → browse http://builders.localhost:4600/ (Chromium resolves *.localhost;
15
+ # the builders. host prefix exercises the real subdomain serving path)
16
+ ```
17
+
18
+ | Flag | Effect |
19
+ |---|---|
20
+ | `--port 4600` | listen port |
21
+ | `--brand config/branding.json` | serve the instance pack (default: `config/branding.neutral.json`, the vanilla skin) |
22
+ | `--modules-off dev-box,provisioning` | report those modules disabled in `window.__MODULES__` — verifies `moduleOn()` gating (Harbor nav item, Instances/Start-a-project widgets must vanish) |
23
+ | `--empty` | drain every array in every fixture — the empty-state screenshot pass |
24
+
25
+ Writes are not wired: any `POST/PATCH/DELETE` answers `501 preview_readonly`.
26
+ A GET with no fixture answers 404 and logs
27
+ `no fixture: <path>` — that log line names the exact file to add.
28
+
29
+ ## Fixtures
30
+
31
+ `fixtures/<path>.json`, slashes as `__` (`/me/recent-ships` → `me__recent-ships.json`).
32
+ Query strings are ignored. Id-bearing paths try the exact file first
33
+ (`goals__25.json`), then a generic fallback (`goals__detail.json`, `tasks__detail.json`,
34
+ `analytics__builder.json`, …) so one fixture serves any id.
35
+
36
+ Refresh from live data (needs a GDS CLI session; read-only; Archon-gated endpoints
37
+ skip for lower ranks and keep the checked-in synthetic empties):
38
+
39
+ ```bash
40
+ node scripts/hall-preview/refresh-fixtures.js
41
+ ```
42
+
43
+ Box/terminal endpoints are deliberately never snapshotted (connection details).
44
+
45
+ ## The evidence matrix (per page-redesign ship)
46
+
47
+ Screenshot every changed page at **{light, dark} × {1280w, 390w}**, plus one
48
+ instance-pack run (`--brand config/branding.json`) proving the theming contract
49
+ survives. With the Playwright MCP (`npx playwright install chrome` once):
50
+
51
+ 1. `browser_navigate` → the page. `browser_console_messages` must show **0 errors**.
52
+ 2. 1280w: `browser_resize 1280×900` → `browser_take_screenshot` (fullPage for tall pages).
53
+ 3. dark: `browser_evaluate` `() => { localStorage.setItem('hall-theme','dark'); location.reload(); }` → screenshot. (Reset with `'light'`.)
54
+ 4. 390w: `browser_resize 390×844` → light + dark screenshots.
55
+
56
+ ## Seam assertions (copy-paste `browser_evaluate` snippets)
57
+
58
+ The hard seams every redesign must keep. Run on each changed page:
59
+
60
+ ```js
61
+ // 1. Window is the ONLY scroller — no inner scroll pane may appear.
62
+ () => [...document.querySelectorAll('.app-content *')].filter((el) => {
63
+ const s = getComputedStyle(el);
64
+ return /(auto|scroll)/.test(s.overflowY) && el.scrollHeight > el.clientHeight + 1
65
+ && !el.matches('.section-rail, .kit-tabs'); // the two sanctioned x-scroll strips
66
+ }).map((el) => el.className).join(',') || 'OK'
67
+
68
+ // 2. Deep-link overlay namespace intact: #/idea/N opens the overlay…
69
+ () => { location.hash = '#/idea/1';
70
+ return new Promise((r) => setTimeout(() => r(
71
+ document.querySelector('.deeplink-overlay, #deeplink') ? 'overlay OK' : 'OVERLAY BROKEN'), 400)); }
72
+
73
+ // …and #/task/N navigates to the task page (task-detail.js redirect).
74
+ () => { location.hash = '#/task/5'; return 'expect navigation to /task/5'; }
75
+
76
+ // 3. Index hash views: exactly one .view visible per hash.
77
+ () => ['#home', '#standing', '#leaderboard'].map((h) => { location.hash = h;
78
+ return `${h}:${[...document.querySelectorAll('main .view, main [id^="view-"]')]
79
+ .filter((v) => !v.hidden).length}`; }).join(' ') // each → :1
80
+
81
+ // 4. Goals sub-routes: #/goal/25 opens detail; back restores the list.
82
+ () => { location.hash = '#/goal/25'; return new Promise((r) => setTimeout(() =>
83
+ r(document.querySelector('#goal-detail, [data-goal-view="detail"]') ? 'detail OK' : 'BROKEN'), 400)); }
84
+
85
+ // 5. SSE nudge triggered one refetch (the harness emits a single nudge ~1.2s
86
+ // after connect): watch the network panel, or count via a fixture hit log line.
87
+ ```
88
+
89
+ Module gating: rerun the page with `--modules-off dev-box,provisioning` — the
90
+ Harbor nav item and the Instances/Start-a-project widgets must be absent, with
91
+ zero console errors.
92
+
93
+ ## Gotchas
94
+
95
+ - **Worktrees have no `node_modules`** — the server resolves `express` via node's
96
+ upward walk (the main checkout's copy). The `src/` seams always load from *this*
97
+ tree, so a worktree's edits are exactly what renders.
98
+ - The harness serves pages **pre-auth** (its page handlers register before
99
+ `mountInternalSurfaces`). Auth-gated *page* behavior (sign-in redirects, Archon
100
+ gates) is server truth — do not judge it here; assets and 404s fall through to
101
+ the real internal-surface code.
102
+ - The SSE fixture logs one console error against JSON-fixture parsing on some
103
+ pages — pages tolerate it; a page's own console must otherwise be clean.
@@ -0,0 +1 @@
1
+ { "requests": [] }
@@ -0,0 +1,76 @@
1
+ {
2
+ "achievements": [
3
+ {
4
+ "id": "first-ship",
5
+ "name": "First Ship",
6
+ "description": "Ship your first task.",
7
+ "icon": "📦",
8
+ "credit_bonus": 1,
9
+ "sort_order": 10
10
+ },
11
+ {
12
+ "id": "first-claim",
13
+ "name": "First Claim",
14
+ "description": "Claim your first task.",
15
+ "icon": "🪙",
16
+ "credit_bonus": 1,
17
+ "sort_order": 20
18
+ },
19
+ {
20
+ "id": "first-parallel-claim",
21
+ "name": "First Parallel Claim",
22
+ "description": "Hold two simultaneous claims; ship both successfully.",
23
+ "icon": "⚓",
24
+ "credit_bonus": 2,
25
+ "sort_order": 30
26
+ },
27
+ {
28
+ "id": "streak-3",
29
+ "name": "Streak: 3 Nights",
30
+ "description": "Ship a task in 3 consecutive local-time nights (>=15min; cleanup/refactor now counts).",
31
+ "icon": "🔥",
32
+ "credit_bonus": 2,
33
+ "sort_order": 40
34
+ },
35
+ {
36
+ "id": "streak-7",
37
+ "name": "Streak: 7 Nights",
38
+ "description": "Ship a task in 7 consecutive local-time nights (>=15min; cleanup/refactor now counts).",
39
+ "icon": "🌋",
40
+ "credit_bonus": 5,
41
+ "sort_order": 50
42
+ },
43
+ {
44
+ "id": "art-pipeline-shipper",
45
+ "name": "Art Pipeline Shipper",
46
+ "description": "Ship a task whose touches[] include the art/ pipeline.",
47
+ "icon": "🎨",
48
+ "credit_bonus": 2,
49
+ "sort_order": 60
50
+ },
51
+ {
52
+ "id": "subtractor",
53
+ "name": "Subtractor",
54
+ "description": "Earn the net-negative ship bonus on 3 ships — across your work you have deleted more than you have added.",
55
+ "icon": "🪓",
56
+ "credit_bonus": 2,
57
+ "sort_order": 65
58
+ },
59
+ {
60
+ "id": "gds-shipper",
61
+ "name": "GDS Shipper",
62
+ "description": "Ship a task whose touches[] include src/gds/ or scripts/gds/.",
63
+ "icon": "⚙️",
64
+ "credit_bonus": 2,
65
+ "sort_order": 70
66
+ },
67
+ {
68
+ "id": "breaking-the-100c-bar",
69
+ "name": "Breaking the 100c Bar",
70
+ "description": "Cross 100 total credits.",
71
+ "icon": "💯",
72
+ "credit_bonus": 5,
73
+ "sort_order": 80
74
+ }
75
+ ]
76
+ }
@@ -0,0 +1,251 @@
1
+ {
2
+ "builder_id": 95,
3
+ "window_days": 90,
4
+ "ship_rate": [
5
+ {
6
+ "day": "2026-06-22",
7
+ "n": 2
8
+ },
9
+ {
10
+ "day": "2026-06-23",
11
+ "n": 3
12
+ },
13
+ {
14
+ "day": "2026-06-25",
15
+ "n": 7
16
+ },
17
+ {
18
+ "day": "2026-06-26",
19
+ "n": 8
20
+ },
21
+ {
22
+ "day": "2026-06-27",
23
+ "n": 12
24
+ },
25
+ {
26
+ "day": "2026-06-28",
27
+ "n": 17
28
+ },
29
+ {
30
+ "day": "2026-06-29",
31
+ "n": 9
32
+ },
33
+ {
34
+ "day": "2026-06-30",
35
+ "n": 5
36
+ },
37
+ {
38
+ "day": "2026-07-02",
39
+ "n": 7
40
+ },
41
+ {
42
+ "day": "2026-07-03",
43
+ "n": 17
44
+ },
45
+ {
46
+ "day": "2026-07-04",
47
+ "n": 6
48
+ },
49
+ {
50
+ "day": "2026-07-05",
51
+ "n": 11
52
+ },
53
+ {
54
+ "day": "2026-07-10",
55
+ "n": 6
56
+ }
57
+ ],
58
+ "cost_trend": [
59
+ {
60
+ "day": "2026-06-22",
61
+ "total_usd": 33.45,
62
+ "n_tasks": 0,
63
+ "per_work": 16.73
64
+ },
65
+ {
66
+ "day": "2026-06-23",
67
+ "total_usd": 131.56,
68
+ "n_tasks": 0,
69
+ "per_work": 33
70
+ },
71
+ {
72
+ "day": "2026-06-24",
73
+ "total_usd": 0,
74
+ "n_tasks": 0,
75
+ "per_work": 33
76
+ },
77
+ {
78
+ "day": "2026-06-25",
79
+ "total_usd": 194.21,
80
+ "n_tasks": 0,
81
+ "per_work": 29.94
82
+ },
83
+ {
84
+ "day": "2026-06-26",
85
+ "total_usd": 74.35,
86
+ "n_tasks": 0,
87
+ "per_work": 21.68
88
+ },
89
+ {
90
+ "day": "2026-06-27",
91
+ "total_usd": 16.08,
92
+ "n_tasks": 0,
93
+ "per_work": 14.05
94
+ },
95
+ {
96
+ "day": "2026-06-28",
97
+ "total_usd": 24.24,
98
+ "n_tasks": 0,
99
+ "per_work": 9.67
100
+ },
101
+ {
102
+ "day": "2026-06-29",
103
+ "total_usd": 57.04,
104
+ "n_tasks": 0,
105
+ "per_work": 9.15
106
+ },
107
+ {
108
+ "day": "2026-07-02",
109
+ "total_usd": 198.6,
110
+ "n_tasks": 0,
111
+ "per_work": 10.42
112
+ },
113
+ {
114
+ "day": "2026-07-03",
115
+ "total_usd": 297.04,
116
+ "n_tasks": 0,
117
+ "per_work": 11.8
118
+ },
119
+ {
120
+ "day": "2026-07-04",
121
+ "total_usd": 0.74,
122
+ "n_tasks": 0,
123
+ "per_work": 11.05
124
+ },
125
+ {
126
+ "day": "2026-07-05",
127
+ "total_usd": 154.61,
128
+ "n_tasks": 0,
129
+ "per_work": 11.36
130
+ },
131
+ {
132
+ "day": "2026-07-06",
133
+ "total_usd": 0.6,
134
+ "n_tasks": 0,
135
+ "per_work": 11.37
136
+ },
137
+ {
138
+ "day": "2026-07-10",
139
+ "total_usd": 59.44,
140
+ "n_tasks": 0,
141
+ "per_work": 11.29
142
+ }
143
+ ],
144
+ "duration_trend": [
145
+ {
146
+ "day": "2026-06-22",
147
+ "avg_actual": 28,
148
+ "avg_est": 40
149
+ },
150
+ {
151
+ "day": "2026-06-23",
152
+ "avg_actual": 125,
153
+ "avg_est": 147
154
+ },
155
+ {
156
+ "day": "2026-06-25",
157
+ "avg_actual": 242,
158
+ "avg_est": 283
159
+ },
160
+ {
161
+ "day": "2026-06-26",
162
+ "avg_actual": 16,
163
+ "avg_est": 184
164
+ },
165
+ {
166
+ "day": "2026-06-27",
167
+ "avg_actual": 12,
168
+ "avg_est": 154
169
+ },
170
+ {
171
+ "day": "2026-06-28",
172
+ "avg_actual": 85,
173
+ "avg_est": 140
174
+ },
175
+ {
176
+ "day": "2026-06-29",
177
+ "avg_actual": 19,
178
+ "avg_est": 221
179
+ },
180
+ {
181
+ "day": "2026-06-30",
182
+ "avg_actual": 12,
183
+ "avg_est": 150
184
+ },
185
+ {
186
+ "day": "2026-07-03",
187
+ "avg_actual": 15,
188
+ "avg_est": 60
189
+ },
190
+ {
191
+ "day": "2026-07-04",
192
+ "avg_actual": 17,
193
+ "avg_est": 270
194
+ },
195
+ {
196
+ "day": "2026-07-05",
197
+ "avg_actual": 8,
198
+ "avg_est": 65
199
+ },
200
+ {
201
+ "day": "2026-07-10",
202
+ "avg_actual": 8,
203
+ "avg_est": 108
204
+ }
205
+ ],
206
+ "grade_trend": [],
207
+ "top_kinds": [
208
+ {
209
+ "kind": "feature",
210
+ "n": 62
211
+ },
212
+ {
213
+ "kind": "refactor",
214
+ "n": 12
215
+ },
216
+ {
217
+ "kind": "bug",
218
+ "n": 11
219
+ },
220
+ {
221
+ "kind": "infra",
222
+ "n": 7
223
+ },
224
+ {
225
+ "kind": "decision",
226
+ "n": 6
227
+ },
228
+ {
229
+ "kind": "cleanup",
230
+ "n": 5
231
+ },
232
+ {
233
+ "kind": "learning-capture",
234
+ "n": 4
235
+ },
236
+ {
237
+ "kind": "spike",
238
+ "n": 3
239
+ }
240
+ ],
241
+ "headline": {
242
+ "total_shipped": 110,
243
+ "total_cost_usd": 1241.96,
244
+ "cost_per_task": 11.29,
245
+ "avg_duration_min": 39,
246
+ "confirmation_rate": 0.85,
247
+ "resolved_claims": 136,
248
+ "grade_pass_rate": null,
249
+ "graded_n": 0
250
+ }
251
+ }
@@ -0,0 +1 @@
1
+ { "rows": [] }
@@ -0,0 +1 @@
1
+ { "totals_by_builder": [], "ledger": [] }
@@ -0,0 +1 @@
1
+ { "claims": [] }
@@ -0,0 +1,81 @@
1
+ {
2
+ "builders": [
3
+ {
4
+ "id": "25",
5
+ "github_login": "IAMMASTERQUA",
6
+ "display_name": "IAMMASTERQUA",
7
+ "avatar_url": "https://avatars.githubusercontent.com/u/290184380?v=4",
8
+ "rank": "metic"
9
+ },
10
+ {
11
+ "id": "95",
12
+ "github_login": "jaxri",
13
+ "display_name": "Jackson Rini",
14
+ "avatar_url": "https://avatars.githubusercontent.com/u/64553469?v=4",
15
+ "rank": "metic"
16
+ },
17
+ {
18
+ "id": "3",
19
+ "github_login": "LarsCode",
20
+ "display_name": "LarsCode",
21
+ "avatar_url": "https://avatars.githubusercontent.com/u/35337514?v=4",
22
+ "rank": "xenos"
23
+ },
24
+ {
25
+ "id": "51",
26
+ "github_login": "MrTenkpro",
27
+ "display_name": "MrTenkpro",
28
+ "avatar_url": "https://avatars.githubusercontent.com/u/291558470?v=4",
29
+ "rank": "xenos"
30
+ },
31
+ {
32
+ "id": "50",
33
+ "github_login": "Svensson-CMD",
34
+ "display_name": "Svensson-CMD",
35
+ "avatar_url": "https://avatars.githubusercontent.com/u/290959655?v=4",
36
+ "rank": "xenos"
37
+ },
38
+ {
39
+ "id": "71",
40
+ "github_login": "erikwils",
41
+ "display_name": "erikwils",
42
+ "avatar_url": "https://avatars.githubusercontent.com/u/51457175?v=4",
43
+ "rank": "xenos"
44
+ },
45
+ {
46
+ "id": "70",
47
+ "github_login": "kingaonline",
48
+ "display_name": "kingaonline",
49
+ "avatar_url": "https://avatars.githubusercontent.com/u/293641659?v=4",
50
+ "rank": "thetes"
51
+ },
52
+ {
53
+ "id": "57",
54
+ "github_login": "largekristensen-svg",
55
+ "display_name": "largekristensen-svg",
56
+ "avatar_url": "https://avatars.githubusercontent.com/u/292408002?v=4",
57
+ "rank": "xenos"
58
+ },
59
+ {
60
+ "id": "1",
61
+ "github_login": "lars589",
62
+ "display_name": "lars589",
63
+ "avatar_url": "https://avatars.githubusercontent.com/u/283020391?v=4",
64
+ "rank": "archon"
65
+ },
66
+ {
67
+ "id": "94",
68
+ "github_login": "scootermack",
69
+ "display_name": "scootermack",
70
+ "avatar_url": "https://avatars.githubusercontent.com/u/295990394?v=4",
71
+ "rank": "metic"
72
+ },
73
+ {
74
+ "id": "27",
75
+ "github_login": "willHermesLines",
76
+ "display_name": "willHermesLines",
77
+ "avatar_url": "https://avatars.githubusercontent.com/u/267458743?v=4",
78
+ "rank": "xenos"
79
+ }
80
+ ]
81
+ }
@@ -0,0 +1 @@
1
+ { "builders": [] }