@bongos/core 1.19.804 → 1.19.805

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 (235) hide show
  1. package/.bongos-core.json +257 -237
  2. package/.claude/skills/ask-for-help/SKILL.md +6 -6
  3. package/.claude/skills/backlog-review/SKILL.md +1 -1
  4. package/.claude/skills/blocker-review/SKILL.md +7 -7
  5. package/.claude/skills/blocker-solve/SKILL.md +5 -5
  6. package/.claude/skills/bug-triage/SKILL.md +7 -7
  7. package/.claude/skills/builder-claim/SKILL.md +3 -3
  8. package/.claude/skills/builder-cost/SKILL.md +2 -2
  9. package/.claude/skills/builder-end/SKILL.md +2 -2
  10. package/.claude/skills/builder-exit/SKILL.md +7 -7
  11. package/.claude/skills/builder-key/SKILL.md +2 -2
  12. package/.claude/skills/builder-reauth/SKILL.md +2 -2
  13. package/.claude/skills/builder-redteam/SKILL.md +7 -7
  14. package/.claude/skills/builder-release/SKILL.md +2 -2
  15. package/.claude/skills/builder-sequence/SKILL.md +1 -1
  16. package/.claude/skills/builder-setup/SKILL.md +3 -3
  17. package/.claude/skills/builder-ship/SKILL.md +1 -1
  18. package/.claude/skills/builder-stage/SKILL.md +1 -1
  19. package/.claude/skills/builder-start/SKILL.md +1 -1
  20. package/.claude/skills/fix-task/SKILL.md +4 -4
  21. package/.claude/skills/goal-create/SKILL.md +18 -18
  22. package/.claude/skills/goal-review/SKILL.md +7 -7
  23. package/.claude/skills/grade-audit/SKILL.md +5 -5
  24. package/.claude/skills/grade-recover/SKILL.md +4 -4
  25. package/.claude/skills/grader-health/SKILL.md +6 -6
  26. package/.claude/skills/idea-triage/SKILL.md +14 -14
  27. package/.claude/skills/merge-mode/SKILL.md +3 -3
  28. package/.claude/skills/planning-session/SKILL.md +20 -20
  29. package/.claude/skills/priority-session/SKILL.md +10 -10
  30. package/.claude/skills/recall/SKILL.md +1 -1
  31. package/.claude/skills/scan-before-install/SKILL.md +3 -3
  32. package/.claude/skills/status/SKILL.md +2 -2
  33. package/.claude/skills/strand-fix/SKILL.md +2 -2
  34. package/clients/bongos-client/README.md +1 -1
  35. package/clients/bongos-client/bongos-client.global.js +2 -0
  36. package/clients/bongos-client/index.cjs +2 -0
  37. package/clients/bongos-client/index.d.ts +2 -0
  38. package/clients/bongos-client/index.mjs +2 -0
  39. package/docs/api/openapi.json +45 -11
  40. package/docs/api-reference.md +11 -10
  41. package/docs/module-api-changelog.md +2 -0
  42. package/modules/builder-settings/profile-nudge-prefs.js +1 -1
  43. package/modules/builder-settings/render-prefs.js +1 -1
  44. package/modules/dev-box/app/README.md +1 -1
  45. package/modules/dev-box/app/src/gds-client.js +11 -9
  46. package/modules/dev-box/app/src/vendor/bongos-client.cjs +2 -0
  47. package/modules/dev-box/app/test/unit.mjs +13 -13
  48. package/modules/dev-box/box-access.js +3 -3
  49. package/modules/dev-box/box-onboard.js +7 -7
  50. package/modules/discord/bug-attachments.js +1 -1
  51. package/modules/economy/cost-classify.js +6 -6
  52. package/modules/grading/grader-rubric.json +1 -1
  53. package/modules/grading/grader-score.js +1 -1
  54. package/modules/hall-ui/module.json +1 -1
  55. package/modules/hall-ui/public/drachmae.js +3 -3
  56. package/modules/hall-ui/public/idea.js +1 -1
  57. package/modules/hall-ui/public/md-reader.js +1 -1
  58. package/modules/hall-ui/public/people.html +1 -1
  59. package/modules/hall-ui/public/people.js +2 -2
  60. package/modules/hall-ui/public/primer.js +4 -4
  61. package/modules/hall-ui/public/roster.js +1 -1
  62. package/modules/hall-ui/public/shell.js +1 -1
  63. package/modules/hall-ui/public/task.js +1 -1
  64. package/modules/ideas/inbox.js +2 -2
  65. package/modules/lifecycle/db-analytics.js +1 -1
  66. package/modules/lifecycle/done-when.js +4 -4
  67. package/modules/lifecycle/version-close.js +1 -1
  68. package/modules/memory/learnings.js +2 -2
  69. package/modules/memory/memory.js +1 -1
  70. package/modules/onboarding/onboarding.js +1 -1
  71. package/modules/platform-identity/routes/my-projects.js +1 -1
  72. package/modules/platform-identity/routes/sso.js +2 -2
  73. package/modules/public-landing/public/index.html +2 -2
  74. package/modules/public-landing/public/projects-floor.states.json +1 -1
  75. package/modules/public-landing/public/projects.html +1 -1
  76. package/modules/public-landing/public/projects.states.json +1 -1
  77. package/modules/sessions/db.js +120 -0
  78. package/modules/sessions/module.json +2 -2
  79. package/modules/sessions/pollers/session-upload-health.js +111 -0
  80. package/modules/sessions/pulse.js +2 -2
  81. package/modules/sessions/routes/sessions.js +46 -0
  82. package/modules/sessions/upload-health.js +197 -0
  83. package/modules/status-ui/module.json +1 -1
  84. package/modules/status-ui/public/explore.js +1 -1
  85. package/package-lock.json +2 -2
  86. package/package.json +1 -1
  87. package/scripts/gds/agent-invoke.js +3 -3
  88. package/scripts/gds/api.js +4 -4
  89. package/scripts/gds/api.sh +1 -1
  90. package/scripts/gds/architect-audit.js +1 -1
  91. package/scripts/gds/artifact-audit.js +2 -2
  92. package/scripts/gds/audit-ships.js +2 -2
  93. package/scripts/gds/backfill-cost.js +1 -1
  94. package/scripts/gds/backfill-sessions.js +1 -1
  95. package/scripts/gds/backfill-subagent-rewards.js +1 -1
  96. package/scripts/gds/backfill-task-rewards.js +2 -2
  97. package/scripts/gds/box-auth-check.js +1 -1
  98. package/scripts/gds/box-sync.js +3 -3
  99. package/scripts/gds/box.js +10 -10
  100. package/scripts/gds/build-cli-package.js +3 -3
  101. package/scripts/gds/capture.js +2 -2
  102. package/scripts/gds/ci-grade.js +1 -1
  103. package/scripts/gds/claim-recall.js +2 -2
  104. package/scripts/gds/cli-lib.js +3 -3
  105. package/scripts/gds/context-pack.js +1 -1
  106. package/scripts/gds/copy-apply.js +2 -2
  107. package/scripts/gds/dev-lib.js +2 -2
  108. package/scripts/gds/fetch-art-key.js +2 -2
  109. package/scripts/gds/fetch-sound-prefs.js +3 -3
  110. package/scripts/gds/grade-smoke.js +1 -1
  111. package/scripts/gds/hooks/pre-push.js +1 -1
  112. package/scripts/gds/init.js +9 -9
  113. package/scripts/gds/key-card.js +1 -1
  114. package/scripts/gds/learning-capture.js +2 -2
  115. package/scripts/gds/linkify-refs.js +2 -2
  116. package/scripts/gds/local-preview-lib.js +1 -1
  117. package/scripts/gds/login.js +11 -10
  118. package/scripts/gds/main-audit.js +1 -1
  119. package/scripts/gds/newcomer-floor.config.json +1 -1
  120. package/scripts/gds/newcomer-floor.js +2 -2
  121. package/scripts/gds/newcomer-floor.templates.json +2 -2
  122. package/scripts/gds/onboarding-ship.js +1 -1
  123. package/scripts/gds/paste-token.js +3 -3
  124. package/scripts/gds/portability-smoke-memory.sh +5 -5
  125. package/scripts/gds/prove-strict-versioning.js +2 -2
  126. package/scripts/gds/provision-net.js +2 -2
  127. package/scripts/gds/provision-units.js +3 -3
  128. package/scripts/gds/pulse.js +2 -2
  129. package/scripts/gds/push-path-brief.js +2 -2
  130. package/scripts/gds/reauth.js +1 -1
  131. package/scripts/gds/recall.js +1 -1
  132. package/scripts/gds/redteam-patrol.js +3 -3
  133. package/scripts/gds/render-ideas.js +5 -5
  134. package/scripts/gds/repo-metrics.js +1 -1
  135. package/scripts/gds/sandbox-stage.js +3 -3
  136. package/scripts/gds/seed-adopt-tasks.js +3 -3
  137. package/scripts/gds/seed-board-room-tasks.js +1 -1
  138. package/scripts/gds/seed-bongos-app-tasks.js +2 -2
  139. package/scripts/gds/seed-bongos-coreB-tranche1-tasks.js +3 -3
  140. package/scripts/gds/seed-bongos-coreB-tranche2-tasks.js +4 -4
  141. package/scripts/gds/seed-bongos-tasks.js +5 -5
  142. package/scripts/gds/seed-bongos-v1-idea-routing-tasks.js +1 -1
  143. package/scripts/gds/seed-bongos-v1-seo-tasks.js +1 -1
  144. package/scripts/gds/seed-bv1-community-tasks.js +1 -1
  145. package/scripts/gds/seed-bv1-privacy-invites-tasks.js +1 -1
  146. package/scripts/gds/seed-bv1-profile-page-tasks.js +1 -1
  147. package/scripts/gds/seed-bv1-profiles-tasks.js +1 -1
  148. package/scripts/gds/seed-bv1-r01-delta-tasks.js +1 -1
  149. package/scripts/gds/seed-gds-v4-tasks.js +3 -3
  150. package/scripts/gds/seed-medusa-tasks.js +1 -1
  151. package/scripts/gds/seed-productization-tasks.js +1 -1
  152. package/scripts/gds/seed-project-admin-console-tasks.js +1 -1
  153. package/scripts/gds/seed-provisioning-tasks.js +2 -2
  154. package/scripts/gds/seed-strict-versioning-tasks.js +3 -3
  155. package/scripts/gds/seed-v2-world-tasks.js +2 -2
  156. package/scripts/gds/seed-verify-criteria.js +1 -1
  157. package/scripts/gds/session-digest.js +1 -1
  158. package/scripts/gds/session.js +2 -2
  159. package/scripts/gds/setup.js +7 -7
  160. package/scripts/gds/ship-flow.js +3 -3
  161. package/scripts/gds/ship-grade-steps.js +3 -3
  162. package/scripts/gds/ship-memory-sync.js +1 -1
  163. package/scripts/gds/ship-session-upload.js +3 -3
  164. package/scripts/gds/smoke-batch-claim.sh +10 -10
  165. package/scripts/gds/smoke-batch-release.sh +14 -14
  166. package/scripts/gds/smoke-claim-consistency.sh +19 -19
  167. package/scripts/gds/smoke-dependencies.sh +9 -9
  168. package/scripts/gds/smoke-write.sh +11 -11
  169. package/scripts/gds/start.js +1 -1
  170. package/scripts/gds/status.js +2 -2
  171. package/scripts/gds/strand-watch.js +1 -1
  172. package/scripts/gds/triage.js +4 -4
  173. package/scripts/gds/version-close.js +2 -2
  174. package/scripts/hall-preview/README.md +1 -1
  175. package/scripts/hall-preview/server.js +1 -1
  176. package/src/bongos/auth-admission.js +3 -3
  177. package/src/bongos/auth-idp.js +2 -2
  178. package/src/bongos/auth.js +3 -3
  179. package/src/bongos/db.js +2 -2
  180. package/src/bongos/llm-cache.js +2 -2
  181. package/src/bongos/metrics.js +1 -1
  182. package/src/bongos/middleware/audit.js +3 -3
  183. package/src/bongos/middleware/rate-limit.js +1 -1
  184. package/src/bongos/platform-visibility-gate.js +2 -2
  185. package/src/bongos/routes/_helpers.js +1 -1
  186. package/src/bongos/routes/audit-log.js +1 -1
  187. package/src/bongos/routes/auth.js +5 -5
  188. package/src/bongos/routes/backup.js +1 -1
  189. package/src/bongos/routes/builders.js +1 -1
  190. package/src/bongos/routes/instance.js +1 -1
  191. package/src/bongos/routes/live.js +1 -1
  192. package/src/bongos/routes/me.js +2 -2
  193. package/src/bongos/routes/modules.js +2 -2
  194. package/src/bongos/routes/public.js +1 -1
  195. package/src/bongos/routes/security.js +4 -4
  196. package/src/bongos/routes.js +1 -1
  197. package/src/bongos/serve-internal.js +6 -6
  198. package/src/branding.js +1 -1
  199. package/src/module-api.js +1 -1
  200. package/src/module-seams.js +2 -2
  201. package/src/platform-server.js +2 -2
  202. package/tests/api_alias_exceptions.mjs +67 -0
  203. package/tests/application_echo.mjs +12 -12
  204. package/tests/artifact_audit.mjs +1 -1
  205. package/tests/auth_page_gate.mjs +4 -4
  206. package/tests/auth_web_recovery.mjs +11 -11
  207. package/tests/bongos_login.mjs +7 -4
  208. package/tests/box_env.mjs +6 -6
  209. package/tests/bug_attachments.mjs +1 -1
  210. package/tests/cli_sessions.mjs +1 -1
  211. package/tests/dev_lib.mjs +1 -1
  212. package/tests/discord_bugs.mjs +2 -2
  213. package/tests/discord_inbound.mjs +2 -2
  214. package/tests/explore_visible_states.mjs +1 -1
  215. package/tests/government_page_gates.mjs +1 -1
  216. package/tests/hall_reference_world.mjs +1 -1
  217. package/tests/idea_ideate_full.mjs +1 -1
  218. package/tests/idp_federation.mjs +2 -2
  219. package/tests/llm-cache.mjs +1 -1
  220. package/tests/manage_manifest_shared_read.mjs +3 -3
  221. package/tests/people_directory_clip.mjs +1 -1
  222. package/tests/planning_session_skill.mjs +1 -1
  223. package/tests/platform_visibility_gate.mjs +15 -15
  224. package/tests/profile_route.mjs +25 -25
  225. package/tests/projects_hub.mjs +2 -2
  226. package/tests/provision.mjs +2 -2
  227. package/tests/provision_settings_apply.mjs +4 -4
  228. package/tests/sandbox_stage.mjs +8 -8
  229. package/tests/scouting_owner_access_and_reach.mjs +3 -3
  230. package/tests/session_upload_health.mjs +329 -0
  231. package/tests/setup_device_flow_fallback.mjs +1 -1
  232. package/tests/skill_ask_for_help.mjs +3 -3
  233. package/tests/skill_grade_audit.mjs +2 -2
  234. package/tests/skill_grader_health.mjs +3 -3
  235. package/tests/smoke_write_contract.mjs +1 -1
