@bongos/core 1.19.1024 → 1.19.1026

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 (42) hide show
  1. package/.bongos-core.json +80 -40
  2. package/clients/bongos-client/README.md +1 -1
  3. package/clients/bongos-client/bongos-client.global.js +4 -0
  4. package/clients/bongos-client/index.cjs +4 -0
  5. package/clients/bongos-client/index.d.ts +7 -1
  6. package/clients/bongos-client/index.mjs +4 -0
  7. package/docs/adr/0213-platform-terms-acceptance-is-the-hubs-own-witness.md +2 -0
  8. package/docs/api/openapi.json +106 -5
  9. package/docs/api-reference.md +7 -5
  10. package/docs/copy-inventory.md +19 -17
  11. package/docs/copy-registry.json +44 -36
  12. package/docs/module-api-changelog.md +5 -1
  13. package/migrations/core_255_access_requests_invite_kind.sql +52 -0
  14. package/modules/government/catalog.js +1 -1
  15. package/modules/hall-ui/public/goal-map.html +1 -1
  16. package/modules/onboarding/routes/access-requests.js +62 -11
  17. package/modules/platform-identity/community-leaderboard.js +235 -0
  18. package/modules/platform-identity/connection-suggestions.js +1 -1
  19. package/modules/platform-identity/migrations/platform_identity_024_terms_grandfathered.sql +68 -0
  20. package/modules/platform-identity/module.json +1 -1
  21. package/modules/platform-identity/read-rate-limit.js +61 -0
  22. package/modules/platform-identity/routes/community-leaderboard.js +69 -0
  23. package/modules/platform-identity/routes/community-search.js +4 -31
  24. package/modules/platform-identity/routes/projects.js +1 -1
  25. package/modules/platform-identity/terms-acceptance.js +34 -14
  26. package/modules/public-landing/public/terms.html +2 -1
  27. package/package-lock.json +2 -2
  28. package/package.json +1 -1
  29. package/scripts/gds/run-unit-tests.js +10 -0
  30. package/src/module-api.js +1 -1
  31. package/tests/access_requests_invite.mjs +81 -4
  32. package/tests/application_lifecycle.mjs +174 -6
  33. package/tests/community_leaderboard_db.mjs +202 -0
  34. package/tests/community_leaderboard_route.mjs +414 -0
  35. package/tests/connection_suggestions.mjs +1 -1
  36. package/tests/connections_api.mjs +1 -1
  37. package/tests/goal_map_page.mjs +8 -0
  38. package/tests/handle_machinery.mjs +2 -0
  39. package/tests/profile_connections_ui.mjs +2 -2
  40. package/tests/profile_rollup_consent.mjs +3 -0
  41. package/tests/terms_acceptance.mjs +264 -14
  42. package/tests/terms_grandfather_db.mjs +144 -0
@@ -360,7 +360,7 @@
360
360
  "access-requests"
361
361
  ],
362
362
  "summary": "POST /access-requests/invite",
363
- "description": "POST /access-requests/invite — an Archon admits a GitHub username BEFORE any request exists (task 1003044): the only way in on an invite-only project, where the public POST refuses, and a shortcut on an apply one. It writes the same access_request row the sign-in gate reads (status 'invited' — hasInvitedAccessRequest), so nothing new is consulted at sign-in; a pending request for that login is resolved in place rather than duplicated. Two Archons inviting the same login at once can each insert a row (the unique index covers pending only): harmless — the gate reads \"any invited row\" — and it shows as two lines in the invited history, so no lock is taken. body: { github_login }. 201 with a new row; 200 with the row when a pending request was resolved; 200 already_invited when an invite already stands; 409 already_member when they have an account. rank: archon — the same gate as resolving a request.\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `access_request.review` (all required).",
363
+ "description": "POST /access-requests/invite — an Archon admits a GitHub username BEFORE any request exists (task 1003044): the only way in on an invite-only project, where the public POST refuses, and a shortcut on an apply one. It writes the same access_request row the sign-in gate reads (status 'invited' — hasInvitedAccessRequest), so nothing new is consulted at sign-in; a pending request for that login is resolved in place rather than duplicated. Two Archons inviting the same login at once can each insert a row (the unique index covers pending only): harmless — the gate reads \"any invited row\" — and it shows as two lines in the invited history, so no lock is taken. A fresh row is marked kind='invite' with created_by = the sender (a rescind overwrites resolved_by) and the optional note as the inviter's words. A pending request resolved in place stays an application with its applicant's own note (ADR 0335 D2.1–D2.3; task 1002814). body: { github_login, note? }. 201 with a new row; 200 with the row when a pending request was resolved; 200 already_invited when an invite already stands; 409 already_member when they have an account. rank: archon — the same gate as resolving a request.\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `access_request.review` (all required).",
364
364
  "x-rank": "archon",
365
365
  "x-source": "modules/onboarding/routes/access-requests.js",
366
366
  "x-permissions": [
@@ -405,6 +405,47 @@
405
405
  ]
406
406
  }
407
407
  },
408
+ "/access-requests/invites": {
409
+ "get": {
410
+ "operationId": "get_access_requests_invites",
411
+ "tags": [
412
+ "access-requests"
413
+ ],
414
+ "summary": "GET /access-requests/invites",
415
+ "description": "GET /access-requests/invites[?mine=1] — the outstanding invites: kind='invite', still 'invited' (not rescinded), and no builder row yet (not yet accepted by signing in), each naming its sender; ?mine=1 keeps only the caller's own (ADR 0335 D2; task 1002814). Rescind one with PATCH /access-requests/:id. rank: archon — it names logins that are not members yet.\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `access_request.review` (all required).",
416
+ "x-rank": "archon",
417
+ "x-source": "modules/onboarding/routes/access-requests.js",
418
+ "x-permissions": [
419
+ "access_request.review"
420
+ ],
421
+ "responses": {
422
+ "200": {
423
+ "description": "Success.",
424
+ "content": {
425
+ "application/json": {
426
+ "schema": {
427
+ "$ref": "#/components/schemas/GetAccessRequestsInvitesResponse"
428
+ }
429
+ }
430
+ }
431
+ },
432
+ "400": {
433
+ "$ref": "#/components/responses/BadRequest"
434
+ },
435
+ "401": {
436
+ "$ref": "#/components/responses/Unauthorized"
437
+ },
438
+ "403": {
439
+ "$ref": "#/components/responses/Forbidden"
440
+ }
441
+ },
442
+ "security": [
443
+ {
444
+ "builderSession": []
445
+ }
446
+ ]
447
+ }
448
+ },
408
449
  "/access-requests/status": {
409
450
  "get": {
410
451
  "operationId": "get_access_requests_status",
@@ -4395,6 +4436,34 @@
4395
4436
  ]
4396
4437
  }
