@bongos/core 1.19.413 → 1.19.415
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 +190 -40
- package/docs/adr/0204-the-apex-is-dark-only.md +36 -0
- package/docs/adr/README.md +1 -0
- package/docs/copy-inventory.md +310 -312
- package/docs/copy-registry.json +394 -412
- package/docs/design/landing-page-direction-v2.md +2 -0
- package/docs/design/mocks/hub/assets/r3-space-deepfield-half.jpg +0 -0
- package/docs/design/mocks/hub/assets/r3-space-deepfield-half.jpg.json +13 -0
- package/docs/design/mocks/hub/assets/r3-space-dust-half.jpg +0 -0
- package/docs/design/mocks/hub/assets/r3-space-dust-half.jpg.json +13 -0
- package/docs/design/mocks/hub/assets/r3-space-nebula-half.jpg +0 -0
- package/docs/design/mocks/hub/assets/r3-space-nebula-half.jpg.json +13 -0
- package/docs/design/mocks/hub/assets/r3-space-starfield-half.jpg +0 -0
- package/docs/design/mocks/hub/assets/r3-space-starfield-half.jpg.json +13 -0
- package/docs/design/mocks/hub/planets.html +127 -3
- package/docs/design/projects-hub-direction-v2.md +14 -0
- package/docs/module-api-changelog.md +4 -0
- package/docs/recipes/ui-look-before-you-ship.md +4 -1
- package/modules/platform-identity/migrations/platform_identity_013_project_template_materials.sql +31 -0
- package/modules/platform-identity/platform-identity.js +18 -5
- package/modules/platform-identity/routes/projects.js +3 -2
- package/modules/platform-identity/tests/platform-identity.mjs +23 -12
- package/modules/ui-design/kit/fixtures/featured.json +1 -1
- 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 +50 -18
- package/public-landing/assets/world/r3-frost-bead-cut.webp +0 -0
- package/public-landing/assets/world/r3-frost-bead-cut.webp.json +15 -0
- package/public-landing/assets/world/r3-frost-blob-cut.webp +0 -0
- package/public-landing/assets/world/r3-frost-blob-cut.webp.json +15 -0
- package/public-landing/assets/world/r3-frost-pair-cut.webp +0 -0
- package/public-landing/assets/world/r3-frost-pair-cut.webp.json +15 -0
- package/public-landing/assets/world/r3-gold-bead-cut.webp +0 -0
- package/public-landing/assets/world/r3-gold-bead-cut.webp.json +15 -0
- package/public-landing/assets/world/r3-gold-blob-cut.webp +0 -0
- package/public-landing/assets/world/r3-gold-blob-cut.webp.json +15 -0
- package/public-landing/assets/world/r3-gold-pair-cut.webp +0 -0
- package/public-landing/assets/world/r3-gold-pair-cut.webp.json +15 -0
- package/public-landing/assets/world/r3-obsidian-bead-cut.webp +0 -0
- package/public-landing/assets/world/r3-obsidian-bead-cut.webp.json +15 -0
- package/public-landing/assets/world/r3-obsidian-blob-cut.webp +0 -0
- package/public-landing/assets/world/r3-obsidian-blob-cut.webp.json +15 -0
- package/public-landing/assets/world/r3-obsidian-pair-cut.webp +0 -0
- package/public-landing/assets/world/r3-obsidian-pair-cut.webp.json +15 -0
- package/public-landing/assets/world/r3-space-nebula.jpg +0 -0
- package/public-landing/assets/world/r3-space-nebula.jpg.json +13 -0
- 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 +27 -55
- package/public-landing/projects.probes.json +0 -3
- package/public-landing/projects.states.json +4 -3
- package/public-landing/terms.html +2 -6
- package/scripts/gds/worktree.js +11 -0
- package/src/module-api.js +1 -1
- package/tests/landing_legal_pages.mjs +10 -0
- package/tests/landing_page.mjs +16 -19
- package/tests/projects_hub.mjs +69 -19
- 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.415",
|
|
6
|
+
"core_contract": "1.19.415",
|
|
7
|
+
"source_commit": "6e1130920b6477c117c5b10a7f2754db87ef558a",
|
|
8
8
|
"source_ref": "HEAD",
|
|
9
|
-
"built_at": "2026-08-
|
|
9
|
+
"built_at": "2026-08-29T16:12:53.136Z",
|
|
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": 1698,
|
|
15
15
|
"rules": 3,
|
|
16
16
|
"gate_literals": 3,
|
|
17
17
|
"gate": "passed"
|
|
18
18
|
},
|
|
19
|
-
"file_count":
|
|
20
|
-
"tree_sha256": "
|
|
19
|
+
"file_count": 2076,
|
|
20
|
+
"tree_sha256": "992018f989d8c0b69b801d98f5bae82fb871101fb97f42f1dd43c3b4a63548cf",
|
|
21
21
|
"files": [
|
|
22
22
|
{
|
|
23
23
|
"path": ".claude/skills/blocker-review/SKILL.md",
|
|
@@ -1519,10 +1519,15 @@
|
|
|
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",
|
|
@@ -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",
|
|
@@ -1604,6 +1609,46 @@
|
|
|
1604
1609
|
"mode": "0000644",
|
|
1605
1610
|
"sha256": "c77dbf2152c6109b6ce925e2badf6dfaa74f74c2d0cb7eb76fa1101eec7b3310"
|
|
1606
1611
|
},
|
|
1612
|
+
{
|
|
1613
|
+
"path": "docs/design/mocks/hub/assets/r3-space-deepfield-half.jpg",
|
|
1614
|
+
"mode": "0000644",
|
|
1615
|
+
"sha256": "e71d93b80bbad4dc603a7536f549d4e676d907a955b56f04e351c29aebe85383"
|
|
1616
|
+
},
|
|
1617
|
+
{
|
|
1618
|
+
"path": "docs/design/mocks/hub/assets/r3-space-deepfield-half.jpg.json",
|
|
1619
|
+
"mode": "0000644",
|
|
1620
|
+
"sha256": "a3b4363ceded0fa82a8def87a582e06c16085f30e983bf13f09b7764c4db4276"
|
|
1621
|
+
},
|
|
1622
|
+
{
|
|
1623
|
+
"path": "docs/design/mocks/hub/assets/r3-space-dust-half.jpg",
|
|
1624
|
+
"mode": "0000644",
|
|
1625
|
+
"sha256": "9961ed377857436697342797e5edb37d703d38afc3d6a1a0907f01cf7f63ae65"
|
|
1626
|
+
},
|
|
1627
|
+
{
|
|
1628
|
+
"path": "docs/design/mocks/hub/assets/r3-space-dust-half.jpg.json",
|
|
1629
|
+
"mode": "0000644",
|
|
1630
|
+
"sha256": "91a5ce1f09294c5e0b871744f2b48411fff91efa1c204f9bded23d6098132238"
|
|
1631
|
+
},
|
|
1632
|
+
{
|
|
1633
|
+
"path": "docs/design/mocks/hub/assets/r3-space-nebula-half.jpg",
|
|
1634
|
+
"mode": "0000644",
|
|
1635
|
+
"sha256": "86d568153e1067a90cd80781b5a69a06f17aec17ce00722cbb5ecee46731bbaa"
|
|
1636
|
+
},
|
|
1637
|
+
{
|
|
1638
|
+
"path": "docs/design/mocks/hub/assets/r3-space-nebula-half.jpg.json",
|
|
1639
|
+
"mode": "0000644",
|
|
1640
|
+
"sha256": "a40d8f172a8e4cebea966e6b241ca972b200345874f65fe56eacf0777d3f66fb"
|
|
1641
|
+
},
|
|
1642
|
+
{
|
|
1643
|
+
"path": "docs/design/mocks/hub/assets/r3-space-starfield-half.jpg",
|
|
1644
|
+
"mode": "0000644",
|
|
1645
|
+
"sha256": "1b6f8ec5b0901330261bd87bfaacffcb0f7c2347c11936cbc5ca3375908671cd"
|
|
1646
|
+
},
|
|
1647
|
+
{
|
|
1648
|
+
"path": "docs/design/mocks/hub/assets/r3-space-starfield-half.jpg.json",
|
|
1649
|
+
"mode": "0000644",
|
|
1650
|
+
"sha256": "388a176e498d336119f144abddf7a4ebe12a816509938ffae0f11a374b04e552"
|
|
1651
|
+
},
|
|
1607
1652
|
{
|
|
1608
1653
|
"path": "docs/design/mocks/hub/hub-sheet.html",
|
|
1609
1654
|
"mode": "0000644",
|
|
@@ -1612,7 +1657,7 @@
|
|
|
1612
1657
|
{
|
|
1613
1658
|
"path": "docs/design/mocks/hub/planets.html",
|
|
1614
1659
|
"mode": "0000644",
|
|
1615
|
-
"sha256": "
|
|
1660
|
+
"sha256": "6315757db4385da41ee78199a31cc312736e074676d47a3876f7707c86785962"
|
|
1616
1661
|
},
|
|
1617
1662
|
{
|
|
1618
1663
|
"path": "docs/design/mocks/hub/v1.html",
|
|
@@ -1807,7 +1852,7 @@
|
|
|
1807
1852
|
{
|
|
1808
1853
|
"path": "docs/design/projects-hub-direction-v2.md",
|
|
1809
1854
|
"mode": "0000644",
|
|
1810
|
-
"sha256": "
|
|
1855
|
+
"sha256": "591cc1d627cc64240c02bee54ef1cce0dd9c68207a52365e8423e7630af7c483"
|
|
1811
1856
|
},
|
|
1812
1857
|
{
|
|
1813
1858
|
"path": "docs/design/projects-hub-direction.md",
|
|
@@ -1867,7 +1912,7 @@
|
|
|
1867
1912
|
{
|
|
1868
1913
|
"path": "docs/module-api-changelog.md",
|
|
1869
1914
|
"mode": "0000644",
|
|
1870
|
-
"sha256": "
|
|
1915
|
+
"sha256": "728e49741b202322cb1e86147fd1a063e9421d094e6fa39ebbf11afa216ab23e"
|
|
1871
1916
|
},
|
|
1872
1917
|
{
|
|
1873
1918
|
"path": "docs/modules-contract.md",
|
|
@@ -2097,7 +2142,7 @@
|
|
|
2097
2142
|
{
|
|
2098
2143
|
"path": "docs/recipes/ui-look-before-you-ship.md",
|
|
2099
2144
|
"mode": "0000644",
|
|
2100
|
-
"sha256": "
|
|
2145
|
+
"sha256": "1d29b5407a29c4a2fc7b2a7114cb6679f7104d6a0cf38b6a77606d529d0d8734"
|
|
2101
2146
|
},
|
|
2102
2147
|
{
|
|
2103
2148
|
"path": "docs/recipes/upgrading-the-core.md",
|
|
@@ -4784,6 +4829,11 @@
|
|
|
4784
4829
|
"mode": "0000644",
|
|
4785
4830
|
"sha256": "297c6a01f7de133dd9b97daa082ed64465c32349d90ef6ddc6cbfacfac034da3"
|
|
4786
4831
|
},
|
|
4832
|
+
{
|
|
4833
|
+
"path": "modules/platform-identity/migrations/platform_identity_013_project_template_materials.sql",
|
|
4834
|
+
"mode": "0000644",
|
|
4835
|
+
"sha256": "50b993d4cdad3981b4ace6c60c4f9ee350076a2ee9b205b7fc7d80de255f492e"
|
|
4836
|
+
},
|
|
4787
4837
|
{
|
|
4788
4838
|
"path": "modules/platform-identity/module.json",
|
|
4789
4839
|
"mode": "0000644",
|
|
@@ -4792,7 +4842,7 @@
|
|
|
4792
4842
|
{
|
|
4793
4843
|
"path": "modules/platform-identity/platform-identity.js",
|
|
4794
4844
|
"mode": "0000644",
|
|
4795
|
-
"sha256": "
|
|
4845
|
+
"sha256": "b1b610069c8cc4db794b0a766f7cd608cffd0129c19f6548da86d75ffaa57687"
|
|
4796
4846
|
},
|
|
4797
4847
|
{
|
|
4798
4848
|
"path": "modules/platform-identity/pollers/code-sweep.js",
|
|
@@ -4817,7 +4867,7 @@
|
|
|
4817
4867
|
{
|
|
4818
4868
|
"path": "modules/platform-identity/routes/projects.js",
|
|
4819
4869
|
"mode": "0000644",
|
|
4820
|
-
"sha256": "
|
|
4870
|
+
"sha256": "cad8af2040afe189f2a5964af66b872bb1897d4259f73cab24765671a295493d"
|
|
4821
4871
|
},
|
|
4822
4872
|
{
|
|
4823
4873
|
"path": "modules/platform-identity/routes/public-profile.js",
|
|
@@ -4837,7 +4887,7 @@
|
|
|
4837
4887
|
{
|
|
4838
4888
|
"path": "modules/platform-identity/tests/platform-identity.mjs",
|
|
4839
4889
|
"mode": "0000644",
|
|
4840
|
-
"sha256": "
|
|
4890
|
+
"sha256": "aeeda004820071e63bce92d60a21fa831f72ee8ba449a41d93c6a108e19571e9"
|
|
4841
4891
|
},
|
|
4842
4892
|
{
|
|
4843
4893
|
"path": "modules/platform-identity/ui/.gitkeep",
|
|
@@ -5277,7 +5327,7 @@
|
|
|
5277
5327
|
{
|
|
5278
5328
|
"path": "modules/ui-design/kit/fixtures/featured.json",
|
|
5279
5329
|
"mode": "0000644",
|
|
5280
|
-
"sha256": "
|
|
5330
|
+
"sha256": "3fe95d4cc3a31c92b2b02040141dac487ac543a8e4551695883ae3cdf905e7c1"
|
|
5281
5331
|
},
|
|
5282
5332
|
{
|
|
5283
5333
|
"path": "modules/ui-design/kit/fixtures/leaderboard.json",
|
|
@@ -5307,7 +5357,7 @@
|
|
|
5307
5357
|
{
|
|
5308
5358
|
"path": "modules/ui-design/kit/lib.js",
|
|
5309
5359
|
"mode": "0000644",
|
|
5310
|
-
"sha256": "
|
|
5360
|
+
"sha256": "657c5ccebb7223aa7cf71f8ac25f18c6f28054931abbe6ac1ad1203733784f66"
|
|
5311
5361
|
},
|
|
5312
5362
|
{
|
|
5313
5363
|
"path": "modules/ui-design/kit/png.js",
|
|
@@ -5322,7 +5372,7 @@
|
|
|
5322
5372
|
{
|
|
5323
5373
|
"path": "modules/ui-design/kit/render.js",
|
|
5324
5374
|
"mode": "0000644",
|
|
5325
|
-
"sha256": "
|
|
5375
|
+
"sha256": "872bd51f1b221afa226e113c727ec1a428457e9a4621bcffe605642b7d7731e3"
|
|
5326
5376
|
},
|
|
5327
5377
|
{
|
|
5328
5378
|
"path": "modules/ui-design/kit/serve.js",
|
|
@@ -5372,12 +5422,12 @@
|
|
|
5372
5422
|
{
|
|
5373
5423
|
"path": "package-lock.json",
|
|
5374
5424
|
"mode": "0000644",
|
|
5375
|
-
"sha256": "
|
|
5425
|
+
"sha256": "5d5bd36ca85d6db8f0d37e036f6660c525eb07e49335f76d3fc23f33a4b56fe5"
|
|
5376
5426
|
},
|
|
5377
5427
|
{
|
|
5378
5428
|
"path": "package.json",
|
|
5379
5429
|
"mode": "0000644",
|
|
5380
|
-
"sha256": "
|
|
5430
|
+
"sha256": "b1bf9ff0d5e9155030c651fa5eea3e1ce81a683394b7090c5d48b1a87fc79ada"
|
|
5381
5431
|
},
|
|
5382
5432
|
{
|
|
5383
5433
|
"path": "public-docs/index.html",
|
|
@@ -5617,7 +5667,7 @@
|
|
|
5617
5667
|
{
|
|
5618
5668
|
"path": "public-landing/assets/cosmos.css",
|
|
5619
5669
|
"mode": "0000644",
|
|
5620
|
-
"sha256": "
|
|
5670
|
+
"sha256": "d65178a447cd76e5d2a7e7ecc675ddf94ad24c9badb3a19112f0c3802462572f"
|
|
5621
5671
|
},
|
|
5622
5672
|
{
|
|
5623
5673
|
"path": "public-landing/assets/verro-medallion.png",
|
|
@@ -5694,6 +5744,106 @@
|
|
|
5694
5744
|
"mode": "0000644",
|
|
5695
5745
|
"sha256": "2a5f75efe5cbb8181852f662b70c820a1d55aaef5be5ec6ae304e75c22a929d5"
|
|
5696
5746
|
},
|
|
5747
|
+
{
|
|
5748
|
+
"path": "public-landing/assets/world/r3-frost-bead-cut.webp",
|
|
5749
|
+
"mode": "0000644",
|
|
5750
|
+
"sha256": "9b5206027f9fe933a1a8c19f0ea2862def07934be3dfe8e75420ac25233677be"
|
|
5751
|
+
},
|
|
5752
|
+
{
|
|
5753
|
+
"path": "public-landing/assets/world/r3-frost-bead-cut.webp.json",
|
|
5754
|
+
"mode": "0000644",
|
|
5755
|
+
"sha256": "889a52596b7eb5dda8efd55b40876cecca7b375b48b63f9bfe6fcde712b9b4ed"
|
|
5756
|
+
},
|
|
5757
|
+
{
|
|
5758
|
+
"path": "public-landing/assets/world/r3-frost-blob-cut.webp",
|
|
5759
|
+
"mode": "0000644",
|
|
5760
|
+
"sha256": "b91be7ab3e5c10a57cac17357e988eac5c65d548109ff5d6b9e0421c8a2ba0fb"
|
|
5761
|
+
},
|
|
5762
|
+
{
|
|
5763
|
+
"path": "public-landing/assets/world/r3-frost-blob-cut.webp.json",
|
|
5764
|
+
"mode": "0000644",
|
|
5765
|
+
"sha256": "2bad6189937cc4411f38f97c76b6e3763bd1ea4316f6ca15fb6f5cf37b2c143d"
|
|
5766
|
+
},
|
|
5767
|
+
{
|
|
5768
|
+
"path": "public-landing/assets/world/r3-frost-pair-cut.webp",
|
|
5769
|
+
"mode": "0000644",
|
|
5770
|
+
"sha256": "9a5b56345ae6ff65865dac295170f8a4d3f7ee826f90e8f033528a487b3efff1"
|
|
5771
|
+
},
|
|
5772
|
+
{
|
|
5773
|
+
"path": "public-landing/assets/world/r3-frost-pair-cut.webp.json",
|
|
5774
|
+
"mode": "0000644",
|
|
5775
|
+
"sha256": "fb8fe4e6e634b576c137671a530fe768ba6fd9b692c4a64f193b7354d3f6a068"
|
|
5776
|
+
},
|
|
5777
|
+
{
|
|
5778
|
+
"path": "public-landing/assets/world/r3-gold-bead-cut.webp",
|
|
5779
|
+
"mode": "0000644",
|
|
5780
|
+
"sha256": "b88e17e1f073518c148134a4b59c0b6c5243c23e6d216881dddb044c2eeb7408"
|
|
5781
|
+
},
|
|
5782
|
+
{
|
|
5783
|
+
"path": "public-landing/assets/world/r3-gold-bead-cut.webp.json",
|
|
5784
|
+
"mode": "0000644",
|
|
5785
|
+
"sha256": "8148b61264d4f4472bdddd452c424422601f4934b1d70fa2c290b153099fef9d"
|
|
5786
|
+
},
|
|
5787
|
+
{
|
|
5788
|
+
"path": "public-landing/assets/world/r3-gold-blob-cut.webp",
|
|
5789
|
+
"mode": "0000644",
|
|
5790
|
+
"sha256": "6dcad0d34964faa11b281de9fbf5c18019f3958cfe917c556f37295305acc2dd"
|
|
5791
|
+
},
|
|
5792
|
+
{
|
|
5793
|
+
"path": "public-landing/assets/world/r3-gold-blob-cut.webp.json",
|
|
5794
|
+
"mode": "0000644",
|
|
5795
|
+
"sha256": "da5219518adfe28c4648e35c5205d3b8a933c06e6199068bf96887149eb41461"
|
|
5796
|
+
},
|
|
5797
|
+
{
|
|
5798
|
+
"path": "public-landing/assets/world/r3-gold-pair-cut.webp",
|
|
5799
|
+
"mode": "0000644",
|
|
5800
|
+
"sha256": "969326c7530012f5d3150ad771c01d4767ab2223f308d15fe2c425a599169996"
|
|
5801
|
+
},
|
|
5802
|
+
{
|
|
5803
|
+
"path": "public-landing/assets/world/r3-gold-pair-cut.webp.json",
|
|
5804
|
+
"mode": "0000644",
|
|
5805
|
+
"sha256": "a5317bb1b0d1dadd3d0ad2d8b51514709a28dbf592ea710e00ce328b0e0863f7"
|
|
5806
|
+
},
|
|
5807
|
+
{
|
|
5808
|
+
"path": "public-landing/assets/world/r3-obsidian-bead-cut.webp",
|
|
5809
|
+
"mode": "0000644",
|
|
5810
|
+
"sha256": "b49b1f2ea25babd30a5a3715c6411805db78f7fae9a4a052c2a9c7d301d21892"
|
|
5811
|
+
},
|
|
5812
|
+
{
|
|
5813
|
+
"path": "public-landing/assets/world/r3-obsidian-bead-cut.webp.json",
|
|
5814
|
+
"mode": "0000644",
|
|
5815
|
+
"sha256": "c376cc186c82a40de977ffa828d2d65bb3db6d61c2e17c0bcaa72b81086a49a2"
|
|
5816
|
+
},
|
|
5817
|
+
{
|
|
5818
|
+
"path": "public-landing/assets/world/r3-obsidian-blob-cut.webp",
|
|
5819
|
+
"mode": "0000644",
|
|
5820
|
+
"sha256": "e0ea04cfa3fe5a1308db88379d568066552e2d50be7730033c3a51885439232c"
|
|
5821
|
+
},
|
|
5822
|
+
{
|
|
5823
|
+
"path": "public-landing/assets/world/r3-obsidian-blob-cut.webp.json",
|
|
5824
|
+
"mode": "0000644",
|
|
5825
|
+
"sha256": "19a5e7ff35c6d783327a5d02874ff8febd53744b091e25f38c6254e506952b4f"
|
|
5826
|
+
},
|
|
5827
|
+
{
|
|
5828
|
+
"path": "public-landing/assets/world/r3-obsidian-pair-cut.webp",
|
|
5829
|
+
"mode": "0000644",
|
|
5830
|
+
"sha256": "49e77b7f924a2863d05c1f5dfe82c2bd984032adda8953af1ae0d63668f5b8d0"
|
|
5831
|
+
},
|
|
5832
|
+
{
|
|
5833
|
+
"path": "public-landing/assets/world/r3-obsidian-pair-cut.webp.json",
|
|
5834
|
+
"mode": "0000644",
|
|
5835
|
+
"sha256": "fdc7788dabb01b574f105526b99d2a72d1d49086baee85c1745dfaa6606f3356"
|
|
5836
|
+
},
|
|
5837
|
+
{
|
|
5838
|
+
"path": "public-landing/assets/world/r3-space-nebula.jpg",
|
|
5839
|
+
"mode": "0000644",
|
|
5840
|
+
"sha256": "fb185588f5afcbd6067f68ed951b60f19b3634af0d10e3b11bda8c8c25d1cab6"
|
|
5841
|
+
},
|
|
5842
|
+
{
|
|
5843
|
+
"path": "public-landing/assets/world/r3-space-nebula.jpg.json",
|
|
5844
|
+
"mode": "0000644",
|
|
5845
|
+
"sha256": "3608a9d822e343e81a91e1e40eca05726a0569ae2b9daa1a074c3352fbbe4e5c"
|
|
5846
|
+
},
|
|
5697
5847
|
{
|
|
5698
5848
|
"path": "public-landing/buddha.png",
|
|
5699
5849
|
"mode": "0000644",
|
|
@@ -5702,12 +5852,12 @@
|
|
|
5702
5852
|
{
|
|
5703
5853
|
"path": "public-landing/contact.html",
|
|
5704
5854
|
"mode": "0000644",
|
|
5705
|
-
"sha256": "
|
|
5855
|
+
"sha256": "22e81df702236494bff7f283cd25ecbca92df2ea485d995fbd66c0e924faff41"
|
|
5706
5856
|
},
|
|
5707
5857
|
{
|
|
5708
5858
|
"path": "public-landing/index.html",
|
|
5709
5859
|
"mode": "0000644",
|
|
5710
|
-
"sha256": "
|
|
5860
|
+
"sha256": "9d1e904bdb89b929f29871c6c50cbdf9a33d73943b689d167ad26cb1201a01e2"
|
|
5711
5861
|
},
|
|
5712
5862
|
{
|
|
5713
5863
|
"path": "public-landing/index.probes.json",
|
|
@@ -5717,32 +5867,32 @@
|
|
|
5717
5867
|
{
|
|
5718
5868
|
"path": "public-landing/index.states.json",
|
|
5719
5869
|
"mode": "0000644",
|
|
5720
|
-
"sha256": "
|
|
5870
|
+
"sha256": "9bc1178aa8f1afe770c6f1b97491c4f0afb8a301300f1e8818a33605f969a12e"
|
|
5721
5871
|
},
|
|
5722
5872
|
{
|
|
5723
5873
|
"path": "public-landing/privacy.html",
|
|
5724
5874
|
"mode": "0000644",
|
|
5725
|
-
"sha256": "
|
|
5875
|
+
"sha256": "5af37c9fd5be9c15ac195528764f87c2ade2b63a72a24fadfa87b83183769d28"
|
|
5726
5876
|
},
|
|
5727
5877
|
{
|
|
5728
5878
|
"path": "public-landing/projects.html",
|
|
5729
5879
|
"mode": "0000644",
|
|
5730
|
-
"sha256": "
|
|
5880
|
+
"sha256": "6d67e17827d007228c41e7d2dc7d823a5c33a81cb904f1a7e4b0849daf290974"
|
|
5731
5881
|
},
|
|
5732
5882
|
{
|
|
5733
5883
|
"path": "public-landing/projects.probes.json",
|
|
5734
5884
|
"mode": "0000644",
|
|
5735
|
-
"sha256": "
|
|
5885
|
+
"sha256": "f73eb875d55475f3380ee7356212262bfa053c86e072e6943cb77a8d3968af42"
|
|
5736
5886
|
},
|
|
5737
5887
|
{
|
|
5738
5888
|
"path": "public-landing/projects.states.json",
|
|
5739
5889
|
"mode": "0000644",
|
|
5740
|
-
"sha256": "
|
|
5890
|
+
"sha256": "3c771c4f139b543c187620f7542970ca0e03c96668716c986ea24385c7090cab"
|
|
5741
5891
|
},
|
|
5742
5892
|
{
|
|
5743
5893
|
"path": "public-landing/terms.html",
|
|
5744
5894
|
"mode": "0000644",
|
|
5745
|
-
"sha256": "
|
|
5895
|
+
"sha256": "06e12ecafb6dfa09cf7c1b8415fa67a78486dde334fd72bb6f71f5f474301444"
|
|
5746
5896
|
},
|
|
5747
5897
|
{
|
|
5748
5898
|
"path": "public-landing/world/assets/clouds/cloud-island-large.png",
|
|
@@ -7012,7 +7162,7 @@
|
|
|
7012
7162
|
{
|
|
7013
7163
|
"path": "scripts/gds/worktree.js",
|
|
7014
7164
|
"mode": "0000644",
|
|
7015
|
-
"sha256": "
|
|
7165
|
+
"sha256": "56549d4c288f55699ceb1fea10f4f65756a9114b4628b3f2b6c44fed0ec6ab26"
|
|
7016
7166
|
},
|
|
7017
7167
|
{
|
|
7018
7168
|
"path": "scripts/hall-preview/README.md",
|
|
@@ -7392,7 +7542,7 @@
|
|
|
7392
7542
|
{
|
|
7393
7543
|
"path": "src/module-api.js",
|
|
7394
7544
|
"mode": "0000644",
|
|
7395
|
-
"sha256": "
|
|
7545
|
+
"sha256": "85ade7dd85598993897af78be6cee56b8476a8bb1762866b3e6fc9586bad3694"
|
|
7396
7546
|
},
|
|
7397
7547
|
{
|
|
7398
7548
|
"path": "src/module-loader/catalog.js",
|
|
@@ -8997,12 +9147,12 @@
|
|
|
8997
9147
|
{
|
|
8998
9148
|
"path": "tests/landing_legal_pages.mjs",
|
|
8999
9149
|
"mode": "0000644",
|
|
9000
|
-
"sha256": "
|
|
9150
|
+
"sha256": "dcf62524d2f4d8b3fdb019718b1fd8262618844aeae4504bbcbe153fd643fd17"
|
|
9001
9151
|
},
|
|
9002
9152
|
{
|
|
9003
9153
|
"path": "tests/landing_page.mjs",
|
|
9004
9154
|
"mode": "0000644",
|
|
9005
|
-
"sha256": "
|
|
9155
|
+
"sha256": "cfdd0fa602c05c5ccc97cad3786a39f5941861597c947781dc23b2b7af12b137"
|
|
9006
9156
|
},
|
|
9007
9157
|
{
|
|
9008
9158
|
"path": "tests/lib_sh_resolution.mjs",
|
|
@@ -9412,12 +9562,12 @@
|
|
|
9412
9562
|
{
|
|
9413
9563
|
"path": "tests/projects_hub.mjs",
|
|
9414
9564
|
"mode": "0000644",
|
|
9415
|
-
"sha256": "
|
|
9565
|
+
"sha256": "16d5ed7e9d6c24b8743996e8de44674297ef1355605f90b60783cd6fba419ea0"
|
|
9416
9566
|
},
|
|
9417
9567
|
{
|
|
9418
9568
|
"path": "tests/projects_hub_pre_uat.mjs",
|
|
9419
9569
|
"mode": "0000644",
|
|
9420
|
-
"sha256": "
|
|
9570
|
+
"sha256": "9cf9882d54011ea2284cb709c02abd2228d6a073b207e255b8958e0ca54794ae"
|
|
9421
9571
|
},
|
|
9422
9572
|
{
|
|
9423
9573
|
"path": "tests/promote_goal_id.mjs",
|
|
@@ -10162,7 +10312,7 @@
|
|
|
10162
10312
|
{
|
|
10163
10313
|
"path": "tests/ui_design_kit.mjs",
|
|
10164
10314
|
"mode": "0000644",
|
|
10165
|
-
"sha256": "
|
|
10315
|
+
"sha256": "25b4f754abb89f4a01237e81199dbcca824045563a2b6dbadca234227ff8ef3c"
|
|
10166
10316
|
},
|
|
10167
10317
|
{
|
|
10168
10318
|
"path": "tests/ui_design_skills.mjs",
|
|
@@ -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.
|