@bongos/core 1.24.29 → 1.24.30
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 +78 -38
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +4 -0
- package/clients/bongos-client/index.cjs +4 -0
- package/clients/bongos-client/index.d.ts +4 -0
- package/clients/bongos-client/index.mjs +4 -0
- package/docs/api/openapi.json +36 -1
- package/docs/api-reference.md +7 -1
- package/docs/copy-inventory.md +86 -89
- package/docs/copy-registry.json +137 -175
- package/docs/module-api-changelog.md +2 -0
- package/docs/page-inventory.json +3 -2
- package/docs/page-readings.json +89 -107
- package/modules/government/db.js +29 -0
- package/modules/government/docket.js +61 -4
- package/modules/government/routes/government.js +2 -0
- package/modules/hall-ui/public/builders.js +3 -79
- package/modules/hall-ui/public/hall-render.js +6 -81
- package/modules/hall-ui/public/hall-widgets.js +4 -45
- package/modules/hall-ui/public/home-city-draw.js +275 -0
- package/modules/hall-ui/public/home-city.css +66 -0
- package/modules/hall-ui/public/home-city.js +223 -0
- package/modules/hall-ui/public/index.html +5 -6
- package/modules/hall-ui/public/index.states.json +73 -8
- package/modules/hall-ui/records/home-city.md +66 -0
- package/modules/lifecycle/home-city.js +340 -0
- package/modules/lifecycle/module.json +1 -0
- package/modules/lifecycle/routes/home-city.js +29 -0
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +10 -0
- package/src/module-api.js +1 -1
- package/tests/claim_from_task_and_home.mjs +8 -43
- package/tests/hall_board_world.mjs +10 -12
- package/tests/hall_home_ships_bounded.mjs +4 -3
- package/tests/home_bounded_reads.mjs +16 -31
- package/tests/home_city.mjs +385 -0
- package/tests/home_city_widget.mjs +120 -0
- package/tests/leaderboard_roles.mjs +3 -2
|
@@ -3314,5 +3314,7 @@ is load-bearing: the script throws rather than guess if it is missing, and
|
|
|
3314
3314
|
landed since 1.24.27 with no explicit bump. run 41744557940. (task 1002620)
|
|
3315
3315
|
1.24.29 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
3316
3316
|
landed since 1.24.28 with no explicit bump. run 41749478213. (task 1002620)
|
|
3317
|
+
1.24.30 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
3318
|
+
landed since 1.24.29 with no explicit bump. run 41816394820. (task 1002620)
|
|
3317
3319
|
---------------------------------------------------------------------------
|
|
3318
3320
|
```
|
package/docs/page-inventory.json
CHANGED
|
@@ -641,6 +641,7 @@
|
|
|
641
641
|
"modules/hall-ui/public/style.css",
|
|
642
642
|
"modules/hall-ui/public/welcome-boot.css",
|
|
643
643
|
"modules/hall-ui/public/hall-ask.css",
|
|
644
|
+
"modules/hall-ui/public/home-city.css",
|
|
644
645
|
"modules/hall-ui/public/dom-utils.js",
|
|
645
646
|
"modules/hall-ui/public/task-detail.js",
|
|
646
647
|
"modules/hall-ui/public/brand-apply.js",
|
|
@@ -654,13 +655,13 @@
|
|
|
654
655
|
"modules/hall-ui/public/founding-mark.js",
|
|
655
656
|
"modules/hall-ui/public/hall-widgets.js",
|
|
656
657
|
"modules/hall-ui/public/genesis-home.js",
|
|
657
|
-
"modules/hall-ui/public/
|
|
658
|
+
"modules/hall-ui/public/home-city-draw.js",
|
|
659
|
+
"modules/hall-ui/public/home-city.js",
|
|
658
660
|
"modules/hall-ui/public/hall-ask.js",
|
|
659
661
|
"modules/hall-ui/public/blockers-lib.js",
|
|
660
662
|
"modules/hall-ui/public/goal-inbox.js",
|
|
661
663
|
"modules/hall-ui/public/hall-render.js",
|
|
662
664
|
"modules/hall-ui/public/profile-nudge.js",
|
|
663
|
-
"modules/hall-ui/public/claim-action.js",
|
|
664
665
|
"modules/hall-ui/public/builders.js",
|
|
665
666
|
"modules/hall-ui/public/vote-control.js",
|
|
666
667
|
"modules/hall-ui/public/copy-on-click.js"
|
package/docs/page-readings.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"adr": "0341 D3",
|
|
6
6
|
"reread": "node scripts/bongos/page-reader.js --stale",
|
|
7
7
|
"how": ["Generated by node scripts/bongos/page-reader.js (BV2.TW04, task 1004315; ADR 0341 D3). Do not hand-edit.","One entry per page of docs/page-inventory.json. Lines are in page order: the default state first, and a line only another state shows sits where that state shows it, with its state named.","placement: placed = a docs/copy-registry.json row renders it (file, line, string_id); shared = shell text every page of the surface carries (top bar, sidebar, footer), with its row when the registry has one; unplaced = the registry cannot place it (a rewrite becomes an engineer task, ADR 0341 D4).","text keeps {…} where the registry row has a hole, or where a value the page read from its API was filled in. A string that is only such data is counted under omitted.data, not listed.","reading_hash is over the non-shared lines (key, section, text); files_hash is over the page's inventory files. --check compares files_hash only and never opens a browser.","Rendered through the hall-preview harness (hall) and the ui-design kit stub (landing, status), at 1280x800 with the clock pinned, so a reading is the fixture world's page."],
|
|
8
|
-
"counts": {"pages":52,"lines":
|
|
8
|
+
"counts": {"pages":52,"lines":5672,"placed":1755,"shared":500,"unplaced":3417,"omitted_data":3839},
|
|
9
9
|
"pages": [
|
|
10
10
|
{
|
|
11
11
|
"id": "builders:ai-studio",
|
|
@@ -1553,10 +1553,10 @@
|
|
|
1553
1553
|
"surface": "builders",
|
|
1554
1554
|
"title": "Builders' Hall",
|
|
1555
1555
|
"states_read": ["home","standing","standing-karma","out","founding","genesis","decide","demo"],
|
|
1556
|
-
"files_hash": "
|
|
1557
|
-
"reading_hash": "
|
|
1558
|
-
"counts": {"lines":
|
|
1559
|
-
"omitted": {"data":
|
|
1556
|
+
"files_hash": "8be65d46c21e667b",
|
|
1557
|
+
"reading_hash": "3a91ae47851292f2",
|
|
1558
|
+
"counts": {"lines":96,"placed":48,"shared":11,"unplaced":37},
|
|
1559
|
+
"omitted": {"data":90},
|
|
1560
1560
|
"notes": ["founding: an action failed (page.focus: Timeout 6000ms exceeded.); read as it stood"],
|
|
1561
1561
|
"lines": [
|
|
1562
1562
|
{"key":"L0001","section":"skip link","text":"Skip to content","placement":"shared","file":"modules/hall-ui/public/shell.js","line":833,"string_id":"87cee78ca134"},
|
|
@@ -1571,108 +1571,90 @@
|
|
|
1571
1571
|
{"key":"L0010","section":"top bar","text":"Ideating","placement":"shared"},
|
|
1572
1572
|
{"key":"L0011","section":"Good morning, {…}","text":"Good morning, {…}","placement":"unplaced","occurrences":2},
|
|
1573
1573
|
{"key":"L0012","section":"Good morning, {…}","text":"Work","placement":"unplaced","state":"standing"},
|
|
1574
|
-
{"key":"L0013","section":"Good morning, {…}","text":"
|
|
1575
|
-
{"key":"L0014","section":"Good morning, {…}","text":"
|
|
1576
|
-
{"key":"L0015","section":"Good morning, {…}","text":"
|
|
1577
|
-
{"key":"L0016","section":"Good morning, {…}","text":"
|
|
1578
|
-
{"key":"L0017","section":"Good morning, {…}","text":"
|
|
1579
|
-
{"key":"L0018","section":"Good morning, {…}","text":"
|
|
1580
|
-
{"key":"L0019","section":"Good morning, {…}","text":"
|
|
1581
|
-
{"key":"L0020","section":"Good morning, {…}","text":"
|
|
1582
|
-
{"key":"L0021","section":"
|
|
1583
|
-
{"key":"L0022","section":"
|
|
1584
|
-
{"key":"L0023","section":"
|
|
1585
|
-
{"key":"L0024","section":"
|
|
1586
|
-
{"key":"L0025","section":"
|
|
1587
|
-
{"key":"L0026","section":"
|
|
1588
|
-
{"key":"L0027","section":"
|
|
1589
|
-
{"key":"L0028","section":"
|
|
1590
|
-
{"key":"L0029","section":"
|
|
1591
|
-
{"key":"L0030","section":"
|
|
1592
|
-
{"key":"L0031","section":"
|
|
1593
|
-
{"key":"L0032","section":"
|
|
1594
|
-
{"key":"L0033","section":"Your work","text":"
|
|
1595
|
-
{"key":"L0034","section":"Your work","text":"
|
|
1596
|
-
{"key":"L0035","section":"Your work","text":"
|
|
1597
|
-
{"key":"L0036","section":"Your work","text":"
|
|
1598
|
-
{"key":"L0037","section":"Your work","text":"
|
|
1599
|
-
{"key":"L0038","section":"Your work","text":"
|
|
1600
|
-
{"key":"L0039","section":"Your work","text":"
|
|
1601
|
-
{"key":"L0040","section":"Your work","text":"
|
|
1602
|
-
{"key":"L0041","section":"Your work","text":"
|
|
1603
|
-
{"key":"L0042","section":"Your work","text":"
|
|
1604
|
-
{"key":"L0043","section":"Your work","text":"
|
|
1605
|
-
{"key":"L0044","section":"
|
|
1606
|
-
{"key":"L0045","section":"
|
|
1607
|
-
{"key":"L0046","section":"
|
|
1608
|
-
{"key":"L0047","section":"
|
|
1609
|
-
{"key":"L0048","section":"
|
|
1610
|
-
{"key":"L0049","section":"
|
|
1611
|
-
{"key":"L0050","section":"
|
|
1612
|
-
{"key":"L0051","section":"
|
|
1613
|
-
{"key":"L0052","section":"
|
|
1614
|
-
{"key":"L0053","section":"
|
|
1615
|
-
{"key":"L0054","section":"
|
|
1616
|
-
{"key":"L0055","section":"
|
|
1617
|
-
{"key":"L0056","section":"
|
|
1618
|
-
{"key":"L0057","section":"
|
|
1619
|
-
{"key":"L0058","section":"
|
|
1620
|
-
{"key":"L0059","section":"
|
|
1621
|
-
{"key":"L0060","section":"
|
|
1622
|
-
{"key":"L0061","section":"
|
|
1623
|
-
{"key":"L0062","section":"
|
|
1624
|
-
{"key":"L0063","section":"
|
|
1625
|
-
{"key":"L0064","section":"
|
|
1626
|
-
{"key":"L0065","section":"
|
|
1627
|
-
{"key":"L0066","section":"
|
|
1628
|
-
{"key":"L0067","section":"
|
|
1629
|
-
{"key":"L0068","section":"
|
|
1630
|
-
{"key":"L0069","section":"
|
|
1631
|
-
{"key":"L0070","section":"
|
|
1632
|
-
{"key":"L0071","section":"
|
|
1633
|
-
{"key":"L0072","section":"
|
|
1634
|
-
{"key":"L0073","section":"
|
|
1635
|
-
{"key":"L0074","section":"
|
|
1636
|
-
{"key":"L0075","section":"
|
|
1637
|
-
{"key":"L0076","section":"
|
|
1638
|
-
{"key":"L0077","section":"
|
|
1639
|
-
{"key":"L0078","section":"
|
|
1640
|
-
{"key":"L0079","section":"
|
|
1641
|
-
{"key":"L0080","section":"
|
|
1642
|
-
{"key":"L0081","section":"
|
|
1643
|
-
{"key":"L0082","section":"
|
|
1644
|
-
{"key":"L0083","section":"
|
|
1645
|
-
{"key":"L0084","section":"
|
|
1646
|
-
{"key":"L0085","section":"
|
|
1647
|
-
{"key":"L0086","section":"
|
|
1648
|
-
{"key":"L0087","section":"
|
|
1649
|
-
{"key":"L0088","section":"
|
|
1650
|
-
{"key":"L0089","section":"
|
|
1651
|
-
{"key":"L0090","section":"
|
|
1652
|
-
{"key":"L0091","section":"
|
|
1653
|
-
{"key":"L0092","section":"
|
|
1654
|
-
{"key":"L0093","section":"
|
|
1655
|
-
{"key":"L0094","section":"
|
|
1656
|
-
{"key":"L0095","section":"
|
|
1657
|
-
{"key":"L0096","section":"
|
|
1658
|
-
{"key":"L0097","section":"Next up — ready to claim","text":"#1004383 · 38 {…} est.","placement":"unplaced"},
|
|
1659
|
-
{"key":"L0098","section":"Next up — ready to claim","text":"#1004546 · 38 {…} est.","placement":"unplaced"},
|
|
1660
|
-
{"key":"L0099","section":"Next up — ready to claim","text":"See all 150 {…} work →","placement":"unplaced"},
|
|
1661
|
-
{"key":"L0100","section":"Recently shipped","text":"Recently shipped","placement":"placed","file":"modules/hall-ui/public/hall-widgets.js","line":115,"string_id":"0b2d1327608f"},
|
|
1662
|
-
{"key":"L0101","section":"Recently shipped","text":"Work","placement":"unplaced"},
|
|
1663
|
-
{"key":"L0102","section":"Recently shipped","text":"Credits","placement":"unplaced"},
|
|
1664
|
-
{"key":"L0103","section":"Recently shipped","text":"Shipped","placement":"placed","file":"modules/hall-ui/public/task.js","line":718,"string_id":"0c0a50ba1666"},
|
|
1665
|
-
{"key":"L0104","section":"Recently shipped","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","occurrences":2},
|
|
1666
|
-
{"key":"L0105","section":"Recently shipped","text":"All your work →","placement":"placed","file":"modules/hall-ui/public/hall-widgets.js","line":118,"string_id":"b38c01691857"},
|
|
1667
|
-
{"key":"L0106","section":"Recently shipped","text":"core 1.24.27","placement":"unplaced"},
|
|
1668
|
-
{"key":"L0107","section":"Recently shipped","text":"Skip","placement":"unplaced"},
|
|
1669
|
-
{"key":"L0108","section":"Recently shipped","text":"Built on","placement":"placed","file":"modules/hall-ui/public/welcome-boot.js","line":179,"string_id":"fef59346ffee"},
|
|
1670
|
-
{"key":"L0109","section":"Recently shipped","text":"cloudbongos.com","placement":"unplaced"},
|
|
1671
|
-
{"key":"L0110","section":"Good morning, {…}","text":"Where do you want to start the day?","placement":"placed","file":"modules/hall-ui/public/welcome-boot.js","line":184,"string_id":"0ec8d133f878","state":"founding"},
|
|
1672
|
-
{"key":"L0111","section":"Good morning, {…}","text":"Start with your role","placement":"placed","file":"modules/hall-ui/public/welcome-boot.js","line":186,"string_id":"58cef7963b6c","state":"founding"},
|
|
1673
|
-
{"key":"L0112","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":186,"string_id":"100e4665514d","state":"founding"},
|
|
1674
|
-
{"key":"L0113","section":"Good morning, {…}","text":"Your home page","placement":"placed","file":"modules/hall-ui/public/welcome-boot.js","line":187,"string_id":"2e6866532113","state":"founding"},
|
|
1675
|
-
{"key":"L0114","section":"Good morning, {…}","text":"Your work, what needs you, and what shipped.","placement":"placed","file":"modules/hall-ui/public/welcome-boot.js","line":187,"string_id":"e8d92c773db0","state":"founding"}
|
|
1574
|
+
{"key":"L0013","section":"Good morning, {…}","text":"Karma","placement":"unplaced","state":"standing"},
|
|
1575
|
+
{"key":"L0014","section":"Good morning, {…}","text":"Achievements","placement":"unplaced","state":"standing"},
|
|
1576
|
+
{"key":"L0015","section":"Good morning, {…}","text":"Member since {…}","placement":"placed","file":"modules/hall-ui/public/hall-render.js","line":565,"string_id":"df335a1224ae","state":"standing"},
|
|
1577
|
+
{"key":"L0016","section":"Good morning, {…}","text":"+11 karma in 30d","placement":"unplaced","state":"standing"},
|
|
1578
|
+
{"key":"L0017","section":"Good morning, {…}","text":"Preferred work:","placement":"placed","file":"modules/hall-ui/public/hall-render.js","line":577,"string_id":"ed8edd684547","state":"standing"},
|
|
1579
|
+
{"key":"L0018","section":"Good morning, {…}","text":"{…}, {…}, {…}, ui","placement":"unplaced","state":"standing"},
|
|
1580
|
+
{"key":"L0019","section":"Good morning, {…}","text":"Change in Settings →","placement":"placed","file":"modules/hall-ui/public/hall-render.js","line":577,"string_id":"0279db21e29a","state":"standing"},
|
|
1581
|
+
{"key":"L0020","section":"Good morning, {…}","text":"karma","placement":"unplaced","state":"standing"},
|
|
1582
|
+
{"key":"L0021","section":"Your work","text":"Your work","placement":"placed","file":"modules/hall-ui/public/hall-widgets.js","line":126,"string_id":"60550f388cc9","state":"standing"},
|
|
1583
|
+
{"key":"L0022","section":"Your work","text":"Window","placement":"unplaced","state":"standing"},
|
|
1584
|
+
{"key":"L0023","section":"Your work","text":"Last 7 days","placement":"placed","file":"modules/hall-ui/public/hall-widgets.js","line":129,"string_id":"9be8b839eff8","state":"standing"},
|
|
1585
|
+
{"key":"L0024","section":"Your work","text":"Last 30 days","placement":"placed","file":"modules/hall-ui/public/hall-widgets.js","line":129,"string_id":"35a15eb0a117","state":"standing"},
|
|
1586
|
+
{"key":"L0025","section":"Your work","text":"Last 90 days","placement":"placed","file":"modules/hall-ui/public/hall-widgets.js","line":130,"string_id":"59f0bc78a28f","state":"standing"},
|
|
1587
|
+
{"key":"L0026","section":"Your work","text":"All time","placement":"placed","file":"modules/hall-ui/public/hall-widgets.js","line":130,"string_id":"627c683a5e5d","state":"standing"},
|
|
1588
|
+
{"key":"L0027","section":"Your work","text":"Version","placement":"unplaced","state":"standing"},
|
|
1589
|
+
{"key":"L0028","section":"Your work","text":"— any —","placement":"placed","file":"modules/hall-ui/public/hall-widgets.js","line":132,"string_id":"729d4ce22b99","state":"standing"},
|
|
1590
|
+
{"key":"L0029","section":"Your work","text":"Sort","placement":"unplaced","state":"standing"},
|
|
1591
|
+
{"key":"L0030","section":"Your work","text":"most recent first","placement":"placed","file":"modules/hall-ui/public/hall-widgets.js","line":134,"string_id":"70c234985d42","state":"standing"},
|
|
1592
|
+
{"key":"L0031","section":"Your work","text":"oldest first","placement":"placed","file":"modules/hall-ui/public/hall-widgets.js","line":134,"string_id":"759c12b5f983","state":"standing"},
|
|
1593
|
+
{"key":"L0032","section":"Your work","text":"highest credits","placement":"placed","file":"modules/hall-ui/public/hall-widgets.js","line":135,"string_id":"55d673a5f0ec","state":"standing"},
|
|
1594
|
+
{"key":"L0033","section":"Your work","text":"lowest credits","placement":"placed","file":"modules/hall-ui/public/hall-widgets.js","line":136,"string_id":"754bdec368ed","state":"standing"},
|
|
1595
|
+
{"key":"L0034","section":"Your work","text":"30 works {…}","placement":"unplaced","state":"standing"},
|
|
1596
|
+
{"key":"L0035","section":"Your work","text":"Work","placement":"unplaced","state":"standing"},
|
|
1597
|
+
{"key":"L0036","section":"Your work","text":"Credits","placement":"unplaced","state":"standing"},
|
|
1598
|
+
{"key":"L0037","section":"Your work","text":"Shipped","placement":"placed","file":"modules/hall-ui/public/task.js","line":718,"string_id":"0c0a50ba1666","state":"standing"},
|
|
1599
|
+
{"key":"L0038","section":"Your work","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","state":"standing","occurrences":10},
|
|
1600
|
+
{"key":"L0039","section":"Your work","text":"{…} of {…}","placement":"placed","file":"modules/hall-ui/public/sky-panel.js","line":120,"string_id":"73c1372b43d9","state":"standing","occurrences":2},
|
|
1601
|
+
{"key":"L0040","section":"Your work","text":"Per page","placement":"placed","file":"modules/hall-ui/public/hall-kit.js","line":72,"string_id":"4a46b478edaf","state":"standing"},
|
|
1602
|
+
{"key":"L0041","section":"Your work","text":"‹ Prev","placement":"placed","file":"modules/hall-ui/public/hall-kit.js","line":72,"string_id":"de8fa5223aee","state":"standing"},
|
|
1603
|
+
{"key":"L0042","section":"Your work","text":"Page {…} of {…}","placement":"placed","file":"modules/hall-ui/public/hall-kit.js","line":110,"string_id":"15a49bf15007","state":"standing"},
|
|
1604
|
+
{"key":"L0043","section":"Your work","text":"Next ›","placement":"placed","file":"modules/hall-ui/public/hall-kit.js","line":72,"string_id":"f52ba261d930","state":"standing"},
|
|
1605
|
+
{"key":"L0044","section":"Reviews","text":"Reviews","placement":"unplaced","state":"standing"},
|
|
1606
|
+
{"key":"L0045","section":"Reviews","text":"Work","placement":"unplaced","state":"standing"},
|
|
1607
|
+
{"key":"L0046","section":"Reviews","text":"Score","placement":"unplaced","state":"standing"},
|
|
1608
|
+
{"key":"L0047","section":"Reviews","text":"Verdict","placement":"unplaced","state":"standing"},
|
|
1609
|
+
{"key":"L0048","section":"Reviews","text":"Reviewed","placement":"unplaced","state":"standing"},
|
|
1610
|
+
{"key":"L0049","section":"Reviews","text":"passed","placement":"placed","file":"modules/hall-ui/public/government.js","line":671,"string_id":"da5368d10f85","state":"standing","occurrences":5},
|
|
1611
|
+
{"key":"L0050","section":"Reviews","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","state":"standing","occurrences":2},
|
|
1612
|
+
{"key":"L0051","section":"Reviews","text":"Last 14 days: {…} / 10 average across {…} graded work{…} ({…} passed).","placement":"placed","file":"modules/hall-ui/public/builders.js","line":569,"string_id":"81f62e066dbf","state":"standing"},
|
|
1613
|
+
{"key":"L0052","section":"Karma","text":"Karma","placement":"unplaced","state":"standing"},
|
|
1614
|
+
{"key":"L0053","section":"Karma","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","state":"standing"},
|
|
1615
|
+
{"key":"L0054","section":"Karma","text":"When","placement":"unplaced","state":"standing"},
|
|
1616
|
+
{"key":"L0055","section":"Karma","text":"Delta","placement":"unplaced","state":"standing"},
|
|
1617
|
+
{"key":"L0056","section":"Karma","text":"Reason","placement":"unplaced","state":"standing"},
|
|
1618
|
+
{"key":"L0057","section":"Karma","text":"Granted by","placement":"placed","file":"modules/hall-ui/public/hall-widgets.js","line":162,"string_id":"721fe281f993","state":"standing"},
|
|
1619
|
+
{"key":"L0058","section":"Karma","text":"— all builders —","placement":"placed","file":"modules/hall-ui/public/builders.js","line":695,"string_id":"a6ae9cbdee30","state":"standing","occurrences":10},
|
|
1620
|
+
{"key":"L0059","section":"Peer recognition","text":"Peer recognition","placement":"placed","file":"modules/hall-ui/public/hall-widgets.js","line":168,"string_id":"54fa47e421a5","state":"standing"},
|
|
1621
|
+
{"key":"L0060","section":"Peer recognition","text":"Vote on others’ finished work. A vote counts toward their karma after a week.","placement":"placed","file":"modules/hall-ui/public/hall-widgets.js","line":169,"string_id":"2a982c1af5df","state":"standing"},
|
|
1622
|
+
{"key":"L0061","section":"Peer recognition","text":"Work","placement":"unplaced","state":"standing"},
|
|
1623
|
+
{"key":"L0062","section":"Peer recognition","text":"By","placement":"unplaced","state":"standing"},
|
|
1624
|
+
{"key":"L0063","section":"Peer recognition","text":"Votes","placement":"unplaced","state":"standing"},
|
|
1625
|
+
{"key":"L0064","section":"Peer recognition","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","state":"standing","occurrences":6},
|
|
1626
|
+
{"key":"L0065","section":"Peer recognition","text":"Goal {…}","placement":"placed","file":"modules/hall-ui/public/gate.js","line":194,"string_id":"ec88b946ad16","state":"standing"},
|
|
1627
|
+
{"key":"L0066","section":"Peer recognition","text":"{…} of {…}","placement":"placed","file":"modules/hall-ui/public/sky-panel.js","line":120,"string_id":"73c1372b43d9","state":"standing"},
|
|
1628
|
+
{"key":"L0067","section":"Peer recognition","text":"Per page","placement":"placed","file":"modules/hall-ui/public/hall-kit.js","line":72,"string_id":"4a46b478edaf","state":"standing"},
|
|
1629
|
+
{"key":"L0068","section":"Peer recognition","text":"‹ Prev","placement":"placed","file":"modules/hall-ui/public/hall-kit.js","line":72,"string_id":"de8fa5223aee","state":"standing"},
|
|
1630
|
+
{"key":"L0069","section":"Peer recognition","text":"Page {…} of {…}","placement":"placed","file":"modules/hall-ui/public/hall-kit.js","line":110,"string_id":"15a49bf15007","state":"standing"},
|
|
1631
|
+
{"key":"L0070","section":"Peer recognition","text":"Next ›","placement":"placed","file":"modules/hall-ui/public/hall-kit.js","line":72,"string_id":"f52ba261d930","state":"standing"},
|
|
1632
|
+
{"key":"L0071","section":"Achievements","text":"Achievements","placement":"unplaced","state":"standing"},
|
|
1633
|
+
{"key":"L0072","section":"Achievements","text":"Earned ones are lit; the rest show what is left.","placement":"placed","file":"modules/hall-ui/public/hall-widgets.js","line":197,"string_id":"f025c58dbf0a","state":"standing"},
|
|
1634
|
+
{"key":"L0073","section":"Achievements","text":"Won {…}","placement":"placed","file":"modules/hall-ui/public/builders.js","line":478,"string_id":"c5fd76a9e03d","state":"standing","occurrences":10},
|
|
1635
|
+
{"key":"L0074","section":"Achievements","text":"{…} of {…}","placement":"placed","file":"modules/hall-ui/public/sky-panel.js","line":120,"string_id":"73c1372b43d9","state":"standing"},
|
|
1636
|
+
{"key":"L0075","section":"footer","text":"Sign out","placement":"shared","file":"modules/hall-ui/public/shell.js","line":520,"string_id":"1883ad7f07fc","state":"standing","occurrences":2},
|
|
1637
|
+
{"key":"L0076","section":"Achievements","text":"core 1.24.29","placement":"unplaced","state":"standing"},
|
|
1638
|
+
{"key":"L0077","section":"Achievements","text":"Skip","placement":"unplaced","state":"standing"},
|
|
1639
|
+
{"key":"L0078","section":"Achievements","text":"Built on","placement":"placed","file":"modules/hall-ui/public/welcome-boot.js","line":179,"string_id":"fef59346ffee","state":"standing"},
|
|
1640
|
+
{"key":"L0079","section":"Achievements","text":"cloudbongos.com","placement":"unplaced","state":"standing"},
|
|
1641
|
+
{"key":"L0080","section":"Good morning, {…}","text":"B","placement":"unplaced","occurrences":9},
|
|
1642
|
+
{"key":"L0081","section":"Good morning, {…}","text":"Aug","placement":"unplaced"},
|
|
1643
|
+
{"key":"L0082","section":"Good morning, {…}","text":"Oct","placement":"unplaced"},
|
|
1644
|
+
{"key":"L0083","section":"Good morning, {…}","text":"Now","placement":"unplaced"},
|
|
1645
|
+
{"key":"L0084","section":"Needs your attention13","text":"Needs your attention","placement":"placed","file":"modules/hall-ui/public/goal-inbox.js","line":580,"string_id":"7def635421ea"},
|
|
1646
|
+
{"key":"L0085","section":"Needs your attention13","text":"From the system","placement":"placed","file":"modules/hall-ui/public/hall-render.js","line":706,"string_id":"d32c5e058d1e"},
|
|
1647
|
+
{"key":"L0086","section":"Needs your attention13","text":"Ideas awaiting triage","placement":"placed","file":"modules/hall-ui/public/builders.js","line":841,"string_id":"e181637c5a5e"},
|
|
1648
|
+
{"key":"L0087","section":"Needs your attention13","text":"Requires project {…} fix","placement":"unplaced"},
|
|
1649
|
+
{"key":"L0088","section":"Needs your attention13","text":"core 1.24.29","placement":"unplaced"},
|
|
1650
|
+
{"key":"L0089","section":"Needs your attention13","text":"Skip","placement":"unplaced"},
|
|
1651
|
+
{"key":"L0090","section":"Needs your attention13","text":"Built on","placement":"placed","file":"modules/hall-ui/public/welcome-boot.js","line":179,"string_id":"fef59346ffee"},
|
|
1652
|
+
{"key":"L0091","section":"Needs your attention13","text":"cloudbongos.com","placement":"unplaced"},
|
|
1653
|
+
{"key":"L0092","section":"Good morning, {…}","text":"Where do you want to start the day?","placement":"placed","file":"modules/hall-ui/public/welcome-boot.js","line":184,"string_id":"0ec8d133f878","state":"founding"},
|
|
1654
|
+
{"key":"L0093","section":"Good morning, {…}","text":"Start with your role","placement":"placed","file":"modules/hall-ui/public/welcome-boot.js","line":186,"string_id":"58cef7963b6c","state":"founding"},
|
|
1655
|
+
{"key":"L0094","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":186,"string_id":"100e4665514d","state":"founding"},
|
|
1656
|
+
{"key":"L0095","section":"Good morning, {…}","text":"Your home page","placement":"placed","file":"modules/hall-ui/public/welcome-boot.js","line":187,"string_id":"2e6866532113","state":"founding"},
|
|
1657
|
+
{"key":"L0096","section":"Good morning, {…}","text":"Your work, what needs you, and what shipped.","placement":"placed","file":"modules/hall-ui/public/welcome-boot.js","line":187,"string_id":"e8d92c773db0","state":"founding"}
|
|
1676
1658
|
]
|
|
1677
1659
|
},
|
|
1678
1660
|
{
|
package/modules/government/db.js
CHANGED
|
@@ -902,6 +902,34 @@ async function listAccessHolders() {
|
|
|
902
902
|
return rows;
|
|
903
903
|
}
|
|
904
904
|
|
|
905
|
+
// THE GOAL OF A DOCKET MATTER (task 1005056): which goal each goal-shaped matter
|
|
906
|
+
// belongs to, so Home's project city can put the docket's "yours" over the right
|
|
907
|
+
// tower. A blocker belongs to every goal whose tasks it holds (task_blockers →
|
|
908
|
+
// tasks.goal_id); a criterion and a goal join request carry their goal. The
|
|
909
|
+
// tables are core's; this is a read across the wall in SQL, never a require.
|
|
910
|
+
// → [{ matter_id: 'blockers:12', goal_id: '1000095' }, …]; ids are numeric or skipped.
|
|
911
|
+
async function goalsOfMatters({ blockers = [], criteria = [], joinRequests = [] } = {}) {
|
|
912
|
+
const ids = (list) => (Array.isArray(list) ? list : []).map(String).filter((v) => /^\d{1,18}$/.test(v));
|
|
913
|
+
const [b, c, j] = [ids(blockers), ids(criteria), ids(joinRequests)];
|
|
914
|
+
if (!b.length && !c.length && !j.length) return [];
|
|
915
|
+
const { rows } = await pool.query(
|
|
916
|
+
`SELECT 'blockers:' || tb.blocker_id AS matter_id, t.goal_id::text AS goal_id
|
|
917
|
+
FROM task_blockers tb
|
|
918
|
+
JOIN tasks t ON t.id = tb.task_id
|
|
919
|
+
WHERE tb.blocker_id = ANY($1::bigint[]) AND t.goal_id IS NOT NULL
|
|
920
|
+
UNION
|
|
921
|
+
SELECT 'criteria_uat:' || c.id, c.goal_id::text
|
|
922
|
+
FROM done_when_criteria c
|
|
923
|
+
WHERE c.id = ANY($2::bigint[]) AND c.goal_id IS NOT NULL
|
|
924
|
+
UNION
|
|
925
|
+
SELECT 'goal_join_requests:' || r.id, r.goal_id::text
|
|
926
|
+
FROM goal_membership_requests r
|
|
927
|
+
WHERE r.id = ANY($3::bigint[])`,
|
|
928
|
+
[b, c, j],
|
|
929
|
+
);
|
|
930
|
+
return rows;
|
|
931
|
+
}
|
|
932
|
+
|
|
905
933
|
// Record that a builder holds an access. Idempotent: an existing row is kept as it
|
|
906
934
|
// was (its original granted_at/by). → true when a row was added.
|
|
907
935
|
async function grantAccess(accessKey, builderId, grantedBy) {
|
|
@@ -1342,6 +1370,7 @@ module.exports = {
|
|
|
1342
1370
|
listLeads,
|
|
1343
1371
|
listActiveArchons,
|
|
1344
1372
|
listAccessHolders,
|
|
1373
|
+
goalsOfMatters,
|
|
1345
1374
|
grantAccess,
|
|
1346
1375
|
revokeAccess,
|
|
1347
1376
|
getActiveBuilder,
|
|
@@ -932,14 +932,69 @@ async function blockersByPerson(builder, { contributions = registeredContributio
|
|
|
932
932
|
return { available: false, reason: 'unavailable', people: [], nobody: [], yours: waiting.forViewer(null, builder.id) };
|
|
933
933
|
}
|
|
934
934
|
await attachAsks(matters, asksDb.asksFor, timeoutMs);
|
|
935
|
+
const seats = await seatsFor(matters);
|
|
936
|
+
if (!seats) return { available: false, reason: 'unavailable', people: [], nobody: [], yours: waiting.forViewer(null, builder.id) };
|
|
937
|
+
const grouped = waiting.groupByPerson(matters, seats);
|
|
938
|
+
return { available: true, ...grouped, yours: waiting.forViewer(grouped, builder.id) };
|
|
939
|
+
}
|
|
940
|
+
|
|
941
|
+
// The seats a set of matters routes against (loadSeats), reading a board's holders
|
|
942
|
+
// only when some matter names a board seat. null when the seats are unreadable.
|
|
943
|
+
async function seatsFor(matters) {
|
|
935
944
|
const boardSeat = matters.some((m) => /^board:/.test(routing.seatOf(m)));
|
|
936
945
|
const government = boardSeat
|
|
937
946
|
? await loadGovernment({ decisions: await board.decisionRulesView().catch(() => null) })
|
|
938
947
|
: { holders: {} };
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
948
|
+
return loadSeats(government);
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
// WHAT IS YOURS, PER GOAL (task 1005056). Home's project city puts a salmon dot
|
|
952
|
+
// over a working area for each matter waiting on the viewer; this answers it the
|
|
953
|
+
// docket's way, so the city and the docket can never disagree. The goal-shaped
|
|
954
|
+
// sources are read exactly as buildDocket reads them (each under its own gate),
|
|
955
|
+
// carry their stored asks, and are routed against the seats with routing.js — a
|
|
956
|
+
// matter counts when its route is `yours`. Like docketFor, a viewer without the
|
|
957
|
+
// docket's own atom is routed nothing. Each matter is then placed on its goal(s)
|
|
958
|
+
// (db.goalsOfMatters). A source that fails is left out, as the docket leaves it
|
|
959
|
+
// unavailable; unreadable seats say `available: false` rather than "none".
|
|
960
|
+
// → { available: true, goals: { [goal_id]: count } } | { available: false, reason }
|
|
961
|
+
const GOAL_SOURCES = Object.freeze(['blockers', 'criteria_uat', 'goal_join_requests']);
|
|
962
|
+
async function yoursByGoal(builder, {
|
|
963
|
+
contributions = registeredContributions(), now = Date.now(), timeoutMs = SOURCE_TIMEOUT_MS,
|
|
964
|
+
permissions = null, readAsks = asksDb.asksFor, readSeats = seatsFor, goalsOf = db.goalsOfMatters,
|
|
965
|
+
} = {}) {
|
|
966
|
+
if (!builder || builder.id == null) return { available: true, goals: {} };
|
|
967
|
+
const held = new Set(permissions || await resolver.resolveBuilderPermissions(builder.id));
|
|
968
|
+
if (!held.has(GOVERNMENT_GATE.permission)) return { available: true, goals: {} };
|
|
969
|
+
const ctx = Object.freeze({ builderId: String(builder.id), rank: builder.rank || null, has: (p) => held.has(p) });
|
|
970
|
+
const matters = [];
|
|
971
|
+
await Promise.all(GOAL_SOURCES.map(async (source) => {
|
|
972
|
+
const c = contributions.sources.get(source);
|
|
973
|
+
if (!c || !gateAllows(c.gate, ctx)) return;
|
|
974
|
+
const decl = EXPECTED_SOURCES.find((d) => d.source === source);
|
|
975
|
+
try {
|
|
976
|
+
const raw = await withTimeout(Promise.resolve(c.read(ctx, { now })), timeoutMs);
|
|
977
|
+
matters.push(...(Array.isArray(raw) ? raw : []).map((m) => normalizeMatter(m, { source, building: c.building || decl.building })).filter(Boolean));
|
|
978
|
+
} catch (err) {
|
|
979
|
+
log.warn({ source, err: err && err.message }, 'yours by goal: a source could not be read');
|
|
980
|
+
}
|
|
981
|
+
}));
|
|
982
|
+
const needs = matters.filter((m) => m.state === 'needs');
|
|
983
|
+
if (!needs.length) return { available: true, goals: {} };
|
|
984
|
+
await attachAsks(needs, readAsks, timeoutMs);
|
|
985
|
+
const seats = await readSeats(needs);
|
|
986
|
+
if (!seats) return { available: false, reason: 'unavailable' };
|
|
987
|
+
routing.routeAll(needs, ctx.builderId, seats, now);
|
|
988
|
+
const mine = needs.filter((m) => m.route && m.route.yours);
|
|
989
|
+
if (!mine.length) return { available: true, goals: {} };
|
|
990
|
+
const tail = (m) => m.id.slice(m.source.length + 1);
|
|
991
|
+
const of = (source) => mine.filter((m) => m.source === source).map(tail);
|
|
992
|
+
const rows = await goalsOf({ blockers: of('blockers'), criteria: of('criteria_uat'), joinRequests: of('goal_join_requests') });
|
|
993
|
+
const goals = {};
|
|
994
|
+
for (const r of rows || []) {
|
|
995
|
+
if (r && r.goal_id != null) goals[String(r.goal_id)] = (goals[String(r.goal_id)] || 0) + 1;
|
|
996
|
+
}
|
|
997
|
+
return { available: true, goals };
|
|
943
998
|
}
|
|
944
999
|
|
|
945
1000
|
// One matter with its stored ask and the seats, for passing it on to `toSeat`
|
|
@@ -1024,5 +1079,7 @@ module.exports = {
|
|
|
1024
1079
|
findMatterFor,
|
|
1025
1080
|
loadSeats,
|
|
1026
1081
|
blockersByPerson,
|
|
1082
|
+
yoursByGoal,
|
|
1083
|
+
GOAL_SOURCES,
|
|
1027
1084
|
matterWithSeats,
|
|
1028
1085
|
};
|
|
@@ -171,6 +171,8 @@ const governmentPort = {
|
|
|
171
171
|
askRequiredMessage: asks.ASK_REQUIRED_MESSAGE,
|
|
172
172
|
saveAsk: (...a) => asksDb.saveAsk(...a),
|
|
173
173
|
asksFor: (...a) => asksDb.asksFor(...a),
|
|
174
|
+
// task 1005056: per goal, the docket matters routed to this viewer (Home's city)
|
|
175
|
+
yoursByGoal: (viewer) => docket.yoursByGoal(viewer),
|
|
174
176
|
};
|
|
175
177
|
|
|
176
178
|
// An ask arrives bare, or wrapped as { ask } (the shape POST /blockers takes it in).
|