@bongos/core 1.20.20 → 1.20.22

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 (49) hide show
  1. package/.bongos-core.json +80 -50
  2. package/clients/bongos-client/README.md +1 -1
  3. package/clients/bongos-client/bongos-client.global.js +6 -2
  4. package/clients/bongos-client/index.cjs +6 -2
  5. package/clients/bongos-client/index.d.ts +11 -4
  6. package/clients/bongos-client/index.mjs +6 -2
  7. package/docs/adr/0335-an-invite-is-a-pre-approved-row-on-the-projects-own-instance.md +1 -0
  8. package/docs/adr/0353-a-hub-invite-is-a-notice-of-the-projects-own-invite.md +70 -0
  9. package/docs/adr/README.md +1 -0
  10. package/docs/api/openapi.json +179 -73
  11. package/docs/api-reference.md +8 -6
  12. package/docs/copy-inventory.md +196 -196
  13. package/docs/copy-registry.json +250 -250
  14. package/docs/module-api-changelog.md +4 -0
  15. package/docs/page-inventory.json +2 -1
  16. package/docs/page-readings.json +310 -306
  17. package/modules/hall-ui/public/watch.js +23 -0
  18. package/modules/onboarding/routes/access-requests.js +36 -6
  19. package/modules/platform-identity/guild-map.js +105 -0
  20. package/modules/platform-identity/invite-notices.js +61 -0
  21. package/modules/platform-identity/module.json +1 -1
  22. package/modules/platform-identity/platform-identity.js +12 -18
  23. package/modules/platform-identity/routes/guilds-public.js +36 -0
  24. package/modules/platform-identity/routes/my-projects.js +6 -15
  25. package/modules/platform-identity/routes/projects.js +22 -15
  26. package/modules/platform-identity/routes/sso-invites.js +82 -0
  27. package/modules/platform-identity/tests/platform-identity.mjs +14 -11
  28. package/modules/public-landing/public/assets/cosmos.css +5 -0
  29. package/modules/public-landing/public/projects.html +35 -29
  30. package/modules/public-landing/public/projects.states.json +1 -0
  31. package/modules/ui-design/kit/serve.js +9 -0
  32. package/package-lock.json +2 -2
  33. package/package.json +1 -1
  34. package/release-notes.json +12 -0
  35. package/scripts/gds/run-unit-tests.js +4 -0
  36. package/src/bongos/auth-admission.js +40 -0
  37. package/src/bongos/auth.js +2 -1
  38. package/src/module-api.js +8 -1
  39. package/tests/access_requests_invite.mjs +39 -1
  40. package/tests/application_lifecycle.mjs +41 -1
  41. package/tests/catalog_only_client.mjs +5 -3
  42. package/tests/guild_map_db.mjs +157 -0
  43. package/tests/guilds_api.mjs +74 -0
  44. package/tests/hub_invite_notices.mjs +261 -0
  45. package/tests/module_api.mjs +1 -0
  46. package/tests/my_projects_surface.mjs +11 -1
  47. package/tests/project_invite_ownership.mjs +12 -7
  48. package/tests/project_invite_ui.mjs +42 -45
  49. package/tests/watch_applications_queue.mjs +33 -2
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.20.20",
6
- "core_contract": "1.20.20",
7
- "source_commit": "81de3611c8c98f0a428be1780f94435846cd7bf2",
5
+ "core_version": "1.20.22",
6
+ "core_contract": "1.20.22",
7
+ "source_commit": "d79f16096f873c36c2bd963c04d552fa8300497f",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-09-30T14:55:04.182Z",
9
+ "built_at": "2026-09-30T16:20:55.212Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
- "docs_redacted": 557,
12
+ "docs_redacted": 558,
13
13
  "agent_docs_stubbed": 25,
14
- "functional_verbatim": 2636,
14
+ "functional_verbatim": 2641,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 3219,
20
- "tree_sha256": "9d08157c7a131c0010616436de1c1b4b0ecd19030def84afd3ed402813e39499",
19
+ "file_count": 3225,
20
+ "tree_sha256": "63917bb4f51c192d66139655bbfebd61e0f04299a9f09e5073420a970ee9e39a",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -327,12 +327,12 @@
327
327
  {
328
328
  "path": "clients/bongos-client/README.md",
329
329
  "mode": "0000644",
330
- "sha256": "e02ae1f840ce2b9ba26906d22a71251f99093c1be99b7585d8d5492de6828247"
330
+ "sha256": "ff5585737cc618ca1a24c994a27411a6f4b60192d4904063771744788c0b8002"
331
331
  },
332
332
  {
333
333
  "path": "clients/bongos-client/bongos-client.global.js",
334
334
  "mode": "0000644",
335
- "sha256": "d2eddb6398add51948e7facc2b3752a4bc9c2a1c5826cdade034328529389dd2"
335
+ "sha256": "f0a11cd6519a8ba62cb645c8d50da768f00f7252562a8b7a2f6e089ae0040f5e"
336
336
  },
