@bongos/core 1.25.22 → 1.25.23
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 +18 -18
- package/docs/copy-inventory.md +3 -3
- package/docs/copy-registry.json +3 -3
- package/docs/module-api-changelog.md +2 -0
- package/docs/page-readings.json +33 -33
- package/modules/hall-ui/public/palette.js +11 -4
- package/modules/hall-ui/records/founding-mode.md +6 -0
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +6 -0
- package/scripts/hall-preview/README.md +1 -0
- package/scripts/hall-preview/server.js +32 -1
- package/src/module-api.js +1 -1
- package/tests/hall_palette.mjs +59 -2
package/.bongos-core.json
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
"artifact": "bongos-core",
|
|
3
3
|
"manifest_schema": 1,
|
|
4
4
|
"generator": "scripts/bongos/package-core.js",
|
|
5
|
-
"core_version": "1.25.
|
|
6
|
-
"core_contract": "1.25.
|
|
7
|
-
"source_commit": "
|
|
5
|
+
"core_version": "1.25.23",
|
|
6
|
+
"core_contract": "1.25.23",
|
|
7
|
+
"source_commit": "d44d5d0d3ac522246a0d48b80f5242a91ff07993",
|
|
8
8
|
"source_ref": "HEAD",
|
|
9
|
-
"built_at": "2026-11-14T00:
|
|
9
|
+
"built_at": "2026-11-14T00:30:52.761Z",
|
|
10
10
|
"redaction": {
|
|
11
11
|
"model": "docs-redacted+functional-verbatim",
|
|
12
12
|
"docs_redacted": 658,
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"gate": "passed"
|
|
18
18
|
},
|
|
19
19
|
"file_count": 4780,
|
|
20
|
-
"tree_sha256": "
|
|
20
|
+
"tree_sha256": "c0fb506fb3f6b9181476ed72898814cc4e63103372b56ee2d2a34d862fa94770",
|
|
21
21
|
"files": [
|
|
22
22
|
{
|
|
23
23
|
"path": ".claude/skills/ask-for-help/SKILL.md",
|
|
@@ -2542,12 +2542,12 @@
|
|
|
2542
2542
|
{
|
|
2543
2543
|
"path": "docs/copy-inventory.md",
|
|
2544
2544
|
"mode": "0000644",
|
|
2545
|
-
"sha256": "
|
|
2545
|
+
"sha256": "2336261aeb9028b6bff1fbeaa530a099b2ed2069dac2b5920152ec6f33555cb7"
|
|
2546
2546
|
},
|
|
2547
2547
|
{
|
|
2548
2548
|
"path": "docs/copy-registry.json",
|
|
2549
2549
|
"mode": "0000644",
|
|
2550
|
-
"sha256": "
|
|
2550
|
+
"sha256": "1b571de216bf571c87618addcdf4c169c4c7b9d4bc1d6b01fa8a4e292b86542c"
|
|
2551
2551
|
},
|
|
2552
2552
|
{
|
|
2553
2553
|
"path": "docs/design/apex-pass-2-direction.md",
|
|
@@ -3102,7 +3102,7 @@
|
|
|
3102
3102
|
{
|
|
3103
3103
|
"path": "docs/module-api-changelog.md",
|
|
3104
3104
|
"mode": "0000644",
|
|
3105
|
-
"sha256": "
|
|
3105
|
+
"sha256": "cdc7967cb5713ea9041d69fea21e7a1ef5a2b74b7c29f86d89a290fe863058e1"
|
|
3106
3106
|
},
|
|
3107
3107
|
{
|
|
3108
3108
|
"path": "docs/modules-contract.md",
|
|
@@ -3187,7 +3187,7 @@
|
|
|
3187
3187
|
{
|
|
3188
3188
|
"path": "docs/page-readings.json",
|
|
3189
3189
|
"mode": "0000644",
|
|
3190
|
-
"sha256": "
|
|
3190
|
+
"sha256": "4374b8ba743d5dd03cf35b03fbd84024e63d749a0a5aa63d669d94fc69357eb3"
|
|
3191
3191
|
},
|
|
3192
3192
|
{
|
|
3193
3193
|
"path": "docs/project-context.template.md",
|
|
@@ -7177,7 +7177,7 @@
|
|
|
7177
7177
|
{
|
|
7178
7178
|
"path": "modules/hall-ui/public/palette.js",
|
|
7179
7179
|
"mode": "0000644",
|
|
7180
|
-
"sha256": "
|
|
7180
|
+
"sha256": "60296972ebfb14296a0a12d8fc85b41551ad699d90537e554876bb6653636fb3"
|
|
7181
7181
|
},
|
|
7182
7182
|
{
|
|
7183
7183
|
"path": "modules/hall-ui/public/panel.css",
|
|
@@ -7832,7 +7832,7 @@
|
|
|
7832
7832
|
{
|
|
7833
7833
|
"path": "modules/hall-ui/records/founding-mode.md",
|
|
7834
7834
|
"mode": "0000644",
|
|
7835
|
-
"sha256": "
|
|
7835
|
+
"sha256": "cfaf28f0c396215cd2b5f1131f01fed12e7de37a89e8520bbce983d7a9c79a72"
|
|
7836
7836
|
},
|
|
7837
7837
|
{
|
|
7838
7838
|
"path": "modules/hall-ui/records/game-menu.md",
|
|
@@ -12517,12 +12517,12 @@
|
|
|
12517
12517
|
{
|
|
12518
12518
|
"path": "package-lock.json",
|
|
12519
12519
|
"mode": "0000644",
|
|
12520
|
-
"sha256": "
|
|
12520
|
+
"sha256": "fb52a39386be4cbb092a7112152fee766f3e249d0569bfc3171f3cfafe08738d"
|
|
12521
12521
|
},
|
|
12522
12522
|
{
|
|
12523
12523
|
"path": "package.json",
|
|
12524
12524
|
"mode": "0000644",
|
|
12525
|
-
"sha256": "
|
|
12525
|
+
"sha256": "19858223618afc07847976141572ba53768e53959b06a858b7c6311c1609425d"
|
|
12526
12526
|
},
|
|
12527
12527
|
{
|
|
12528
12528
|
"path": "public-docs/index.html",
|
|
@@ -12542,7 +12542,7 @@
|
|
|
12542
12542
|
{
|
|
12543
12543
|
"path": "release-notes.json",
|
|
12544
12544
|
"mode": "0000644",
|
|
12545
|
-
"sha256": "
|
|
12545
|
+
"sha256": "9af40f9fbb9bc2657ff9836096bcba8105ab9bb1325003733cd02e0ddb60c914"
|
|
12546
12546
|
},
|
|
12547
12547
|
{
|
|
12548
12548
|
"path": "scripts/bongos/CLAUDE.md",
|
|
@@ -15957,7 +15957,7 @@
|
|
|
15957
15957
|
{
|
|
15958
15958
|
"path": "scripts/hall-preview/README.md",
|
|
15959
15959
|
"mode": "0000644",
|
|
15960
|
-
"sha256": "
|
|
15960
|
+
"sha256": "b9c84c8fdbb9a3c5a3956dbdb0a3e2fde619d5b9e8f11b1b0811689194afaae8"
|
|
15961
15961
|
},
|
|
15962
15962
|
{
|
|
15963
15963
|
"path": "scripts/hall-preview/live-identity.js",
|
|
@@ -15982,7 +15982,7 @@
|
|
|
15982
15982
|
{
|
|
15983
15983
|
"path": "scripts/hall-preview/server.js",
|
|
15984
15984
|
"mode": "0000644",
|
|
15985
|
-
"sha256": "
|
|
15985
|
+
"sha256": "c7e9c7aca0d3cd56831ac26804a274cf0a2857224725469564c587949d6ed57d"
|
|
15986
15986
|
},
|
|
15987
15987
|
{
|
|
15988
15988
|
"path": "scripts/hall-preview/task-visual.js",
|
|
@@ -16622,7 +16622,7 @@
|
|
|
16622
16622
|
{
|
|
16623
16623
|
"path": "src/module-api.js",
|
|
16624
16624
|
"mode": "0000644",
|
|
16625
|
-
"sha256": "
|
|
16625
|
+
"sha256": "8cfb866517943458ee73f0c88d6b57db10b7f57aed7adbf6ee9e8df4afb6f83f"
|
|
16626
16626
|
},
|
|
16627
16627
|
{
|
|
16628
16628
|
"path": "src/module-loader/catalog.js",
|
|
@@ -19792,7 +19792,7 @@
|
|
|
19792
19792
|
{
|
|
19793
19793
|
"path": "tests/hall_palette.mjs",
|
|
19794
19794
|
"mode": "0000644",
|
|
19795
|
-
"sha256": "
|
|
19795
|
+
"sha256": "86614581ff3bf9b07210d88d2fea5d4f7ffbd8361339209cff07f3036a5c9fee"
|
|
19796
19796
|
},
|
|
19797
19797
|
{
|
|
19798
19798
|
"path": "tests/hall_preview_encoded_paths.mjs",
|
package/docs/copy-inventory.md
CHANGED
|
@@ -676,7 +676,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
676
676
|
| `b7719e855009` | certain | Join goal | `modules/hall-ui/public/goals-render.js:974` |
|
|
677
677
|
| `7ee76a958445` | certain | Join requests | `modules/hall-ui/public/goals-render.js:1434` |
|
|
678
678
|
| `b7ab5922126b` | certain | Join-requests to approve | `modules/hall-ui/public/goal-inbox.js:153` |
|
|
679
|
-
| `d305f0df6f25` | certain | Jump to | `modules/hall-ui/public/palette.js:
|
|
679
|
+
| `d305f0df6f25` | certain | Jump to | `modules/hall-ui/public/palette.js:393` |
|
|
680
680
|
| `01176c156112` | certain | Jump to a goal or a thought | `modules/hall-ui/public/goal-map.html:85` |
|
|
681
681
|
| `01176c156112` | certain | Jump to a goal or a thought | `modules/hall-ui/public/thinking.html:93` |
|
|
682
682
|
| `2bfc5a50ce88` | certain | Jump to a page or record | `modules/hall-ui/public/shell.js:534` |
|
|
@@ -851,7 +851,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
851
851
|
| `139ec3636c22` | certain | No introductions right now. One appears here when a pairing round runs. | `modules/hall-ui/public/collab.html:110` |
|
|
852
852
|
| `97dd937cba71` | certain | No laws yet. | `modules/hall-ui/public/my-agents.js:465` |
|
|
853
853
|
| `3b9823dd4579` | certain | No maintenance declared — nobody is on the hook for this module as the core advances. | `modules/hall-ui/public/modules.js:104` |
|
|
854
|
-
| `64a4281934d1` | certain | No match. Try a page name, or an id like | `modules/hall-ui/public/palette.js:
|
|
854
|
+
| `64a4281934d1` | certain | No match. Try a page name, or an id like | `modules/hall-ui/public/palette.js:349` |
|
|
855
855
|
| `d4167cba173c` | certain | No money has been recorded on this project yet, or none of it is yours to see. | `modules/hall-ui/public/money.html:71` |
|
|
856
856
|
| `f52552a6afcd` | certain | No notes were packed for this version. | `modules/hall-ui/public/settings-software-update.js:114` |
|
|
857
857
|
| `54b5e6fad4fd` | certain | No notes yet. Add what helps scope this or get it done. | `modules/hall-ui/public/notes-panel.js:104` |
|
|
@@ -1880,7 +1880,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
1880
1880
|
| `af3a8e0fe6a8` | certain | open your goals | `modules/hall-ui/public/goal-inbox.js:157` |
|
|
1881
1881
|
| `9a803563c948` | certain | open {…} | `modules/hall-ui/public/approval-queue.js:173` |
|
|
1882
1882
|
| `4f279d68175f` | certain | open, on the Security tab | `modules/hall-ui/public/watch.html:53` |
|
|
1883
|
-
| `7b85e6494596` | certain | opens a new tab | `modules/hall-ui/public/palette.js:
|
|
1883
|
+
| `7b85e6494596` | certain | opens a new tab | `modules/hall-ui/public/palette.js:357` |
|
|
1884
1884
|
| `c38db02adb61` | certain | or above | `modules/hall-ui/public/government.js:610` |
|
|
1885
1885
|
| `932dc4dffde9` | certain | page. | `modules/hall-ui/public/project-settings.html:54` |
|
|
1886
1886
|
| `271de72308a4` | certain | pages tweaked | `modules/hall-ui/public/studio.html:90` |
|
package/docs/copy-registry.json
CHANGED
|
@@ -8493,7 +8493,7 @@
|
|
|
8493
8493
|
"surface": "builders-hall",
|
|
8494
8494
|
"text": "Jump to",
|
|
8495
8495
|
"file": "modules/hall-ui/public/palette.js",
|
|
8496
|
-
"line":
|
|
8496
|
+
"line": 393,
|
|
8497
8497
|
"origin": "js-markup",
|
|
8498
8498
|
"confidence": "certain"
|
|
8499
8499
|
},
|
|
@@ -10068,7 +10068,7 @@
|
|
|
10068
10068
|
"surface": "builders-hall",
|
|
10069
10069
|
"text": "No match. Try a page name, or an id like",
|
|
10070
10070
|
"file": "modules/hall-ui/public/palette.js",
|
|
10071
|
-
"line":
|
|
10071
|
+
"line": 349,
|
|
10072
10072
|
"origin": "js-markup",
|
|
10073
10073
|
"confidence": "certain"
|
|
10074
10074
|
},
|
|
@@ -19329,7 +19329,7 @@
|
|
|
19329
19329
|
"surface": "builders-hall",
|
|
19330
19330
|
"text": "opens a new tab",
|
|
19331
19331
|
"file": "modules/hall-ui/public/palette.js",
|
|
19332
|
-
"line":
|
|
19332
|
+
"line": 357,
|
|
19333
19333
|
"origin": "js-markup",
|
|
19334
19334
|
"confidence": "certain"
|
|
19335
19335
|
},
|
|
@@ -3482,5 +3482,7 @@ is load-bearing: the script throws rather than guess if it is missing, and
|
|
|
3482
3482
|
landed since 1.25.20 with no explicit bump. run 43528908009. (task 1002620)
|
|
3483
3483
|
1.25.22 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
3484
3484
|
landed since 1.25.21 with no explicit bump. run 43533357293. (task 1002620)
|
|
3485
|
+
1.25.23 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
3486
|
+
landed since 1.25.22 with no explicit bump. run 43534547421. (task 1002620)
|
|
3485
3487
|
---------------------------------------------------------------------------
|
|
3486
3488
|
```
|
package/docs/page-readings.json
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"surface": "builders",
|
|
13
13
|
"title": "Studio",
|
|
14
14
|
"states_read": ["pick","describe","make","waiting","result","result-own","failed","balance","balance-all","out"],
|
|
15
|
-
"files_hash": "
|
|
15
|
+
"files_hash": "cdbab8f0c6d2bbad",
|
|
16
16
|
"reading_hash": "d9e0e85bcee4aff4",
|
|
17
17
|
"counts": {"lines":106,"placed":41,"shared":7,"unplaced":58},
|
|
18
18
|
"omitted": {"data":17},
|
|
@@ -131,7 +131,7 @@
|
|
|
131
131
|
"surface": "builders",
|
|
132
132
|
"title": "Repo Atlas",
|
|
133
133
|
"states_read": ["map","truth","detail","index","out"],
|
|
134
|
-
"files_hash": "
|
|
134
|
+
"files_hash": "a3fbc9538459ba45",
|
|
135
135
|
"reading_hash": "6934dead335b2507",
|
|
136
136
|
"counts": {"lines":25,"placed":14,"shared":7,"unplaced":4},
|
|
137
137
|
"omitted": {"data":5},
|
|
@@ -169,7 +169,7 @@
|
|
|
169
169
|
"surface": "builders",
|
|
170
170
|
"title": "Blockers",
|
|
171
171
|
"states_read": ["default"],
|
|
172
|
-
"files_hash": "
|
|
172
|
+
"files_hash": "9c5ef517607cd4d5",
|
|
173
173
|
"reading_hash": "60d73d854ced958a",
|
|
174
174
|
"counts": {"lines":36,"placed":17,"shared":7,"unplaced":12},
|
|
175
175
|
"omitted": {"data":51},
|
|
@@ -218,7 +218,7 @@
|
|
|
218
218
|
"surface": "builders",
|
|
219
219
|
"title": "Board Room",
|
|
220
220
|
"states_read": ["room","out","sitting-meta","objection-form"],
|
|
221
|
-
"files_hash": "
|
|
221
|
+
"files_hash": "2919ddd4ce80e80d",
|
|
222
222
|
"reading_hash": "0260b797b8dc1526",
|
|
223
223
|
"counts": {"lines":52,"placed":21,"shared":7,"unplaced":24},
|
|
224
224
|
"omitted": {"data":17},
|
|
@@ -283,7 +283,7 @@
|
|
|
283
283
|
"surface": "builders",
|
|
284
284
|
"title": "The city",
|
|
285
285
|
"states_read": ["city","fullscreen","focus","pins","living","card","card-ask"],
|
|
286
|
-
"files_hash": "
|
|
286
|
+
"files_hash": "73fe2f345e054222",
|
|
287
287
|
"reading_hash": "277096d903879a57",
|
|
288
288
|
"counts": {"lines":26,"placed":9,"shared":6,"unplaced":11},
|
|
289
289
|
"omitted": {"data":7},
|
|
@@ -322,7 +322,7 @@
|
|
|
322
322
|
"surface": "builders",
|
|
323
323
|
"title": "Collab",
|
|
324
324
|
"states_read": ["board","out"],
|
|
325
|
-
"files_hash": "
|
|
325
|
+
"files_hash": "4721415525b273b8",
|
|
326
326
|
"reading_hash": "e6452bf92231656f",
|
|
327
327
|
"counts": {"lines":82,"placed":36,"shared":6,"unplaced":40},
|
|
328
328
|
"omitted": {"data":23},
|
|
@@ -417,7 +417,7 @@
|
|
|
417
417
|
"surface": "builders",
|
|
418
418
|
"title": "Commands",
|
|
419
419
|
"states_read": ["in","out"],
|
|
420
|
-
"files_hash": "
|
|
420
|
+
"files_hash": "0c738f2e2ca48abf",
|
|
421
421
|
"reading_hash": "ecc452689a8ee9d7",
|
|
422
422
|
"counts": {"lines":71,"placed":49,"shared":7,"unplaced":15},
|
|
423
423
|
"omitted": {"data":177},
|
|
@@ -501,7 +501,7 @@
|
|
|
501
501
|
"surface": "builders",
|
|
502
502
|
"title": "Copy desk",
|
|
503
503
|
"states_read": ["queue","out","search","composer","closer","proposer"],
|
|
504
|
-
"files_hash": "
|
|
504
|
+
"files_hash": "830b92d08ea0a782",
|
|
505
505
|
"reading_hash": "3819ef6fa8f6fb7c",
|
|
506
506
|
"counts": {"lines":72,"placed":36,"shared":7,"unplaced":29},
|
|
507
507
|
"omitted": {"data":94},
|
|
@@ -586,7 +586,7 @@
|
|
|
586
586
|
"surface": "builders",
|
|
587
587
|
"title": "Deploy",
|
|
588
588
|
"states_read": ["work","out"],
|
|
589
|
-
"files_hash": "
|
|
589
|
+
"files_hash": "69f45e766f0a41a1",
|
|
590
590
|
"reading_hash": "3770e8b2fa56bee1",
|
|
591
591
|
"counts": {"lines":14,"placed":5,"shared":7,"unplaced":2},
|
|
592
592
|
"omitted": {"data":5},
|
|
@@ -613,7 +613,7 @@
|
|
|
613
613
|
"surface": "builders",
|
|
614
614
|
"title": "The sky",
|
|
615
615
|
"states_read": ["tour","sky","wells","ledger","full","full-back","out"],
|
|
616
|
-
"files_hash": "
|
|
616
|
+
"files_hash": "f6117c7d0796af5f",
|
|
617
617
|
"reading_hash": "4a879397a84631e3",
|
|
618
618
|
"counts": {"lines":50,"placed":25,"shared":6,"unplaced":19},
|
|
619
619
|
"omitted": {"data":10},
|
|
@@ -676,7 +676,7 @@
|
|
|
676
676
|
"surface": "builders",
|
|
677
677
|
"title": "Goals",
|
|
678
678
|
"states_read": ["list","filters","cards","detail","dependencies","out","uat","uat-panel","author"],
|
|
679
|
-
"files_hash": "
|
|
679
|
+
"files_hash": "a0e2123adaeb8051",
|
|
680
680
|
"reading_hash": "13a5d07b3804b627",
|
|
681
681
|
"counts": {"lines":187,"placed":61,"shared":7,"unplaced":119},
|
|
682
682
|
"omitted": {"data":315},
|
|
@@ -876,7 +876,7 @@
|
|
|
876
876
|
"surface": "builders",
|
|
877
877
|
"title": "Government",
|
|
878
878
|
"states_read": ["constitution","out","permissions","board","constitution-tab"],
|
|
879
|
-
"files_hash": "
|
|
879
|
+
"files_hash": "f569a5c639f66f09",
|
|
880
880
|
"reading_hash": "37c6878d60447fd6",
|
|
881
881
|
"counts": {"lines":65,"placed":27,"shared":7,"unplaced":31},
|
|
882
882
|
"omitted": {"data":276},
|
|
@@ -954,7 +954,7 @@
|
|
|
954
954
|
"surface": "builders",
|
|
955
955
|
"title": "Builders' Hall",
|
|
956
956
|
"states_read": ["home","out","founding","genesis","decide","demo","votes"],
|
|
957
|
-
"files_hash": "
|
|
957
|
+
"files_hash": "b9aafbf094f5d4e7",
|
|
958
958
|
"reading_hash": "c5f4986bd90e2a2a",
|
|
959
959
|
"counts": {"lines":29,"placed":8,"shared":8,"unplaced":13},
|
|
960
960
|
"omitted": {"data":4},
|
|
@@ -996,7 +996,7 @@
|
|
|
996
996
|
"surface": "builders",
|
|
997
997
|
"title": "Idea",
|
|
998
998
|
"states_read": ["record","missing"],
|
|
999
|
-
"files_hash": "
|
|
999
|
+
"files_hash": "5f1c393ed14ae358",
|
|
1000
1000
|
"reading_hash": "f7d644748c87e426",
|
|
1001
1001
|
"counts": {"lines":52,"placed":25,"shared":8,"unplaced":19},
|
|
1002
1002
|
"omitted": {"data":25},
|
|
@@ -1061,7 +1061,7 @@
|
|
|
1061
1061
|
"surface": "builders",
|
|
1062
1062
|
"title": "Ideas",
|
|
1063
1063
|
"states_read": ["compose","full","develop"],
|
|
1064
|
-
"files_hash": "
|
|
1064
|
+
"files_hash": "145e8d36130c8f1f",
|
|
1065
1065
|
"reading_hash": "a62c05dcef3bf87f",
|
|
1066
1066
|
"counts": {"lines":68,"placed":34,"shared":7,"unplaced":27},
|
|
1067
1067
|
"omitted": {"data":118},
|
|
@@ -1142,7 +1142,7 @@
|
|
|
1142
1142
|
"surface": "builders",
|
|
1143
1143
|
"title": "Market Watch",
|
|
1144
1144
|
"states_read": ["desk","settings","out"],
|
|
1145
|
-
"files_hash": "
|
|
1145
|
+
"files_hash": "4141ab24056f355e",
|
|
1146
1146
|
"reading_hash": "30512dda207b5ea6",
|
|
1147
1147
|
"counts": {"lines":23,"placed":11,"shared":7,"unplaced":5},
|
|
1148
1148
|
"omitted": {"data":5},
|
|
@@ -1178,7 +1178,7 @@
|
|
|
1178
1178
|
"surface": "builders",
|
|
1179
1179
|
"title": "Market Watch",
|
|
1180
1180
|
"states_read": ["dossier","out","propose","correct","filtered"],
|
|
1181
|
-
"files_hash": "
|
|
1181
|
+
"files_hash": "168f1eb88a61e13e",
|
|
1182
1182
|
"reading_hash": "129bff28c4e4ed6d",
|
|
1183
1183
|
"counts": {"lines":24,"placed":12,"shared":7,"unplaced":5},
|
|
1184
1184
|
"omitted": {"data":5},
|
|
@@ -1215,7 +1215,7 @@
|
|
|
1215
1215
|
"surface": "builders",
|
|
1216
1216
|
"title": "Market Watch rules",
|
|
1217
1217
|
"states_read": ["in","scoring","names","propose","out"],
|
|
1218
|
-
"files_hash": "
|
|
1218
|
+
"files_hash": "5408691ae4f6bf4b",
|
|
1219
1219
|
"reading_hash": "ca0c62e8dce51c8b",
|
|
1220
1220
|
"counts": {"lines":36,"placed":12,"shared":7,"unplaced":17},
|
|
1221
1221
|
"omitted": {"data":20},
|
|
@@ -1264,7 +1264,7 @@
|
|
|
1264
1264
|
"surface": "builders",
|
|
1265
1265
|
"title": "Modules",
|
|
1266
1266
|
"states_read": ["browse","search-empty","lens","details","out"],
|
|
1267
|
-
"files_hash": "
|
|
1267
|
+
"files_hash": "7dd0737e655050e8",
|
|
1268
1268
|
"reading_hash": "6a12e9306bba5622",
|
|
1269
1269
|
"counts": {"lines":59,"placed":29,"shared":7,"unplaced":23},
|
|
1270
1270
|
"omitted": {"data":107},
|
|
@@ -1336,7 +1336,7 @@
|
|
|
1336
1336
|
"surface": "builders",
|
|
1337
1337
|
"title": "Money",
|
|
1338
1338
|
"states_read": ["money","hosting","out"],
|
|
1339
|
-
"files_hash": "
|
|
1339
|
+
"files_hash": "22c40cfbcdfd0a69",
|
|
1340
1340
|
"reading_hash": "e355d5466b123e07",
|
|
1341
1341
|
"counts": {"lines":83,"placed":28,"shared":7,"unplaced":48},
|
|
1342
1342
|
"omitted": {"data":27},
|
|
@@ -1432,7 +1432,7 @@
|
|
|
1432
1432
|
"surface": "builders",
|
|
1433
1433
|
"title": "My agents",
|
|
1434
1434
|
"states_read": ["desk","factory","saved","what-it-knows","speciality-walk","speciality-forms","nobody"],
|
|
1435
|
-
"files_hash": "
|
|
1435
|
+
"files_hash": "87c92116f01b62b5",
|
|
1436
1436
|
"reading_hash": "5347e0496b38727d",
|
|
1437
1437
|
"counts": {"lines":100,"placed":33,"shared":7,"unplaced":60},
|
|
1438
1438
|
"omitted": {"data":38},
|
|
@@ -1545,7 +1545,7 @@
|
|
|
1545
1545
|
"surface": "builders",
|
|
1546
1546
|
"title": "Primer",
|
|
1547
1547
|
"states_read": ["in","toc-open","jump","out"],
|
|
1548
|
-
"files_hash": "
|
|
1548
|
+
"files_hash": "47acee434c6cdb3c",
|
|
1549
1549
|
"reading_hash": "85790bd421e5c387",
|
|
1550
1550
|
"counts": {"lines":487,"placed":57,"shared":7,"unplaced":423},
|
|
1551
1551
|
"omitted": {"data":18},
|
|
@@ -2045,7 +2045,7 @@
|
|
|
2045
2045
|
"surface": "builders",
|
|
2046
2046
|
"title": "Profile",
|
|
2047
2047
|
"states_read": ["own","works","activity","yours","activity-artist","activity-artist-ideas","other","artist","artist-ideas","out"],
|
|
2048
|
-
"files_hash": "
|
|
2048
|
+
"files_hash": "0cbc2927f005a5d5",
|
|
2049
2049
|
"reading_hash": "3ff8d703d17e8c2a",
|
|
2050
2050
|
"counts": {"lines":232,"placed":84,"shared":7,"unplaced":141},
|
|
2051
2051
|
"omitted": {"data":263},
|
|
@@ -2290,7 +2290,7 @@
|
|
|
2290
2290
|
"surface": "builders",
|
|
2291
2291
|
"title": "Project settings",
|
|
2292
2292
|
"states_read": ["default"],
|
|
2293
|
-
"files_hash": "
|
|
2293
|
+
"files_hash": "fc09e96def6ea882",
|
|
2294
2294
|
"reading_hash": "283df27d0d5bfc1b",
|
|
2295
2295
|
"counts": {"lines":43,"placed":25,"shared":7,"unplaced":11},
|
|
2296
2296
|
"omitted": {"data":33},
|
|
@@ -2346,7 +2346,7 @@
|
|
|
2346
2346
|
"surface": "builders",
|
|
2347
2347
|
"title": "Builders",
|
|
2348
2348
|
"states_read": ["roster","artists","search","out"],
|
|
2349
|
-
"files_hash": "
|
|
2349
|
+
"files_hash": "cc82931525d4f791",
|
|
2350
2350
|
"reading_hash": "665ac2e36339f5d3",
|
|
2351
2351
|
"counts": {"lines":56,"placed":17,"shared":7,"unplaced":32},
|
|
2352
2352
|
"omitted": {"data":137},
|
|
@@ -2415,7 +2415,7 @@
|
|
|
2415
2415
|
"surface": "builders",
|
|
2416
2416
|
"title": "Options",
|
|
2417
2417
|
"states_read": ["account","access","preferences","install-reports","sound","update"],
|
|
2418
|
-
"files_hash": "
|
|
2418
|
+
"files_hash": "2c157a41c94a0b1e",
|
|
2419
2419
|
"reading_hash": "a6d3194ed1b751ca",
|
|
2420
2420
|
"counts": {"lines":163,"placed":104,"shared":7,"unplaced":52},
|
|
2421
2421
|
"omitted": {"data":23},
|
|
@@ -2591,7 +2591,7 @@
|
|
|
2591
2591
|
"surface": "builders",
|
|
2592
2592
|
"title": "The street",
|
|
2593
2593
|
"states_read": ["street","fullscreen","card","focus","here","inside-rules","inside-disputes","inside-people","inside-planning","inside-automation","inside-review","inside-release","inside-treasury","floor","amend","district","desk","desk-facts","desk-quiet","desk-people-builders","desk-people-tier","desk-disputes","desk-automation-goals","desk-release-core","desk-rules","desk-rules-category","desk-planning-priorities","desk-planning-ideas","desk-planning-blockers","pins","pins-pager","living","deck","deck-treasury","sitting","object","voted","admission","settled","blocker","blocker-more","report","report-more","core","core-more","recheck","recheck-more","idea","idea-more","queue","queue-more","automation","automation-more"],
|
|
2594
|
-
"files_hash": "
|
|
2594
|
+
"files_hash": "132cd724c580d4c3",
|
|
2595
2595
|
"reading_hash": "84dc42e85d9e23a3",
|
|
2596
2596
|
"counts": {"lines":325,"placed":54,"shared":6,"unplaced":265},
|
|
2597
2597
|
"omitted": {"data":241},
|
|
@@ -2929,7 +2929,7 @@
|
|
|
2929
2929
|
"surface": "builders",
|
|
2930
2930
|
"title": "Studio",
|
|
2931
2931
|
"states_read": ["home","out","flow","flow-pick","status","words-offer","words-edit","reviews","full","full-back","approvals","approvals-before","approvals-phone","approvals-note","approved","sent-back","approvals-page"],
|
|
2932
|
-
"files_hash": "
|
|
2932
|
+
"files_hash": "66c949d568df1d11",
|
|
2933
2933
|
"reading_hash": "a13406b48a9c7f7f",
|
|
2934
2934
|
"counts": {"lines":51,"placed":29,"shared":7,"unplaced":15},
|
|
2935
2935
|
"omitted": {"data":23},
|
|
@@ -2993,7 +2993,7 @@
|
|
|
2993
2993
|
"surface": "builders",
|
|
2994
2994
|
"title": "Task",
|
|
2995
2995
|
"states_read": ["record","from-goal","missing"],
|
|
2996
|
-
"files_hash": "
|
|
2996
|
+
"files_hash": "111431221df21ab7",
|
|
2997
2997
|
"reading_hash": "8dd803b6934e6388",
|
|
2998
2998
|
"counts": {"lines":151,"placed":46,"shared":9,"unplaced":96},
|
|
2999
2999
|
"omitted": {"data":111},
|
|
@@ -3157,7 +3157,7 @@
|
|
|
3157
3157
|
"surface": "builders",
|
|
3158
3158
|
"title": "Your thinking",
|
|
3159
3159
|
"states_read": ["tour","sky","list","simple","full-idea","full","full-list","full-back","out"],
|
|
3160
|
-
"files_hash": "
|
|
3160
|
+
"files_hash": "3c93bc1c3a43fbca",
|
|
3161
3161
|
"reading_hash": "b73f848b46b0f9b8",
|
|
3162
3162
|
"counts": {"lines":50,"placed":25,"shared":6,"unplaced":19},
|
|
3163
3163
|
"omitted": {"data":10},
|
|
@@ -3220,7 +3220,7 @@
|
|
|
3220
3220
|
"surface": "builders",
|
|
3221
3221
|
"title": "Tweak a page",
|
|
3222
3222
|
"states_read": ["doc","typed","chrome","submitted","picking","out"],
|
|
3223
|
-
"files_hash": "
|
|
3223
|
+
"files_hash": "c10a03b61cbfb28b",
|
|
3224
3224
|
"reading_hash": "f521f8d9a7147557",
|
|
3225
3225
|
"counts": {"lines":26,"placed":18,"shared":2,"unplaced":6},
|
|
3226
3226
|
"omitted": {"data":19},
|
|
@@ -3259,7 +3259,7 @@
|
|
|
3259
3259
|
"surface": "builders",
|
|
3260
3260
|
"title": "Watch",
|
|
3261
3261
|
"states_read": ["board","out","operations","security","sessions","autobongos"],
|
|
3262
|
-
"files_hash": "
|
|
3262
|
+
"files_hash": "806a9a91245c2899",
|
|
3263
3263
|
"reading_hash": "1961a0c06b9d8477",
|
|
3264
3264
|
"counts": {"lines":72,"placed":33,"shared":7,"unplaced":32},
|
|
3265
3265
|
"omitted": {"data":52},
|
|
@@ -3344,7 +3344,7 @@
|
|
|
3344
3344
|
"surface": "builders",
|
|
3345
3345
|
"title": "Tasks",
|
|
3346
3346
|
"states_read": ["ready","in-progress","backlog","completed","filters-open","out","founding"],
|
|
3347
|
-
"files_hash": "
|
|
3347
|
+
"files_hash": "d68c93ff47873b62",
|
|
3348
3348
|
"reading_hash": "e9b412d1ec59ceee",
|
|
3349
3349
|
"counts": {"lines":122,"placed":49,"shared":7,"unplaced":66},
|
|
3350
3350
|
"omitted": {"data":323},
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
// The index has three CLIENT-SIDE layers (task 2178 scope):
|
|
13
13
|
// 1. Pages — read live from the sidebar shell.js rendered, so rank + module
|
|
14
14
|
// gating come for free and can never drift from the nav. A hidden nav item
|
|
15
|
-
// is a hidden destination
|
|
15
|
+
// is a hidden destination, and so is a room asleep while the project is
|
|
16
|
+
// founding. (Cosmetic only; the server still gates each page.)
|
|
16
17
|
// 2. Sections — the sub-destinations of the four pages that have them. These
|
|
17
18
|
// cannot be read from another page's DOM, so they are declared below and
|
|
18
19
|
// held to the real ids by tests/hall_palette.mjs.
|
|
@@ -145,9 +146,15 @@
|
|
|
145
146
|
var searchCache = {}; // query (trimmed+lowercased) -> raw hits[], this OPEN only
|
|
146
147
|
|
|
147
148
|
function esc(s) { return window.OTB.escapeHtml(s); }
|
|
149
|
+
// A nav item the sidebar does not show is not a destination: hidden by its gate, or
|
|
150
|
+
// asleep while the project is founding (task 1005285). The sleeping mark is the
|
|
151
|
+
// shell's, stamped from the server's /me.founding_mode.asleep, never decided here,
|
|
152
|
+
// and the server refuses the page as well (src/bongos/founding-page-gate.js).
|
|
153
|
+
function offered(el) {
|
|
154
|
+
return !!(el && !el.hidden && !(el.classList && el.classList.contains('nav-item--asleep')));
|
|
155
|
+
}
|
|
148
156
|
function visible(id) {
|
|
149
|
-
|
|
150
|
-
return !!(el && !el.hidden);
|
|
157
|
+
return offered(document.getElementById(id));
|
|
151
158
|
}
|
|
152
159
|
|
|
153
160
|
// Pages, straight from the rendered sidebar. Skips the external API-docs link's
|
|
@@ -160,7 +167,7 @@
|
|
|
160
167
|
function pageEntries() {
|
|
161
168
|
var out = [];
|
|
162
169
|
document.querySelectorAll('#app-sidebar .nav-item').forEach(function (a) {
|
|
163
|
-
if (a
|
|
170
|
+
if (!offered(a)) return;
|
|
164
171
|
var label = (a.querySelector('.nav-item__label') || {}).textContent || '';
|
|
165
172
|
if (!label) return;
|
|
166
173
|
out.push({
|
|
@@ -29,3 +29,9 @@ work-founding.states.json renders an ordinary hall page with a founding /me (kit
|
|
|
29
29
|
- The genesis home, the stage tasks and the "what's this?" destination belong to PS08 (task 1004423). The band links home until then.
|
|
30
30
|
- The founding mark belongs to PS10 (task 1004424).
|
|
31
31
|
- Starting founding on a new project and moving its stage is `setFoundingMode`, on the onboarding port, and PS08 drives it. Nothing in this task writes it.
|
|
32
|
+
|
|
33
|
+
## The classic hall wears all three genesis behaviours (task 1005285)
|
|
34
|
+
|
|
35
|
+
Since task 1005112 an asleep room is **hidden, not dimmed**, and its page is refused (`src/bongos/founding-page-gate.js` redirects home with `?asleep=<room>&opens=<stage>`, and the shell says which stage opens it); the "cosmetic, nothing enforced" line above is history. The owner asked (2026-11-13) that the classic hall get the same three genesis behaviours as the game. Two were already shared code: the stage checklist (done / open / locked, and what a locked task waits on, from `shapeGenesis`) and Copy prompt on each open task are the Home banner card `genesis-home.js`, which both views load. The gap was the **jump list**: `palette.js` skipped only a nav item with the `hidden` attribute, so Ctrl/Cmd-K still offered Tasks, Goals, Sky, Collab and Builders, and the Tasks tabs, while they slept. It now treats `.nav-item--asleep` (the shell's mark, stamped from `/me.founding_mode.asleep`) as not a destination, for pages and for their sections; it never works out which rooms sleep itself. `tests/hall_palette.mjs` holds it against the real `shapeFoundingMode`.
|
|
36
|
+
|
|
37
|
+
**To walk it:** `node scripts/hall-preview/server.js --fixture-me --founding scope` (the `hall-preview-founding` launch entry). `/me.founding_mode` is the real `shapeFoundingMode`, `GET /founding/genesis` the real `shapeGenesis` over `scripts/hall-preview/fixtures/founding__genesis__tasks.json`, and a sleeping room's page answers through the real `foundingPageGate`.
|
package/package-lock.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bongos/core",
|
|
3
|
-
"version": "1.25.
|
|
3
|
+
"version": "1.25.23",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@bongos/core",
|
|
9
|
-
"version": "1.25.
|
|
9
|
+
"version": "1.25.23",
|
|
10
10
|
"license": "AGPL-3.0-or-later",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"express": "^4.21.2",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bongos/core",
|
|
3
|
-
"version": "1.25.
|
|
3
|
+
"version": "1.25.23",
|
|
4
4
|
"description": "Cloud Bongos — the AI-first build platform core (GDS + platform surfaces + module system), installed as a versioned dependency (ADR 0108).",
|
|
5
5
|
"license": "AGPL-3.0-or-later",
|
|
6
6
|
"main": "src/platform-server.js",
|
package/release-notes.json
CHANGED
|
@@ -11900,5 +11900,11 @@
|
|
|
11900
11900
|
"id": "1005129",
|
|
11901
11901
|
"text": "Choosing how contributors are rewarded now shows, for every option, what the platform really requires and what is closed — and the project now remembers where it is and where its builders are, so those notes fit it."
|
|
11902
11902
|
}
|
|
11903
|
+
],
|
|
11904
|
+
"1.25.23": [
|
|
11905
|
+
{
|
|
11906
|
+
"id": "1005285",
|
|
11907
|
+
"text": "In the builders' hall, a project still being founded no longer lists its closed rooms in the quick-jump search; only the rooms that are open can be found."
|
|
11908
|
+
}
|
|
11903
11909
|
]
|
|
11904
11910
|
}
|
|
@@ -24,6 +24,7 @@ node scripts/hall-preview/server.js # neutral pack, port 4600
|
|
|
24
24
|
| `--fixture-me` | don't read your own account live — serve the checked-in `me.json` snapshot (see below) |
|
|
25
25
|
| `--signed-out` | answer `/me` with a 401 — preview the signed-out sign-in card |
|
|
26
26
|
| `--latency 3000` | hold every data read that many ms before answering, so a page's loading state (the hall's `.hall-loading` mark) stays on screen long enough to look at |
|
|
27
|
+
| `--founding scope` | preview a project being founded, at that genesis stage (task 1005285): `/me.founding_mode` is the real `shapeFoundingMode`, `GET /founding/genesis` the real `shapeGenesis` over `fixtures/founding__genesis__tasks.json`, and a sleeping room's page is refused by the real `foundingPageGate` |
|
|
27
28
|
|
|
28
29
|
Writes are not wired: any `POST/PATCH/DELETE` answers `501 preview_readonly` — except
|
|
29
30
|
the canned writes in `server.js` and, since task 1004685, the five per-builder pref
|
|
@@ -74,6 +74,12 @@ const SIGNED_OUT = process.argv.includes('--signed-out');
|
|
|
74
74
|
// fixtures answer in a millisecond, which is why no loader had ever been seen.
|
|
75
75
|
const LATENCY = Math.max(0, Number(arg('--latency')) || 0);
|
|
76
76
|
const BRAND_FILE = arg('--brand') || 'config/branding.neutral.json';
|
|
77
|
+
// --founding <stage>: preview a project being founded, at that genesis stage (task 1005285).
|
|
78
|
+
// The answers are the server's own code, never a hand-written copy: /me.founding_mode is
|
|
79
|
+
// shapeFoundingMode (modules/onboarding/founding-mode.js), GET /founding/genesis is
|
|
80
|
+
// shapeGenesis over fixtures/founding__genesis__tasks.json (modules/onboarding/genesis-home.js),
|
|
81
|
+
// and a sleeping room's page is refused by the real foundingPageGate (src/bongos/).
|
|
82
|
+
const FOUNDING_STAGE = arg('--founding');
|
|
77
83
|
process.env.BONGOS_BRANDING_FILE = path.resolve(ROOT, BRAND_FILE);
|
|
78
84
|
|
|
79
85
|
/* eslint-disable import/no-dynamic-require */
|
|
@@ -93,6 +99,18 @@ const { overrideKey, resolveLiveIdentity } = require('./live-identity');
|
|
|
93
99
|
const { createPrefRecorder, readJsonBody } = require('./pref-writes');
|
|
94
100
|
const PREFS = createPrefRecorder();
|
|
95
101
|
|
|
102
|
+
let FOUNDING = null;
|
|
103
|
+
let GENESIS = null;
|
|
104
|
+
if (FOUNDING_STAGE) {
|
|
105
|
+
const fm = require(path.join(ROOT, 'modules', 'onboarding', 'founding-mode.js'));
|
|
106
|
+
const gh = require(path.join(ROOT, 'modules', 'onboarding', 'genesis-home.js'));
|
|
107
|
+
FOUNDING = fm.shapeFoundingMode({ active: 'true', stage: FOUNDING_STAGE, startedAt: new Date(Date.now() - 2 * 86400000).toISOString() });
|
|
108
|
+
if (!FOUNDING) throw new Error(`--founding: not a genesis stage: ${FOUNDING_STAGE} (one of ${fm.STAGES.join(', ')})`);
|
|
109
|
+
const tasks = JSON.parse(fs.readFileSync(path.join(FIXTURES, 'founding__genesis__tasks.json'), 'utf8'));
|
|
110
|
+
delete tasks._comment;
|
|
111
|
+
GENESIS = gh.shapeGenesis({ mode: FOUNDING, plan: gh.parsePlan({}).plan, tasks });
|
|
112
|
+
}
|
|
113
|
+
|
|
96
114
|
// The session is the ONE thing this harness reads from outside its own tree, and
|
|
97
115
|
// it reads it through the FAIL-OPEN helper on purpose: apiCall/cliClient exit the
|
|
98
116
|
// process on a 401, which would kill a preview over a cosmetic feature.
|
|
@@ -423,12 +441,17 @@ app.use((req, res, next) => {
|
|
|
423
441
|
// wasn't resolved live falls through to its fixture exactly as before.
|
|
424
442
|
const q = req.query || {};
|
|
425
443
|
const live = liveOverrides.get(overrideKey(apiPath, q)) ?? liveOverrides.get(apiPath);
|
|
444
|
+
if (FOUNDING && apiPath === 'founding/genesis') {
|
|
445
|
+
const me = liveOverrides.get('me') ?? fixtureFor('me');
|
|
446
|
+
return res.json({ genesis: GENESIS, viewer_id: me && me.builder ? me.builder.id : null });
|
|
447
|
+
}
|
|
426
448
|
const fix = live !== undefined ? live : fixtureFor(apiPath, q);
|
|
427
449
|
if (fix === undefined) {
|
|
428
450
|
console.log(` no fixture: ${apiPath} (add scripts/hall-preview/fixtures/${apiPath.replace(/\//g, '__')}.json)`);
|
|
429
451
|
return res.status(404).json({ error: { code: 'no_fixture', message: apiPath } });
|
|
430
452
|
}
|
|
431
453
|
let payload = EMPTY ? emptied(fix) : fix;
|
|
454
|
+
if (FOUNDING && apiPath === 'me') payload = { ...payload, founding_mode: FOUNDING };
|
|
432
455
|
if (RANK_OVERRIDE && apiPath === 'me') {
|
|
433
456
|
payload = JSON.parse(JSON.stringify(payload));
|
|
434
457
|
if (payload.builder) payload.builder.rank = RANK_OVERRIDE;
|
|
@@ -486,8 +509,15 @@ app.get('/', (req, res, next) => { if (!sendPage(res, 'index.html')) next(); });
|
|
|
486
509
|
// fell through to the real gate and 302'd to sign-in (task 1003305).
|
|
487
510
|
app.get(/^\/task\/\d+$/, (req, res, next) => { if (!sendPage(res, 'task.html')) next(); });
|
|
488
511
|
app.get(/^\/idea\/\d+$/, (req, res, next) => { if (!sendPage(res, 'idea.html')) next(); });
|
|
512
|
+
// --founding: a sleeping room's page answers as prod does, through the real gate (it
|
|
513
|
+
// matches the apex /builders/<room> shape; the harness serves pages at the root).
|
|
514
|
+
const foundingGate = FOUNDING
|
|
515
|
+
? require(path.join(ROOT, 'src', 'bongos', 'founding-page-gate.js')).foundingPageGate({ isBuildersHost: () => true, read: async () => FOUNDING })
|
|
516
|
+
: null;
|
|
489
517
|
app.get(/^\/([a-z-]+)$/, (req, res, next) => {
|
|
490
|
-
if (!sendPage(res, `${req.params[0]}.html`)) next();
|
|
518
|
+
const serve = () => { if (!sendPage(res, `${req.params[0]}.html`)) next(); };
|
|
519
|
+
if (!foundingGate) return serve();
|
|
520
|
+
return foundingGate({ path: `/builders${req.path}` }, res, serve);
|
|
491
521
|
});
|
|
492
522
|
|
|
493
523
|
// What the READING ROOM reads (task 1003306): the primer document and
|
|
@@ -554,6 +584,7 @@ function accountLine() {
|
|
|
554
584
|
app.listen(PORT, '127.0.0.1', () => {
|
|
555
585
|
console.log(`hall-preview: http://builders.localhost:${PORT}/`);
|
|
556
586
|
console.log(accountLine());
|
|
587
|
+
if (FOUNDING) console.log(` founding: stage ${FOUNDING.stage}; asleep: ${Object.keys(FOUNDING.asleep).join(', ') || 'none'}`);
|
|
557
588
|
console.log(` brand: ${BRAND_FILE}${EMPTY ? ' (EMPTY fixtures)' : ''}${MODULES_OFF.length ? ` modules off: ${MODULES_OFF.join(',')}` : ''}`);
|
|
558
589
|
console.log(' pages:', Object.keys(stamped).map((f) => f.replace(/\.html$/, '')).sort().join(' '));
|
|
559
590
|
});
|
package/src/module-api.js
CHANGED
|
@@ -81,7 +81,7 @@ const { sleep } = require('./sleep');
|
|
|
81
81
|
// MAJOR (see allowBoxScope below): passes the request through untouched.
|
|
82
82
|
function deprecatedNoopMiddleware(_req, _res, next) { next(); }
|
|
83
83
|
|
|
84
|
-
const CORE_VERSION = '1.25.
|
|
84
|
+
const CORE_VERSION = '1.25.23'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
|
|
85
85
|
|
|
86
86
|
// A namespaced logger so a module's log lines are attributable + consistent.
|
|
87
87
|
// Usage: const log = api.logger('discord'); log.info('mounted');
|
package/tests/hall_palette.mjs
CHANGED
|
@@ -35,10 +35,13 @@ const SHELL_SRC = read('shell.js');
|
|
|
35
35
|
// SAME stub every time — real enough to fire DOM events at and read innerHTML
|
|
36
36
|
// back from, which the pure-compute-only harness never needed before task 1003460
|
|
37
37
|
// wired a real fetch() into the input handler.
|
|
38
|
-
|
|
38
|
+
// `asleepIds`: nav ids the shell has marked asleep (.nav-item--asleep) while founding.
|
|
39
|
+
function bootPalette({ navItems = [], visibleIds = ['nav-profile', 'nav-work', 'shell-user'], asleepIds = [], modules = null, fetchImpl = undefined } = {}) {
|
|
39
40
|
const registry = {};
|
|
41
|
+
const asleepClass = (id) => ({ contains: (c) => c === 'nav-item--asleep' && asleepIds.includes(id) });
|
|
40
42
|
const makeNav = (it) => ({
|
|
41
43
|
hidden: !!it.hidden,
|
|
44
|
+
classList: asleepClass(`nav-${it.id}`),
|
|
42
45
|
target: it.external ? '_blank' : '',
|
|
43
46
|
getAttribute: (n) => (n === 'href' ? it.href : null),
|
|
44
47
|
querySelector: (sel) => (sel === '.nav-item__label' ? { textContent: it.label } : null),
|
|
@@ -69,7 +72,7 @@ function bootPalette({ navItems = [], visibleIds = ['nav-profile', 'nav-work', '
|
|
|
69
72
|
documentElement: { classList: { add() {}, remove() {} } },
|
|
70
73
|
getElementById(id) {
|
|
71
74
|
if (id === 'topbar-jump' || id === 'topbar-jump-kbd') return stubEl();
|
|
72
|
-
return visibleIds.includes(id) ? { hidden: false } : null;
|
|
75
|
+
return visibleIds.includes(id) ? { hidden: false, classList: asleepClass(id) } : null;
|
|
73
76
|
},
|
|
74
77
|
querySelectorAll(sel) {
|
|
75
78
|
if (sel === '#app-sidebar .nav-item') return navItems.map(makeNav);
|
|
@@ -429,3 +432,57 @@ test('closing and reopening clears the cache — a fresh open may see new DB sta
|
|
|
429
432
|
|
|
430
433
|
assert.equal(calls.length, 2, 'a fresh open must not trust a memo carried over from the previous one');
|
|
431
434
|
});
|
|
435
|
+
|
|
436
|
+
// ---- founding: a sleeping room is not a destination (task 1005285) ----------
|
|
437
|
+
// While a project is founded the shell marks each room the server says sleeps
|
|
438
|
+
// (/me.founding_mode.asleep, keyed by nav id) with .nav-item--asleep and hides it;
|
|
439
|
+
// the server refuses its page too. The jump list must not offer it either, or the
|
|
440
|
+
// founder is listed a room that is not open. Which rooms sleep is the server's own
|
|
441
|
+
// shapeFoundingMode, never a list typed here.
|
|
442
|
+
const require = (await import('node:module')).createRequire(import.meta.url);
|
|
443
|
+
const foundingMode = require('../modules/onboarding/founding-mode.js');
|
|
444
|
+
const ROOMS = [
|
|
445
|
+
{ id: 'home', label: 'Home', href: '/' },
|
|
446
|
+
{ id: 'work', label: 'Tasks', href: '/work' },
|
|
447
|
+
{ id: 'goals', label: 'Goals', href: '/goals' },
|
|
448
|
+
{ id: 'goal-map', label: 'Sky', href: '/goal-map' },
|
|
449
|
+
{ id: 'board-room', label: 'Board Room', href: '/board-room' },
|
|
450
|
+
{ id: 'collab', label: 'Collab', href: '/collab' },
|
|
451
|
+
{ id: 'roster', label: 'Builders', href: '/roster' },
|
|
452
|
+
{ id: 'profile', label: 'Profile', href: '/profile' },
|
|
453
|
+
{ id: 'primer', label: 'Primer', href: '/primer' },
|
|
454
|
+
];
|
|
455
|
+
const asleepAt = (stage) => Object.keys(foundingMode.shapeFoundingMode({ active: 'true', stage }).asleep).map((id) => `nav-${id}`);
|
|
456
|
+
const navIds = ROOMS.map((r) => `nav-${r.id}`).concat('shell-user');
|
|
457
|
+
const pages = (P) => P.compute('').filter((r) => r.group === 'Pages').map((r) => r.label);
|
|
458
|
+
|
|
459
|
+
test('founding: a room the server says sleeps is neither a page nor a section in the jump list (task 1005285)', () => {
|
|
460
|
+
const asleepIds = asleepAt('scope');
|
|
461
|
+
assert.deepEqual([...asleepIds].sort(), ['nav-collab', 'nav-goal-map', 'nav-goals', 'nav-roster', 'nav-work'],
|
|
462
|
+
'at scope the server puts Tasks, Goals, Sky, Collab and Builders to sleep');
|
|
463
|
+
const P = bootPalette({ navItems: ROOMS.map((r) => ({ ...r })), visibleIds: navIds, asleepIds });
|
|
464
|
+
assert.deepEqual(pages(P), ['Home', 'Board Room', 'Profile', 'Primer'], 'only the open rooms are listed');
|
|
465
|
+
const all = P.compute('');
|
|
466
|
+
assert.ok(!all.some((r) => r.group === 'Tasks'), 'no Tasks tab is offered while Tasks sleeps');
|
|
467
|
+
assert.ok(all.some((r) => r.group === 'Profile') && all.some((r) => r.group === 'Primer'), 'an open room keeps its sections');
|
|
468
|
+
assert.ok(!P.compute('tas').some((r) => r.href === '/work' || r.href.indexOf('/work#') === 0), 'searching for it finds nothing that goes there');
|
|
469
|
+
});
|
|
470
|
+
|
|
471
|
+
test('founding: a room opens in the jump list the moment its stage is behind (task 1005285)', () => {
|
|
472
|
+
const asleepIds = asleepAt('charter'); // scope and strategize are done: Goals, Sky and Tasks woke
|
|
473
|
+
const P = bootPalette({ navItems: ROOMS.map((r) => ({ ...r })), visibleIds: navIds, asleepIds });
|
|
474
|
+
assert.deepEqual(pages(P), ['Home', 'Tasks', 'Goals', 'Sky', 'Board Room', 'Profile', 'Primer']);
|
|
475
|
+
assert.ok(P.compute('').some((r) => r.group === 'Tasks'), 'the woken room brings its tabs');
|
|
476
|
+
});
|
|
477
|
+
|
|
478
|
+
test('a project that is not founding: the jump list is exactly what it was (task 1005285)', () => {
|
|
479
|
+
const P = bootPalette({ navItems: ROOMS.map((r) => ({ ...r })), visibleIds: navIds });
|
|
480
|
+
assert.deepEqual(pages(P), ROOMS.map((r) => r.label));
|
|
481
|
+
assert.ok(P.compute('').some((r) => r.group === 'Tasks'));
|
|
482
|
+
});
|
|
483
|
+
|
|
484
|
+
test('the jump list reads the sleeping mark, the one shell.js stamps from /me (task 1005285)', () => {
|
|
485
|
+
assert.match(SHELL_SRC, /classList\.add\('nav-item--asleep'\)/, 'shell.js marks a sleeping room with this class');
|
|
486
|
+
assert.match(PALETTE_SRC, /contains\('nav-item--asleep'\)/, 'and the palette skips exactly that class');
|
|
487
|
+
assert.doesNotMatch(PALETTE_SRC.replace(/\/\/.*$/gm, ''), /founding|asleepRooms|WAKES/, 'the palette never works out which rooms sleep on its own');
|
|
488
|
+
});
|