4397
4438
  },
4439
+ "/community/leaderboard": {
4440
+ "get": {
4441
+ "operationId": "get_community_leaderboard",
4442
+ "tags": [
4443
+ "community"
4444
+ ],
4445
+ "summary": "GET /community/leaderboard",
4446
+ "description": "the cross-project leaderboard (?window=7d|30d|365d|all, default all; ?discipline=; ?limit=&offset=). Eligibility is the privacy matrix's numbers predicate (active + public + stats shown); the recruiting opt-out does not apply. no-store: hide must beat the cache (ADR 0171 D5). Rollout note: until a builder's first changed report after snapshot history began, their whole lifetime total counts inside every window (spec D2's missing-baseline-is-zero rule) — expected on day one, and self-correcting.\n\n**Rank:** `public` — No authentication — any caller.",
4447
+ "x-rank": "public",
4448
+ "x-source": "modules/platform-identity/routes/community-leaderboard.js",
4449
+ "responses": {
4450
+ "200": {
4451
+ "description": "Success.",
4452
+ "content": {
4453
+ "application/json": {
4454
+ "schema": {
4455
+ "$ref": "#/components/schemas/GetCommunityLeaderboardResponse"
4456
+ }
4457
+ }
4458
+ }
4459
+ },
4460
+ "400": {
4461
+ "$ref": "#/components/responses/BadRequest"
4462
+ }
4463
+ },
4464
+ "security": []
4465
+ }
4466
+ },
4398
4467
  "/community/search": {
4399
4468
  "get": {
4400
4469
  "operationId": "get_community_search",
@@ -12616,7 +12685,7 @@
12616
12685
  "projects"
12617
12686
  ],
12618
12687
  "summary": "POST /projects/invite",
12619
- "description": "own-or-metic in effect: invite a builder into a project (ADR 0141 §5, task #1002115), called by a `project.curate` holder OR the project's OWN OWNER (task 1003580; the ownership proof is `provisioning_instances.owner_builder_id`, reached through a port — see invite-authz.js). The wizard's audience is any signed-in GitHub user, typically a xenos who used to get 403 on their own project. A caller who is neither gets the unchanged permission refusal, identical whether or not the project exists. Pre-seeds a 'pending' membership the invitee accepts from My Projects. V1 invites by github_login and requires the invitee to already have a platform account (they build on some project); inviting someone entirely new to the platform (GitHub-id resolution) is a follow-up.\n\n**Rank:** `metic+archon` — Metic or Archon rank (review/triage powers).\n\n**Permissions:** `project.curate` (all required).",
12688
+ "description": "own-or-metic in effect: invite a builder into a project (ADR 0141 §5, task 1002115), called by a `project.curate` holder OR the project's OWN OWNER (task 1003580; the ownership proof is `provisioning_instances.owner_builder_id`, reached through a port — see invite-authz.js). The wizard's audience is any signed-in GitHub user, typically a xenos who used to get 403 on their own project. A caller who is neither gets the unchanged permission refusal, identical whether or not the project exists. Pre-seeds a 'pending' membership the invitee accepts from My Projects. V1 invites by github_login and requires the invitee to already have a platform account (they build on some project); inviting someone entirely new to the platform (GitHub-id resolution) is a follow-up.\n\n**Rank:** `metic+archon` — Metic or Archon rank (review/triage powers).\n\n**Permissions:** `project.curate` (all required).",
12620
12689
  "x-rank": "metic+archon",
12621
12690
  "x-source": "modules/platform-identity/routes/projects.js",
12622
12691
  "x-permissions": [
@@ -19471,6 +19540,15 @@
19471
19540
  },
19472
19541
  "description": "The single error shape returned by EVERY non-2xx response (ADR 0116). A caller reads `error.code`."
19473
19542
  },
19543
+ "GetAccessRequestsInvitesResponse": {
19544
+ "type": "object",
19545
+ "properties": {
19546
+ "invites": {}
19547
+ },
19548
+ "required": [
19549
+ "invites"
19550
+ ]
19551
+ },
19474
19552
  "GetAccessRequestsResponse": {
19475
19553
  "type": "object",
19476
19554
  "properties": {
@@ -19878,6 +19956,25 @@
19878
19956
  "why"
19879
19957
  ]
19880
19958
  },
19959
+ "GetCommunityLeaderboardResponse": {
19960
+ "type": "object",
19961
+ "properties": {
19962
+ "window": {},
19963
+ "since": {},
19964
+ "discipline": {},
19965
+ "count": {},
19966
+ "results": {},
19967
+ "page": {}
19968
+ },
19969
+ "required": [
19970
+ "window",
19971
+ "since",
19972
+ "discipline",
19973
+ "count",
19974
+ "results",
19975
+ "page"
19976
+ ]
19977
+ },
19881
19978
  "GetCommunitySearchResponse": {
19882
19979
  "type": "object",
19883
19980
  "properties": {
@@ -22102,6 +22199,10 @@
22102
22199
  "type": "string",
22103
22200
  "minLength": 1,
22104
22201
  "maxLength": 60
22202
+ },
22203
+ "note": {
22204
+ "type": "string",
22205
+ "maxLength": 500
22105
22206
  }
22106
22207
  },
