@bongos/core 1.19.726 → 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 (226) hide show
  1. package/.bongos-core.json +176 -491
  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 +2 -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/gen-diagrams.js +1 -1
  64. package/scripts/gds/leak-scan-allowlist.js +293 -0
  65. package/scripts/gds/learning-capture.js +1 -1
  66. package/scripts/gds/linkify-refs.js +2 -2
  67. package/scripts/gds/local-preview-lib.js +1 -1
  68. package/scripts/gds/mirror-lineage-check.js +1 -1
  69. package/scripts/gds/mirror-redact.js +17 -2
  70. package/scripts/gds/newcomer-floor.templates.json +1 -1
  71. package/scripts/gds/package-core.js +18 -1
  72. package/scripts/gds/paste-token.js +1 -1
  73. package/scripts/gds/provision-units.js +2 -2
  74. package/scripts/gds/publish-manifest.js +15 -0
  75. package/scripts/gds/repo-metrics.js +1 -1
  76. package/scripts/gds/sandbox-stage.js +1 -1
  77. package/scripts/gds/seed-bongos-coreB-tranche1-tasks.js +1 -1
  78. package/scripts/gds/seed-bongos-coreB-tranche2-tasks.js +1 -1
  79. package/scripts/gds/seed-bongos-goal-hierarchy-tasks.js +1 -1
  80. package/scripts/gds/seed-bongos-tasks.js +2 -2
  81. package/scripts/gds/seed-gds-v4-tasks.js +1 -1
  82. package/scripts/gds/seed-medusa-tasks.js +10 -10
  83. package/scripts/gds/seed-module-upstreaming.js +1 -1
  84. package/scripts/gds/seed-productization-tasks.js +6 -6
  85. package/scripts/gds/seed-provisioning-tasks.js +2 -2
  86. package/scripts/gds/seed-staging.sh +19 -6
  87. package/scripts/gds/ship-deploy-target.js +1 -1
  88. package/scripts/gds/ship-flow.js +1 -1
  89. package/scripts/gds/smoke-gds.js +1 -1
  90. package/scripts/status-probe.mjs +2 -2
  91. package/src/bongos/auth-discord.js +2 -2
  92. package/src/bongos/live-channel.js +1 -1
  93. package/src/bongos/pool.js +1 -1
  94. package/src/bongos/routes/auth.js +11 -11
  95. package/src/bongos/routes/security.js +1 -1
  96. package/src/bongos/routes.js +1 -1
  97. package/src/branding.js +1 -1
  98. package/src/devbox-downloads.js +1 -1
  99. package/src/instance-config.js +2 -2
  100. package/src/module-api.js +1 -1
  101. package/src/module-loader/provenance.js +2 -2
  102. package/tests/art_stage.mjs +2 -2
  103. package/tests/auth_anthropic_identity.mjs +1 -1
  104. package/tests/auth_duplicate_cookie.mjs +1 -1
  105. package/tests/auth_error_brand.mjs +1 -1
  106. package/tests/auth_inactive_builder.mjs +1 -1
  107. package/tests/backup_cli.mjs +4 -4
  108. package/tests/bongos_box_connect.mjs +2 -2
  109. package/tests/bongos_downloads.mjs +2 -2
  110. package/tests/bongos_login.mjs +5 -5
  111. package/tests/box_connect_e2e.mjs +2 -2
  112. package/tests/box_dns_repoint.mjs +10 -10
  113. package/tests/box_host_keys.mjs +1 -1
  114. package/tests/box_onboard.mjs +9 -9
  115. package/tests/box_scope_session.mjs +1 -1
  116. package/tests/box_terminal_ssrf.mjs +7 -7
  117. package/tests/boxes.mjs +9 -9
  118. package/tests/branding.mjs +2 -2
  119. package/tests/bump_version.mjs +2 -2
  120. package/tests/cf_tunnel.mjs +40 -40
  121. package/tests/cli_token_reissue.mjs +7 -7
  122. package/tests/cloud_bongos_pack.mjs +1 -1
  123. package/tests/currency_label.mjs +8 -8
  124. package/tests/dev_lib.mjs +4 -4
  125. package/tests/devbox_dmg_backdrop.mjs +1 -1
  126. package/tests/devbox_downloads.mjs +2 -2
  127. package/tests/devbox_icons.mjs +1 -1
  128. package/tests/discord_approvals.mjs +1 -1
  129. package/tests/discord_oauth.mjs +2 -2
  130. package/tests/executed_closure.mjs +6 -1
  131. package/tests/first_admin_bootstrap.mjs +1 -1
  132. package/tests/gate_approvals.mjs +5 -5
  133. package/tests/grade_aggregates_unavailable.mjs +1 -1
  134. package/tests/hook_user_agents.mjs +2 -2
  135. package/tests/init.mjs +6 -6
  136. package/tests/instance_config.mjs +1 -1
  137. package/tests/instance_manifest.mjs +5 -5
  138. package/tests/instance_mismatch_guard.mjs +13 -13
  139. package/tests/leak_scan_allowlist.mjs +94 -0
  140. package/tests/migrate_root_resolution.mjs +4 -4
  141. package/tests/mirror_redact.mjs +28 -4
  142. package/tests/module_catalog.mjs +5 -5
  143. package/tests/module_submissions.mjs +3 -3
  144. package/tests/package_core.mjs +1 -1
  145. package/tests/parallel-load.mjs +6 -6
  146. package/tests/projects_hub.mjs +2 -2
  147. package/tests/provision.mjs +50 -50
  148. package/tests/provisioning_github_app_routes.mjs +1 -1
  149. package/tests/provisioning_onboard_mode.mjs +2 -2
  150. package/tests/publish_reconciler.mjs +4 -4
  151. package/tests/sandbox_stage.mjs +1 -1
  152. package/tests/scrubber_corpus.mjs +3 -3
  153. package/tests/search_isolation.mjs +1 -1
  154. package/tests/session_records.mjs +1 -1
  155. package/tests/ship_card.mjs +6 -6
  156. package/tests/ship_ci_deploy.mjs +1 -1
  157. package/tests/single_host_hall.mjs +9 -9
  158. package/tests/smoke_preflight.mjs +1 -1
  159. package/tests/smoke_target.mjs +1 -1
  160. package/tests/status-probe.mjs +1 -1
  161. package/tests/status_mirror_sync.mjs +1 -1
  162. package/docs/adr/0004-amazonprimea-name-and-trademark-acceptance.md +0 -45
  163. package/docs/design/mocks/_schemes.css +0 -604
  164. package/docs/design/mocks/component-sheet.html +0 -428
  165. package/docs/design/mocks/hall/_tokens.css +0 -370
  166. package/docs/design/mocks/hall/board/v1.html +0 -846
  167. package/docs/design/mocks/hall/board/v2.html +0 -858
  168. package/docs/design/mocks/hall/board/v3.html +0 -884
  169. package/docs/design/mocks/hall/goals/v1.html +0 -1212
  170. package/docs/design/mocks/hall/goals/v2.html +0 -1192
  171. package/docs/design/mocks/hall/goals/v3.html +0 -1205
  172. package/docs/design/mocks/hall/hall-sheet.html +0 -244
  173. package/docs/design/mocks/hall/reading/v1.html +0 -1125
  174. package/docs/design/mocks/hall/reading/v2.html +0 -1177
  175. package/docs/design/mocks/hall/reading/v3.html +0 -1150
  176. package/docs/design/mocks/hall/settings/v1.html +0 -1238
  177. package/docs/design/mocks/hall/settings/v2.html +0 -1235
  178. package/docs/design/mocks/hall/settings/v3.html +0 -1299
  179. package/docs/design/mocks/hall/task/v1.html +0 -633
  180. package/docs/design/mocks/hall/task/v2.html +0 -646
  181. package/docs/design/mocks/hall/task/v3.html +0 -647
  182. package/docs/design/mocks/hub/assets/r3-space-deepfield-half.jpg +0 -0
  183. package/docs/design/mocks/hub/assets/r3-space-deepfield-half.jpg.json +0 -13
  184. package/docs/design/mocks/hub/assets/r3-space-dust-half.jpg +0 -0
  185. package/docs/design/mocks/hub/assets/r3-space-dust-half.jpg.json +0 -13
  186. package/docs/design/mocks/hub/assets/r3-space-nebula-half.jpg +0 -0
  187. package/docs/design/mocks/hub/assets/r3-space-nebula-half.jpg.json +0 -13
  188. package/docs/design/mocks/hub/assets/r3-space-starfield-half.jpg +0 -0
  189. package/docs/design/mocks/hub/assets/r3-space-starfield-half.jpg.json +0 -13
  190. package/docs/design/mocks/hub/hub-sheet.html +0 -192
  191. package/docs/design/mocks/hub/mine.html +0 -465
  192. package/docs/design/mocks/hub/picker.html +0 -421
  193. package/docs/design/mocks/hub/planets.html +0 -356
  194. package/docs/design/mocks/hub/v1.html +0 -1209
  195. package/docs/design/mocks/hub/v2.html +0 -1257
  196. package/docs/design/mocks/hub/v3.html +0 -1496
  197. package/docs/design/mocks/hub/wizard.html +0 -421
  198. package/docs/design/mocks/landing/landing-sheet.html +0 -131
  199. package/docs/design/mocks/landing/v1.html +0 -956
  200. package/docs/design/mocks/landing/v2.html +0 -708
  201. package/docs/design/mocks/landing/v3.html +0 -911
  202. package/docs/design/mocks/landing-page-mock.html +0 -687
  203. package/docs/design/mocks/landing-palettes.html +0 -103
  204. package/docs/design/mocks/projects-hub-mock.html +0 -991
  205. package/docs/design/mocks/projects-hub-variants.html +0 -146
  206. package/docs/design/mocks/projects-page-mock.html +0 -167
  207. package/docs/design/mocks/world/blue-hud/_tokens.css +0 -246
  208. package/docs/design/mocks/world/blue-hud/hall.html +0 -595
  209. package/docs/design/mocks/world/blue-hud/landing.html +0 -424
  210. package/docs/design/mocks/world/blue-hud/status.html +0 -410
  211. package/docs/design/mocks/world/chrome-blobs/_tokens.css +0 -479
  212. package/docs/design/mocks/world/chrome-blobs/hall.html +0 -553
  213. package/docs/design/mocks/world/chrome-blobs/landing-b.html +0 -581
  214. package/docs/design/mocks/world/chrome-blobs/landing.html +0 -328
  215. package/docs/design/mocks/world/chrome-blobs/status.html +0 -416
  216. package/docs/design/mocks/world/natgeo-editorial/_tokens.css +0 -377
  217. package/docs/design/mocks/world/natgeo-editorial/hall.html +0 -649
  218. package/docs/design/mocks/world/natgeo-editorial/landing-b.html +0 -743
  219. package/docs/design/mocks/world/natgeo-editorial/landing.html +0 -475
  220. package/docs/design/mocks/world/natgeo-editorial/status.html +0 -437
  221. package/docs/design/mocks/world/organic-cards/_tokens.css +0 -462
  222. package/docs/design/mocks/world/organic-cards/hall.html +0 -625
  223. package/docs/design/mocks/world/organic-cards/landing-b.html +0 -736
  224. package/docs/design/mocks/world/organic-cards/landing.html +0 -420
  225. package/docs/design/mocks/world/organic-cards/status.html +0 -458
  226. package/docs/design/mocks/world/world-sheet.html +0 -156
