@bongos/core 1.21.57 → 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 (47) hide show
  1. package/.bongos-core.json +82 -47
  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 +360 -352
  13. package/docs/copy-registry.json +479 -397
  14. package/docs/file-map.md +3 -0
  15. package/docs/module-api-changelog.md +2 -0
  16. package/docs/page-inventory.json +7 -1
  17. package/docs/page-readings.json +828 -811
  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 +64 -2
  28. package/modules/public-landing/public/guild.probes.json +13 -3
  29. package/modules/public-landing/public/guild.states.json +10 -5
  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/me__guild-engagements.json +7 -0
  34. package/modules/ui-design/kit/serve.js +54 -5
  35. package/package-lock.json +2 -2
  36. package/package.json +1 -1
  37. package/release-notes.json +6 -0
  38. package/scripts/gds/run-unit-tests.js +5 -0
  39. package/src/module-api.js +1 -1
  40. package/tests/applicant_profile_boundary.mjs +104 -1
  41. package/tests/application_echo.mjs +91 -5
  42. package/tests/guild_engagement.mjs +881 -0
  43. package/tests/guild_engagement_db.mjs +240 -0
  44. package/tests/hub_engagement_cards.mjs +307 -0
  45. package/tests/hub_guild_page.mjs +94 -7
  46. package/tests/privacy_matrix.mjs +99 -9
  47. package/tests/project_invite_ui.mjs +187 -3
package/docs/file-map.md CHANGED
@@ -360,6 +360,9 @@ tests/
360
360
  ├── applicant_profile_boundary.mjs ← (task 1002972, goal 1000045 C4, privacy spec D7, ADR 0241): THE D7 BOUNDARY proof for the applicant view a reviewer sees. Whitelists read from the MODULES’ own exports — the private branch against `recruiter-sliver`’s `SLIVER_KEYS`/`SLIVER_KEYS_HIDDEN`, the public branch against the public-page payload’s key list — so a third shape (the “new disclosure class” D7 forbids) reds this file. Pins THE CONSENT SWAP in both directions on the same account: a private builder who never opted into recruiting gets an applicant view and gets `null` from `getRecruiterSliver`, so a refactor routing the port through the recruiter sliver cannot pass quietly. `hide_stats` beats the application in both branches; provisional and terms-never-accepted disclose nothing; planted sentinels asserted absent from the whole body with the avatar-embedded `github_id` pinned as the one honest exception. Plus the federated gate (ADR 0205): no echo → 404 and NO account row read (asserted on the statement log), the witness matched against the AUTHENTICATED client, an out-of-window echo stops working, and `Cache-Control: no-store`. Real router + real HTTP over in-memory tables filtered by each statement’s own WHERE clause. DB-free `unit` lane, asserted in the file itself.
361
361
  ├── recruiter_sliver_boundary.mjs ← (task 1002968, goal 1000045 C2/C5, privacy spec D3, ADR 0215): THE PRE-ACCEPT BOUNDARY proof for the D3 recruiter sliver. A WHITELIST over the module's own exported key list (a sixth key fails whether or not this file was told about it), planted improbable sentinels asserted absent from the WHOLE response body with two controls against vacuity, the ceiling assertion (the handle a recruiter is handed 404s at `GET /profiles/:handle`, with a 200 control) and the gate (both recruiting routes admit the same two audiences and refuse byte-identically). Real router + real HTTP over an in-memory table filtered by each statement's own WHERE clause. DB-free `unit` lane, asserted in the file itself.
362
362
  ├── privacy_matrix.mjs ← (task 1002973, goal 1000110, privacy spec D2/D3/D4): THE PRIVACY MATRIX as one table — a fixture account per D2 row (provisional, public shown, public hidden, private, private+discoverable, private+discoverable+hidden, opted out of recruiting) × every viewer (Anon, Builder, Recruiter, Self) × every cross-project surface that exists (`/profiles/:handle`, `/me/cross-project`, `/community/search`, `/community/leaderboard`, `/scouting`, `/scouting/:handle`), asserted against a literal transcription of the spec's cells; then the rules swept across EVERY recorded response (hidden numbers reach nobody but Self, private/provisional are absent, private+discoverable is named only by the sliver), the D3 key lists pinned, and an expired invite refused by the real `hasInvitedAccessRequest`. Real routers + real HTTP over in-memory tables filtered by each statement's own WHERE (boolean structure read, calibrated against the JS twins). The declined-invite row is task 1004444's. DB-free `unit` lane, asserted in the file itself.
363
+ ├── guild_engagement.mjs ← (task 1002303, goal 1000110, ADR 0365): a guild engaging a project through each member's own door, DB-free over the real routes — owner-only filing (the owner check inside the INSERT), one identical 404 for an unknown, inactive or non-public project, the inbox read's naming / joined-at rules and exclusions (no client_id out), invite-guild returning hall hand-off links for the PUBLIC roster only (unlisted == unknown), the join's `guild` resolving or 409ing with nothing relayed, no status anywhere. DB-free `unit` lane.
364
+ ├── guild_engagement_db.mjs ← (task 1002303): the same against real Postgres — migration 030 on 025 + 016, cascade on dissolve, SET NULL on the echo, the upsert restarting the 30-day window, a stale row invisible, a later joiner not seeing an invite. INTEGRATION lane; self-skips without a database.
365
+ ├── hub_engagement_cards.mjs ← (task 1002303, ADR 0365): the guild cards in `/projects?view=mine`'s invitations area, EXECUTED by the vm-slice idiom — "G is applying to P — apply with them?" and "P invited G", Apply sending the join with `guild`, the 409 `guild_engagement_gone` line with Apply on my own, rows missing a slug or an http(s) origin dropped, the section showing while either list has a row. DB-free `unit` lane.
363
366
  └── public_task_resolver.mjs ← (#604): the public `/public/tasks/:id` projection — title/value_summary exposed only for shipped|confirmed; withheld for in-flight so unshipped/security task names can't leak.
364
367
  ```
365
368
 
@@ -2941,5 +2941,7 @@ is load-bearing: the script throws rather than guess if it is missing, and
2941
2941
  landed since 1.21.55 with no explicit bump. run 37249603605. (task 1002620)
2942
2942
  1.21.57 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2943
2943
  landed since 1.21.56 with no explicit bump. run 37251840378. (task 1002620)
2944
+ 1.21.58 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2945
+ landed since 1.21.57 with no explicit bump. run 37257938390. (task 1002620)
2944
2946
  ---------------------------------------------------------------------------
2945
2947
  ```
@@ -13,7 +13,7 @@
13
13
  "pages": 43,
14
14
  "surfaces": 3,
15
15
  "with_states": 36,
16
- "states": 280
16
+ "states": 286
17
17
  },
18
18
  "surfaces": [
19
19
  {
@@ -1379,6 +1379,8 @@
1379
1379
  "in-unlisted-owner",
1380
1380
  "in-not-member",
1381
1381
  "in-missing",
1382
+ "in-owner-apply",
1383
+ "in-owner-applied",
1382
1384
  "in-profile-band"
1383
1385
  ]
1384
1386
  },
@@ -1465,6 +1467,10 @@
1465
1467
  "in-manage-kind",
1466
1468
  "in-manage-invite",
1467
1469
  "in-manage-invite-handoff",
1470
+ "in-manage-invite-guild",
1471
+ "in-mine-engagements",
1472
+ "in-mine-engagement-note",
1473
+ "in-mine-engagement-applied",
1468
1474
  "in-manage-app-live",
1469
1475
  "in-manage-app-building",
1470
1476
  "in-manage-app-failed",