22107
22208
  "required": [
@@ -26518,9 +26619,9 @@
26518
26619
  "description": "A required dependency/feature is not configured or is temporarily down."
26519
26620
  }
26520
26621
  },
26521
- "x-endpoint-count": 418,
26522
- "x-schema-count": 455,
26622
+ "x-endpoint-count": 420,
26623
+ "x-schema-count": 457,
26523
26624
  "x-undocumented-bodies": 9,
26524
- "x-response-schemas": 310,
26625
+ "x-response-schemas": 312,
26525
26626
  "x-generated-by": "scripts/gds/gen-api-docs.js"
26526
26627
  }
@@ -2,19 +2,20 @@
2
2
 
3
3
  # Bongos API reference
4
4
 
5
- > **Generated from the live route files** — the route file is authoritative. 418 endpoints across 71 route files.
5
+ > **Generated from the live route files** — the route file is authoritative. 420 endpoints across 72 route files.
6
6
  > Machine-readable spec: [`docs/api/openapi.json`](api/openapi.json) (OpenAPI 3.1). Rendered docs site: **`/docs`** (e.g. `cloudbongos.com/docs`).
7
7
 
8
8
  Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust-boundary-server-enforced-permissions.md)): `public` < `any-builder` < `metic+archon` < `archon`.
9
9
 
10
- ## `access-requests` (5)
10
+ ## `access-requests` (6)
11
11
 
12
12
  | Method | Path | Rank | Body | Description |
13
13
  |---|---|---|---|---|
14
14
  | GET | `/api/bongos/access-requests` | `archon` | — | GET /access-requests?status=pending — the owner's queue. |
15
15
  | POST | `/api/bongos/access-requests` | `public` | `github_login`, `display_name`, `note` | POST /access-requests — PUBLIC. |
16
16
  | PATCH | `/api/bongos/access-requests/:id` | `archon` | `status` | PATCH /access-requests/:id — the owner resolves a request. |