@@ -77,9 +77,9 @@ await ta('live requests pass the IPv4 dispatcher through (token is IP-locked, #7
77
77
  await ta('dry-run never touches the network and returns synthetic results', async () => {
78
78
  let hit = false;
79
79
  const cf = new CfTunnelApi({ accountId: ACCT, fetchImpl: () => { hit = true; throw new Error('should not fetch'); } });
80
- const r = await cf.ensureNamedTunnel({ login: 'alice', zone: 'amazonprimea.com', terminalZone: 'dev.amazonprimea.com' });
80
+ const r = await cf.ensureNamedTunnel({ login: 'alice', zone: 'example.com', terminalZone: 'dev.example.com' });
81
81
  assert.equal(hit, false, 'fetch must not be called in dry-run');
82
- assert.equal(r.hostname, 'term-alice.dev.amazonprimea.com');
82
+ assert.equal(r.hostname, 'term-alice.dev.example.com');
83
83
  assert.ok(String(r.token).startsWith('dryrun-token-'));
84
84
  assert.ok(String(r.tunnelId).startsWith('dryrun-tunnel-'));
85
85
  });
@@ -117,8 +117,8 @@ await ta('putConfiguration sends ttyd ingress + 404 catch-all', async () => {
117
117
  'PUT /accounts/acct123/cfd_tunnel/tun1/configurations': ({ body }) => { seen = body; return { config: body.config }; },
118
118
  });
119
119
  const cf = new CfTunnelApi({ dryRun: false, token: TOKEN, accountId: ACCT, fetchImpl });
120
- await cf.putConfiguration('tun1', { hostname: 'term-alice.dev.amazonprimea.com' });
121
- assert.deepEqual(seen.config.ingress[0], { hostname: 'term-alice.dev.amazonprimea.com', service: 'http://127.0.0.1:7681' });
120
+ await cf.putConfiguration('tun1', { hostname: 'term-alice.dev.example.com' });
121
+ assert.deepEqual(seen.config.ingress[0], { hostname: 'term-alice.dev.example.com', service: 'http://127.0.0.1:7681' });
122
122
  assert.deepEqual(seen.config.ingress[1], { service: 'http_status:404' });
123
123
  });
124
124
 
@@ -139,7 +139,7 @@ await ta('upsertDnsRoute POSTs a proxied CNAME to cfargotunnel when absent', asy
139
139
  'POST /zones/zone1/dns_records': ({ body }) => { posted = body; return { id: 'rec1', ...body }; },
140
140
  });
141
141
  const cf = new CfTunnelApi({ dryRun: false, token: TOKEN, accountId: ACCT, fetchImpl });
142
- await cf.upsertDnsRoute({ zoneId: 'zone1', name: 'term-alice.dev.amazonprimea.com', tunnelId: 'tun1' });
142
+ await cf.upsertDnsRoute({ zoneId: 'zone1', name: 'term-alice.dev.example.com', tunnelId: 'tun1' });
143
143
  assert.equal(posted.type, 'CNAME');
144
144
  assert.equal(posted.content, 'tun1.cfargotunnel.com');
145
145
  assert.equal(posted.proxied, true);
