@bongos/core 1.21.56 → 1.21.58

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 (51) hide show
  1. package/.bongos-core.json +106 -46
  2. package/clients/bongos-client/README.md +1 -1
  3. package/clients/bongos-client/bongos-client.global.js +6 -0
  4. package/clients/bongos-client/index.cjs +6 -0
  5. package/clients/bongos-client/index.d.ts +13 -2
  6. package/clients/bongos-client/index.mjs +6 -0
  7. package/docs/adr/0336-a-guilds-record-is-the-sum-of-what-its-members-already-show.md +2 -0
  8. package/docs/adr/0365-a-guild-engages-a-project-through-each-members-own-door.md +58 -0
  9. package/docs/adr/README.md +1 -0
  10. package/docs/api/openapi.json +233 -6
  11. package/docs/api-reference.md +8 -5
  12. package/docs/copy-inventory.md +361 -315
  13. package/docs/copy-registry.json +868 -419
  14. package/docs/file-map.md +4 -0
  15. package/docs/module-api-changelog.md +4 -0
  16. package/docs/page-inventory.json +38 -4
  17. package/docs/page-readings.json +856 -771
  18. package/modules/platform-identity/application-echo.js +11 -5
  19. package/modules/platform-identity/guild-engagements.js +255 -0
  20. package/modules/platform-identity/guilds.js +3 -1
  21. package/modules/platform-identity/migrations/platform_identity_030_guild_engagements.sql +64 -0
  22. package/modules/platform-identity/routes/guilds.js +35 -1
  23. package/modules/platform-identity/routes/my-projects.js +27 -3
  24. package/modules/platform-identity/routes/projects.js +44 -0
  25. package/modules/platform-identity/routes/sso.js +21 -3
  26. package/modules/public-landing/public/assets/cosmos.css +7 -0
  27. package/modules/public-landing/public/guild.html +633 -0
  28. package/modules/public-landing/public/guild.probes.json +63 -0
  29. package/modules/public-landing/public/guild.states.json +43 -0
  30. package/modules/public-landing/public/projects.html +252 -16
  31. package/modules/public-landing/public/projects.probes.json +26 -1
  32. package/modules/public-landing/public/projects.states.json +4 -0
  33. package/modules/ui-design/kit/fixtures/guilds.json +73 -0
  34. package/modules/ui-design/kit/fixtures/me__guild-engagements.json +7 -0
  35. package/modules/ui-design/kit/serve.js +99 -5
  36. package/package-lock.json +2 -2
  37. package/package.json +1 -1
  38. package/release-notes.json +12 -0
  39. package/scripts/gds/run-unit-tests.js +5 -0
  40. package/src/module-api.js +1 -1
  41. package/src/platform-server.js +13 -0
  42. package/tests/applicant_profile_boundary.mjs +104 -1
  43. package/tests/application_echo.mjs +91 -5
  44. package/tests/guild_engagement.mjs +881 -0
  45. package/tests/guild_engagement_db.mjs +240 -0
  46. package/tests/hub_engagement_cards.mjs +307 -0
  47. package/tests/hub_guild_page.mjs +624 -0
  48. package/tests/privacy_matrix.mjs +216 -14
  49. package/tests/project_invite_ui.mjs +187 -3
  50. package/tests/render_check.mjs +2 -2
  51. package/tests/ui_design_kit.mjs +3 -3
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.21.56",
6
- "core_contract": "1.21.56",
7
- "source_commit": "c1733e3cf35fa63e5eb229344890840f1087ca6a",
5
+ "core_version": "1.21.58",
6
+ "core_contract": "1.21.58",
7
+ "source_commit": "4bbf8bc0f626440da1b55c5674814cce6b291a23",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-10-05T01:00:04.386Z",
9
+ "built_at": "2026-10-05T03:05:29.962Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
- "docs_redacted": 582,
12
+ "docs_redacted": 583,
13
13
  "agent_docs_stubbed": 28,
14
- "functional_verbatim": 2933,
14
+ "functional_verbatim": 2944,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 3544,
20
- "tree_sha256": "fe395fff1f6f7127e8a09b8883ada6af94d00c3a62f8558143afa11f1ae31410",
19
+ "file_count": 3556,
20
+ "tree_sha256": "27538316c32493f9657a6695546fb3b58073c51a47552755662d5f7f2c870864",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -312,12 +312,12 @@
312
312
  {
313
313
  "path": "clients/bongos-client/README.md",
314
314
  "mode": "0000644",
315
- "sha256": "b22841ad3eebf8cddb58a5779d390608b0a6fc059199e9d00eac4654e537b7ab"
315
+ "sha256": "45f27ed681b4c56568ad5f7fcfe9aecddc32ab45d90f5b6321d641521995e981"
316
316
  },
317
317
  {
318
318
  "path": "clients/bongos-client/bongos-client.global.js",
319
319
  "mode": "0000644",
320
- "sha256": "daad891d3dc1b2bd80fed03e0811a707f05e4e6c149f08a0f2985e4a92472627"
320
+ "sha256": "a39ac01b75f7ad11b421497e2f1b7945befe18503be785b80978c25720c531ee"
321
321
  },
