@bongos/core 1.22.2 → 1.23.2
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 +104 -64
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +8 -0
- package/clients/bongos-client/index.cjs +8 -0
- package/clients/bongos-client/index.d.ts +11 -1
- package/clients/bongos-client/index.mjs +8 -0
- package/docs/adr/0342-module-categories-are-eight-parents-with-approved-sub-categories.md +4 -2
- package/docs/api/openapi.json +210 -4
- package/docs/api-reference.md +6 -2
- package/docs/architecture.md +11 -0
- package/docs/copy-inventory.md +1 -1
- package/docs/copy-registry.json +1 -1
- package/docs/module-api-changelog.md +8 -0
- package/docs/modules-contract.md +1 -0
- package/docs/page-readings.json +40 -40
- package/migrations/core_280_store_subcategories.sql +58 -0
- package/modules/government/catalog.js +3 -0
- package/modules/government/migrations/government_034_module_subcategory_review.sql +35 -0
- package/modules/hall-ui/public/deploy.js +3 -3
- package/modules/hall-ui/public/dom-utils.js +5 -1
- package/modules/hall-ui/public/genesis-home.js +1 -1
- package/modules/lifecycle/github-push.js +1 -2
- package/modules/npm-release/preview/supervisor.js +2 -1
- package/modules/platform-identity/project-stats.js +2 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +13 -0
- package/scripts/bongos/autobongos-run.js +2 -1
- package/scripts/bongos/autonomy-gauge.js +2 -1
- package/scripts/bongos/backfill-disciplines.js +1 -1
- package/scripts/bongos/backfill-sessions.js +1 -1
- package/scripts/bongos/backup.js +2 -1
- package/scripts/bongos/dev.js +1 -1
- package/scripts/bongos/do-api.js +2 -1
- package/scripts/bongos/fitness.js +5 -6
- package/scripts/bongos/local-preview.js +2 -1
- package/scripts/bongos/login.js +1 -1
- package/scripts/bongos/page-reader.js +2 -1
- package/scripts/bongos/probe-cache.js +2 -1
- package/scripts/bongos/provision-core-upgrade.js +2 -1
- package/scripts/bongos/provision.js +5 -4
- package/scripts/bongos/publish-integration-gate.js +2 -1
- package/scripts/bongos/render-api.js +2 -1
- package/scripts/bongos/sandbox-stage.js +2 -1
- package/scripts/bongos/seed-bongos-v1-idea-routing-tasks.js +1 -1
- package/scripts/bongos/seed-bv1-profiles-tasks.js +1 -1
- package/scripts/bongos/seed-bv2-ideator-surface-tasks.js +1 -1
- package/scripts/bongos/session-eval.js +2 -1
- package/scripts/bongos/setup.js +2 -1
- package/scripts/bongos/sleep-helper-guard.js +88 -0
- package/scripts/bongos/upgrade.js +2 -2
- package/scripts/gds/sleep-helper-guard.js +6 -0
- package/src/bongos/module-scope-map.js +1 -0
- package/src/bongos/module-store.js +8 -3
- package/src/bongos/module-subcategories.js +316 -0
- package/src/bongos/route-rank-check.js +5 -0
- package/src/bongos/routes/modules.js +55 -1
- package/src/module-api.js +6 -1
- package/src/module-loader/manifest-schema.js +4 -3
- package/src/sleep.js +24 -0
- package/tests/deploy_divergence_line.mjs +4 -1
- package/tests/deploy_page_projects.mjs +2 -1
- package/tests/module_api.mjs +1 -0
- package/tests/module_store_instance_root.mjs +2 -1
- package/tests/module_store_subcategories.mjs +364 -0
- package/tests/sleep_helper.mjs +99 -0
package/docs/page-readings.json
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"surface": "builders",
|
|
13
13
|
"title": "Repo Atlas",
|
|
14
14
|
"states_read": ["map","truth","detail","index","out"],
|
|
15
|
-
"files_hash": "
|
|
15
|
+
"files_hash": "c99be29f3f841a5a",
|
|
16
16
|
"reading_hash": "e1524fc364d7add1",
|
|
17
17
|
"counts": {"lines":23,"placed":11,"shared":8,"unplaced":4},
|
|
18
18
|
"omitted": {"data":3},
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"surface": "builders",
|
|
49
49
|
"title": "Blockers",
|
|
50
50
|
"states_read": ["default"],
|
|
51
|
-
"files_hash": "
|
|
51
|
+
"files_hash": "059ad91b8219f672",
|
|
52
52
|
"reading_hash": "b5c109204212d70f",
|
|
53
53
|
"counts": {"lines":26,"placed":10,"shared":8,"unplaced":8},
|
|
54
54
|
"omitted": {"data":10},
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"surface": "builders",
|
|
88
88
|
"title": "Board Room",
|
|
89
89
|
"states_read": ["room","out","sitting-meta","objection-form"],
|
|
90
|
-
"files_hash": "
|
|
90
|
+
"files_hash": "f76c50f0c897275b",
|
|
91
91
|
"reading_hash": "b1c4321892b582cc",
|
|
92
92
|
"counts": {"lines":50,"placed":18,"shared":8,"unplaced":24},
|
|
93
93
|
"omitted": {"data":14},
|
|
@@ -150,7 +150,7 @@
|
|
|
150
150
|
"surface": "builders",
|
|
151
151
|
"title": "The city",
|
|
152
152
|
"states_read": ["city","fullscreen","switched","focus","pins","living","card","card-ask"],
|
|
153
|
-
"files_hash": "
|
|
153
|
+
"files_hash": "6f33201eed0847f6",
|
|
154
154
|
"reading_hash": "77470c4eb3047a05",
|
|
155
155
|
"counts": {"lines":43,"placed":10,"shared":8,"unplaced":25},
|
|
156
156
|
"omitted": {"data":17},
|
|
@@ -206,7 +206,7 @@
|
|
|
206
206
|
"surface": "builders",
|
|
207
207
|
"title": "Collab",
|
|
208
208
|
"states_read": ["board","out"],
|
|
209
|
-
"files_hash": "
|
|
209
|
+
"files_hash": "1786503817448bb6",
|
|
210
210
|
"reading_hash": "72f6694436d9ce37",
|
|
211
211
|
"counts": {"lines":76,"placed":28,"shared":7,"unplaced":41},
|
|
212
212
|
"omitted": {"data":14},
|
|
@@ -295,7 +295,7 @@
|
|
|
295
295
|
"surface": "builders",
|
|
296
296
|
"title": "Commands",
|
|
297
297
|
"states_read": ["in","out"],
|
|
298
|
-
"files_hash": "
|
|
298
|
+
"files_hash": "15c4924a94fd71de",
|
|
299
299
|
"reading_hash": "dc5f111e722fca7f",
|
|
300
300
|
"counts": {"lines":69,"placed":46,"shared":8,"unplaced":15},
|
|
301
301
|
"omitted": {"data":175},
|
|
@@ -377,7 +377,7 @@
|
|
|
377
377
|
"surface": "builders",
|
|
378
378
|
"title": "Copy desk",
|
|
379
379
|
"states_read": ["queue","out","search","composer","closer","proposer"],
|
|
380
|
-
"files_hash": "
|
|
380
|
+
"files_hash": "7ee2f2fbda102e82",
|
|
381
381
|
"reading_hash": "ecd882a342812d5c",
|
|
382
382
|
"counts": {"lines":79,"placed":42,"shared":8,"unplaced":29},
|
|
383
383
|
"omitted": {"data":117},
|
|
@@ -469,7 +469,7 @@
|
|
|
469
469
|
"surface": "builders",
|
|
470
470
|
"title": "Deploy",
|
|
471
471
|
"states_read": ["work","out"],
|
|
472
|
-
"files_hash": "
|
|
472
|
+
"files_hash": "1036ff7c411b7245",
|
|
473
473
|
"reading_hash": "b9b3d3cdbfae00be",
|
|
474
474
|
"counts": {"lines":17,"placed":5,"shared":8,"unplaced":4},
|
|
475
475
|
"omitted": {"data":3},
|
|
@@ -499,7 +499,7 @@
|
|
|
499
499
|
"surface": "builders",
|
|
500
500
|
"title": "Diagrams",
|
|
501
501
|
"states_read": ["in","out"],
|
|
502
|
-
"files_hash": "
|
|
502
|
+
"files_hash": "85b27b815b79531e",
|
|
503
503
|
"reading_hash": "2396753376ef6829",
|
|
504
504
|
"counts": {"lines":46,"placed":32,"shared":8,"unplaced":6},
|
|
505
505
|
"omitted": {"data":3},
|
|
@@ -558,7 +558,7 @@
|
|
|
558
558
|
"surface": "builders",
|
|
559
559
|
"title": "Drachmae & karma",
|
|
560
560
|
"states_read": ["read","toc-open","jump","out"],
|
|
561
|
-
"files_hash": "
|
|
561
|
+
"files_hash": "fb8f167450dc85f6",
|
|
562
562
|
"reading_hash": "ab14682730f5dffc",
|
|
563
563
|
"counts": {"lines":417,"placed":40,"shared":8,"unplaced":369},
|
|
564
564
|
"omitted": {"data":32},
|
|
@@ -988,7 +988,7 @@
|
|
|
988
988
|
"surface": "builders",
|
|
989
989
|
"title": "Fleet costs",
|
|
990
990
|
"states_read": ["ledger","out"],
|
|
991
|
-
"files_hash": "
|
|
991
|
+
"files_hash": "bd215f757d830586",
|
|
992
992
|
"reading_hash": "382e521aaa529c82",
|
|
993
993
|
"counts": {"lines":32,"placed":9,"shared":8,"unplaced":15},
|
|
994
994
|
"omitted": {"data":13},
|
|
@@ -1033,7 +1033,7 @@
|
|
|
1033
1033
|
"surface": "builders",
|
|
1034
1034
|
"title": "Autobongos",
|
|
1035
1035
|
"states_read": ["queue","out"],
|
|
1036
|
-
"files_hash": "
|
|
1036
|
+
"files_hash": "e39b518a33ca0463",
|
|
1037
1037
|
"reading_hash": "5b2346d409db93bd",
|
|
1038
1038
|
"counts": {"lines":42,"placed":12,"shared":8,"unplaced":22},
|
|
1039
1039
|
"omitted": {"data":11},
|
|
@@ -1088,7 +1088,7 @@
|
|
|
1088
1088
|
"surface": "builders",
|
|
1089
1089
|
"title": "The sky",
|
|
1090
1090
|
"states_read": ["tour","sky","wells","ledger","full","full-back","out"],
|
|
1091
|
-
"files_hash": "
|
|
1091
|
+
"files_hash": "5bfb4d588f540491",
|
|
1092
1092
|
"reading_hash": "1381001ec269b0ae",
|
|
1093
1093
|
"counts": {"lines":48,"placed":22,"shared":7,"unplaced":19},
|
|
1094
1094
|
"omitted": {"data":8},
|
|
@@ -1149,7 +1149,7 @@
|
|
|
1149
1149
|
"surface": "builders",
|
|
1150
1150
|
"title": "Goals",
|
|
1151
1151
|
"states_read": ["list","filters","cards","detail","dependencies","out","uat","uat-panel","author"],
|
|
1152
|
-
"files_hash": "
|
|
1152
|
+
"files_hash": "9621abaa1fb6af60",
|
|
1153
1153
|
"reading_hash": "8cd33cf7748dbcda",
|
|
1154
1154
|
"counts": {"lines":151,"placed":47,"shared":8,"unplaced":96},
|
|
1155
1155
|
"omitted": {"data":271},
|
|
@@ -1313,7 +1313,7 @@
|
|
|
1313
1313
|
"surface": "builders",
|
|
1314
1314
|
"title": "Government",
|
|
1315
1315
|
"states_read": ["constitution","out","permissions","board","constitution-tab"],
|
|
1316
|
-
"files_hash": "
|
|
1316
|
+
"files_hash": "4743ebc2c29f8858",
|
|
1317
1317
|
"reading_hash": "165c2459edf3678c",
|
|
1318
1318
|
"counts": {"lines":54,"placed":19,"shared":8,"unplaced":27},
|
|
1319
1319
|
"omitted": {"data":249},
|
|
@@ -1380,8 +1380,8 @@
|
|
|
1380
1380
|
"surface": "builders",
|
|
1381
1381
|
"title": "Builders' Hall",
|
|
1382
1382
|
"states_read": ["home","standing","standing-karma","out","founding","genesis","decide","demo"],
|
|
1383
|
-
"files_hash": "
|
|
1384
|
-
"reading_hash": "
|
|
1383
|
+
"files_hash": "6f48e2429d6454ec",
|
|
1384
|
+
"reading_hash": "c24fc6afc7453776",
|
|
1385
1385
|
"counts": {"lines":110,"placed":56,"shared":10,"unplaced":44},
|
|
1386
1386
|
"omitted": {"data":102},
|
|
1387
1387
|
"notes": ["founding: an action failed (page.focus: Timeout 6000ms exceeded.); read as it stood"],
|
|
@@ -1472,7 +1472,7 @@
|
|
|
1472
1472
|
{"key":"L0084","section":"Achievements","text":"Won {…}","placement":"placed","file":"modules/hall-ui/public/builders.js","line":481,"string_id":"c5fd76a9e03d","state":"standing","occurrences":10},
|
|
1473
1473
|
{"key":"L0085","section":"Achievements","text":"{…} of {…}","placement":"placed","file":"modules/hall-ui/public/sky-panel.js","line":120,"string_id":"73c1372b43d9","state":"standing","occurrences":2},
|
|
1474
1474
|
{"key":"L0086","section":"footer","text":"Sign out","placement":"shared","file":"modules/hall-ui/public/shell.js","line":516,"string_id":"1883ad7f07fc","state":"standing","occurrences":2},
|
|
1475
|
-
{"key":"L0087","section":"Achievements","text":"core 1.
|
|
1475
|
+
{"key":"L0087","section":"Achievements","text":"core 1.23.0","placement":"unplaced","state":"standing"},
|
|
1476
1476
|
{"key":"L0088","section":"Achievements","text":"Skip","placement":"unplaced","state":"standing"},
|
|
1477
1477
|
{"key":"L0089","section":"Next up — ready to claim","text":"Next up — ready to claim","placement":"placed","file":"modules/hall-ui/public/hall-widgets.js","line":110,"string_id":"659d8256139c"},
|
|
1478
1478
|
{"key":"L0090","section":"Next up — ready to claim","text":"#1003412 · ~60m · 51 {…} est.","placement":"unplaced"},
|
|
@@ -1489,7 +1489,7 @@
|
|
|
1489
1489
|
{"key":"L0101","section":"Recently shipped","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","occurrences":2},
|
|
1490
1490
|
{"key":"L0102","section":"Recently shipped","text":"All your work →","placement":"placed","file":"modules/hall-ui/public/hall-widgets.js","line":118,"string_id":"b38c01691857"},
|
|
1491
1491
|
{"key":"L0103","section":"Recently shipped","text":"{…} of {…}","placement":"placed","file":"modules/hall-ui/public/sky-panel.js","line":120,"string_id":"73c1372b43d9"},
|
|
1492
|
-
{"key":"L0104","section":"Recently shipped","text":"core 1.
|
|
1492
|
+
{"key":"L0104","section":"Recently shipped","text":"core 1.23.0","placement":"unplaced"},
|
|
1493
1493
|
{"key":"L0105","section":"Good morning, {…}","text":"Where do you want to start the day?","placement":"placed","file":"modules/hall-ui/public/welcome-boot.js","line":164,"string_id":"0ec8d133f878","state":"founding"},
|
|
1494
1494
|
{"key":"L0106","section":"Good morning, {…}","text":"Start with your role","placement":"placed","file":"modules/hall-ui/public/welcome-boot.js","line":166,"string_id":"58cef7963b6c","state":"founding"},
|
|
1495
1495
|
{"key":"L0107","section":"Good morning, {…}","text":"Pick today’s craft and go straight to its room.","placement":"placed","file":"modules/hall-ui/public/welcome-boot.js","line":166,"string_id":"100e4665514d","state":"founding"},
|
|
@@ -1503,7 +1503,7 @@
|
|
|
1503
1503
|
"surface": "builders",
|
|
1504
1504
|
"title": "Idea",
|
|
1505
1505
|
"states_read": ["record","missing"],
|
|
1506
|
-
"files_hash": "
|
|
1506
|
+
"files_hash": "9e429bd0b3857779",
|
|
1507
1507
|
"reading_hash": "56ddbad6a6c5ee9f",
|
|
1508
1508
|
"counts": {"lines":49,"placed":20,"shared":9,"unplaced":20},
|
|
1509
1509
|
"omitted": {"data":22},
|
|
@@ -1565,7 +1565,7 @@
|
|
|
1565
1565
|
"surface": "builders",
|
|
1566
1566
|
"title": "Ideas",
|
|
1567
1567
|
"states_read": ["compose","full","develop"],
|
|
1568
|
-
"files_hash": "
|
|
1568
|
+
"files_hash": "15a63bb75e269e70",
|
|
1569
1569
|
"reading_hash": "64270f28571d4c6f",
|
|
1570
1570
|
"counts": {"lines":66,"placed":31,"shared":8,"unplaced":27},
|
|
1571
1571
|
"omitted": {"data":116},
|
|
@@ -1644,7 +1644,7 @@
|
|
|
1644
1644
|
"surface": "builders",
|
|
1645
1645
|
"title": "Modules",
|
|
1646
1646
|
"states_read": ["browse","search-empty","lens","details","out"],
|
|
1647
|
-
"files_hash": "
|
|
1647
|
+
"files_hash": "d23744d56d3d6024",
|
|
1648
1648
|
"reading_hash": "d544f93125c23b24",
|
|
1649
1649
|
"counts": {"lines":58,"placed":26,"shared":8,"unplaced":24},
|
|
1650
1650
|
"omitted": {"data":106},
|
|
@@ -1715,7 +1715,7 @@
|
|
|
1715
1715
|
"surface": "builders",
|
|
1716
1716
|
"title": "My agents",
|
|
1717
1717
|
"states_read": ["desk","factory","saved","nobody"],
|
|
1718
|
-
"files_hash": "
|
|
1718
|
+
"files_hash": "b25d44afa4121be7",
|
|
1719
1719
|
"reading_hash": "070e97708b3c6f3a",
|
|
1720
1720
|
"counts": {"lines":78,"placed":18,"shared":8,"unplaced":52},
|
|
1721
1721
|
"omitted": {"data":39},
|
|
@@ -1806,7 +1806,7 @@
|
|
|
1806
1806
|
"surface": "builders",
|
|
1807
1807
|
"title": "Primer",
|
|
1808
1808
|
"states_read": ["in","toc-open","out"],
|
|
1809
|
-
"files_hash": "
|
|
1809
|
+
"files_hash": "edc08ce515d623d2",
|
|
1810
1810
|
"reading_hash": "cbc093eecbec61ed",
|
|
1811
1811
|
"counts": {"lines":421,"placed":43,"shared":8,"unplaced":370},
|
|
1812
1812
|
"omitted": {"data":7},
|
|
@@ -2240,7 +2240,7 @@
|
|
|
2240
2240
|
"surface": "builders",
|
|
2241
2241
|
"title": "Profile",
|
|
2242
2242
|
"states_read": ["own","works","activity","activity-artist","activity-ideator","other","artist","ideator","out"],
|
|
2243
|
-
"files_hash": "
|
|
2243
|
+
"files_hash": "40675bbeeb7bb684",
|
|
2244
2244
|
"reading_hash": "72033a3202ac4be5",
|
|
2245
2245
|
"counts": {"lines":186,"placed":59,"shared":8,"unplaced":119},
|
|
2246
2246
|
"omitted": {"data":204},
|
|
@@ -2439,7 +2439,7 @@
|
|
|
2439
2439
|
"surface": "builders",
|
|
2440
2440
|
"title": "Project settings",
|
|
2441
2441
|
"states_read": ["default"],
|
|
2442
|
-
"files_hash": "
|
|
2442
|
+
"files_hash": "6b1b1d598ee14248",
|
|
2443
2443
|
"reading_hash": "ac46749c5352459d",
|
|
2444
2444
|
"counts": {"lines":39,"placed":20,"shared":8,"unplaced":11},
|
|
2445
2445
|
"omitted": {"data":29},
|
|
@@ -2491,7 +2491,7 @@
|
|
|
2491
2491
|
"surface": "builders",
|
|
2492
2492
|
"title": "Ranks",
|
|
2493
2493
|
"states_read": ["out","in","founding"],
|
|
2494
|
-
"files_hash": "
|
|
2494
|
+
"files_hash": "71feabccd047aec1",
|
|
2495
2495
|
"reading_hash": "0fd36185243edcc8",
|
|
2496
2496
|
"counts": {"lines":39,"placed":14,"shared":8,"unplaced":17},
|
|
2497
2497
|
"omitted": {"data":8},
|
|
@@ -2543,7 +2543,7 @@
|
|
|
2543
2543
|
"surface": "builders",
|
|
2544
2544
|
"title": "Roadmap",
|
|
2545
2545
|
"states_read": ["in","out"],
|
|
2546
|
-
"files_hash": "
|
|
2546
|
+
"files_hash": "a7e0c6acb5f54146",
|
|
2547
2547
|
"reading_hash": "91364187027b2406",
|
|
2548
2548
|
"counts": {"lines":59,"placed":29,"shared":8,"unplaced":22},
|
|
2549
2549
|
"omitted": {"data":30},
|
|
@@ -2615,7 +2615,7 @@
|
|
|
2615
2615
|
"surface": "builders",
|
|
2616
2616
|
"title": "Builders",
|
|
2617
2617
|
"states_read": ["roster","artists","search","out"],
|
|
2618
|
-
"files_hash": "
|
|
2618
|
+
"files_hash": "6bebd9c815f346e7",
|
|
2619
2619
|
"reading_hash": "a61b867b5e26fa40",
|
|
2620
2620
|
"counts": {"lines":45,"placed":12,"shared":8,"unplaced":25},
|
|
2621
2621
|
"omitted": {"data":60},
|
|
@@ -2673,7 +2673,7 @@
|
|
|
2673
2673
|
"surface": "builders",
|
|
2674
2674
|
"title": "Sessions",
|
|
2675
2675
|
"states_read": ["ledger","out"],
|
|
2676
|
-
"files_hash": "
|
|
2676
|
+
"files_hash": "f6174d066c42cda7",
|
|
2677
2677
|
"reading_hash": "c3da74149ede236a",
|
|
2678
2678
|
"counts": {"lines":330,"placed":20,"shared":8,"unplaced":302},
|
|
2679
2679
|
"omitted": {"data":303},
|
|
@@ -3016,7 +3016,7 @@
|
|
|
3016
3016
|
"surface": "builders",
|
|
3017
3017
|
"title": "Settings",
|
|
3018
3018
|
"states_read": ["account","access","preferences","skills-walkthrough","offered-skills","install-reports","sound","update"],
|
|
3019
|
-
"files_hash": "
|
|
3019
|
+
"files_hash": "68a9a8e1ab2be33f",
|
|
3020
3020
|
"reading_hash": "5ae7da31abcd631e",
|
|
3021
3021
|
"counts": {"lines":176,"placed":115,"shared":8,"unplaced":53},
|
|
3022
3022
|
"omitted": {"data":69},
|
|
@@ -3205,7 +3205,7 @@
|
|
|
3205
3205
|
"surface": "builders",
|
|
3206
3206
|
"title": "The street",
|
|
3207
3207
|
"states_read": ["street","fullscreen","card","switched","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"],
|
|
3208
|
-
"files_hash": "
|
|
3208
|
+
"files_hash": "b33575f9699d82d2",
|
|
3209
3209
|
"reading_hash": "f9a1c5189c877bb0",
|
|
3210
3210
|
"counts": {"lines":650,"placed":75,"shared":8,"unplaced":567},
|
|
3211
3211
|
"omitted": {"data":552},
|
|
@@ -3868,7 +3868,7 @@
|
|
|
3868
3868
|
"surface": "builders",
|
|
3869
3869
|
"title": "Studio",
|
|
3870
3870
|
"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"],
|
|
3871
|
-
"files_hash": "
|
|
3871
|
+
"files_hash": "c28b9e674cf6a389",
|
|
3872
3872
|
"reading_hash": "a79704d0791f02bb",
|
|
3873
3873
|
"counts": {"lines":30,"placed":16,"shared":6,"unplaced":8},
|
|
3874
3874
|
"omitted": {"data":4},
|
|
@@ -3911,7 +3911,7 @@
|
|
|
3911
3911
|
"surface": "builders",
|
|
3912
3912
|
"title": "Task",
|
|
3913
3913
|
"states_read": ["record","from-goal","missing"],
|
|
3914
|
-
"files_hash": "
|
|
3914
|
+
"files_hash": "72445b58a29c098c",
|
|
3915
3915
|
"reading_hash": "f053364f9ec3bf91",
|
|
3916
3916
|
"counts": {"lines":132,"placed":33,"shared":10,"unplaced":89},
|
|
3917
3917
|
"omitted": {"data":76},
|
|
@@ -4056,7 +4056,7 @@
|
|
|
4056
4056
|
"surface": "builders",
|
|
4057
4057
|
"title": "Your thinking",
|
|
4058
4058
|
"states_read": ["tour","sky","list","simple","full-idea","full","full-list","full-back","out"],
|
|
4059
|
-
"files_hash": "
|
|
4059
|
+
"files_hash": "36af8424bf7d430c",
|
|
4060
4060
|
"reading_hash": "0f327dab7b2eddfd",
|
|
4061
4061
|
"counts": {"lines":48,"placed":22,"shared":7,"unplaced":19},
|
|
4062
4062
|
"omitted": {"data":8},
|
|
@@ -4117,7 +4117,7 @@
|
|
|
4117
4117
|
"surface": "builders",
|
|
4118
4118
|
"title": "Tweak a page",
|
|
4119
4119
|
"states_read": ["doc","typed","chrome","submitted","picking","out"],
|
|
4120
|
-
"files_hash": "
|
|
4120
|
+
"files_hash": "7a60cbfee02d831b",
|
|
4121
4121
|
"reading_hash": "711c540ebc7ef977",
|
|
4122
4122
|
"counts": {"lines":23,"placed":15,"shared":1,"unplaced":7},
|
|
4123
4123
|
"omitted": {"data":35},
|
|
@@ -4153,7 +4153,7 @@
|
|
|
4153
4153
|
"surface": "builders",
|
|
4154
4154
|
"title": "Watch",
|
|
4155
4155
|
"states_read": ["board","out","operations","security"],
|
|
4156
|
-
"files_hash": "
|
|
4156
|
+
"files_hash": "690fe8fb5e30f1fb",
|
|
4157
4157
|
"reading_hash": "489092651dee752c",
|
|
4158
4158
|
"counts": {"lines":86,"placed":36,"shared":8,"unplaced":42},
|
|
4159
4159
|
"omitted": {"data":166},
|
|
@@ -4252,7 +4252,7 @@
|
|
|
4252
4252
|
"surface": "builders",
|
|
4253
4253
|
"title": "Tasks",
|
|
4254
4254
|
"states_read": ["ready","in-progress","backlog","completed","filters-open","out","founding"],
|
|
4255
|
-
"files_hash": "
|
|
4255
|
+
"files_hash": "23e8edcf493b12e3",
|
|
4256
4256
|
"reading_hash": "e5b6e930db9ca1ad",
|
|
4257
4257
|
"counts": {"lines":121,"placed":48,"shared":8,"unplaced":65},
|
|
4258
4258
|
"omitted": {"data":321},
|
|
@@ -4352,7 +4352,7 @@
|
|
|
4352
4352
|
{"key":"L0092","section":"Ready — tasks to do150","text":"30m","placement":"unplaced","occurrences":5},
|
|
4353
4353
|
{"key":"L0093","section":"Ready — tasks to do150","text":"1.00 d/min","placement":"unplaced","occurrences":21},
|
|
4354
4354
|
{"key":"L0094","section":"Ready — tasks to do150","text":"11d","placement":"unplaced"},
|
|
4355
|
-
{"key":"L0095","section":"Ready — tasks to do150","text":"via goal","placement":"placed","file":"modules/hall-ui/public/dom-utils.js","line":
|
|
4355
|
+
{"key":"L0095","section":"Ready — tasks to do150","text":"via goal","placement":"placed","file":"modules/hall-ui/public/dom-utils.js","line":450,"string_id":"8cd3cc4005fc","occurrences":23},
|
|
4356
4356
|
{"key":"L0096","section":"Ready — tasks to do150","text":"{…} Est.","placement":"unplaced","occurrences":25},
|
|
4357
4357
|
{"key":"L0097","section":"Ready — tasks to do150","text":"Metic+","placement":"unplaced","occurrences":3},
|
|
4358
4358
|
{"key":"L0098","section":"Ready — tasks to do150","text":"60m","placement":"unplaced","occurrences":11},
|
|
@@ -4881,7 +4881,7 @@
|
|
|
4881
4881
|
"surface": "landing",
|
|
4882
4882
|
"title": "{{productName}} — projects",
|
|
4883
4883
|
"states_read": ["out-map","in-map","in-map-projects","in-map-profile","in-map-kbd","in-map-search","in-map-mine-on","in-table","in-table-by-builders","in-mine","in-manage","in-manage-address","in-manage-planet","in-manage-card","in-manage-look","in-manage-kind","in-manage-invite","in-manage-invite-handoff","in-manage-invite-guild","in-manage-app-live","in-manage-app-building","in-manage-app-failed","in-manage-app-retry","in-manage-app-offer","in-manage-app-connect","in-manage-snag","in-manage-gone","in-manage-missing","out-manage","in-new","in-new-named","in-new-ready","in-new-name-prefilled","in-new-demo","in-new-demo-used","in-new-checks-filled","in-new-checks-entity","in-new-row-code","in-new-row-address","in-new-row-team","in-new-row-extras","in-new-row-rewards","in-new-row-app","in-new-row-run","in-new-row-ship","in-new-look","in-new-look-custom","in-new-create-blocked","in-new-done","in-new-resume-offer","out-new","out-map-projects","card","card-noart","card-self","in-manage-demo","in-mine-dns-pending","in-manage-dns-pending","in-mine-empty","card-floor","card-backdrop","in-new-done-live","setup-just-created","setup-waiting-on-github","setup-installing","setup-stopped","setup-all-done","setup-cloud-hop-open"],
|
|
4884
|
-
"files_hash": "
|
|
4884
|
+
"files_hash": "c7313bacc1c6ae7d",
|
|
4885
4885
|
"reading_hash": "75a7cd0d3d1ba6d4",
|
|
4886
4886
|
"counts": {"lines":685,"placed":239,"shared":21,"unplaced":425},
|
|
4887
4887
|
"omitted": {"data":130},
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
-- core_280_store_subcategories.sql — the store's sub-categories and the queue that
|
|
2
|
+
-- approves them (task 1004355, ADR 0342 D3).
|
|
3
|
+
--
|
|
4
|
+
-- WHAT IT IS. A module sits under one of eight fixed parents (ADR 0342 D1) and, once
|
|
5
|
+
-- approved, one narrow sub-category: the comparable set the cap of ten and the
|
|
6
|
+
-- ranking count within (D2). An author proposes a sub-category when publishing; it
|
|
7
|
+
-- is NOT live until a Metic+ person approves it (optionally renaming it) or merges
|
|
8
|
+
-- it into an existing one. Until then the module is listed under its parent only.
|
|
9
|
+
--
|
|
10
|
+
-- store_subcategories one row per (parent, sub_key). status proposed |
|
|
11
|
+
-- approved | merged. A merged row points at the
|
|
12
|
+
-- sub-category it was merged into, so a later publish
|
|
13
|
+
-- naming the old key lands on the right one.
|
|
14
|
+
-- store_module_categories where each store module sits now: its parent and the
|
|
15
|
+
-- sub-category it named (proposed or approved). A merge
|
|
16
|
+
-- moves every module of the merged row here. Kept apart
|
|
17
|
+
-- from the published manifest, which never changes.
|
|
18
|
+
--
|
|
19
|
+
-- The parent list matches CATEGORY_PARENTS in src/module-loader/manifest-schema.js;
|
|
20
|
+
-- changing it needs a new ADR (D1).
|
|
21
|
+
--
|
|
22
|
+
-- Additive only (two new tables), so forward-safe. Idempotent: safe to re-run.
|
|
23
|
+
-- Approved by the owner on 2026-10-15.
|
|
24
|
+
|
|
25
|
+
BEGIN;
|
|
26
|
+
|
|
27
|
+
CREATE TABLE IF NOT EXISTS store_subcategories (
|
|
28
|
+
id bigserial PRIMARY KEY,
|
|
29
|
+
parent text NOT NULL
|
|
30
|
+
CHECK (parent IN ('work', 'people', 'quality', 'money', 'communication', 'pages', 'hosting', 'knowledge')),
|
|
31
|
+
sub_key text NOT NULL
|
|
32
|
+
CHECK (sub_key ~ '^[a-z][a-z0-9-]*$'),
|
|
33
|
+
label text NOT NULL CHECK (length(label) BETWEEN 1 AND 80),
|
|
34
|
+
status text NOT NULL DEFAULT 'proposed'
|
|
35
|
+
CHECK (status IN ('proposed', 'approved', 'merged')),
|
|
36
|
+
proposed_by bigint REFERENCES builders(id),
|
|
37
|
+
decided_by bigint REFERENCES builders(id),
|
|
38
|
+
decided_at timestamptz,
|
|
39
|
+
merged_into bigint REFERENCES store_subcategories(id),
|
|
40
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
41
|
+
UNIQUE (parent, sub_key),
|
|
42
|
+
CHECK ((status = 'merged') = (merged_into IS NOT NULL)),
|
|
43
|
+
CHECK ((status = 'proposed') = (decided_at IS NULL))
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
CREATE INDEX IF NOT EXISTS idx_store_subcategories_status ON store_subcategories (status);
|
|
47
|
+
|
|
48
|
+
CREATE TABLE IF NOT EXISTS store_module_categories (
|
|
49
|
+
module_key text PRIMARY KEY REFERENCES store_modules(module_key),
|
|
50
|
+
parent text NOT NULL
|
|
51
|
+
CHECK (parent IN ('work', 'people', 'quality', 'money', 'communication', 'pages', 'hosting', 'knowledge')),
|
|
52
|
+
subcategory_id bigint REFERENCES store_subcategories(id),
|
|
53
|
+
updated_at timestamptz NOT NULL DEFAULT now()
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
CREATE INDEX IF NOT EXISTS idx_store_module_categories_sub ON store_module_categories (subcategory_id);
|
|
57
|
+
|
|
58
|
+
COMMIT;
|
|
@@ -235,6 +235,9 @@ const PERMISSIONS = [
|
|
|
235
235
|
// Re-run a store version's automatic assessment (task 1003796, ADR 0359). Never a
|
|
236
236
|
// hand-set score: the owner ruled a person may ask for a re-check, not change the number.
|
|
237
237
|
{ key: 'module.assessment.rerun', system: false, floor: 'metic', guards: 'POST /store/modules/:key/versions/:version/reassess' },
|
|
238
|
+
// Review the store's proposed sub-categories (task 1004355, ADR 0342 D3): approve,
|
|
239
|
+
// rename then approve, or merge into an existing one (a merge moves its modules).
|
|
240
|
+
{ key: 'module.subcategory.review', system: false, floor: 'metic', guards: 'GET /store/subcategories/queue, POST /store/subcategories/:id/approve, POST /store/subcategories/:id/merge' },
|
|
238
241
|
// Take a module out of the store (task 1003797, ADR 0338 D2). Stops new installs,
|
|
239
242
|
// versions and downloads; never reaches an instance that already holds it.
|
|
240
243
|
{ key: 'module.delist', system: false, floor: 'metic', guards: 'POST /store/modules/:key/delist, POST /store/modules/:key/versions/:version/release (a version the promotion gate held on tester — task 1003804)' },
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
-- government_034_module_subcategory_review.sql — grant the new
|
|
2
|
+
-- `module.subcategory.review` atom to Metic and Archon (task 1004355, ADR 0342 D3).
|
|
3
|
+
--
|
|
4
|
+
-- WHAT IT IS. An author proposes a store sub-category when publishing; a Metic+
|
|
5
|
+
-- person approves it (optionally renaming it) or merges it into an existing one.
|
|
6
|
+
-- Merging moves every module that named it. Approving is what makes a set of
|
|
7
|
+
-- modules "comparable" for the cap of ten, so it is Metic+, not every builder.
|
|
8
|
+
--
|
|
9
|
+
-- WHY THIS FILE EXISTS. RANK_SEED is derived from the catalog's floors, and the
|
|
10
|
+
-- drift guard (tests/government_seed.mjs) compares it against the union of the
|
|
11
|
+
-- run-once seed plus every later grant migration, per rank. A metic-floor key is
|
|
12
|
+
-- held by metic AND archon, so both are granted here.
|
|
13
|
+
--
|
|
14
|
+
-- Additive only: one new permission key granted to two ranks; nothing is revoked.
|
|
15
|
+
-- Approved by the owner on 2026-10-15 (with the sub-category table, core_280).
|
|
16
|
+
-- Idempotent (ON CONFLICT DO NOTHING); forward-safe (INSERT only).
|
|
17
|
+
--
|
|
18
|
+
-- The `SELECT '<rank>', unnest(ARRAY[…])` shape is load-bearing: the drift guard
|
|
19
|
+
-- scans for it literally.
|
|
20
|
+
|
|
21
|
+
BEGIN;
|
|
22
|
+
|
|
23
|
+
INSERT INTO government_rank_permissions (rank_key, permission_key)
|
|
24
|
+
SELECT 'metic', unnest(ARRAY[
|
|
25
|
+
'module.subcategory.review'
|
|
26
|
+
])
|
|
27
|
+
ON CONFLICT (rank_key, permission_key) DO NOTHING;
|
|
28
|
+
|
|
29
|
+
INSERT INTO government_rank_permissions (rank_key, permission_key)
|
|
30
|
+
SELECT 'archon', unnest(ARRAY[
|
|
31
|
+
'module.subcategory.review'
|
|
32
|
+
])
|
|
33
|
+
ON CONFLICT (rank_key, permission_key) DO NOTHING;
|
|
34
|
+
|
|
35
|
+
COMMIT;
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
|
|
54
54
|
const API = '/api/bongos';
|
|
55
55
|
const api = window.BongosClient.createClient({ baseUrl: '', credentials: 'same-origin', throwOnError: false });
|
|
56
|
-
const { escapeHtml } = window.OTB;
|
|
56
|
+
const { escapeHtml, sleep } = window.OTB;
|
|
57
57
|
const toast = (msg) => window.OTB.toast(msg);
|
|
58
58
|
const $ = (id) => document.getElementById(id);
|
|
59
59
|
|
|
@@ -511,7 +511,7 @@
|
|
|
511
511
|
// confirming, or a reload — and goes on repainting a step the owner has left. It
|
|
512
512
|
// also made every test that never converges sit through the full ~30s in real time.
|
|
513
513
|
for (let i = 0; i < POLL_TRIES; i++) {
|
|
514
|
-
await
|
|
514
|
+
await sleep(POLL_MS);
|
|
515
515
|
if (steps.get(p.instance_id) !== 'confirm') break; // the row was closed; stop.
|
|
516
516
|
try {
|
|
517
517
|
await refreshOne(p, { keepStep: true });
|
|
@@ -753,7 +753,7 @@
|
|
|
753
753
|
repaint();
|
|
754
754
|
let settled = false;
|
|
755
755
|
for (let i = 0; i < MOVE_TRIES; i++) {
|
|
756
|
-
await
|
|
756
|
+
await sleep(POLL_MS);
|
|
757
757
|
if (moving.get(p.instance_id) !== to) return; // superseded or the row is gone
|
|
758
758
|
let now;
|
|
759
759
|
try {
|
|
@@ -31,6 +31,10 @@
|
|
|
31
31
|
return String(s ?? '').replace(/[&<>"']/g, (c) => ESCAPES[c]);
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
+
// `await sleep(ms)` — THE browser "wait N milliseconds" (task 1004893). The server
|
|
35
|
+
// twin is src/sleep.js; fitness fails on a third hand-rolled copy.
|
|
36
|
+
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
37
|
+
|
|
34
38
|
// querySelector shorthand. (7 copies; pair.js's single-arg form is a subset.)
|
|
35
39
|
const $ = (sel, root = document) => root.querySelector(sel);
|
|
36
40
|
|
|
@@ -466,7 +470,7 @@
|
|
|
466
470
|
}
|
|
467
471
|
|
|
468
472
|
const OTB = {
|
|
469
|
-
escapeHtml, $, fmtNum, num, fmtInt, fmtCompact, fmtDate, rankLabel, toast, moduleOn, disciplines,
|
|
473
|
+
escapeHtml, sleep, $, fmtNum, num, fmtInt, fmtCompact, fmtDate, rankLabel, toast, moduleOn, disciplines,
|
|
470
474
|
// task 1003936 — ONE word for the role axis, all six surfaces
|
|
471
475
|
roleAxisLabel, roleLabel, roleWord, roleOptions, roleIsUnset, ROLE_UNSET,
|
|
472
476
|
fillKindFilter, kindLabel, kindIsUnset, KIND_UNSET, // task 1003453 — one Kind filler, all three surfaces
|
|
@@ -331,7 +331,7 @@
|
|
|
331
331
|
if (!said) return null;
|
|
332
332
|
toast(said);
|
|
333
333
|
// Give the sentence time to be read before the reload takes it away.
|
|
334
|
-
return
|
|
334
|
+
return window.OTB.sleep(3500);
|
|
335
335
|
}).then(function () { window.location.reload(); }));
|
|
336
336
|
} else if (t.hasAttribute('data-genesis-close')) {
|
|
337
337
|
// The solo fast-track (spec D4): when the founder's one yes decides the sitting
|
|
@@ -39,7 +39,7 @@ const fs = require('node:fs');
|
|
|
39
39
|
const os = require('node:os');
|
|
40
40
|
const path = require('node:path');
|
|
41
41
|
const { promisify } = require('node:util');
|
|
42
|
-
const { repoInfo, userAgent } = require('../../src/module-api');
|
|
42
|
+
const { repoInfo, userAgent, sleep } = require('../../src/module-api'); // sleep: the one shared sleep (task 1004893)
|
|
43
43
|
const { readCheckRollup, UNIT_REPORT_CONTEXT, isRedCheck } = require('./check-rollup'); // isRedCheck: only a FAILED check is red, never a pending one (task 1004666)
|
|
44
44
|
const { loadRepoInfo } = repoInfo;
|
|
45
45
|
|
|
@@ -1363,7 +1363,6 @@ async function getPullRequestFiles({ number }, deps = {}) {
|
|
|
1363
1363
|
// recheckPullRequest header for WHY this delay exists; overridable via deps.reopenDelayMs
|
|
1364
1364
|
// so tests run instantly (and an operator can tune it without a code change).
|
|
1365
1365
|
const RECHECK_REOPEN_DELAY_MS = 4000;
|
|
1366
|
-
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
1367
1366
|
|
|
1368
1367
|
// recheckPullRequest — re-trigger the gate-review check after an owner approval was
|
|
1369
1368
|
// recorded. WHY close+reopen: setting a commit status does NOT fire a `pull_request`
|
|
@@ -25,6 +25,7 @@ const path = require('node:path');
|
|
|
25
25
|
const { buildPreviewEnv, PREVIEW_DB } = require('./env');
|
|
26
26
|
const cmds = require('./commands');
|
|
27
27
|
const { createChildLog, redact, secretValues } = require('./childlog');
|
|
28
|
+
const { sleep: sharedSleep } = require('../../../src/module-api'); // the one shared sleep (task 1004893)
|
|
28
29
|
|
|
29
30
|
const IDLE_MS = 20 * 60 * 1000;
|
|
30
31
|
const DEFAULT_PORT = 3190;
|
|
@@ -105,7 +106,7 @@ function copyInstance({ fsImpl, from, to }) {
|
|
|
105
106
|
function createSupervisor({
|
|
106
107
|
run, spawn, probe, liveDb, cacheRoot, instanceRoot = null,
|
|
107
108
|
env = process.env, port = DEFAULT_PORT, killWaitMs = KILL_WAIT_MS,
|
|
108
|
-
now = Date.now, sleep =
|
|
109
|
+
now = Date.now, sleep = sharedSleep,
|
|
109
110
|
fsImpl = fs, tmpdir = os.tmpdir(), idleMs = IDLE_MS,
|
|
110
111
|
log = { info() {}, warn() {}, error() {} },
|
|
111
112
|
copy = copyInstance,
|
|
@@ -36,6 +36,7 @@ const net = require('node:net');
|
|
|
36
36
|
// prove it belongs to the project it is filed under; the ship-link path in
|
|
37
37
|
// platform-identity.js reads the identical rule from the identical place.
|
|
38
38
|
const { urlWithinOrigin } = require('./origin-containment');
|
|
39
|
+
const { sleep } = require('../../src/module-api'); // the one shared sleep (task 1004893)
|
|
39
40
|
|
|
40
41
|
const TTL_MS = 10 * 60 * 1000; // owner's choice, 2026-08-13
|
|
41
42
|
const FETCH_TIMEOUT_MS = 2500; // per request
|
|
@@ -322,7 +323,7 @@ async function getProjectStats(origins = []) {
|
|
|
322
323
|
if (cold.length) {
|
|
323
324
|
await Promise.race([
|
|
324
325
|
Promise.allSettled(cold.map((o) => refresh(o))),
|
|
325
|
-
|
|
326
|
+
sleep(COLD_DEADLINE_MS),
|
|
326
327
|
]);
|
|
327
328
|
}
|
|
328
329
|
|
package/package-lock.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bongos/core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.23.2",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@bongos/core",
|
|
9
|
-
"version": "1.
|
|
9
|
+
"version": "1.23.2",
|
|
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.
|
|
3
|
+
"version": "1.23.2",
|
|
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
|
@@ -10382,5 +10382,18 @@
|
|
|
10382
10382
|
"id": "1004891",
|
|
10383
10383
|
"text": "Cleaned up 220 internal code hooks nothing else used, cutting the project's dead-code count from 439 to 213."
|
|
10384
10384
|
}
|
|
10385
|
+
],
|
|
10386
|
+
"1.23.0": [],
|
|
10387
|
+
"1.23.1": [
|
|
10388
|
+
{
|
|
10389
|
+
"id": "1004893",
|
|
10390
|
+
"text": "The ~30 copy-pasted \"wait a moment\" helpers across the codebase now all use one shared helper (one for the browser, one for the server), and a fitness check stops new copies from creeping back in. Nothing users see changes."
|
|
10391
|
+
}
|
|
10392
|
+
],
|
|
10393
|
+
"1.23.2": [
|
|
10394
|
+
{
|
|
10395
|
+
"id": "1004355",
|
|
10396
|
+
"text": "Module authors can now propose a new store sub-category when they publish, and Metic+ reviewers approve, rename or merge it, with look-alike names shown side by side so duplicates don't split the rankings."
|
|
10397
|
+
}
|
|
10385
10398
|
]
|
|
10386
10399
|
}
|
|
@@ -54,6 +54,7 @@ const { matchProtected } = require('../../src/bongos/permission-path-check');
|
|
|
54
54
|
const { resolveEnv, envPrefix, LEGACY_ENV_PREFIXES } = require('../../src/instance-config');
|
|
55
55
|
const cadence = require('../../modules/autonomy/cadence.js');
|
|
56
56
|
const configIdle = require('../../modules/autonomy/config-idle.js');
|
|
57
|
+
const { sleep: sharedSleep } = require('../../src/sleep'); // the one shared sleep (task 1004893)
|
|
57
58
|
|
|
58
59
|
const REPO_ROOT = path.resolve(__dirname, '..', '..');
|
|
59
60
|
|
|
@@ -1149,7 +1150,7 @@ async function runFetchHead(deps = {}) {
|
|
|
1149
1150
|
async function waitOrJump(waitS, deps = {}, cfg = {}) {
|
|
1150
1151
|
if (!(waitS > 0)) return { waited: 0, jumped: false };
|
|
1151
1152
|
const pollEveryS = cfg.pollEveryS ?? 60;
|
|
1152
|
-
const sleep = deps.sleep ||
|
|
1153
|
+
const sleep = deps.sleep || sharedSleep;
|
|
1153
1154
|
const poll = deps.pollSignals || pollSignals;
|
|
1154
1155
|
|
|
1155
1156
|
const before = await poll(deps);
|