@@ -148,11 +148,11 @@ await ta('upsertDnsRoute POSTs a proxied CNAME to cfargotunnel when absent', asy
148
148
  await ta('upsertDnsRoute PUTs (updates) when the record already exists', async () => {
149
149
  let method = null;
150
150
  const { fetchImpl } = makeFetch({
151
- 'GET /zones/zone1/dns_records': () => [{ id: 'rec-existing', name: 'term-alice.dev.amazonprimea.com' }],
151
+ 'GET /zones/zone1/dns_records': () => [{ id: 'rec-existing', name: 'term-alice.dev.example.com' }],
152
152
  'PUT /zones/zone1/dns_records/rec-existing': ({ body }) => { method = 'PUT'; return { id: 'rec-existing', ...body }; },
153
153
  });
154
154
  const cf = new CfTunnelApi({ dryRun: false, token: TOKEN, accountId: ACCT, fetchImpl });
155
- await cf.upsertDnsRoute({ zoneId: 'zone1', name: 'term-alice.dev.amazonprimea.com', tunnelId: 'tun1' });
155
+ await cf.upsertDnsRoute({ zoneId: 'zone1', name: 'term-alice.dev.example.com', tunnelId: 'tun1' });
156
156
  assert.equal(method, 'PUT');
157
157
  });
158
158
 
@@ -183,10 +183,10 @@ await ta('ensureNamedTunnel composes create→configure→token→zone→dns and
183
183
  'POST /zones/zoneZ/dns_records': ({ body }) => ({ id: 'recZ', ...body }),
184
184
  });
185
185
  const cf = new CfTunnelApi({ dryRun: false, token: TOKEN, accountId: ACCT, fetchImpl });
186
- const r = await cf.ensureNamedTunnel({ login: 'carol', zone: 'amazonprimea.com', terminalZone: 'dev.amazonprimea.com' });
186
+ const r = await cf.ensureNamedTunnel({ login: 'carol', zone: 'example.com', terminalZone: 'dev.example.com' });
187
187
  assert.equal(r.tunnelId, 'tunZ');
188
188
  assert.equal(r.token, 'tokZ');
189
- assert.equal(r.hostname, 'term-carol.dev.amazonprimea.com');
189
+ assert.equal(r.hostname, 'term-carol.dev.example.com');
190
190
  // the create used the deterministic per-builder name
191
191
  assert.ok(calls.some((c) => c.method === 'POST' && c.path.endsWith('/cfd_tunnel') && c.body.name === 'otb-term-carol'));
192
192
  });
@@ -194,14 +194,14 @@ await ta('ensureNamedTunnel composes create→configure→token→zone→dns and
194
194
  await ta('teardownNamedTunnel deletes DNS + tunnel and never throws', async () => {
195
195
  const { fetchImpl, calls } = makeFetch({
196
196
  'GET /zones': () => [{ id: 'zoneZ' }],
197
- 'GET /zones/zoneZ/dns_records': () => [{ id: 'recZ', name: 'term-dan.dev.amazonprimea.com' }],
197
+ 'GET /zones/zoneZ/dns_records': () => [{ id: 'recZ', name: 'term-dan.dev.example.com' }],
198
198
  'DELETE /zones/zoneZ/dns_records/recZ': () => ({ id: 'recZ' }),
199
199
  'GET /accounts/acct123/cfd_tunnel': () => [{ id: 'tunZ', name: 'otb-term-dan' }],
200
200
  'DELETE /accounts/acct123/cfd_tunnel/tunZ/connections': () => ({}),
201
201
  'DELETE /accounts/acct123/cfd_tunnel/tunZ': () => ({ id: 'tunZ' }),
202
202
  });
203
203
  const cf = new CfTunnelApi({ dryRun: false, token: TOKEN, accountId: ACCT, fetchImpl });
204
- const out = await cf.teardownNamedTunnel({ login: 'dan', zone: 'amazonprimea.com', terminalZone: 'dev.amazonprimea.com' });
204
+ const out = await cf.teardownNamedTunnel({ login: 'dan', zone: 'example.com', terminalZone: 'dev.example.com' });
205
205
  assert.equal(out.dnsDeleted, true);
206
206
  assert.equal(out.tunnelDeleted, true);
207
207
  assert.deepEqual(out.errors, []);
@@ -215,7 +215,7 @@ await ta('teardownNamedTunnel on a missing tunnel/record is graceful (no throw,
215
215
  'GET /accounts/acct123/cfd_tunnel': () => [],
216
216
  });
217
217
  const cf = new CfTunnelApi({ dryRun: false, token: TOKEN, accountId: ACCT, fetchImpl });
218
- const out = await cf.teardownNamedTunnel({ login: 'ghost', zone: 'amazonprimea.com', terminalZone: 'dev.amazonprimea.com' });
218
+ const out = await cf.teardownNamedTunnel({ login: 'ghost', zone: 'example.com', terminalZone: 'dev.example.com' });
219
219
  assert.equal(out.dnsDeleted, false);
220
220
  assert.equal(out.tunnelDeleted, false);
221
221
  assert.deepEqual(out.errors, []);
@@ -227,7 +227,7 @@ await ta('teardown collects errors per-leg without throwing', async () => {
227
227
  'GET /accounts/acct123/cfd_tunnel': () => [{ id: 'tunZ', name: 'otb-term- err' }],
228
228
  });
229
229
  const cf = new CfTunnelApi({ dryRun: false, token: TOKEN, accountId: ACCT, fetchImpl });
230
- const out = await cf.teardownNamedTunnel({ login: 'err', zone: 'amazonprimea.com', terminalZone: 'dev.amazonprimea.com' });
230
+ const out = await cf.teardownNamedTunnel({ login: 'err', zone: 'example.com', terminalZone: 'dev.example.com' });
231
231
  assert.ok(out.errors.some((e) => /dns/.test(e)), 'dns failure recorded');
232
232
  });
233
233
 
@@ -240,12 +240,12 @@ await ta('putConfiguration inserts extraRoutes between the primary host and the
240
240
  });
241
241
  const cf = new CfTunnelApi({ dryRun: false, token: TOKEN, accountId: ACCT, fetchImpl });
242
242
  await cf.putConfiguration('tun1', {
243
- hostname: 'term-alice.dev.amazonprimea.com',
244
- extraRoutes: [{ hostname: 'sandbox-alice.dev.amazonprimea.com', service: GAME_SERVICE }],
243
+ hostname: 'term-alice.dev.example.com',
244
+ extraRoutes: [{ hostname: 'sandbox-alice.dev.example.com', service: GAME_SERVICE }],
245
245
  });
246
246
  assert.equal(seen.config.ingress.length, 3, 'ttyd + game + catch-all');
247
- assert.deepEqual(seen.config.ingress[0], { hostname: 'term-alice.dev.amazonprimea.com', service: 'http://127.0.0.1:7681' });
248
- assert.deepEqual(seen.config.ingress[1], { hostname: 'sandbox-alice.dev.amazonprimea.com', service: 'http://127.0.0.1:3000' });
247
+ assert.deepEqual(seen.config.ingress[0], { hostname: 'term-alice.dev.example.com', service: 'http://127.0.0.1:7681' });
248
+ assert.deepEqual(seen.config.ingress[1], { hostname: 'sandbox-alice.dev.example.com', service: 'http://127.0.0.1:3000' });
249
249
  assert.deepEqual(seen.config.ingress[2], { service: 'http_status:404' }, 'catch-all stays last');
250
250
  });
251
251
 
@@ -262,15 +262,15 @@ await ta('ensureNamedTunnel adds the game preview route + its own CNAME and retu
262
262
  'POST /zones/zoneZ/dns_records': ({ body }) => { dnsPosts.push(body.name); return { id: `rec-${body.name}`, ...body }; },
263
263
  });
264
264
  const cf = new CfTunnelApi({ dryRun: false, token: TOKEN, accountId: ACCT, fetchImpl });