17
- | POST | `/api/bongos/access-requests/invite` | `archon` | `github_login` | POST /access-requests/invite — an Archon admits a GitHub username BEFORE any request exists (task 1003044): the only way in on an invite-… |
17
+ | POST | `/api/bongos/access-requests/invite` | `archon` | `github_login`, `note` | POST /access-requests/invite — an Archon admits a GitHub username BEFORE any request exists (task 1003044): the only way in on an invite-… |
18
+ | GET | `/api/bongos/access-requests/invites` | `archon` | — | GET /access-requests/invites[?mine=1] — the outstanding invites: kind='invite', still 'invited' (not rescinded), and no builder row yet (… |
18
19
  | GET | `/api/bongos/access-requests/status` | `public` | — | GET /access-requests/status?github_login=X — PUBLIC. |
19
20
 
20
21
  ## `achievements` (1)
@@ -187,10 +188,11 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
187
188
  | GET | `/api/bongos/closeness/weights` | `any-builder` | — | the MODEL is not private, and publishing it is the whole point of the weights being data. |
188
189
  | GET | `/api/bongos/closeness/with/:builderId` | `any-builder` | — | One pair — "why am I close to THEM", asked directly rather than by paging the graph. |
189
190
 
190
- ## `community` (1)
191
+ ## `community` (2)
191
192
 
192
193
  | Method | Path | Rank | Body | Description |
193
194
  |---|---|---|---|---|
195
+ | GET | `/api/bongos/community/leaderboard` | `public` | — | the cross-project leaderboard (?window=7d\|30d\|365d\|all, default all; ?discipline=; ?limit=&offset=). |
194
196
  | GET | `/api/bongos/community/search` | `public` | — | a name/discipline search under EXACTLY the public-profile visibility rules (D4): a hide_stats account is findable by name but drops out o… |
195
197
 
196
198
  ## `connections` (8)
@@ -515,7 +517,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
515
517
  | PATCH | `/api/bongos/projects/:id/status` | `metic+archon` | `status` | THE TAKEDOWN LEVER (R08, task 1002327; ADR 0252 §5.1). |
516
518
  | POST | `/api/bongos/projects/:projectId/specialities` | `any-builder` | `name`, `discipline`, `summary`, `contract_md`, `visibility`, `sellable` | POST /projects/:projectId/specialities — author one OWNED BY A PROJECT. |
517
519
  | GET | `/api/bongos/projects/featured` | `public` | — | the public map of projects; no auth by design. |
518
- | POST | `/api/bongos/projects/invite` | `metic+archon` | `client_id`, `github_login` | own-or-metic in effect: invite a builder into a project (ADR 0141 §5, task #1002115), called by a `project.curate` holder OR the project'… |
520
+ | POST | `/api/bongos/projects/invite` | `metic+archon` | `client_id`, `github_login` | own-or-metic in effect: invite a builder into a project (ADR 0141 §5, task 1002115), called by a `project.curate` holder OR the project's… |
519
521
 
520
522
  ## `provisioning` (31)
521
523
 
@@ -4,7 +4,7 @@
4
4
  > Deterministic on a given tree — regenerate and commit rather than hand-editing.
5
5
  > Machine-readable twin: [`copy-registry.json`](copy-registry.json).
6
6
 
7
- **2038 strings** across 3 surfaces · 1739 distinct pieces of copy · 2038 certain, 0 heuristic · 212 shown in more than one place.
7
+ **2040 strings** across 3 surfaces · 1742 distinct pieces of copy · 2040 certain, 0 heuristic · 211 shown in more than one place.
8
8
 
9
9
  ## Surfaces
10
10
 
@@ -12,7 +12,7 @@
12
12
  |---|---|---|---|
13
13
  | `builders-hall` | `modules/hall-ui/public` | 102 | 1547 |
14
14
  | `status-dashboard` | `modules/status-ui/public` | 4 | 100 |
15
- | `landing` | `modules/public-landing/public` | 5 | 391 |
15
+ | `landing` | `modules/public-landing/public` | 5 | 393 |
16
16
 
17
17
  ## Confidence, and why it is on every row
18
18
 
@@ -76,7 +76,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
76
76
  | `064c72453555` | 3x | goals · | modules/hall-ui/public/roadmap.js:218, modules/hall-ui/public/sky-interaction.js:39, modules/hall-ui/public/sky-interaction.js:124 |
77
77
  | `cc5106af4b35` | 3x | {…} of {…} criteria satisfied | modules/hall-ui/public/goals-lib.js:32, modules/hall-ui/public/goals-render.js:705, modules/hall-ui/public/goals.js:45 |
78
78
  | `7926e30955d2` | 3x | ← Back to goal | modules/hall-ui/public/goals.html:199, modules/hall-ui/public/goals.html:210, modules/hall-ui/public/goals.html:222 |
79
- | … | | _172 more in the JSON registry_ | |
79
+ | … | | _171 more in the JSON registry_ | |
80
80
 
81
81
  ## `builders-hall` — 1547 strings
82
82
 
@@ -1062,7 +1062,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1062
1062
  | `19b23f2cc45b` | certain | The grading panel could not run when this task was shipped, so no quality signal was recorded — an outage, not | `modules/hall-ui/public/task.js:413` |
1063
1063
  | `027e9420daa2` | certain | The headline lands, but the sub-line reads like a brochure. | `modules/hall-ui/public/studio.js:162` |
1064
1064
  | `9f45c63c9697` | certain | The kinds of work you prefer. Task suggestions lean toward your choices — pick one, several, or none. | `modules/hall-ui/public/settings.html:127` |
1065
- | `dbbcedba5f3c` | certain | The list | `modules/hall-ui/public/goal-map.html:99` |
1065
+ | `814eb6889339` | certain | The ledger | `modules/hall-ui/public/goal-map.html:99` |
1066
1066
  | `dbbcedba5f3c` | certain | The list | `modules/hall-ui/public/thinking.html:98` |
1067
1067
  | `a02d386fbc13` | certain | The map | `modules/hall-ui/public/atlas.html:45` |
1068
1068
  | `e1ce3766c6fe` | certain | The map has not been generated on this deploy yet. | `modules/hall-ui/public/atlas.js:416` |
@@ -1735,7 +1735,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1735
1735
  | `7667eb552781` | certain | {…}: {…}% ({…}/{…} checks) | `modules/status-ui/public/status.js:468` |
1736
1736
  | `6d0d64f10bd9` | certain | ‹ earlier page | `modules/status-ui/public/index.html:321` |
1737
1737
 
1738
- ## `landing` — 391 strings
1738
+ ## `landing` — 393 strings
1739
1739
 
1740
1740
  | id | conf | text | where |
1741
1741
  |---|---|---|---|
@@ -1758,7 +1758,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1758
1758
  | `afe83bbbd0d4` | certain | A non-profit, capture-resistant commons. | `modules/public-landing/public/index.html:900` |
1759
1759
  | `afe83bbbd0d4` | certain | A non-profit, capture-resistant commons. | `modules/public-landing/public/privacy.html:80` |
1760
1760
  | `afe83bbbd0d4` | certain | A non-profit, capture-resistant commons. | `modules/public-landing/public/projects.html:1406` |
1761
- | `afe83bbbd0d4` | certain | A non-profit, capture-resistant commons. | `modules/public-landing/public/terms.html:84` |
1761
+ | `afe83bbbd0d4` | certain | A non-profit, capture-resistant commons. | `modules/public-landing/public/terms.html:85` |
1762
1762
  | `2363998aa2be` | certain | A pair of bongo drums | `modules/public-landing/public/projects.html:1335` |
1763
1763
  | `407982c3d4ff` | certain | A project as a codebase, regardless of function. | `modules/public-landing/public/index.html:762` |
1764
1764
  | `c3504a900b0f` | certain | A project stood up from the hub runs on the platform's servers at your request. Any cost is shown before you c | `modules/public-landing/public/terms.html:61` |
@@ -1766,6 +1766,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1766
1766
  | `bc0a81fdaa8a` | certain | A small team | `modules/public-landing/public/projects.html:1104` |
1767
1767
  | `632b49062d74` | certain | AI agents claim tasks and ship the code. You set the direction and the gates. | `modules/public-landing/public/index.html:722` |
1768
1768
  | `245d6bdb5100` | certain | About your data | `modules/public-landing/public/contact.html:58` |
1769
+ | `9b02ec8a2e21` | certain | Accounts from before these terms. | `modules/public-landing/public/terms.html:71` |
1769
1770
  | `e7f2a4b93816` | certain | Adopt a repo I have | `modules/public-landing/public/projects.html:1173` |
1770
1771
  | `d07902ff5ee1` | certain | Adopting never overwrites your files: you get a conflict pre-flight first, nothing is written until you accept | `modules/public-landing/public/projects.html:1177` |
1771
1772
  | `6308ff336f73` | certain | Allow repo access | `modules/public-landing/public/projects.html:1186` |
@@ -1787,7 +1788,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1787
1788
  | `bd315dd71ea7` | certain | Built by agents, on Cloud&nbsp;Bongos. | `modules/public-landing/public/contact.html:71` |
1788
1789
  | `bd315dd71ea7` | certain | Built by agents, on Cloud&nbsp;Bongos. | `modules/public-landing/public/index.html:900` |
1789
1790
  | `bd315dd71ea7` | certain | Built by agents, on Cloud&nbsp;Bongos. | `modules/public-landing/public/privacy.html:80` |
1790
- | `bd315dd71ea7` | certain | Built by agents, on Cloud&nbsp;Bongos. | `modules/public-landing/public/terms.html:84` |
1791
+ | `bd315dd71ea7` | certain | Built by agents, on Cloud&nbsp;Bongos. | `modules/public-landing/public/terms.html:85` |
1791
1792
  | `78fd8d18ba64` | certain | Built on Cloud Bongos | `modules/public-landing/public/index.html:736` |
1792
1793
  | `8639cc7fcada` | certain | Buttons here ask the platform to act; each row reports only what was verified, and when. A standup keeps going | `modules/public-landing/public/projects.html:657` |
1793
1794
  | `101339c676b4` | certain | Buy microtransaction packages of code modules on our marketplace. | `modules/public-landing/public/index.html:866` |
@@ -1810,7 +1811,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1810
1811
  | `86e7699c0737` | certain | Disconnect from Bongos entirely | `modules/public-landing/public/projects.html:954` |
1811
1812
  | `86e7699c0737` | certain | Disconnect from Bongos entirely | `modules/public-landing/public/projects.html:962` |
1812
1813
  | `47d1558b17a3` | certain | Domain you own | `modules/public-landing/public/projects.html:1257` |
1813
- | `8d812912c392` | certain | Don't use {{productName}} to break the law, to attack this site or other people's projects, to mine, spam or o | `modules/public-landing/public/terms.html:73` |
1814
+ | `8d812912c392` | certain | Don't use {{productName}} to break the law, to attack this site or other people's projects, to mine, spam or o | `modules/public-landing/public/terms.html:74` |
1814
1815
  | `d919980d2ca5` | certain | Download our core code and protocols, and build instantly with your team. | `modules/public-landing/public/index.html:862` |
1815
1816
  | `18b6b56edc93` | certain | Each sign-in creates a session: a random token, whether it came from the browser or the command line, the brow | `modules/public-landing/public/privacy.html:54` |
1816
1817
  | `9a4a940d2a56` | certain | Emersonian Circles | `modules/public-landing/public/index.html:751` |
@@ -1823,7 +1824,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1823
1824
  | `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` |
1824
1825
  | `1b5a6cfc494c` | certain | Example World | `modules/public-landing/public/index.html:741` |
1825
1826
  | `7c8dcf228e70` | certain | Extras for this project | `modules/public-landing/public/projects.html:1134` |
1826
- | `2585087f4873` | certain | Fair use | `modules/public-landing/public/terms.html:72` |
1827
+ | `2585087f4873` | certain | Fair use | `modules/public-landing/public/terms.html:73` |
1827
1828
  | `fec69b6c7458` | certain | Filter by state | `modules/public-landing/public/projects.html:641` |
1828
1829
  | `0208e4bbba9c` | certain | Find a project | `modules/public-landing/public/index.html:892` |
1829
1830
  | `0208e4bbba9c` | certain | Find a project | `modules/public-landing/public/projects.html:412` |
@@ -1849,6 +1850,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1849
1850
  | `485c565b5745` | certain | How people join | `modules/public-landing/public/projects.html:801` |
1850
1851
  | `4b542b000afa` | certain | How this project is drawn: on the sky, in your list, at the top of this page and on its card. A planet is a | `modules/public-landing/public/projects.html:921` |
1851
1852
  | `9f31eaed8252` | certain | If you grant repository access while creating a project, that permission is used to create or adopt your repos | `modules/public-landing/public/privacy.html:55` |
1853
+ | `2a1b87d28a9c` | certain | If your account already existed when this version took effect, the platform accepted it on your behalf, rather | `modules/public-landing/public/terms.html:71` |
1852
1854
  | `607551ae732b` | certain | Invite a builder | `modules/public-landing/public/projects.html:894` |
1853
1855
  | `20786b02f47a` | certain | Invite builders | `modules/public-landing/public/projects.html:1305` |
1854
1856
  | `a1256030d879` | certain | Invite only | `modules/public-landing/public/projects.html:805` |
@@ -1891,7 +1893,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1891
1893
  | `d6314ddcc1d0` | certain | Open source | `modules/public-landing/public/index.html:900` |
1892
1894
  | `d6314ddcc1d0` | certain | Open source | `modules/public-landing/public/privacy.html:80` |
1893
1895
  | `d6314ddcc1d0` | certain | Open source | `modules/public-landing/public/projects.html:1406` |
1894
- | `d6314ddcc1d0` | certain | Open source | `modules/public-landing/public/terms.html:84` |
1896
+ | `d6314ddcc1d0` | certain | Open source | `modules/public-landing/public/terms.html:85` |
1895
1897
  | `275ca0d5ce65` | certain | Open source. | `modules/public-landing/public/index.html:862` |
1896
1898
  | `74cdcd87d1fa` | certain | Open the map | `modules/public-landing/public/index.html:755` |
1897
1899
  | `a226469fc575` | certain | Optional — invite people by GitHub username. Each one gets an invitation to accept from their own projects pag | `modules/public-landing/public/projects.html:1306` |
@@ -1908,9 +1910,9 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1908
1910
  | `edab0ed81a40` | certain | Project name | `modules/public-landing/public/projects.html:1043` |
1909
1911
  | `9685afcf24b1` | certain | Project type | `modules/public-landing/public/projects.html:1066` |
1910
1912
  | `b76fce69822b` | certain | Projects aren’t created from this instance — this is a project, not the platform that hosts them. | `modules/public-landing/public/projects.html:1398` |
1911
- | `351a61f190a6` | certain | Questions go through the | `modules/public-landing/public/terms.html:80` |
1913
+ | `351a61f190a6` | certain | Questions go through the | `modules/public-landing/public/terms.html:81` |
1912
1914
  | `664f5731ddc3` | certain | Read the source. | `modules/public-landing/public/privacy.html:75` |
1913
- | `664f5731ddc3` | certain | Read the source. | `modules/public-landing/public/terms.html:79` |
1915
+ | `664f5731ddc3` | certain | Read the source. | `modules/public-landing/public/terms.html:80` |
1914
1916
  | `45f7bea67776` | certain | Reading the project’s settings… | `modules/public-landing/public/projects.html:787` |
1915
1917
  | `45f7bea67776` | certain | Reading the project’s settings… | `modules/public-landing/public/projects.html:802` |
1916
1918
  | `45f7bea67776` | certain | Reading the project’s settings… | `modules/public-landing/public/projects.html:821` |
@@ -1979,7 +1981,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1979
1981
  | `fb416bf1a26b` | certain | The handle names your project on the platform — and its address comes with it. Once it stands up, a few GitHub | `modules/public-landing/public/projects.html:1245` |
1980
1982
  | `a954f0dce9a3` | certain | The platform | `modules/public-landing/public/contact.html:65` |
1981
1983
  | `4fd8f5746cc5` | certain | The platform is run as a non-profit, capture-resistant commons. | `modules/public-landing/public/terms.html:50` |
1982
- | `198f1eac5a95` | certain | The platform stores the date you accepted these terms, and which version, on your account. It is written only | `modules/public-landing/public/terms.html:70` |
1984
+ | `666291db6ac3` | certain | The platform stores the date you accepted these terms, and which version, on your account. It is written by si | `modules/public-landing/public/terms.html:70` |
1983
1985
  | `20fcebaa85c4` | certain | The project hub needs JavaScript — the map, your projects, and starting a new one all live here. You can read | `modules/public-landing/public/projects.html:472` |
1984
1986
  | `4a740b5afe73` | certain | The project map | `modules/public-landing/public/projects.html:482` |
1985
1987
  | `345fec12e5d8` | certain | The repository | `modules/public-landing/public/contact.html:50` |
@@ -1988,13 +1990,13 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1988
1990
  | `62377d81c52c` | certain | The six most recent, straight from the ledger. | `modules/public-landing/public/index.html:798` |
1989
1991
  | `2b193468bbb5` | certain | These are the same steps however a project is created — nothing here is special to this page. | `modules/public-landing/public/projects.html:1326` |
1990
1992
  | `02e596cc4569` | certain | These numbers describe; they do not govern. | `modules/public-landing/public/terms.html:67` |
1991
- | `ea7de26ce2f0` | certain | These terms ship with the software and change with it. The version served on this page is the one that applies | `modules/public-landing/public/terms.html:79` |
1993
+ | `ea7de26ce2f0` | certain | These terms ship with the software and change with it. The version served on this page is the one that applies | `modules/public-landing/public/terms.html:80` |
1992
1994
  | `e6c859147ba4` | certain | This cannot be undone. To stop the project and keep everything, use | `modules/public-landing/public/projects.html:968` |
1993
1995
  | `1eff94c94b66` | certain | This files the request; the control plane does the real standup and nothing touches servers from this page. Yo | `modules/public-landing/public/projects.html:1284` |
1994
1996
  | `d83b739afb1e` | certain | This is a project’s management page — it answers only to the person who owns it. Sign in with GitHub to open y | `modules/public-landing/public/projects.html:691` |
1995
1997
  | `11c244aec5c3` | certain | This statement describes the software as it ships and changes when the software does. Revised August 2026. | `modules/public-landing/public/privacy.html:76` |
1996
1998
  | `e34d363aa4a4` | certain | To have your account records, or a torn-down project's data, cleared for good, ask the owner through either do | `modules/public-landing/public/contact.html:59` |
1997
- | `1652025c0635` | certain | To the extent the law allows, the people running {{productName}} are not liable for loss arising from its use. | `modules/public-landing/public/terms.html:76` |
1999
+ | `1652025c0635` | certain | To the extent the law allows, the people running {{productName}} are not liable for loss arising from its use. | `modules/public-landing/public/terms.html:77` |
1998
2000
  | `9b514fce13d7` | certain | Torn down | `modules/public-landing/public/projects.html:646` |
1999
2001
  | `b1dd149424ea` | certain | Turn the filter off to see what everyone else is building — or start your own. | `modules/public-landing/public/projects.html:508` |
2000
2002
  | `6ca9f17bdfb5` | certain | Two doors. Both are public, and both are how {{productName}} itself works day to day. | `modules/public-landing/public/contact.html:47` |
@@ -2062,7 +2064,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
2062
2064
  | `50d4abf343dd` | certain | buy you: anyone building on the project — you, a teammate, or an AI builder writing code — can see the exact n | `modules/public-landing/public/projects.html:882` |
2063
2065
  | `2735c2eb8bc6` | certain | click a project | `modules/public-landing/public/projects.html:511` |
2064
2066
  | `c9435fd3a8c0` | certain | contact page | `modules/public-landing/public/privacy.html:72` |
2065
- | `c9435fd3a8c0` | certain | contact page | `modules/public-landing/public/terms.html:80` |
2067
+ | `c9435fd3a8c0` | certain | contact page | `modules/public-landing/public/terms.html:81` |
2066
2068
  | `cce8a45fd1ad` | certain | erase the project: it stays in your list marked | `modules/public-landing/public/projects.html:954` |
2067
2069
  | `b55e0a82615f` | certain | every project | `modules/public-landing/public/projects.html:526` |
2068
2070
  | `94a3462373d2` | certain | five questions and a home | `modules/public-landing/public/index.html:692` |
@@ -2080,7 +2082,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
2080
2082
  | `54b2ecb33701` | certain | or enter it manually | `modules/public-landing/public/projects.html:1187` |
2081
2083
  | `af9fcc3a4124` | certain | paid only once it lands | `modules/public-landing/public/index.html:788` |
2082
2084
  | `7a053a51ee5f` | certain | privacy page | `modules/public-landing/public/contact.html:59` |
2083
- | `7a053a51ee5f` | certain | privacy page | `modules/public-landing/public/terms.html:80` |
2085
+ | `7a053a51ee5f` | certain | privacy page | `modules/public-landing/public/terms.html:81` |
2084
2086
  | `370e51d318b8` | certain | project: its own repository, its own home on the web, and a hall of AI builders who do the building. You set t | `modules/public-landing/public/projects.html:1000` |
2085
2087
  | `646b1e72622d` | certain | read by a panel | `modules/public-landing/public/index.html:778` |
2086
2088
  | `cb0b8873d563` | certain | repo — projects here are open by design. Want private code? Create the repo yourself on GitHub and “adopt” it | `modules/public-landing/public/projects.html:1205` |
@@ -3,11 +3,11 @@
3
3
  "generator": "scripts/gds/copy-inventory.js",
4
4
  "goal": 1000074,
5
5
  "counts": {
6
- "strings": 2038,
7
- "unique_ids": 1739,
8
- "certain": 2038,
6
+ "strings": 2040,
7
+ "unique_ids": 1742,
8
+ "certain": 2040,
9
9
  "heuristic": 0,
10
- "duplicate_ids": 212
10
+ "duplicate_ids": 211
11
11
  },
12
12
  "surfaces": {
13
13
  "builders-hall": {
@@ -23,7 +23,7 @@
23
23
  "landing": {
24
24
  "at": "modules/public-landing/public",
25
25
  "files": 5,
26
- "strings": 391
26
+ "strings": 393
27
27
  }
28
28
  },
29
29
  "blind_spots": [
@@ -153,7 +153,7 @@
153
153
  "modules/public-landing/public/index.html:900",
154
154
  "modules/public-landing/public/privacy.html:80",
155
155
  "modules/public-landing/public/projects.html:1406",
156
- "modules/public-landing/public/terms.html:84"
156
+ "modules/public-landing/public/terms.html:85"
157
157
  ]
158
158
  },
159
159
  {
@@ -179,7 +179,7 @@
179
179
  "modules/public-landing/public/index.html:900",
180
180
  "modules/public-landing/public/privacy.html:80",
181
181
  "modules/public-landing/public/projects.html:1406",
182
- "modules/public-landing/public/terms.html:84"
182
+ "modules/public-landing/public/terms.html:85"
183
183
  ]
184
184
  },
185
185
  {
@@ -216,7 +216,7 @@
216
216
  "modules/public-landing/public/contact.html:71",
217
217
  "modules/public-landing/public/index.html:900",
218
218
  "modules/public-landing/public/privacy.html:80",
219
- "modules/public-landing/public/terms.html:84"
219
+ "modules/public-landing/public/terms.html:85"
220
220
  ]
221
221
  },
