@bongos/core 1.19.725 → 1.19.727

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 (229) hide show
  1. package/.bongos-core.json +179 -494
  2. package/.devcontainer/Dockerfile +1 -1
  3. package/.devcontainer/devcontainer.json +2 -2
  4. package/.devcontainer/healthcheck.sh +1 -1
  5. package/.devcontainer/init-firewall.sh +1 -1
  6. package/.devcontainer/post-create.sh +2 -2
  7. package/.env.local.example +1 -1
  8. package/Dockerfile +1 -1
  9. package/docs/copy-inventory.md +1 -1
  10. package/docs/copy-registry.json +9 -9
  11. package/docs/module-api-changelog.md +4 -0
  12. package/docs/recipes/devbox-app-release.md +4 -4
  13. package/modules/dev-box/app/scripts/dmgbuild-settings.py +5 -5
  14. package/modules/dev-box/app/scripts/gen-brand.js +1 -1
  15. package/modules/dev-box/app/src/brand.js +1 -1
  16. package/modules/dev-box/app/test/unit.mjs +16 -16
  17. package/modules/dev-box/box-access.js +1 -1
  18. package/modules/dev-box/routes/box.js +1 -1
  19. package/modules/discord/discord-approvals.js +1 -1
  20. package/modules/grading/grader-model.js +1 -1
  21. package/modules/grading/grader-prompt.js +1 -1
  22. package/modules/grading/grader-workers/quality.js +1 -1
  23. package/modules/hall-ui/module.json +1 -1
  24. package/modules/hall-ui/public/brand-apply.js +1 -1
  25. package/modules/hall-ui/public/shell.js +1 -1
  26. package/modules/hall-ui/public/work.js +1 -1
  27. package/modules/lifecycle/conflict-resolve.js +1 -1
  28. package/modules/lifecycle/db-analytics.js +1 -1
  29. package/modules/lifecycle/routes/analytics.js +1 -1
  30. package/modules/onboarding/approval-broadcast.js +1 -1
  31. package/modules/onboarding/onboarding.js +1 -1
  32. package/modules/provisioning/tests/liveness.mjs +1 -1
  33. package/modules/public-landing/public/index.html +1 -1
  34. package/modules/public-landing/public/projects-floor.states.json +2 -2
  35. package/modules/public-landing/public/projects.probes.json +4 -4
  36. package/modules/public-landing/public/projects.states.json +2 -2
  37. package/modules/status-ui/module.json +1 -1
  38. package/modules/status-ui/public/status.js +4 -4
  39. package/modules/status-ui/public/style.css +1 -1
  40. package/modules/ui-design/kit/fixtures/cost-summary.json +1 -1
  41. package/modules/ui-design/kit/fixtures/featured-hub.json +1 -1
  42. package/modules/ui-design/kit/fixtures/featured.json +1 -1
  43. package/modules/ui-design/kit/fixtures/leaderboard.json +1 -1
  44. package/modules/ui-design/kit/fixtures/my-projects.json +1 -1
  45. package/modules/ui-design/kit/fixtures/progress.json +1 -1
  46. package/modules/ui-design/kit/fixtures/recent-shipped.json +1 -1
  47. package/package-lock.json +2 -2
  48. package/package.json +1 -1
  49. package/scripts/cron/style_guide_audit.sh +1 -1
  50. package/scripts/discord/lib.js +1 -1
  51. package/scripts/discord/post.js +1 -1
  52. package/scripts/gds/audit-authorship.sh +1 -1
  53. package/scripts/gds/audit-replay.sh +29 -2
  54. package/scripts/gds/audit-ships.js +1 -1
  55. package/scripts/gds/backfill-sessions.js +2 -2
  56. package/scripts/gds/cf-tunnel.js +4 -4
  57. package/scripts/gds/claude-materialize.js +2 -2
  58. package/scripts/gds/cli-lib.js +6 -6
  59. package/scripts/gds/cutover-codemod.js +1 -1
  60. package/scripts/gds/dev-lib.js +2 -2
  61. package/scripts/gds/diagnose-achievements.js +2 -2
  62. package/scripts/gds/fitness-checks-identity.js +6 -4
  63. package/scripts/gds/gate-review.js +14 -6
  64. package/scripts/gds/gen-diagrams.js +1 -1
  65. package/scripts/gds/leak-scan-allowlist.js +293 -0
  66. package/scripts/gds/learning-capture.js +1 -1
  67. package/scripts/gds/linkify-refs.js +2 -2
  68. package/scripts/gds/local-preview-lib.js +1 -1
  69. package/scripts/gds/mirror-lineage-check.js +1 -1
  70. package/scripts/gds/mirror-redact.js +17 -2
  71. package/scripts/gds/newcomer-floor.templates.json +1 -1
  72. package/scripts/gds/package-core.js +18 -1
  73. package/scripts/gds/paste-token.js +1 -1
  74. package/scripts/gds/provision-units.js +2 -2
  75. package/scripts/gds/publish-manifest.js +15 -0
  76. package/scripts/gds/repo-metrics.js +1 -1
  77. package/scripts/gds/sandbox-stage.js +1 -1
  78. package/scripts/gds/seed-bongos-coreB-tranche1-tasks.js +1 -1
  79. package/scripts/gds/seed-bongos-coreB-tranche2-tasks.js +1 -1
  80. package/scripts/gds/seed-bongos-goal-hierarchy-tasks.js +1 -1
  81. package/scripts/gds/seed-bongos-tasks.js +2 -2
  82. package/scripts/gds/seed-gds-v4-tasks.js +1 -1
  83. package/scripts/gds/seed-medusa-tasks.js +10 -10
  84. package/scripts/gds/seed-module-upstreaming.js +1 -1
  85. package/scripts/gds/seed-productization-tasks.js +6 -6
  86. package/scripts/gds/seed-provisioning-tasks.js +2 -2
  87. package/scripts/gds/seed-staging.sh +19 -6
  88. package/scripts/gds/ship-deploy-target.js +1 -1
  89. package/scripts/gds/ship-flow.js +1 -1
  90. package/scripts/gds/smoke-gds.js +1 -1
  91. package/scripts/status-probe.mjs +2 -2
  92. package/src/bongos/auth-discord.js +2 -2
  93. package/src/bongos/live-channel.js +1 -1
  94. package/src/bongos/permission-path-check.js +80 -3
  95. package/src/bongos/pool.js +1 -1
  96. package/src/bongos/routes/auth.js +11 -11
  97. package/src/bongos/routes/security.js +1 -1
  98. package/src/bongos/routes.js +1 -1
  99. package/src/branding.js +1 -1
  100. package/src/devbox-downloads.js +1 -1
  101. package/src/instance-config.js +2 -2
  102. package/src/module-api.js +1 -1
  103. package/src/module-loader/provenance.js +2 -2
  104. package/tests/art_stage.mjs +2 -2
  105. package/tests/auth_anthropic_identity.mjs +1 -1
  106. package/tests/auth_duplicate_cookie.mjs +1 -1
  107. package/tests/auth_error_brand.mjs +1 -1
  108. package/tests/auth_inactive_builder.mjs +1 -1
  109. package/tests/backup_cli.mjs +4 -4
  110. package/tests/bongos_box_connect.mjs +2 -2
  111. package/tests/bongos_downloads.mjs +2 -2
  112. package/tests/bongos_login.mjs +5 -5
  113. package/tests/box_connect_e2e.mjs +2 -2
  114. package/tests/box_dns_repoint.mjs +10 -10
  115. package/tests/box_host_keys.mjs +1 -1
  116. package/tests/box_onboard.mjs +9 -9
  117. package/tests/box_scope_session.mjs +1 -1
  118. package/tests/box_terminal_ssrf.mjs +7 -7
  119. package/tests/boxes.mjs +9 -9
  120. package/tests/branding.mjs +2 -2
  121. package/tests/bump_version.mjs +2 -2
  122. package/tests/cf_tunnel.mjs +40 -40
  123. package/tests/cli_token_reissue.mjs +7 -7
  124. package/tests/cloud_bongos_pack.mjs +1 -1
  125. package/tests/currency_label.mjs +8 -8
  126. package/tests/dev_lib.mjs +4 -4
  127. package/tests/devbox_dmg_backdrop.mjs +1 -1
  128. package/tests/devbox_downloads.mjs +2 -2
  129. package/tests/devbox_icons.mjs +1 -1
  130. package/tests/discord_approvals.mjs +1 -1
  131. package/tests/discord_oauth.mjs +2 -2
  132. package/tests/executed_closure.mjs +6 -1
  133. package/tests/first_admin_bootstrap.mjs +1 -1
  134. package/tests/gate_approvals.mjs +5 -5
  135. package/tests/government_protected_surfaces.mjs +137 -0
  136. package/tests/grade_aggregates_unavailable.mjs +1 -1
  137. package/tests/hook_user_agents.mjs +2 -2
  138. package/tests/init.mjs +6 -6
  139. package/tests/instance_config.mjs +1 -1
  140. package/tests/instance_manifest.mjs +5 -5
  141. package/tests/instance_mismatch_guard.mjs +13 -13
  142. package/tests/leak_scan_allowlist.mjs +94 -0
  143. package/tests/migrate_root_resolution.mjs +4 -4
  144. package/tests/mirror_redact.mjs +28 -4
  145. package/tests/module_catalog.mjs +5 -5
  146. package/tests/module_submissions.mjs +3 -3
  147. package/tests/package_core.mjs +1 -1
  148. package/tests/parallel-load.mjs +6 -6
  149. package/tests/projects_hub.mjs +2 -2
  150. package/tests/provision.mjs +50 -50
  151. package/tests/provisioning_github_app_routes.mjs +1 -1
  152. package/tests/provisioning_onboard_mode.mjs +2 -2
  153. package/tests/publish_reconciler.mjs +4 -4
  154. package/tests/sandbox_stage.mjs +1 -1
  155. package/tests/scrubber_corpus.mjs +3 -3
  156. package/tests/search_isolation.mjs +1 -1
  157. package/tests/session_records.mjs +1 -1
  158. package/tests/ship_card.mjs +6 -6
  159. package/tests/ship_ci_deploy.mjs +1 -1
  160. package/tests/single_host_hall.mjs +9 -9
  161. package/tests/smoke_preflight.mjs +1 -1
  162. package/tests/smoke_target.mjs +1 -1
  163. package/tests/status-probe.mjs +1 -1
  164. package/tests/status_mirror_sync.mjs +1 -1
  165. package/docs/adr/0004-amazonprimea-name-and-trademark-acceptance.md +0 -45
  166. package/docs/design/mocks/_schemes.css +0 -604
  167. package/docs/design/mocks/component-sheet.html +0 -428
  168. package/docs/design/mocks/hall/_tokens.css +0 -370
  169. package/docs/design/mocks/hall/board/v1.html +0 -846
  170. package/docs/design/mocks/hall/board/v2.html +0 -858
  171. package/docs/design/mocks/hall/board/v3.html +0 -884
  172. package/docs/design/mocks/hall/goals/v1.html +0 -1212
  173. package/docs/design/mocks/hall/goals/v2.html +0 -1192
  174. package/docs/design/mocks/hall/goals/v3.html +0 -1205
  175. package/docs/design/mocks/hall/hall-sheet.html +0 -244
  176. package/docs/design/mocks/hall/reading/v1.html +0 -1125
  177. package/docs/design/mocks/hall/reading/v2.html +0 -1177
  178. package/docs/design/mocks/hall/reading/v3.html +0 -1150
  179. package/docs/design/mocks/hall/settings/v1.html +0 -1238
  180. package/docs/design/mocks/hall/settings/v2.html +0 -1235
  181. package/docs/design/mocks/hall/settings/v3.html +0 -1299
  182. package/docs/design/mocks/hall/task/v1.html +0 -633
  183. package/docs/design/mocks/hall/task/v2.html +0 -646
  184. package/docs/design/mocks/hall/task/v3.html +0 -647
  185. package/docs/design/mocks/hub/assets/r3-space-deepfield-half.jpg +0 -0
  186. package/docs/design/mocks/hub/assets/r3-space-deepfield-half.jpg.json +0 -13
  187. package/docs/design/mocks/hub/assets/r3-space-dust-half.jpg +0 -0
  188. package/docs/design/mocks/hub/assets/r3-space-dust-half.jpg.json +0 -13
  189. package/docs/design/mocks/hub/assets/r3-space-nebula-half.jpg +0 -0
  190. package/docs/design/mocks/hub/assets/r3-space-nebula-half.jpg.json +0 -13
  191. package/docs/design/mocks/hub/assets/r3-space-starfield-half.jpg +0 -0
  192. package/docs/design/mocks/hub/assets/r3-space-starfield-half.jpg.json +0 -13
  193. package/docs/design/mocks/hub/hub-sheet.html +0 -192
  194. package/docs/design/mocks/hub/mine.html +0 -465
  195. package/docs/design/mocks/hub/picker.html +0 -421
  196. package/docs/design/mocks/hub/planets.html +0 -356
  197. package/docs/design/mocks/hub/v1.html +0 -1209
  198. package/docs/design/mocks/hub/v2.html +0 -1257
  199. package/docs/design/mocks/hub/v3.html +0 -1496
  200. package/docs/design/mocks/hub/wizard.html +0 -421
  201. package/docs/design/mocks/landing/landing-sheet.html +0 -131
  202. package/docs/design/mocks/landing/v1.html +0 -956
  203. package/docs/design/mocks/landing/v2.html +0 -708
  204. package/docs/design/mocks/landing/v3.html +0 -911
  205. package/docs/design/mocks/landing-page-mock.html +0 -687
  206. package/docs/design/mocks/landing-palettes.html +0 -103
  207. package/docs/design/mocks/projects-hub-mock.html +0 -991
  208. package/docs/design/mocks/projects-hub-variants.html +0 -146
  209. package/docs/design/mocks/projects-page-mock.html +0 -167
  210. package/docs/design/mocks/world/blue-hud/_tokens.css +0 -246
  211. package/docs/design/mocks/world/blue-hud/hall.html +0 -595
  212. package/docs/design/mocks/world/blue-hud/landing.html +0 -424
  213. package/docs/design/mocks/world/blue-hud/status.html +0 -410
  214. package/docs/design/mocks/world/chrome-blobs/_tokens.css +0 -479
  215. package/docs/design/mocks/world/chrome-blobs/hall.html +0 -553
  216. package/docs/design/mocks/world/chrome-blobs/landing-b.html +0 -581
  217. package/docs/design/mocks/world/chrome-blobs/landing.html +0 -328
  218. package/docs/design/mocks/world/chrome-blobs/status.html +0 -416
  219. package/docs/design/mocks/world/natgeo-editorial/_tokens.css +0 -377
  220. package/docs/design/mocks/world/natgeo-editorial/hall.html +0 -649
  221. package/docs/design/mocks/world/natgeo-editorial/landing-b.html +0 -743
  222. package/docs/design/mocks/world/natgeo-editorial/landing.html +0 -475
  223. package/docs/design/mocks/world/natgeo-editorial/status.html +0 -437
  224. package/docs/design/mocks/world/organic-cards/_tokens.css +0 -462
  225. package/docs/design/mocks/world/organic-cards/hall.html +0 -625
  226. package/docs/design/mocks/world/organic-cards/landing-b.html +0 -736
  227. package/docs/design/mocks/world/organic-cards/landing.html +0 -420
  228. package/docs/design/mocks/world/organic-cards/status.html +0 -458
  229. package/docs/design/mocks/world/world-sheet.html +0 -156