265
- const r = await cf.ensureNamedTunnel({ login: 'carol', zone: 'amazonprimea.com', terminalZone: 'dev.amazonprimea.com' });
265
+ const r = await cf.ensureNamedTunnel({ login: 'carol', zone: 'example.com', terminalZone: 'dev.example.com' });
266
266
  // returns the deterministic preview host alongside the terminal host
267
- assert.equal(r.previewHostname, 'sandbox-carol.dev.amazonprimea.com');
268
- assert.equal(r.hostname, 'term-carol.dev.amazonprimea.com');
267
+ assert.equal(r.previewHostname, 'sandbox-carol.dev.example.com');
268
+ assert.equal(r.hostname, 'term-carol.dev.example.com');
269
269
  // the ingress now carries the game route at 127.0.0.1:3000
270
- assert.deepEqual(putBody.config.ingress[1], { hostname: 'sandbox-carol.dev.amazonprimea.com', service: GAME_SERVICE });
270
+ assert.deepEqual(putBody.config.ingress[1], { hostname: 'sandbox-carol.dev.example.com', service: GAME_SERVICE });
271
271
  // BOTH hostnames get a proxied CNAME
272
- assert.ok(dnsPosts.includes('term-carol.dev.amazonprimea.com'), 'terminal CNAME upserted');
273
- assert.ok(dnsPosts.includes('sandbox-carol.dev.amazonprimea.com'), 'preview CNAME upserted');
272
+ assert.ok(dnsPosts.includes('term-carol.dev.example.com'), 'terminal CNAME upserted');
273
+ assert.ok(dnsPosts.includes('sandbox-carol.dev.example.com'), 'preview CNAME upserted');
274
274
  });
275
275
 
276
276
  await ta('teardownNamedTunnel also deletes the preview CNAME', async () => {
@@ -279,8 +279,8 @@ await ta('teardownNamedTunnel also deletes the preview CNAME', async () => {
279
279
  'GET /zones': () => [{ id: 'zoneZ' }],
280
280
  'GET /zones/zoneZ/dns_records': ({ query }) => {
281
281
  const n = query.name;
282
- if (n === 'term-dan.dev.amazonprimea.com') return [{ id: 'recTerm', name: n }];
283
- if (n === 'sandbox-dan.dev.amazonprimea.com') return [{ id: 'recGame', name: n }];
282
+ if (n === 'term-dan.dev.example.com') return [{ id: 'recTerm', name: n }];
283
+ if (n === 'sandbox-dan.dev.example.com') return [{ id: 'recGame', name: n }];
284
284
  return [];
285
285
  },
286
286
  'DELETE /zones/zoneZ/dns_records/recTerm': () => { deletedDns.push('term'); return { id: 'recTerm' }; },
@@ -290,7 +290,7 @@ await ta('teardownNamedTunnel also deletes the preview CNAME', async () => {
290
290
  'DELETE /accounts/acct123/cfd_tunnel/tunZ': () => ({ id: 'tunZ' }),
291
291
  });
292
292
  const cf = new CfTunnelApi({ dryRun: false, token: TOKEN, accountId: ACCT, fetchImpl });
293
- const out = await cf.teardownNamedTunnel({ login: 'dan', zone: 'amazonprimea.com', terminalZone: 'dev.amazonprimea.com' });
293
+ const out = await cf.teardownNamedTunnel({ login: 'dan', zone: 'example.com', terminalZone: 'dev.example.com' });
294
294
  assert.equal(out.dnsDeleted, true);
295
295
  assert.equal(out.previewDnsDeleted, true, 'preview CNAME removed');
296
296
  assert.equal(out.tunnelDeleted, true);
@@ -310,7 +310,7 @@ await ta('ensureCookieStripRule PUTs a remove-Cookie rule scoped to term-*/sandb
310
310
  [`PUT ${RULESET_PATH}`]: ({ body }) => { put = body; return { id: 'rs1', rules: body.rules }; },
311
311
  });
312
312
  const cf = new CfTunnelApi({ dryRun: false, token: TOKEN, accountId: ACCT, fetchImpl });
313
- await cf.ensureCookieStripRule({ zone: 'amazonprimea.com' });
313
+ await cf.ensureCookieStripRule({ zone: 'example.com' });
314
314
  assert.equal(put.rules.length, 1, 'one rule on a previously-empty phase');
315
315
  const rule = put.rules[0];
316
316
  assert.equal(rule.action, 'rewrite');
@@ -330,7 +330,7 @@ await ta('ensureCookieStripRule preserves OTHER transform rules and is idempoten
330
330
  [`PUT ${RULESET_PATH}`]: ({ body }) => { put = body; return { id: 'rs1', rules: body.rules }; },
331
331
  });
332
332
  const cf = new CfTunnelApi({ dryRun: false, token: TOKEN, accountId: ACCT, fetchImpl });
333
- await cf.ensureCookieStripRule({ zone: 'amazonprimea.com' });
333
+ await cf.ensureCookieStripRule({ zone: 'example.com' });
334
334
  // exactly two rules: the foreign one (kept) + ONE fresh copy of ours (no dupes)
335
335
  assert.equal(put.rules.length, 2);
336
336
  const ours = put.rules.filter((r) => /otb-919/.test(r.description));
@@ -351,7 +351,7 @@ await ta('ensureCookieStripRule creates the phase entrypoint when none exists (4
351
351
  [`PUT ${RULESET_PATH}`]: ({ body }) => { put = body; return { id: 'rs-new', rules: body.rules }; },
352
352
  });
353
353
  const cf = new CfTunnelApi({ dryRun: false, token: TOKEN, accountId: ACCT, fetchImpl });
354
- await cf.ensureCookieStripRule({ zone: 'amazonprimea.com' });
354
+ await cf.ensureCookieStripRule({ zone: 'example.com' });
355
355
  assert.equal(put.rules.length, 1, 'a 404 entrypoint is treated as empty, our rule is created');
356
356
  });
357
357
 
@@ -370,9 +370,9 @@ await ta('ensureCookieStripRule failure does NOT block ensureNamedTunnel (best-e
370
370
  // ensureNamedTunnel's try/catch and is logged, not thrown.
371
371
  });
372
372
  const cf = new CfTunnelApi({ dryRun: false, token: TOKEN, accountId: ACCT, fetchImpl });
373
- const r = await cf.ensureNamedTunnel({ login: 'carol', zone: 'amazonprimea.com', terminalZone: 'amazonprimea.com' });
373
+ const r = await cf.ensureNamedTunnel({ login: 'carol', zone: 'example.com', terminalZone: 'example.com' });
374
374
  assert.equal(r.token, 'tokZ', 'provisioning completes despite the cookie-strip rule failing');
375
- assert.equal(r.hostname, 'term-carol.amazonprimea.com');
375
+ assert.equal(r.hostname, 'term-carol.example.com');
376
376
  // task 1002511: the failure is reported STRUCTURALLY, not only logged, so box.js
377
377
  // can surface it in the provision summary instead of burying it mid-run.
378
378
  assert.equal(r.edgeRules.cookieStrip.applied, false, 'a failed cookie-strip PUT must never report applied');
@@ -391,7 +391,7 @@ await ta('ensureCacheBypassRule PUTs a cache:false rule scoped to sandbox-* (not
391
391
  [`PUT ${CACHE_PATH}`]: ({ body }) => { put = body; return { id: 'rs1', rules: body.rules }; },
392
392
  });
393
393
  const cf = new CfTunnelApi({ dryRun: false, token: TOKEN, accountId: ACCT, fetchImpl });
394
- await cf.ensureCacheBypassRule({ zone: 'amazonprimea.com' });
394
+ await cf.ensureCacheBypassRule({ zone: 'example.com' });
395
395
  assert.equal(put.rules.length, 1);