222
222
  {
@@ -1412,7 +1412,7 @@
1412
1412
  "occurrences": 2,
1413
1413
  "at": [
1414
1414
  "modules/public-landing/public/privacy.html:75",
1415
- "modules/public-landing/public/terms.html:79"
1415
+ "modules/public-landing/public/terms.html:80"
1416
1416
  ]
1417
1417
  },
1418
1418
  {
@@ -1665,16 +1665,6 @@
1665
1665
  "modules/hall-ui/public/thinking.html:123"
1666
1666
  ]
1667
1667
  },
1668
- {
1669
- "id": "dbbcedba5f3c",
1670
- "surface": "builders-hall",
1671
- "text": "The list",
1672
- "occurrences": 2,
1673
- "at": [
1674
- "modules/hall-ui/public/goal-map.html:99",
1675
- "modules/hall-ui/public/thinking.html:98"
1676
- ]
1677
- },
1678
1668
  {
1679
1669
  "id": "7f03838faf0c",
1680
1670
  "surface": "builders-hall",
@@ -1842,7 +1832,7 @@
1842
1832
  "occurrences": 2,
1843
1833
  "at": [
1844
1834
  "modules/public-landing/public/privacy.html:72",
1845
- "modules/public-landing/public/terms.html:80"
1835
+ "modules/public-landing/public/terms.html:81"
1846
1836
  ]
1847
1837
  },
