@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
@@ -1,4 +1,4 @@
1
- # Amazonprimea Dev Box — the OTB builder environment as code (ADR 0031 §3).
1
+ # Example Dev Box — the OTB builder environment as code (ADR 0031 §3).
2
2
  # Base Ubuntu 24.04 ships Python 3.12 (matches CI's art-pipeline cert) + a non-root
3
3
  # `vscode` sudo user. Node 22 / gh / Claude Code arrive as version-pinned features
4
4
  # (devcontainer.json); this Dockerfile covers the OS bits features don't: firewall
@@ -1,12 +1,12 @@
1
1
  {
2
- // Amazonprimea Dev Box — the OTB builder environment as code (ADR 0031 §3).
2
+ // Example Dev Box — the OTB builder environment as code (ADR 0031 §3).
3
3
  //
4
4
  // This is the single box spec every builder runs, reached via Claude Desktop
5
5
  // → SSH or the web → Remote Control (ADR 0031 §1). It builds identically on a
6
6
  // DigitalOcean box and on a laptop via Docker Desktop. The pre-distributed
7
7
  // Desktop "managed settings" that lock a non-technical builder to exactly this
8
8
  // box are a separate task (#599); this file is the box itself.
9
- "name": "Amazonprimea Dev Box",
9
+ "name": "Example Dev Box",
10
10
 
11
11
  "build": {
12
12
  "dockerfile": "Dockerfile",
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env bash
2
- # healthcheck.sh — image-level toolchain integrity check for the Amazonprimea
2
+ # healthcheck.sh — image-level toolchain integrity check for the Example
3
3
  # Dev Box (ADR 0031 §3).
4
4
  #
5
5
  # This is the IMAGE half of "doctor.js as the health check": it answers "was the
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env bash
2
- # init-firewall.sh — default-deny outbound firewall for the Amazonprimea Dev Box.
2
+ # init-firewall.sh — default-deny outbound firewall for the Example Dev Box.
3
3
  #
4
4
  # ADR 0031 §3 + §6: the box is an org-controlled, egress-restricted surface. This
5
5
  # script flips the container to default-DROP and then allow-lists ONLY the hosts
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env bash
2
- # post-create.sh — first-run provisioning for the Amazonprimea Dev Box.
2
+ # post-create.sh — first-run provisioning for the Example Dev Box.
3
3
  #
4
4
  # Runs once, as the `vscode` user, after the container is created and the repo is
5
5
  # mounted at /workspace (devcontainer.json: postCreateCommand). This is where
@@ -28,7 +28,7 @@ cd /workspace 2>/dev/null || cd "$(git rev-parse --show-toplevel 2>/dev/null ||
28
28
  bold=$'\033[1m'; green=$'\033[32m'; yellow=$'\033[33m'; dim=$'\033[2m'; reset=$'\033[0m'
29
29
  say() { echo "${bold}$*${reset}"; }
30
30
 
31
- say "Amazonprimea Dev Box — first-run provisioning"
31
+ say "Example Dev Box — first-run provisioning"
32
32
  echo
33
33
 
34
34
  # git trusts the mounted workspace even though its owner differs from the
@@ -28,6 +28,6 @@ GOOGLE_AI_STUDIO_KEY=
28
28
  # --- GitHub OAuth (server only) -----------------------------------------------
29
29
  # Needed only if you are running the GDS server yourself (server.js) and want
30
30
  # Device Flow auth to work. The production droplet has these in
31
- # /etc/amazonprimea/ — builders do NOT need these for normal day-to-day work.
31
+ # /etc/example/ — builders do NOT need these for normal day-to-day work.
32
32
  # BONGOS_GITHUB_CLIENT_ID=
33
33
  # BONGOS_GITHUB_CLIENT_SECRET=
package/Dockerfile CHANGED
@@ -7,7 +7,7 @@
7
7
  # Cloud Bongos brand with every feature module off). Brand/configure an instance
8
8
  # by mounting your own config/*.json (see docs/recipes/self-host.md).
9
9
  #
10
- # No prod topology is referenced anywhere here: no droplet IP, no amazonprimea
10
+ # No prod topology is referenced anywhere here: no droplet IP, no example
11
11
  # domain, no peer-auth socket. The DB is reached over TCP via PG* env vars,
12
12
  # supplied by docker-compose.yml (or your own orchestrator).
13
13
 
@@ -1541,6 +1541,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1541
1541
  | `b1cf8460ad34` | certain | Every project is a real GitHub repository that you own. Start from a clean slate, or bring a repo you already | `modules/public-landing/public/projects.html:1127` |
1542
1542
  | `71b0ef2552c4` | certain | Every project you own, in one place — its live status, its address, and the controls that matter. Sign in with | `modules/public-landing/public/projects.html:619` |
1543
1543
  | `478bc7f0e492` | certain | Every project you own: what it is, whether it is answering, and the controls that matter. Each row says what t | `modules/public-landing/public/projects.html:611` |
1544
+ | `1b5a6cfc494c` | certain | Example World | `modules/public-landing/public/index.html:741` |
1544
1545
  | `7c8dcf228e70` | certain | Extras for this project | `modules/public-landing/public/projects.html:1100` |
1545
1546
  | `2585087f4873` | certain | Fair use | `modules/public-landing/public/terms.html:72` |
1546
1547
  | `fec69b6c7458` | certain | Filter by state | `modules/public-landing/public/projects.html:641` |
@@ -1599,7 +1600,6 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1599
1600
  | `fad4acf2aba6` | certain | Not Sure | `modules/public-landing/public/projects.html:1037` |
1600
1601
  | `f8665480baf6` | certain | Nothing is sold, and nothing is shared for advertising. | `modules/public-landing/public/privacy.html:67` |
1601
1602
  | `837fdaa0936a` | certain | Nothing matches that. | `modules/public-landing/public/projects.html:649` |
1602
- | `2c951d1c7f72` | certain | Example | `modules/public-landing/public/index.html:741` |
1603
1603
  | `1bc11853e893` | certain | On the map | `modules/public-landing/public/projects.html:824` |
1604
1604
  | `b4ac8f44710c` | certain | On the public map | `modules/public-landing/public/projects.html:742` |
1605
1605
  | `69400ca12477` | certain | Once you have signed in here and accepted these terms, your profile and that record are public by default: at | `modules/public-landing/public/terms.html:68` |
@@ -13893,6 +13893,15 @@
13893
13893
  "origin": "html-text",
13894
13894
  "confidence": "certain"
13895
13895
  },
13896
+ {
13897
+ "id": "1b5a6cfc494c",
13898
+ "surface": "landing",
13899
+ "text": "Example World",
13900
+ "file": "modules/public-landing/public/index.html",
13901
+ "line": 741,
13902
+ "origin": "html-text",
13903
+ "confidence": "certain"
13904
+ },
13896
13905
  {
13897
13906
  "id": "7c8dcf228e70",
13898
13907
  "surface": "landing",
@@ -14415,15 +14424,6 @@
14415
14424
  "origin": "html-text",
14416
14425
  "confidence": "certain"
14417
14426
  },
14418
- {
14419
- "id": "2c951d1c7f72",
14420
- "surface": "landing",
14421
- "text": "Off the Boats",
14422
- "file": "modules/public-landing/public/index.html",
14423
- "line": 741,
14424
- "origin": "html-text",
14425
- "confidence": "certain"
14426
- },
14427
14427
  {
14428
14428
  "id": "1bc11853e893",
14429
14429
  "surface": "landing",
@@ -1924,5 +1924,9 @@ is load-bearing: the script throws rather than guess if it is missing, and
1924
1924
  landed since 1.19.723 with no explicit bump. run 34759302425. (task 1002620)
1925
1925
  1.19.725 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
1926
1926
  landed since 1.19.724 with no explicit bump. run 34760272743. (task 1002620)
1927
+ 1.19.726 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
1928
+ landed since 1.19.725 with no explicit bump. run 34763380132. (task 1002620)
1929
+ 1.19.727 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
1930
+ landed since 1.19.726 with no explicit bump. run 34763937238. (task 1002620)
1927
1931
  ---------------------------------------------------------------------------
1928
1932
  ```
@@ -1,6 +1,6 @@
1
1
  # Releasing the Dev Box desktop app
2
2
 
3
- How a new version of OTB Dev Box (`devbox-app/`, ADR 0045) reaches builders.
3
+ How a new version of the Dev Box app (`devbox-app/`, ADR 0045) reaches builders.
4
4
  The chain: CI builds installers → operator publishes them to the PUBLIC
5
5
  releases repo → a one-line config bump re-points the branded
6
6
  `/downloads/devbox/*` redirects. Nothing binary ever rides the git deploy.
@@ -21,8 +21,8 @@ releases repo → a one-line config bump re-points the branded
21
21
  (302 → release asset; targets `mac-arm64`, `mac-x64`, `win-x64`, `win-arm64` + aliases)
22
22
  and `/downloads/devbox/latest.json` (what the app's update check reads).
23
23
  Server side: `src/devbox-downloads.js`, mounted in `server.js`.
24
- - **Install-window backdrop ([#912](https://example.com/builders#/task/912), fixed in [#1235](https://example.com/builders#/task/1235)):** the on-brand
25
- Greek-coast art is `build-resources/dmg-background.png` (+ `@2x`), drawn by
24
+ - **Install-window backdrop ([#912](https://example.com/builders#/task/912), fixed in [#1235](https://example.com/builders#/task/1235)):** the backdrop
25
+ art is `build-resources/dmg-background.png` (+ `@2x`), drawn by
26
26
  `scripts/gen-dmg-backdrop.py`. Committed art — re-run that script + commit if you change
27
27
  the layout/copy. **The DMG is NOT styled by electron-builder.** electron-builder writes a
28
28
  `.DS_Store` whose background reference includes a modern `pBBk` bookmark that Finder on
@@ -64,7 +64,7 @@ releases repo → a one-line config bump re-points the branded
64
64
  `src/devbox-downloads.js` composes):
65
65
  ```
66
66
  gh release create v1.1.0 -R example-owner/example-devbox \
67
- --title "OTB Dev Box v1.1.0" --notes "…" /tmp/devbox-rel/*.dmg /tmp/devbox-rel/*.exe
67
+ --title "Dev Box v1.1.0" --notes "…" /tmp/devbox-rel/*.dmg /tmp/devbox-rel/*.exe
68
68
  ```
69
69
  5. Update `config/devbox-app.json`: `version` + the four asset filenames
70
70
  (they embed the version — `tests/devbox_downloads.mjs` fails the gate on a
@@ -1,10 +1,10 @@
1
- # dmgbuild settings for the OTB Dev Box install window (task 1235).
1
+ # dmgbuild settings for the Dev Box install window (task 1235).
2
2
  #
3
3
  # WHY dmgbuild and not electron-builder's own DMG styling:
4
4
  # electron-builder writes a .DS_Store whose background reference includes a
5
5
  # modern security-scoped bookmark (`pBBk`). Finder on macOS >= Sonoma/Sequoia
6
6
  # (verified white on 15.7.4) cannot resolve that bookmark, so it falls back to a
7
- # solid white window — the embedded Greek-coast backdrop (task 912) is present
7
+ # solid white window — the embedded backdrop (task 912) is present
8
8
  # but never drawn. dmgbuild writes an alias-only `.DS_Store` (no `pBBk`) that
9
9
  # Finder DOES resolve, so the backdrop renders. The OS is not the problem; the
10
10
  # bookmark electron-builder emits is. scripts/apply-dmg-backdrop.sh re-packages
@@ -16,16 +16,16 @@
16
16
 
17
17
  import os.path
18
18
 
19
- # -D app=<path to OTB Dev Box.app> -D bg=<path to the hidpi backdrop tiff>
19
+ # -D app=<path to the Dev Box .app> -D bg=<path to the hidpi backdrop tiff>
20
20
  application = defines["app"]
21
21
  backdrop = defines["bg"]
22
- appname = os.path.basename(application) # "OTB Dev Box.app"
22
+ appname = os.path.basename(application) # e.g. "<Product> Dev Box.app"
23
23
 
24
24
  # Contents of the disk image.
25
25
  files = [application]
26
26
  symlinks = {"Applications": "/Applications"}
27
27
 
28
- # Window + icon layout — matched to the backdrop art's two marble wells.
28
+ # Window + icon layout — matched to the two icon wells the backdrop art draws.
29
29
  background = backdrop
30
30
  window_rect = ((150, 150), (660, 400)) # ((x, y), (w, h)); w/h match the 660x400 art
31
31
  icon_size = 100
@@ -10,7 +10,7 @@
10
10
  // renderer/theme.generated.css — the :root design tokens (palette + fonts)
11
11
  // electron-builder.yml — rendered from electron-builder.tmpl.yml
12
12
  //
13
- // So ONE source tree builds a "Cloud Bongos Dev Box" here and an "Amazonprimea
13
+ // So ONE source tree builds a "Cloud Bongos Dev Box" here and an "Example
14
14
  // Dev Box" on the OTB instance — the brand is a build input, not baked into code
15
15
  // (the ADR 0004 posture, generalised: no instance's name is hardcoded anywhere).
16
16
  //
@@ -3,7 +3,7 @@
3
3
  // GENERATED, not hardcoded: scripts/gen-brand.js writes src/brand.generated.json
4
4
  // from the instance's config/branding.json at build time (prestart / pretest /
5
5
  // predist), so the SAME source tree renders a "Cloud Bongos Dev Box" here and an
6
- // "Amazonprimea Dev Box" on the OTB instance — no instance name is baked into
6
+ // "Example Dev Box" on the OTB instance — no instance name is baked into
7
7
  // code (the ADR 0004 posture, generalised to every instance). The generated file
8
8
  // is committed (the Cloud Bongos default) so a fresh checkout runs without a
9
9
  // generate step; every build regenerates it from the local branding.
@@ -91,8 +91,8 @@ console.log('terminalAuthUrl:');
91
91
 
92
92
  t('embeds otb:<credential> userinfo in the terminal URL', () => {
93
93
  assert.equal(
94
- terminalAuthUrl({ url: 'https://term-lars589.amazonprimea.com', credential: 'abc123' }),
95
- `https://${TERMINAL_USER}:abc123@term-lars589.amazonprimea.com/`
94
+ terminalAuthUrl({ url: 'https://term-example-owner.example.com', credential: 'abc123' }),
95
+ `https://${TERMINAL_USER}:abc123@term-example-owner.example.com/`
96
96
  );
97
97
  });
98
98
 
@@ -165,11 +165,11 @@ t('an rsa-only scan is NOT complete (#925 — Desktop ssh2 negotiates ed25519)',
165
165
  console.log('hostKeyLinesFor (task 1187 / idea 235 — authoritative host keys):');
166
166
 
167
167
  t('builds <host> <type> <base64> lines from the reported keys, ed25519 present', () => {
168
- const r = hostKeyLinesFor('box-x.dev.amazonprimea.com', 'ssh-ed25519 AAAA\necdsa-sha2-nistp256 BBBB');
168
+ const r = hostKeyLinesFor('box-x.dev.example.com', 'ssh-ed25519 AAAA\necdsa-sha2-nistp256 BBBB');
169
169
  assert.equal(r.ok, true);
170
170
  assert.deepEqual(r.lines, [
171
- 'box-x.dev.amazonprimea.com ssh-ed25519 AAAA',
172
- 'box-x.dev.amazonprimea.com ecdsa-sha2-nistp256 BBBB',
171
+ 'box-x.dev.example.com ssh-ed25519 AAAA',
172
+ 'box-x.dev.example.com ecdsa-sha2-nistp256 BBBB',
173
173
  ]);
174
174
  });
175
175
 
@@ -196,32 +196,32 @@ t('empty report / missing hostname are rejected', () => {
196
196
  console.log('knownHostsHasKey + verifyKnownHosts (idea 264 — self-verify the on-disk pin):');
197
197
 
198
198
  const HKEY = 'AAAAC3NzaC1lZDI1NTE5AAAAIBh0r5JKa722SY0UXjqHv2'; // sample ed25519 blob
199
- const EXPECTED = hostKeyLinesFor('box-x.dev.amazonprimea.com', `ssh-ed25519 ${HKEY}\necdsa-sha2-nistp256 BBBB`).lines;
199
+ const EXPECTED = hostKeyLinesFor('box-x.dev.example.com', `ssh-ed25519 ${HKEY}\necdsa-sha2-nistp256 BBBB`).lines;
200
200
 
201
201
  t('authoritative key present in file → true', () => {
202
- const file = `box-x.dev.amazonprimea.com ssh-ed25519 ${HKEY}\nother.example.com ssh-rsa K`;
203
- assert.equal(knownHostsHasKey(file, 'box-x.dev.amazonprimea.com', EXPECTED), true);
202
+ const file = `box-x.dev.example.com ssh-ed25519 ${HKEY}\nother.example.com ssh-rsa K`;
203
+ assert.equal(knownHostsHasKey(file, 'box-x.dev.example.com', EXPECTED), true);
204
204
  });
205
205
 
206
206
  t('STALE ed25519 (rebuild minted a new key) → false, even though a host line exists', () => {
207
- const file = 'box-x.dev.amazonprimea.com ssh-ed25519 OLDOLDOLD';
208
- assert.equal(knownHostsHasKey(file, 'box-x.dev.amazonprimea.com', EXPECTED), false);
207
+ const file = 'box-x.dev.example.com ssh-ed25519 OLDOLDOLD';
208
+ assert.equal(knownHostsHasKey(file, 'box-x.dev.example.com', EXPECTED), false);
209
209
  });
210
210
 
211
211
  t('MISSING (ssh-keygen -R removed it / empty file) → false', () => {
212
- assert.equal(knownHostsHasKey('unrelated.example.com ssh-ed25519 ZZZZ', 'box-x.dev.amazonprimea.com', EXPECTED), false);
213
- assert.equal(knownHostsHasKey('', 'box-x.dev.amazonprimea.com', EXPECTED), false);
212
+ assert.equal(knownHostsHasKey('unrelated.example.com ssh-ed25519 ZZZZ', 'box-x.dev.example.com', EXPECTED), false);
213
+ assert.equal(knownHostsHasKey('', 'box-x.dev.example.com', EXPECTED), false);
214
214
  });
215
215
 
216
216
  t('no authoritative key → any ed25519 line for the host counts (keyscan fallback)', () => {
217
- assert.equal(knownHostsHasKey('box-x.dev.amazonprimea.com ssh-ed25519 WHATEVER', 'box-x.dev.amazonprimea.com', []), true);
217
+ assert.equal(knownHostsHasKey('box-x.dev.example.com ssh-ed25519 WHATEVER', 'box-x.dev.example.com', []), true);
218
218
  // ...but an rsa-only pin (no ed25519, the algo Desktop verifies) is NOT enough.
219
- assert.equal(knownHostsHasKey('box-x.dev.amazonprimea.com ssh-rsa RRRR', 'box-x.dev.amazonprimea.com', []), false);
219
+ assert.equal(knownHostsHasKey('box-x.dev.example.com ssh-rsa RRRR', 'box-x.dev.example.com', []), false);
220
220
  });
221
221
 
222
222
  t('host,ip combined first field + comments/blanks are handled', () => {
223
- const file = `# a comment\n\nbox-x.dev.amazonprimea.com,1.2.3.4 ssh-ed25519 ${HKEY}`;
224
- assert.equal(knownHostsHasKey(file, 'box-x.dev.amazonprimea.com', EXPECTED), true);
223
+ const file = `# a comment\n\nbox-x.dev.example.com,1.2.3.4 ssh-ed25519 ${HKEY}`;
224
+ assert.equal(knownHostsHasKey(file, 'box-x.dev.example.com', EXPECTED), true);
225
225
  });
226
226
 
227
227
  t('no hostname → false (fail-closed)', () => {
@@ -58,7 +58,7 @@ const {
58
58
  // SANDBOX-FOR-EVERYONE (ADR 0052, task #1001 — Lars, 2026-06-13): the PRODUCT/game
59
59
  // code is now in the starter scope too — `src/world`, `src/rooms`, and the
60
60
  // `public/` game client — so EVERY box (not just Metic+ full-clone boxes) can run
61
- // the live sandbox (sandbox-<login>.amazonprimea.com, ADR 0044). The box serves
61
+ // the live sandbox (sandbox-<login>.example.com, ADR 0044). The box serves
62
62
  // the game from a GAME-ONLY entry (src/preview-server.js) that never mounts
63
63
  // /api/gds, so the privacy boundary that matters for a PUBLIC sandbox URL is the
64
64
  // RUNTIME (what the box process exposes), NOT source exclusion. That is consistent
@@ -96,7 +96,7 @@ function provisionFloor() { return process.env.BOX_PROVISION_MIN_RANK || 'xenos'
96
96
  // metadata), [::1], *.local/*.internal — so a builder could make the prod server
97
97
  // probe arbitrary internal endpoints. A legitimate terminal URL is ALWAYS one of
98
98
  // exactly two shapes (see cf-tunnel.js terminalHostname + the quick-tunnel
99
- // default): the named tunnel `term-<login>.<zone>` under amazonprimea.com, or a
99
+ // default): the named tunnel `term-<login>.<zone>` under example.com, or a
100
100
  // Cloudflare quick tunnel `*.trycloudflare.com`. We bind the named form to the
101
101
  // CALLER's own login so one builder can't even name another's terminal host.
102
102
  // PURE + exported for unit tests (no network, no DB).
@@ -3,7 +3,7 @@
3
3
  // Discord reaction → Archon approval (task 1100).
4
4
  //
5
5
  // An Archon's 👍/👎 on a request line in #member-approvals fires the SAME server
6
- // action the amazonprimea hall fires:
6
+ // action the example hall fires:
7
7
  // #member-approvals 👍 → access_requests → 'invited' (PATCH /access-requests/:id)
8
8
  // 👎 → access_requests → 'dismissed'
9
9
  //
@@ -125,7 +125,7 @@ function workerModelFor(kind, graderModel, builderModel) {
125
125
 
126
126
  // The instance's project name, injected into the grader's identity line so a
127
127
  // non-OTB Cloud Bongos instance is graded against ITS OWN project, never a
128
- // hardcoded "Off the Boats" (ADR 0062 §3/§5; the branding contract's
128
+ // hardcoded "Example World" (ADR 0062 §3/§5; the branding contract's
129
129
  // llmProjectName field). Reached through the doorway like every other host-
130
130
  // context read in this module — never a deep core require. Resolved once at
131
131
  // module load (the brand is a per-process singleton); falls back to a neutral
@@ -22,7 +22,7 @@ Your job is to FIND WHAT IS WRONG with this change. **The default verdict is FAI
22
22
  Begin by hunting for these specific failure modes. When you find one, CITE the diff line or name the failing acceptance criterion:
23
23
 
24
24
  - TODOs, FIXMEs, "for now", "temporary" or "stub" comments left in shipped code.
25
- - Hardcoded shortcuts: assuming one builder, one user, one project root, one tenant, one environment, or one identity. Look for literal "lars", "lars589", absolute /Users paths, hardcoded ports, hardcoded IDs.
25
+ - Hardcoded shortcuts: assuming one builder, one user, one project root, one tenant, one environment, or one identity. Look for literal "lars", "example-owner", absolute /Users paths, hardcoded ports, hardcoded IDs.
26
26
  - Scope gaps: acceptance criteria in the description that the diff DOES NOT satisfy. Read the description's "Acceptance" section line by line.
27
27
  - Demo / dummy / mock code that lies: returns a fixed value, fakes a successful result, mocks at the wrong layer, or pretends to call something it doesn't.
28
28
  - Missing tests for new logic: any non-trivial new function, route handler, branch, or aggregation that ships without a covering test.
@@ -31,7 +31,7 @@ You do NOT score whether the description was implemented — that's the Narc's j
31
31
  You begin by hunting for these specific failure modes. When you find one, CITE the diff line or quote the offending code:
32
32
 
33
33
  - TODOs, FIXMEs, "for now", "temporary" or "stub" comments left in shipped code.
34
- - Hardcoded shortcuts assuming one builder, one user, one project root, one tenant. Look for literal "lars", "lars589", absolute /Users paths, hardcoded ports, hardcoded IDs that should be lookups.
34
+ - Hardcoded shortcuts assuming one builder, one user, one project root, one tenant. Look for literal "lars", "example-owner", absolute /Users paths, hardcoded ports, hardcoded IDs that should be lookups.
35
35
  - Dead code: helpers, exports, branches, or files added but never called from anywhere in the post-merge tree. Use Read on the receiving site if unsure.
36
36
  - Broken invariants: methodology rules in CLAUDE.md (the "every change is backed by a claimed GDS task" rule, no-hardcoded-Archon-identity per V3.R12, server-enforced permissions per ADR 0016), cross-verified Python/JS lookups, ground-vs-object cell split per ADR 0012.
37
37
  - Missing tests for new logic: any non-trivial new function, route handler, branch, or aggregation that ships without a covering test.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "key": "hall-ui",
3
3
  "title": "Builders' Hall",
4
- "description": "The authenticated builders' hall served at builders.<apex> (builders.amazonprimea.com) — the roster, work board, standing/karma, leaderboard, achievements, primer, system maps, settings, dev-box pair page, and the Archon-only watch/harbor/gate pages, all polling /api/gds/* and the read-only /api/gds/public/* surface. The largest WEB-SURFACE core-domain module (~13k LOC), carved out of the GDS core in BV1.R85 (ADR 0093 §1; 02-module-map §6). default-on: a Cloud Bongos instance ships its hall like it ships its status page. Registers no port and contributes no routes — it declares a webSurface (host prefix + static dir). Unlike the generic status surface, the hall keeps its dedicated serving block in serve-internal.js (the builders.<apex> + apex /builders/* shim, canonical redirects, the citizen/Archon page gates, asset-stamping, and the module hall-widget injection) — the webSurfaces declaration is the discovery + scope-map + window.__MODULES__ record; serve-internal serves it from this module's public/ dir with that richer machinery. The me/public/leaderboard read endpoints it renders stay SHARED core in routes/{me,public,builders}.js (the status surface + the off-box mirror read them too).",
4
+ "description": "The authenticated builders' hall served at builders.<apex> (builders.example.com) — the roster, work board, standing/karma, leaderboard, achievements, primer, system maps, settings, dev-box pair page, and the Archon-only watch/harbor/gate pages, all polling /api/gds/* and the read-only /api/gds/public/* surface. The largest WEB-SURFACE core-domain module (~13k LOC), carved out of the GDS core in BV1.R85 (ADR 0093 §1; 02-module-map §6). default-on: a Cloud Bongos instance ships its hall like it ships its status page. Registers no port and contributes no routes — it declares a webSurface (host prefix + static dir). Unlike the generic status surface, the hall keeps its dedicated serving block in serve-internal.js (the builders.<apex> + apex /builders/* shim, canonical redirects, the citizen/Archon page gates, asset-stamping, and the module hall-widget injection) — the webSurfaces declaration is the discovery + scope-map + window.__MODULES__ record; serve-internal serves it from this module's public/ dir with that richer machinery. The me/public/leaderboard read endpoints it renders stay SHARED core in routes/{me,public,builders}.js (the status surface + the off-box mirror read them too).",
5
5
  "coreVersion": "^1.11.0",
6
6
  "default": true,
7
7
  "maintenance": { "status": "core-maintained" },
@@ -41,7 +41,7 @@
41
41
  // BV1.R75 (ADR 0062 §4): drive the hall index page's chrome — <title>, <h1>, and
42
42
  // meta description — from the branding pack so the reskin reaches the browser tab,
43
43
  // not just the page body. copy.hallName is the hall's name ("Builders' Hall");
44
- // identity.productName / worldName is the instance ("Off the Boats" / "Amazonprimea").
44
+ // identity.productName / worldName is the instance ("Example World" / "Example").
45
45
  // The static markup is the no-JS / pre-load fallback. SCOPED to the hall index via
46
46
  // the #hall-h1 marker: the other hall pages (sessions/watch/work) carry their own
47
47
  // page-specific titles + headings and must keep them — gating on #hall-h1 leaves
@@ -354,7 +354,7 @@
354
354
  if (!el) return;
355
355
  // Apex origin for external links (the API docs live on the apex, not this
356
356
  // builders./status. subdomain). Derived from the current host so it's correct
357
- // on any instance (amazonprimea.com, cloudbongos.com, localhost).
357
+ // on any instance (example.com, cloudbongos.com, localhost).
358
358
  var APEX_ORIGIN = window.location.origin.replace('://builders.', '://').replace('://status.', '://');
359
359
  // Instance product/world name for the "back to home" wayfinding link — same
360
360
  // source renderFoot() uses, so the core carries no hardcoded identity.
@@ -1,5 +1,5 @@
1
1
  // public-builders/work.js — the Work Board (/builders/work, served at
2
- // builders.amazonprimea.com/work).
2
+ // builders.example.com/work).
3
3
  //
4
4
  // Signed-in builders only. The page is the builder-facing SOURCE OF TRUTH for
5
5
  // "works in progress"; it gathers two views the hall + status dashboard used to
@@ -70,7 +70,7 @@ const REPO_ROOT = path.resolve(__dirname, '..', '..');
70
70
 
71
71
  // The merge-bot git identity, derived from the instance branding pack so a non-OTB
72
72
  // Cloud Bongos instance signs its auto-resolved merge commits with ITS OWN name +
73
- // apex, never a hardcoded "Off the Boats GDS" / "amazonprimea.com" (ADR 0062 §3/§5;
73
+ // apex, never a hardcoded "Example World GDS" / "example.com" (ADR 0062 §3/§5;
74
74
  // the branding contract). Falls back to a neutral identity if branding fails to
75
75
  // resolve so the resolver never crashes on a config error. NEVER a real person.
76
76
  function botIdentity() {
@@ -234,7 +234,7 @@ async function gradeByBuilder(days = 30) {
234
234
  }
235
235
 
236
236
  // Public grade-trend timeline — array of { day, n, avg_score }. Powers a
237
- // chart on status.amazonprimea.com.
237
+ // chart on status.example.com.
238
238
 
239
239
  async function gradeTrendByDay(days = 30) {
240
240
  // A day whose rows are all outages keeps its row (n=0, avg_score NULL,
@@ -5,7 +5,7 @@
5
5
  // OWN curve; an Archon may read any builder's (the cross-builder aggregate
6
6
  // is just every builder's own page, plus the ecosystem feed below).
7
7
  // - GET /public/analytics/ecosystem — no auth. Ecosystem-wide aggregate with
8
- // NO per-builder identity, for status.amazonprimea.com. Individual curves
8
+ // NO per-builder identity, for status.example.com. Individual curves
9
9
  // never cross onto the open web (mirrors the public-task privacy gate).
10
10
  //
11
11
  // All data derives from existing columns (see db.builderAnalytics /
@@ -3,7 +3,7 @@
3
3
  // When a new-builder access request (access_requests, status='pending') needs an
4
4
  // Archon's go-ahead, the GDS posts a one-line request to the Archon-only
5
5
  // #member-approvals Discord channel so the Archon can approve it WITHOUT opening
6
- // the amazonprimea hall.
6
+ // the example hall.
7
7
  //
8
8
  // The Archon then 👍 (approve) or 👎 (decline) the message; the in-process bot's
9
9
  // reaction handler (src/bongos/discord-approvals.js) re-derives the reactor's LIVE
@@ -295,7 +295,7 @@ function compactTranscript(turns) {
295
295
 
296
296
  // The instance's project name, injected into the analysis prompt so a non-OTB
297
297
  // Cloud Bongos instance onboards against ITS OWN project rather than a hardcoded
298
- // "Off the Boats" (ADR 0062 §3/§5; the branding contract's llmProjectName field).
298
+ // "Example World" (ADR 0062 §3/§5; the branding contract's llmProjectName field).
299
299
  // Resolved LAZILY (inside the header builder, not at module load) so this module
300
300
  // stays side-effect-free at require time — it is the *pure* half of the pipeline.
301
301
  // Falls back to a neutral phrase if branding fails to resolve.
@@ -189,7 +189,7 @@ t('private/reserved addresses are recognized; public ones are not', () => {
189
189
  'fe80::1', 'fd00::5', '::ffff:10.0.0.5', 'garbage']) {
190
190
  assert.equal(liveness.isPrivateAddress(bad), true, `${bad} must be private/refused`);
191
191
  }
192
- for (const ok of ['93.184.216.34', '161.35.132.201', '2606:2800:220:1:248:1893:25c8:1946']) {
192
+ for (const ok of ['93.184.216.34', '1.2.3.4', '2606:2800:220:1:248:1893:25c8:1946']) {
193
193
  assert.equal(liveness.isPrivateAddress(ok), false, `${ok} must be public`);
194
194
  }
195
195
  });
@@ -738,7 +738,7 @@ composition A; landing composition v3, picked by the owner 2026-08-27. No roll,
738
738
  <ul class="orbs" data-orbs>
739
739
  <li class="orb-item o1">
740
740
  <span class="orb-bead" aria-hidden="true"></span>
741
- <span class="orb-name">Off the Boats</span>
741
+ <span class="orb-name">Example World</span>
742
742
  <span class="orb-meta">a game, 11 builders</span>
743
743
  </li>
744
744
  <li class="orb-item o2">
@@ -1,5 +1,5 @@
1
1
  {
2
- "_": "The all-null floor card (task 1003301) on the hub's own catalog (task 1003345): the same page, the same stub, the catalog aliased to featured-hub.json — the landing's three plus Tidewater, a null row nobody owns. Demo, the landing catalog's floor row, is owned by the signed-in stub, and an owned orb's plain click opens its manage view, never its card. Since task 1003352 it also carries the card BACKDROP state: featured-hub gives Off the Boats a card_backdrop, so the owner's plate can be seen standing in front of the project's own picture. Rendered by name: node modules/ui-design/kit/render.js --states public-landing/projects-floor.states.json",
2
+ "_": "The all-null floor card (task 1003301) on the hub's own catalog (task 1003345): the same page, the same stub, the catalog aliased to featured-hub.json — the landing's three plus Tidewater, a null row nobody owns. Demo, the landing catalog's floor row, is owned by the signed-in stub, and an owned orb's plain click opens its manage view, never its card. Since task 1003352 it also carries the card BACKDROP state: featured-hub gives Example World a card_backdrop, so the owner's plate can be seen standing in front of the project's own picture. Rendered by name: node modules/ui-design/kit/render.js --states public-landing/projects-floor.states.json",
3
3
  "page": "/projects",
4
4
  "surface": "public-landing",
5
5
  "modes": [
@@ -64,7 +64,7 @@
64
64
  "actions": [
65
65
  [
66
66
  "dispatchClick",
67
- "#orbField a.worldOrb[data-origin=\"https://amazonprimea.com\"]"
67
+ "#orbField a.worldOrb[data-origin=\"https://example.com\"]"
68
68
  ],
69
69
  [
70
70
  "wait",
@@ -53,12 +53,12 @@
53
53
  "steps": [["press", "Escape"], ["wait", 150]],
54
54
  "expect": { "dialog": false } },
55
55
  { "name": "the poster (task 1003301): art, five faces and +N, two figures on the art, the address, a member's hall door", "continue": true,
56
- "steps": [["dispatchClick", "#orbField a.worldOrb[data-origin=\"https://amazonprimea.com\"]"], ["wait", 900]],
56
+ "steps": [["dispatchClick", "#orbField a.worldOrb[data-origin=\"https://example.com\"]"], ["wait", 900]],
57
57
  "expect": { "dialog": true, "hasClass": [["#projCard", "has-art"]],
58
58
  "visible": ["#cardArt", "#cardFaces", "#cardBuildersFig", "#cardShippedFig", "#cardOpen", "#cardHall"],
59
59
  "count": [["#cardFaces img", 5], ["#projCard > div", 1]],
60
- "text": [["#cardBuilders", "11"], ["#cardShipped", "0"], ["#cardRel", "you build here"], ["#cardRuns", "amazonprimea.com"], ["#cardFaces .facesMore", "+6"], ["#cardHall", "Builders' hall"]],
61
- "href": [["#cardHall", "https://builders.amazonprimea.com/"], ["#cardOpen", "https://amazonprimea.com/"]] } },
60
+ "text": [["#cardBuilders", "11"], ["#cardShipped", "0"], ["#cardRel", "you build here"], ["#cardRuns", "example.com"], ["#cardFaces .facesMore", "+6"], ["#cardHall", "Builders' hall"]],
61
+ "href": [["#cardHall", "https://builders.example.com/"], ["#cardOpen", "https://example.com/"]] } },
62
62
  { "name": "the ladder: a project that answered nothing is the card that shipped before (disc, name, tagline, address, listed, one door)", "continue": true,
63
63
  "steps": [["press", "Escape"], ["wait", 150], ["dispatchClick", "#orbField a.worldOrb[data-origin=\"https://tidewater.cloudbongos.com\"]"], ["wait", 500]],
64
64
  "expect": { "dialog": true, "hasClass": [["#projCard", "has-art", false]],
@@ -76,7 +76,7 @@
76
76
  { "name": "the table: the hall glyph rides the door cell on the one member row whose hall is elsewhere, and on the platform's row", "continue": true,
77
77
  "steps": [["press", "Escape"], ["wait", 150], ["click", "#projTrig"], ["wait", 120], ["click", "a[data-sub=\"table\"]"], ["wait", 300]],
78
78
  "expect": { "dialog": false, "visible": ["#selfHall"], "count": [["#mapRows li[data-generated] .rowHall", 1], ["#mapRows li[data-generated] .facts", 7], ["#mapRows li[data-generated] .runs", 7], ["#mapRows li[data-generated] .rowDoors", 7]],
79
- "href": [["#mapRows li[data-generated] .rowHall", "https://builders.amazonprimea.com/"]] } },
79
+ "href": [["#mapRows li[data-generated] .rowHall", "https://builders.example.com/"]] } },
80
80
  { "name": "the table: the sort left the column head — the pills carry the order, and the sentence under the list states it (task 1003356)", "continue": true,
81
81
  "steps": [["click", ".tblSort button[data-sort=\"builders\"]"], ["wait", 200]],
82
82
  "expect": { "attr": [[".tblSort button[data-sort=\"builders\"]", "aria-pressed", "true"], [".tblSort button[data-sort=\"name\"]", "aria-pressed", "false"]],
@@ -9,7 +9,7 @@
9
9
  "ignoreControls": [".skip", ".vh"],
10
10
  "states": {
11
11
  "out-map": { "auth": false, "expect": { "expanded": false } },
12
- "in-map": { "auth": true, "expect": { "expanded": false, "count": [["#orbField .worldOrb[data-shape][data-style]", 7]], "attr": [["#selfOrb", "data-template", "pair-chrome"], ["#orbField a.worldOrb[data-origin=\"https://amazonprimea.com\"]", "data-template", "bead-wash"], ["#orbField a.worldOrb[data-origin=\"https://demo.cloudbongos.com\"]", "data-shape", "pair"], ["#orbField a.worldOrb[data-origin=\"https://demo.cloudbongos.com\"]", "data-material", "obsidian"], ["#orbField a.worldOrb[data-origin=\"https://demo.cloudbongos.com\"]", "data-template", "pair-obsidian-tint"], ["#orbField a.worldOrb[data-origin=\"https://emersonian-circles.cloudbongos.com\"]", "data-template", "bead-obsidian-plain"]] } },
12
+ "in-map": { "auth": true, "expect": { "expanded": false, "count": [["#orbField .worldOrb[data-shape][data-style]", 7]], "attr": [["#selfOrb", "data-template", "pair-chrome"], ["#orbField a.worldOrb[data-origin=\"https://example.com\"]", "data-template", "bead-wash"], ["#orbField a.worldOrb[data-origin=\"https://demo.cloudbongos.com\"]", "data-shape", "pair"], ["#orbField a.worldOrb[data-origin=\"https://demo.cloudbongos.com\"]", "data-material", "obsidian"], ["#orbField a.worldOrb[data-origin=\"https://demo.cloudbongos.com\"]", "data-template", "pair-obsidian-tint"], ["#orbField a.worldOrb[data-origin=\"https://emersonian-circles.cloudbongos.com\"]", "data-template", "bead-obsidian-plain"]] } },
13
13
  "in-map-projects": { "auth": true, "actions": [["click", "#projTrig"], ["wait", 350]], "expect": { "expanded": true, "open": "#menuProjects" } },
14
14
  "in-map-profile": { "auth": true, "actions": [["click", "#who"], ["wait", 350]], "expect": { "expanded": true, "open": "#menuProfile" } },
15
15
  "in-map-kbd": { "auth": true, "actions": [["focus", "#projTrig"], ["press", "Enter"], ["wait", 350], ["press", "ArrowDown"], ["wait", 120]], "expect": { "expanded": true, "activeText": "Table" } },
@@ -40,7 +40,7 @@
40
40
  "in-new-done": { "auth": true, "url": "/projects?view=new", "actions": [["wait",600],["fill","#newName","Mercury"],["click","#panel-name button[type=submit]"],["wait",400],["click","#typeCards .tpill[data-type=\"game\"]"],["click","#panel-type button[type=submit]"],["wait",400],["fill","#f-desc","A co-op farming game where the seasons never repeat."],["click","#teamCards .tpill[data-team=\"small-team\"]"],["click","#panel-detail button[type=submit]"],["wait",900],["click","#panel-modules button[type=submit]"],["wait",400],["click","#panel-home button[type=submit]"],["wait",400],["fill","#f-slug","mercury"],["wait",900],["fill","#f-domain","mercury.example.com"],["wait",200],["click","#panel-address button[type=submit]"],["wait",400],["click","#doCreate"],["wait",1500]], "expect": {"visible":["#panel-done","#liveProgress .prog","#humanSteps li"],"hidden":["#panel-review","#qWrap"]} },
41
41
  "in-new-resume-offer": { "auth": true, "url": "/projects?view=new", "actions": [["wait",600],["fill","#newName","Mercury"],["click","#panel-name button[type=submit]"],["wait",400],["click","#typeCards .tpill[data-type=\"game\"]"],["click","#panel-type button[type=submit]"],["wait",400],["fill","#f-desc","A co-op farming game where the seasons never repeat."],["click","#teamCards .tpill[data-team=\"small-team\"]"],["click","#panel-detail button[type=submit]"],["wait",900],["click","#panel-modules button[type=submit]"],["wait",400],["click","#panel-home button[type=submit]"],["wait",400],["fill","#f-slug","mercury"],["wait",900],["fill","#f-domain","mercury.example.com"],["wait",200],["click","#panel-address button[type=submit]"],["wait",400],["click","#doCreate"],["wait",1500],["click","#projTrig"],["wait",350],["click","#menuProjects [data-nav=\"new\"]"],["wait",500]], "expect": {"visible":["#panel-name","#wizResume","#wizResumeGo"],"hidden":["#panel-done"],"text":[["#wizResumeName","Mercury"]]} },
42
42
  "out-map-projects": { "auth": false, "actions": [["click", "#projTrig"], ["wait", 350]], "expect": { "expanded": true, "hidden": ["#menuProjects [data-nav=\"mine\"]"] } },
43
- "card": { "auth": true, "actions": [["dispatchClick", "#orbField a.worldOrb[data-origin=\"https://amazonprimea.com\"]"], ["wait", 900]], "expect": { "dialog": true, "hasClass": [["#projCard", "has-art"]], "visible": ["#cardArt", "#cardFaces", "#cardBuildersFig", "#cardShippedFig", "#cardOpen", "#cardHall"], "text": [["#cardBuilders", "11"], ["#cardShipped", "0"], ["#cardRel", "you build here"], ["#cardRuns", "amazonprimea.com"], ["#cardFaces .facesMore", "+6"]], "count": [["#cardFaces img", 5]], "href": [["#cardHall", "https://builders.amazonprimea.com/"]] } },
43
+ "card": { "auth": true, "actions": [["dispatchClick", "#orbField a.worldOrb[data-origin=\"https://example.com\"]"], ["wait", 900]], "expect": { "dialog": true, "hasClass": [["#projCard", "has-art"]], "visible": ["#cardArt", "#cardFaces", "#cardBuildersFig", "#cardShippedFig", "#cardOpen", "#cardHall"], "text": [["#cardBuilders", "11"], ["#cardShipped", "0"], ["#cardRel", "you build here"], ["#cardRuns", "example.com"], ["#cardFaces .facesMore", "+6"]], "count": [["#cardFaces img", 5]], "href": [["#cardHall", "https://builders.example.com/"]] } },
44
44
  "card-noart": { "auth": true, "actions": [["dispatchClick", "#orbField a.worldOrb[data-origin=\"https://emersonian-circles.cloudbongos.com\"]"], ["wait", 600]], "expect": { "dialog": true, "hasClass": [["#projCard", "has-art", false]], "hidden": ["#cardArt", "#cardFaces", "#cardHall"], "visible": ["#cardBuildersFig", "#cardShippedFig", "#cardOpen"], "text": [["#cardShipped", "30+"], ["#cardRel", "you build here"]] } },
45
45
  "card-self": { "auth": true, "actions": [["dispatchClick", "#selfOrb"], ["wait", 600]], "expect": { "dialog": true, "hidden": ["#cardArt"], "visible": ["#cardBuildersFig", "#cardShippedFig", "#cardFaces", "#cardOpen", "#cardHall"], "text": [["#cardRel", "yours"]] } }
46
46
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "key": "status-ui",
3
3
  "title": "Status dashboard (\"The Watch\")",
4
- "description": "The public build-status dashboard served at status.<apex> (status.amazonprimea.com) — the live up/down banner, version-progress rollups, cost summary, recent ships, leaderboard, and the ecosystem fingerprint, all polling the read-only /api/gds/public/* surface every 60s. A WEB-SURFACE core-domain module carved out of the GDS core in BV1.R84 (ADR 0093 §1; 02-module-map §6 — a web surface is first-class). default-on: a Cloud Bongos instance ships its status page like it ships its hall. Registers no port and contributes no routes — it declares a webSurface (host prefix + static dir) the loader hands serve-internal, which serves the module's public/ dir on the matching host exactly as it served public-status/ before. The public read endpoints it renders stay SHARED core in routes/public.js (the hall + the off-box mirror read them too).",
4
+ "description": "The public build-status dashboard served at status.<apex> (status.example.com) — the live up/down banner, version-progress rollups, cost summary, recent ships, leaderboard, and the ecosystem fingerprint, all polling the read-only /api/gds/public/* surface every 60s. A WEB-SURFACE core-domain module carved out of the GDS core in BV1.R84 (ADR 0093 §1; 02-module-map §6 — a web surface is first-class). default-on: a Cloud Bongos instance ships its status page like it ships its hall. Registers no port and contributes no routes — it declares a webSurface (host prefix + static dir) the loader hands serve-internal, which serves the module's public/ dir on the matching host exactly as it served public-status/ before. The public read endpoints it renders stay SHARED core in routes/public.js (the hall + the off-box mirror read them too).",
5
5
  "coreVersion": "^1.11.0",
6
6
  "default": true,
7
7
  "maintenance": { "status": "core-maintained" },
@@ -1,11 +1,11 @@
1
- // status.amazonprimea.com — public dashboard JS.
1
+ // status.example.com — public dashboard JS.
2
2
  // Polls /api/bongos/public/* every 60 seconds. No auth, no SPA framework.
3
3
 
4
4
  // API base for the public read endpoints (#737). Empty = same-origin, the case
5
- // when this file is served by the droplet itself (status.amazonprimea.com
5
+ // when this file is served by the droplet itself (status.example.com
6
6
  // proxies /api/* to the same Node process). The OFF-BOX GitHub Pages mirror
7
7
  // (the owner's status-mirror repo, ADR 0029) injects window.STATUS_API_BASE =
8
- // 'https://amazonprimea.com' in its <head> so the same byte-identical file
8
+ // 'https://example.com' in its <head> so the same byte-identical file
9
9
  // fetches cross-origin from the droplet there (CORS is open). Keeping this file
10
10
  // identical on both hosts is what lets the mirror sync be a pure copy.
11
11
  const API = (typeof window !== 'undefined' && window.STATUS_API_BASE) || '';
@@ -1275,7 +1275,7 @@ document.addEventListener('visibilitychange', () => {
1275
1275
 
1276
1276
  // ---------- deep-link resolver (#654) ----------
1277
1277
  // A bare doc ref like "#173" links into the Builders' Hall, but a viewer can also
1278
- // land on the PUBLIC status dashboard at status.amazonprimea.com/#/idea/173 (or
1278
+ // land on the PUBLIC status dashboard at status.example.com/#/idea/173 (or
1279
1279
  // /#/task/N, /#/blocker/N). Resolve it to a MINIMAL card — id + status + type
1280
1280
  // only; an idea/blocker title is NEVER shown here (the public endpoints withhold
1281
1281
  // it), and a task title only when the projection already marked it public
@@ -1,4 +1,4 @@
1
- /* status.amazonprimea.com — public ledger of an ancient-Greek city.
1
+ /* status.example.com — public ledger of an ancient-Greek city.
2
2
  Form factor: weathered marble + parchment, Cinzel inscription headings,
3
3
  EB Garamond body. Square corners, hairline double-rules, no SaaS softness.
4
4
  Palette stays inside the locked Mediterranean range. */