396
396
  const rule = put.rules[0];
397
397
  assert.equal(rule.action, 'set_cache_settings');
@@ -399,7 +399,7 @@ await ta('ensureCacheBypassRule PUTs a cache:false rule scoped to sandbox-* (not
399
399
  assert.match(rule.expression, /sandbox-/);
400
400
  assert.doesNotMatch(rule.expression, /term-/, 'ttyd hosts are not cache-ruled');
401
401
  // prod-safety: the apex must NOT satisfy the expression
402
- assert.ok(!'amazonprimea.com'.startsWith('sandbox-'), 'apex never matches sandbox-*');
402
+ assert.ok(!'example.com'.startsWith('sandbox-'), 'apex never matches sandbox-*');
403
403
  assert.equal(rule.enabled, true);
404
404
  });
405
405
 
@@ -413,7 +413,7 @@ await ta('ensureCacheBypassRule preserves OTHER cache rules and is idempotent on
413
413
  [`PUT ${CACHE_PATH}`]: ({ body }) => { put = body; return { id: 'rs1', rules: body.rules }; },
414
414
  });
415
415
  const cf = new CfTunnelApi({ dryRun: false, token: TOKEN, accountId: ACCT, fetchImpl });
416
- await cf.ensureCacheBypassRule({ zone: 'amazonprimea.com' });
416
+ await cf.ensureCacheBypassRule({ zone: 'example.com' });
417
417
  assert.equal(put.rules.length, 2);
418
418
  assert.equal(put.rules.filter((r) => r.description === CACHE_BYPASS_RULE_DESC).length, 1, 'our rule de-duplicated');
419
419
  const kept = put.rules.find((r) => r.description === 'someone-elses-cache-rule');
@@ -431,7 +431,7 @@ await ta('ensureCacheBypassRule creates the cache phase entrypoint when none exi
431
431
  [`PUT ${CACHE_PATH}`]: ({ body }) => { put = body; return { id: 'rs-new', rules: body.rules }; },
432
432
  });
433
433
  const cf = new CfTunnelApi({ dryRun: false, token: TOKEN, accountId: ACCT, fetchImpl });
434
- await cf.ensureCacheBypassRule({ zone: 'amazonprimea.com' });
434
+ await cf.ensureCacheBypassRule({ zone: 'example.com' });
435
435
  assert.equal(put.rules.length, 1);
436
436
  });
437
437
 
@@ -448,7 +448,7 @@ await ta('ensureCacheBypassRule failure does NOT block ensureNamedTunnel (best-e
448
448
  'POST /zones/zoneZ/dns_records': ({ body }) => ({ id: `rec-${body.name}`, ...body }),
449
449
  });
450
450
  const cf = new CfTunnelApi({ dryRun: false, token: TOKEN, accountId: ACCT, fetchImpl });
451
- const r = await cf.ensureNamedTunnel({ login: 'carol', zone: 'amazonprimea.com', terminalZone: 'amazonprimea.com' });
451
+ const r = await cf.ensureNamedTunnel({ login: 'carol', zone: 'example.com', terminalZone: 'example.com' });
452
452
  assert.equal(r.token, 'tokZ', 'provisioning completes despite the cache rule failing');
453
453
  assert.equal(r.edgeRules.cacheBypass.applied, false);
454
454
  assert.ok(r.edgeRules.cacheBypass.error, 'the cache-rule failure reason is captured');
@@ -471,7 +471,7 @@ await ta('ensureNamedTunnel reports edgeRules.applied on the success path (both
471
471
  [`PUT ${CS}`]: ({ body }) => ({ id: 'rs2', rules: body.rules }),
472
472
  });
473
473
  const cf = new CfTunnelApi({ dryRun: false, token: TOKEN, accountId: ACCT, fetchImpl });
474
- const r = await cf.ensureNamedTunnel({ login: 'carol', zone: 'amazonprimea.com', terminalZone: 'amazonprimea.com' });
474
+ const r = await cf.ensureNamedTunnel({ login: 'carol', zone: 'example.com', terminalZone: 'example.com' });
475
475
  assert.equal(r.edgeRules.cookieStrip.applied, true);
476
476
  assert.equal(r.edgeRules.cookieStrip.error, null);
477
477
  assert.equal(r.edgeRules.cacheBypass.applied, true);