337
337
  {
338
338
  "path": "clients/bongos-client/examples/hello-world.mjs",
@@ -342,17 +342,17 @@
342
342
  {
343
343
  "path": "clients/bongos-client/index.cjs",
344
344
  "mode": "0000644",
345
- "sha256": "aef980f7c979cf57ce9cba684e370301f0343e3e72a4ce9076875fa0efd4287e"
345
+ "sha256": "60673c698acad267f556a78b0e4d13b60d5357208a8772fe0d69cbd60b2b1c2c"
346
346
  },
347
347
  {
348
348
  "path": "clients/bongos-client/index.d.ts",
349
349
  "mode": "0000644",
350
- "sha256": "d9b3edd04125960791f6282252f5f31b2ace6abb90beeb19c483af1a422fbf53"
350
+ "sha256": "2697fd1139e28cf2bf4ca8a5d4218d22060399bb4050cfdaa9457eae6c639b79"
351
351
  },
352
352
  {
353
353
  "path": "clients/bongos-client/index.mjs",
354
354
  "mode": "0000644",
355
- "sha256": "b99063352bcd42be68be647d30b838fdedcb0aef3c39a2b7a7849e9f80208fdd"
355
+ "sha256": "37028d9008247d9afd900f38437e1f8e335c19633c55379864177033d4f1bc89"
356
356
  },
357
357
  {
358
358
  "path": "clients/bongos-client/package.json",
@@ -2147,7 +2147,7 @@
2147
2147
  {
2148
2148
  "path": "docs/adr/0335-an-invite-is-a-pre-approved-row-on-the-projects-own-instance.md",
2149
2149
  "mode": "0000644",
2150
- "sha256": "ac7b159e2f894e9d9ce4c27506d84709aaa76851e325c5054fd45b619d2fea2a"
2150
+ "sha256": "f22adac7e27f2e83ece9311e44fca35edb0bd571440f108d28a9088775d0b93c"
2151
2151
  },
2152
2152
  {
2153
2153
  "path": "docs/adr/0336-a-guilds-record-is-the-sum-of-what-its-members-already-show.md",
@@ -2234,20 +2234,25 @@
2234
2234
  "mode": "0000644",
2235
2235
  "sha256": "d74b4f6262d4f23fd67f73771bbe8187e9cb92fa321b83ffb33ef03cf96d1236"
2236
2236
  },
2237
+ {
2238
+ "path": "docs/adr/0353-a-hub-invite-is-a-notice-of-the-projects-own-invite.md",
2239
+ "mode": "0000644",
2240
+ "sha256": "4445d9c306a22fb3b7e72467bedad262f4653c092bf4866f8a39410248da2724"
2241
+ },
2237
2242
  {
2238
2243
  "path": "docs/adr/README.md",
2239
2244
  "mode": "0000644",
2240
- "sha256": "943ac0f8c9c0b2dc5ef2a05241b0bac329c5fa986b09425841e12e62f4f9b936"
2245
+ "sha256": "6be10fb1925fd406729e08b4d604569b1123b7c5f6091300559df8532831ab69"
2241
2246
  },
2242
2247
  {
2243
2248
  "path": "docs/api-reference.md",
2244
2249
  "mode": "0000644",
2245
- "sha256": "73b9c0372c8d6ddf88b0eec04695defbc219a826b8be9da71a24b5a1eb6ff060"
2250
+ "sha256": "d6a19f9db87e4d936f317efe07e1a4dfaaa75c5a6797a4c3e4939634adec8494"
2246
2251
  },
2247
2252
  {
2248
2253
  "path": "docs/api/openapi.json",
2249
2254
  "mode": "0000644",
2250
- "sha256": "4167b07fddd64f47f901082e130a12f307e4e2fab5ac9bc821e24a0c4f6f3d72"
2255
+ "sha256": "f44cf9111baee003af84ab6c83503e97a4a723c4cb2ad59ad367cce75f8f717e"
2251
2256
  },
2252
2257
  {
2253
2258
  "path": "docs/architecture.md",
@@ -2272,12 +2277,12 @@
2272
2277
  {
2273
2278
  "path": "docs/copy-inventory.md",
2274
2279
  "mode": "0000644",
2275
- "sha256": "08ef6d32a1c5cfea14e7ddd54a4e7ab2e34818199a45e0422a4fce31b72567a7"
2280
+ "sha256": "5034d255bbdcdd29c52831ce069561494a5ad7cc028b5e5711a0ab7a95a73a2b"
2276
2281
  },
2277
2282
  {
2278
2283
  "path": "docs/copy-registry.json",
2279
2284
  "mode": "0000644",
2280
- "sha256": "a405d02a6308a53e9322437f21daf86cb7e7f0d6d8b15a25639b7fdbcb7c2fd1"
2285
+ "sha256": "e75a8e11138b151ea81f378dde8f4e7fe395b44ba9369e7c98e865ff6516eeb4"
2281
2286
  },
2282
2287
  {
2283
2288
  "path": "docs/design/apex-pass-2-direction.md",
@@ -2777,7 +2782,7 @@
2777
2782
  {
2778
2783
  "path": "docs/module-api-changelog.md",
2779
2784
  "mode": "0000644",
2780
- "sha256": "2b82bf65da0987ffc862ad6369e0cbcf8e6adef0a70915cf7a7a2c2289a69c85"
2785
+ "sha256": "f721721d1ba698925f1aa8133bb3b5d6ab6c048be0183212c0a89b1ca1d132a0"
2781
2786
  },
2782
2787
  {
2783
2788
  "path": "docs/modules-contract.md",
@@ -2862,12 +2867,12 @@
2862
2867
  {
2863
2868
  "path": "docs/page-inventory.json",
2864
2869
  "mode": "0000644",
2865
- "sha256": "9e3397a30b8fa81b392a32b65f275209cb67021b7e74a4700e0ae9ff6d3c5e6b"
2870
+ "sha256": "7a607ea5f1d29bd078ddbb6bfa5bcfb68e689095ca47bf290194cc7578794ed9"
2866
2871
  },
2867
2872
  {
2868
2873
  "path": "docs/page-readings.json",
2869
2874
  "mode": "0000644",
2870
- "sha256": "6ba44419e75dcb245e386e077eba647e744c56861b8b81c9002bbe7528369f0c"
2875
+ "sha256": "dd7227bb9daface49cfb1e2a8702cb81b95a5d19f0169038ddfd7a6c80e04225"
2871
2876
  },
2872
2877
  {
2873
2878
  "path": "docs/project-context.template.md",
@@ -5717,7 +5722,7 @@
5717
5722
  {
5718
5723
  "path": "modules/hall-ui/public/watch.js",
5719
5724
  "mode": "0000644",
5720
- "sha256": "65e86c3526dc42eb82d6e7f9df88af5ff4bb8c78aef52326301e1cc57d6d7835"
5725
+ "sha256": "7a5ef4f34be6b0ab7f5b3fa34bf1666c17164a6331031cc908c2791109585b89"
5721
5726
  },
5722
5727
  {
5723
5728
  "path": "modules/hall-ui/public/watch.states.json",
@@ -6807,7 +6812,7 @@
6807
6812
  {
6808
6813
  "path": "modules/onboarding/routes/access-requests.js",
6809
6814
  "mode": "0000644",
6810
- "sha256": "69e0757e08ff5fdac708036cca67a6e11fd26820b683d7f255bc3c1c0e30cce9"
6815
+ "sha256": "1eaac1f70a519ca5a0ea71bb56ab6d33b582f5ff002faf5811fa6c1700480057"
6811
6816
  },
6812
6817
  {
6813
6818
  "path": "modules/onboarding/routes/onboarding.js",
@@ -6864,6 +6869,11 @@
6864
6869
  "mode": "0000644",
6865
6870
  "sha256": "793e96feacef39ec52166dd7372c894a25679c7137c9c3c5e9df38ec323f1c4a"
6866
6871
  },
6872
+ {
6873
+ "path": "modules/platform-identity/guild-map.js",
6874
+ "mode": "0000644",
6875
+ "sha256": "f550b6f42ef3e37c4390a1629d4c5f109285a130d2b5efd4ccbefa57acfe2cf1"
6876
+ },
6867
6877
  {
6868
6878
  "path": "modules/platform-identity/guild-totals.js",
6869
6879
  "mode": "0000644",
@@ -6889,6 +6899,11 @@
6889
6899
  "mode": "0000644",
6890
6900
  "sha256": "2eb5577450d3bc1d67b7eab9a13256889aca945c6ac6a6a0ca919e195952b7a1"
6891
6901
  },
6902
+ {
6903
+ "path": "modules/platform-identity/invite-notices.js",
6904
+ "mode": "0000644",
6905
+ "sha256": "1391ac415c073c88942f517b4467514142e15fb0fadb2e156c44db4e75ee0763"
6906
+ },
6892
6907
  {
6893
6908
  "path": "modules/platform-identity/invite-suggestions.js",
6894
6909
  "mode": "0000644",
@@ -7032,7 +7047,7 @@
7032
7047
  {
7033
7048
  "path": "modules/platform-identity/module.json",
7034
7049
  "mode": "0000644",
7035
- "sha256": "48c9d82d9ec647430a97ba19f403b22e7eba13e16ff553b6bbd08691a8918a7b"
7050
+ "sha256": "c5efc01e3be9725d2f78d3cd5f89db68731c2958c627374fc005b5afb1fdc51f"
7036
7051
  },
7037
7052
  {
7038
7053
  "path": "modules/platform-identity/origin-containment.js",
@@ -7042,7 +7057,7 @@
7042
7057
  {
7043
7058
  "path": "modules/platform-identity/platform-identity.js",
7044
7059
  "mode": "0000644",
7045
- "sha256": "a823bd5e79795f93aa011470088b5840bf2ada6fb696fbf6b9b1c6c2ea85e5ef"
7060
+ "sha256": "9877fd84f74545d96473651cca9d00a76712507e76962c1891d3dd0c3d47e7b2"
7046
7061
  },
7047
7062
  {
7048
7063
  "path": "modules/platform-identity/pollers/code-sweep.js",
@@ -7107,7 +7122,7 @@
7107
7122
  {
7108
7123
  "path": "modules/platform-identity/routes/guilds-public.js",
7109
7124
  "mode": "0000644",
7110
- "sha256": "b6029f6f9d40fec18e42c0eaba75779ad7baa0c29df47bb7fe248a83cb783396"
7125
+ "sha256": "3217ae9aa5d952b72711a4e723bec3c93b4b5d12975f056bb74e8e9f4ff5e7e3"
7111
7126
  },
7112
7127
  {
7113
7128
  "path": "modules/platform-identity/routes/guilds.js",
@@ -7117,7 +7132,7 @@
7117
7132
  {
7118
7133
  "path": "modules/platform-identity/routes/my-projects.js",
7119
7134
  "mode": "0000644",
7120
- "sha256": "56700357273c03d412afce1ef9937ba811257d0c5110f08d757bbef3e517a416"
7135
+ "sha256": "c9a3541f976aa872d4645dccb6101b5ca046a7ea963b1665e9cb6ed9d3796f5c"
7121
7136
  },
7122
7137
  {
7123
7138
  "path": "modules/platform-identity/routes/profile.js",
@@ -7127,7 +7142,7 @@
7127
7142
  {
7128
7143
  "path": "modules/platform-identity/routes/projects.js",
7129
7144
  "mode": "0000644",
7130
- "sha256": "575d89666362e57e04ac0fd6dcd13b3f5125ba46e5cdb371cb3456f9ee383d88"
7145
+ "sha256": "094c1d54e11794acb09066d0d95b18dbe9100f8b87a67cd7eb1f56be30026f8e"
7131
7146
  },
7132
7147
  {
7133
7148
  "path": "modules/platform-identity/routes/public-profile.js",
@@ -7139,6 +7154,11 @@
7139
7154
  "mode": "0000644",
7140
7155
  "sha256": "3fbaaafe605fd891c449499ca85a716f9b8780bb1869f25b32162593ada8fedd"
7141
7156
  },
7157
+ {
7158
+ "path": "modules/platform-identity/routes/sso-invites.js",
7159
+ "mode": "0000644",
7160
+ "sha256": "af4efb51c20e8cfc3827fbebb17918bcae08f4b07cab982005f52ec34c7c1978"
7161
+ },
7142
7162
  {
7143
7163
  "path": "modules/platform-identity/routes/sso.js",
7144
7164
  "mode": "0000644",
@@ -7167,7 +7187,7 @@
7167
7187
  {
7168
7188
  "path": "modules/platform-identity/tests/platform-identity.mjs",
7169
7189
  "mode": "0000644",
7170
- "sha256": "93d74c10d601eab840da83b5d33d7bbf51907830626401cc27fadb138441fcc3"
7190
+ "sha256": "d9164f9ae4188a313ce55ebc7c670531aa4e47128f85571aaa55730dbabd1dd3"
7171
7191
  },
7172
7192
  {
7173
7193
  "path": "modules/platform-identity/ui/.gitkeep",
@@ -7782,7 +7802,7 @@
7782
7802
  {
7783
7803
  "path": "modules/public-landing/public/assets/cosmos.css",
7784
7804
  "mode": "0000644",
7785
- "sha256": "1269d1e7a9e84459ce023a4c385e7f733dc291df5d46276092f47e845f5b55f8"
7805
+ "sha256": "865e576b309a0ad4b160dc10ff8907e2a6210d2aaea7138155d70143caf7686c"
7786
7806
  },
7787
7807
  {
7788
7808
  "path": "modules/public-landing/public/assets/verro-medallion.png",
@@ -8042,7 +8062,7 @@
8042
8062
  {
8043
8063
  "path": "modules/public-landing/public/projects.html",
8044
8064
  "mode": "0000644",
8045
- "sha256": "c80a43d899cd11ab05fa56b35920da0f2ecb661bab6d9b44a515bdba53756dbc"
8065
+ "sha256": "b2780277742b8f560dc431ce77498ffdefaf1a027ffde893caa472e59da512f3"
8046
8066
  },
8047
8067
  {
8048
8068
  "path": "modules/public-landing/public/projects.probes.json",
@@ -8052,7 +8072,7 @@
8052
8072
  {
8053
8073
  "path": "modules/public-landing/public/projects.states.json",
8054
8074
  "mode": "0000644",
8055
- "sha256": "53529e467824952eca9c4753fb2374caa05f2406aa9b0c03e8824b77e4996540"
8075
+ "sha256": "5ce71b5f4c9cf3b9c955bd6e86a8f9b2c8fc53a917955a57577272972ab31693"
8056
8076
  },
8057
8077
  {
8058
8078
  "path": "modules/public-landing/public/terms.html",
@@ -8577,7 +8597,7 @@
8577
8597
  {
8578
8598
  "path": "modules/ui-design/kit/serve.js",
8579
8599
  "mode": "0000644",
8580
- "sha256": "0d039ac06759ab813a4cf67d2c989662280f2c31c625a3e8ca02eb1f2e594418"
8600
+ "sha256": "9b74bbbdaeee790c88a0f6153ff12f8e7062442257542f308a4a9ab188bbbe2d"
8581
8601
  },
8582
8602
  {
8583
8603
  "path": "modules/ui-design/kit/tells.js",
@@ -8887,12 +8907,12 @@
8887
8907
  {
8888
8908
  "path": "package-lock.json",
8889
8909
  "mode": "0000644",
8890
- "sha256": "830a8f9950a12b57c520a79198562f423818f1f1a98095d7122ddf4a6100f052"
8910
+ "sha256": "a4c779e1257097ccfca882fff19eb4475df55ddcec186db467d2efa021e2f32d"
8891
8911
  },
8892
8912
  {
8893
8913
  "path": "package.json",
8894
8914
  "mode": "0000644",
8895
- "sha256": "3b0d575917863d61bca84ddc2ce68886c33bc0d4fae9825a7abb8e2a5da7eec8"
8915
+ "sha256": "90060e42b238486c38227cafbb5d7026e8d4283a3b96508f1617d69f524cdefe"
8896
8916
  },
8897
8917
  {
8898
8918
  "path": "public-docs/index.html",
@@ -8912,7 +8932,7 @@
8912
8932
  {
8913
8933
  "path": "release-notes.json",
8914
8934
  "mode": "0000644",
8915
- "sha256": "47fee7ce9947c485d183f574d1564c43da3329822ffd470897609631fe95effc"
8935
+ "sha256": "f92a265951d8ff9531bca0803411c8f1a156d3a034c3125a080cf9c65c66c3c5"
8916
8936
  },
8917
8937
  {
8918
8938
  "path": "scripts/bongos-mcp.js",
@@ -10072,7 +10092,7 @@
10072
10092
  {
10073
10093
  "path": "scripts/gds/run-unit-tests.js",
10074
10094
  "mode": "0000644",
10075
- "sha256": "b4b2358efdc538a35472258f5c0812bc3990e179612f663810cdcde6f1e0b143"
10095
+ "sha256": "8a7b0e6b5d899bc2706d952d2383ee5b45758810b7f7d5bd5b7ebc2fc547e43e"
10076
10096
  },
10077
10097
  {
10078
10098
  "path": "scripts/gds/runner-drift.js",
@@ -10692,7 +10712,7 @@
10692
10712
  {
10693
10713
  "path": "src/bongos/auth-admission.js",
10694
10714
  "mode": "0000644",
10695
- "sha256": "9fd9311df751a418985073db3aed97825e52d2a45ca7501b93f93cf5019c1fe6"
10715
+ "sha256": "5e8147efb07016de8648dc6d3dc09d437b27dfc768484bc0aa94582acb6774a2"
10696
10716
  },
10697
10717
  {
10698
10718
  "path": "src/bongos/auth-config.js",
@@ -10717,7 +10737,7 @@
10717
10737
  {
10718
10738
  "path": "src/bongos/auth.js",
10719
10739
  "mode": "0000644",
10720
- "sha256": "a46826214509f317fbe982265c0045edf9c3aa4c94bd2fa54232af51cbc51573"
10740
+ "sha256": "fad15cdbd6652b2a699f48769baaaed0e59314ac6bef326e663d6c7b06b1eaae"
10721
10741
  },
10722
10742
  {
10723
10743
  "path": "src/bongos/cascade-dispatch.js",
@@ -11027,7 +11047,7 @@
11027
11047
  {
11028
11048
  "path": "src/module-api.js",
11029
11049
  "mode": "0000644",
11030
- "sha256": "091a4bde841eaad09639727d4691f0c8a5555926e33cbffc49c7acc6b95870a6"
11050
+ "sha256": "8d944dcbb15babff01a10b3805ccc2fbe79ff903067af22afde12a8a1447b580"
11031
11051
  },
11032
11052
  {
11033
11053
  "path": "src/module-loader/catalog.js",
@@ -11102,7 +11122,7 @@
11102
11122
  {
11103
11123
  "path": "tests/access_requests_invite.mjs",
11104
11124
  "mode": "0000644",
11105
- "sha256": "4148ce39a074fa16cb6360027a7fd6c1ea9b26cea6423209591ee45f23ec894f"
11125
+ "sha256": "1044d48504923ec03a8a08303fa12612b2fc02abed32d85be26bf8d5615807ad"
11106
11126
  },
11107
11127
  {
11108
11128
  "path": "tests/accessibility_replay.mjs",
@@ -11322,7 +11342,7 @@
11322
11342
  {
11323
11343
  "path": "tests/application_lifecycle.mjs",
11324
11344
  "mode": "0000644",
11325
- "sha256": "c13c0a4b5244b72ec093a2d80029bc3b1ceb8f0828aaad69274054be9e927afe"
11345
+ "sha256": "d35db1b125eaee28d3e0af9c1354b36f589a74bca922b22b507fc29b48bb38c4"
11326
11346
  },
11327
11347
  {
11328
11348
  "path": "tests/architect.mjs",
@@ -11697,7 +11717,7 @@
11697
11717
  {
11698
11718
  "path": "tests/catalog_only_client.mjs",
11699
11719
  "mode": "0000644",
11700
- "sha256": "f973b73aa9c0063dd6a10c60e6ea08729abb5e405e0ff893b2e3c907488d34dc"
11720
+ "sha256": "ea7d5c8546966c84ce8831484355f059b7dc42558954090afa90e17d89165454"
11701
11721
  },
11702
11722
  {
11703
11723
  "path": "tests/category_advisory_guard.mjs",
@@ -13074,6 +13094,11 @@
13074
13094
  "mode": "0000644",
13075
13095
  "sha256": "6e834f3cf75dd34ba30795c46bc401098053a56c967da8661128f34db71ff8c3"
13076
13096
  },
13097
+ {
13098
+ "path": "tests/guild_map_db.mjs",
13099
+ "mode": "0000644",
13100
+ "sha256": "cc230b6df32f9f7ab7c81d0cca88af6d0ace233c800a4d29d43cd474d0deefa1"
13101
+ },
13077
13102
  {
13078
13103
  "path": "tests/guild_namespace_reserved.mjs",
13079
13104
  "mode": "0000644",
@@ -13092,7 +13117,7 @@
13092
13117
  {
13093
13118
  "path": "tests/guilds_api.mjs",
13094
13119
  "mode": "0000644",
13095
- "sha256": "2476ef4a332fa6d82d9d40ca798012c5aef40a74b08c5ca8d8d40e1975223cbb"
13120
+ "sha256": "ae92262fb5fa1a79b1540538e7b9191ae47d19c3b4ae3572d07d470159f4ef91"
13096
13121
  },
13097
13122
  {
13098
13123
  "path": "tests/guilds_db.mjs",
@@ -13339,6 +13364,11 @@
13339
13364
  "mode": "0000644",
13340
13365
  "sha256": "5daff8488df269752d2e5992e60a03bb75cf85a5b8d5fcaa15703b12a5bb6b94"
13341
13366
  },
13367
+ {
13368
+ "path": "tests/hub_invite_notices.mjs",
13369
+ "mode": "0000644",
13370
+ "sha256": "c79b4101c944110166da2e158bada2192235897887b65bbb7b1f9fae3c61eb13"
13371
+ },
13342
13372
  {
13343
13373
  "path": "tests/hub_map_orb_states.mjs",
13344
13374
  "mode": "0000644",
@@ -13947,7 +13977,7 @@
13947
13977
  {
13948
13978
  "path": "tests/module_api.mjs",
13949
13979
  "mode": "0000644",
13950
- "sha256": "264d34d76d2112c0c8d118d431f7c53342343928b4b61e13729b146c34acd0e0"
13980
+ "sha256": "be32afe74b2ecd47f136a824c9997b54274b72d41dfe5cd8d1e540e9a05f83f4"
13951
13981
  },
13952
13982
  {
13953
13983
  "path": "tests/module_api_lazy.mjs",
@@ -14062,7 +14092,7 @@
14062
14092
  {
14063
14093
  "path": "tests/my_projects_surface.mjs",
14064
14094
  "mode": "0000644",
14065
- "sha256": "8aa62a0d98c6f667d66280e13ff849b0a3e7684b528a628042594863b02f63ae"
14095
+ "sha256": "9055da573a4e210daf6d2910938df77f711f54a6701a33ebc8995ef11a95fc52"
14066
14096
  },
14067
14097
  {
14068
14098
  "path": "tests/nav_permission_atoms.mjs",
@@ -14437,7 +14467,7 @@
14437
14467
  {
14438
14468
  "path": "tests/project_invite_ownership.mjs",
14439
14469
  "mode": "0000644",
14440
- "sha256": "743436b1191353bf687d8fb553d423a6003707a25a548367644928478569f171"
14470
+ "sha256": "bc77a25e814de321faae41780b83504bb4ce87a73bb944d0d231a301532e5364"
14441
14471
  },
14442
14472
  {
14443
14473
  "path": "tests/project_invite_suggestions.mjs",
@@ -14447,7 +14477,7 @@
14447
14477
  {
14448
14478
  "path": "tests/project_invite_ui.mjs",
14449
14479
  "mode": "0000644",
14450
- "sha256": "36a7ff3e5b8c4b9edd495d8a7e5b50dcecded8e608f148a62b4e37841c0eb36a"
14480
+ "sha256": "2b6d62d93878b43896dbe17247e7879ac86c842d9300cdf34876c5010ab02d1f"
14451
14481
  },
14452
14482
  {
14453
14483
  "path": "tests/project_join_door.mjs",
@@ -16037,7 +16067,7 @@
16037
16067
  {
16038
16068
  "path": "tests/watch_applications_queue.mjs",
16039
16069
  "mode": "0000644",
16040
- "sha256": "a8020b3e3f30e93a872f94567a03e775d279f130a20a2c61c64caaafa5d752a7"
16070
+ "sha256": "6f0dc184d552c4db4048894286cff96ade91e44c8070fae66fdeef324ba09a7d"
16041
16071
  },
16042
16072
  {
16043
16073
  "path": "tests/watch_roster_self_row.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
- - 461 operations across 70 resource groups
8
+ - 463 operations across 70 resource groups
9
9
 
10
10
  ## Use it from your project
11
11
 
@@ -499,6 +499,8 @@ function createClient(opts = {}) {
499
499
  postGuildRequestsIdDecline: (args) => request("POST", "/guild-requests/{id}/decline", { hasBody: true }, args),
500
500
  },
501
501
  "guilds": {
502
+ // GET /guilds — rank: public — GET /guilds
503
+ getGuilds: (args) => request("GET", "/guilds", { hasBody: false }, args),
502
504
  // POST /guilds — rank: any-builder — POST /guilds
503
505
  postGuilds: (args) => request("POST", "/guilds", { hasBody: true }, args),
504
506
  // DELETE /guilds/{slug} — rank: any-builder — DELETE /guilds/:slug
@@ -727,8 +729,6 @@ function createClient(opts = {}) {
727
729
  postMyProjectsClientIdLeave: (args) => request("POST", "/my-projects/{clientId}/leave", { hasBody: true }, args),
728
730
  // GET /my-projects/invites — rank: any-builder — GET /my-projects/invites
729
731
  getMyProjectsInvites: (args) => request("GET", "/my-projects/invites", { hasBody: false }, args),
730
- // POST /my-projects/invites/{clientId}/accept — rank: any-builder — POST /my-projects/invites/:clientId/accept
731
- postMyProjectsInvitesClientIdAccept: (args) => request("POST", "/my-projects/invites/{clientId}/accept", { hasBody: true }, args),
732
732
  // POST /my-projects/invites/{clientId}/decline — rank: any-builder — POST /my-projects/invites/:clientId/decline
733
733
  postMyProjectsInvitesClientIdDecline: (args) => request("POST", "/my-projects/invites/{clientId}/decline", { hasBody: true }, args),
734
734
  // POST /my-projects/join — rank: any-builder — POST /my-projects/join
@@ -1013,6 +1013,10 @@ function createClient(opts = {}) {
1013
1013
  postSsoDevicePoll: (args) => request("POST", "/sso/device/poll", { hasBody: true }, args),
1014
1014
  // POST /sso/device/start — rank: public — POST /sso/device/start
1015
1015
  postSsoDeviceStart: (args) => request("POST", "/sso/device/start", { hasBody: true }, args),
1016
+ // POST /sso/invites/clear — rank: public — POST /sso/invites/clear
1017
+ postSsoInvitesClear: (args) => request("POST", "/sso/invites/clear", { hasBody: true }, args),
1018
+ // POST /sso/invites/notify — rank: public — POST /sso/invites/notify
1019
+ postSsoInvitesNotify: (args) => request("POST", "/sso/invites/notify", { hasBody: true }, args),
1016
1020
  // POST /sso/membership/check-in — rank: public — POST /sso/membership/check-in
1017
1021
  postSsoMembershipCheckIn: (args) => request("POST", "/sso/membership/check-in", { hasBody: true }, args),
1018
1022
  // GET /sso/pubkey — rank: public — GET /sso/pubkey
@@ -498,6 +498,8 @@ function createClient(opts = {}) {
498
498
  postGuildRequestsIdDecline: (args) => request("POST", "/guild-requests/{id}/decline", { hasBody: true }, args),
499
499
  },
500
500
  "guilds": {
501
+ // GET /guilds — rank: public — GET /guilds
502
+ getGuilds: (args) => request("GET", "/guilds", { hasBody: false }, args),
501
503
  // POST /guilds — rank: any-builder — POST /guilds
502
504
  postGuilds: (args) => request("POST", "/guilds", { hasBody: true }, args),
503
505
  // DELETE /guilds/{slug} — rank: any-builder — DELETE /guilds/:slug
@@ -726,8 +728,6 @@ function createClient(opts = {}) {
726
728
  postMyProjectsClientIdLeave: (args) => request("POST", "/my-projects/{clientId}/leave", { hasBody: true }, args),
727
729
  // GET /my-projects/invites — rank: any-builder — GET /my-projects/invites
728
730
  getMyProjectsInvites: (args) => request("GET", "/my-projects/invites", { hasBody: false }, args),
729
- // POST /my-projects/invites/{clientId}/accept — rank: any-builder — POST /my-projects/invites/:clientId/accept
730
- postMyProjectsInvitesClientIdAccept: (args) => request("POST", "/my-projects/invites/{clientId}/accept", { hasBody: true }, args),
731
731
  // POST /my-projects/invites/{clientId}/decline — rank: any-builder — POST /my-projects/invites/:clientId/decline
732
732
  postMyProjectsInvitesClientIdDecline: (args) => request("POST", "/my-projects/invites/{clientId}/decline", { hasBody: true }, args),
733
733
  // POST /my-projects/join — rank: any-builder — POST /my-projects/join
@@ -1012,6 +1012,10 @@ function createClient(opts = {}) {
1012
1012
  postSsoDevicePoll: (args) => request("POST", "/sso/device/poll", { hasBody: true }, args),
1013
1013
  // POST /sso/device/start — rank: public — POST /sso/device/start
1014
1014
  postSsoDeviceStart: (args) => request("POST", "/sso/device/start", { hasBody: true }, args),
1015
+ // POST /sso/invites/clear — rank: public — POST /sso/invites/clear
1016
+ postSsoInvitesClear: (args) => request("POST", "/sso/invites/clear", { hasBody: true }, args),
1017
+ // POST /sso/invites/notify — rank: public — POST /sso/invites/notify
1018
+ postSsoInvitesNotify: (args) => request("POST", "/sso/invites/notify", { hasBody: true }, args),
1015
1019
  // POST /sso/membership/check-in — rank: public — POST /sso/membership/check-in
1016
1020
  postSsoMembershipCheckIn: (args) => request("POST", "/sso/membership/check-in", { hasBody: true }, args),
1017
1021
  // GET /sso/pubkey — rank: public — GET /sso/pubkey
@@ -72,6 +72,7 @@ export interface GetGovernmentAssignmentsResponse { assignments: unknown }
72
72
  export interface GetGovernmentPermissionsResponse { permissions: unknown; principals: unknown }
73
73
  export interface GetGovernmentRanksResponse { ranks: unknown }
74
74
  export interface GetGradesByBuilderResponse { window_days: unknown; builders: unknown }
75
+ export interface GetGuildsResponse { order: unknown; count: unknown; results: unknown; page: unknown }
75
76
  export interface GetGuildsSlugMembersResponse { guild: unknown; you: unknown; members: unknown; count: unknown }
76
77
  export interface GetGuildsSlugRequestsResponse { incoming: unknown; outgoing: unknown; incoming_count: unknown; outgoing_count: unknown }
77
78
  export interface GetGuildsSlugResponse { guild: unknown; members: unknown; size: unknown; totals: unknown }
@@ -381,13 +382,13 @@ export interface PostModulesKeyEnableResponse { ok: boolean; key: unknown; enabl
381
382
  export interface PostModulesKeySubmitRequest { signed_by?: string }
382
383
  export interface PostModulesKeySubmitResponse { ok: boolean; submission: unknown }
383
384
  export interface PostMyProjectsClientIdLeaveResponse { ok: boolean; left: unknown }
384
- export interface PostMyProjectsInvitesClientIdAcceptResponse { ok: boolean; accepted: boolean }
385
385
  export interface PostMyProjectsInvitesClientIdDeclineResponse { ok: boolean; accepted: boolean }
386
386
  export interface PostMyProjectsJoinRequest { origin: string; note?: string }
387
387
  export interface PostMyProjectsJoinResponse { ok: boolean; status: unknown; project: unknown; message: unknown }
388
388
  export interface PostNpmReleasePreviewRequest { version: string }
389
389
  export interface PostOverrideRequestsIdDecideRequest { decision: string; note?: string }
390
390
  export interface PostProjectsInviteRequest { client_id: string; github_login: string }
391
+ export interface PostProjectsInviteResponse { invited: boolean; invite_url: unknown }
391
392
  export interface PostProjectsProjectIdSpecialitiesRequest { name: string; discipline: string; summary?: string; contract_md?: string; visibility?: string; sellable?: boolean; skills?: string[] }
392
393
  export interface PostProjectsProjectIdSpecialitiesResponse { speciality: unknown }
393
394
  export interface PostProjectsRequest { origin: string; name: string; tagline?: string; description?: string; art_url?: string; type?: string; template?: string }
@@ -442,6 +443,8 @@ export interface PostSsoApplicantProfileRequest { client_id: string; client_secr
442
443
  export interface PostSsoApplicantProfileResponse { profile: unknown }
443
444
  export interface PostSsoDevicePollRequest { device_code: string }
444
445
  export interface PostSsoDeviceStartRequest { origin: string }
446
+ export interface PostSsoInvitesClearRequest { client_id: string; client_secret: string; github_login: string }
447
+ export interface PostSsoInvitesNotifyRequest { client_id: string; client_secret: string; github_login: string }
445
448
  export interface PostSsoMembershipCheckInRequest { client_id: string; client_secret: string; github_id: StringifiableId; github_login: string; display_name?: string; avatar_url?: string; membership_kind?: string }
446
449
  export interface PostSsoMembershipCheckInResponse { ok: boolean }
447
450
  export interface PostSsoTokenRequest { client_id: string; client_secret: string; code: string; redirect_uri: string }
@@ -925,6 +928,8 @@ export interface BongosClient {
925
928
  postGuildRequestsIdDecline(args?: RequestArgs): Promise<ApiResponse>;
926
929
  };
927
930
  "guilds": {
931
+ /** GET /guilds — rank: public */
932
+ getGuilds(args?: RequestArgs): Promise<GetGuildsResponse>;
928
933
  /** POST /guilds — rank: any-builder */
929
934
  postGuilds(args: RequestArgs & { body: PostGuildsRequest }): Promise<PostGuildsResponse>;
930
935
  /** DELETE /guilds/{slug} — rank: any-builder */
@@ -1153,8 +1158,6 @@ export interface BongosClient {
1153
1158
  postMyProjectsClientIdLeave(args?: RequestArgs): Promise<PostMyProjectsClientIdLeaveResponse>;
1154
1159
  /** GET /my-projects/invites — rank: any-builder */
1155
1160
  getMyProjectsInvites(args?: RequestArgs): Promise<GetMyProjectsInvitesResponse>;
1156
- /** POST /my-projects/invites/{clientId}/accept — rank: any-builder */
1157
- postMyProjectsInvitesClientIdAccept(args?: RequestArgs): Promise<PostMyProjectsInvitesClientIdAcceptResponse>;
1158
1161
  /** POST /my-projects/invites/{clientId}/decline — rank: any-builder */
1159
1162
  postMyProjectsInvitesClientIdDecline(args?: RequestArgs): Promise<PostMyProjectsInvitesClientIdDeclineResponse>;
1160
1163
  /** POST /my-projects/join — rank: any-builder */
@@ -1206,7 +1209,7 @@ export interface BongosClient {
1206
1209
  /** GET /projects/featured — rank: public */
1207
1210
  getProjectsFeatured(args?: RequestArgs): Promise<GetProjectsFeaturedResponse>;
1208
1211
  /** POST /projects/invite — rank: metic+archon */
1209
- postProjectsInvite(args: RequestArgs & { body: PostProjectsInviteRequest }): Promise<ApiResponse>;
1212
+ postProjectsInvite(args: RequestArgs & { body: PostProjectsInviteRequest }): Promise<PostProjectsInviteResponse>;
1210
1213
  };
1211
1214
  "provisioning": {
1212
1215
  /** GET /provisioning/control-plane — rank: archon */
@@ -1439,6 +1442,10 @@ export interface BongosClient {
1439
1442
  postSsoDevicePoll(args: RequestArgs & { body: PostSsoDevicePollRequest }): Promise<ApiResponse>;
1440
1443
  /** POST /sso/device/start — rank: public */
1441
1444
  postSsoDeviceStart(args: RequestArgs & { body: PostSsoDeviceStartRequest }): Promise<ApiResponse>;
1445
+ /** POST /sso/invites/clear — rank: public */
1446
+ postSsoInvitesClear(args: RequestArgs & { body: PostSsoInvitesClearRequest }): Promise<ApiResponse>;
1447
+ /** POST /sso/invites/notify — rank: public */
1448
+ postSsoInvitesNotify(args: RequestArgs & { body: PostSsoInvitesNotifyRequest }): Promise<ApiResponse>;
1442
1449
  /** POST /sso/membership/check-in — rank: public */
1443
1450
  postSsoMembershipCheckIn(args: RequestArgs & { body: PostSsoMembershipCheckInRequest }): Promise<PostSsoMembershipCheckInResponse>;
1444
1451
  /** GET /sso/pubkey — rank: public */
@@ -495,6 +495,8 @@ export function createClient(opts = {}) {
495
495
  postGuildRequestsIdDecline: (args) => request("POST", "/guild-requests/{id}/decline", { hasBody: true }, args),
496
496
  },
497
497
  "guilds": {
498
+ // GET /guilds — rank: public — GET /guilds
499
+ getGuilds: (args) => request("GET", "/guilds", { hasBody: false }, args),
498
500
  // POST /guilds — rank: any-builder — POST /guilds
499
501
  postGuilds: (args) => request("POST", "/guilds", { hasBody: true }, args),
500
502
  // DELETE /guilds/{slug} — rank: any-builder — DELETE /guilds/:slug
@@ -723,8 +725,6 @@ export function createClient(opts = {}) {
723
725
  postMyProjectsClientIdLeave: (args) => request("POST", "/my-projects/{clientId}/leave", { hasBody: true }, args),
724
726
  // GET /my-projects/invites — rank: any-builder — GET /my-projects/invites
725
727
  getMyProjectsInvites: (args) => request("GET", "/my-projects/invites", { hasBody: false }, args),
726
- // POST /my-projects/invites/{clientId}/accept — rank: any-builder — POST /my-projects/invites/:clientId/accept
727
- postMyProjectsInvitesClientIdAccept: (args) => request("POST", "/my-projects/invites/{clientId}/accept", { hasBody: true }, args),
728
728
  // POST /my-projects/invites/{clientId}/decline — rank: any-builder — POST /my-projects/invites/:clientId/decline
729
729
  postMyProjectsInvitesClientIdDecline: (args) => request("POST", "/my-projects/invites/{clientId}/decline", { hasBody: true }, args),
730
730
  // POST /my-projects/join — rank: any-builder — POST /my-projects/join
@@ -1009,6 +1009,10 @@ export function createClient(opts = {}) {
1009
1009
  postSsoDevicePoll: (args) => request("POST", "/sso/device/poll", { hasBody: true }, args),
1010
1010
  // POST /sso/device/start — rank: public — POST /sso/device/start
1011
1011
  postSsoDeviceStart: (args) => request("POST", "/sso/device/start", { hasBody: true }, args),
1012
+ // POST /sso/invites/clear — rank: public — POST /sso/invites/clear
1013
+ postSsoInvitesClear: (args) => request("POST", "/sso/invites/clear", { hasBody: true }, args),
1014
+ // POST /sso/invites/notify — rank: public — POST /sso/invites/notify
1015
+ postSsoInvitesNotify: (args) => request("POST", "/sso/invites/notify", { hasBody: true }, args),
1012
1016
  // POST /sso/membership/check-in — rank: public — POST /sso/membership/check-in
1013
1017
  postSsoMembershipCheckIn: (args) => request("POST", "/sso/membership/check-in", { hasBody: true }, args),
1014
1018
  // GET /sso/pubkey — rank: public — GET /sso/pubkey
@@ -4,6 +4,7 @@
4
4
  - **Date:** 2026-09-24
5
5
  - **Task:** [task 1002813](https://cloudbongos.com/builders#/task/1002813) (R1 of the project admin console wave, goal 1000110 — BONGOS-V2)
6
6
  - **Deciders:** the three decisions come from the spike ([task 1002786](https://cloudbongos.com/builders#/task/1002786), [`docs/specs/<redacted>.md`](../specs/<redacted>.md), 2026-08-14). The spike asked the owner for one sign-off: what "widenable to metics" means. The owner answered on blocker 1000122, and [ADR 0217](0217-rank-gates-inviting-not-viewing.md) D1 records the answer: a per-project invite floor that defaults to archon and is set by that project's own archons. This ADR does three things. It records the decisions, reconciles them with what has shipped in the six weeks since, and says what each build task still has to build.
7
+ - **Followed by:** [ADR 0353](0353-a-hub-invite-is-a-notice-of-the-projects-own-invite.md) — R6 (task 1002818): the hub's invite row became a notice the project writes, the hub-side accept was retired, and the wizard's invite step hands the owner to the project's hall. The "Until R6 lands" item below is closed by it.
7
8
  - **Supersedes:** only the "Invitations (deferred slice)" paragraph of [ADR 0141](<redacted>.md) §5. The rest of ADR 0141 stands.
8
9
  - **Revises:** [ADR 0210](0210-scouting-graduates-on-an-instance-asserted-owner-claim.md), [ADR 0215](0215-the-recruiter-sliver-is-a-ceiling-not-a-step.md) and [ADR 0248](0248-a-hub-project-s-owner-is-the-provisioning-row-carried-on-a-port.md) predicted that `project.recruit` would replace `project.curate` on the hub's recruiting doors. D3.6 revises that prediction.
9
10
  - **Related:** [ADR 0016](0016-trust-boundary-server-enforced-permissions.md), [0108](0108-instance-composition-configurable-root.md), [0112](0112-private-goals-invitations-join-requests.md), [0151](0151-governance-permissions-as-atom-ranks-as-roles.md), [0157](0157-archon-is-rank-and-identity-only.md), [0182](0182-project-visibility-two-axes.md), [0194](0194-joinability-one-door-decision.md), [0201](0201-cross-project-application-vouched-row-live-record.md), [0247](0247-the-join-door-is-one-composed-answer-and-dark-matter-has-no-live-verdict-yet.md), [0328](0328-a-hosted-projects-authority-is-its-membership-row-not-its-owner-column.md)