@bongos/core 1.19.1023 → 1.19.1025

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 (37) hide show
  1. package/.bongos-core.json +55 -40
  2. package/clients/bongos-client/README.md +1 -1
  3. package/clients/bongos-client/bongos-client.global.js +2 -0
  4. package/clients/bongos-client/index.cjs +2 -0
  5. package/clients/bongos-client/index.d.ts +4 -1
  6. package/clients/bongos-client/index.mjs +2 -0
  7. package/docs/adr/0213-platform-terms-acceptance-is-the-hubs-own-witness.md +2 -0
  8. package/docs/api/openapi.json +58 -4
  9. package/docs/api-reference.md +4 -3
  10. package/docs/copy-inventory.md +18 -16
  11. package/docs/copy-registry.json +43 -25
  12. package/docs/module-api-changelog.md +4 -0
  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/people.html +1 -1
  16. package/modules/onboarding/routes/access-requests.js +62 -11
  17. package/modules/platform-identity/connection-suggestions.js +1 -1
  18. package/modules/platform-identity/migrations/platform_identity_024_terms_grandfathered.sql +68 -0
  19. package/modules/platform-identity/terms-acceptance.js +34 -14
  20. package/modules/public-landing/public/terms.html +2 -1
  21. package/package-lock.json +2 -2
  22. package/package.json +1 -1
  23. package/scripts/gds/run-unit-tests.js +5 -0
  24. package/src/bongos/auth-github.js +4 -2
  25. package/src/bongos/db-kernel.js +1 -1
  26. package/src/module-api.js +1 -1
  27. package/tests/access_requests_invite.mjs +81 -4
  28. package/tests/application_lifecycle.mjs +174 -6
  29. package/tests/auth_inactive_builder.mjs +84 -0
  30. package/tests/connection_suggestions.mjs +1 -1
  31. package/tests/connections_api.mjs +1 -1
  32. package/tests/handle_machinery.mjs +2 -0
  33. package/tests/people_name_only.mjs +2 -1
  34. package/tests/profile_connections_ui.mjs +2 -2
  35. package/tests/profile_rollup_consent.mjs +3 -0
  36. package/tests/terms_acceptance.mjs +264 -14
  37. package/tests/terms_grandfather_db.mjs +144 -0
package/.bongos-core.json CHANGED
@@ -2,22 +2,22 @@
2
2
  "artifact": "bongos-core",
3
3
  "manifest_schema": 1,
4
4
  "generator": "scripts/gds/package-core.js",
5
- "core_version": "1.19.1023",
6
- "core_contract": "1.19.1023",
7
- "source_commit": "f1709fb9168ad999a9e19c281031097e2c5e7d66",
5
+ "core_version": "1.19.1025",
6
+ "core_contract": "1.19.1025",
7
+ "source_commit": "e6dd17dfbd6585712f80a1bbb7e194cf54542795",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-09-25T19:19:01.574Z",
9
+ "built_at": "2026-09-25T20:23:11.014Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 529,
13
13
  "agent_docs_stubbed": 26,
14
- "functional_verbatim": 2443,
14
+ "functional_verbatim": 2446,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 2998,
20
- "tree_sha256": "764165bfe692a37fd3627ba40e362a91f07442b09312055bb843444b529412aa",
19
+ "file_count": 3001,
20
+ "tree_sha256": "ba33f498c14c47e5a4a4541b8045beb0ab60673a9e46351106ee1361c284b179",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -352,12 +352,12 @@
352
352
  {
353
353
  "path": "clients/bongos-client/README.md",
354
354
  "mode": "0000644",
355
- "sha256": "6a43336383cc459524609f6dee6fa8dc5af5f53393869ca09964ab37bda2a9f9"
355
+ "sha256": "d4c80c7f38f3f8a86fb15941c8c8c15810fb692223492eec77853c61a6d783d8"
356
356
  },