1848
1838
  {
@@ -1972,7 +1962,7 @@
1972
1962
  "occurrences": 2,
1973
1963
  "at": [
1974
1964
  "modules/public-landing/public/contact.html:59",
1975
- "modules/public-landing/public/terms.html:80"
1965
+ "modules/public-landing/public/terms.html:81"
1976
1966
  ]
1977
1967
  },
1978
1968
  {
@@ -11068,9 +11058,9 @@
11068
11058
  "confidence": "certain"
11069
11059
  },
11070
11060
  {
11071
- "id": "dbbcedba5f3c",
11061
+ "id": "814eb6889339",
11072
11062
  "surface": "builders-hall",
11073
- "text": "The list",
11063
+ "text": "The ledger",
11074
11064
  "file": "modules/hall-ui/public/goal-map.html",
11075
11065
  "line": 99,
11076
11066
  "origin": "html-attr:aria-label",
@@ -16346,7 +16336,7 @@
16346
16336
  "surface": "landing",
16347
16337
  "text": "A non-profit, capture-resistant commons.",
16348
16338
  "file": "modules/public-landing/public/terms.html",
16349
- "line": 84,
16339
+ "line": 85,
16350
16340
  "origin": "html-text",
16351
16341
  "confidence": "certain"
16352
16342
  },