322
322
  {
323
323
  "path": "clients/bongos-client/examples/hello-world.mjs",
@@ -327,17 +327,17 @@
327
327
  {
328
328
  "path": "clients/bongos-client/index.cjs",
329
329
  "mode": "0000644",
330
- "sha256": "6a5c2c56d6b7f34a7976716b9982356f8ae7f3375d22301a36a8f1c431a244fc"
330
+ "sha256": "61c036ef4314deac3cfba830feba172a6b5f3c02bd5752cb10d8f1e378061ca7"
331
331
  },
332
332
  {
333
333
  "path": "clients/bongos-client/index.d.ts",
334
334
  "mode": "0000644",
335
- "sha256": "fce8f2221f75cd49325c58c0281162696871b3f8668c88e718192db2f025f11d"
335
+ "sha256": "f43a89f67674a49e86864acb0b91d7f8450200da3d84c657eb5bfefe0affcb0e"
336
336
  },
337
337
  {
338
338
  "path": "clients/bongos-client/index.mjs",
339
339
  "mode": "0000644",
340
- "sha256": "cd7c7fdf282d9f07851ce685bf2e51a80ff10b0a8a376ebba011bfda4df87350"
340
+ "sha256": "c6a9b382965b4ccf32df9e296662cb2d7c628184d34a974cef8b384fdfdf54e1"
341
341
  },
342
342
  {
343
343
  "path": "clients/bongos-client/package.json",
@@ -2137,7 +2137,7 @@
2137
2137
  {
2138
2138
  "path": "docs/adr/0336-a-guilds-record-is-the-sum-of-what-its-members-already-show.md",
2139
2139
  "mode": "0000644",
2140
- "sha256": "d62d6550483fe11386ce097cb37112adf76111dabcd898291ff3d5ce5b63f69d"
2140
+ "sha256": "d84323171525d785f9909f53bd554f6c7e42d46616e92010c43b142be8db2cc4"
2141
2141
  },
2142
2142
  {
2143
2143
  "path": "docs/adr/0337-the-hub-account-is-the-person-a-hall-account-is-their-seat-in-one-project.md",
@@ -2279,20 +2279,25 @@
2279
2279
  "mode": "0000644",
2280
2280
  "sha256": "882a01ac32ecddcb9b6f3dd88792e34164d7daafae4413eb3f64b502c0c59ddd"
2281
2281
  },
2282
+ {
2283
+ "path": "docs/adr/0365-a-guild-engages-a-project-through-each-members-own-door.md",
2284
+ "mode": "0000644",
2285
+ "sha256": "93c863a7f961cd91c052eee2188b16b9f360cec26478dde6225b304ee0e59f7d"
2286
+ },
2282
2287
  {
2283
2288
  "path": "docs/adr/README.md",
2284
2289
  "mode": "0000644",
2285
- "sha256": "037b81d2507eba161cd12c7daafb32071e6c65bc3383d0174e4ac96aa6ab6dc4"
2290
+ "sha256": "a81d1eeeb26ce4fde1731485e943d82ddb320bc60a5f1782f7a207b94da5fff5"
2286
2291
  },
2287
2292
  {
2288
2293
  "path": "docs/api-reference.md",
2289
2294
  "mode": "0000644",
2290
- "sha256": "1c3a511a87a8fd967251ee153657a969f186c4fd971c4f7a8724253c6dc63fba"
2295
+ "sha256": "07e654a8305093748950d3dba7fa861a989c0302cb941743a805d5a4a70cbd8c"
2291
2296
  },
2292
2297
  {
2293
2298
  "path": "docs/api/openapi.json",
2294
2299
  "mode": "0000644",
2295
- "sha256": "5c6a55cfd49fd5a9f82efffa43f9602f3f5da0f8fe5df5d0bfbcad8f31a4984f"
2300
+ "sha256": "3297e2694c5be1302ea4114a1e82a5864fcb09740d84b17aa837b7421d3f34c5"
2296
2301
  },
2297
2302
  {
2298
2303
  "path": "docs/architecture.md",
@@ -2317,12 +2322,12 @@
2317
2322
  {
2318
2323
  "path": "docs/copy-inventory.md",
2319
2324
  "mode": "0000644",
2320
- "sha256": "d516ed6158669e154f8ee895243c2a77dd052e9ae36159d868968a8f37502c20"
2325
+ "sha256": "efc5c678e20b7e06959619777502cd728465076521f49a4b935a17559ce7de7b"
2321
2326
  },
2322
2327
  {
2323
2328
  "path": "docs/copy-registry.json",
2324
2329
  "mode": "0000644",
2325
- "sha256": "081199fcca52e75029c0fb253026364ee31d28deb1ac97909726e7ce46ae879b"
2330
+ "sha256": "47b5f1e5c33600905dbbaf62b70d5092b92e610e29f602d85621a0d027bad3b7"
2326
2331
  },
2327
2332
  {
2328
2333
  "path": "docs/design/apex-pass-2-direction.md",
@@ -2822,7 +2827,7 @@
2822
2827
  {
2823
2828
  "path": "docs/file-map.md",
2824
2829
  "mode": "0000644",
2825
- "sha256": "b7de27150a5254d894b854f93b1548edabd5389592896c53e851ceca355199e4"
2830
+ "sha256": "f9943f6b4d4859358b4d2d71af9f043d47b2f5a70532bbb9489f34423c596ff8"
2826
2831
  },
2827
2832
  {
2828
2833
  "path": "docs/handoff-template.md",
@@ -2832,7 +2837,7 @@
2832
2837
  {
2833
2838
  "path": "docs/module-api-changelog.md",
2834
2839
  "mode": "0000644",
2835
- "sha256": "a8b7b803eef5ccb8414dd569594311a0588dfe3eefa12f0d7b5fe7ed0542d992"
2840
+ "sha256": "afe46e7c8c0e7cf4206fb794b6da671f0e575b63161d0ae8754431bd3762f519"
2836
2841
  },
2837
2842
  {
2838
2843
  "path": "docs/modules-contract.md",
@@ -2917,12 +2922,12 @@
2917
2922
  {
2918
2923
  "path": "docs/page-inventory.json",
2919
2924
  "mode": "0000644",
2920
- "sha256": "94ced703e26214d875077545403f98785c8aca04c65e8a4e9366e86c48d51b51"
2925
+ "sha256": "8f3f9d5bad79803f5bbf96ee25bbbe4bb4915455107bdf9adcc23c2ea04e7cd8"
2921
2926
  },
2922
2927
  {
2923
2928
  "path": "docs/page-readings.json",
2924
2929
  "mode": "0000644",
2925
- "sha256": "32c41646e8247b882fef14dc9ca92130938826a3d5a303b148fffb61697a83c4"
2930
+ "sha256": "aee98576821a49cc9fb3f7346ccced59ed6fe89c4d2672ef69ee9c9616589c0a"
2926
2931
  },
2927
2932
  {
2928
2933
  "path": "docs/project-context.template.md",
@@ -7702,7 +7707,7 @@
7702
7707
  {
7703
7708
  "path": "modules/platform-identity/application-echo.js",
7704
7709
  "mode": "0000644",
7705
- "sha256": "8217660dc23b57ba0fb54d6375aca9aec190c7abb1d70f9d44d4e290da272c64"
7710
+ "sha256": "ef065b3fbd898a8d16de176904bd04eb1a56a6b005705387d020fa6c6c888321"
7706
7711
  },
7707
7712
  {
7708
7713
  "path": "modules/platform-identity/builder-search.js",
@@ -7734,6 +7739,11 @@
7734
7739
  "mode": "0000644",
7735
7740
  "sha256": "3a0d3e28351c81b9b46d14073dc65eb2372b05d73ccbbe161ea7c9c0ba5c9f87"
7736
7741
  },
7742
+ {
7743
+ "path": "modules/platform-identity/guild-engagements.js",
7744
+ "mode": "0000644",
7745
+ "sha256": "7ad59a1bd96e9f8873a5110f00c34caa22ce1ff513b7454b970c3c67c2f89e78"
7746
+ },
7737
7747
  {
7738
7748
  "path": "modules/platform-identity/guild-map.js",
7739
7749
  "mode": "0000644",
@@ -7747,7 +7757,7 @@
7747
7757
  {
7748
7758
  "path": "modules/platform-identity/guilds.js",
7749
7759
  "mode": "0000644",
7750
- "sha256": "e048e674b087eae9035da5b3449d8f4029ec329a42333980eb21ac3e6c13a297"
7760
+ "sha256": "9f3231c4ae89a72742ba460224068fa34850fbe284a105ed5142d5a32f3572f3"
7751
7761
  },
7752
7762
  {
7753
7763
  "path": "modules/platform-identity/hub-device.js",
@@ -7924,6 +7934,11 @@
7924
7934
  "mode": "0000644",
7925
7935
  "sha256": "616c64ad4caa3579672ffcefe12badb83c6525ec45dcb68f15254da8b995fc25"
7926
7936
  },
7937
+ {
7938
+ "path": "modules/platform-identity/migrations/platform_identity_030_guild_engagements.sql",
7939
+ "mode": "0000644",
7940
+ "sha256": "ee1d7a42517c978a771dd418d61b783b4d34629497718a1ea9340a94a94aabce"
7941
+ },
7927
7942
  {
7928
7943
  "path": "modules/platform-identity/module.json",
7929
7944
  "mode": "0000644",
@@ -8007,12 +8022,12 @@
8007
8022
  {
8008
8023
  "path": "modules/platform-identity/routes/guilds.js",
8009
8024
  "mode": "0000644",
8010
- "sha256": "96ca33e6753cbacc40af0c1b766ec637fa6168692a5c6260ff25882d27beb6a2"
8025
+ "sha256": "63442c19efe41269fde8d7f3f114d24d508baaf602b5998d73ab112bdbca30c3"
8011
8026
  },
8012
8027
  {
8013
8028
  "path": "modules/platform-identity/routes/my-projects.js",
8014
8029
  "mode": "0000644",
8015
- "sha256": "c9a3541f976aa872d4645dccb6101b5ca046a7ea963b1665e9cb6ed9d3796f5c"
8030
+ "sha256": "d62b44c9d13310388b4015a273c9003664c56440295b780cc66a01d9496a5597"
8016
8031
  },
8017
8032
  {
8018
8033
  "path": "modules/platform-identity/routes/profile.js",
@@ -8022,7 +8037,7 @@
8022
8037
  {
8023
8038
  "path": "modules/platform-identity/routes/projects.js",
8024
8039
  "mode": "0000644",
8025
- "sha256": "094c1d54e11794acb09066d0d95b18dbe9100f8b87a67cd7eb1f56be30026f8e"
8040
+ "sha256": "8f309c8b0a02e82eca0fa5873a62f1f6b221c282af23d4f13911cb9e15313f92"
8026
8041
  },
8027
8042
  {
8028
8043
  "path": "modules/platform-identity/routes/public-profile.js",
@@ -8042,7 +8057,7 @@
8042
8057
  {
8043
8058
  "path": "modules/platform-identity/routes/sso.js",
8044
8059
  "mode": "0000644",
8045
- "sha256": "98e481e400429bfcb4170bd069d1853c8c7ee11a150806fa0d0fdfdb31725d12"
8060
+ "sha256": "0ecc3f416dbd03ee47a2c18a64faa6e0e0fac1d19c10a5246f7c77aa313d8264"
8046
8061
  },
8047
8062
  {
8048
8063
  "path": "modules/platform-identity/scouting-authz.js",
@@ -8792,7 +8807,7 @@
8792
8807
  {
8793
8808
  "path": "modules/public-landing/public/assets/cosmos.css",
8794
8809
  "mode": "0000644",
8795
- "sha256": "9b1ea823e7982bbb912940812bff37245dfc18a3326a8322418f164310aded06"
8810
+ "sha256": "399fa97b3a03a1ef99c6be925822fc36ab0d4a2b712dbe7cf7453efe9509e00e"
8796
8811
  },
8797
8812
  {
8798
8813
  "path": "modules/public-landing/public/assets/hub-bar.js",
@@ -9124,6 +9139,21 @@
9124
9139
  "mode": "0000644",
9125
9140
  "sha256": "790da865894449250dfd165d4d5411507f1df8d257520942727e83bef57770bc"
9126
9141
  },
9142
+ {
9143
+ "path": "modules/public-landing/public/guild.html",
9144
+ "mode": "0000644",
9145
+ "sha256": "583ac74502bc63ed808b7cad4867dbd4712a3ad04bb7995636f9f50103b48a35"
9146
+ },
9147
+ {
9148
+ "path": "modules/public-landing/public/guild.probes.json",
9149
+ "mode": "0000644",
9150
+ "sha256": "a8e148626bc48c41b248105fff61dc8d20c694755ad8812a8a773c3e147352c1"
9151
+ },
9152
+ {
9153
+ "path": "modules/public-landing/public/guild.states.json",
9154
+ "mode": "0000644",
9155
+ "sha256": "ec1df640ebf9047c817a65badd28a41167fd53e00399452b537b9b5035c6215e"
9156
+ },
9127
9157
  {
9128
9158
  "path": "modules/public-landing/public/index.html",
9129
9159
  "mode": "0000644",
@@ -9172,17 +9202,17 @@
9172
9202
  {
9173
9203
  "path": "modules/public-landing/public/projects.html",
9174
9204
  "mode": "0000644",
9175
- "sha256": "7c29e1a79202f3b1c52491ae612aa66980d3f3b129cddb6fc73f38e8cbe50ccf"
9205
+ "sha256": "1749ebaa1148f1288559f93c5edf9ca27f0a8a26eccee8f01ebbd92208d14f95"
9176
9206
  },
9177
9207
  {
9178
9208
  "path": "modules/public-landing/public/projects.probes.json",
9179
9209
  "mode": "0000644",
9180
- "sha256": "c0fa8801a87054b8183b685512ba3d6e8a2170192e32b4eb729415cc0ee025c5"
9210
+ "sha256": "d0681e889c1536ba24e038187b7c18db15aa0ccdcd71152e53f03390d2181b8f"
9181
9211
  },
9182
9212
  {
9183
9213
  "path": "modules/public-landing/public/projects.states.json",
9184
9214
  "mode": "0000644",
9185
- "sha256": "b895863eab617e0daf172ae3448f25e2e791ec12920f0ec719befaffce1f7319"
9215
+ "sha256": "ca468df0378d929b5332c282b64084aefa186cfc0d22cc2510611d6055477165"
9186
9216
  },
9187
9217
  {
9188
9218
  "path": "modules/public-landing/public/terms.html",
@@ -9664,6 +9694,11 @@
9664
9694
  "mode": "0000644",
9665
9695
  "sha256": "09926bf4a3d2816a3261d878747a0a74e81b89345e3aaf962a57c693560b9b3e"
9666
9696
  },
9697
+ {
9698
+ "path": "modules/ui-design/kit/fixtures/guilds.json",
9699
+ "mode": "0000644",
9700
+ "sha256": "ce48f794f2e1c1607c27278f4498ca9caad145f010e8d3dfc5d36c6241ae76b2"
9701
+ },
9667
9702
  {
9668
9703
  "path": "modules/ui-design/kit/fixtures/leaderboard.json",
9669
9704
  "mode": "0000644",
@@ -9694,6 +9729,11 @@
9694
9729
  "mode": "0000644",
9695
9730
  "sha256": "4dff6353b7fe0ed5769cdeb5daf16ac36afb707103126c432a1176568c451c41"
9696
9731
  },
9732
+ {
9733
+ "path": "modules/ui-design/kit/fixtures/me__guild-engagements.json",
9734
+ "mode": "0000644",
9735
+ "sha256": "162489516c87175269bf43a018fd97fa4acb199dd947897fad4d3d0a8900076f"
9736
+ },
9697
9737
  {
9698
9738
  "path": "modules/ui-design/kit/fixtures/my-projects.json",
9699
9739
  "mode": "0000644",
@@ -9767,7 +9807,7 @@
9767
9807
  {
9768
9808
  "path": "modules/ui-design/kit/serve.js",
9769
9809
  "mode": "0000644",
9770
- "sha256": "7bef43b640ab89cd1cb4639a106b1d05163302ce0103822e8a8fd9faffab6097"
9810
+ "sha256": "7bfca5557ddb82596cd1d0b9a1023f4f1fe81bd99fccbb7abee102b931549498"
9771
9811
  },
9772
9812
  {
9773
9813
  "path": "modules/ui-design/kit/tells.js",
@@ -9902,12 +9942,12 @@
9902
9942
  {
9903
9943
  "path": "package-lock.json",
9904
9944
  "mode": "0000644",
9905
- "sha256": "dacf9f1a7ee1548057a01ad09787cebe339d73dc4e78365e2a92e99a2d071dda"
9945
+ "sha256": "9329d96fc868bbb58efc9641f6e3de8051b4c3dcc6fd0f6ff5df1c4d4351c682"
9906
9946
  },
9907
9947
  {
9908
9948
  "path": "package.json",
9909
9949
  "mode": "0000644",
9910
- "sha256": "54cca5a51c54443a21c0a22459ec5b1cb4d40d8a80765a343a3700242fb3bca7"
9950
+ "sha256": "cf36cdd408c878e2bc602c110ba1ed09984d1a7e80fcfa9dc605960cc8db321c"
9911
9951
  },
9912
9952
  {
9913
9953
  "path": "public-docs/index.html",
@@ -9927,7 +9967,7 @@
9927
9967
  {
9928
9968
  "path": "release-notes.json",
9929
9969
  "mode": "0000644",
9930
- "sha256": "2ffe3fe5310c189db78d8f0b7209866dde2cce8398ed0ef1a962fa5c7e38cfa4"
9970
+ "sha256": "6219c16245804220029443b8e5c1aee4893e05aa32a2a7830cb21e6e3de158f4"
9931
9971
  },
9932
9972
  {
9933
9973
  "path": "scripts/cron/style_guide_audit.sh",
@@ -11132,7 +11172,7 @@
11132
11172
  {
11133
11173
  "path": "scripts/gds/run-unit-tests.js",
11134
11174
  "mode": "0000644",
11135
- "sha256": "90c8029f97db125917048f0dbd274a127c5819e823b1bf431670bbb66d3a2817"
11175
+ "sha256": "bd2c9b3fc469feda913bc58db6106b6bcc2c59bfacfc90fe23cb89c076ac1762"
11136
11176
  },
11137
11177
  {
11138
11178
  "path": "scripts/gds/runner-drift.js",
@@ -12147,7 +12187,7 @@
12147
12187
  {
12148
12188
  "path": "src/module-api.js",
12149
12189
  "mode": "0000644",
12150
- "sha256": "3b76f7e3d1b09c8a9ec90dd77a4720d7a9d89cd2bf3669abba32110f4ec07bfa"
12190
+ "sha256": "d2a7932b2b85110bb59fb6e3724b18c139d08b6463a060fe570d5a53a6acc23f"
12151
12191
  },
12152
12192
  {
12153
12193
  "path": "src/module-loader/catalog.js",
@@ -12192,7 +12232,7 @@
12192
12232
  {
12193
12233
  "path": "src/platform-server.js",
12194
12234
  "mode": "0000644",
12195
- "sha256": "f3852f7202391fc3a3aa5a09eb08ba9367d6507924af374f1b9cc409bf9e62d6"
12235
+ "sha256": "238f1b715e53bbc46ccec8c8a62036cfbc6c202df53839ce0f1b53ff87b2e3e7"
12196
12236
  },
12197
12237
  {
12198
12238
  "path": "src/role-responsibilities.js",
@@ -12432,7 +12472,7 @@
12432
12472
  {
12433
12473
  "path": "tests/applicant_profile_boundary.mjs",
12434
12474
  "mode": "0000644",
12435
- "sha256": "beefe27f5f753185cf3513f6576e55ee44680760ff2d8eed4ced93d56ec92b77"
12475
+ "sha256": "f7c94079d3c85cc6513dba591111f81fa45115e25d32469d67e949a8e7abee3d"
12436
12476
  },
12437
12477
  {
12438
12478
  "path": "tests/applicant_profile_read_bounds.mjs",
@@ -12442,7 +12482,7 @@
12442
12482
  {
12443
12483
  "path": "tests/application_echo.mjs",
12444
12484
  "mode": "0000644",
12445
- "sha256": "eec3a0404674e2a02d3ba7f38ec9fee92e5f06870240161d98986d525cb03d3f"
12485
+ "sha256": "29224350f0699a66f9cd96860519d159f707bc48d68f154ae86742ca1377e9ea"
12446
12486
  },
12447
12487
  {
12448
12488
  "path": "tests/application_lifecycle.mjs",
@@ -14339,6 +14379,16 @@
14339
14379
  "mode": "0000644",
14340
14380
  "sha256": "6e834f3cf75dd34ba30795c46bc401098053a56c967da8661128f34db71ff8c3"
14341
14381
  },
14382
+ {
14383
+ "path": "tests/guild_engagement.mjs",
14384
+ "mode": "0000644",
14385
+ "sha256": "739cff88d954b74aaaf93a66c9409fea248b36724700f6916898fd2b4c126769"
14386
+ },
14387
+ {
14388
+ "path": "tests/guild_engagement_db.mjs",
14389
+ "mode": "0000644",
14390
+ "sha256": "ba38bcb529ae53d08287e774abe156da5c7ea52c5428a32ef006b2be7445da85"
14391
+ },
14342
14392
  {
14343
14393
  "path": "tests/guild_map_db.mjs",
14344
14394
  "mode": "0000644",
@@ -14669,6 +14719,16 @@
14669
14719
  "mode": "0000644",
14670
14720
  "sha256": "5daff8488df269752d2e5992e60a03bb75cf85a5b8d5fcaa15703b12a5bb6b94"
14671
14721
  },
14722
+ {
14723
+ "path": "tests/hub_engagement_cards.mjs",
14724
+ "mode": "0000644",
14725
+ "sha256": "04d3965899d39c3771ff5c55d6bac5482d66d5f0c9e38a12b7b0b751a5bd37f9"
14726
+ },
14727
+ {
14728
+ "path": "tests/hub_guild_page.mjs",
14729
+ "mode": "0000644",
14730
+ "sha256": "77f2e01830dc84f486e75731e3db38f513fdca34c1449fa376497d3565852de4"
14731
+ },
14672
14732
  {
14673
14733
  "path": "tests/hub_invite_notices.mjs",
14674
14734
  "mode": "0000644",
@@ -15837,7 +15897,7 @@
15837
15897
  {
15838
15898
  "path": "tests/privacy_matrix.mjs",
15839
15899
  "mode": "0000644",
15840
- "sha256": "c409bf3f72c33086ccd75e65dc019297e38029c71b5bb6bec9ecc08e4c34d929"
15900
+ "sha256": "3a71c46b775910958f38b10cf0c8131cf07ac623e348e80444af65ac7e74ebf7"
15841
15901
  },
15842
15902
  {
15843
15903
  "path": "tests/probe_cache.mjs",
@@ -15952,7 +16012,7 @@
15952
16012
  {
15953
16013
  "path": "tests/project_invite_ui.mjs",
15954
16014
  "mode": "0000644",
15955
- "sha256": "0a0390f0801c3151a707a9b2c3cad3dc11d7455f6a7e01602eab8630ed08fb44"
16015
+ "sha256": "d95712f34de59acf31b8b78ad811786a26039ed9f051fd142d718049fe8e270f"
15956
16016
  },
15957
16017
  {
15958
16018
  "path": "tests/project_join_door.mjs",
@@ -16487,7 +16547,7 @@
16487
16547
  {
16488
16548
  "path": "tests/render_check.mjs",
16489
16549
  "mode": "0000644",
16490
- "sha256": "53debdbc60824766c19bb9f332c5406b76bf7914ca6fdc7a9672c583d5681d61"
16550
+ "sha256": "483e0fa4210d7db842377dc59708cce0f93804a765a30a32b2423cf149eab743"
16491
16551
  },
16492
16552
  {
16493
16553
  "path": "tests/render_deploy.mjs",
@@ -17457,7 +17517,7 @@
17457
17517
  {
17458
17518
  "path": "tests/ui_design_kit.mjs",
17459
17519
  "mode": "0000644",
17460
- "sha256": "a5038e3c5cab2ee1c673f2988069c747cb07decfc1b11bcf8f953d86dc27af97"
17520
+ "sha256": "aece50ff7edb20198518c11d3b8adfb725c896e5c9d1539b97e1f225ab51b0f1"
17461
17521
  },
17462
17522
  {
17463
17523
  "path": "tests/ui_design_kit_fit.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
- - 512 operations across 74 resource groups
8
+ - 515 operations across 74 resource groups
9
9
 
10
10
  ## Use it from your project
11
11
 
@@ -559,6 +559,8 @@ function createClient(opts = {}) {
559
559
  getGuildsSlug: (args) => request("GET", "/guilds/{slug}", { hasBody: false }, args),
560
560
  // PATCH /guilds/{slug} — rank: any-builder — PATCH /guilds/:slug
561
561
  patchGuildsSlug: (args) => request("PATCH", "/guilds/{slug}", { hasBody: true }, args),
562
+ // POST /guilds/{slug}/engagements — rank: any-builder — POST /guilds/:slug/engagements
563
+ postGuildsSlugEngagements: (args) => request("POST", "/guilds/{slug}/engagements", { hasBody: true }, args),
562
564
  // POST /guilds/{slug}/invites — rank: any-builder — POST /guilds/:slug/invites
563
565
  postGuildsSlugInvites: (args) => request("POST", "/guilds/{slug}/invites", { hasBody: true }, args),
564
566
  // GET /guilds/{slug}/members — rank: any-builder — GET /guilds/:slug/members
@@ -683,6 +685,8 @@ function createClient(opts = {}) {
683
685
  getMeEventSoundPrefs: (args) => request("GET", "/me/event-sound-prefs", { hasBody: false }, args),
684
686
  // PATCH /me/event-sound-prefs — rank: any-builder — PATCH /me/event-sound-prefs
685
687
  patchMeEventSoundPrefs: (args) => request("PATCH", "/me/event-sound-prefs", { hasBody: true }, args),
688
+ // GET /me/guild-engagements — rank: any-builder — GET /me/guild-engagements
689
+ getMeGuildEngagements: (args) => request("GET", "/me/guild-engagements", { hasBody: false }, args),
686
690
  // GET /me/guild-requests — rank: any-builder — GET /me/guild-requests
687
691
  getMeGuildRequests: (args) => request("GET", "/me/guild-requests", { hasBody: false }, args),
688
692
  // GET /me/guilds — rank: any-builder — GET /me/guilds
@@ -853,6 +857,8 @@ function createClient(opts = {}) {
853
857
  getProjectsFeatured: (args) => request("GET", "/projects/featured", { hasBody: false }, args),
854
858
  // POST /projects/invite — rank: metic+archon — POST /projects/invite
855
859
  postProjectsInvite: (args) => request("POST", "/projects/invite", { hasBody: true }, args),
860
+ // POST /projects/invite-guild — rank: metic+archon — POST /projects/invite-guild
861
+ postProjectsInviteGuild: (args) => request("POST", "/projects/invite-guild", { hasBody: true }, args),
856
862
  },
857
863
  "provisioning": {
858
864
  // GET /provisioning/control-plane — rank: archon — GET /provisioning/control-plane
@@ -558,6 +558,8 @@ function createClient(opts = {}) {
558
558
  getGuildsSlug: (args) => request("GET", "/guilds/{slug}", { hasBody: false }, args),
559
559
  // PATCH /guilds/{slug} — rank: any-builder — PATCH /guilds/:slug
560
560
  patchGuildsSlug: (args) => request("PATCH", "/guilds/{slug}", { hasBody: true }, args),
561
+ // POST /guilds/{slug}/engagements — rank: any-builder — POST /guilds/:slug/engagements
562
+ postGuildsSlugEngagements: (args) => request("POST", "/guilds/{slug}/engagements", { hasBody: true }, args),
561
563
  // POST /guilds/{slug}/invites — rank: any-builder — POST /guilds/:slug/invites
562
564
  postGuildsSlugInvites: (args) => request("POST", "/guilds/{slug}/invites", { hasBody: true }, args),
563
565
  // GET /guilds/{slug}/members — rank: any-builder — GET /guilds/:slug/members
@@ -682,6 +684,8 @@ function createClient(opts = {}) {
682
684
  getMeEventSoundPrefs: (args) => request("GET", "/me/event-sound-prefs", { hasBody: false }, args),
683
685
  // PATCH /me/event-sound-prefs — rank: any-builder — PATCH /me/event-sound-prefs
684
686
  patchMeEventSoundPrefs: (args) => request("PATCH", "/me/event-sound-prefs", { hasBody: true }, args),
687
+ // GET /me/guild-engagements — rank: any-builder — GET /me/guild-engagements
688
+ getMeGuildEngagements: (args) => request("GET", "/me/guild-engagements", { hasBody: false }, args),
685
689
  // GET /me/guild-requests — rank: any-builder — GET /me/guild-requests
686
690
  getMeGuildRequests: (args) => request("GET", "/me/guild-requests", { hasBody: false }, args),
687
691
  // GET /me/guilds — rank: any-builder — GET /me/guilds
@@ -852,6 +856,8 @@ function createClient(opts = {}) {
852
856
  getProjectsFeatured: (args) => request("GET", "/projects/featured", { hasBody: false }, args),
853
857
  // POST /projects/invite — rank: metic+archon — POST /projects/invite
854
858
  postProjectsInvite: (args) => request("POST", "/projects/invite", { hasBody: true }, args),
859
+ // POST /projects/invite-guild — rank: metic+archon — POST /projects/invite-guild
860
+ postProjectsInviteGuild: (args) => request("POST", "/projects/invite-guild", { hasBody: true }, args),
855
861
  },
856
862
  "provisioning": {
857
863
  // GET /provisioning/control-plane — rank: archon — GET /provisioning/control-plane
@@ -98,6 +98,7 @@ export interface GetMeAchievementsResponse { unlocked: unknown }
98
98
  export interface GetMeCrossProjectResponse { hide_stats: boolean; profile_state: unknown; handle: unknown; display_name: unknown; bio: unknown; links: unknown; cross_project: unknown; account_visibility: unknown; recruiter_discoverable: unknown; recruiter_discoverable_effective: unknown }
99
99
  export interface GetMeDisplayNameResponse { display_name: unknown; max_length: unknown }
100
100
  export interface GetMeEventSoundPrefsResponse { prefs: unknown; effective: unknown; effective_wav: unknown; events: unknown }
101
+ export interface GetMeGuildEngagementsResponse { engagements: unknown; count: unknown }
101
102
  export interface GetMeGuildRequestsResponse { incoming: unknown; outgoing: unknown; incoming_count: unknown; outgoing_count: unknown }
102
103
  export interface GetMeGuildsResponse { guilds: unknown; count: unknown }
103
104
  export interface GetMeRecentShipsResponse { ships: unknown }
@@ -369,6 +370,8 @@ export interface PostGuildRequestsIdAcceptRequest { visibility?: string; counted
369
370
  export interface PostGuildRequestsIdAcceptResponse { status: unknown }
370
371
  export interface PostGuildsRequest { slug: string; name: string; description?: string; visibility: string }
371
372
  export interface PostGuildsResponse { guild: unknown }
373
+ export interface PostGuildsSlugEngagementsRequest { origin: string }
374
+ export interface PostGuildsSlugEngagementsResponse { engagement: unknown }
372
375
  export interface PostGuildsSlugInvitesRequest { handles: string[] }
373
376
  export interface PostGuildsSlugInvitesResponse { results: unknown; count: unknown }
374
377
  export interface PostGuildsSlugRequestsRequest { counted_in_totals?: unknown }
@@ -412,7 +415,7 @@ export interface PostModulesKeySubmitRequest { signed_by?: string }
412
415
  export interface PostModulesKeySubmitResponse { ok: boolean; submission: unknown }
413
416
  export interface PostMyProjectsClientIdLeaveResponse { ok: boolean; left: unknown }
414
417
  export interface PostMyProjectsInvitesClientIdDeclineResponse { ok: boolean; accepted: boolean }
415
- export interface PostMyProjectsJoinRequest { origin: string; note?: string }
418
+ export interface PostMyProjectsJoinRequest { origin: string; note?: string; guild?: string }
416
419
  export interface PostMyProjectsJoinResponse { ok: boolean; status: unknown; project: unknown; message: unknown }
417
420
  export interface PostNpmReleasePreviewRequest { version: string }
418
421
  export interface PostNpmReleaseReleaseRequest { version: string }
@@ -424,6 +427,8 @@ export interface PostPageNotesIdeasRequest { page_id: string; page_path?: string
424
427
  export interface PostPageNotesIdeasResponse { ideas: unknown; split_by: unknown }
425
428
  export interface PostPageNotesRequest { page_id: string; page_path?: string; page_title?: string }
426
429
  export interface PostPageNotesResponse { note: unknown; images: unknown }
430
+ export interface PostProjectsInviteGuildRequest { client_id: string; guild: string }
431
+ export interface PostProjectsInviteGuildResponse { invited: boolean; guild: unknown; invites: unknown; count: unknown }
427
432
  export interface PostProjectsInviteRequest { client_id: string; github_login: string }
428
433
  export interface PostProjectsInviteResponse { invited: boolean; invite_url: unknown }
429
434
  export interface PostProjectsProjectIdSpecialitiesRequest { name: string; discipline: string; summary?: string; contract_md?: string; visibility?: string; sellable?: boolean; skills?: string[] }
@@ -481,7 +486,7 @@ export interface PostSpecialitiesResponse { speciality: unknown }
481
486
  export interface PostSsoActivityRollupRequest { client_id: string; client_secret: string; github_id: StringifiableId; credits?: number; tasks_shipped?: number; karma?: number; rank?: string; disciplines?: unknown; recent_ships?: unknown; crafts?: unknown }
482
487
  export interface PostSsoActivityRollupResponse { ok: boolean }
483
488
  export interface PostSsoApplicantProfileRequest { client_id: string; client_secret: string; github_id: StringifiableId }
484
- export interface PostSsoApplicantProfileResponse { profile: unknown }
489
+ export interface PostSsoApplicantProfileResponse { profile: unknown; guild: unknown }
485
490
  export interface PostSsoDevicePollRequest { device_code: string }
486
491
  export interface PostSsoDeviceStartRequest { origin: string }
487
492
  export interface PostSsoFeedbackRequest { client_id: string; client_secret: string; github_id: StringifiableId; message: string; kind?: string; context?: unknown }
@@ -1041,6 +1046,8 @@ export interface BongosClient {
1041
1046
  getGuildsSlug(args?: RequestArgs): Promise<GetGuildsSlugResponse>;
1042
1047
  /** PATCH /guilds/{slug} — rank: any-builder */
1043
1048
  patchGuildsSlug(args?: RequestArgs & { body?: PatchGuildsSlugRequest }): Promise<PatchGuildsSlugResponse>;
1049
+ /** POST /guilds/{slug}/engagements — rank: any-builder */
1050
+ postGuildsSlugEngagements(args: RequestArgs & { body: PostGuildsSlugEngagementsRequest }): Promise<PostGuildsSlugEngagementsResponse>;
1044
1051
  /** POST /guilds/{slug}/invites — rank: any-builder */
1045
1052
  postGuildsSlugInvites(args: RequestArgs & { body: PostGuildsSlugInvitesRequest }): Promise<PostGuildsSlugInvitesResponse>;
1046
1053
  /** GET /guilds/{slug}/members — rank: any-builder */
@@ -1165,6 +1172,8 @@ export interface BongosClient {
1165
1172
  getMeEventSoundPrefs(args?: RequestArgs): Promise<GetMeEventSoundPrefsResponse>;
1166
1173
  /** PATCH /me/event-sound-prefs — rank: any-builder */
1167
1174
  patchMeEventSoundPrefs(args?: RequestArgs): Promise<PatchMeEventSoundPrefsResponse>;
1175
+ /** GET /me/guild-engagements — rank: any-builder */
1176
+ getMeGuildEngagements(args?: RequestArgs): Promise<GetMeGuildEngagementsResponse>;
1168
1177
  /** GET /me/guild-requests — rank: any-builder */
1169
1178
  getMeGuildRequests(args?: RequestArgs): Promise<GetMeGuildRequestsResponse>;
1170
1179
  /** GET /me/guilds — rank: any-builder */
@@ -1335,6 +1344,8 @@ export interface BongosClient {
1335
1344
  getProjectsFeatured(args?: RequestArgs): Promise<GetProjectsFeaturedResponse>;
1336
1345
  /** POST /projects/invite — rank: metic+archon */
1337
1346
  postProjectsInvite(args: RequestArgs & { body: PostProjectsInviteRequest }): Promise<PostProjectsInviteResponse>;
1347
+ /** POST /projects/invite-guild — rank: metic+archon */
1348
+ postProjectsInviteGuild(args: RequestArgs & { body: PostProjectsInviteGuildRequest }): Promise<PostProjectsInviteGuildResponse>;
1338
1349
  };
1339
1350
  "provisioning": {
1340
1351
  /** GET /provisioning/control-plane — rank: archon */
@@ -555,6 +555,8 @@ export function createClient(opts = {}) {
555
555
  getGuildsSlug: (args) => request("GET", "/guilds/{slug}", { hasBody: false }, args),
556
556
  // PATCH /guilds/{slug} — rank: any-builder — PATCH /guilds/:slug
557
557
  patchGuildsSlug: (args) => request("PATCH", "/guilds/{slug}", { hasBody: true }, args),
558
+ // POST /guilds/{slug}/engagements — rank: any-builder — POST /guilds/:slug/engagements
559
+ postGuildsSlugEngagements: (args) => request("POST", "/guilds/{slug}/engagements", { hasBody: true }, args),
558
560
  // POST /guilds/{slug}/invites — rank: any-builder — POST /guilds/:slug/invites
559
561
  postGuildsSlugInvites: (args) => request("POST", "/guilds/{slug}/invites", { hasBody: true }, args),
560
562
  // GET /guilds/{slug}/members — rank: any-builder — GET /guilds/:slug/members
@@ -679,6 +681,8 @@ export function createClient(opts = {}) {
679
681
  getMeEventSoundPrefs: (args) => request("GET", "/me/event-sound-prefs", { hasBody: false }, args),
680
682
  // PATCH /me/event-sound-prefs — rank: any-builder — PATCH /me/event-sound-prefs
681
683
  patchMeEventSoundPrefs: (args) => request("PATCH", "/me/event-sound-prefs", { hasBody: true }, args),
684
+ // GET /me/guild-engagements — rank: any-builder — GET /me/guild-engagements
685
+ getMeGuildEngagements: (args) => request("GET", "/me/guild-engagements", { hasBody: false }, args),
682
686
  // GET /me/guild-requests — rank: any-builder — GET /me/guild-requests
683
687
  getMeGuildRequests: (args) => request("GET", "/me/guild-requests", { hasBody: false }, args),
684
688
  // GET /me/guilds — rank: any-builder — GET /me/guilds
@@ -849,6 +853,8 @@ export function createClient(opts = {}) {
849
853
  getProjectsFeatured: (args) => request("GET", "/projects/featured", { hasBody: false }, args),
850
854
  // POST /projects/invite — rank: metic+archon — POST /projects/invite
851
855
  postProjectsInvite: (args) => request("POST", "/projects/invite", { hasBody: true }, args),
856
+ // POST /projects/invite-guild — rank: metic+archon — POST /projects/invite-guild
857
+ postProjectsInviteGuild: (args) => request("POST", "/projects/invite-guild", { hasBody: true }, args),
852
858
  },
853
859
  "provisioning": {
854
860
  // GET /provisioning/control-plane — rank: archon — GET /provisioning/control-plane
@@ -143,6 +143,8 @@ The guild page lives at **`/g/<slug>`** on the hub, the sibling of `/u/<handle>`
143
143
 
144
144
  ### D7 — A guild engages a project only through the individual door, one person at a time
145
145
 
146
+ > **Amended by [ADR 0365](0365-a-guild-engages-a-project-through-each-members-own-door.md) (2026-10-05):** after ADR 0353 the hub writes no invites, so "a project invites a guild" returns one hall hand-off link per public-roster member instead of fanning out hub invites; the guild label reaches the queue in R28.
147
+
146
148
  A project still admits **people**, through the one door ADR 0201 built, so no new admission path exists. The hub holds a guild-level **engagement** row: `(guild_id, client_id, kind ∈ {'apply','invited'}, created_at)`. It records no filer, for the same reason the guild row keeps no creator. It is **statusless**, for the ADR 0201 D1.3 reason (the hub may not hold an admission fact about someone else's project), and it ages out read-time at 30 days.
147
149
 
148
150
  - **A guild applies** (the owner files it). Each member sees "G is applying to P — apply with them?" in their own inbox. **Opting in is applying as yourself** through the existing relay (`POST /my-projects/join`, vouched, echoed), with the engagement attached to that member's application echo. Nobody reaches P without their own act. P receives ordinary vouched applications and approves each with `access_request.review`, exactly as today. The **guild label reaches P's queue through the live applicant-profile read** (ADR 0260's `POST /sso/applicant-profile`, which already reads the echo), returning `guild: { slug, name }` when the echo carries an engagement. There is no new body field, header or instance column, so a project on any core pin keeps working (the ADR 0201 D2.2 compatibility rule). For a public guild, the reviewer may open its public page. For an unlisted guild, the reviewer sees its name and the applying members' own applicant views, and nothing else.