@bongos/core 1.19.412 → 1.19.414
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 +57 -42
- package/clients/bongos-client/index.d.ts +4 -4
- package/docs/adr/0204-the-apex-is-dark-only.md +36 -0
- package/docs/adr/README.md +1 -0
- package/docs/api/openapi.json +25 -10
- package/docs/api-reference.md +2 -2
- package/docs/copy-inventory.md +405 -403
- package/docs/copy-registry.json +538 -520
- package/docs/design/landing-page-direction-v2.md +2 -0
- package/docs/design/projects-hub-direction-v2.md +4 -0
- package/docs/module-api-changelog.md +4 -0
- package/docs/recipes/ui-look-before-you-ship.md +4 -1
- package/modules/hall-ui/public/settings.html +18 -0
- package/modules/hall-ui/public/settings.js +93 -10
- package/modules/platform-identity/migrations/platform_identity_012_account_privacy.sql +59 -0
- package/modules/platform-identity/platform-identity.js +91 -1
- package/modules/platform-identity/routes/profile.js +68 -17
- package/modules/ui-design/kit/lib.js +3 -1
- package/modules/ui-design/kit/render.js +5 -4
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/public-landing/assets/cosmos.css +3 -17
- package/public-landing/contact.html +2 -6
- package/public-landing/index.html +5 -44
- package/public-landing/index.states.json +3 -2
- package/public-landing/privacy.html +2 -6
- package/public-landing/projects.html +4 -41
- package/public-landing/projects.probes.json +0 -3
- package/public-landing/projects.states.json +3 -2
- package/public-landing/terms.html +2 -6
- package/scripts/gds/worktree.js +11 -0
- package/src/module-api.js +1 -1
- package/tests/account_privacy_flags.mjs +299 -0
- package/tests/landing_legal_pages.mjs +10 -0
- package/tests/landing_page.mjs +16 -19
- package/tests/projects_hub.mjs +1 -1
- package/tests/projects_hub_pre_uat.mjs +4 -3
- package/tests/ui_design_kit.mjs +10 -0
package/.bongos-core.json
CHANGED
|
@@ -2,22 +2,22 @@
|
|
|
2
2
|
"artifact": "bongos-core",
|
|
3
3
|
"manifest_schema": 1,
|
|
4
4
|
"generator": "scripts/gds/package-core.js",
|
|
5
|
-
"core_version": "1.19.
|
|
6
|
-
"core_contract": "1.19.
|
|
7
|
-
"source_commit": "
|
|
5
|
+
"core_version": "1.19.414",
|
|
6
|
+
"core_contract": "1.19.414",
|
|
7
|
+
"source_commit": "bf02216b3497eb7540e382dd5c4189a70fbb8cbc",
|
|
8
8
|
"source_ref": "HEAD",
|
|
9
|
-
"built_at": "2026-08-29T15:
|
|
9
|
+
"built_at": "2026-08-29T15:34:28.312Z",
|
|
10
10
|
"redaction": {
|
|
11
11
|
"model": "docs-redacted+functional-verbatim",
|
|
12
|
-
"docs_redacted":
|
|
12
|
+
"docs_redacted": 355,
|
|
13
13
|
"agent_docs_stubbed": 23,
|
|
14
|
-
"functional_verbatim":
|
|
14
|
+
"functional_verbatim": 1669,
|
|
15
15
|
"rules": 3,
|
|
16
16
|
"gate_literals": 3,
|
|
17
17
|
"gate": "passed"
|
|
18
18
|
},
|
|
19
|
-
"file_count":
|
|
20
|
-
"tree_sha256": "
|
|
19
|
+
"file_count": 2047,
|
|
20
|
+
"tree_sha256": "3ddb8a1e6c1997334734b740a0d435c770fc0bc811945f456e9ee7d61a046ed5",
|
|
21
21
|
"files": [
|
|
22
22
|
{
|
|
23
23
|
"path": ".claude/skills/blocker-review/SKILL.md",
|
|
@@ -372,7 +372,7 @@
|
|
|
372
372
|
{
|
|
373
373
|
"path": "clients/bongos-client/index.d.ts",
|
|
374
374
|
"mode": "0000644",
|
|
375
|
-
"sha256": "
|
|
375
|
+
"sha256": "84fce1d4d0fba5b586f1a965a7b4b6818ad7d27e7bbce68818e9def0db85724b"
|
|
376
376
|
},
|
|
377
377
|
{
|
|
378
378
|
"path": "clients/bongos-client/index.mjs",
|
|
@@ -1519,20 +1519,25 @@
|
|
|
1519
1519
|
"mode": "0000644",
|
|
1520
1520
|
"sha256": "37c8ba1f75a3daac27d510e47f1dc392382084a726133db8d4e1db860031cca8"
|
|
1521
1521
|
},
|
|
1522
|
+
{
|
|
1523
|
+
"path": "docs/adr/0204-the-apex-is-dark-only.md",
|
|
1524
|
+
"mode": "0000644",
|
|
1525
|
+
"sha256": "ac6a729436ff1e51414ccaf097b5e49c1360dd3bca1efd1ff73f38d4e5fca24d"
|
|
1526
|
+
},
|
|
1522
1527
|
{
|
|
1523
1528
|
"path": "docs/adr/README.md",
|
|
1524
1529
|
"mode": "0000644",
|
|
1525
|
-
"sha256": "
|
|
1530
|
+
"sha256": "32bf8baf396e3191e46525c1c5aeda326c0f1f7f6a83359f6fc5f5b6c8dda04c"
|
|
1526
1531
|
},
|
|
1527
1532
|
{
|
|
1528
1533
|
"path": "docs/api-reference.md",
|
|
1529
1534
|
"mode": "0000644",
|
|
1530
|
-
"sha256": "
|
|
1535
|
+
"sha256": "dc283ca75e6aa5b2dcede50879f7c7f7beb151ae953282c917621b4dd6d6b2e1"
|
|
1531
1536
|
},
|
|
1532
1537
|
{
|
|
1533
1538
|
"path": "docs/api/openapi.json",
|
|
1534
1539
|
"mode": "0000644",
|
|
1535
|
-
"sha256": "
|
|
1540
|
+
"sha256": "4ae66f6126c2148d61f4bdbdcc7d06ca8966f2747f34e4b243f348545ce4e3aa"
|
|
1536
1541
|
},
|
|
1537
1542
|
{
|
|
1538
1543
|
"path": "docs/architecture.md",
|
|
@@ -1557,12 +1562,12 @@
|
|
|
1557
1562
|
{
|
|
1558
1563
|
"path": "docs/copy-inventory.md",
|
|
1559
1564
|
"mode": "0000644",
|
|
1560
|
-
"sha256": "
|
|
1565
|
+
"sha256": "c462f7be788726d0bbe0186dcaa7288fa81b23550057ce9f579bc5b3d6096f44"
|
|
1561
1566
|
},
|
|
1562
1567
|
{
|
|
1563
1568
|
"path": "docs/copy-registry.json",
|
|
1564
1569
|
"mode": "0000644",
|
|
1565
|
-
"sha256": "
|
|
1570
|
+
"sha256": "429fbb99f080c8bb80c8b8fc9539eb632dab1a4f6bb0534170667c76e055001d"
|
|
1566
1571
|
},
|
|
1567
1572
|
{
|
|
1568
1573
|
"path": "docs/design/apex-pass-2-direction.md",
|
|
@@ -1587,7 +1592,7 @@
|
|
|
1587
1592
|
{
|
|
1588
1593
|
"path": "docs/design/landing-page-direction-v2.md",
|
|
1589
1594
|
"mode": "0000644",
|
|
1590
|
-
"sha256": "
|
|
1595
|
+
"sha256": "8602ef938cf855e675e454f4689b433f0f1dde4855337396d9f9a80b332dfda1"
|
|
1591
1596
|
},
|
|
1592
1597
|
{
|
|
1593
1598
|
"path": "docs/design/landing-page-direction.md",
|
|
@@ -1807,7 +1812,7 @@
|
|
|
1807
1812
|
{
|
|
1808
1813
|
"path": "docs/design/projects-hub-direction-v2.md",
|
|
1809
1814
|
"mode": "0000644",
|
|
1810
|
-
"sha256": "
|
|
1815
|
+
"sha256": "30e3f767670141d142a3fc3608eb37745847d011c4659d61b20f67c10ef9e75a"
|
|
1811
1816
|
},
|
|
1812
1817
|
{
|
|
1813
1818
|
"path": "docs/design/projects-hub-direction.md",
|
|
@@ -1867,7 +1872,7 @@
|
|
|
1867
1872
|
{
|
|
1868
1873
|
"path": "docs/module-api-changelog.md",
|
|
1869
1874
|
"mode": "0000644",
|
|
1870
|
-
"sha256": "
|
|
1875
|
+
"sha256": "6eda8322f061bd29596304e3f51444eb69ba89d6e30da19b3a07fcf55fc900b2"
|
|
1871
1876
|
},
|
|
1872
1877
|
{
|
|
1873
1878
|
"path": "docs/modules-contract.md",
|
|
@@ -2097,7 +2102,7 @@
|
|
|
2097
2102
|
{
|
|
2098
2103
|
"path": "docs/recipes/ui-look-before-you-ship.md",
|
|
2099
2104
|
"mode": "0000644",
|
|
2100
|
-
"sha256": "
|
|
2105
|
+
"sha256": "1d29b5407a29c4a2fc7b2a7114cb6679f7104d6a0cf38b6a77606d529d0d8734"
|
|
2101
2106
|
},
|
|
2102
2107
|
{
|
|
2103
2108
|
"path": "docs/recipes/upgrading-the-core.md",
|
|
@@ -4102,12 +4107,12 @@
|
|
|
4102
4107
|
{
|
|
4103
4108
|
"path": "modules/hall-ui/public/settings.html",
|
|
4104
4109
|
"mode": "0000644",
|
|
4105
|
-
"sha256": "
|
|
4110
|
+
"sha256": "852ce177610c5bc49145333b157700d8c3566565d106dcf26c476d32b7105609"
|
|
4106
4111
|
},
|
|
4107
4112
|
{
|
|
4108
4113
|
"path": "modules/hall-ui/public/settings.js",
|
|
4109
4114
|
"mode": "0000644",
|
|
4110
|
-
"sha256": "
|
|
4115
|
+
"sha256": "5e4e3a6ab492d6b6fae46ad5dbd896213825bfc79f8f3928836af609953a5fb0"
|
|
4111
4116
|
},
|
|
4112
4117
|
{
|
|
4113
4118
|
"path": "modules/hall-ui/public/shell.js",
|
|
@@ -4769,6 +4774,11 @@
|
|
|
4769
4774
|
"mode": "0000644",
|
|
4770
4775
|
"sha256": "18e3641beba26d8a515616ba9bdb1bcc83151e620d6e038243d7d67850da3be8"
|
|
4771
4776
|
},
|
|
4777
|
+
{
|
|
4778
|
+
"path": "modules/platform-identity/migrations/platform_identity_012_account_privacy.sql",
|
|
4779
|
+
"mode": "0000644",
|
|
4780
|
+
"sha256": "cb1d96a64d952e2f4e043e805264ab813505571e1cb93d1afde337987f00b482"
|
|
4781
|
+
},
|
|
4772
4782
|
{
|
|
4773
4783
|
"path": "modules/platform-identity/migrations/platform_identity_012_project_template.sql",
|
|
4774
4784
|
"mode": "0000644",
|
|
@@ -4787,7 +4797,7 @@
|
|
|
4787
4797
|
{
|
|
4788
4798
|
"path": "modules/platform-identity/platform-identity.js",
|
|
4789
4799
|
"mode": "0000644",
|
|
4790
|
-
"sha256": "
|
|
4800
|
+
"sha256": "b3a8ecce278904a12caa0fbebbcabd3cd122aab6753e026b1b5719547497302d"
|
|
4791
4801
|
},
|
|
4792
4802
|
{
|
|
4793
4803
|
"path": "modules/platform-identity/pollers/code-sweep.js",
|
|
@@ -4807,7 +4817,7 @@
|
|
|
4807
4817
|
{
|
|
4808
4818
|
"path": "modules/platform-identity/routes/profile.js",
|
|
4809
4819
|
"mode": "0000644",
|
|
4810
|
-
"sha256": "
|
|
4820
|
+
"sha256": "209763cf313bb58f7237cda9c84f3cb5ed35db8f95d66b55dfa3f15e5da1ecdf"
|
|
4811
4821
|
},
|
|
4812
4822
|
{
|
|
4813
4823
|
"path": "modules/platform-identity/routes/projects.js",
|
|
@@ -5302,7 +5312,7 @@
|
|
|
5302
5312
|
{
|
|
5303
5313
|
"path": "modules/ui-design/kit/lib.js",
|
|
5304
5314
|
"mode": "0000644",
|
|
5305
|
-
"sha256": "
|
|
5315
|
+
"sha256": "657c5ccebb7223aa7cf71f8ac25f18c6f28054931abbe6ac1ad1203733784f66"
|
|
5306
5316
|
},
|
|
5307
5317
|
{
|
|
5308
5318
|
"path": "modules/ui-design/kit/png.js",
|
|
@@ -5317,7 +5327,7 @@
|
|
|
5317
5327
|
{
|
|
5318
5328
|
"path": "modules/ui-design/kit/render.js",
|
|
5319
5329
|
"mode": "0000644",
|
|
5320
|
-
"sha256": "
|
|
5330
|
+
"sha256": "872bd51f1b221afa226e113c727ec1a428457e9a4621bcffe605642b7d7731e3"
|
|
5321
5331
|
},
|
|
5322
5332
|
{
|
|
5323
5333
|
"path": "modules/ui-design/kit/serve.js",
|
|
@@ -5367,12 +5377,12 @@
|
|
|
5367
5377
|
{
|
|
5368
5378
|
"path": "package-lock.json",
|
|
5369
5379
|
"mode": "0000644",
|
|
5370
|
-
"sha256": "
|
|
5380
|
+
"sha256": "e7dc4f709fce538cf1f3eb7aa8e3ca2e68dbe66defc8f3f4ceb4bd2b95f76271"
|
|
5371
5381
|
},
|
|
5372
5382
|
{
|
|
5373
5383
|
"path": "package.json",
|
|
5374
5384
|
"mode": "0000644",
|
|
5375
|
-
"sha256": "
|
|
5385
|
+
"sha256": "0e5ef83c47bd5bf9019c0110780af60d34cd5e01fb7d0a2f1a4354b2b371f93d"
|
|
5376
5386
|
},
|
|
5377
5387
|
{
|
|
5378
5388
|
"path": "public-docs/index.html",
|
|
@@ -5612,7 +5622,7 @@
|
|
|
5612
5622
|
{
|
|
5613
5623
|
"path": "public-landing/assets/cosmos.css",
|
|
5614
5624
|
"mode": "0000644",
|
|
5615
|
-
"sha256": "
|
|
5625
|
+
"sha256": "7e8e7a9bc2797d0bc6be5c2de46639307813047a60bd5904c60e1bded49bdef2"
|
|
5616
5626
|
},
|
|
5617
5627
|
{
|
|
5618
5628
|
"path": "public-landing/assets/verro-medallion.png",
|
|
@@ -5697,12 +5707,12 @@
|
|
|
5697
5707
|
{
|
|
5698
5708
|
"path": "public-landing/contact.html",
|
|
5699
5709
|
"mode": "0000644",
|
|
5700
|
-
"sha256": "
|
|
5710
|
+
"sha256": "22e81df702236494bff7f283cd25ecbca92df2ea485d995fbd66c0e924faff41"
|
|
5701
5711
|
},
|
|
5702
5712
|
{
|
|
5703
5713
|
"path": "public-landing/index.html",
|
|
5704
5714
|
"mode": "0000644",
|
|
5705
|
-
"sha256": "
|
|
5715
|
+
"sha256": "9d1e904bdb89b929f29871c6c50cbdf9a33d73943b689d167ad26cb1201a01e2"
|
|
5706
5716
|
},
|
|
5707
5717
|
{
|
|
5708
5718
|
"path": "public-landing/index.probes.json",
|
|
@@ -5712,32 +5722,32 @@
|
|
|
5712
5722
|
{
|
|
5713
5723
|
"path": "public-landing/index.states.json",
|
|
5714
5724
|
"mode": "0000644",
|
|
5715
|
-
"sha256": "
|
|
5725
|
+
"sha256": "9bc1178aa8f1afe770c6f1b97491c4f0afb8a301300f1e8818a33605f969a12e"
|
|
5716
5726
|
},
|
|
5717
5727
|
{
|
|
5718
5728
|
"path": "public-landing/privacy.html",
|
|
5719
5729
|
"mode": "0000644",
|
|
5720
|
-
"sha256": "
|
|
5730
|
+
"sha256": "5af37c9fd5be9c15ac195528764f87c2ade2b63a72a24fadfa87b83183769d28"
|
|
5721
5731
|
},
|
|
5722
5732
|
{
|
|
5723
5733
|
"path": "public-landing/projects.html",
|
|
5724
5734
|
"mode": "0000644",
|
|
5725
|
-
"sha256": "
|
|
5735
|
+
"sha256": "5587b1f04ecf15c2b6a6a931bde87311414a995d83d18018f8a7162b423b7d24"
|
|
5726
5736
|
},
|
|
5727
5737
|
{
|
|
5728
5738
|
"path": "public-landing/projects.probes.json",
|
|
5729
5739
|
"mode": "0000644",
|
|
5730
|
-
"sha256": "
|
|
5740
|
+
"sha256": "f73eb875d55475f3380ee7356212262bfa053c86e072e6943cb77a8d3968af42"
|
|
5731
5741
|
},
|
|
5732
5742
|
{
|
|
5733
5743
|
"path": "public-landing/projects.states.json",
|
|
5734
5744
|
"mode": "0000644",
|
|
5735
|
-
"sha256": "
|
|
5745
|
+
"sha256": "54d54a1fab92aa72ab8c09e9643d0e42524001d54c06d9d996f20958f6e3fa02"
|
|
5736
5746
|
},
|
|
5737
5747
|
{
|
|
5738
5748
|
"path": "public-landing/terms.html",
|
|
5739
5749
|
"mode": "0000644",
|
|
5740
|
-
"sha256": "
|
|
5750
|
+
"sha256": "06e12ecafb6dfa09cf7c1b8415fa67a78486dde334fd72bb6f71f5f474301444"
|
|
5741
5751
|
},
|
|
5742
5752
|
{
|
|
5743
5753
|
"path": "public-landing/world/assets/clouds/cloud-island-large.png",
|
|
@@ -7007,7 +7017,7 @@
|
|
|
7007
7017
|
{
|
|
7008
7018
|
"path": "scripts/gds/worktree.js",
|
|
7009
7019
|
"mode": "0000644",
|
|
7010
|
-
"sha256": "
|
|
7020
|
+
"sha256": "56549d4c288f55699ceb1fea10f4f65756a9114b4628b3f2b6c44fed0ec6ab26"
|
|
7011
7021
|
},
|
|
7012
7022
|
{
|
|
7013
7023
|
"path": "scripts/hall-preview/README.md",
|
|
@@ -7387,7 +7397,7 @@
|
|
|
7387
7397
|
{
|
|
7388
7398
|
"path": "src/module-api.js",
|
|
7389
7399
|
"mode": "0000644",
|
|
7390
|
-
"sha256": "
|
|
7400
|
+
"sha256": "46d6abde6c291f8fa9168dfbe98b2dabfcd7c04dea6901a2df4fa343dc8764de"
|
|
7391
7401
|
},
|
|
7392
7402
|
{
|
|
7393
7403
|
"path": "src/module-loader/catalog.js",
|
|
@@ -7439,6 +7449,11 @@
|
|
|
7439
7449
|
"mode": "0000644",
|
|
7440
7450
|
"sha256": "4d8435e7f8b949715ee40843beddc1868105edd9c67b269cfa8f510a192e9212"
|
|
7441
7451
|
},
|
|
7452
|
+
{
|
|
7453
|
+
"path": "tests/account_privacy_flags.mjs",
|
|
7454
|
+
"mode": "0000644",
|
|
7455
|
+
"sha256": "274e07580eb23b111fb26e097a85f618cf33b0467a9a2a325cfbdd910a33fab1"
|
|
7456
|
+
},
|
|
7442
7457
|
{
|
|
7443
7458
|
"path": "tests/achievements_reconcile.mjs",
|
|
7444
7459
|
"mode": "0000644",
|
|
@@ -8987,12 +9002,12 @@
|
|
|
8987
9002
|
{
|
|
8988
9003
|
"path": "tests/landing_legal_pages.mjs",
|
|
8989
9004
|
"mode": "0000644",
|
|
8990
|
-
"sha256": "
|
|
9005
|
+
"sha256": "dcf62524d2f4d8b3fdb019718b1fd8262618844aeae4504bbcbe153fd643fd17"
|
|
8991
9006
|
},
|
|
8992
9007
|
{
|
|
8993
9008
|
"path": "tests/landing_page.mjs",
|
|
8994
9009
|
"mode": "0000644",
|
|
8995
|
-
"sha256": "
|
|
9010
|
+
"sha256": "cfdd0fa602c05c5ccc97cad3786a39f5941861597c947781dc23b2b7af12b137"
|
|
8996
9011
|
},
|
|
8997
9012
|
{
|
|
8998
9013
|
"path": "tests/lib_sh_resolution.mjs",
|
|
@@ -9402,12 +9417,12 @@
|
|
|
9402
9417
|
{
|
|
9403
9418
|
"path": "tests/projects_hub.mjs",
|
|
9404
9419
|
"mode": "0000644",
|
|
9405
|
-
"sha256": "
|
|
9420
|
+
"sha256": "5da44f27ff5f930077237722957eabe02f5965602a8fed0927e0311f278273d0"
|
|
9406
9421
|
},
|
|
9407
9422
|
{
|
|
9408
9423
|
"path": "tests/projects_hub_pre_uat.mjs",
|
|
9409
9424
|
"mode": "0000644",
|
|
9410
|
-
"sha256": "
|
|
9425
|
+
"sha256": "9cf9882d54011ea2284cb709c02abd2228d6a073b207e255b8958e0ca54794ae"
|
|
9411
9426
|
},
|
|
9412
9427
|
{
|
|
9413
9428
|
"path": "tests/promote_goal_id.mjs",
|
|
@@ -10152,7 +10167,7 @@
|
|
|
10152
10167
|
{
|
|
10153
10168
|
"path": "tests/ui_design_kit.mjs",
|
|
10154
10169
|
"mode": "0000644",
|
|
10155
|
-
"sha256": "
|
|
10170
|
+
"sha256": "25b4f754abb89f4a01237e81199dbcca824045563a2b6dbadca234227ff8ef3c"
|
|
10156
10171
|
},
|
|
10157
10172
|
{
|
|
10158
10173
|
"path": "tests/ui_design_skills.mjs",
|
|
@@ -64,7 +64,7 @@ export interface GetInboxTemplateResponse { template: unknown }
|
|
|
64
64
|
export interface GetLeaderboardResponse { leaderboard: unknown; page: unknown }
|
|
65
65
|
export interface GetLearningsResponse { learnings: unknown }
|
|
66
66
|
export interface GetMeAchievementsResponse { unlocked: unknown }
|
|
67
|
-
export interface GetMeCrossProjectResponse { hide_stats: boolean; profile_state: unknown; handle: unknown; display_name: unknown; bio: unknown; links: unknown; cross_project: unknown }
|
|
67
|
+
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 }
|
|
68
68
|
export interface GetMeDisplayNameResponse { display_name: unknown; max_length: unknown }
|
|
69
69
|
export interface GetMeEventSoundPrefsResponse { prefs: unknown; effective: unknown; effective_wav: unknown; events: unknown }
|
|
70
70
|
export interface GetMeRecentShipsResponse { ships: unknown }
|
|
@@ -147,8 +147,8 @@ export interface PatchInboxIdBodyRequest { body_md: string }
|
|
|
147
147
|
export interface PatchInboxIdBodyResponse { ok: boolean; idea: unknown; delta: unknown; unchanged: unknown }
|
|
148
148
|
export interface PatchInboxIdRequest { status?: "open" | "promoted" | "discarded" | "merged"; kind?: string; promoted_to_task_id?: number; reviewed_at?: unknown; merged_into_idea_id?: number; triage_note?: string }
|
|
149
149
|
export interface PatchInboxIdResponse { idea: unknown }
|
|
150
|
-
export interface PatchMeCrossProjectRequest { hide_stats
|
|
151
|
-
export interface PatchMeCrossProjectResponse { hide_stats: boolean }
|
|
150
|
+
export interface PatchMeCrossProjectRequest { hide_stats?: boolean; account_visibility?: string; recruiter_discoverable?: boolean }
|
|
151
|
+
export interface PatchMeCrossProjectResponse { hide_stats: boolean; account_visibility: unknown; recruiter_discoverable: unknown; recruiter_discoverable_effective: unknown }
|
|
152
152
|
export interface PatchMeDisciplinesRequest { preferred_disciplines: string[] }
|
|
153
153
|
export interface PatchMeDisciplinesResponse { builder: unknown; onboarding: unknown }
|
|
154
154
|
export interface PatchMeDisplayNameResponse { display_name: unknown; max_length: unknown }
|
|
@@ -784,7 +784,7 @@ export interface BongosClient {
|
|
|
784
784
|
/** GET /me/cross-project — rank: any-builder */
|
|
785
785
|
getMeCrossProject(args?: RequestArgs): Promise<GetMeCrossProjectResponse>;
|
|
786
786
|
/** PATCH /me/cross-project — rank: any-builder */
|
|
787
|
-
patchMeCrossProject(args
|
|
787
|
+
patchMeCrossProject(args?: RequestArgs & { body?: PatchMeCrossProjectRequest }): Promise<PatchMeCrossProjectResponse>;
|
|
788
788
|
/** PATCH /me/disciplines — rank: any-builder */
|
|
789
789
|
patchMeDisciplines(args: RequestArgs & { body: PatchMeDisciplinesRequest }): Promise<PatchMeDisciplinesResponse>;
|
|
790
790
|
/** GET /me/display-name — rank: any-builder */
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# 0204 — The apex is dark only; light is the builders' hall's
|
|
2
|
+
|
|
3
|
+
- **Status:** Accepted
|
|
4
|
+
- **Date:** 2026-08-29
|
|
5
|
+
- **Deciders:** the owner (Archon), on the planets review of 2026-08-28: "only black or only white is a bit bland, frankly I am leaning towards only dark mode for this page and keep the dark/light mode to be solely for the builder hall. That way we could focus in on that style. This would also mean we could invest into a cool space themed backdrop for the blobs." Confirmed the same day as the WHOLE apex (landing, hub, legal pages), not the map alone. Claude implemented.
|
|
6
|
+
- **Task:** task 1003336 (goal 1000080 — Apex UI pass 2)
|
|
7
|
+
- **Supersedes in part:** [ADR 0196](<redacted>.md) — its Context ("light mode rebuilt to the dark standard") and the light-mode half of Decision 3 (world.css "the derived tier for both modes") no longer describe what the apex renders; the token contract, the sheet split, the plates and the sentinel rule stand. Also the landing direction's pick of option 3 in `docs/design/<redacted>.md` §5/§6 (2026-08-27): option 4, "dark-only landing", is the one taken after all, widened to every apex page.
|
|
8
|
+
- **Interacts with:** ADR 0062 §3 (the pack's `theme.ui` is one-mode — light values — and is still spliced as the `:root`; the dark blocks override it exactly as before), the `ui-design` module's kit (ADR 0198 line; `modes` in a states file), the hall's own switch (`modules/hall-ui/public/shell.js`, `hall-theme`), the next task in the chain (1003337: a rendered space backdrop for the field — a black-ground plate, which is what a single mode makes possible).
|
|
9
|
+
|
|
10
|
+
## Context
|
|
11
|
+
|
|
12
|
+
The apex shipped with a real, tested light mode: the world round's light landing was called weak, the landing round offered four answers (`<redacted>.md` §5), and on 2026-08-27 the owner picked "light rebuilt to the dark standard" — the chrome as alpha cutouts on paper — over "dark-only landing". The build made both modes real: every dark rule written twice (`:root[data-mode="dark"]` and its `prefers-color-scheme` twin), a pre-paint script on every apex page reading `?mode=`, the persisted `cb-color-mode` choice and the OS preference, a 44px moon/sun glyph in both bars, the kit rendering every state in both modes, and contrast measured in both.
|
|
13
|
+
|
|
14
|
+
Reviewing the planets (task 1003319), the owner saw the two grounds side by side and chose one: the apex commits to dark, so the field can carry a rendered space backdrop (a black-ground plate composites with nothing to hide; a pale ground would need a second, cut-out material for every plate), and the light/dark switch stays what it already is in the builders' hall — the hall's own, on its own key.
|
|
15
|
+
|
|
16
|
+
Three facts shaped the shape of the change:
|
|
17
|
+
|
|
18
|
+
1. **A fixed attribute beats a script.** `data-mode="dark"` on `<html>` in the served markup selects the same dark blocks the toggle used to select, before first paint, with nothing to flash, nothing to persist and nothing for the OS preference to reach — `:root[data-mode="dark"]` wins under `prefers-color-scheme: light`, and the `:root:not([data-mode="light"])` twin agrees under dark. The pack's one-mode `:root` (ADR 0062 §3) is untouched.
|
|
19
|
+
2. **The light tier is load-bearing for tests, not for pixels.** `tests/world_tokens.mjs` and `tests/cosmos_token_contrast.mjs` measure every light pair against AA, and the twins rule is pinned on both pages. Deleting the tier in the same task would be a second, larger diff under a UI change the owner has not seen yet; leaving it costs nothing a visitor can see.
|
|
20
|
+
3. **The kit had no way to say "one mode".** `render.js` walked `MODES` unless `--modes` was passed, and its floor audit flags `data-mode "dark" under a light scheme` — which is now the correct state of every apex page. A states file needs to declare the modes its page renders.
|
|
21
|
+
|
|
22
|
+
## Decision
|
|
23
|
+
|
|
24
|
+
1. **Every apex page pins `data-mode="dark"` on `<html>`**: `/`, `/projects`, `/privacy`, `/terms`, `/contact`. The pre-paint mode scripts leave all five pages; `cb-color-mode` is neither read nor written on the apex; `?mode=` no longer walks a second mode on the landing; no script calls `matchMedia('(prefers-color-scheme: dark)')`.
|
|
25
|
+
2. **The mode glyph leaves both bars** — the landing's `#mode` button and the hub's `#modeToggle`, their moon/sun SVGs, the `.modeBtn` rules (page-local on the landing, `cosmos.css` for the hub, both under-900 variants), the icon-swap twins, and the hub's `resolvedMode` / `paintModeToggle` wiring. The bar's right side closes up: Projects, then the identity slot.
|
|
26
|
+
3. **Light is the builders' hall's alone.** The hall's switch (`hall-theme`) is untouched and stays the only light/dark control on the platform.
|
|
27
|
+
4. **The light tier stays for now.** `world.css` and `cosmos.css` keep their light values and their dark twins; the dark-twins rule in `DESIGN.md` and the `/design` playbook stands as written until the tier's own removal, which is a follow-up task, not this one. The contrast tests keep measuring the light pairs meanwhile.
|
|
28
|
+
5. **The kit learns `modes`.** A states file may declare `"modes": ["dark"]` (validated: a non-empty subset of `dark` / `light`); `render.js` takes it as the default where `--modes` is not passed. `index.states.json` and `projects.states.json` declare `["dark"]` and set `modeQuery: false`; the hub's mode-toggle probe is gone.
|
|
29
|
+
6. **The record.** `DESIGN.md` gains a Modes section and loses the `mode-toggle` component row; both direction records carry a dated note; the copy registry regenerates (the two toggle labels leave it); the tests that pinned the toggle now pin its absence and the fixed attribute (`tests/landing_page.mjs`, `tests/projects_hub.mjs`, `tests/projects_hub_pre_uat.mjs`, `tests/landing_legal_pages.mjs`, `tests/ui_design_kit.mjs`).
|
|
30
|
+
|
|
31
|
+
## Consequences
|
|
32
|
+
|
|
33
|
+
- A visitor whose OS prefers light sees the dark apex; a visitor who had stored `light` on the apex before this change sees dark (the key is simply never read). The hall keeps whatever they chose there.
|
|
34
|
+
- The three alpha cutouts (`--plate-*-cut`) are no longer a light-mode material on the landing's hero; they remain the bongo pair's closing figure and the planets' masks (task 1003319), so they stay in `public-landing/assets/world/`.
|
|
35
|
+
- The next task (1003337) can treat the field's ground as black: a rendered deep-space plate, `cover`, still or a slow transform drift, dead under reduced motion.
|
|
36
|
+
- Rejected: keeping the toggle but defaulting dark (the owner's ask was one mode, not a default); deleting the light tier here (a larger diff than the decision needs, under a change not yet reviewed); moving `--modes dark` into every kit invocation instead of the states file (the file is the page's contract; the flag is a session's override).
|
package/docs/adr/README.md
CHANGED
|
@@ -291,5 +291,6 @@ This keeps the decision history honest and traceable.
|
|
|
291
291
|
| 0201 | [**An application is the project's own `access_requests` row, vouched for by a hub-signed assertion carried in a HEADER; the record it carries is resolved live and never stored** ([task 1002283](https://cloudbongos.com/builders#/task/1002283), goal 1000045 — public builder profiles, C3/C4). The join relay (`POST /my-projects/join`) already posts `{github_login, display_name, note}` to the target's PUBLIC, unauthenticated `POST /access-requests` — presenting nothing the applicant could not have typed into the project's own landing page. Attaching a cross-project record to a login nobody vouched for turns the owner's queue into an impersonation surface: file a request naming a well-known builder, the owner reads that builder's track record beside it and approves, and whoever holds that GitHub account signs in. So the record is the thing that makes the unauthenticated write dangerous, and C4 cannot be built without closing it. Decisions: **D1** the application stays an `access_requests` row on the target — `status='invited'` IS what `hasInvitedAccessRequest` reads, so a parallel record would need a second branch in `firstTimeAdmissionBlocked`, the one decision that exists as one function to prevent drift; the migration adds only `applicant_github_id text` (core's own type) + `vouched_at`, the non-null id IS the vouch mark, and the console wave's `kind`/`created_by` stay a separate additive migration; the hub keeps a STATUSLESS echo `(github_id, client_id, applied_at)` so the applicant's own cards can say "you applied on <date>" without polling every project — it may never claim what the project decided (an approval becomes visible the way membership always does, via the check-in), and it ages out at 30 days; re-applying answers `requested`, not 409. **D2** the hub signs an audience-scoped `purpose: 'application'` assertion with the existing `mintHubAssertion`, verified OFFLINE by the existing `verifyHubAssertion` against the already-provisioned `<PREFIX>_HUB_PUBLIC_KEY` — no new secret, no apply-time hub call — and it travels in `<redacted>` because `validateOrRespond` is STRICT by default: a body field would 400 on every older pin, and `joinRelayOutcome` reads a 400 as "could not be reached", breaking applications to most projects for good (the CLI's device exchange carries its assertion in the body because that route was new; this one is not). A missing or invalid assertion writes the row UNVOUCHED, never refuses — refusing locks out an older hub and hands an attacker a denial vector. The record itself is never copied: the row stores an identity (+ the handle, since `GET /profiles/:handle` is the addressed read), and the REVIEWER'S BROWSER fetches the hub's already-public, already-CORS'd, already-`no-store` profile at render, where `profile_state='active' AND NOT hide_stats` is applied inside the module — so C2's live hide is honoured by construction with no cache to outlive it, and a hub outage degrades to "record unavailable" beside a queue that still works. An instance→hub server pull was rejected on ADR 0171 D1's own grounds. A private account's application carries name + handle + note in V1; the D3 sliver needs `project.recruit`, which the hub cannot check cross-origin. **D3** "project owner" is the project's OWN archon — the registrant is whoever `maybeSeatFirstAdmin` seated, delegates are whoever that archon grants on that instance, and because the instance IS the project the per-project-scoped-permission problem dissolves; the check is the atom that already guards the act, `access_request.review` (floor archon), and this goal mints NO new permission (widening the read half is the console wave's `project.recruit`). `platform_identity_projects.owner_github_id` stays advisory and is never a gate — a hub-held owner list consulted before an admission is the inversion ADR 0141 exists to prevent. **D4** three statuses, unchanged: `invited` IS the approval and the acceptance act is signing in (an `accepted` state would be a second place membership is asserted, free to drift from the one that admits); rescind is `invited → dismissed`, which the PATCH must learn to accept (it resolves only from `pending` today) and which must never pretend to remove a member who already signed in; an `invited` row expires read-time at 30 days whatever created it, while an application never expires because a stale `pending` admits nobody; approve/decline are idempotent on the value they hold. Rejected: a cross-project `applications` table on either side; a stored profile snapshot; the assertion in the body; refusing an unvouched application; the server-side pull; reading `owner_github_id` as authorization; a new "project owner" atom; an `accepted` status.](<redacted>.md) | platform identity / applications |
|
|
292
292
|
| 0202 | [**A connection is one directed row on the platform account, and every degree label is computed over the graph the viewer is allowed to see** ([task 1002294](https://cloudbongos.com/builders#/task/1002294), goal 1000045 criterion C6 — the design spike for the connections wave). Criterion C6 asks for LinkedIn-shaped connections; the cross-project data plane it must sit on is account-global (ADR 0141) and governed by an owner-signed privacy matrix (`docs/specs/<redacted>.md` D1/D2), where ADR 0171 D4 already bans "a count plus a hidden total" as a leak by subtraction. Decisions: (1) **one directed request row** on a new `platform_identity_connections` — `requester`/`addressee` kept because the inbox, cancel and cooldown all need to know who asked, with `pair_lo`/`pair_hi` GENERATED from LEAST/GREATEST and a partial unique index over `pending|accepted` so a duplicate AND a simultaneous reciprocal request are database errors, not route bugs; module-owned and `platform_identity_`-namespaced (ADR 0083 §5). (2) The `goal_membership_requests` lifecycle (`pending → accepted|rejected|cancelled`, atomic resolve-and-act) with three deliberate divergences: a decline is **silent**, a re-ask inside its 90-day cooldown is **swallowed and answered as if it worked** (ADR 0194 §3 applied to a person — a 409 saying "declined" would disclose what the silence protects), and pending requests expire at **30 days read-time** (privacy spec D4), with expiry resolved in the same statement that inserts, since `now()` cannot live in an index predicate. Remove **hard-deletes** — a "A removed B" tombstone is data neither party consented to keep and no read path uses. (3) Degree = a **recursive CTE seeded at the viewer**, `DEGREE_MAX = 3` with `FANOUT_1`/`FANOUT_2` caps and a deterministic frontier order; past the caps the label is `null` ("out of network"), never a number the query did not establish. Envelope stated honestly: single-digit ms at hub scale, caps bite around 10⁴ accounts, and they convert a hub-heavy account's millions-wide 3-hop into a *missing label* on a page that still renders. (4) Connections get **no predicate of their own** — they consume task 1002967's single effective-visibility reader, published as JS and as `accountVisibleSql(alias)` (the ADR 0182 form); `profile_state='active'` floors the feature, a private account answers **404 not 403** and never appears in a public list, `hide_stats` suppresses the numbers beside an edge but not the edge, degree is an **own-scope read** so viewer-relative labels coexist with viewer-independent public responses — and every count is the length of the array the viewer may see. (5) "Builders you may know" from mutuals + shared projects + recency, one explainable linear score, a named project only where its catalogue row is publicly listed; shared goals refused (instance-local), guilds a reserved empty slot, and **Discord refused outright** (outside the trust boundary; the hub stores no Discord identity), as are the GitHub follower graph and address-book import. Rejected: two mirrored rows on accept; a symmetric edge with no requester; a core table beside `builders`; a materialised closure/adjacency table (privacy-filtered at write time = a cached visibility decision, which ADR 0171 D2 forbids); an in-process graph cache; a graph database. Deferred and named: a connections-specific hide toggle, blocking, what an accepted connection unlocks on a private account, and notifications beyond the existing attention card. Exposes to the guild/orb wave: `neighbours`, `degreeBetween`, `mutualCount` — **not** a stored strength scalar.](<redacted>.md) | platform identity / privacy / social graph |
|
|
293
293
|
| 0203 | [**The doorway changelog leaves `src/module-api.js` — the CI auto-patch carrier appends to a markdown ledger instead** ([task 1003335](https://cloudbongos.com/builders#/task/1003335)). Amends [ADR 0161](<redacted>.md) §2. The `CORE_VERSION` release history lived as a comment block inside the doorway file, and ADR 0161's carrier appends two lines to it on EVERY merge-triggered release, pushed by `github-actions[bot]` straight to `main` — bypassing the `unit` gate it breaks. Release 1.19.407 took the file to 1501 lines, one over the `oversized_file_count` ratchet: `unit` went red on `main` and every open PR inherited it, self-inflicting and monotonic. Decision: the ledger moves to `docs/module-api-changelog.md` — markdown, which `fitness-ratchets.js` (`git ls-files '*.js'`) structurally never counts, so it can grow forever. All 1222 lines / 448 versions moved verbatim (only the `// ` marker stripped, kept in a fenced block so the hanging indent survives); the `const CORE_VERSION` literal and its line shape do NOT move, so every reader that greps it is untouched. `bump-version.js` transforms both files before writing either and refuses a half-applied bump; `publish.yml` stages both, pinned by `tests/bump_version.mjs`; the file is registered in `PUBLISH_ALLOWLIST` so the history keeps shipping inside `@bongos/core`; `src/module-api.js` keeps a pointer doc-comment where the block was. Rejected: trimming entries in place (buys one release), raising the baseline (out of policy per `config/fitness-baselines.json`'s own `_comment`), exempting the file from the ratchet.](<redacted>.md) | build pipeline / distribution |
|
|
294
|
+
| 0204 | [**The apex is dark only; light is the builders' hall's** ([task 1003336](https://cloudbongos.com/builders#/task/1003336), goal 1000080). Supersedes in part [ADR 0196](<redacted>.md) (the light-mode half of the landing build) and the landing direction's 2026-08-27 pick of "light rebuilt to the dark standard". The owner, reviewing the planets: "only black or only white is a bit bland… leaning towards only dark mode for this page and keep the dark/light mode to be solely for the builder hall", confirmed as the WHOLE apex. Decision: `/`, `/projects`, `/privacy`, `/terms` and `/contact` pin `data-mode="dark"` on `<html>` — no pre-paint script, no `cb-color-mode`, no `?mode=`, no OS-preference read; the moon/sun glyph and its wiring leave both bars; the hall's own `hall-theme` switch is the platform's only light/dark control. The light tier of `world.css` / `cosmos.css` and the dark-twins rule STAY until the tier's own removal (the light-pair contrast tests keep measuring). The kit learns `"modes": ["dark"]` in a states file (validated; `render.js` takes it as the default). Rejected: a dark default with the toggle kept; deleting the light tier in the same diff; `--modes dark` on every kit call instead of the page's contract.](<redacted>.md) | apex / design system |
|
|
294
295
|
|
|
295
296
|
> ⚠️ **Numbering collisions are now machine-enforced, not narrated.** Twenty numbers are shared by two ADRs each — assigned in parallel sessions before anything checked. The files keep their filenames (renumbering would break every existing citation, and a number once assigned is never reused), and this table disambiguates each pair as `NNNN-a` / `NNNN-b`. The authoritative list is `LEGACY_DUPLICATE_ADRS` in [`scripts/gds/adr-namespace.js`](../../scripts/gds/adr-namespace.js), frozen by exact filename: a **new** collision — or a third file joining a legacy number, or a rename of either half — hard-fails the `unit` CI gate, as does an index row that points at no file or an ADR with no row. The list may only shrink. This paragraph used to narrate the collisions one by one and had fallen eight behind reality; see [ADR 0195](<redacted>.md) for why the check exists and why the pairs are grandfathered rather than renumbered.
|
package/docs/api/openapi.json
CHANGED
|
@@ -7959,7 +7959,7 @@
|
|
|
7959
7959
|
"me"
|
|
7960
7960
|
],
|
|
7961
7961
|
"summary": "GET /me/cross-project",
|
|
7962
|
-
"description": "the caller's OWN cross-project record +
|
|
7962
|
+
"description": "the caller's OWN cross-project record + privacy flags (own data).\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
7963
7963
|
"x-rank": "any-builder",
|
|
7964
7964
|
"x-source": "modules/platform-identity/routes/profile.js",
|
|
7965
7965
|
"responses": {
|
|
@@ -7995,11 +7995,11 @@
|
|
|
7995
7995
|
"me"
|
|
7996
7996
|
],
|
|
7997
7997
|
"summary": "PATCH /me/cross-project",
|
|
7998
|
-
"description": "flip the caller's OWN
|
|
7998
|
+
"description": "flip the caller's OWN privacy flags (C2's self-serve opt-out plus the task-1002966 pair; own data, keyed on the authenticated github_id — a builder can never name another account here). Every field is optional and at least one is required, so a client sends only what changed; recruiter_discoverable accepts an explicit null (reset to \"follow visibility\"), which is why it is checked with `in` rather than truthiness.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
7999
7999
|
"x-rank": "any-builder",
|
|
8000
8000
|
"x-source": "modules/platform-identity/routes/profile.js",
|
|
8001
8001
|
"requestBody": {
|
|
8002
|
-
"required":
|
|
8002
|
+
"required": false,
|
|
8003
8003
|
"content": {
|
|
8004
8004
|
"application/json": {
|
|
8005
8005
|
"schema": {
|
|
@@ -15648,7 +15648,10 @@
|
|
|
15648
15648
|
"display_name": {},
|
|
15649
15649
|
"bio": {},
|
|
15650
15650
|
"links": {},
|
|
15651
|
-
"cross_project": {}
|
|
15651
|
+
"cross_project": {},
|
|
15652
|
+
"account_visibility": {},
|
|
15653
|
+
"recruiter_discoverable": {},
|
|
15654
|
+
"recruiter_discoverable_effective": {}
|
|
15652
15655
|
},
|
|
15653
15656
|
"required": [
|
|
15654
15657
|
"hide_stats",
|
|
@@ -15657,7 +15660,10 @@
|
|
|
15657
15660
|
"display_name",
|
|
15658
15661
|
"bio",
|
|
15659
15662
|
"links",
|
|
15660
|
-
"cross_project"
|
|
15663
|
+
"cross_project",
|
|
15664
|
+
"account_visibility",
|
|
15665
|
+
"recruiter_discoverable",
|
|
15666
|
+
"recruiter_discoverable_effective"
|
|
15661
15667
|
]
|
|
15662
15668
|
},
|
|
15663
15669
|
"GetMeDisplayNameResponse": {
|
|
@@ -16754,11 +16760,14 @@
|
|
|
16754
16760
|
"properties": {
|
|
16755
16761
|
"hide_stats": {
|
|
16756
16762
|
"type": "boolean"
|
|
16763
|
+
},
|
|
16764
|
+
"account_visibility": {
|
|
16765
|
+
"type": "string"
|
|
16766
|
+
},
|
|
16767
|
+
"recruiter_discoverable": {
|
|
16768
|
+
"type": "boolean"
|
|
16757
16769
|
}
|
|
16758
16770
|
},
|
|
16759
|
-
"required": [
|
|
16760
|
-
"hide_stats"
|
|
16761
|
-
],
|
|
16762
16771
|
"additionalProperties": false
|
|
16763
16772
|
},
|
|
16764
16773
|
"PatchMeCrossProjectResponse": {
|
|
@@ -16766,10 +16775,16 @@
|
|
|
16766
16775
|
"properties": {
|
|
16767
16776
|
"hide_stats": {
|
|
16768
16777
|
"type": "boolean"
|
|
16769
|
-
}
|
|
16778
|
+
},
|
|
16779
|
+
"account_visibility": {},
|
|
16780
|
+
"recruiter_discoverable": {},
|
|
16781
|
+
"recruiter_discoverable_effective": {}
|
|
16770
16782
|
},
|
|
16771
16783
|
"required": [
|
|
16772
|
-
"hide_stats"
|
|
16784
|
+
"hide_stats",
|
|
16785
|
+
"account_visibility",
|
|
16786
|
+
"recruiter_discoverable",
|
|
16787
|
+
"recruiter_discoverable_effective"
|
|
16773
16788
|
]
|
|
16774
16789
|
},
|
|
16775
16790
|
"PatchMeDisciplinesRequest": {
|
package/docs/api-reference.md
CHANGED
|
@@ -340,8 +340,8 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
|
|
|
340
340
|
| GET | `/api/bongos/me` | `any-builder` | — | PMS-V2 task 188: response now also carries `unlocked` (server-joined achievement metadata) + `locked_with_progress` (server-computed huma… |
|
|
341
341
|
| GET | `/api/bongos/me/achievements` | `any-builder` | — | The builder's unlocked achievements (joined to achievement metadata). |
|
|
342
342
|
| POST | `/api/bongos/me/anthropic-link` | `any-builder` | `anthropic_email`, `anthropic_user_id` | V3.R10 (task 235), criterion C3 — link the authed builder's Anthropic account. |
|
|
343
|
-
| GET | `/api/bongos/me/cross-project` | `any-builder` | — | the caller's OWN cross-project record +
|
|
344
|
-
| PATCH | `/api/bongos/me/cross-project` | `any-builder` | `hide_stats` | flip the caller's OWN
|
|
343
|
+
| GET | `/api/bongos/me/cross-project` | `any-builder` | — | the caller's OWN cross-project record + privacy flags (own data). |
|
|
344
|
+
| PATCH | `/api/bongos/me/cross-project` | `any-builder` | `hide_stats`, `account_visibility`, `recruiter_discoverable` | flip the caller's OWN privacy flags (C2's self-serve opt-out plus the task-1002966 pair; own data, keyed on the authenticated github_id —… |
|
|
345
345
|
| PATCH | `/api/bongos/me/disciplines` | `any-builder` | `preferred_disciplines` | Self-service edit of the authenticated builder's preferred disciplines (migrations 027 + 086 / V3.R80). |
|
|
346
346
|
| GET | `/api/bongos/me/display-name` | `any-builder` | — | Per-builder DISPLAY NAME (task 1669). |
|
|
347
347
|
| PATCH | `/api/bongos/me/display-name` | `any-builder` | _undocumented_ | PATCH the display name. |
|