@@ -16413,6 +16403,15 @@
16413
16403
  "origin": "html-text",
16414
16404
  "confidence": "certain"
16415
16405
  },
16406
+ {
16407
+ "id": "9b02ec8a2e21",
16408
+ "surface": "landing",
16409
+ "text": "Accounts from before these terms.",
16410
+ "file": "modules/public-landing/public/terms.html",
16411
+ "line": 71,
16412
+ "origin": "html-text",
16413
+ "confidence": "certain"
16414
+ },
16416
16415
  {
16417
16416
  "id": "e7f2a4b93816",
16418
16417
  "surface": "landing",
@@ -16607,7 +16606,7 @@
16607
16606
  "surface": "landing",
16608
16607
  "text": "Built by agents, on Cloud&nbsp;Bongos.",
16609
16608
  "file": "modules/public-landing/public/terms.html",
16610
- "line": 84,
16609
+ "line": 85,
16611
16610
  "origin": "html-text",
16612
16611
  "confidence": "certain"
16613
16612
  },
@@ -16814,7 +16813,7 @@
16814
16813
  "surface": "landing",
16815
16814
  "text": "Don't use {{productName}} to break the law, to attack this site or other people's projects, to mine, spam or otherwise abuse hosted resources, or to harass other builders. The owner may deactivate a builder or take a project offline for breaking these, and may set further house rules inside the hall.",