@@ -480,7 +480,7 @@ await ta('ensureNamedTunnel reports edgeRules.applied on the success path (both
480
480
 
481
481
  await ta('ensureNamedTunnel in DRY-RUN reports applied:false (a plan never applied anything)', async () => {
482
482
  const cf = new CfTunnelApi({ accountId: ACCT, fetchImpl: () => { throw new Error('should not fetch'); } });
483
- const r = await cf.ensureNamedTunnel({ login: 'alice', zone: 'amazonprimea.com', terminalZone: 'amazonprimea.com' });
483
+ const r = await cf.ensureNamedTunnel({ login: 'alice', zone: 'example.com', terminalZone: 'example.com' });
484
484
  assert.equal(r.edgeRules.cookieStrip.applied, false, 'dry-run must not read as "the security rule is in place"');
485
485
  assert.equal(r.edgeRules.cacheBypass.applied, false);
486
486
  });
@@ -488,8 +488,8 @@ await ta('ensureNamedTunnel in DRY-RUN reports applied:false (a plan never appli
488
488
  console.log('name helpers:');
489
489
  t('tunnelName / terminalHostname / previewHostname are deterministic', () => {
490
490
  assert.equal(tunnelName('alice'), 'otb-term-alice');
491
- assert.equal(terminalHostname('alice', 'dev.amazonprimea.com'), 'term-alice.dev.amazonprimea.com');
492
- assert.equal(previewHostname('alice', 'amazonprimea.com'), 'sandbox-alice.amazonprimea.com');
491
+ assert.equal(terminalHostname('alice', 'dev.example.com'), 'term-alice.dev.example.com');
492
+ assert.equal(previewHostname('alice', 'example.com'), 'sandbox-alice.example.com');
493
493
  });
494
494
 
495
495
  console.log(`\ncf-tunnel: ${passed} passed, ${failed} failed`);
@@ -53,10 +53,10 @@ t('preserves gemini_api_key across token rotation', () => {
53
53
  const existing = {
54
54
  token: 'old-token',
55
55
  builder: { id: '1', github_login: 'a' },
56
- api_base: 'https://amazonprimea.com',
56
+ api_base: 'https://example.com',
57
57
  gemini_api_key: 'AIzaSy_TEST_KEY',
58
58
  };
59
- const merged = mergeSession(existing, { builder: { id: '1', github_login: 'a', rank: 'archon' } }, 'new-token-1234', 'https://amazonprimea.com');
59
+ const merged = mergeSession(existing, { builder: { id: '1', github_login: 'a', rank: 'archon' } }, 'new-token-1234', 'https://example.com');
60
60
  assert.equal(merged.gemini_api_key, 'AIzaSy_TEST_KEY');
61
61
  assert.equal(merged.token, 'new-token-1234');
62
62
  assert.equal(merged.builder.rank, 'archon', 'fresh builder rank must overwrite stale rank');
@@ -66,15 +66,15 @@ t('writes token even when existing has no gemini_api_key', () => {
66
66
  const existing = {
67
67
  token: 'old',
68
68
  builder: { id: '1', github_login: 'a' },
69
- api_base: 'https://amazonprimea.com',
69
+ api_base: 'https://example.com',
70
70
  };
71
- const merged = mergeSession(existing, { builder: { id: '1', github_login: 'a' } }, 'fresh', 'https://amazonprimea.com');
71
+ const merged = mergeSession(existing, { builder: { id: '1', github_login: 'a' } }, 'fresh', 'https://example.com');
72
72
  assert.equal(merged.token, 'fresh');
73
73
  assert.equal(merged.gemini_api_key, undefined);
74
74
  });
75
75
 
76
76
  t('handles a completely empty existing session (first-time paste)', () => {
77
- const merged = mergeSession({}, { builder: { id: '7', github_login: 'newbie' } }, 'first-token', 'https://amazonprimea.com');
77
+ const merged = mergeSession({}, { builder: { id: '7', github_login: 'newbie' } }, 'first-token', 'https://example.com');
78
78
  assert.equal(merged.token, 'first-token');
79
79
  assert.equal(merged.builder.id, '7');
80
80
  });
@@ -85,11 +85,11 @@ t('forward-compatible: an unknown field (future-proofing) survives the merge', (
85
85
  const existing = {
86
86
  token: 'old',
87
87
  builder: { id: '1' },
88
- api_base: 'https://amazonprimea.com',
88
+ api_base: 'https://example.com',
89
89
  gemini_api_key: 'k',
90
90
  model_preference: 'opus-only', // hypothetical future field
91
91
  };
92
- const merged = mergeSession(existing, { builder: { id: '1' } }, 'new', 'https://amazonprimea.com');
92
+ const merged = mergeSession(existing, { builder: { id: '1' } }, 'new', 'https://example.com');
93
93
  assert.equal(merged.model_preference, 'opus-only');
94
94
  });
95
95
 
@@ -95,7 +95,7 @@ test('customer-0: GDS_BRANDING_FILE selects the cloudbongos.com instance pack (t
95
95
  assert.equal(b.domains.statusOrigin, 'https://status.cloudbongos.com');
96
96
  assert.equal(b.domains.cookieDomain, '.cloudbongos.com');
97
97
  assert.equal(b.db.database, 'cloudbongos');
98
- assert.equal(b.firstAdmin, 'lars589');
98
+ assert.equal(b.firstAdmin, 'example-owner');
99
99
  });
100
100
 
101
101
  test('customer-0: no GDS_BRANDING_FILE still resolves the instance pack (default unchanged)', (t) => {
@@ -13,7 +13,7 @@ const { clientBranding } = brandingMod;
13
13
  const { injectBrandingGlobal, themeMarkup, injectModuleHallWidgets } = serveInternal;
14
14
 
15
15
  const OTB_ISH = {
16
- identity: { productName: 'Off the Boats', worldName: 'Amazonprimea', company: { name: 'Hermeslines', site: 'x' } },
16
+ identity: { productName: 'Example World', worldName: 'Example', company: { name: 'Hermeslines', site: 'x' } },
17
17
  currency: { label: 'drachmae', symbol: '' },
18
18
  theme: { palette: 'art/template/palette.json', mode: 'pixel-greek', ui: {
19
19
  colors: { bg: '#ece0c2', ink: '#2a2110', accent: '#4a7d5c' },
@@ -21,7 +21,7 @@ const OTB_ISH = {
21
21
  favicon: "data:image/svg+xml;utf8,<svg/>",
22
22
  } },
23
23
  rankLabels: { xenos: 'Xenos', archon: 'Archon' },
24
- copy: { tagline: 'Goods straight off the boats.', hallName: "Builders' Hall", notFound: 'washed ashore' },
24
+ copy: { tagline: 'Goods straight example world.', hallName: "Builders' Hall", notFound: 'washed ashore' },
25
25
  };
26
26
 
27
27
  test('R56: clientBranding exposes the configurable currency label', () => {
@@ -31,13 +31,13 @@ test('R56: clientBranding exposes the configurable currency label', () => {
31
31
 
32
32
  test('R57: clientBranding exposes identity + theme + rankLabels', () => {
33
33
  const c = clientBranding(OTB_ISH);
34
- assert.equal(c.identity.worldName, 'Amazonprimea');
35
- assert.equal(c.identity.productName, 'Off the Boats');
34
+ assert.equal(c.identity.worldName, 'Example');
35
+ assert.equal(c.identity.productName, 'Example World');
36
36
  assert.equal(c.theme.colors.bg, '#ece0c2');
37
37
  assert.equal(c.theme.fonts.display, '"Cinzel", serif');
38
38
  assert.deepEqual(c.theme.fonts.links, ['https://fonts.example/css']);
39
39
  assert.equal(c.rankLabels.archon, 'Archon');
40
- assert.equal(c.copy.tagline, 'Goods straight off the boats.');
40
+ assert.equal(c.copy.tagline, 'Goods straight example world.');
41
41
  });
42
42
 
43
43
  test('R57: clientBranding exposes theme.ui (web), NOT theme.palette (server-only game path)', () => {
@@ -65,9 +65,9 @@ test('clientBranding exposes project policy — the settings read-back (task 100
65
65
  test('clientBranding is a SMALL allow-list — no server-only field leaks to the browser', () => {
66
66
  const projected = clientBranding({
67
67
  ...OTB_ISH,
68
- domains: { publicOrigin: 'https://amazonprimea.com', cookieDomain: '.amazonprimea.com' },
69
- repo: { owner: 'lars589', name: 'amazonprimea' },
70
- db: { database: 'amazonprimea' },
68
+ domains: { publicOrigin: 'https://example.com', cookieDomain: '.example.com' },
69
+ repo: { owner: 'example-owner', name: 'example' },
70
+ db: { database: 'example' },
71
71
  envPrefix: 'OTB',
72
72
  });
73
73
  // `reward` joined the projection in task 1002469 (ADR 0146 follow-up) — the resolved
package/tests/dev_lib.mjs CHANGED
@@ -70,19 +70,19 @@ t('deriveDbName: override > branding > repo dir > default', () => {
70
70
  // ---------- branding facts (instance over neutral) ----------
71
71
  t('loadBrandingFacts: instance pack wins, neutral fills gaps', () => {
72
72
  const f = fakeFs({
73
- 'config/branding.json': JSON.stringify({ domains: { publicOrigin: 'http://localhost:3006' }, firstAdmin: 'lars589', envPrefix: 'CLOUDBONGOS' }),
73
+ 'config/branding.json': JSON.stringify({ domains: { publicOrigin: 'http://localhost:3006' }, firstAdmin: 'example-owner', envPrefix: 'CLOUDBONGOS' }),
74
74
  'config/branding.neutral.json': NEUTRAL,
75
75
  });
76
76
  const facts = lib.loadBrandingFacts({ instanceRoot: '/x/test4', coreRoot: '/core', f });
77
77
  assert.equal(facts.publicOrigin, 'http://localhost:3006');
78
- assert.equal(facts.firstAdmin, 'lars589');
78
+ assert.equal(facts.firstAdmin, 'example-owner');
79
79
  assert.equal(facts.configDir, 'cloudbongos');
80
80
  });
81
81
 
82
82
  // ---------- full run params ----------
83
83
  t('resolveRunParams: port from branding, db from repo dir, TCP localhost, gdsOnly', () => {
84
84
  const f = fakeFs({
85
- 'config/branding.json': JSON.stringify({ domains: { publicOrigin: 'http://localhost:3006' }, firstAdmin: 'lars589' }),
85
+ 'config/branding.json': JSON.stringify({ domains: { publicOrigin: 'http://localhost:3006' }, firstAdmin: 'example-owner' }),
86
86
  'config/branding.neutral.json': NEUTRAL,
87
87
  'config/modules.json': JSON.stringify({ modules: { game: false } }),
88
88
  });
@@ -93,7 +93,7 @@ t('resolveRunParams: port from branding, db from repo dir, TCP localhost, gdsOnl
93
93
  assert.equal(p.pgUser, 'lars');
94
94
  assert.equal(p.gdsOnly, true); // game off -> skip OTB seeds
95
95
  assert.equal(p.publicOrigin, 'http://localhost:3006');
96
- assert.equal(p.firstAdmin, 'lars589');
96
+ assert.equal(p.firstAdmin, 'example-owner');
97
97
  });
98
98
 
99
99
  t('resolveRunParams: game module ON -> not GDS-only; env PGHOST/PGUSER honored', () => {
@@ -114,7 +114,7 @@ test('a pack filling the documented theme surface leaves NO neutral colour on th
114
114
  test('the generator carries no host-brand copy or motif of its own', () => {
115
115
  const code = codeOnly(source);
116
116
  // The archaic install copy + the world motifs that shipped into the vanilla build.
117
- for (const re of [/thine/i, /ashore/i, /amazonprimea/i, /off the boats/i, /meander/i, /greek/i, /marble/i]) {
117
+ for (const re of [/thine/i, /ashore/i, /example/i, /example world/i, /meander/i, /greek/i, /marble/i]) {
118
118
  assert.doesNotMatch(code, re, `host-brand literal ${re} must not appear in the generator's code`);
119
119
  }
120
120
  // Copy is derived from the pack (or overridden by it), never a fixed sentence.
@@ -23,7 +23,7 @@ function t(name, fn) {
23
23
  }
24
24
 
25
25
  const CFG = {
26
- releases_repo: 'lars589/amazonprimea-devbox',
26
+ releases_repo: 'example-owner/example-devbox',
27
27
  version: '1.2.3',
28
28
  assets: {
29
29
  'mac-arm64': 'OTB-Dev-Box-1.2.3-arm64.dmg',
@@ -38,7 +38,7 @@ t('maps a known target to the versioned release-asset URL', () => {
38
38
  const d = buildDevboxDownloads(CFG);
39
39
  assert.equal(
40
40
  d.redirectFor('mac-arm64'),
41
- 'https://github.com/lars589/amazonprimea-devbox/releases/download/v1.2.3/OTB-Dev-Box-1.2.3-arm64.dmg'
41
+ 'https://github.com/example-owner/example-devbox/releases/download/v1.2.3/OTB-Dev-Box-1.2.3-arm64.dmg'
42
42
  );
43
43
  });
44
44
 
@@ -226,7 +226,7 @@ test('a pack filling the documented theme surface leaves NO neutral colour on th
226
226
  });
227
227
 
228
228
  test('the generator carries no host-brand motif of its own', () => {
229
- for (const re of [/off the boats/i, /amazonprimea/i, /shipping[- ]container/i, /greek/i, /meander/i, /parchment/i]) {
229
+ for (const re of [/example world/i, /example/i, /shipping[- ]container/i, /greek/i, /meander/i, /parchment/i]) {
230
230
  assert.doesNotMatch(code, re, `host-brand literal ${re} must not appear in the generator's code`);
231
231
  }
232
232
  });
@@ -74,7 +74,7 @@ await t('memberApprovalLine round-trips through parseApprovalMarker', () => {
74
74
 
75
75
  // ---- recordApprovalReaction (orchestration via fakes) ----------------------
76
76
  const GOOD_ID = '123456789012345678';
77
- const archon = { id: 1, rank: 'archon', github_login: 'lars589' };
77
+ const archon = { id: 1, rank: 'archon', github_login: 'example-owner' };
78
78
 
79
79
  function makeDeps(over = {}) {
80
80
  const calls = { member: [], audit: [] };
@@ -27,7 +27,7 @@ function t(name, fn) {
27
27
  console.log('Discord OAuth helpers (Phase 3 F2):');
28
28
 
29
29
  await t('discordAuthorizeUrl carries client_id, identify+guilds.join scope, code response, state, redirect', () => {
30
- const url = auth.discordAuthorizeUrl('123456789012345678', 'abc123state', 'https://amazonprimea.com/api/gds/auth/discord/callback');
30
+ const url = auth.discordAuthorizeUrl('123456789012345678', 'abc123state', 'https://example.com/api/gds/auth/discord/callback');
31
31
  const u = new URL(url);
32
32
  assert.equal(u.origin + u.pathname, 'https://discord.com/api/oauth2/authorize');
33
33
  assert.equal(u.searchParams.get('client_id'), '123456789012345678');
@@ -36,7 +36,7 @@ await t('discordAuthorizeUrl carries client_id, identify+guilds.join scope, code
36
36
  assert.equal(u.searchParams.get('scope'), 'identify guilds.join');
37
37
  assert.equal(u.searchParams.get('response_type'), 'code');
38
38
  assert.equal(u.searchParams.get('state'), 'abc123state');
39
- assert.equal(u.searchParams.get('redirect_uri'), 'https://amazonprimea.com/api/gds/auth/discord/callback');
39
+ assert.equal(u.searchParams.get('redirect_uri'), 'https://example.com/api/gds/auth/discord/callback');
40
40
  });
41
41
 
42
42
  await t('isValidDiscordUserId accepts a 17–20 digit snowflake', () => {
@@ -90,7 +90,12 @@ test('every computed require inside the closure is one we have accounted for', (
90
90
  const ACCOUNTED = new Map([
91
91
  ['src/module-loader/loader.js', 2], // routes/<key>.js + pollerPath, from loadModules()
92
92
  ['scripts/gds/onboard.js', 3], // provision/oauth-secret/onboardPlan, inside the verb
93
- ['scripts/gds/package-core.js', 5], // publish-manifest/mirror-redact/secret-scrub/…
93
+ // 6th added by task 1003869: leak-scan-allowlist.js. Unlike the others this one IS
94
+ // top-level, so it resolves whenever package-core is required — but it does not widen
95
+ // the closure: the module is pure data plus three predicates, does no I/O, dispatches
96
+ // nothing dynamically, and its single require (back to package-core, for the literal
97
+ // floor) is lazy and inside a function.
98
+ ['scripts/gds/package-core.js', 6], // publish-manifest/mirror-redact/secret-scrub/leak-scan-allowlist/…
94
99
  ['scripts/gds/upgrade.js', 1], // a `node -e` child, not a require in this process
95
100
  ['scripts/gds/gen-api-docs.js', 1], // require(path.join(CORE_ROOT,'package.json')) — JSON
96
101
  ]);
@@ -35,7 +35,7 @@ test('firstAdminLogin: env override wins over branding (configured prefix)', ()
35
35
 
36
36
  test('maybeSeatFirstAdmin: no-op when the builder is already an Archon (no DB call)', async () => {
37
37
  clearEnv();
38
- const b = { id: 1, github_login: 'lars589', rank: 'archon' };
38
+ const b = { id: 1, github_login: 'example-owner', rank: 'archon' };
39
39
  const out = await maybeSeatFirstAdmin(b);
40
40
  assert.equal(out.rank, 'archon');
41
41
  });
@@ -56,7 +56,7 @@ function fakeRes() {
56
56
  attachFail({}, res, () => {}); // install res.fail() as the router does (task 1991)
57
57
  return res;
58
58
  }
59
- const ARCHON = { id: 1, rank: 'archon', github_login: 'lars589' };
59
+ const ARCHON = { id: 1, rank: 'archon', github_login: 'example-owner' };
60
60
 
61
61
  // Snapshot/restore the github-push functions a route test stubs, so layers don't bleed.
62
62
  function withStubs(stubs, fn) {
@@ -180,13 +180,13 @@ await t('getPullRequestFiles: rejects a non-positive PR number before any fetch'
180
180
  await t('setGateOwnerApproved: POSTs a gate-owner-approved success status on the sha', async () => {
181
181
  let captured = null;
182
182
  const fetchImpl = async (url, opts) => { captured = { url, body: JSON.parse(opts.body) }; return { ok: true }; };
183
- const ok = await gp.setGateOwnerApproved({ sha: SHA, login: 'lars589' }, { token: 'T', repoInfo: REPO, fetchImpl });
183
+ const ok = await gp.setGateOwnerApproved({ sha: SHA, login: 'example-owner' }, { token: 'T', repoInfo: REPO, fetchImpl });
184
184
  assert.equal(ok, true);
185
185
  assert.ok(captured.url.endsWith(`/statuses/${SHA}`), captured.url);
186
186
  assert.equal(captured.body.context, gp.GATE_OWNER_APPROVED_CONTEXT);
187
187
  assert.equal(captured.body.context, 'gate-owner-approved');
188
188
  assert.equal(captured.body.state, 'success');
189
- assert.ok(/lars589/.test(captured.body.description), 'records who approved');
189
+ assert.ok(/example-owner/.test(captured.body.description), 'records who approved');
190
190
  });
191
191
 
192
192
  await t('recheckPullRequest: PATCHes state=closed then state=open, then re-arms auto-merge', async () => {
@@ -332,7 +332,7 @@ await t('POST approve: sets the owner-approval status on the head sha + re-runs
332
332
  assert.equal(res.statusCode, 200);
333
333
  assert.equal(res.body.ok, true);
334
334
  assert.equal(res.body.status_set, true);
335
- assert.deepEqual(approved, { sha: SHA, login: 'lars589' }, 'approval is sha-pinned to head + records the Archon');
335
+ assert.deepEqual(approved, { sha: SHA, login: 'example-owner' }, 'approval is sha-pinned to head + records the Archon');
336
336
  assert.equal(rechecked, 201, 'the gate check is re-run for the PR');
337
337
  });
338
338
  });
@@ -353,7 +353,7 @@ await t('POST approve: still works when checks are unreadable (no gate-review ch
353
353
  await handler({ builder: ARCHON, params: { pr: '167' }, body: {} }, res);
354
354
  assert.equal(res.statusCode, 200);
355
355
  assert.equal(res.body.status_set, true);
356
- assert.deepEqual(approved, { sha: SHA, login: 'lars589' });
356
+ assert.deepEqual(approved, { sha: SHA, login: 'example-owner' });
357
357
  assert.equal(rechecked, 167);
358
358
  });
359
359
  });
@@ -76,7 +76,7 @@ await test('gradeByBuilder: quality-filtered, and pass_rate is NULL (not 0.000)
76
76
  const sql = (await captureSql(() => db.gradeByBuilder(30)))[0];
77
77
  assertQualityFiltered(sql, 'gradeByBuilder');
78
78
  // The old shape ROUND(COALESCE(AVG(...),0),3) fabricated a 0.000 fail-streak
79
- // for an all-outage window — the lars589 symptom. COALESCE must be gone from
79
+ // for an all-outage window — the example-owner symptom. COALESCE must be gone from
80
80
  // the pass_rate expression so it reads NULL ("no graded work") instead.
81
81
  assert.ok(!sql.includes('ROUND(COALESCE(AVG'), 'pass_rate must not coalesce an empty window to 0');
82
82
  assert.ok(/AVG\(CASE WHEN g\.passed THEN 1 ELSE 0 END\) FILTER/.test(sql), 'pass_rate must average quality rows only');
@@ -3,8 +3,8 @@
3
3
  // task 2122 (demo-audit fix B) — the scaffolded .claude/hooks must NOT hardcode a
4
4
  // founder-instance brand in their outbound HTTP User-Agent. Those hooks are copied
5
5
  // into a consumer instance by claude-materialize, whose rebrand maps domain HOSTS
6
- // (amazonprimea.com), config dirs, and env prefixes — but NOT a bare brand token
7
- // like `amazonprimea-gds-cli` (no TLD). So a branded UA there leaks the founder's
6
+ // (example.com), config dirs, and env prefixes — but NOT a bare brand token
7
+ // like `example-gds-cli` (no TLD). So a branded UA there leaks the founder's
8
8
  // host-brand into every scaffolded instance (criterion gcarry-prod-vanilla).
9
9
  //
10
10
  // Invariant: every `'User-Agent': '<value>'` literal in .claude/hooks/*.js uses the
package/tests/init.mjs CHANGED
@@ -27,8 +27,8 @@ function test(name, fn) {
27
27
  const fullSpec = () => init.normalizeSpec({
28
28
  identity: { productName: 'Cloud Bongos' },
29
29
  tagline: 'Building software is laying down a beat.',
30
- repo: { owner: 'lars589', name: 'cloud-bongos' },
31
- firstAdmin: 'lars589',
30
+ repo: { owner: 'example-owner', name: 'cloud-bongos' },
31
+ firstAdmin: 'example-owner',
32
32
  currency: { label: 'credits' },
33
33
  domains: { publicOrigin: 'http://localhost:3000' },
34
34
  modules: ['art-pipeline'],
@@ -48,8 +48,8 @@ test('buildBrandingConfig: lean overrides only (no theme block)', () => {
48
48
  const b = init.buildBrandingConfig(fullSpec());
49
49
  assert.equal(b.identity.productName, 'Cloud Bongos');
50
50
  assert.equal(b.identity.worldName, 'Cloud Bongos'); // defaults to productName
51
- assert.equal(b.repo.owner, 'lars589');
52
- assert.equal(b.firstAdmin, 'lars589');
51
+ assert.equal(b.repo.owner, 'example-owner');
52
+ assert.equal(b.firstAdmin, 'example-owner');
53
53
  assert.equal(b.currency.label, 'credits');
54
54
  assert.equal(b.envPrefix, 'BONGOS'); // canonical since task 1003703
55
55
  assert.equal(b.copy.tagline, 'Building software is laying down a beat.');
@@ -219,8 +219,8 @@ test('versionPayload: always sends an explicit, valid track', () => {
219
219
  // ---- provisioning arm (ADR 0111 §3, task 1946) ----
220
220
  const provSpec = (over = {}) => init.normalizeSpec({
221
221
  identity: { productName: 'Cloud Bongos' },
222
- repo: { owner: 'lars589', name: 'cloud-bongos' },
223
- firstAdmin: 'lars589',
222
+ repo: { owner: 'example-owner', name: 'cloud-bongos' },
223
+ firstAdmin: 'example-owner',
224
224
  version: { id: 'V1', name: 'V1', done_when: 'x' },
225
225
  provisioning: over,
226
226
  });
@@ -177,7 +177,7 @@ test('resolveDocsRoot: the explicit instance root when set, else coreRoot (no-op
177
177
  // Regression fixture for a bug that locked a builder out of re-authenticating.
178
178
  // Three call sites resolved the API base three different ways and none reached
179
179
  // the instance the builder was actually signed into:
180
- // * paste-token.js hardcoded 'https://amazonprimea.com' (a straggler the task
180
+ // * paste-token.js hardcoded 'https://example.com' (a straggler the task
181
181
  // 1002201 sweep missed), so a token minted by cloudbongos.com was verified
182
182
  // against the founder's host and rejected 401 — a VALID token, wrong host.
183
183
  // * reauth.js used the module-level branding default, so it printed a