@@ -732,7 +732,7 @@ async function main() {
732
732
  const rawClaimable = r.data.claimable || [];
733
733
 
734
734
  // Discipline routing (V3.R81 / #299). preferred_disciplines lives on the
735
- // builder row (migration 027), surfaced via /api/gds/me.
735
+ // builder row (migration 027), surfaced via /api/bongos/me.
736
736
  const preferred = (me.ok && Array.isArray(me.data?.builder?.preferred_disciplines))
737
737
  ? me.data.builder.preferred_disciplines
738
738
  : [];
@@ -5,7 +5,7 @@
5
5
  // ~10-step prose archaeology (grep seed file → eyeball "Gates R55–R63" →
6
6
  // re-query each task) that motivated the task. Reads the structured
7
7
  // criterion↔task link (task_criteria, migration 055) via the public endpoint
8
- // GET /api/gds/versions/:id/progress.
8
+ // GET /api/bongos/versions/:id/progress.
9
9
  //
10
10
  // Usage:
11
11
  // node scripts/gds/status.js # all criteria, default version
@@ -59,7 +59,7 @@ function parseArgs(argv) {
59
59
  async function fetchProgress(version) {
60
60
  let res;
61
61
  try {
62
- res = await fetch(`${API_BASE}/api/gds/versions/${encodeURIComponent(version)}/progress`, {
62
+ res = await fetch(`${API_BASE}/api/bongos/versions/${encodeURIComponent(version)}/progress`, {
63
63
  headers: { 'User-Agent': require('../../src/branding').userAgent() },
64
64
  });
65
65
  } catch (err) {
@@ -145,7 +145,7 @@ async function check({ nowMs = Date.now(), timeoutMs = DEFAULT_TIMEOUT_MS, confi
145
145
  let pages;
146
146
  try {
147
147
  pages = await Promise.all(WATCHED.map(async (status) => {
148
- const res = await withTimeout(call('GET', `/api/gds/tasks?status=${status}&limit=${PAGE_LIMIT}`), status);
148
+ const res = await withTimeout(call('GET', `/api/bongos/tasks?status=${status}&limit=${PAGE_LIMIT}`), status);
149
149
  const body = res && (res.data || res);
150
150
  const tasks = body && Array.isArray(body.tasks) ? body.tasks : null;
151
151
  if (!tasks) throw new Error(`unexpected shape from /tasks?status=${status}`);
@@ -158,7 +158,7 @@ async function listOpenIdeas() {
158
158
  // GET /inbox in routes/inbox.js only returns open ideas regardless of
159
159
  // query — but the explicit param is forward-safe.
160
160
  if (!r.ok) {
161
- throw new Error(`GET /api/gds/inbox failed: ${r.status} ${JSON.stringify(r.data)}`);
161
+ throw new Error(`GET /api/bongos/inbox failed: ${r.status} ${JSON.stringify(r.data)}`);
162
162
  }
163
163
  return r.data?.ideas ?? [];
164
164
  }
@@ -167,7 +167,7 @@ async function patchIdea(id, patch) {
167
167
  const api = await cliClient();
168
168
  const r = await api.inbox.patchInboxId({ id, body: patch });
169
169
  if (!r.ok) {
170
- throw new Error(`PATCH /api/gds/inbox/${id} failed: ${r.status} ${JSON.stringify(r.data)}`);
170
+ throw new Error(`PATCH /api/bongos/inbox/${id} failed: ${r.status} ${JSON.stringify(r.data)}`);
171
171
  }
172
172
  return r.data?.idea;
173
173
  }
@@ -254,7 +254,7 @@ function applyGoalAnswer(defaultGoalId, rawAnswer) {
254
254
  }
255
255
 
256
256
  async function createTask({ versionId, title, description, priority, sourceRef, goalId = null }) {
257
- // (The old note here said POST /api/gds/tasks does not accept 'kind'. That is
257
+ // (The old note here said POST /api/bongos/tasks does not accept 'kind'. That is
258
258
  // no longer true — routes/tasks.js takes it, and the hall promote path already
259
259
  // sends it. Left un-sent from THIS path deliberately: changing what kind a
260
260
  // triaged promotion lands with is a behaviour change task R13 was not asked to
@@ -284,7 +284,7 @@ async function createTask({ versionId, title, description, priority, sourceRef,
284
284
  const api = await cliClient();
285
285
  const r = await api.tasks.postTasks({ body });
286
286
  if (!r.ok) {
287
- throw new Error(`POST /api/gds/tasks failed: ${r.status} ${JSON.stringify(r.data)}`);
287
+ throw new Error(`POST /api/bongos/tasks failed: ${r.status} ${JSON.stringify(r.data)}`);
288
288
  }
289
289
  return r.data?.task;
290
290
  }
@@ -5,8 +5,8 @@
5
5
  //
6
6
  // What it does:
7
7
  // 1. Verifies the version is ready to close (calls
8
- // GET /api/gds/versions/close-suggestions and checks the gate).
9
- // 2. Lists shipped tasks for the version (GET /api/gds/tasks) and drafts a
8
+ // GET /api/bongos/versions/close-suggestions and checks the gate).
9
+ // 2. Lists shipped tasks for the version (GET /api/bongos/tasks) and drafts a
10
10
  // <scope>-shipped.md archive grouped by kind/bucket from value_summary.
11
11
  // 3. Identifies carry-over candidates (backlog + ready) and drafts a
12
12
  // next-version scope stub (e.g. limitations/pms-v3.md) with a
@@ -4,7 +4,7 @@ The dev-box sandbox previews the **game only** — `/builders` 404s there (idea
4
4
  hall-ui changes are reviewed here: a DB-less fixture server that serves the **real**
5
5
  `modules/hall-ui/public` files through the **real** serving seams (boot-time `?v=`
6
6
  content-hash stamping, `{{token}}` replacement, `window.__BRANDING__`/`__MODULES__`
7
- injection, theme markup), answering every `/api/gds|bongos/*` read from checked-in
7
+ injection, theme markup), answering every `/api/bongos|bongos/*` read from checked-in
8
8
  fixtures. Proven recipe from tasks 1723/1742, checked in by task 2167.
9
9
 
10
10
  ## Quickstart
@@ -5,7 +5,7 @@
5
5
  // so hall-ui changes are reviewed HERE: a tiny express app that serves the real
6
6
  // modules/hall-ui/public files through the REAL serving seams (boot-time ?v=
7
7
  // stamping, {{token}} replacement, __BRANDING__/__MODULES__ injection, theme
8
- // markup) with the /api/gds|bongos reads answered from checked-in fixtures.
8
+ // markup) with the /api/bongos|bongos reads answered from checked-in fixtures.
9
9
  // Boots DB-less (pg pools connect lazily). Proven recipe from tasks 1723/1742,
10
10
  // finally checked in.
11
11
  //
@@ -62,7 +62,7 @@ async function reportMembershipCheckIn({ githubId, githubLogin, displayName, ava
62
62
  if (!idp) return;
63
63
  const kind = membershipKind({ githubLogin });
64
64
  try {
65
- await fetch(`${idp.origin}/api/gds/sso/membership/check-in`, {
65
+ await fetch(`${idp.origin}/api/bongos/sso/membership/check-in`, {
66
66
  method: 'POST',
67
67
  headers: { 'Content-Type': 'application/json', Accept: 'application/json', 'User-Agent': userAgent() },
68
68
  body: JSON.stringify({
@@ -159,7 +159,7 @@ async function reportActivityRollup({ builderId, githubId = null }) {
159
159
  if (!/^\d+$/.test(String(ghId ?? ''))) return;
160
160
  const shipped = await pool.query('SELECT count(*)::int AS n FROM tasks WHERE shipped_by = $1', [builderId]);
161
161
  const recentShips = await recentShipsForRollup(builderId);
162
- await fetch(`${idp.origin}/api/gds/sso/activity/rollup`, {
162
+ await fetch(`${idp.origin}/api/bongos/sso/activity/rollup`, {
163
163
  method: 'POST',
164
164
  headers: { 'Content-Type': 'application/json', Accept: 'application/json', 'User-Agent': userAgent() },
165
165
  body: JSON.stringify({
@@ -434,7 +434,7 @@ async function readApplicantProfileFromHub(githubId) {
434
434
  const idp = loadIdpConfig();
435
435
  if (!idp || githubId == null) return null;
436
436
  try {
437
- const r = await fetch(`${idp.origin}/api/gds/sso/applicant-profile`, {
437
+ const r = await fetch(`${idp.origin}/api/bongos/sso/applicant-profile`, {
438
438
  method: 'POST',
439
439
  headers: { 'Content-Type': 'application/json', Accept: 'application/json', 'User-Agent': userAgent() },
440
440
  signal: AbortSignal.timeout(APPLICANT_PROFILE_TIMEOUT_MS),
@@ -31,7 +31,7 @@ const { loadIdpConfig } = require('./auth-config.js');
31
31
  const { newSessionToken } = require('./auth-github.js');
32
32
 
33
33
  function idpAuthorizeUrl(origin, clientId, state, redirectUri) {
34
- const u = new URL(`${String(origin).replace(/\/+$/, '')}/api/gds/sso/authorize`);
34
+ const u = new URL(`${String(origin).replace(/\/+$/, '')}/api/bongos/sso/authorize`);
35
35
  u.searchParams.set('client_id', clientId);
36
36
  u.searchParams.set('redirect_uri', redirectUri);
37
37
  u.searchParams.set('state', state);
@@ -48,7 +48,7 @@ function buildIdpAuthorizeUrl(state, redirectUri) {
48
48
  // with the instance's client_id + client_secret; the hub returns IDENTITY ONLY
49
49
  // (github_id, github_login, display_name, avatar_url) — never a rank (ADR 0141 §2).
50
50
  async function exchangeIdpCode({ code, redirectUri, idp }) {
51
- const res = await fetch(`${idp.origin}/api/gds/sso/token`, {
51
+ const res = await fetch(`${idp.origin}/api/bongos/sso/token`, {
52
52
  method: 'POST',
53
53
  headers: {
54
54
  'Content-Type': 'application/json',
@@ -3,11 +3,11 @@
3
3
  // Two flows that produce the same `builder_sessions` row:
4
4
  //
5
5
  // - Device Flow (CLI):
6
- // 1. POST /api/gds/auth/device/start
6
+ // 1. POST /api/bongos/auth/device/start
7
7
  // → { user_code, verification_uri, device_code, interval, expires_in }
8
8
  // The CLI shows user_code to the user and asks them to open
9
9
  // verification_uri in a browser.
10
- // 2. CLI polls POST /api/gds/auth/device/poll { device_code }
10
+ // 2. CLI polls POST /api/bongos/auth/device/poll { device_code }
11
11
  // → 'pending' | 'slow_down' | 'expired' | 'denied' |
12
12
  // { token, builder: {...} }
13
13
  //
@@ -364,7 +364,7 @@ async function requireBuilder(req, res, next) {
364
364
  // and also falls back to Referer, so this is belt-and-braces for navigations
365
365
  // where Referer may be stripped. Returns '' if the host can't be determined.
366
366
  function signInWithReturn(req) {
367
- const base = '/api/gds/auth/web/start';
367
+ const base = '/api/bongos/auth/web/start';
368
368
  const proto = req.headers['x-forwarded-proto'] || (req.secure ? 'https' : 'http');
369
369
  const host = req.headers['x-forwarded-host'] || req.headers['host'];
370
370
  if (!host) return base;
package/src/bongos/db.js CHANGED
@@ -737,7 +737,7 @@ async function revokeSession(token) {
737
737
 
738
738
  // revokeSessionById — V3.R38 / #259. Kill ONE session by primary key. Returns
739
739
  // the number of rows revoked (0 if id didn't exist or was already revoked, 1
740
- // otherwise). Used by POST /api/gds/auth/revoke (Archon-only).
740
+ // otherwise). Used by POST /api/bongos/auth/revoke (Archon-only).
741
741
 
742
742
  async function revokeSessionById(sessionId) {
743
743
  const { rowCount } = await pool.query(
@@ -751,7 +751,7 @@ async function revokeSessionById(sessionId) {
751
751
 
752
752
  // revokeAllSessionsForBuilder — V3.R38 / #259. Kill EVERY non-revoked session
753
753
  // for a single builder. Returns the count of sessions revoked. Used by:
754
- // * POST /api/gds/auth/revoke-all (Archon-only direct call)
754
+ // * POST /api/bongos/auth/revoke-all (Archon-only direct call)
755
755
  // * setBuilderRank when newRank < oldRank (rank-change-near-instant per C7)
756
756
 
757
757
  async function revokeAllSessionsForBuilder(builderId) {
@@ -151,7 +151,7 @@ async function lookup(cacheKey, { tokensSavedEst = 0 } = {}) {
151
151
  // must never take down the thing it accelerates.
152
152
  if (_apiCall) {
153
153
  try {
154
- const r = await _apiCall('POST', '/api/gds/llm-cache/lookup',
154
+ const r = await _apiCall('POST', '/api/bongos/llm-cache/lookup',
155
155
  { cache_key: cacheKey, tokens_saved_est: est }, { allowUnauthenticated: true });
156
156
  if (r && r.ok && r.data && r.data.hit) return r.data.result || null;
157
157
  } catch (_) { /* network/auth error → miss */ }
@@ -185,7 +185,7 @@ async function store(spec, { resultStdout, resultCostUsd = 0 } = {}) {
185
185
  // cost server-side; best-effort: any error → no-store (never throws).
186
186
  if (_apiCall) {
187
187
  try {
188
- const r = await _apiCall('POST', '/api/gds/llm-cache/store',
188
+ const r = await _apiCall('POST', '/api/bongos/llm-cache/store',
189
189
  { spec, result_stdout: resultStdout, result_cost_usd: Number(resultCostUsd) || 0 },
190
190
  { allowUnauthenticated: true });
191
191
  return !!(r && r.ok && r.data && r.data.stored);
@@ -14,7 +14,7 @@
14
14
  // - process/runtime: uptime, RSS, heap, CPU (counter), event-loop lag, build_info
15
15
  // - HTTP (from httpMiddleware): gds_http_requests_total{method,route,status} +
16
16
  // gds_http_request_duration_seconds histogram — route normalized to a
17
- // low-cardinality template so /api/gds/tasks/1380 and /…/1381 share a series.
17
+ // low-cardinality template so /api/bongos/tasks/1380 and /…/1381 share a series.
18
18
  // Gives error-rate + 4xx/5xx per route. 401/403 also bump gds_auth_failures_total.
19
19
  // - DB gauges (collected at scrape, read-only — never instruments the gate-floor
20
20
  // ship pipeline): tasks-by-status, claims (all-time + active), builders-by-rank,
@@ -1,13 +1,13 @@
1
1
  // src/bongos/middleware/audit.js — append-only audit log for authenticated writes
2
2
  // (V3.R35 / #256).
3
3
  //
4
- // Wire-up: mounted INSIDE the /api/gds sub-router by routes.js, AFTER the JSON
4
+ // Wire-up: mounted INSIDE the /api/bongos sub-router by routes.js, AFTER the JSON
5
5
  // body parser and AFTER each route's auth middleware has run (the middleware
6
6
  // fires on res 'finish', so by then auth either populated req.builder or sent
7
7
  // a 401 — both cases are handled below).
8
8
  //
9
9
  // What it captures:
10
- // - Every authenticated POST/PATCH/PUT/DELETE that the /api/gds router
10
+ // - Every authenticated POST/PATCH/PUT/DELETE that the /api/bongos router
11
11
  // served. Reads (GET) are explicitly skipped — they're high-volume and
12
12
  // low-signal for forensics.
13
13
  // - The redacted request body, the response status the client actually saw,
@@ -161,7 +161,7 @@ function clientIp(req) {
161
161
  // (e.g. 404 from the router), fall back to req.path.
162
162
  function routePattern(req) {
163
163
  if (req.route && req.route.path) {
164
- // baseUrl carries '/api/gds' plus any sub-router prefix; combining them
164
+ // baseUrl carries '/api/bongos' plus any sub-router prefix; combining them
165
165
  // yields the full pattern. trim trailing slash for tidiness.
166
166
  const base = (req.baseUrl || '').replace(/\/+$/, '');
167
167
  const tail = req.route.path === '/' ? '' : req.route.path;
@@ -1,7 +1,7 @@
1
1
  // src/bongos/middleware/rate-limit.js — V3.R34 (#255).
2
2
  //
3
3
  // Five sliding-window in-memory limiters. The first two are the GLOBAL pair and
4
- // protect write methods on /api/gds/* only — read methods (GET, HEAD, OPTIONS)
4
+ // protect write methods on /api/bongos/* only — read methods (GET, HEAD, OPTIONS)
5
5
  // bypass them entirely; #3, #4 and #5 are mounted per-surface to close exactly that
6
6
  // gap where an unauthenticated READ is itself the abuse.
7
7
  //
@@ -127,7 +127,7 @@ function isGated() { return mode() === GATED; }
127
127
 
128
128
  // Express routes case-insensitively and tolerates one trailing slash, so the
129
129
  // exempt test must see the path the way the router will — otherwise a probe
130
- // spelled `/HEALTHZ` or `/api/gds/instance/` is refused while the router would
130
+ // spelled `/HEALTHZ` or `/api/bongos/instance/` is refused while the router would
131
131
  // have served it. Mismatches still fail CLOSED; this only keeps the list honest.
132
132
  function normalizePath(p) {
133
133
  let s = String(p || '').toLowerCase();
@@ -160,7 +160,7 @@ function productName() {
160
160
  // subdomain, a dev port, or plain http would otherwise be dropped at the default
161
161
  // page. Only a GET/HEAD path is safe to come back to; anything else returns to '/'.
162
162
  function signInHref(req) {
163
- const base = '/api/gds/auth/web/start';
163
+ const base = '/api/bongos/auth/web/start';
164
164
  const back = (req.method === 'GET' || req.method === 'HEAD') ? relativeReturn(req.originalUrl) : null;
165
165
  return back ? `${base}?return=${encodeURIComponent(back)}` : base;
166
166
  }
@@ -409,7 +409,7 @@ function hardenRouterStack(router, seen = new Set()) {
409
409
  // Read-only, no-auth, no-secret routes, so a static '*' is safe; the caller
410
410
  // mounts it scoped to a `/public…` prefix (passed as `scope` for documentation
411
411
  // + signature parity) so it can't leak onto the authenticated routes on the same
412
- // /api/gds base. Behavior is BYTE-IDENTICAL to the two copy-pasted blocks it
412
+ // /api/bongos base. Behavior is BYTE-IDENTICAL to the two copy-pasted blocks it
413
413
  // replaces (routes/analytics.js + routes/public.js): sets
414
414
  // Access-Control-Allow-Origin:*, and answers an OPTIONS preflight with
415
415
  // Allow-Methods 'GET, OPTIONS' + Allow-Headers 'Content-Type' and a 204.
@@ -14,7 +14,7 @@ const VALID_METHODS = new Set(['POST', 'PATCH', 'PUT', 'DELETE']);
14
14
  module.exports = function buildAuditLogRouter() {
15
15
  const router = express.Router();
16
16
 
17
- // GET /api/gds/audit-log?limit=&offset=&builder_id=&method=
17
+ // GET /api/bongos/audit-log?limit=&offset=&builder_id=&method=
18
18
  //
19
19
  // Paginated, newest-first. Clamps:
20
20
  // limit → 1..500, default 100
@@ -92,7 +92,7 @@ function renderAuthErrorPage(heading, detail, opts = {}) {
92
92
  catch { return AUTH_ERROR_FALLBACK; }
93
93
  })();
94
94
  const subtitle = opts.subtitle || copy.subtitle;
95
- const cta = opts.cta || { href: opts.startHref || '/api/gds/auth/web/start', label: copy.ctaLabel };
95
+ const cta = opts.cta || { href: opts.startHref || '/api/bongos/auth/web/start', label: copy.ctaLabel };
96
96
  const note = opts.note || "If this keeps happening, the GitHub OAuth app's authorized callback URL may be misconfigured. See docs/recipes/ops-gotchas.md (GitHub OAuth section).";
97
97
  // The instance name in the tab title comes from the branding pack, never a
98
98
  // hardcoded host brand — a non-OTB instance sees its own name (ADR 0062 §3).
@@ -165,7 +165,7 @@ function renderAccessPendingPage(login, startHref) {
165
165
  </header>
166
166
  <main>
167
167
  <section class="scroll">
168
- <div class="landing" id="pending" data-login="${safeLogin}" data-start="${escapeHtml(startHref || '/api/gds/auth/web/start')}">
168
+ <div class="landing" id="pending" data-login="${safeLogin}" data-start="${escapeHtml(startHref || '/api/bongos/auth/web/start')}">
169
169
  <p>We're checking your access now. You'll be signed in automatically as soon as it clears — no need to refresh.</p>
170
170
  <p class="landing__note" id="pending-note">Checking…</p>
171
171
  </div>
@@ -178,7 +178,7 @@ function renderAccessPendingPage(login, startHref) {
178
178
  var login = el ? el.getAttribute('data-login') : '';
179
179
  /* server-built from the still-valid handshake cookies (task 1003234): the
180
180
  fresh sign-in keeps the wizard return + repo scope a founder started with */
181
- var start = (el && el.getAttribute('data-start')) || '/api/gds/auth/web/start';
181
+ var start = (el && el.getAttribute('data-start')) || '/api/bongos/auth/web/start';
182
182
  var EVERY_MS = 3000;
183
183
  var GIVE_UP_MS = 5 * 60 * 1000;
184
184
  var started = Date.now();
@@ -190,7 +190,7 @@ function renderAccessPendingPage(login, startHref) {
190
190
  note.textContent = 'Still waiting on approval. You can leave this page open, or try signing in again later.';
191
191
  return;
192
192
  }
193
- fetch('/api/gds/auth/web/admission-status?login=' + encodeURIComponent(login), { credentials: 'omit' })
193
+ fetch('/api/bongos/auth/web/admission-status?login=' + encodeURIComponent(login), { credentials: 'omit' })
194
194
  .then(function (r) { return r.ok ? r.json() : null; })
195
195
  .then(function (j) {
196
196
  if (j && j.admitted) { land(); return; }
@@ -350,7 +350,7 @@ function recoveryStartHref(req) {
350
350
  if (returnTo) params.set('return', returnTo);
351
351
  if (parseCookie(req, REPOS_COOKIE) === '1') params.set('repos', '1');
352
352
  const q = params.toString();
353
- return '/api/gds/auth/web/start' + (q ? '?' + q : '');
353
+ return '/api/bongos/auth/web/start' + (q ? '?' + q : '');
354
354
  }
355
355
 
356
356
  // The canonical sign-in origin, read from the instance branding pack (oauthOrigin,
@@ -153,7 +153,7 @@ module.exports = function buildBackupRouter() {
153
153
 
154
154
  res.status(202).json({
155
155
  ok: true,
156
- message: 'Backup started — poll GET /api/gds/backup/status to see the new dump land (usually < 30 s).',
156
+ message: 'Backup started — poll GET /api/bongos/backup/status to see the new dump land (usually < 30 s).',
157
157
  started_at: startedAt,
158
158
  });
159
159
  }));
@@ -456,7 +456,7 @@ module.exports = function buildBuildersRouter() {
456
456
  // Public read (no auth). Spec says the hall renders other builders'
457
457
  // checklists read-only — a builder's onboarding progress is roster-visible
458
458
  // signal, same posture as rank or drachmae shown on the leaderboard. The
459
- // builder's own row is also surfaced inside /api/gds/me; this endpoint is
459
+ // builder's own row is also surfaced inside /api/bongos/me; this endpoint is
460
460
  // what the hall hits for the CURRENT viewer AND for any other builder
461
461
  // whose card is rendered.
462
462
  //
@@ -1,4 +1,4 @@
1
- // src/bongos/routes/instance.js — GET /api/gds/instance (V4.R82, task 1249, ADR 0062 / Cloud Bongos C8).
1
+ // src/bongos/routes/instance.js — GET /api/bongos/instance (V4.R82, task 1249, ADR 0062 / Cloud Bongos C8).
2
2
  //
3
3
  // The instance manifest: one public, pre-auth, read-only descriptor that a CLI
4
4
  // (`bongos login <url>`) fetches to configure ITSELF — the conda
@@ -105,7 +105,7 @@ function streamLive(req, res, deps = {}) {
105
105
  function buildLiveRouter() {
106
106
  const router = express.Router();
107
107
 
108
- // GET /api/gds/live — SSE stream of Bongos state-change nudges for the hall.
108
+ // GET /api/bongos/live — SSE stream of Bongos state-change nudges for the hall.
109
109
  // rank: any-builder — requireBuilder gates anonymous/abuse traffic (defense
110
110
  // in depth; the payload leaks nothing). Mirrors the room's #983 signed-in
111
111
  // gate. EventSource carries the gds_session cookie on this same-origin GET, so
@@ -157,7 +157,7 @@ module.exports = function buildMeRouter() {
157
157
  // V3.R24 (#244): the `builder` payload now carries `karma` (migration 040
158
158
  // added the column + karma_log table). The field is surfaced by
159
159
  // db.getBuilderById() — no shape change here, just documenting that the
160
- // /api/gds/me response is the canonical place clients read karma from.
160
+ // /api/bongos/me response is the canonical place clients read karma from.
161
161
  //
162
162
  // rank: any-builder — own identity + own contributions; preserved per CRITICAL §4.
163
163
  router.get('/me', auth.requireBuilder, async (req, res) => {
@@ -621,7 +621,7 @@ module.exports = function buildMeRouter() {
621
621
  // The five per-builder PREFERENCE routes — /me/skill-prefs, /me/sound-prefs,
622
622
  // /me/event-sound-prefs, /me/wandering, /me/render (GET + PATCH each) — moved to
623
623
  // modules/builder-settings/routes/settings.js (BV1.R80 / ADR 0093 §1). They keep
624
- // their exact /me/* paths (the loader mounts that router on this same /api/gds
624
+ // their exact /me/* paths (the loader mounts that router on this same /api/bongos
625
625
  // router, before the public catch-all), so the API is byte-identical. The GET
626
626
  // /me aggregator above stays here as a thin facade resolving the
627
627
  // `builder-settings` port for its wandering/render/needs slices (02-module-map §2).
@@ -148,7 +148,7 @@ module.exports = function buildModulesRouter() {
148
148
  res.json({ ok: true, key, enabled, note: 'Live on this box now. Persisting past the next deploy needs config/modules.json committed.' });
149
149
  }));
150
150
 
151
- // POST /api/gds/modules/:key/submit — ADR 0107 §1 upstreaming submission.
151
+ // POST /api/bongos/modules/:key/submit — ADR 0107 §1 upstreaming submission.
152
152
  //
153
153
  // task 1770. Body: { signed_by?: "Name <email>" }. Re-runs the §4
154
154
  // AGPL/publish pre-check + requires a DCO-style sign-off against THIS box's
@@ -213,7 +213,7 @@ module.exports = function buildModulesRouter() {
213
213
  res.status(201).json({ ok: true, submission });
214
214
  }));
215
215
 
216
- // GET /api/gds/modules/submissions?status=&module_key= — the upstreaming
216
+ // GET /api/bongos/modules/submissions?status=&module_key= — the upstreaming
217
217
  // review queue (task 1771 reads this). Metadata only — no file contents (a
218
218
  // future GET .../:id can add a with-files fetch if the review UI needs it).
219
219
  //
@@ -115,7 +115,7 @@ module.exports = function buildPublicRouter() {
115
115
  // CORS for the public surface (ADR 0029 / #566): the off-box status page reads
116
116
  // these cross-origin. Read-only, no-auth, no-secret routes, so a static '*' is
117
117
  // safe; scoped to '/public' so it can't leak onto the authenticated routes on
118
- // the same /api/gds base. No Vary:Origin — the ACAO never varies by origin.
118
+ // the same /api/bongos base. No Vary:Origin — the ACAO never varies by origin.
119
119
  // Shared middleware: corsPublicGet (_helpers.js) — byte-identical to analytics.js.
120
120
  router.use('/public', corsPublicGet('/public'));
121
121
 
@@ -74,7 +74,7 @@ async function readFullAdr() {
74
74
  module.exports = function buildSecurityRouter() {
75
75
  const router = express.Router();
76
76
 
77
- // GET /api/gds/security/adr
77
+ // GET /api/bongos/security/adr
78
78
  //
79
79
  // Metic+ only. Returns the full security ADR as { adr_md, source,
80
80
  // fetched_at } when the file is provisioned; otherwise 404 with a
@@ -125,7 +125,7 @@ module.exports = function buildSecurityRouter() {
125
125
  // now `permission_forbidden`, not `rank_forbidden`.
126
126
  // -----------------------------------------------------------------------
127
127
 
128
- // GET /api/gds/security/docs — list doc METADATA (no content).
128
+ // GET /api/bongos/security/docs — list doc METADATA (no content).
129
129
  //
130
130
  // rank: archon — index of exploit-detail engagement reports. Gate:
131
131
  // requirePermission('security.report.adjudicate') — BV1.R104.
@@ -144,7 +144,7 @@ module.exports = function buildSecurityRouter() {
144
144
  }
145
145
  );
146
146
 
147
- // GET /api/gds/security/docs/:slug — one doc WITH content, or 404.
147
+ // GET /api/bongos/security/docs/:slug — one doc WITH content, or 404.
148
148
  //
149
149
  // rank: archon — reads the full exploit-detail report body. Gate:
150
150
  // requirePermission('security.report.adjudicate') — BV1.R104.
@@ -177,7 +177,7 @@ module.exports = function buildSecurityRouter() {
177
177
  }
178
178
  );
179
179
 
180
- // POST /api/gds/security/docs — upsert a doc by slug. The director uploads
180
+ // POST /api/bongos/security/docs — upsert a doc by slug. The director uploads
181
181
  // each dated engagement report here after deploy.
182
182
  //
183
183
  // Body: { slug, title, content_md }. content_md uses a large explicit cap
@@ -108,7 +108,7 @@ function buildGdsRouter() {
108
108
  });
109
109
 
110
110
  // Audit middleware (V3.R35 #256) — attaches a res 'finish' hook so every
111
- // authenticated POST/PATCH/PUT/DELETE under /api/gds is recorded in
111
+ // authenticated POST/PATCH/PUT/DELETE under /api/bongos is recorded in
112
112
  // audit_log AFTER the response is sent. It cannot fail the request: throws
113
113
  // are caught, DB errors are swallowed, and it never mutates req/res in a
114
114
  // way downstream handlers can see. Mounted BEFORE the feature routers so
@@ -2,7 +2,7 @@
2
2
  //
3
3
  // Mounts every non-game surface the platform serves onto an Express app:
4
4
  // * /healthz + /version — liveness + deployed-build info
5
- // * /api/gds/* — the GDS API (buildGdsRouter)
5
+ // * /api/bongos/* — the GDS API (buildGdsRouter)
6
6
  // * /downloads/devbox/* — Dev Box installer redirect surface (#904)
7
7
  // * generic module web-surface — each enabled module's contributes.webSurfaces
8
8
  // hosts served on its Host prefix by ONE generic static
@@ -179,7 +179,7 @@ function jsonForScript(value) {
179
179
  // the pack wins. Applied to the boot-time stamped HTML maps (the pack is a
180
180
  // boot-time singleton, computed once). Off-box surfaces that can't be
181
181
  // server-injected (the GitHub-Pages status page) read the same projection from
182
- // GET /api/gds/public/branding. Pure + exported for the unit test.
182
+ // GET /api/bongos/public/branding. Pure + exported for the unit test.
183
183
  function injectBrandingGlobal(html, brand = clientBranding(), mods = clientModules()) {
184
184
  // window.__MODULES__ — the enabled feature-module set (R54 task 1193, ADR 0062
185
185
  // §4), injected the same way as __BRANDING__ so hall/status scripts can hide
@@ -456,7 +456,7 @@ function injectModuleHallWidgets(html, scripts = hallWidgetScripts({ isEnabled:
456
456
  // builders.<apex> gets the builder surface (served by the hall-ui MODULE's web
457
457
  // surface, BV1.R85 — its DEDICATED block below); the apex host gets the game
458
458
  // (server.js) or — on a game-less instance — a plain 404 (platform-server.js). All
459
- // share the same process + the same /api/gds/* surface (mounted host-agnostically
459
+ // share the same process + the same /api/bongos/* surface (mounted host-agnostically
460
460
  // below). The prefix checks are apex-agnostic (any domain), so no brand string lives
461
461
  // here. isStatusHost + isBuildersHost stay the literal "status."/"builders."
462
462
  // predicates the entrypoints (server.js/platform-server.js) use to keep their apex
@@ -830,7 +830,7 @@ function mountInternalSurfaces(app) {
830
830
  // clean path so the address bar never shows ".../builders". PAGE paths only —
831
831
  // the slug is [a-z0-9-]+ with no dot, so asset URLs the pages emit
832
832
  // (/builders/style.css, /builders/*.js, /builders/diagrams/*.png) and the API
833
- // (/api/gds/builders/*) never match and pass through to the shim below.
833
+ // (/api/bongos/builders/*) never match and pass through to the shim below.
834
834
  const BUILDERS_CANONICAL_RE = /^\/builders(?:\/([a-z0-9-]+))?\/?$/i;
835
835
  app.use((req, res, next) => {
836
836
  if (!isBuildersHost(req)) return next();
@@ -1056,8 +1056,8 @@ function mountInternalSurfaces(app) {
1056
1056
  // read from BUILDERS_DIR. The module key is NOT named — the path is the
1057
1057
  // hall-ui module's public dir, resolved once here.
1058
1058
  //
1059
- // Auth is handled client-side: the page calls /api/gds/me; on 401 it redirects
1060
- // the browser to /api/gds/auth/web/start, which (per src/bongos/routes/auth.js)
1059
+ // Auth is handled client-side: the page calls /api/bongos/me; on 401 it redirects
1060
+ // the browser to /api/bongos/auth/web/start, which (per src/bongos/routes/auth.js)
1061
1061
  // loops back to /builders with a gds_session cookie set.
1062
1062
  const BUILDERS_DIR = path.join(ROOT, 'modules', 'hall-ui', 'public');
1063
1063
  const buildersStatic = express.static(BUILDERS_DIR, {
package/src/branding.js CHANGED
@@ -206,7 +206,7 @@ function userAgent() {
206
206
  }
207
207
 
208
208
  // The CLIENT-SAFE projection of the resolved pack — the subset the browser is
209
- // allowed to see, served by GET /api/gds/public/branding and consumed by the
209
+ // allowed to see, served by GET /api/bongos/public/branding and consumed by the
210
210
  // hall + status front-ends. Deliberately a small allow-list, NOT the whole pack:
211
211
  // origins, repo binding, db name, and env prefix are server-only and must never
212
212
  // reach the client. R56 (task 1195) seeded it with the configurable currency
package/src/module-api.js CHANGED
@@ -71,7 +71,7 @@ const { responsibilityFor, ROLE_RESPONSIBILITIES } = require('./role-responsibil
71
71
  // there. scripts/gds/bump-version.js still rewrites the literal below; it appends
72
72
  // the entry to that file. Look for a version's history there, not here.
73
73
  // ---------------------------------------------------------------------------
74
- const CORE_VERSION = '1.19.804'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
74
+ const CORE_VERSION = '1.19.805'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
75
75
 
76
76
  // A namespaced logger so a module's log lines are attributable + consistent.
77
77
  // Usage: const log = api.logger('dev-box'); log.info('mounted');
@@ -188,7 +188,7 @@ function listEvents() {
188
188
  //
189
189
  // Canonical extension points (the names core consumes):
190
190
  // • 'profile.fields' — server-side: each contributor is `async (ctx) => ({…slice})`;
191
- // the slices merge into the GET /api/gds/me payload.
191
+ // the slices merge into the GET /api/bongos/me payload.
192
192
  // (The client settings-panel seam is its browser twin,
193
193
  // window.OTB.contributeSettingsPanel in dom-utils.js.)
194
194
 
@@ -240,7 +240,7 @@ async function collectContributions(point, ctx) {
240
240
  // a module's contribution can't clobber a core field). Mutates + returns `base`,
241
241
  // and reports any collided keys so the caller can surface them — that signals a
242
242
  // move task took over a core key without first removing the core copy. Used by
243
- // GET /api/gds/me to fold 'profile.fields' slices into the profile payload.
243
+ // GET /api/bongos/me to fold 'profile.fields' slices into the profile payload.
244
244
  function mergeContributions(base, slices) {
245
245
  const collisions = [];
246
246
  for (const slice of slices || []) {
@@ -7,7 +7,7 @@
7
7
  // WHAT IT SERVES — the entire internal surface, via the shared mount that
8
8
  // server.js also uses (so the two entrypoints never drift, ADR 0052):
9
9
  // * /healthz + /version
10
- // * /api/gds/* — the full GDS API (buildGdsRouter)
10
+ // * /api/bongos/* — the full GDS API (buildGdsRouter)
11
11
  // * the status dashboard host — modules/status-ui/public/ (the status-ui module's
12
12
  // web surface, BV1.R84 — served by the loader seam)
13
13
  // * the builders' hall host — modules/hall-ui/public/ (the hall-ui module's
@@ -269,7 +269,7 @@ function buildPlatformApp() {
269
269
  });
270
270
  }
271
271
 
272
- // Non-game tail. Anything that did not resolve to /api/gds, the status host,
272
+ // Non-game tail. Anything that did not resolve to /api/bongos, the status host,
273
273
  // or the builders' hall lands here. There is NO game to fall through to, so:
274
274
  // * an API-shaped path gets a self-describing JSON 404 (never HTML), the
275
275
  // same contract server.js gives so a mis-prefixed CLI call is legible;