357
357
  {
358
358
  "path": "clients/bongos-client/bongos-client.global.js",
359
359
  "mode": "0000644",
360
- "sha256": "b63d94b37df14283ea04512e281163c1f027995c08b5f052aa2f062d7632a686"
360
+ "sha256": "03d3f40e2e64dcf322de71b3720b37c890a638558d1741cb2858cf110ee15b5d"
361
361
  },
362
362
  {
363
363
  "path": "clients/bongos-client/examples/hello-world.mjs",
@@ -367,17 +367,17 @@
367
367
  {
368
368
  "path": "clients/bongos-client/index.cjs",
369
369
  "mode": "0000644",
370
- "sha256": "01e49d4c9dd29cd7c312b637e013dcbb69e9bb0f12aee3ff6b5aaf5caeb1539a"
370
+ "sha256": "8df1123cbc8b830697413b873bfdfecde20664433429ee2d106aacdb5eb7e415"
371
371
  },
372
372
  {
373
373
  "path": "clients/bongos-client/index.d.ts",
374
374
  "mode": "0000644",
375
- "sha256": "0ccdf87aa5ce77f34dde4ed9d7a3f9ab38aee7be4c3d81f6ab64311cc68feefc"
375
+ "sha256": "a0c55c50fe57c803c704e7bf1d1256ee108c6a9f0c8182ff3c820e2b5d1cba4c"
376
376
  },
377
377
  {
378
378
  "path": "clients/bongos-client/index.mjs",
379
379
  "mode": "0000644",
380
- "sha256": "29f5d849eb791886672584d5f258b306a237c774b83b33b68e7ad4990cb68ead"
380
+ "sha256": "db6d60ae1bcaaa086ccb7977fcc76a256ce662eba0632b25cc748535223eafe0"
381
381
  },
382
382
  {
383
383
  "path": "clients/bongos-client/package.json",
@@ -1562,7 +1562,7 @@
1562
1562
  {
1563
1563
  "path": "docs/adr/0213-platform-terms-acceptance-is-the-hubs-own-witness.md",
1564
1564
  "mode": "0000644",
1565
- "sha256": "6c30a59cb4b4b5ed378e7103e1cdd8ecbdf135e4a1d51ce8a11787b40d4ec159"
1565
+ "sha256": "039edd287f0aeb2d64e85bddad1c83436357b77ce087d1dbd5f6d19885303f75"
1566
1566
  },
1567
1567
  {
1568
1568
  "path": "docs/adr/0214-canonical-profile-url-one-resolver-dark-until-the-page-exists.md",
@@ -2192,12 +2192,12 @@
2192
2192
  {
2193
2193
  "path": "docs/api-reference.md",
2194
2194
  "mode": "0000644",
2195
- "sha256": "cedc612f059cc0923f438b9836d7b90e249aca8245b8864dbda094752df258a0"
2195
+ "sha256": "609fbffb855fff4a18e58ab3bdac8090605b3679efb893b363c0f1cace9aa8e5"
2196
2196
  },
2197
2197
  {
2198
2198
  "path": "docs/api/openapi.json",
2199
2199
  "mode": "0000644",
2200
- "sha256": "3f65db9aa5ef67ceed4ecca08e083208a44413e7e69363f26ca60ea48b905005"
2200
+ "sha256": "039b34432475e7f2044c9ef4926ec3f54de684e36b9e0a37544151b2c495b91f"
2201
2201
  },
2202
2202
  {
2203
2203
  "path": "docs/architecture.md",
@@ -2222,12 +2222,12 @@
2222
2222
  {
2223
2223
  "path": "docs/copy-inventory.md",
2224
2224
  "mode": "0000644",
2225
- "sha256": "5226255c04e9a3207de9e4cf9712cdcaf2a3fde799d76d8ed768497a271ad91b"
2225
+ "sha256": "822455e5a92b4577b42d44f16dcf2c4aee55256672680897b71df37e76cbe543"
2226
2226
  },
2227
2227
  {
2228
2228
  "path": "docs/copy-registry.json",
2229
2229
  "mode": "0000644",
2230
- "sha256": "bf7384ef44efc40d16be639400157640c5f1a4dc746bf32bb1f80b43004ceed9"
2230
+ "sha256": "c4cbe7f0aeaec884327a788d14737c626400c224f5e1091533597b3981cb0129"
2231
2231
  },
2232
2232
  {
2233
2233
  "path": "docs/design/apex-pass-2-direction.md",
@@ -2757,7 +2757,7 @@
2757
2757
  {
2758
2758
  "path": "docs/module-api-changelog.md",
2759
2759
  "mode": "0000644",
2760
- "sha256": "a0b4b728b9f072ef594daec6b954009202a8ed79341de077d8a7f447ebbbb7d7"
2760
+ "sha256": "c8291c65538266b70d72d2fa410a20061430d526e2efdcd2f8d5617c38ea8cc4"
2761
2761
  },
2762
2762
  {
2763
2763
  "path": "docs/modules-contract.md",
@@ -3884,6 +3884,11 @@
3884
3884
  "mode": "0000644",
3885
3885
  "sha256": "040de8cddf1a8740ac7e97fb35572e56494a5a3b51ce8873887f71759f6a3b9d"
3886
3886
  },
3887
+ {
3888
+ "path": "migrations/core_255_access_requests_invite_kind.sql",
3889
+ "mode": "0000644",
3890
+ "sha256": "14924b5db9c9620e17a4cd5baa4c7821aa97db3d11711831faeb45fbfb035213"
3891
+ },
3887
3892
  {
3888
3893
  "path": "modules/agents/CLAUDE.md",
3889
3894
  "mode": "0000644",
@@ -4422,7 +4427,7 @@
4422
4427
  {
4423
4428
  "path": "modules/government/catalog.js",
4424
4429
  "mode": "0000644",
4425
- "sha256": "65ff329fd00c94ed4571d852079515e173339ee070d5489ce10d5cabe219b20b"
4430
+ "sha256": "6d1895c276755d7a3cbec780f35e20ee9cc6cfee5557a48142bc5dcffb9d3f19"
4426
4431
  },
4427
4432
  {
4428
4433
  "path": "modules/government/config.js",
@@ -5207,7 +5212,7 @@
5207
5212
  {
5208
5213
  "path": "modules/hall-ui/public/people.html",
5209
5214
  "mode": "0000644",
5210
- "sha256": "4da8ca7dc9321f3d7303332e78ec9caeb6ea65a71fa670b20f593874514585ac"
5215
+ "sha256": "531b5b44da9f8310cdac68f7028651b9faba93537f46a7d62d2d91b534cb60ee"
5211
5216
  },
5212
5217
  {
5213
5218
  "path": "modules/hall-ui/public/people.js",
@@ -6427,7 +6432,7 @@
6427
6432
  {
6428
6433
  "path": "modules/onboarding/routes/access-requests.js",
6429
6434
  "mode": "0000644",
6430
- "sha256": "301c45e4f72024c7b1507245a9fccf4388224bb544ad747712c69155d41d1861"
6435
+ "sha256": "b2f786d816222879ec37670688c0a291c81a9552584b5045616eb4f3ead7fe33"
6431
6436
  },
6432
6437
  {
6433
6438
  "path": "modules/onboarding/routes/onboarding.js",
@@ -6472,7 +6477,7 @@
6472
6477
  {
6473
6478
  "path": "modules/platform-identity/connection-suggestions.js",
6474
6479
  "mode": "0000644",
6475
- "sha256": "73beb598013b1ddd6364b2c97f1b346505c9c909934d8b3b9fc3b3117ad09786"
6480
+ "sha256": "4224c3706dfdebe63ddf769a056c5039707218e7502b8409cd2e882da702c9c5"
6476
6481
  },
6477
6482
  {
6478
6483
  "path": "modules/platform-identity/connections.js",
@@ -6614,6 +6619,11 @@
6614
6619
  "mode": "0000644",
6615
6620
  "sha256": "f119d0d4f8775e2ec1e0e30702ba9564d7f4f712853751e2e66bb3c103cf1da4"
6616
6621
  },
6622
+ {
6623
+ "path": "modules/platform-identity/migrations/platform_identity_024_terms_grandfathered.sql",
6624
+ "mode": "0000644",
6625
+ "sha256": "1a1a2a8861a11e93da73db38362353409edf988fdb7b1c025c1030acb29da937"
6626
+ },
6617
6627
  {
6618
6628
  "path": "modules/platform-identity/module.json",
6619
6629
  "mode": "0000644",
@@ -6717,7 +6727,7 @@
6717
6727
  {
6718
6728
  "path": "modules/platform-identity/terms-acceptance.js",
6719
6729
  "mode": "0000644",
6720
- "sha256": "85aa2a81a80d09031282926bc5f63cef25e85630233fcbd7899ba783b2a62d59"
6730
+ "sha256": "e72b73f528149d438150e26c02e5b4b8d14a4b03941c5e917c5775506dcb0e0b"
6721
6731
  },
6722
6732
  {
6723
6733
  "path": "modules/platform-identity/tests/activity-snapshots.mjs",
@@ -7557,7 +7567,7 @@
7557
7567
  {
7558
7568
  "path": "modules/public-landing/public/terms.html",
7559
7569
  "mode": "0000644",
7560
- "sha256": "b39a1dc189c251abe3cc60dfb2d5fb997f1b51e577d8250460cb48522f857d80"
7570
+ "sha256": "440fb5159b45e03c5743c93068a54f81ad1a67e9d863a32b15a0cc554024585a"
7561
7571
  },
7562
7572
  {
7563
7573
  "path": "modules/security/CLAUDE.md",
@@ -8312,12 +8322,12 @@
8312
8322
  {
8313
8323
  "path": "package-lock.json",
8314
8324
  "mode": "0000644",
8315
- "sha256": "37992bffa6073d8ed94d8e960640e73f6bd128bb24787b50253a1e393b8c91b0"
8325
+ "sha256": "3eb67ddb7f1adcb7dec12c3d29810c79d16d0e8b80016c77877585f249f0dfce"
8316
8326
  },
8317
8327
  {
8318
8328
  "path": "package.json",
8319
8329
  "mode": "0000644",
8320
- "sha256": "97df5c02b04233580f36c9bd8c0bff0be8d0984b148b05ef45f8039ad4a50600"
8330
+ "sha256": "bf055e4e0c223b3a93207d5404f9e9d2b90542aad0186708ac4cc1f17efb8d7b"
8321
8331
  },
8322
8332
  {
8323
8333
  "path": "public-docs/index.html",
@@ -9442,7 +9452,7 @@
9442
9452
  {
9443
9453
  "path": "scripts/gds/run-unit-tests.js",
9444
9454
  "mode": "0000644",
9445
- "sha256": "42c429a77230af4722a5a5bf23d8a75582e792c5e8c9df753327aad4423300b7"
9455
+ "sha256": "a10caf1133a199539cb2073e9982ca5c281309e486249bed15949e7b2e7d7b82"
9446
9456
  },
9447
9457
  {
9448
9458
  "path": "scripts/gds/runner-drift.js",
@@ -10067,7 +10077,7 @@
10067
10077
  {
10068
10078
  "path": "src/bongos/auth-github.js",
10069
10079
  "mode": "0000644",
10070
- "sha256": "e2afb2d5f5459ed307be4e6e2d57cbd283b97794f8d1a99f4df5673000270681"
10080
+ "sha256": "9d556b0c6b4891be1aee578daf7bd62347f1dc77fe20af7ffcaeb9f61845c141"
10071
10081
  },
10072
10082
  {
10073
10083
  "path": "src/bongos/auth-idp.js",
@@ -10097,7 +10107,7 @@
10097
10107
  {
10098
10108
  "path": "src/bongos/db-kernel.js",
10099
10109
  "mode": "0000644",
10100
- "sha256": "dd16328ac569aa8c6af09b2700957634e2c6d368d291b015a74a8dc452dc340a"
10110
+ "sha256": "0e346143160d09d1c9bb5e1977551222bf8d33dce9a1880537b17b1d714f719e"
10101
10111
  },
10102
10112
  {
10103
10113
  "path": "src/bongos/db.js",
@@ -10362,7 +10372,7 @@
10362
10372
  {
10363
10373
  "path": "src/module-api.js",
10364
10374
  "mode": "0000644",
10365
- "sha256": "97d9786da4519b10d5025fded13c1e8c765f1510f1c7df3ba101f809bb95639c"
10375
+ "sha256": "daef476e1d1b35682eb926967b1ed39b6fe18308ebca71c6111a87ac077f5f1a"
10366
10376
  },
10367
10377
  {
10368
10378
  "path": "src/module-loader/catalog.js",
@@ -10437,7 +10447,7 @@
10437
10447
  {
10438
10448
  "path": "tests/access_requests_invite.mjs",
10439
10449
  "mode": "0000644",
10440
- "sha256": "7229451a9a9cb74049b7fea808458423d8a2754c213e6974593811cd1b4322b1"
10450
+ "sha256": "4148ce39a074fa16cb6360027a7fd6c1ea9b26cea6423209591ee45f23ec894f"
10441
10451
  },
10442
10452
  {
10443
10453
  "path": "tests/accessibility_replay.mjs",
@@ -10637,7 +10647,7 @@
10637
10647
  {
10638
10648
  "path": "tests/application_lifecycle.mjs",
10639
10649
  "mode": "0000644",
10640
- "sha256": "975389846058a123344a6cd56d2355b606c86e2ce59a48981782f61204090096"
10650
+ "sha256": "c13c0a4b5244b72ec093a2d80029bc3b1ceb8f0828aaad69274054be9e927afe"
10641
10651
  },
10642
10652
  {
10643
10653
  "path": "tests/architect.mjs",
@@ -10742,7 +10752,7 @@
10742
10752
  {
10743
10753
  "path": "tests/auth_inactive_builder.mjs",
10744
10754
  "mode": "0000644",
10745
- "sha256": "c394d1ec296d556c35f5ce8158bcc5d355774cbd81160349dee5a495a4a6d6ab"
10755
+ "sha256": "521e4175ec619d578fe18dc23395e384f9f35be747918ed04e7d479cb0166da8"
10746
10756
  },
10747
10757
  {
10748
10758
  "path": "tests/auth_page_gate.mjs",
@@ -11252,12 +11262,12 @@
11252
11262
  {
11253
11263
  "path": "tests/connection_suggestions.mjs",
11254
11264
  "mode": "0000644",
11255
- "sha256": "c85a26355952c1d201838dbe569727c54d81d79d62d9e9d784182bc60fb743f7"
11265
+ "sha256": "598201479b8f32a809da06c4381ed842ee981cb67ef829bf9616a831be506e6d"
11256
11266
  },
11257
11267
  {
11258
11268
  "path": "tests/connections_api.mjs",
11259
11269
  "mode": "0000644",
11260
- "sha256": "377a1cb8cc9eaeeb86bd033a02a8f7ecfd499ceb0d09718533a3a7bb4ed014ec"
11270
+ "sha256": "691eab40b511c32a25dbc9941912128bb4311359276cec3aefaa0c24dfa8409a"
11261
11271
  },
11262
11272
  {
11263
11273
  "path": "tests/connections_ownership.mjs",
@@ -12417,7 +12427,7 @@
12417
12427
  {
12418
12428
  "path": "tests/handle_machinery.mjs",
12419
12429
  "mode": "0000644",
12420
- "sha256": "209c1ebf3e57c6fed05eda28ef57033c7ed7da3e1a41670fc9aae05497b29698"
12430
+ "sha256": "ca7fbfcca238b4ffed576ca1b3fca5d848f4d9d3eab8321353325d54ff505810"
12421
12431
  },
12422
12432
  {
12423
12433
  "path": "tests/help_requests.mjs",
@@ -13327,7 +13337,7 @@
13327
13337
  {
13328
13338
  "path": "tests/people_name_only.mjs",
13329
13339
  "mode": "0000644",
13330
- "sha256": "a94562e7680e7153b065fa5b152e13d9880de477e7e9f2a4c9b8de0224266ead"
13340
+ "sha256": "52885d21c83ba02f0eece097529df861ac2e01c8def1a77d7e55a07638cc076d"
13331
13341
  },
13332
13342
  {
13333
13343
  "path": "tests/permission_path.mjs",
@@ -13407,7 +13417,7 @@
13407
13417
  {
13408
13418
  "path": "tests/profile_connections_ui.mjs",
13409
13419
  "mode": "0000644",
13410
- "sha256": "d2c415317244457f575c985fff3ba2645fc5da97253357eaecd373dba33b14f9"
13420
+ "sha256": "566e7a937337f753d45f32e1cdc8b1c63e76ab2bfadedfde46c669cddad543a0"
13411
13421
  },
13412
13422
  {
13413
13423
  "path": "tests/profile_fields.mjs",
@@ -13427,7 +13437,7 @@
13427
13437
  {
13428
13438
  "path": "tests/profile_rollup_consent.mjs",
13429
13439
  "mode": "0000644",
13430
- "sha256": "d5849ac1b2c25c4055994a50e0698ff306a393556cd304ad8c4d8a2ce9438e88"
13440
+ "sha256": "dcda4f837c6c0122901a67edadecf9eea8989515367fd39a5c9a4afa82fd18a1"
13431
13441
  },
13432
13442
  {
13433
13443
  "path": "tests/profile_route.mjs",
@@ -14712,7 +14722,12 @@
14712
14722
  {
14713
14723
  "path": "tests/terms_acceptance.mjs",
14714
14724
  "mode": "0000644",
14715
- "sha256": "404bc664d8007b00077dd897642499ab5413c40c8d107dd1f20bdf387abcecbb"
14725
+ "sha256": "3dba45ebddb94b2f7d656f53c2d303cda08455738df42e9be78d75d41b2bae2e"
14726
+ },
14727
+ {
14728
+ "path": "tests/terms_grandfather_db.mjs",
14729
+ "mode": "0000644",
14730
+ "sha256": "bfaac6724700e7e2bbe2914bb3c456fa1b0fd25990764b15008f187a40d4c791"
14716
14731
  },
14717
14732
  {
14718
14733
  "path": "tests/test_path_guard.mjs",
@@ -5,7 +5,7 @@ A **generated**, zero-dependency typed client for the Bongos API — produced fr
5
5
  by hand; it regenerates when the spec changes, so it can never drift from the routes.
6
6
 
7
7
  - API version: **v1** (served at `/api/bongos/v1`)
8
- - 418 operations across 63 resource groups
8
+ - 419 operations across 63 resource groups
9
9
 
10
10
  ## Use it from your project
11
11
 
@@ -93,6 +93,8 @@ function createClient(opts = {}) {
93
93
  patchAccessRequestsId: (args) => request("PATCH", "/access-requests/{id}", { hasBody: true }, args),
94
94
  // POST /access-requests/invite — rank: archon — POST /access-requests/invite
95
95
  postAccessRequestsInvite: (args) => request("POST", "/access-requests/invite", { hasBody: true }, args),
96
+ // GET /access-requests/invites — rank: archon — GET /access-requests/invites
97
+ getAccessRequestsInvites: (args) => request("GET", "/access-requests/invites", { hasBody: false }, args),
96
98
  // GET /access-requests/status — rank: public — GET /access-requests/status
97
99
  getAccessRequestsStatus: (args) => request("GET", "/access-requests/status", { hasBody: false }, args),
98
100
  },
@@ -92,6 +92,8 @@ function createClient(opts = {}) {
92
92
  patchAccessRequestsId: (args) => request("PATCH", "/access-requests/{id}", { hasBody: true }, args),
93
93
  // POST /access-requests/invite — rank: archon — POST /access-requests/invite
94
94
  postAccessRequestsInvite: (args) => request("POST", "/access-requests/invite", { hasBody: true }, args),
95
+ // GET /access-requests/invites — rank: archon — GET /access-requests/invites
96
+ getAccessRequestsInvites: (args) => request("GET", "/access-requests/invites", { hasBody: false }, args),
95
97
  // GET /access-requests/status — rank: public — GET /access-requests/status
96
98
  getAccessRequestsStatus: (args) => request("GET", "/access-requests/status", { hasBody: false }, args),
97
99
  },
@@ -19,6 +19,7 @@ export interface DeleteTasksIdCriteriaCriterionIdResponse { ok: boolean; removed
19
19
  export interface DeleteTasksIdDependenciesDepIdResponse { ok: boolean; removed: unknown }
20
20
  export interface DeleteTasksIdVisualResponse { ok: boolean; visual_url: unknown }
21
21
  export interface ErrorEnvelope { error: ApiErrorObject }
22
+ export interface GetAccessRequestsInvitesResponse { invites: unknown }
22
23
  export interface GetAccessRequestsResponse { requests: unknown }
23
24
  export interface GetAccessRequestsStatusResponse { github_login: unknown; status: unknown; admitted: unknown }
24
25
  export interface GetAchievementsResponse { achievements: unknown }
@@ -211,7 +212,7 @@ export interface PatchSpecialitiesIdResponse { speciality: unknown }
211
212
  export interface PatchTaskRecommendationsIdRequest { status: "declined" | "withdrawn" }
212
213
  export interface PatchTaskRecommendationsIdResponse { ok: boolean; recommendation: unknown }
213
214
  export interface PatchTasksIdRequest { kind?: string; discipline?: string; requires_rank?: string; module_key?: string; goal_id?: number; parent_task_id?: StringifiableId; parallel_safe?: unknown; newcomer_friendly?: boolean; xenos_claimable?: boolean; security_sensitive?: boolean; automation_tag?: string; needs_migration?: boolean; description?: string; title?: string; priority?: unknown; value_summary?: string; status?: unknown }
214
- export interface PostAccessRequestsInviteRequest { github_login: string }
215
+ export interface PostAccessRequestsInviteRequest { github_login: string; note?: string }
215
216
  export interface PostAccessRequestsInviteResponse { ok: boolean; already_invited?: boolean; github_login?: unknown; request?: unknown }
216
217
  export interface PostAccessRequestsRequest { github_login: string; display_name?: string; note?: string }
217
218
  export interface PostAccessRequestsResponse { ok: boolean; request?: unknown; already_pending?: boolean }
@@ -481,6 +482,8 @@ export interface BongosClient {
481
482
  patchAccessRequestsId(args: RequestArgs & { body: PatchAccessRequestsIdRequest }): Promise<PatchAccessRequestsIdResponse>;
482
483
  /** POST /access-requests/invite — rank: archon */
483
484
  postAccessRequestsInvite(args: RequestArgs & { body: PostAccessRequestsInviteRequest }): Promise<PostAccessRequestsInviteResponse>;
485
+ /** GET /access-requests/invites — rank: archon */
486
+ getAccessRequestsInvites(args?: RequestArgs): Promise<GetAccessRequestsInvitesResponse>;
484
487
  /** GET /access-requests/status — rank: public */
485
488
  getAccessRequestsStatus(args?: RequestArgs): Promise<GetAccessRequestsStatusResponse>;
486
489
  };
@@ -89,6 +89,8 @@ export function createClient(opts = {}) {
89
89
  patchAccessRequestsId: (args) => request("PATCH", "/access-requests/{id}", { hasBody: true }, args),
90
90
  // POST /access-requests/invite — rank: archon — POST /access-requests/invite
91
91
  postAccessRequestsInvite: (args) => request("POST", "/access-requests/invite", { hasBody: true }, args),
92
+ // GET /access-requests/invites — rank: archon — GET /access-requests/invites
93
+ getAccessRequestsInvites: (args) => request("GET", "/access-requests/invites", { hasBody: false }, args),
92
94
  // GET /access-requests/status — rank: public — GET /access-requests/status
93
95
  getAccessRequestsStatus: (args) => request("GET", "/access-requests/status", { hasBody: false }, args),
94
96
  },
@@ -45,6 +45,8 @@ Accounts that are already `active` get `terms_accepted_at IS NULL`, because no p
45
45
 
46
46
  This is ADR 0171 D3's own backfill rule applied to its own sentence (*"all existing accounts start provisional and lazily upgrade on their next hub-session authorize"*), and it is what P03 ratified ([task 1002799](https://cloudbongos.com/builders#/task/1002799), owner, 2026-08-16): no backfill activation, on the rationale that a builder passes through the hub anyway. **This is the one consequence with a visible product effect, and it is on [blocker 1000123](https://cloudbongos.com/builders#/blocker/1000123) for the owner** — grandfathering is one line in the migration if they prefer it.
47
47
 
48
+ > **Amended 2026-09-25 ([task 1003360](https://cloudbongos.com/builders#/task/1003360) / `<redacted>`) — D4 is reversed, D2 narrowed.** The owner chose to grandfather ([blocker 1000123](https://cloudbongos.com/builders#/blocker/1000123); the decision is recorded in [ADR 0217](0217-rank-gates-inviting-not-viewing.md) D3) and to mark it. A third column, `terms_accepted_source` (`signin` | `grandfathered`, CHECK-constrained), records HOW an acceptance was given. Migration 024 marks every acceptance already on record `signin`, then stamps each `active` account without one as `grandfathered` at the moment it ran, with the version then in force; it runs once, in the transaction that creates the column, and never touches `profile_state`. D2 now reads "the first acceptance **a human gave** stands": the conflict branch still COALESCEs, except that a `grandfathered` row is replaced outright, so a grandfather gives way to its owner's own acceptance at their next hub sign-in, and every sign-in sets the source to `signin`. The replacement is keyed on the marker, not on "no `signin` recorded": an acceptance with no source (the pre-024 code can write one in the deploy window) is a real sign-in and keeps its date. No runtime code writes `grandfathered`; `tests/terms_acceptance.mjs` fails any server file that does, and any second acceptance write site. D3's predicate is unchanged — it asks whether an acceptance exists, never its source — so the ledger distinguishes the two and visibility does not. `/terms` says so.
49
+
48
50
  ### D5 — Re-acceptance on a later revision is out of scope, and visible rather than silent
49
51
 
50
52
  Because the version is recorded and never overwritten, publishing a new `TERMS_VERSION` leaves every row naming the text it actually agreed to, so the platform can see who has not accepted the new one. What to *do* about that — re-prompt, re-gate, or nothing — is a product flow, not a storage shape, and is not built here.
@@ -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",
@@ -19471,6 +19512,15 @@
19471
19512
  },
19472
19513
  "description": "The single error shape returned by EVERY non-2xx response (ADR 0116). A caller reads `error.code`."
19473
19514
  },
19515
+ "GetAccessRequestsInvitesResponse": {
19516
+ "type": "object",
19517
+ "properties": {
19518
+ "invites": {}
19519
+ },
19520
+ "required": [
19521
+ "invites"
19522
+ ]
19523
+ },
19474
19524
  "GetAccessRequestsResponse": {
19475
19525
  "type": "object",
19476
19526
  "properties": {
@@ -22102,6 +22152,10 @@
22102
22152
  "type": "string",
22103
22153
  "minLength": 1,
22104
22154
  "maxLength": 60
22155
+ },
22156
+ "note": {
22157
+ "type": "string",
22158
+ "maxLength": 500
22105
22159
  }
22106
22160
  },
22107
22161
  "required": [
@@ -26518,9 +26572,9 @@
26518
26572
  "description": "A required dependency/feature is not configured or is temporarily down."
26519
26573
  }
26520
26574
  },
26521
- "x-endpoint-count": 418,
26522
- "x-schema-count": 455,
26575
+ "x-endpoint-count": 419,
26576
+ "x-schema-count": 456,
26523
26577
  "x-undocumented-bodies": 9,
26524
- "x-response-schemas": 310,
26578
+ "x-response-schemas": 311,
26525
26579
  "x-generated-by": "scripts/gds/gen-api-docs.js"
26526
26580
  }
@@ -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. 419 endpoints across 71 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)