@bongos/core 1.20.66 → 1.20.68
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 +35 -30
- package/docs/copy-inventory.md +215 -204
- package/docs/copy-registry.json +450 -340
- package/docs/module-api-changelog.md +4 -0
- package/docs/page-inventory.json +3 -1
- package/docs/page-readings.json +110 -100
- package/modules/hall-ui/public/goals-lib.js +37 -5
- package/modules/hall-ui/public/goals-render.js +14 -5
- package/modules/hall-ui/public/task.js +25 -2
- package/modules/lifecycle/goal-rollup.js +13 -7
- package/modules/lifecycle/task-status.js +4 -1
- package/modules/public-landing/public/account-private.states.json +1 -1
- package/modules/public-landing/public/account.html +143 -26
- package/modules/public-landing/public/account.probes.json +30 -0
- package/modules/public-landing/public/account.states.json +7 -5
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +12 -0
- package/scripts/hall-preview/refresh-fixtures.js +5 -1
- package/src/module-api.js +1 -1
- package/tests/claim_from_task_and_home.mjs +22 -1
- package/tests/dep_blocked_ready_cards.mjs +70 -0
- package/tests/goal_sort_staleness.mjs +8 -3
- package/tests/goals_lib.mjs +58 -2
- package/tests/hub_account_page.mjs +235 -12
|
@@ -2789,5 +2789,9 @@ is load-bearing: the script throws rather than guess if it is missing, and
|
|
|
2789
2789
|
landed since 1.20.64 with no explicit bump. run 36852902728. (task 1002620)
|
|
2790
2790
|
1.20.66 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
2791
2791
|
landed since 1.20.65 with no explicit bump. run 36854308972. (task 1002620)
|
|
2792
|
+
1.20.67 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
2793
|
+
landed since 1.20.66 with no explicit bump. run 36860726629. (task 1002620)
|
|
2794
|
+
1.20.68 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
2795
|
+
landed since 1.20.67 with no explicit bump. run 36871565601. (task 1002620)
|
|
2792
2796
|
---------------------------------------------------------------------------
|
|
2793
2797
|
```
|
package/docs/page-inventory.json
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"pages": 40,
|
|
14
14
|
"surfaces": 3,
|
|
15
15
|
"with_states": 33,
|
|
16
|
-
"states":
|
|
16
|
+
"states": 204
|
|
17
17
|
},
|
|
18
18
|
"surfaces": [
|
|
19
19
|
{
|
|
@@ -1137,6 +1137,8 @@
|
|
|
1137
1137
|
"states": [
|
|
1138
1138
|
"out",
|
|
1139
1139
|
"in",
|
|
1140
|
+
"in-projects-band",
|
|
1141
|
+
"in-profile-band",
|
|
1140
1142
|
"in-privacy",
|
|
1141
1143
|
"in-private"
|
|
1142
1144
|
]
|
package/docs/page-readings.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"adr": "0341 D3",
|
|
6
6
|
"reread": "node scripts/gds/page-reader.js --stale",
|
|
7
7
|
"how": ["Generated by node scripts/gds/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":40,"lines":
|
|
8
|
+
"counts": {"pages":40,"lines":4016,"placed":1431,"shared":245,"unplaced":2340,"omitted_data":2233},
|
|
9
9
|
"pages": [
|
|
10
10
|
{
|
|
11
11
|
"id": "builders:atlas",
|
|
@@ -1085,7 +1085,7 @@
|
|
|
1085
1085
|
"surface": "builders",
|
|
1086
1086
|
"title": "Goals",
|
|
1087
1087
|
"states_read": ["list","filters","cards","detail","out","uat","uat-panel"],
|
|
1088
|
-
"files_hash": "
|
|
1088
|
+
"files_hash": "bec6cb43b659cd69",
|
|
1089
1089
|
"reading_hash": "2104acb45018ce47",
|
|
1090
1090
|
"counts": {"lines":171,"placed":46,"shared":5,"unplaced":120},
|
|
1091
1091
|
"omitted": {"data":251},
|
|
@@ -1136,7 +1136,7 @@
|
|
|
1136
1136
|
{"key":"L0043","section":"Members0","text":"No members yet — be the first to join.","placement":"unplaced","state":"detail"},
|
|
1137
1137
|
{"key":"L0044","section":"Conflicts12","text":"Conflicts","placement":"unplaced","state":"detail"},
|
|
1138
1138
|
{"key":"L0045","section":"Conflicts12","text":"Open tasks whose declared files overlap — sequence these before two builders collide.","placement":"placed","file":"modules/hall-ui/public/goals.html","line":117,"string_id":"99c630009152","state":"detail"},
|
|
1139
|
-
{"key":"L0046","section":"Conflicts12","text":"View all {…} {…} →","placement":"placed","file":"modules/hall-ui/public/goals-render.js","line":
|
|
1139
|
+
{"key":"L0046","section":"Conflicts12","text":"View all {…} {…} →","placement":"placed","file":"modules/hall-ui/public/goals-render.js","line":617,"string_id":"9b92aa01516d","state":"detail"},
|
|
1140
1140
|
{"key":"L0047","section":"Task {…}","text":"Task dependencies","placement":"placed","file":"modules/hall-ui/public/goals.html","line":132,"string_id":"a0f384b022fd","state":"detail"},
|
|
1141
1141
|
{"key":"L0048","section":"Task {…}","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","state":"detail"},
|
|
1142
1142
|
{"key":"L0049","section":"Task {…}","text":"#1165 Blocker-solve","placement":"unplaced","state":"detail"},
|
|
@@ -1151,7 +1151,7 @@
|
|
|
1151
1151
|
{"key":"L0058","section":"Task {…}","text":"converge onto the kit…","placement":"unplaced","state":"detail"},
|
|
1152
1152
|
{"key":"L0059","section":"Task {…}","text":"#2172 Settings","placement":"unplaced","state":"detail"},
|
|
1153
1153
|
{"key":"L0060","section":"Task {…}","text":"regroup: 6 groups, st…","placement":"unplaced","state":"detail"},
|
|
1154
|
-
{"key":"L0061","section":"Task {…}","text":"Task","placement":"placed","file":"modules/hall-ui/public/task.js","line":
|
|
1154
|
+
{"key":"L0061","section":"Task {…}","text":"Task","placement":"placed","file":"modules/hall-ui/public/task.js","line":512,"string_id":"eff70e59d12e","state":"detail"},
|
|
1155
1155
|
{"key":"L0062","section":"Task {…}","text":"Status","placement":"unplaced","state":"detail"},
|
|
1156
1156
|
{"key":"L0063","section":"Task {…}","text":"Priority","placement":"unplaced","state":"detail"},
|
|
1157
1157
|
{"key":"L0064","section":"Task {…}","text":"Waits on","placement":"placed","file":"modules/hall-ui/public/goal-forest-render.js","line":146,"string_id":"8e4f0179e1d3","state":"detail"},
|
|
@@ -2808,25 +2808,25 @@
|
|
|
2808
2808
|
"surface": "builders",
|
|
2809
2809
|
"title": "Task",
|
|
2810
2810
|
"states_read": ["record","from-goal","missing"],
|
|
2811
|
-
"files_hash": "
|
|
2811
|
+
"files_hash": "e01a05d46624d7f0",
|
|
2812
2812
|
"reading_hash": "66f99a3663a75a77",
|
|
2813
2813
|
"counts": {"lines":117,"placed":29,"shared":5,"unplaced":83},
|
|
2814
2814
|
"omitted": {"data":67},
|
|
2815
2815
|
"notes": [],
|
|
2816
2816
|
"lines": [
|
|
2817
2817
|
{"key":"L0001","section":"skip link","text":"Skip to content","placement":"shared","file":"modules/hall-ui/public/shell.js","line":884,"string_id":"87cee78ca134"},
|
|
2818
|
-
{"key":"L0002","section":"top bar","text":"Task","placement":"shared","file":"modules/hall-ui/public/task.js","line":
|
|
2818
|
+
{"key":"L0002","section":"top bar","text":"Task","placement":"shared","file":"modules/hall-ui/public/task.js","line":512,"string_id":"eff70e59d12e"},
|
|
2819
2819
|
{"key":"L0003","section":"top bar","text":"Jump to…","placement":"shared","file":"modules/hall-ui/public/shell.js","line":495,"string_id":"eba610d25523"},
|
|
2820
2820
|
{"key":"L0004","section":"top bar","text":"Ctrl K","placement":"shared"},
|
|
2821
2821
|
{"key":"L0005","section":"page top","text":"Back to {…}","placement":"placed","file":"modules/hall-ui/public/task.js","line":226,"string_id":"f6bb75b08e98","state":"from-goal","occurrences":2},
|
|
2822
|
-
{"key":"L0006","section":"page top","text":"Task {…}","placement":"placed","file":"modules/hall-ui/public/task.js","line":
|
|
2823
|
-
{"key":"L0007","section":"page top","text":"Task","placement":"placed","file":"modules/hall-ui/public/task.js","line":
|
|
2824
|
-
{"key":"L0008","section":"page top","text":"shipped","placement":"placed","file":"modules/hall-ui/public/goals-render.js","line":
|
|
2822
|
+
{"key":"L0006","section":"page top","text":"Task {…}","placement":"placed","file":"modules/hall-ui/public/task.js","line":512,"string_id":"eff70e59d12e"},
|
|
2823
|
+
{"key":"L0007","section":"page top","text":"Task","placement":"placed","file":"modules/hall-ui/public/task.js","line":512,"string_id":"eff70e59d12e"},
|
|
2824
|
+
{"key":"L0008","section":"page top","text":"shipped","placement":"placed","file":"modules/hall-ui/public/goals-render.js","line":828,"string_id":"bd3402efa59e"},
|
|
2825
2825
|
{"key":"L0009","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"· {…} · {…} · {…} to any rank","placement":"unplaced"},
|
|
2826
2826
|
{"key":"L0010","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Created {…}, 78d ago.","placement":"unplaced"},
|
|
2827
2827
|
{"key":"L0011","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Goal","placement":"placed","file":"modules/hall-ui/public/gate.js","line":288,"string_id":"ec88b946ad16"},
|
|
2828
2828
|
{"key":"L0012","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","occurrences":8},
|
|
2829
|
-
{"key":"L0013","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Move to goal","placement":"placed","file":"modules/hall-ui/public/task.js","line":
|
|
2829
|
+
{"key":"L0013","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Move to goal","placement":"placed","file":"modules/hall-ui/public/task.js","line":599,"string_id":"e52ae74f0052"},
|
|
2830
2830
|
{"key":"L0014","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Move","placement":"unplaced"},
|
|
2831
2831
|
{"key":"L0015","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Priority","placement":"unplaced","occurrences":2},
|
|
2832
2832
|
{"key":"L0016","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"— unset —","placement":"unplaced"},
|
|
@@ -2835,11 +2835,11 @@
|
|
|
2835
2835
|
{"key":"L0019","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"P3","placement":"unplaced"},
|
|
2836
2836
|
{"key":"L0020","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"P4","placement":"unplaced"},
|
|
2837
2837
|
{"key":"L0021","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"P5","placement":"unplaced"},
|
|
2838
|
-
{"key":"L0022","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Wait for task","placement":"placed","file":"modules/hall-ui/public/task.js","line":
|
|
2839
|
-
{"key":"L0023","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"task id","placement":"placed","file":"modules/hall-ui/public/task.js","line":
|
|
2840
|
-
{"key":"L0024","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Set priority","placement":"placed","file":"modules/hall-ui/public/task.js","line":
|
|
2841
|
-
{"key":"L0025","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Add dependency","placement":"placed","file":"modules/hall-ui/public/task.js","line":
|
|
2842
|
-
{"key":"L0026","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"A dependency keeps this task out of the claimable queue until that one ships. Remove one with the × beside it under “Blocked by”.","placement":"placed","file":"modules/hall-ui/public/task.js","line":
|
|
2838
|
+
{"key":"L0022","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Wait for task","placement":"placed","file":"modules/hall-ui/public/task.js","line":629,"string_id":"411b2ff58094"},
|
|
2839
|
+
{"key":"L0023","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"task id","placement":"placed","file":"modules/hall-ui/public/task.js","line":629,"string_id":"3906fbc07bbe","attr":"placeholder"},
|
|
2840
|
+
{"key":"L0024","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Set priority","placement":"placed","file":"modules/hall-ui/public/task.js","line":629,"string_id":"c11213056bab"},
|
|
2841
|
+
{"key":"L0025","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Add dependency","placement":"placed","file":"modules/hall-ui/public/task.js","line":629,"string_id":"2b94171ce525"},
|
|
2842
|
+
{"key":"L0026","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"A dependency keeps this task out of the claimable queue until that one ships. Remove one with the × beside it under “Blocked by”.","placement":"placed","file":"modules/hall-ui/public/task.js","line":629,"string_id":"518e5acc9184"},
|
|
2843
2843
|
{"key":"L0027","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Estimated","placement":"unplaced"},
|
|
2844
2844
|
{"key":"L0028","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"m","placement":"unplaced","occurrences":2},
|
|
2845
2845
|
{"key":"L0029","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Actual","placement":"unplaced"},
|
|
@@ -2853,7 +2853,7 @@
|
|
|
2853
2853
|
{"key":"L0037","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Credit","placement":"unplaced"},
|
|
2854
2854
|
{"key":"L0038","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"80 {…} landed","placement":"unplaced"},
|
|
2855
2855
|
{"key":"L0039","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"2 claims","placement":"unplaced"},
|
|
2856
|
-
{"key":"L0040","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Last claimed by","placement":"placed","file":"modules/hall-ui/public/task.js","line":
|
|
2856
|
+
{"key":"L0040","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Last claimed by","placement":"placed","file":"modules/hall-ui/public/task.js","line":679,"string_id":"13bae4dfb28e"},
|
|
2857
2857
|
{"key":"L0041","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"on {…}, {…} released, outcome {…}.","placement":"unplaced"},
|
|
2858
2858
|
{"key":"L0042","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Value","placement":"unplaced"},
|
|
2859
2859
|
{"key":"L0043","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Description","placement":"unplaced"},
|
|
@@ -2910,26 +2910,26 @@
|
|
|
2910
2910
|
{"key":"L0094","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"on edited JS before ship.","placement":"unplaced"},
|
|
2911
2911
|
{"key":"L0095","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Touches","placement":"unplaced"},
|
|
2912
2912
|
{"key":"L0096","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Blocks","placement":"unplaced"},
|
|
2913
|
-
{"key":"L0097","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Shipped","placement":"placed","file":"modules/hall-ui/public/task.js","line":
|
|
2914
|
-
{"key":"L0098","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Shipped {…}{…}, {…}.","placement":"placed","file":"modules/hall-ui/public/task.js","line":
|
|
2915
|
-
{"key":"L0099","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"The adversarial panel. Each worker reports pass, concerns or fail on its own; the gating workers must all pass before confirmed becomes {…}, and one concerns falls the task through to the manual confirm path.","placement":"placed","file":"modules/hall-ui/public/task.js","line":
|
|
2916
|
-
{"key":"L0100","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"verdict {…}","placement":"placed","file":"modules/hall-ui/public/task.js","line":
|
|
2913
|
+
{"key":"L0097","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Shipped","placement":"placed","file":"modules/hall-ui/public/task.js","line":714,"string_id":"0c0a50ba1666"},
|
|
2914
|
+
{"key":"L0098","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Shipped {…}{…}, {…}.","placement":"placed","file":"modules/hall-ui/public/task.js","line":714,"string_id":"0c0a50ba1666"},
|
|
2915
|
+
{"key":"L0099","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"The adversarial panel. Each worker reports pass, concerns or fail on its own; the gating workers must all pass before confirmed becomes {…}, and one concerns falls the task through to the manual confirm path.","placement":"placed","file":"modules/hall-ui/public/task.js","line":449,"string_id":"6e93ef49d63f"},
|
|
2916
|
+
{"key":"L0100","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"verdict {…}","placement":"placed","file":"modules/hall-ui/public/task.js","line":453,"string_id":"4de556377db2"},
|
|
2917
2917
|
{"key":"L0101","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"threshold 6 · panel {…} · {…}","placement":"unplaced"},
|
|
2918
|
-
{"key":"L0102","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Session log{…}","placement":"placed","file":"modules/hall-ui/public/task.js","line":
|
|
2918
|
+
{"key":"L0102","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Session log{…}","placement":"placed","file":"modules/hall-ui/public/task.js","line":505,"string_id":"55e0a34bafed"},
|
|
2919
2919
|
{"key":"L0103","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Session","placement":"unplaced"},
|
|
2920
2920
|
{"key":"L0104","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":", 37m","placement":"unplaced"},
|
|
2921
2921
|
{"key":"L0105","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Outcome","placement":"unplaced"},
|
|
2922
|
-
{"key":"L0106","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"shipped","placement":"placed","file":"modules/hall-ui/public/goals-render.js","line":
|
|
2923
|
-
{"key":"L0107","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"{…} awarded","placement":"placed","file":"modules/hall-ui/public/task.js","line":
|
|
2922
|
+
{"key":"L0106","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"shipped","placement":"placed","file":"modules/hall-ui/public/goals-render.js","line":828,"string_id":"bd3402efa59e"},
|
|
2923
|
+
{"key":"L0107","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"{…} awarded","placement":"placed","file":"modules/hall-ui/public/task.js","line":496,"string_id":"788ff11f1135"},
|
|
2924
2924
|
{"key":"L0108","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Handoff","placement":"unplaced"},
|
|
2925
|
-
{"key":"L0109","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Read the handoff notes","placement":"placed","file":"modules/hall-ui/public/task.js","line":
|
|
2926
|
-
{"key":"L0110","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Full log","placement":"placed","file":"modules/hall-ui/public/task.js","line":
|
|
2927
|
-
{"key":"L0111","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Open in Sessions","placement":"placed","file":"modules/hall-ui/public/task.js","line":
|
|
2925
|
+
{"key":"L0109","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Read the handoff notes","placement":"placed","file":"modules/hall-ui/public/task.js","line":499,"string_id":"c5f19a888a15"},
|
|
2926
|
+
{"key":"L0110","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Full log","placement":"placed","file":"modules/hall-ui/public/task.js","line":501,"string_id":"fc6fdfa639a7"},
|
|
2927
|
+
{"key":"L0111","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Open in Sessions","placement":"placed","file":"modules/hall-ui/public/task.js","line":501,"string_id":"5f3e0b179839"},
|
|
2928
2928
|
{"key":"L0112","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Actions","placement":"unplaced"},
|
|
2929
|
-
{"key":"L0113","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"This task has shipped and its credits have landed. Neither Ship it nor Confirm is available.","placement":"placed","file":"modules/hall-ui/public/task.js","line":
|
|
2930
|
-
{"key":"L0114","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Copy prompt","placement":"placed","file":"modules/hall-ui/public/task.js","line":
|
|
2929
|
+
{"key":"L0113","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"This task has shipped and its credits have landed. Neither Ship it nor Confirm is available.","placement":"placed","file":"modules/hall-ui/public/task.js","line":765,"string_id":"c9e50a67988a"},
|
|
2930
|
+
{"key":"L0114","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Copy prompt","placement":"placed","file":"modules/hall-ui/public/task.js","line":841,"string_id":"a873e7c29d80"},
|
|
2931
2931
|
{"key":"L0115","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"Back to {…}","placement":"placed","file":"modules/hall-ui/public/task.js","line":226,"string_id":"f6bb75b08e98","state":"from-goal","occurrences":2},
|
|
2932
|
-
{"key":"L0116","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"A shipped task cannot be retired — it is immutable history now.","placement":"placed","file":"modules/hall-ui/public/task.js","line":
|
|
2932
|
+
{"key":"L0116","section":"2166hall-kit.js: shared hall UI primitives (pager, ledger, filter bar, tabs, ra…","text":"A shipped task cannot be retired — it is immutable history now.","placement":"placed","file":"modules/hall-ui/public/task.js","line":797,"string_id":"f3d6ed7c0d2c"},
|
|
2933
2933
|
{"key":"L0117","section":"footer","text":"Sign out","placement":"shared","file":"modules/hall-ui/public/shell.js","line":471,"string_id":"1883ad7f07fc"}
|
|
2934
2934
|
]
|
|
2935
2935
|
},
|
|
@@ -3447,80 +3447,90 @@
|
|
|
3447
3447
|
"id": "landing:account",
|
|
3448
3448
|
"surface": "landing",
|
|
3449
3449
|
"title": "{{productName}} — Your account",
|
|
3450
|
-
"states_read": ["out","in","in-privacy","in-private"],
|
|
3451
|
-
"files_hash": "
|
|
3452
|
-
"reading_hash": "
|
|
3453
|
-
"counts": {"lines":
|
|
3454
|
-
"omitted": {"data":
|
|
3450
|
+
"states_read": ["out","in","in-projects-band","in-profile-band","in-privacy","in-private"],
|
|
3451
|
+
"files_hash": "de5fcf1e4b00fef2",
|
|
3452
|
+
"reading_hash": "09a23355300dacb4",
|
|
3453
|
+
"counts": {"lines":77,"placed":41,"shared":10,"unplaced":26},
|
|
3454
|
+
"omitted": {"data":3},
|
|
3455
3455
|
"notes": [],
|
|
3456
3456
|
"lines": [
|
|
3457
3457
|
{"key":"L0001","section":"top bar","text":"Projects","placement":"shared"},
|
|
3458
|
-
{"key":"L0002","section":"top
|
|
3459
|
-
{"key":"L0003","section":"
|
|
3460
|
-
{"key":"L0004","section":"
|
|
3461
|
-
{"key":"L0005","section":"
|
|
3462
|
-
{"key":"L0006","section":"
|
|
3463
|
-
{"key":"L0007","section":"
|
|
3464
|
-
{"key":"L0008","section":"
|
|
3465
|
-
{"key":"L0009","section":"
|
|
3466
|
-
{"key":"L0010","section":"
|
|
3467
|
-
{"key":"L0011","section":"
|
|
3468
|
-
{"key":"L0012","section":"
|
|
3469
|
-
{"key":"L0013","section":"
|
|
3470
|
-
{"key":"L0014","section":"your
|
|
3471
|
-
{"key":"L0015","section":"your
|
|
3472
|
-
{"key":"L0016","section":"your profile","text":"
|
|
3473
|
-
{"key":"L0017","section":"your profile","text":"
|
|
3474
|
-
{"key":"L0018","section":"your profile","text":"
|
|
3475
|
-
{"key":"L0019","section":"your profile","text":"
|
|
3476
|
-
{"key":"L0020","section":"your profile","text":"
|
|
3477
|
-
{"key":"L0021","section":"your profile","text":"
|
|
3478
|
-
{"key":"L0022","section":"your profile","text":"
|
|
3479
|
-
{"key":"L0023","section":"your profile","text":"
|
|
3480
|
-
{"key":"L0024","section":"your profile","text":"
|
|
3481
|
-
{"key":"L0025","section":"your
|
|
3482
|
-
{"key":"L0026","section":"your
|
|
3483
|
-
{"key":"L0027","section":"your
|
|
3484
|
-
{"key":"L0028","section":"your
|
|
3485
|
-
{"key":"L0029","section":"your
|
|
3486
|
-
{"key":"L0030","section":"your
|
|
3487
|
-
{"key":"L0031","section":"
|
|
3488
|
-
{"key":"L0032","section":"
|
|
3489
|
-
{"key":"L0033","section":"
|
|
3490
|
-
{"key":"L0034","section":"
|
|
3491
|
-
{"key":"L0035","section":"
|
|
3492
|
-
{"key":"L0036","section":"
|
|
3493
|
-
{"key":"L0037","section":"
|
|
3494
|
-
{"key":"L0038","section":"
|
|
3495
|
-
{"key":"L0039","section":"
|
|
3496
|
-
{"key":"L0040","section":"who can find you","text":"
|
|
3497
|
-
{"key":"L0041","section":"who can find you","text":"
|
|
3498
|
-
{"key":"L0042","section":"who can find you","text":"
|
|
3499
|
-
{"key":"L0043","section":"who can find you","text":"
|
|
3500
|
-
{"key":"L0044","section":"who can find you","text":"
|
|
3501
|
-
{"key":"L0045","section":"who can find you","text":"
|
|
3502
|
-
{"key":"L0046","section":"who can find you","text":"
|
|
3503
|
-
{"key":"L0047","section":"who can find you","text":"
|
|
3504
|
-
{"key":"L0048","section":"who can find you","text":"
|
|
3505
|
-
{"key":"L0049","section":"
|
|
3506
|
-
{"key":"L0050","section":"
|
|
3507
|
-
{"key":"L0051","section":"
|
|
3508
|
-
{"key":"L0052","section":"
|
|
3509
|
-
{"key":"L0053","section":"
|
|
3510
|
-
{"key":"L0054","section":"
|
|
3511
|
-
{"key":"L0055","section":"
|
|
3512
|
-
{"key":"L0056","section":"
|
|
3513
|
-
{"key":"L0057","section":"
|
|
3514
|
-
{"key":"L0058","section":"your record","text":"
|
|
3515
|
-
{"key":"L0059","section":"
|
|
3516
|
-
{"key":"L0060","section":"
|
|
3517
|
-
{"key":"L0061","section":"
|
|
3518
|
-
{"key":"L0062","section":"
|
|
3519
|
-
{"key":"L0063","section":"
|
|
3520
|
-
{"key":"L0064","section":"
|
|
3521
|
-
{"key":"L0065","section":"
|
|
3522
|
-
{"key":"L0066","section":"your
|
|
3523
|
-
{"key":"L0067","section":"your
|
|
3458
|
+
{"key":"L0002","section":"page top","text":"My projects","placement":"placed","file":"modules/public-landing/public/account.html","line":125,"string_id":"4a167ef6e515","state":"in-profile-band"},
|
|
3459
|
+
{"key":"L0003","section":"page top","text":"Account","placement":"unplaced","state":"in-profile-band"},
|
|
3460
|
+
{"key":"L0004","section":"page top","text":"Sign out","placement":"placed","file":"modules/public-landing/public/account.html","line":128,"string_id":"f9af2d90ce5b","state":"in-profile-band"},
|
|
3461
|
+
{"key":"L0005","section":"page top","text":"Sky","placement":"unplaced","state":"in-projects-band"},
|
|
3462
|
+
{"key":"L0006","section":"page top","text":"the sky of every project","placement":"placed","file":"modules/public-landing/public/account.html","line":114,"string_id":"8fa12f730019","state":"in-projects-band"},
|
|
3463
|
+
{"key":"L0007","section":"page top","text":"Table","placement":"unplaced","state":"in-projects-band"},
|
|
3464
|
+
{"key":"L0008","section":"page top","text":"the same projects as rows","placement":"placed","file":"modules/public-landing/public/account.html","line":115,"string_id":"21453b3ba5c3","state":"in-projects-band"},
|
|
3465
|
+
{"key":"L0009","section":"page top","text":"Your projects","placement":"placed","file":"modules/public-landing/public/account.html","line":116,"string_id":"4e25e6872321","state":"in-projects-band"},
|
|
3466
|
+
{"key":"L0010","section":"page top","text":"the ones you own or build on","placement":"placed","file":"modules/public-landing/public/account.html","line":116,"string_id":"4d88dcfcb8e8","state":"in-projects-band"},
|
|
3467
|
+
{"key":"L0011","section":"page top","text":"New project","placement":"placed","file":"modules/public-landing/public/account.html","line":117,"string_id":"0a81a82d10c4","state":"in-projects-band"},
|
|
3468
|
+
{"key":"L0012","section":"page top","text":"five questions and a home","placement":"placed","file":"modules/public-landing/public/account.html","line":117,"string_id":"94a3462373d2","state":"in-projects-band"},
|
|
3469
|
+
{"key":"L0013","section":"top bar","text":"Sign in","placement":"shared","file":"modules/public-landing/public/account.html","line":107,"string_id":"ad80586f802a"},
|
|
3470
|
+
{"key":"L0014","section":"your account","text":"your account","placement":"placed","file":"modules/public-landing/public/account.html","line":134,"string_id":"402563eecd10"},
|
|
3471
|
+
{"key":"L0015","section":"your account","text":"Who you are across every project on {{productName}}, and who can find you. It is one account, so you change these once, here — each project’s own settings stay in that project’s hall.","placement":"placed","file":"modules/public-landing/public/account.html","line":135,"string_id":"53d4f098a176"},
|
|
3472
|
+
{"key":"L0016","section":"your profile","text":"your profile","placement":"placed","file":"modules/public-landing/public/account.html","line":158,"string_id":"751054b62c88","state":"in"},
|
|
3473
|
+
{"key":"L0017","section":"your profile","text":"Shown wherever your profile appears on {{productName}}. Each project’s hall keeps its own display name — change that one in the hall’s settings.","placement":"placed","file":"modules/public-landing/public/account.html","line":159,"string_id":"25f031d4c292","state":"in"},
|
|
3474
|
+
{"key":"L0018","section":"your profile","text":"Display name","placement":"placed","file":"modules/public-landing/public/account.html","line":161,"string_id":"97509672c5cc","state":"in"},
|
|
3475
|
+
{"key":"L0019","section":"your profile","text":"Your name","placement":"placed","file":"modules/public-landing/public/account.html","line":162,"string_id":"5f8ce59e698a","attr":"placeholder","state":"in"},
|
|
3476
|
+
{"key":"L0020","section":"your profile","text":"Bio","placement":"unplaced","state":"in"},
|
|
3477
|
+
{"key":"L0021","section":"your profile","text":"What you build, and what you would like to build next.","placement":"placed","file":"modules/public-landing/public/account.html","line":164,"string_id":"d0160e86c2bf","attr":"placeholder","state":"in"},
|
|
3478
|
+
{"key":"L0022","section":"your profile","text":"0 of 280 characters","placement":"placed","file":"modules/public-landing/public/account.html","line":165,"string_id":"98c8eeb65e17","state":"in-private"},
|
|
3479
|
+
{"key":"L0023","section":"your profile","text":"81 of 280 characters","placement":"unplaced","state":"in"},
|
|
3480
|
+
{"key":"L0024","section":"your profile","text":"Website","placement":"unplaced","state":"in"},
|
|
3481
|
+
{"key":"L0025","section":"your profile","text":"https://","placement":"unplaced","attr":"placeholder","state":"in"},
|
|
3482
|
+
{"key":"L0026","section":"your profile","text":"X","placement":"unplaced","state":"in"},
|
|
3483
|
+
{"key":"L0027","section":"your profile","text":"https://x.com/…","placement":"unplaced","attr":"placeholder","state":"in"},
|
|
3484
|
+
{"key":"L0028","section":"your profile","text":"LinkedIn","placement":"unplaced","state":"in"},
|
|
3485
|
+
{"key":"L0029","section":"your profile","text":"https://linkedin.com/in/…","placement":"unplaced","attr":"placeholder","state":"in"},
|
|
3486
|
+
{"key":"L0030","section":"your profile","text":"Discord","placement":"unplaced","state":"in"},
|
|
3487
|
+
{"key":"L0031","section":"your profile","text":"https://discord.gg/…","placement":"unplaced","attr":"placeholder","state":"in"},
|
|
3488
|
+
{"key":"L0032","section":"your profile","text":"Your bio is plain text, shown exactly as you write it. Links start with https://, and an X, LinkedIn or Discord link has to point at that site.","placement":"placed","file":"modules/public-landing/public/account.html","line":176,"string_id":"4f9e0fffcd3c","state":"in"},
|
|
3489
|
+
{"key":"L0033","section":"your profile","text":"save profile","placement":"placed","file":"modules/public-landing/public/account.html","line":177,"string_id":"56787ad7373b","state":"in"},
|
|
3490
|
+
{"key":"L0034","section":"your handle","text":"your handle","placement":"placed","file":"modules/public-landing/public/account.html","line":186,"string_id":"c56498c0d064","state":"in"},
|
|
3491
|
+
{"key":"L0035","section":"your handle","text":"The short name people find you by, the same in every project.","placement":"placed","file":"modules/public-landing/public/account.html","line":187,"string_id":"53dccf3e2ad9","state":"in"},
|
|
3492
|
+
{"key":"L0036","section":"your handle","text":"Handle","placement":"unplaced","state":"in"},
|
|
3493
|
+
{"key":"L0037","section":"your handle","text":"your-handle","placement":"unplaced","attr":"placeholder","state":"in"},
|
|
3494
|
+
{"key":"L0038","section":"your handle","text":"Lowercase letters, numbers and hyphens, up to 39. You can change it once a week, and your old handle keeps leading to you until you change it again.","placement":"placed","file":"modules/public-landing/public/account.html","line":191,"string_id":"5ceffa7b9d7e","state":"in"},
|
|
3495
|
+
{"key":"L0039","section":"your handle","text":"change handle","placement":"placed","file":"modules/public-landing/public/account.html","line":192,"string_id":"0a22c9a537b4","state":"in"},
|
|
3496
|
+
{"key":"L0040","section":"who can find you","text":"who can find you","placement":"placed","file":"modules/public-landing/public/account.html","line":203,"string_id":"7322eee6b8b4","state":"in"},
|
|
3497
|
+
{"key":"L0041","section":"who can find you","text":"Your profile page can be public or private, and recruiters are let in separately — so a private profile can still be reachable for work, and a public one can stay out of recruiting entirely.","placement":"placed","file":"modules/public-landing/public/account.html","line":204,"string_id":"38f40fb26117","state":"in"},
|
|
3498
|
+
{"key":"L0042","section":"who can find you","text":"Your profile page","placement":"placed","file":"modules/public-landing/public/account.html","line":207,"string_id":"2df3e63e4761","state":"in"},
|
|
3499
|
+
{"key":"L0043","section":"who can find you","text":"Public","placement":"unplaced","state":"in"},
|
|
3500
|
+
{"key":"L0044","section":"who can find you","text":"Anyone can open your profile page and find you by name.","placement":"placed","file":"modules/public-landing/public/account.html","line":209,"string_id":"2620b4583b20","state":"in"},
|
|
3501
|
+
{"key":"L0045","section":"who can find you","text":"Private","placement":"unplaced","state":"in"},
|
|
3502
|
+
{"key":"L0046","section":"who can find you","text":"Private hides the page from everyone — including you: it answers “not found” to every visitor, and you read your own record here instead.","placement":"placed","file":"modules/public-landing/public/account.html","line":210,"string_id":"082156998085","state":"in"},
|
|
3503
|
+
{"key":"L0047","section":"who can find you","text":"Recruiters","placement":"unplaced","state":"in"},
|
|
3504
|
+
{"key":"L0048","section":"who can find you","text":"Can find me","placement":"placed","file":"modules/public-landing/public/account.html","line":216,"string_id":"50d493f08964","state":"in"},
|
|
3505
|
+
{"key":"L0049","section":"who can find you","text":"Recruiters looking for builders can find you.","placement":"placed","file":"modules/public-landing/public/account.html","line":216,"string_id":"604f5274ae98","state":"in"},
|
|
3506
|
+
{"key":"L0050","section":"who can find you","text":"Can’t find me","placement":"placed","file":"modules/public-landing/public/account.html","line":217,"string_id":"48d721eb2ed7","state":"in"},
|
|
3507
|
+
{"key":"L0051","section":"who can find you","text":"You stay out of the recruiting directory and a recruiter’s look-up.","placement":"placed","file":"modules/public-landing/public/account.html","line":217,"string_id":"af2177106d7c","state":"in"},
|
|
3508
|
+
{"key":"L0052","section":"who can find you","text":"Because your cross-project record is hidden, they will see your name and your picture, and nothing else. This is the one thing a recruiter can see while your profile page is {…}. Turning this off removes you from both recruiting surfaces — the recruiting directory, and a recruiter’s look-up of one {…} — straight away.","placement":"unplaced","state":"in-private"},
|
|
3509
|
+
{"key":"L0053","section":"who can find you","text":"They will see your name, your picture, your roles, and whether you have been {…} in the last 30 days — never your {…}, works shipped, karma, or the projects you build on. This is the one thing a recruiter can see while your profile page is {…}. Turning this off removes you from both recruiting surfaces — the recruiting directory, and a recruiter’s look-up of one {…} — straight away.","placement":"unplaced","state":"in-privacy"},
|
|
3510
|
+
{"key":"L0054","section":"who can find you","text":"They will see your name, your picture, your roles, and whether you have been {…} in the last 30 days — never your {…}, works shipped, karma, or the projects you build on. Turning this off removes you from both recruiting surfaces — the recruiting directory, and a recruiter’s look-up of one {…} — straight away.","placement":"unplaced","state":"in"},
|
|
3511
|
+
{"key":"L0055","section":"who can find you","text":"· For now this follows your profile page setting.","placement":"unplaced","state":"in"},
|
|
3512
|
+
{"key":"L0056","section":"who can find you","text":"Your profile page setting applies now — private already answers “not found” everywhere your profile is read. Recruiter discoverability applies now too — switching it off removes you from both recruiting surfaces immediately, and back on puts you there again.","placement":"placed","file":"modules/public-landing/public/account.html","line":221,"string_id":"e0d6e4196161","state":"in"},
|
|
3513
|
+
{"key":"L0057","section":"who can find you","text":"save","placement":"unplaced","state":"in"},
|
|
3514
|
+
{"key":"L0058","section":"your record","text":"your record","placement":"placed","file":"modules/public-landing/public/account.html","line":232,"string_id":"b494287ce724","state":"in"},
|
|
3515
|
+
{"key":"L0059","section":"your record","text":"Your track record across every project you build on. Hiding it takes effect immediately everywhere — your profile, the recruiting directory, and a recruiter’s look-up of one builder.","placement":"placed","file":"modules/public-landing/public/account.html","line":233,"string_id":"f18600e9cff1","state":"in"},
|
|
3516
|
+
{"key":"L0060","section":"your record","text":"No cross-project activity reported yet. Your profile is not published yet; it publishes after your next sign-in.","placement":"unplaced","state":"in-private"},
|
|
3517
|
+
{"key":"L0061","section":"your record","text":"Your record: 3 projects · 1000 {…} · 19 works shipped · 10 karma.","placement":"unplaced","state":"in"},
|
|
3518
|
+
{"key":"L0062","section":"your record","text":"Show my cross-project record","placement":"placed","file":"modules/public-landing/public/account.html","line":237,"string_id":"19ba62ca1ce4","state":"in"},
|
|
3519
|
+
{"key":"L0063","section":"your record","text":"Show it","placement":"placed","file":"modules/public-landing/public/account.html","line":239,"string_id":"960b894c0ea1","state":"in"},
|
|
3520
|
+
{"key":"L0064","section":"your record","text":"Your numbers appear on your profile and in the directories.","placement":"placed","file":"modules/public-landing/public/account.html","line":239,"string_id":"b93f267cf549","state":"in"},
|
|
3521
|
+
{"key":"L0065","section":"your record","text":"Hide it","placement":"placed","file":"modules/public-landing/public/account.html","line":240,"string_id":"ccd4861996eb","state":"in"},
|
|
3522
|
+
{"key":"L0066","section":"your record","text":"Your numbers leave your profile and the directories. You always see them here.","placement":"placed","file":"modules/public-landing/public/account.html","line":240,"string_id":"312b422976f8","state":"in"},
|
|
3523
|
+
{"key":"L0067","section":"your record","text":"save","placement":"unplaced","state":"in"},
|
|
3524
|
+
{"key":"L0068","section":"footer","text":"A non-profit, capture-resistant commons.","placement":"shared","file":"modules/public-landing/public/account.html","line":250,"string_id":"afe83bbbd0d4","state":"in","occurrences":2},
|
|
3525
|
+
{"key":"L0069","section":"footer","text":"Built by agents, on Cloud Bongos.","placement":"shared","file":"modules/public-landing/public/account.html","line":250,"string_id":"bd315dd71ea7","state":"in","occurrences":2},
|
|
3526
|
+
{"key":"L0070","section":"footer","text":"Open source","placement":"shared","file":"modules/public-landing/public/account.html","line":250,"string_id":"d6314ddcc1d0","state":"in","occurrences":2},
|
|
3527
|
+
{"key":"L0071","section":"footer","text":"AGPL-3.0","placement":"shared","state":"in","occurrences":2},
|
|
3528
|
+
{"key":"L0072","section":"navigation","text":"Privacy","placement":"shared","state":"in","occurrences":2},
|
|
3529
|
+
{"key":"L0073","section":"navigation","text":"Terms","placement":"shared","state":"in","occurrences":2},
|
|
3530
|
+
{"key":"L0074","section":"navigation","text":"Contact","placement":"shared","state":"in","occurrences":2},
|
|
3531
|
+
{"key":"L0075","section":"navigation","text":"Builders' hall","placement":"shared","file":"modules/public-landing/public/account.html","line":250,"string_id":"90a128c97eae","state":"in","occurrences":2},
|
|
3532
|
+
{"key":"L0076","section":"your account","text":"Sign in with GitHub to change your handle, your bio and links, and who can find you.","placement":"placed","file":"modules/public-landing/public/account.html","line":140,"string_id":"57efe272685a"},
|
|
3533
|
+
{"key":"L0077","section":"your account","text":"Sign in with GitHub","placement":"placed","file":"modules/public-landing/public/account.html","line":143,"string_id":"df38941b25a6"}
|
|
3524
3534
|
]
|
|
3525
3535
|
},
|
|
3526
3536
|
{
|
|
@@ -47,18 +47,50 @@
|
|
|
47
47
|
// goal's tasks into these buckets:
|
|
48
48
|
// done — settled (shipped/confirmed/completed)
|
|
49
49
|
// active — a live claim ("in progress")
|
|
50
|
-
// ready — claimable now (
|
|
51
|
-
// blocked —
|
|
52
|
-
// backlog —
|
|
50
|
+
// ready — claimable now (promoted AND every dependency shipped)
|
|
51
|
+
// blocked — unclaimed with ≥1 unshipped dependency, WHATEVER the row says
|
|
52
|
+
// backlog — not promoted, no unmet deps (just not started)
|
|
53
|
+
|
|
54
|
+
// hasUnmetDeps — the claim gate's own question, asked in the browser: does
|
|
55
|
+
// this task wait on an edge whose target has not shipped? `blocked_by[]`
|
|
56
|
+
// already carries the per-edge `satisfied` flag (attachTaskDepSummaries,
|
|
57
|
+
// satisfied === target.status === 'shipped'), which is the same rule
|
|
58
|
+
// `POST /claims` runs before it refuses with DEPS_NOT_SHIPPED (ADR 0015).
|
|
59
|
+
// Task→task edges only, like the array it reads — the goal/criterion arms of
|
|
60
|
+
// CLAIMABLE_SQL's guard have no client-side shape to read, so this is a
|
|
61
|
+
// subset: it never calls a claimable task blocked, it only stops short of
|
|
62
|
+
// catching every blocked one.
|
|
63
|
+
const hasUnmetDeps = (t) => ((t && t.blocked_by) || []).some((d) => !d.satisfied);
|
|
64
|
+
|
|
53
65
|
function readinessOf(t) {
|
|
54
66
|
const s = t.status;
|
|
55
67
|
if (DONE_STATUSES.has(s)) return 'done';
|
|
56
68
|
if (CUT_STATUSES.has(s)) return 'cut';
|
|
57
69
|
if (s === 'active') return 'active';
|
|
70
|
+
// task 1004487 — ahead of the `ready` arm, and no longer backlog-only. A
|
|
71
|
+
// dependency added after promotion leaves the row at `ready`: ADR 0015
|
|
72
|
+
// rules that the STATUS is deliberately never demoted and the readers are
|
|
73
|
+
// what change (core_264 did it for the claimable feed). Readiness is the
|
|
74
|
+
// derived question "can a builder claim this right now?", so a dep-blocked
|
|
75
|
+
// row belongs in this bucket however the status column reads.
|
|
76
|
+
if (hasUnmetDeps(t)) return 'blocked';
|
|
58
77
|
if (s === 'ready') return 'ready';
|
|
59
|
-
if (s === 'backlog' && (t.blocked_by || []).some((d) => !d.satisfied)) return 'blocked';
|
|
60
78
|
return 'backlog';
|
|
61
79
|
}
|
|
80
|
+
// taskStatusTagHtml — the lead tag a goal's task card shows when it is not
|
|
81
|
+
// offering a checkbox (task 1004487). A dep-blocked row reads "blocked" and
|
|
82
|
+
// names what it waits on, rather than echoing a `ready` status column that
|
|
83
|
+
// the claim gate will contradict — the same derivation `readinessOf` makes
|
|
84
|
+
// for the rollup counters, so the card and the goal's numbers agree. Every
|
|
85
|
+
// other row still shows its real status.
|
|
86
|
+
function taskStatusTagHtml(t) {
|
|
87
|
+
const esc = window.OTB.escapeHtml;
|
|
88
|
+
if (!hasUnmetDeps(t)) return `<span class="task__tag" title="Task status">${esc(t.status || '')}</span>`;
|
|
89
|
+
const waiting = (t.blocked_by || []).filter((d) => !d.satisfied)
|
|
90
|
+
.map((d) => `#${d.id} ${d.title || ''}`.trim()).join('\n');
|
|
91
|
+
return `<span class="task__tag" title="Waiting on ${esc(waiting)}">blocked</span>`;
|
|
92
|
+
}
|
|
93
|
+
|
|
62
94
|
const EMPTY_ROLLUP = { done: 0, active: 0, ready: 0, blocked: 0, backlog: 0, cut: 0, total: 0, nextReady: null };
|
|
63
95
|
|
|
64
96
|
// task 1002439 — a goal row's readiness rollup line (only the non-zero buckets).
|
|
@@ -139,7 +171,7 @@
|
|
|
139
171
|
window.OTBGoalsLib = {
|
|
140
172
|
DONE_STATUSES, CUT_STATUSES, isTodoStatus,
|
|
141
173
|
ring, memberName,
|
|
142
|
-
readinessOf, EMPTY_ROLLUP, goalRollLine,
|
|
174
|
+
hasUnmetDeps, taskStatusTagHtml, readinessOf, EMPTY_ROLLUP, goalRollLine,
|
|
143
175
|
matchesTodoSearch, msOf, taskActivityMs,
|
|
144
176
|
subtitleAttr, subtitleLine, applyGoalProse,
|
|
145
177
|
};
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
const { makePager, paginate, wirePager, pagerBarHtml, makeTabs, makeFilterBar,
|
|
28
28
|
emptyStateHtml, skeletonRows } = window.OTBKit;
|
|
29
29
|
const { DONE_STATUSES, CUT_STATUSES, isTodoStatus, ring, memberName,
|
|
30
|
-
readinessOf, EMPTY_ROLLUP, goalRollLine, matchesTodoSearch,
|
|
30
|
+
hasUnmetDeps, taskStatusTagHtml, readinessOf, EMPTY_ROLLUP, goalRollLine, matchesTodoSearch,
|
|
31
31
|
msOf, taskActivityMs, subtitleAttr, subtitleLine, applyGoalProse } = window.OTBGoalsLib;
|
|
32
32
|
const forestRender = window.OTBGoalForestRender(ctx);
|
|
33
33
|
// task 1004402 — criterion-uat-ui.js. If that script failed to load, the page
|
|
@@ -347,7 +347,11 @@
|
|
|
347
347
|
// work is the case that needed it most.
|
|
348
348
|
const ageChip = window.OTBKit.ageChipHtml(t.created_at);
|
|
349
349
|
const claim = state.claimsByTask.get(id);
|
|
350
|
-
|
|
350
|
+
// task 1004487 — `ready` is not enough: a dependency added after promotion
|
|
351
|
+
// leaves the row at `ready` and POST /claims still refuses it. Predicate
|
|
352
|
+
// and lead tag are both goals-lib.js's, because both are pure.
|
|
353
|
+
const isReadyNow = t.status === 'ready' && !hasUnmetDeps(t);
|
|
354
|
+
const isReady = isReadyNow && !!state.me;
|
|
351
355
|
const mineActive = t.status === 'active' && claim && sameId(claim.builder_id, selfId());
|
|
352
356
|
const releaseKey = mineActive ? String(claim.claim_id) : null;
|
|
353
357
|
const selected = isReady ? goalSel.claim.has(id) : (mineActive && goalSel.release.has(releaseKey));
|
|
@@ -358,7 +362,7 @@
|
|
|
358
362
|
? `<input type="checkbox" class="task__select" data-task-id="${escapeHtml(id)}" aria-label="Select task ${escapeHtml(id)} for bulk claim"${selected ? ' checked' : ''}>`
|
|
359
363
|
: (mineActive
|
|
360
364
|
? `<input type="checkbox" class="wip__select" data-claim-id="${escapeHtml(releaseKey)}" data-task-id="${escapeHtml(id)}" aria-label="Select task ${escapeHtml(id)} for bulk release"${selected ? ' checked' : ''}>`
|
|
361
|
-
:
|
|
365
|
+
: taskStatusTagHtml(t));
|
|
362
366
|
// Actions: ready → Claim + copy; mine-active → Release; other's active →
|
|
363
367
|
// "claimed · @who"; anything else → nothing (open via the title / card).
|
|
364
368
|
let actions = '';
|
|
@@ -404,7 +408,9 @@
|
|
|
404
408
|
const goalSel = { claim: new Set(), release: new Map() };
|
|
405
409
|
function goalSelTotal() { return goalSel.claim.size + goalSel.release.size; }
|
|
406
410
|
function pruneGoalSelection() {
|
|
407
|
-
|
|
411
|
+
// The same gate the card renders (task 1004487): a tick left on a
|
|
412
|
+
// dep-blocked `ready` row rides into a bulk claim the server refuses.
|
|
413
|
+
const readyIds = new Set(state.work.todo.filter((t) => t.status === 'ready' && !hasUnmetDeps(t)).map((t) => String(t.id)));
|
|
408
414
|
for (const id of Array.from(goalSel.claim)) if (!readyIds.has(id)) goalSel.claim.delete(id);
|
|
409
415
|
const mineClaimIds = new Set(
|
|
410
416
|
state.work.todo
|
|
@@ -1092,8 +1098,11 @@
|
|
|
1092
1098
|
}
|
|
1093
1099
|
async function loadGoalTasks(goalId) {
|
|
1094
1100
|
try {
|
|
1101
|
+
// ?include=deps (task 1004487) — the cards need `blocked_by[]` to tell a
|
|
1102
|
+
// claimable `ready` row from one whose dependencies have not shipped. Two
|
|
1103
|
+
// aggregate queries over ONE goal's tasks, so the cost stays bounded.
|
|
1095
1104
|
const [resp] = await Promise.all([
|
|
1096
|
-
getJSON(`${API}/tasks?goal_id=${encodeURIComponent(goalId)}`),
|
|
1105
|
+
getJSON(`${API}/tasks?goal_id=${encodeURIComponent(goalId)}&include=deps`),
|
|
1097
1106
|
loadActiveClaims(), // fills state.claimsByTask (best-effort)
|
|
1098
1107
|
]);
|
|
1099
1108
|
if (!sameId(state.current, goalId)) return; // navigated away while loading
|