@bongos/core 1.19.1026 → 1.19.1027
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.
- package/.bongos-core.json +60 -30
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +38 -0
- package/clients/bongos-client/index.cjs +38 -0
- package/clients/bongos-client/index.d.ts +60 -0
- package/clients/bongos-client/index.mjs +38 -0
- package/docs/adr/0213-platform-terms-acceptance-is-the-hubs-own-witness.md +4 -2
- package/docs/api/openapi.json +1345 -182
- package/docs/api-reference.md +29 -2
- package/docs/copy-inventory.md +3 -3
- package/docs/copy-registry.json +6 -6
- package/docs/module-api-changelog.md +2 -0
- package/modules/platform-identity/connections.js +1 -0
- package/modules/platform-identity/guilds.js +705 -0
- package/modules/platform-identity/migrations/platform_identity_025_guilds.sql +100 -0
- package/modules/platform-identity/module.json +1 -1
- package/modules/platform-identity/read-rate-limit.js +3 -2
- package/modules/platform-identity/routes/guilds-public.js +57 -0
- package/modules/platform-identity/routes/guilds.js +393 -0
- package/modules/platform-identity/terms-acceptance.js +14 -5
- package/modules/public-landing/public/terms.html +3 -3
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/scripts/gds/run-unit-tests.js +5 -0
- package/src/module-api.js +1 -1
- package/tests/guilds_api.mjs +521 -0
- package/tests/guilds_db.mjs +343 -0
- package/tests/own_scope_guard.mjs +5 -0
- package/tests/terms_acceptance.mjs +74 -28
- package/tests/terms_grandfather_db.mjs +2 -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.19.
|
|
6
|
-
"core_contract": "1.19.
|
|
7
|
-
"source_commit": "
|
|
5
|
+
"core_version": "1.19.1027",
|
|
6
|
+
"core_contract": "1.19.1027",
|
|
7
|
+
"source_commit": "6ba25af665a2f544e86c0fafd73c402ca5716cad",
|
|
8
8
|
"source_ref": "HEAD",
|
|
9
|
-
"built_at": "2026-09-25T20:
|
|
9
|
+
"built_at": "2026-09-25T20:46:56.140Z",
|
|
10
10
|
"redaction": {
|
|
11
11
|
"model": "docs-redacted+functional-verbatim",
|
|
12
12
|
"docs_redacted": 529,
|
|
13
13
|
"agent_docs_stubbed": 26,
|
|
14
|
-
"functional_verbatim":
|
|
14
|
+
"functional_verbatim": 2457,
|
|
15
15
|
"rules": 3,
|
|
16
16
|
"gate_literals": 3,
|
|
17
17
|
"gate": "passed"
|
|
18
18
|
},
|
|
19
|
-
"file_count":
|
|
20
|
-
"tree_sha256": "
|
|
19
|
+
"file_count": 3012,
|
|
20
|
+
"tree_sha256": "850a42b363b6a246877f08bb5cede160376f9e87f453846139ba8351fa666b97",
|
|
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": "
|
|
355
|
+
"sha256": "217dec95a590eee3d3b3e7e7670882ff4851d596b9a3329215d563ab9509f5f7"
|
|
356
356
|
},
|
|
357
357
|
{
|
|
358
358
|
"path": "clients/bongos-client/bongos-client.global.js",
|
|
359
359
|
"mode": "0000644",
|
|
360
|
-
"sha256": "
|
|
360
|
+
"sha256": "f96abe3e0fad14745f5aa2f578e28316cf1c24cffa32aa389db2671ec0daa4b7"
|
|
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": "
|
|
370
|
+
"sha256": "c4a5ecc76df6099d9e1bd3e76ed0164b460e61aaf34de46fa023e22c8781a122"
|
|
371
371
|
},
|
|
372
372
|
{
|
|
373
373
|
"path": "clients/bongos-client/index.d.ts",
|
|
374
374
|
"mode": "0000644",
|
|
375
|
-
"sha256": "
|
|
375
|
+
"sha256": "5f6b4bc9bb1f216cdedc6a74679d2e38f72ad9a1c561411e39a571d632dccf3d"
|
|
376
376
|
},
|
|
377
377
|
{
|
|
378
378
|
"path": "clients/bongos-client/index.mjs",
|
|
379
379
|
"mode": "0000644",
|
|
380
|
-
"sha256": "
|
|
380
|
+
"sha256": "de19e3ed58c7ba6792de3c1781e3b7fa8342643c35daf713a9cf4290ae61fbbd"
|
|
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": "
|
|
1565
|
+
"sha256": "fd6c8d2e3868f2ba42262406b9fbd9ba12cb547a9eac61ddb7b9422afde6b3ab"
|
|
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": "
|
|
2195
|
+
"sha256": "d6cad3e0d4212d9e595905f44b506e6d656526288b93e00631438c81a829f9bf"
|
|
2196
2196
|
},
|
|
2197
2197
|
{
|
|
2198
2198
|
"path": "docs/api/openapi.json",
|
|
2199
2199
|
"mode": "0000644",
|
|
2200
|
-
"sha256": "
|
|
2200
|
+
"sha256": "41bfca24af08bc206253d9288e14c71d6a92e2ccc3669af3752319e86ea42831"
|
|
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": "
|
|
2225
|
+
"sha256": "7d0160679343e6b05d78c9cd1fcfa56c214020d5360ee11385f008e829a16d71"
|
|
2226
2226
|
},
|
|
2227
2227
|
{
|
|
2228
2228
|
"path": "docs/copy-registry.json",
|
|
2229
2229
|
"mode": "0000644",
|
|
2230
|
-
"sha256": "
|
|
2230
|
+
"sha256": "28f74fca91a4b66a70d996c953073e1c01cd3a8c2ca90fdde915ccbdc4294cbf"
|
|
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": "
|
|
2760
|
+
"sha256": "27d5ece78124b128720d5b52d545efd8c5dae978931f254e59ef5f4abeb5e375"
|
|
2761
2761
|
},
|
|
2762
2762
|
{
|
|
2763
2763
|
"path": "docs/modules-contract.md",
|
|
@@ -6487,7 +6487,12 @@
|
|
|
6487
6487
|
{
|
|
6488
6488
|
"path": "modules/platform-identity/connections.js",
|
|
6489
6489
|
"mode": "0000644",
|
|
6490
|
-
"sha256": "
|
|
6490
|
+
"sha256": "793e96feacef39ec52166dd7372c894a25679c7137c9c3c5e9df38ec323f1c4a"
|
|
6491
|
+
},
|
|
6492
|
+
{
|
|
6493
|
+
"path": "modules/platform-identity/guilds.js",
|
|
6494
|
+
"mode": "0000644",
|
|
6495
|
+
"sha256": "5f1189de2d33fe550b4a84b8105ccb0a0b60a08d342fde6c9bfcec30b969d4ff"
|
|
6491
6496
|
},
|
|
6492
6497
|
{
|
|
6493
6498
|
"path": "modules/platform-identity/hub-device.js",
|
|
@@ -6629,10 +6634,15 @@
|
|
|
6629
6634
|
"mode": "0000644",
|
|
6630
6635
|
"sha256": "1a1a2a8861a11e93da73db38362353409edf988fdb7b1c025c1030acb29da937"
|
|
6631
6636
|
},
|
|
6637
|
+
{
|
|
6638
|
+
"path": "modules/platform-identity/migrations/platform_identity_025_guilds.sql",
|
|
6639
|
+
"mode": "0000644",
|
|
6640
|
+
"sha256": "72be4f7e3aa3afa47dd78de7a57dcdf57b877675b44fbdf02f6607a8632e1787"
|
|
6641
|
+
},
|
|
6632
6642
|
{
|
|
6633
6643
|
"path": "modules/platform-identity/module.json",
|
|
6634
6644
|
"mode": "0000644",
|
|
6635
|
-
"sha256": "
|
|
6645
|
+
"sha256": "bb9a7c6bc98e138dd49634e72bf04fcff80b7d0625106ea752da9d89311bc3f5"
|
|
6636
6646
|
},
|
|
6637
6647
|
{
|
|
6638
6648
|
"path": "modules/platform-identity/origin-containment.js",
|
|
@@ -6677,7 +6687,7 @@
|
|
|
6677
6687
|
{
|
|
6678
6688
|
"path": "modules/platform-identity/read-rate-limit.js",
|
|
6679
6689
|
"mode": "0000644",
|
|
6680
|
-
"sha256": "
|
|
6690
|
+
"sha256": "db17891c79447950b68d55e6e81db6f3c524491bac5ee1caa375b0611c3248c7"
|
|
6681
6691
|
},
|
|
6682
6692
|
{
|
|
6683
6693
|
"path": "modules/platform-identity/recruiter-sliver.js",
|
|
@@ -6699,6 +6709,16 @@
|
|
|
6699
6709
|
"mode": "0000644",
|
|
6700
6710
|
"sha256": "6132e21ae24783f11796b5084067622742dd5c05b17a2c74780d734e337f8dfc"
|
|
6701
6711
|
},
|
|
6712
|
+
{
|
|
6713
|
+
"path": "modules/platform-identity/routes/guilds-public.js",
|
|
6714
|
+
"mode": "0000644",
|
|
6715
|
+
"sha256": "1a8d2d70d4b9f5e4cfc93bd1f6d83911ab625463866527838d74944162f978de"
|
|
6716
|
+
},
|
|
6717
|
+
{
|
|
6718
|
+
"path": "modules/platform-identity/routes/guilds.js",
|
|
6719
|
+
"mode": "0000644",
|
|
6720
|
+
"sha256": "96ca33e6753cbacc40af0c1b766ec637fa6168692a5c6260ff25882d27beb6a2"
|
|
6721
|
+
},
|
|
6702
6722
|
{
|
|
6703
6723
|
"path": "modules/platform-identity/routes/my-projects.js",
|
|
6704
6724
|
"mode": "0000644",
|
|
@@ -6742,7 +6762,7 @@
|
|
|
6742
6762
|
{
|
|
6743
6763
|
"path": "modules/platform-identity/terms-acceptance.js",
|
|
6744
6764
|
"mode": "0000644",
|
|
6745
|
-
"sha256": "
|
|
6765
|
+
"sha256": "00d3d1460d1fa0d224e487a1701309b4725f2872a36a0cfe283cbd21b96d1e53"
|
|
6746
6766
|
},
|
|
6747
6767
|
{
|
|
6748
6768
|
"path": "modules/platform-identity/tests/activity-snapshots.mjs",
|
|
@@ -7582,7 +7602,7 @@
|
|
|
7582
7602
|
{
|
|
7583
7603
|
"path": "modules/public-landing/public/terms.html",
|
|
7584
7604
|
"mode": "0000644",
|
|
7585
|
-
"sha256": "
|
|
7605
|
+
"sha256": "5f03b04a5e3d02c24941c7223a39e749e4123aabbbadf966c2c0da9b25788104"
|
|
7586
7606
|
},
|
|
7587
7607
|
{
|
|
7588
7608
|
"path": "modules/security/CLAUDE.md",
|
|
@@ -8337,12 +8357,12 @@
|
|
|
8337
8357
|
{
|
|
8338
8358
|
"path": "package-lock.json",
|
|
8339
8359
|
"mode": "0000644",
|
|
8340
|
-
"sha256": "
|
|
8360
|
+
"sha256": "6ace585be8981c530bb44df30385a399e2c6bc4ef4611ec01f3139884e9ea4dd"
|
|
8341
8361
|
},
|
|
8342
8362
|
{
|
|
8343
8363
|
"path": "package.json",
|
|
8344
8364
|
"mode": "0000644",
|
|
8345
|
-
"sha256": "
|
|
8365
|
+
"sha256": "29c0b258397c7ddee59eb7de9466c98c842865e84c6272b4c262580477217f13"
|
|
8346
8366
|
},
|
|
8347
8367
|
{
|
|
8348
8368
|
"path": "public-docs/index.html",
|
|
@@ -9467,7 +9487,7 @@
|
|
|
9467
9487
|
{
|
|
9468
9488
|
"path": "scripts/gds/run-unit-tests.js",
|
|
9469
9489
|
"mode": "0000644",
|
|
9470
|
-
"sha256": "
|
|
9490
|
+
"sha256": "fa6c19a9c41d9613af2980cd6f16193cd8aef8621fb517eb2372db042e69dd41"
|
|
9471
9491
|
},
|
|
9472
9492
|
{
|
|
9473
9493
|
"path": "scripts/gds/runner-drift.js",
|
|
@@ -10387,7 +10407,7 @@
|
|
|
10387
10407
|
{
|
|
10388
10408
|
"path": "src/module-api.js",
|
|
10389
10409
|
"mode": "0000644",
|
|
10390
|
-
"sha256": "
|
|
10410
|
+
"sha256": "2eff6ba98309a16a555bef613cae5f9be68bfe516f60f8e6862c6313f171a4b6"
|
|
10391
10411
|
},
|
|
10392
10412
|
{
|
|
10393
10413
|
"path": "src/module-loader/catalog.js",
|
|
@@ -12314,6 +12334,16 @@
|
|
|
12314
12334
|
"mode": "0000644",
|
|
12315
12335
|
"sha256": "8298006ae35010d726bcac8a2d351a5aa932d2ee6d5b53ed7b8a5c095ca5e54f"
|
|
12316
12336
|
},
|
|
12337
|
+
{
|
|
12338
|
+
"path": "tests/guilds_api.mjs",
|
|
12339
|
+
"mode": "0000644",
|
|
12340
|
+
"sha256": "9124d0f1e8edfd91b97fc7226a0f4f68638261c5dfa36954bedf6af95d24ec07"
|
|
12341
|
+
},
|
|
12342
|
+
{
|
|
12343
|
+
"path": "tests/guilds_db.mjs",
|
|
12344
|
+
"mode": "0000644",
|
|
12345
|
+
"sha256": "f4d974c9fd565ff6b81f3a3183e2c933e93b35d731b87505513b32ddd3daf337"
|
|
12346
|
+
},
|
|
12317
12347
|
{
|
|
12318
12348
|
"path": "tests/hall_audit.mjs",
|
|
12319
12349
|
"mode": "0000644",
|
|
@@ -13302,7 +13332,7 @@
|
|
|
13302
13332
|
{
|
|
13303
13333
|
"path": "tests/own_scope_guard.mjs",
|
|
13304
13334
|
"mode": "0000644",
|
|
13305
|
-
"sha256": "
|
|
13335
|
+
"sha256": "e9ad80ce9837076d550dbb4b77a4c0f01f087ad3e515f8af8a672221af995ca4"
|
|
13306
13336
|
},
|
|
13307
13337
|
{
|
|
13308
13338
|
"path": "tests/own_session_revoke.mjs",
|
|
@@ -14747,12 +14777,12 @@
|
|
|
14747
14777
|
{
|
|
14748
14778
|
"path": "tests/terms_acceptance.mjs",
|
|
14749
14779
|
"mode": "0000644",
|
|
14750
|
-
"sha256": "
|
|
14780
|
+
"sha256": "3478460c1ac70d6cef984688f513251b5e090c4324190db9895e014a54666e2b"
|
|
14751
14781
|
},
|
|
14752
14782
|
{
|
|
14753
14783
|
"path": "tests/terms_grandfather_db.mjs",
|
|
14754
14784
|
"mode": "0000644",
|
|
14755
|
-
"sha256": "
|
|
14785
|
+
"sha256": "48502dc0bbf19d679faadde8bd7fa5a811957808a3e4d41cc661d3f69d88ced8"
|
|
14756
14786
|
},
|
|
14757
14787
|
{
|
|
14758
14788
|
"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
|
-
-
|
|
8
|
+
- 437 operations across 65 resource groups
|
|
9
9
|
|
|
10
10
|
## Use it from your project
|
|
11
11
|
|
|
@@ -494,6 +494,40 @@ function createClient(opts = {}) {
|
|
|
494
494
|
// GET /grades/by-builder — rank: metic+archon — GET /grades/by-builder
|
|
495
495
|
getGradesByBuilder: (args) => request("GET", "/grades/by-builder", { hasBody: false }, args),
|
|
496
496
|
},
|
|
497
|
+
"guildRequests": {
|
|
498
|
+
// DELETE /guild-requests/{id} — rank: any-builder — DELETE /guild-requests/:id
|
|
499
|
+
deleteGuildRequestsId: (args) => request("DELETE", "/guild-requests/{id}", { hasBody: false }, args),
|
|
500
|
+
// POST /guild-requests/{id}/accept — rank: any-builder — POST /guild-requests/:id/accept
|
|
501
|
+
postGuildRequestsIdAccept: (args) => request("POST", "/guild-requests/{id}/accept", { hasBody: true }, args),
|
|
502
|
+
// POST /guild-requests/{id}/decline — rank: any-builder — POST /guild-requests/:id/decline
|
|
503
|
+
postGuildRequestsIdDecline: (args) => request("POST", "/guild-requests/{id}/decline", { hasBody: true }, args),
|
|
504
|
+
},
|
|
505
|
+
"guilds": {
|
|
506
|
+
// POST /guilds — rank: any-builder — POST /guilds
|
|
507
|
+
postGuilds: (args) => request("POST", "/guilds", { hasBody: true }, args),
|
|
508
|
+
// DELETE /guilds/{slug} — rank: any-builder — DELETE /guilds/:slug
|
|
509
|
+
deleteGuildsSlug: (args) => request("DELETE", "/guilds/{slug}", { hasBody: false }, args),
|
|
510
|
+
// GET /guilds/{slug} — rank: public — GET /guilds/:slug
|
|
511
|
+
getGuildsSlug: (args) => request("GET", "/guilds/{slug}", { hasBody: false }, args),
|
|
512
|
+
// PATCH /guilds/{slug} — rank: any-builder — PATCH /guilds/:slug
|
|
513
|
+
patchGuildsSlug: (args) => request("PATCH", "/guilds/{slug}", { hasBody: true }, args),
|
|
514
|
+
// POST /guilds/{slug}/invites — rank: any-builder — POST /guilds/:slug/invites
|
|
515
|
+
postGuildsSlugInvites: (args) => request("POST", "/guilds/{slug}/invites", { hasBody: true }, args),
|
|
516
|
+
// GET /guilds/{slug}/members — rank: any-builder — GET /guilds/:slug/members
|
|
517
|
+
getGuildsSlugMembers: (args) => request("GET", "/guilds/{slug}/members", { hasBody: false }, args),
|
|
518
|
+
// DELETE /guilds/{slug}/members/{handle} — rank: any-builder — DELETE /guilds/:slug/members/:handle
|
|
519
|
+
deleteGuildsSlugMembersHandle: (args) => request("DELETE", "/guilds/{slug}/members/{handle}", { hasBody: false }, args),
|
|
520
|
+
// DELETE /guilds/{slug}/membership — rank: any-builder — DELETE /guilds/:slug/membership
|
|
521
|
+
deleteGuildsSlugMembership: (args) => request("DELETE", "/guilds/{slug}/membership", { hasBody: false }, args),
|
|
522
|
+
// PATCH /guilds/{slug}/membership — rank: any-builder — PATCH /guilds/:slug/membership
|
|
523
|
+
patchGuildsSlugMembership: (args) => request("PATCH", "/guilds/{slug}/membership", { hasBody: true }, args),
|
|
524
|
+
// GET /guilds/{slug}/requests — rank: any-builder — GET /guilds/:slug/requests
|
|
525
|
+
getGuildsSlugRequests: (args) => request("GET", "/guilds/{slug}/requests", { hasBody: false }, args),
|
|
526
|
+
// POST /guilds/{slug}/requests — rank: any-builder — POST /guilds/:slug/requests
|
|
527
|
+
postGuildsSlugRequests: (args) => request("POST", "/guilds/{slug}/requests", { hasBody: true }, args),
|
|
528
|
+
// POST /guilds/{slug}/transfer — rank: any-builder — POST /guilds/:slug/transfer
|
|
529
|
+
postGuildsSlugTransfer: (args) => request("POST", "/guilds/{slug}/transfer", { hasBody: true }, args),
|
|
530
|
+
},
|
|
497
531
|
"healthz": {
|
|
498
532
|
// GET /healthz — rank: public — GET /healthz
|
|
499
533
|
getHealthz: (args) => request("GET", "/healthz", { hasBody: false }, args),
|
|
@@ -601,6 +635,10 @@ function createClient(opts = {}) {
|
|
|
601
635
|
getMeEventSoundPrefs: (args) => request("GET", "/me/event-sound-prefs", { hasBody: false }, args),
|
|
602
636
|
// PATCH /me/event-sound-prefs — rank: any-builder — PATCH /me/event-sound-prefs
|
|
603
637
|
patchMeEventSoundPrefs: (args) => request("PATCH", "/me/event-sound-prefs", { hasBody: true }, args),
|
|
638
|
+
// GET /me/guild-requests — rank: any-builder — GET /me/guild-requests
|
|
639
|
+
getMeGuildRequests: (args) => request("GET", "/me/guild-requests", { hasBody: false }, args),
|
|
640
|
+
// GET /me/guilds — rank: any-builder — GET /me/guilds
|
|
641
|
+
getMeGuilds: (args) => request("GET", "/me/guilds", { hasBody: false }, args),
|
|
604
642
|
// PATCH /me/handle — rank: any-builder — PATCH /me/handle
|
|
605
643
|
patchMeHandle: (args) => request("PATCH", "/me/handle", { hasBody: true }, args),
|
|
606
644
|
// GET /me/interaction — rank: any-builder — GET /me/interaction
|
|
@@ -493,6 +493,40 @@ function createClient(opts = {}) {
|
|
|
493
493
|
// GET /grades/by-builder — rank: metic+archon — GET /grades/by-builder
|
|
494
494
|
getGradesByBuilder: (args) => request("GET", "/grades/by-builder", { hasBody: false }, args),
|
|
495
495
|
},
|
|
496
|
+
"guildRequests": {
|
|
497
|
+
// DELETE /guild-requests/{id} — rank: any-builder — DELETE /guild-requests/:id
|
|
498
|
+
deleteGuildRequestsId: (args) => request("DELETE", "/guild-requests/{id}", { hasBody: false }, args),
|
|
499
|
+
// POST /guild-requests/{id}/accept — rank: any-builder — POST /guild-requests/:id/accept
|
|
500
|
+
postGuildRequestsIdAccept: (args) => request("POST", "/guild-requests/{id}/accept", { hasBody: true }, args),
|
|
501
|
+
// POST /guild-requests/{id}/decline — rank: any-builder — POST /guild-requests/:id/decline
|
|
502
|
+
postGuildRequestsIdDecline: (args) => request("POST", "/guild-requests/{id}/decline", { hasBody: true }, args),
|
|
503
|
+
},
|
|
504
|
+
"guilds": {
|
|
505
|
+
// POST /guilds — rank: any-builder — POST /guilds
|
|
506
|
+
postGuilds: (args) => request("POST", "/guilds", { hasBody: true }, args),
|
|
507
|
+
// DELETE /guilds/{slug} — rank: any-builder — DELETE /guilds/:slug
|
|
508
|
+
deleteGuildsSlug: (args) => request("DELETE", "/guilds/{slug}", { hasBody: false }, args),
|
|
509
|
+
// GET /guilds/{slug} — rank: public — GET /guilds/:slug
|
|
510
|
+
getGuildsSlug: (args) => request("GET", "/guilds/{slug}", { hasBody: false }, args),
|
|
511
|
+
// PATCH /guilds/{slug} — rank: any-builder — PATCH /guilds/:slug
|
|
512
|
+
patchGuildsSlug: (args) => request("PATCH", "/guilds/{slug}", { hasBody: true }, args),
|
|
513
|
+
// POST /guilds/{slug}/invites — rank: any-builder — POST /guilds/:slug/invites
|
|
514
|
+
postGuildsSlugInvites: (args) => request("POST", "/guilds/{slug}/invites", { hasBody: true }, args),
|
|
515
|
+
// GET /guilds/{slug}/members — rank: any-builder — GET /guilds/:slug/members
|
|
516
|
+
getGuildsSlugMembers: (args) => request("GET", "/guilds/{slug}/members", { hasBody: false }, args),
|
|
517
|
+
// DELETE /guilds/{slug}/members/{handle} — rank: any-builder — DELETE /guilds/:slug/members/:handle
|
|
518
|
+
deleteGuildsSlugMembersHandle: (args) => request("DELETE", "/guilds/{slug}/members/{handle}", { hasBody: false }, args),
|
|
519
|
+
// DELETE /guilds/{slug}/membership — rank: any-builder — DELETE /guilds/:slug/membership
|
|
520
|
+
deleteGuildsSlugMembership: (args) => request("DELETE", "/guilds/{slug}/membership", { hasBody: false }, args),
|
|
521
|
+
// PATCH /guilds/{slug}/membership — rank: any-builder — PATCH /guilds/:slug/membership
|
|
522
|
+
patchGuildsSlugMembership: (args) => request("PATCH", "/guilds/{slug}/membership", { hasBody: true }, args),
|
|
523
|
+
// GET /guilds/{slug}/requests — rank: any-builder — GET /guilds/:slug/requests
|
|
524
|
+
getGuildsSlugRequests: (args) => request("GET", "/guilds/{slug}/requests", { hasBody: false }, args),
|
|
525
|
+
// POST /guilds/{slug}/requests — rank: any-builder — POST /guilds/:slug/requests
|
|
526
|
+
postGuildsSlugRequests: (args) => request("POST", "/guilds/{slug}/requests", { hasBody: true }, args),
|
|
527
|
+
// POST /guilds/{slug}/transfer — rank: any-builder — POST /guilds/:slug/transfer
|
|
528
|
+
postGuildsSlugTransfer: (args) => request("POST", "/guilds/{slug}/transfer", { hasBody: true }, args),
|
|
529
|
+
},
|
|
496
530
|
"healthz": {
|
|
497
531
|
// GET /healthz — rank: public — GET /healthz
|
|
498
532
|
getHealthz: (args) => request("GET", "/healthz", { hasBody: false }, args),
|
|
@@ -600,6 +634,10 @@ function createClient(opts = {}) {
|
|
|
600
634
|
getMeEventSoundPrefs: (args) => request("GET", "/me/event-sound-prefs", { hasBody: false }, args),
|
|
601
635
|
// PATCH /me/event-sound-prefs — rank: any-builder — PATCH /me/event-sound-prefs
|
|
602
636
|
patchMeEventSoundPrefs: (args) => request("PATCH", "/me/event-sound-prefs", { hasBody: true }, args),
|
|
637
|
+
// GET /me/guild-requests — rank: any-builder — GET /me/guild-requests
|
|
638
|
+
getMeGuildRequests: (args) => request("GET", "/me/guild-requests", { hasBody: false }, args),
|
|
639
|
+
// GET /me/guilds — rank: any-builder — GET /me/guilds
|
|
640
|
+
getMeGuilds: (args) => request("GET", "/me/guilds", { hasBody: false }, args),
|
|
603
641
|
// PATCH /me/handle — rank: any-builder — PATCH /me/handle
|
|
604
642
|
patchMeHandle: (args) => request("PATCH", "/me/handle", { hasBody: true }, args),
|
|
605
643
|
// GET /me/interaction — rank: any-builder — GET /me/interaction
|
|
@@ -11,6 +11,10 @@ export interface DeleteConnectionsIdResponse { outcome: unknown }
|
|
|
11
11
|
export interface DeleteDependenciesResponse { ok: boolean }
|
|
12
12
|
export interface DeleteGovernmentAssignmentsBuilderIdRankKeyResponse { ok: boolean; builder_id: unknown; rank_key: unknown; removed: unknown }
|
|
13
13
|
export interface DeleteGovernmentRanksRankKeyPermissionsPermissionKeyResponse { ok: boolean; rank_key: unknown; permission_key: unknown; removed: unknown }
|
|
14
|
+
export interface DeleteGuildRequestsIdResponse { outcome: unknown }
|
|
15
|
+
export interface DeleteGuildsSlugMembersHandleResponse { outcome: unknown }
|
|
16
|
+
export interface DeleteGuildsSlugMembershipResponse { outcome: unknown }
|
|
17
|
+
export interface DeleteGuildsSlugResponse { outcome: unknown }
|
|
14
18
|
export interface DeleteInboxIdSparkResponse { idea: unknown; sparked: boolean; unchanged: boolean }
|
|
15
19
|
export interface DeleteMemoryFileResponse { deleted: boolean; builder_id: unknown; path: unknown }
|
|
16
20
|
export interface DeleteProvisioningInstancesIdEnvManifestVarIdResponse { ok: boolean; removed: boolean; message: unknown }
|
|
@@ -71,6 +75,9 @@ export interface GetGovernmentAssignmentsResponse { assignments: unknown }
|
|
|
71
75
|
export interface GetGovernmentPermissionsResponse { permissions: unknown; principals: unknown }
|
|
72
76
|
export interface GetGovernmentRanksResponse { ranks: unknown }
|
|
73
77
|
export interface GetGradesByBuilderResponse { window_days: unknown; builders: unknown }
|
|
78
|
+
export interface GetGuildsSlugMembersResponse { guild: unknown; you: unknown; members: unknown; count: unknown }
|
|
79
|
+
export interface GetGuildsSlugRequestsResponse { incoming: unknown; outgoing: unknown; incoming_count: unknown; outgoing_count: unknown }
|
|
80
|
+
export interface GetGuildsSlugResponse { guild: unknown; members: unknown; size: unknown }
|
|
74
81
|
export interface GetHealthzResponse { ok: boolean; auth_configured: unknown }
|
|
75
82
|
export interface GetHelpRequestsArchiveResponse { asked_of_you: unknown; asked_of_others: unknown; count: unknown; crafts: unknown }
|
|
76
83
|
export interface GetHelpRequestsForMeResponse { help_requests: unknown; count: unknown; crafts: unknown }
|
|
@@ -90,6 +97,8 @@ export interface GetMeAchievementsResponse { unlocked: unknown }
|
|
|
90
97
|
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 }
|
|
91
98
|
export interface GetMeDisplayNameResponse { display_name: unknown; max_length: unknown }
|
|
92
99
|
export interface GetMeEventSoundPrefsResponse { prefs: unknown; effective: unknown; effective_wav: unknown; events: unknown }
|
|
100
|
+
export interface GetMeGuildRequestsResponse { incoming: unknown; outgoing: unknown; incoming_count: unknown; outgoing_count: unknown }
|
|
101
|
+
export interface GetMeGuildsResponse { guilds: unknown; count: unknown }
|
|
93
102
|
export interface GetMeRecentShipsResponse { ships: unknown }
|
|
94
103
|
export interface GetMeSessionsResponse { sessions: unknown }
|
|
95
104
|
export interface GetMeSkillPrefsResponse { prefs: unknown; effective: unknown; defaults: unknown; known_skills: unknown; allowed_models: unknown }
|
|
@@ -179,6 +188,9 @@ export interface PatchDoneWhenCriterionIdRequest { criterion_md?: string; goal_i
|
|
|
179
188
|
export interface PatchDoneWhenCriterionIdResponse { ok: boolean; criterion: unknown; deltas: unknown; unchanged: unknown; achieved_goals: unknown }
|
|
180
189
|
export interface PatchGoalsIdMembersBuilderIdRequest { membership_kind: string }
|
|
181
190
|
export interface PatchGoalsIdMembersBuilderIdResponse { ok: boolean; member: unknown; changed: boolean }
|
|
191
|
+
export interface PatchGuildsSlugMembershipRequest { shown_publicly?: boolean; counted_in_totals?: unknown }
|
|
192
|
+
export interface PatchGuildsSlugRequest { name?: string; description?: string; visibility?: string }
|
|
193
|
+
export interface PatchGuildsSlugResponse { guild: unknown }
|
|
182
194
|
export interface PatchHelpRequestsIdRequest { status: "answered" | "withdrawn" }
|
|
183
195
|
export interface PatchHelpRequestsIdResponse { ok: boolean; help_request: unknown }
|
|
184
196
|
export interface PatchInboxIdBodyRequest { body_md: string }
|
|
@@ -330,6 +342,16 @@ export interface PostGovernmentBoardItemsResponse { ok: boolean; amendment: unkn
|
|
|
330
342
|
export interface PostGovernmentRanksRankKeyResetResponse { ok: boolean; rank_key: unknown; seeded_rank: unknown; permission_count: unknown }
|
|
331
343
|
export interface PostGovernmentRanksRequest { rank_key: string; label: string; description?: string }
|
|
332
344
|
export interface PostGovernmentRanksResponse { rank: unknown }
|
|
345
|
+
export interface PostGuildRequestsIdAcceptRequest { visibility?: string; counted_in_totals?: unknown }
|
|
346
|
+
export interface PostGuildRequestsIdAcceptResponse { status: unknown }
|
|
347
|
+
export interface PostGuildsRequest { slug: string; name: string; description?: string; visibility: string }
|
|
348
|
+
export interface PostGuildsResponse { guild: unknown }
|
|
349
|
+
export interface PostGuildsSlugInvitesRequest { handles: string[] }
|
|
350
|
+
export interface PostGuildsSlugInvitesResponse { results: unknown; count: unknown }
|
|
351
|
+
export interface PostGuildsSlugRequestsRequest { counted_in_totals?: unknown }
|
|
352
|
+
export interface PostGuildsSlugRequestsResponse { status: unknown }
|
|
353
|
+
export interface PostGuildsSlugTransferRequest { handle: string }
|
|
354
|
+
export interface PostGuildsSlugTransferResponse { outcome: unknown }
|
|
333
355
|
export interface PostHelpRequestsIdRepliesRequest { body: string }
|
|
334
356
|
export interface PostHelpRequestsIdRepliesResponse { ok: boolean; reply: unknown }
|
|
335
357
|
export interface PostHelpRequestsRequest { needs_craft?: string; needs_builder_id?: number; what_is_stuck: string; task_id?: number; goal_id?: number }
|
|
@@ -884,6 +906,40 @@ export interface BongosClient {
|
|
|
884
906
|
/** GET /grades/by-builder — rank: metic+archon */
|
|
885
907
|
getGradesByBuilder(args?: RequestArgs): Promise<GetGradesByBuilderResponse>;
|
|
886
908
|
};
|
|
909
|
+
"guildRequests": {
|
|
910
|
+
/** DELETE /guild-requests/{id} — rank: any-builder */
|
|
911
|
+
deleteGuildRequestsId(args?: RequestArgs): Promise<DeleteGuildRequestsIdResponse>;
|
|
912
|
+
/** POST /guild-requests/{id}/accept — rank: any-builder */
|
|
913
|
+
postGuildRequestsIdAccept(args?: RequestArgs & { body?: PostGuildRequestsIdAcceptRequest }): Promise<PostGuildRequestsIdAcceptResponse>;
|
|
914
|
+
/** POST /guild-requests/{id}/decline — rank: any-builder */
|
|
915
|
+
postGuildRequestsIdDecline(args?: RequestArgs): Promise<ApiResponse>;
|
|
916
|
+
};
|
|
917
|
+
"guilds": {
|
|
918
|
+
/** POST /guilds — rank: any-builder */
|
|
919
|
+
postGuilds(args: RequestArgs & { body: PostGuildsRequest }): Promise<PostGuildsResponse>;
|
|
920
|
+
/** DELETE /guilds/{slug} — rank: any-builder */
|
|
921
|
+
deleteGuildsSlug(args?: RequestArgs): Promise<DeleteGuildsSlugResponse>;
|
|
922
|
+
/** GET /guilds/{slug} — rank: public */
|
|
923
|
+
getGuildsSlug(args?: RequestArgs): Promise<GetGuildsSlugResponse>;
|
|
924
|
+
/** PATCH /guilds/{slug} — rank: any-builder */
|
|
925
|
+
patchGuildsSlug(args?: RequestArgs & { body?: PatchGuildsSlugRequest }): Promise<PatchGuildsSlugResponse>;
|
|
926
|
+
/** POST /guilds/{slug}/invites — rank: any-builder */
|
|
927
|
+
postGuildsSlugInvites(args: RequestArgs & { body: PostGuildsSlugInvitesRequest }): Promise<PostGuildsSlugInvitesResponse>;
|
|
928
|
+
/** GET /guilds/{slug}/members — rank: any-builder */
|
|
929
|
+
getGuildsSlugMembers(args?: RequestArgs): Promise<GetGuildsSlugMembersResponse>;
|
|
930
|
+
/** DELETE /guilds/{slug}/members/{handle} — rank: any-builder */
|
|
931
|
+
deleteGuildsSlugMembersHandle(args?: RequestArgs): Promise<DeleteGuildsSlugMembersHandleResponse>;
|
|
932
|
+
/** DELETE /guilds/{slug}/membership — rank: any-builder */
|
|
933
|
+
deleteGuildsSlugMembership(args?: RequestArgs): Promise<DeleteGuildsSlugMembershipResponse>;
|
|
934
|
+
/** PATCH /guilds/{slug}/membership — rank: any-builder */
|
|
935
|
+
patchGuildsSlugMembership(args?: RequestArgs & { body?: PatchGuildsSlugMembershipRequest }): Promise<ApiResponse>;
|
|
936
|
+
/** GET /guilds/{slug}/requests — rank: any-builder */
|
|
937
|
+
getGuildsSlugRequests(args?: RequestArgs): Promise<GetGuildsSlugRequestsResponse>;
|
|
938
|
+
/** POST /guilds/{slug}/requests — rank: any-builder */
|
|
939
|
+
postGuildsSlugRequests(args?: RequestArgs & { body?: PostGuildsSlugRequestsRequest }): Promise<PostGuildsSlugRequestsResponse>;
|
|
940
|
+
/** POST /guilds/{slug}/transfer — rank: any-builder */
|
|
941
|
+
postGuildsSlugTransfer(args: RequestArgs & { body: PostGuildsSlugTransferRequest }): Promise<PostGuildsSlugTransferResponse>;
|
|
942
|
+
};
|
|
887
943
|
"healthz": {
|
|
888
944
|
/** GET /healthz — rank: public */
|
|
889
945
|
getHealthz(args?: RequestArgs): Promise<GetHealthzResponse>;
|
|
@@ -991,6 +1047,10 @@ export interface BongosClient {
|
|
|
991
1047
|
getMeEventSoundPrefs(args?: RequestArgs): Promise<GetMeEventSoundPrefsResponse>;
|
|
992
1048
|
/** PATCH /me/event-sound-prefs — rank: any-builder */
|
|
993
1049
|
patchMeEventSoundPrefs(args?: RequestArgs): Promise<PatchMeEventSoundPrefsResponse>;
|
|
1050
|
+
/** GET /me/guild-requests — rank: any-builder */
|
|
1051
|
+
getMeGuildRequests(args?: RequestArgs): Promise<GetMeGuildRequestsResponse>;
|
|
1052
|
+
/** GET /me/guilds — rank: any-builder */
|
|
1053
|
+
getMeGuilds(args?: RequestArgs): Promise<GetMeGuildsResponse>;
|
|
994
1054
|
/** PATCH /me/handle — rank: any-builder */
|
|
995
1055
|
patchMeHandle(args: RequestArgs & { body: PatchMeHandleRequest }): Promise<PatchMeHandleResponse>;
|
|
996
1056
|
/** GET /me/interaction — rank: any-builder */
|
|
@@ -490,6 +490,40 @@ export function createClient(opts = {}) {
|
|
|
490
490
|
// GET /grades/by-builder — rank: metic+archon — GET /grades/by-builder
|
|
491
491
|
getGradesByBuilder: (args) => request("GET", "/grades/by-builder", { hasBody: false }, args),
|
|
492
492
|
},
|
|
493
|
+
"guildRequests": {
|
|
494
|
+
// DELETE /guild-requests/{id} — rank: any-builder — DELETE /guild-requests/:id
|
|
495
|
+
deleteGuildRequestsId: (args) => request("DELETE", "/guild-requests/{id}", { hasBody: false }, args),
|
|
496
|
+
// POST /guild-requests/{id}/accept — rank: any-builder — POST /guild-requests/:id/accept
|
|
497
|
+
postGuildRequestsIdAccept: (args) => request("POST", "/guild-requests/{id}/accept", { hasBody: true }, args),
|
|
498
|
+
// POST /guild-requests/{id}/decline — rank: any-builder — POST /guild-requests/:id/decline
|
|
499
|
+
postGuildRequestsIdDecline: (args) => request("POST", "/guild-requests/{id}/decline", { hasBody: true }, args),
|
|
500
|
+
},
|
|
501
|
+
"guilds": {
|
|
502
|
+
// POST /guilds — rank: any-builder — POST /guilds
|
|
503
|
+
postGuilds: (args) => request("POST", "/guilds", { hasBody: true }, args),
|
|
504
|
+
// DELETE /guilds/{slug} — rank: any-builder — DELETE /guilds/:slug
|
|
505
|
+
deleteGuildsSlug: (args) => request("DELETE", "/guilds/{slug}", { hasBody: false }, args),
|
|
506
|
+
// GET /guilds/{slug} — rank: public — GET /guilds/:slug
|
|
507
|
+
getGuildsSlug: (args) => request("GET", "/guilds/{slug}", { hasBody: false }, args),
|
|
508
|
+
// PATCH /guilds/{slug} — rank: any-builder — PATCH /guilds/:slug
|
|
509
|
+
patchGuildsSlug: (args) => request("PATCH", "/guilds/{slug}", { hasBody: true }, args),
|
|
510
|
+
// POST /guilds/{slug}/invites — rank: any-builder — POST /guilds/:slug/invites
|
|
511
|
+
postGuildsSlugInvites: (args) => request("POST", "/guilds/{slug}/invites", { hasBody: true }, args),
|
|
512
|
+
// GET /guilds/{slug}/members — rank: any-builder — GET /guilds/:slug/members
|
|
513
|
+
getGuildsSlugMembers: (args) => request("GET", "/guilds/{slug}/members", { hasBody: false }, args),
|
|
514
|
+
// DELETE /guilds/{slug}/members/{handle} — rank: any-builder — DELETE /guilds/:slug/members/:handle
|
|
515
|
+
deleteGuildsSlugMembersHandle: (args) => request("DELETE", "/guilds/{slug}/members/{handle}", { hasBody: false }, args),
|
|
516
|
+
// DELETE /guilds/{slug}/membership — rank: any-builder — DELETE /guilds/:slug/membership
|
|
517
|
+
deleteGuildsSlugMembership: (args) => request("DELETE", "/guilds/{slug}/membership", { hasBody: false }, args),
|
|
518
|
+
// PATCH /guilds/{slug}/membership — rank: any-builder — PATCH /guilds/:slug/membership
|
|
519
|
+
patchGuildsSlugMembership: (args) => request("PATCH", "/guilds/{slug}/membership", { hasBody: true }, args),
|
|
520
|
+
// GET /guilds/{slug}/requests — rank: any-builder — GET /guilds/:slug/requests
|
|
521
|
+
getGuildsSlugRequests: (args) => request("GET", "/guilds/{slug}/requests", { hasBody: false }, args),
|
|
522
|
+
// POST /guilds/{slug}/requests — rank: any-builder — POST /guilds/:slug/requests
|
|
523
|
+
postGuildsSlugRequests: (args) => request("POST", "/guilds/{slug}/requests", { hasBody: true }, args),
|
|
524
|
+
// POST /guilds/{slug}/transfer — rank: any-builder — POST /guilds/:slug/transfer
|
|
525
|
+
postGuildsSlugTransfer: (args) => request("POST", "/guilds/{slug}/transfer", { hasBody: true }, args),
|
|
526
|
+
},
|
|
493
527
|
"healthz": {
|
|
494
528
|
// GET /healthz — rank: public — GET /healthz
|
|
495
529
|
getHealthz: (args) => request("GET", "/healthz", { hasBody: false }, args),
|
|
@@ -597,6 +631,10 @@ export function createClient(opts = {}) {
|
|
|
597
631
|
getMeEventSoundPrefs: (args) => request("GET", "/me/event-sound-prefs", { hasBody: false }, args),
|
|
598
632
|
// PATCH /me/event-sound-prefs — rank: any-builder — PATCH /me/event-sound-prefs
|
|
599
633
|
patchMeEventSoundPrefs: (args) => request("PATCH", "/me/event-sound-prefs", { hasBody: true }, args),
|
|
634
|
+
// GET /me/guild-requests — rank: any-builder — GET /me/guild-requests
|
|
635
|
+
getMeGuildRequests: (args) => request("GET", "/me/guild-requests", { hasBody: false }, args),
|
|
636
|
+
// GET /me/guilds — rank: any-builder — GET /me/guilds
|
|
637
|
+
getMeGuilds: (args) => request("GET", "/me/guilds", { hasBody: false }, args),
|
|
600
638
|
// PATCH /me/handle — rank: any-builder — PATCH /me/handle
|
|
601
639
|
patchMeHandle: (args) => request("PATCH", "/me/handle", { hasBody: true }, args),
|
|
602
640
|
// GET /me/interaction — rank: any-builder — GET /me/interaction
|
|
@@ -27,6 +27,8 @@ Three things were found on picking the task up, and they changed its shape:
|
|
|
27
27
|
|
|
28
28
|
This is deliberately the ADR 0205 D3 property, reused. An acceptance record a caller could assert is evidence of nothing; the only thing that makes the record mean "this human accepted" is that no request-controlled value can reach the statement that writes it. `ensureAccount` — the federated check-in / device-poll path, which takes an *unproven* `github_id` from a request body — writes NULL, exactly as it writes `provisional`.
|
|
29
29
|
|
|
30
|
+
> **Amended 2026-09-25 ([task 1003353](https://cloudbongos.com/builders#/task/1003353); [blocker 1000124](https://cloudbongos.com/builders#/blocker/1000124)) — what "the hub's own sign-in" means.** `GET /sso/authorize` is reached when a builder uses their platform account to sign in to a **project**; the only builder of that URL is a child instance's `idpAuthorizeUrl`. Signing in to the hub itself creates a hub session and never touches `platform_identity_accounts`, so it records no acceptance. `/terms` said "signed in here"; it now names a project sign-in. The owner chose to also capture the hub's own sign-in ([task 1003361](https://cloudbongos.com/builders#/task/1003361)), which will make this a second capture point rather than a wording fix. Two smaller corrections to the text above: the device poll does not go through `ensureAccount`, it is a non-activating `upsertAccount`, and so is `PATCH /me/handle`; `ensureAccount` is the federated membership check-in alone. The outcome was always the same (neither writes an acceptance), and both paths are now executed in `tests/terms_acceptance.mjs` rather than asserted as text.
|
|
31
|
+
|
|
30
32
|
### D2 — Written once. The first acceptance is the one that stands
|
|
31
33
|
|
|
32
34
|
The conflict branch writes `COALESCE(platform_identity_accounts.terms_accepted_at, now())`. Signing in again re-reads the terms but does not restamp them, so the column keeps meaning *when consent was given* rather than *when this account was last seen*. `terms_version` is COALESCE'd the same way and always written in the same statement, so the pair cannot diverge.
|
|
@@ -58,10 +60,10 @@ The mechanism ships complete. The text of the new section is a draft on [blocker
|
|
|
58
60
|
## Consequences
|
|
59
61
|
|
|
60
62
|
- The premise the public-profile surfaces rest on becomes true for every account activated from here, and fail-closed for every account that predates it.
|
|
61
|
-
-
|
|
63
|
+
- ~~**Every currently-`active` account is unpublished until its next hub sign-in** (D4).~~ Superseded by the grandfather (amendment under D4): nothing went dark after migration 024.
|
|
62
64
|
- `platform-identity.js` sat at 1497 lines against a hard `oversized_file_count: 0` ratchet, so the write-side SQL lives in a new `terms-acceptance.js` — the fifth instance of the "new file beside it" precedent (`account-visibility.js`, `application-echo.js`, `routes/connections.js`, `src/bongos/routes/my-sessions.js`). The file now measures exactly 1500 and **has no headroom left**; the next change to it must shrink it.
|
|
63
65
|
- The read/write split is load-bearing: `terms-acceptance.js` owns only statements that SET the columns, `account-visibility.js` owns the one that TESTS them. The guard's spelling rules deliberately do not match writes, which is what lets both files exist without one of them being a drift copy.
|
|
64
|
-
- **Settings will read wrong for a legacy account under D4** until someone closes it: `GET /me/cross-project` returns `profile_state` raw and the Settings consent note branches on it alone, so an account that signed in before the terms existed reads "active" while its profile is published nowhere. One own-scope boolean plus a copy change fixes it - filed as idea 1000875, and it disappears entirely if the owner grandfathers on blocker 1000123.
|
|
66
|
+
- *(Superseded by the grandfather, amendment under D4: after migration 024 every `active` account has an acceptance, so the case below no longer arises.)* **Settings will read wrong for a legacy account under D4** until someone closes it: `GET /me/cross-project` returns `profile_state` raw and the Settings consent note branches on it alone, so an account that signed in before the terms existed reads "active" while its profile is published nowhere. One own-scope boolean plus a copy change fixes it - filed as idea 1000875, and it disappears entirely if the owner grandfathers on blocker 1000123.
|
|
65
67
|
- `docs/specs/<redacted>.md`'s standing note that the consent premise "is not currently true for every account" is now addressed rather than outstanding.
|
|
66
68
|
|
|
67
69
|
## Rejected alternatives
|