@@ -133,7 +133,7 @@ test('resolveDeployTarget: blank/whitespace config values are treated as unset',
133
133
 
134
134
  // ---- 1c. resolveInstanceBase precedence + the "no hardcoded host" guarantee (task 1002232) ----
135
135
  // The ci-land /version + /healthz probes, the ci PR-body deploy note, and the
136
- // manual-confirm curl guidance all baked in `https://amazonprimea.com`, so a
136
+ // manual-confirm curl guidance all baked in `https://example.com`, so a
137
137
  // ci-land / manual-confirm on a migrated instance pointed at the WRONG box. The
138
138
  // helper derives the origin: env → session api_base → branding publicOrigin → null.
139
139
  // Every case injects env/sessionApiBase/branding so the machine's own env + session
@@ -60,7 +60,7 @@ test('single-host instance: the configured buildersOrigin host IS the hall host'
60
60
  [
61
61
  'emersonian-circles.cloudbongos.com',
62
62
  'builders.anything.com',
63
- 'amazonprimea.com',
63
+ 'example.com',
64
64
  'status.emersonian-circles.cloudbongos.com',
65
65
  'evil.example',
66
66
  '',
@@ -71,7 +71,7 @@ test('single-host instance: the configured buildersOrigin host IS the hall host'
71
71
  // Back-compat: a builders.<apex> host still matches via startsWith("builders.").
72
72
  assert.equal(v['builders.anything.com'], true);
73
73
  // A DIFFERENT apex is NOT the hall host, so its /builders redirect still fires.
74
- assert.equal(v['amazonprimea.com'], false);
74
+ assert.equal(v['example.com'], false);
75
75
  // The status subdomain of the single host is a status host, not the hall.
76
76
  assert.equal(v['status.emersonian-circles.cloudbongos.com'], false);
77
77
  // Unrelated / empty hosts are never the hall.
@@ -83,16 +83,16 @@ test('conventional two-host instance: the apex stays a NON-builders host (no reg
83
83
  const v = buildersHostVerdicts(
84
84
  {
85
85
  domains: {
86
- publicOrigin: 'https://amazonprimea.com',
87
- buildersOrigin: 'https://builders.amazonprimea.com',
88
- statusOrigin: 'https://status.amazonprimea.com',
86
+ publicOrigin: 'https://example.com',
87
+ buildersOrigin: 'https://builders.example.com',
88
+ statusOrigin: 'https://status.example.com',
89
89
  },
90
90
  },
91
- ['builders.amazonprimea.com', 'amazonprimea.com', 'status.amazonprimea.com'],
91
+ ['builders.example.com', 'example.com', 'status.example.com'],
92
92
  );
93
93
  // The dedicated subdomain is the hall (both the startsWith and the config branch agree).
94
- assert.equal(v['builders.amazonprimea.com'], true);
94
+ assert.equal(v['builders.example.com'], true);
95
95
  // The apex is NOT the hall — /builders must still 301 to the subdomain here.
96
- assert.equal(v['amazonprimea.com'], false);
97
- assert.equal(v['status.amazonprimea.com'], false);
96
+ assert.equal(v['example.com'], false);
97
+ assert.equal(v['status.example.com'], false);
98
98
  });
@@ -31,7 +31,7 @@ await t('isLocalTarget: localhost / 127.0.0.1 / ::1 / 0.0.0.0 are local', () =>
31
31
  });
32
32
 
33
33
  await t('isLocalTarget: prod + LAN hosts are NOT local (remote stays a real failure)', () => {
34
- for (const h of ['amazonprimea.com', 'status.amazonprimea.com', '10.0.0.5', 'example.com']) {
34
+ for (const h of ['example.com', 'status.example.com', '10.0.0.5', 'example.com']) {
35
35
  assert.equal(isLocalTarget(h), false, `${h} should be remote`);
36
36
  }
37
37
  });
@@ -2,7 +2,7 @@
2
2
  //
3
3
  // Task 1002418 — smoke-gds.js must verify THIS instance, never a hardcoded one.
4
4
  //
5
- // The bug: `BASE = GDS_API_BASE || PMS_API_BASE || 'https://amazonprimea.com'`.
5
+ // The bug: `BASE = GDS_API_BASE || PMS_API_BASE || '<the founder instance apex>'`.
6
6
  // A builder signed into any other instance who shipped without an env override
7
7
  // smoked the founder's box, which is healthy, so the ship reported
8
8
  // "smoke=clean" about a system it never touched. resolveSmokeTarget replaces the
@@ -22,7 +22,7 @@ const ok = (name) => { passed++; console.log(' ✓', name); };
22
22
  // --- parseArgs: defaults, overrides, numeric coercion ---
23
23
  {
24
24
  const a = parseArgs([]);
25
- assert.equal(a.target, 'https://amazonprimea.com/healthz');
25
+ assert.equal(a.target, 'https://example.com/healthz');
26
26
  assert.equal(a.attempts, 3);
27
27
  assert.equal(a['timeout-ms'], 15000);
28
28
  ok('parseArgs returns defaults');
@@ -117,6 +117,6 @@ test('the publisher source hardcodes no host identity (the ratchet this slice in
117
117
  .split(/\r?\n/)
118
118
  .map((l) => l.replace(/(^|[^:])\/\/.*$/, '$1'))
119
119
  .join('\n');
120
- const hit = stripped.match(/amazonprimea|lars589|off the boats/i);
120
+ const hit = stripped.match(/example|example-owner|example world/i);
121
121
  assert.equal(hit, null, `scripts/status-mirror-sync.js hardcodes the host identity "${hit && hit[0]}" — resolve it from branding() instead`);
122
122
  });
@@ -1,45 +0,0 @@
1
- # 0004 — "Example" as the in-world civilization name (trademark risk knowingly accepted)
2
-
3
- - **Status:** Accepted
4
- - **Date:** 2026-05-08
5
- - **Deciders:** Lars
6
-
7
- ## Context
8
-
9
- The world needs a name for the new civilization that grows around the washed-ashore shipping container. The name should:
10
-
11
- - Read as belonging in the ancient-Greek setting
12
- - Carry the brand wink — Example undercuts Amazon-style logistics, and the container is the inciting object
13
- - Be coined (not a real Greek place name we'd mispresent)
14
-
15
- The candidate "Example" landed because it does triple duty: a tongue-in-cheek nod to **Amazon Prime**, a callback to the **Amazons** of Greek mythology (warrior tribe — fits the early-civilization setting), and a believable coined place-name.
16
-
17
- The obvious problem: it contains the protected marks "Amazon" and "Amazon Prime." Amazon's legal team enforces trademark aggressively.
18
-
19
- ## Decision
20
-
21
- We will use **Example** as the civilization name, knowingly accepting the trademark risk.
22
-
23
- To minimize the cost of a forced rebrand, the name must be treated as a **single string in one config**. It must not be baked into:
24
-
25
- - Class names, type names, function names, file names
26
- - Database schemas (table/column/enum names)
27
- - Asset filenames
28
- - URL paths beyond the apex domain itself
29
-
30
- The apex domain `example.com` is the painful piece on rebrand — accepted.
31
-
32
- ## Alternatives considered
33
-
34
- - **A cleaner coined name (e.g. "Hermeia," "Korykos," "Boreas")** — eliminates trademark exposure but loses the brand wink that ties the world to Example's positioning against Amazon-scale logistics. Lars judged the brand wink worth the risk.
35
- - **Use the name only in dialog/UI text, not as the formal civilization name** — half-measure that doesn't actually reduce legal exposure (the trademark issue is the use, not the formality).
36
-
37
- ## Consequences
38
-
39
- - **Open legal risk.** Probability of Amazon legal making contact is non-zero, especially if the project gets visible.
40
- - **Contingency plan, ready to execute on first contact:**
41
- 1. Rebrand the civilization name (text-only — should be a single config string)
42
- 2. Swap the apex domain (most painful step — DNS, certs, links, anything that has hardcoded `example.com`)
43
- 3. World lore, container, vendor, and all game mechanics stay unchanged
44
- - **Operating constraint for all future development:** every time the name is about to be embedded in code, file paths, schemas, or assets, **stop** and instead reference it indirectly through one config value.
45
- - **Documented as an open risk in the project framing** so future sessions and team members understand the posture is "accepted, not unaware."