16816
16815
  "file": "modules/public-landing/public/terms.html",
16817
- "line": 73,
16816
+ "line": 74,
16818
16817
  "origin": "html-text",
16819
16818
  "confidence": "certain"
16820
16819
  },
@@ -16931,7 +16930,7 @@
16931
16930
  "surface": "landing",
16932
16931
  "text": "Fair use",
16933
16932
  "file": "modules/public-landing/public/terms.html",
16934
- "line": 72,
16933
+ "line": 73,
16935
16934
  "origin": "html-text",
16936
16935
  "confidence": "certain"
16937
16936
  },
@@ -17160,6 +17159,15 @@
17160
17159
  "origin": "html-text",
17161
17160
  "confidence": "certain"
17162
17161
  },
17162
+ {
17163
+ "id": "2a1b87d28a9c",
17164
+ "surface": "landing",
17165
+ "text": "If your account already existed when this version took effect, the platform accepted it on your behalf, rather than waiting for you to sign in, and dated it the day that was done. The record marks that acceptance as grandfathered, so it is never mistaken for one you gave, and your own acceptance replaces it the next time you sign in.",
17166
+ "file": "modules/public-landing/public/terms.html",
17167
+ "line": 71,
17168
+ "origin": "html-text",
17169
+ "confidence": "certain"
17170
+ },
17163
17171
  {
17164
17172
  "id": "607551ae732b",
17165
17173
  "surface": "landing",
@@ -17543,7 +17551,7 @@
17543
17551
  "surface": "landing",
17544
17552
  "text": "Open source",
17545
17553
  "file": "modules/public-landing/public/terms.html",
17546
- "line": 84,
17554
+ "line": 85,
17547
17555
  "origin": "html-text",
17548
17556
  "confidence": "certain"
17549
17557
  },
@@ -17696,7 +17704,7 @@
17696
17704
  "surface": "landing",
17697
17705
  "text": "Questions go through the",
17698
17706
  "file": "modules/public-landing/public/terms.html",
17699
- "line": 80,
17707
+ "line": 81,
17700
17708
  "origin": "html-text",
17701
17709
  "confidence": "certain"
17702
17710
  },
@@ -17714,7 +17722,7 @@
17714
17722
  "surface": "landing",
17715
17723
  "text": "Read the source.",
17716
17724
  "file": "modules/public-landing/public/terms.html",
17717
- "line": 79,
17725
+ "line": 80,
17718
17726
  "origin": "html-text",
17719
17727
  "confidence": "certain"
17720
17728
  },
@@ -18331,9 +18339,9 @@
18331
18339
  "confidence": "certain"
18332
18340
  },
18333
18341
  {
18334
- "id": "198f1eac5a95",
18342
+ "id": "666291db6ac3",
18335
18343
  "surface": "landing",
18336
- "text": "The platform stores the date you accepted these terms, and which version, on your account. It is written only by signing in here, and only once &mdash; signing in again does not change the original date. This is version",
18344
+ "text": "The platform stores the date you accepted these terms, and which version, on your account. It is written by signing in here, and only once &mdash; signing in again does not change the original date. This is version",
18337
18345
  "file": "modules/public-landing/public/terms.html",
18338
18346
  "line": 70,
18339
18347
  "origin": "html-text",
@@ -18416,7 +18424,7 @@
18416
18424
  "surface": "landing",
18417
18425
  "text": "These terms ship with the software and change with it. The version served on this page is the one that applies; the repository keeps the history.",
18418
18426
  "file": "modules/public-landing/public/terms.html",
18419
- "line": 79,
18427
+ "line": 80,
18420
18428
  "origin": "html-text",
18421
18429
  "confidence": "certain"
18422
18430
  },
@@ -18470,7 +18478,7 @@
18470
18478
  "surface": "landing",
18471
18479
  "text": "To the extent the law allows, the people running {{productName}} are not liable for loss arising from its use. It is free software, offered without warranty, as the AGPL-3.0 states.",
18472
18480
  "file": "modules/public-landing/public/terms.html",
18473
- "line": 76,
18481
+ "line": 77,
18474
18482
  "origin": "html-text",
18475
18483
  "confidence": "certain"
18476
18484
  },
@@ -19082,7 +19090,7 @@
19082
19090
  "surface": "landing",
19083
19091
  "text": "contact page",
19084
19092
  "file": "modules/public-landing/public/terms.html",
19085
- "line": 80,
19093
+ "line": 81,
19086
19094
  "origin": "html-text",
19087
19095
  "confidence": "certain"
19088
19096
  },
@@ -19244,7 +19252,7 @@
19244
19252
  "surface": "landing",
19245
19253
  "text": "privacy page",
19246
19254
  "file": "modules/public-landing/public/terms.html",
19247
- "line": 80,
19255
+ "line": 81,
19248
19256
  "origin": "html-text",
19249
19257
  "confidence": "certain"
19250
19258
  },
@@ -2526,6 +2526,10 @@ is load-bearing: the script throws rather than guess if it is missing, and
2526
2526
  1.19.1023 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2527
2527
  landed since 1.19.1022 with no explicit bump. run 36178875275. (task 1002620)
2528
2528
  1.19.1024 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2529
- landed since 1.19.1023 with no explicit bump. run 36182843374. (task 1002620)
2529
+ landed since 1.19.1023 with no explicit bump. run 36183325302. (task 1002620)
2530
+ 1.19.1025 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2531
+ landed since 1.19.1024 with no explicit bump. run 36185386905. (task 1002620)
2532
+ 1.19.1026 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2533
+ landed since 1.19.1025 with no explicit bump. run 36186644421. (task 1002620)
2530
2534
  ---------------------------------------------------------------------------
2531
2535
  ```