@bongos/core 1.20.75 → 1.20.76

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.
@@ -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":4410,"placed":1539,"shared":245,"unplaced":2626,"omitted_data":2232},
8
+ "counts": {"pages":40,"lines":4440,"placed":1545,"shared":245,"unplaced":2650,"omitted_data":2243},
9
9
  "pages": [
10
10
  {
11
11
  "id": "builders:atlas",
@@ -2179,128 +2179,158 @@
2179
2179
  "id": "builders:profile",
2180
2180
  "surface": "builders",
2181
2181
  "title": "Profile",
2182
- "states_read": ["own","works","activity","other","out"],
2183
- "files_hash": "fa18cfe0b026559b",
2184
- "reading_hash": "c97a395a2b823405",
2185
- "counts": {"lines":115,"placed":48,"shared":5,"unplaced":62},
2186
- "omitted": {"data":172},
2182
+ "states_read": ["own","works","activity","other","artist","ideator","out"],
2183
+ "files_hash": "2625a4658cb7c71d",
2184
+ "reading_hash": "80813a201a6ba732",
2185
+ "counts": {"lines":145,"placed":54,"shared":5,"unplaced":86},
2186
+ "omitted": {"data":183},
2187
2187
  "notes": [],
2188
2188
  "lines": [
2189
2189
  {"key":"L0001","section":"skip link","text":"Skip to content","placement":"shared","file":"modules/hall-ui/public/shell.js","line":884,"string_id":"87cee78ca134"},
2190
2190
  {"key":"L0002","section":"top bar","text":"Profile","placement":"shared"},
2191
2191
  {"key":"L0003","section":"top bar","text":"Jump to…","placement":"shared","file":"modules/hall-ui/public/shell.js","line":495,"string_id":"eba610d25523"},
2192
2192
  {"key":"L0004","section":"top bar","text":"Ctrl K","placement":"shared"},
2193
- {"key":"L0005","section":"page top","text":"the page everyone else reads","placement":"placed","file":"modules/hall-ui/public/profile.html","line":32,"string_id":"95854f8315ca"},
2193
+ {"key":"L0005","section":"page top","text":"the page everyone else reads","placement":"placed","file":"modules/hall-ui/public/profile.html","line":33,"string_id":"95854f8315ca"},
2194
2194
  {"key":"L0006","section":"profile","text":"profile","placement":"unplaced"},
2195
- {"key":"L0007","section":"profile","text":"{…} — {…} · 24 works {…}","placement":"unplaced"},
2196
- {"key":"L0008","section":"profile","text":"Overview","placement":"unplaced"},
2197
- {"key":"L0009","section":"profile","text":"Works","placement":"unplaced"},
2198
- {"key":"L0010","section":"profile","text":"Activity","placement":"unplaced"},
2199
- {"key":"L0011","section":"profile","text":"Connections","placement":"unplaced"},
2200
- {"key":"L0012","section":"Activity, by role","text":"Activity, by role","placement":"placed","file":"modules/hall-ui/public/profile.html","line":133,"string_id":"d628b36ec58e","state":"activity"},
2201
- {"key":"L0013","section":"Activity, by role","text":"What this builder has done, seen one role at a time.","placement":"placed","file":"modules/hall-ui/public/profile.html","line":134,"string_id":"a444ad812e4f","state":"activity"},
2202
- {"key":"L0014","section":"Activity, by role","text":"All","placement":"unplaced","state":"activity"},
2203
- {"key":"L0015","section":"Activity, by role","text":"Artist","placement":"unplaced","state":"activity"},
2204
- {"key":"L0016","section":"Activity, by role","text":"Ideator","placement":"unplaced","state":"activity"},
2205
- {"key":"L0017","section":"Activity, by role","text":"UI","placement":"unplaced","state":"activity"},
2206
- {"key":"L0018","section":"Works completed","text":"Works completed","placement":"placed","file":"modules/hall-ui/public/profile.html","line":140,"string_id":"0e6b8e8f26cc","state":"activity"},
2207
- {"key":"L0019","section":"Works completed","text":"Work","placement":"unplaced","state":"activity"},
2208
- {"key":"L0020","section":"Works completed","text":"Role","placement":"unplaced","state":"activity"},
2209
- {"key":"L0021","section":"Works completed","text":"Shipped","placement":"placed","file":"modules/hall-ui/public/task.js","line":705,"string_id":"0c0a50ba1666","state":"activity"},
2210
- {"key":"L0022","section":"Works completed","text":"{…} file{…}","placement":"placed","file":"modules/hall-ui/public/gate.js","line":151,"string_id":"3efa67dc6e07","state":"activity","occurrences":3},
2211
- {"key":"L0023","section":"Works completed","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","state":"activity"},
2212
- {"key":"L0024","section":"Works completed","text":"UI","placement":"unplaced","state":"activity","occurrences":6},
2213
- {"key":"L0025","section":"Works completed","text":"{…} of {…}","placement":"placed","file":"modules/hall-ui/public/sky-panel.js","line":120,"string_id":"73c1372b43d9","state":"activity","occurrences":2},
2214
- {"key":"L0026","section":"Works completed","text":"Artist","placement":"unplaced","state":"activity","occurrences":3},
2215
- {"key":"L0027","section":"Works completed","text":"Ideator","placement":"unplaced","state":"activity"},
2216
- {"key":"L0028","section":"Works completed","text":"Per page","placement":"placed","file":"modules/hall-ui/public/hall-kit.js","line":74,"string_id":"4a46b478edaf","state":"activity"},
2217
- {"key":"L0029","section":"Works completed","text":"‹ Prev","placement":"placed","file":"modules/hall-ui/public/hall-kit.js","line":74,"string_id":"de8fa5223aee","state":"activity"},
2218
- {"key":"L0030","section":"Works completed","text":"Page {…} of {…}","placement":"placed","file":"modules/hall-ui/public/hall-kit.js","line":112,"string_id":"15a49bf15007","state":"activity"},
2219
- {"key":"L0031","section":"Works completed","text":"Next ›","placement":"placed","file":"modules/hall-ui/public/hall-kit.js","line":74,"string_id":"f52ba261d930","state":"activity"},
2220
- {"key":"L0032","section":"Goals created","text":"Goals created","placement":"placed","file":"modules/hall-ui/public/profile.html","line":145,"string_id":"6a85997bda21","state":"activity"},
2221
- {"key":"L0033","section":"Goals created","text":"Goal","placement":"placed","file":"modules/hall-ui/public/gate.js","line":288,"string_id":"ec88b946ad16","state":"activity"},
2222
- {"key":"L0034","section":"Goals created","text":"Roles","placement":"unplaced","state":"activity"},
2223
- {"key":"L0035","section":"Goals created","text":"Progress","placement":"unplaced","state":"activity"},
2224
- {"key":"L0036","section":"Goals created","text":"{…} of {…} shipped","placement":"placed","file":"modules/hall-ui/public/profile.js","line":612,"string_id":"c3d9687e2375","state":"activity","occurrences":2},
2225
- {"key":"L0037","section":"Goals created","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","state":"activity"},
2226
- {"key":"L0038","section":"Ideas filed, and what became of them","text":"Ideas filed, and what became of them","placement":"placed","file":"modules/hall-ui/public/profile.html","line":152,"string_id":"d4e21769ce1c","state":"activity"},
2227
- {"key":"L0039","section":"Ideas filed, and what became of them","text":"Every idea this builder captured — promoted, discarded, merged, or still open.","placement":"placed","file":"modules/hall-ui/public/profile.html","line":153,"string_id":"8825f1d90dd1","state":"activity"},
2228
- {"key":"L0040","section":"Ideas filed, and what became of them","text":"Idea","placement":"placed","file":"modules/hall-ui/public/idea.js","line":445,"string_id":"a4ff1e9c34e3","state":"activity"},
2229
- {"key":"L0041","section":"Ideas filed, and what became of them","text":"{…} of {…}","placement":"placed","file":"modules/hall-ui/public/sky-panel.js","line":120,"string_id":"73c1372b43d9","state":"activity"},
2230
- {"key":"L0042","section":"Ideas filed, and what became of them","text":"Filed","placement":"unplaced","state":"activity"},
2231
- {"key":"L0043","section":"Ideas filed, and what became of them","text":"{…} project{…}","placement":"placed","file":"modules/hall-ui/public/fleet.js","line":39,"string_id":"771bef3d31b5","state":"activity","occurrences":2},
2232
- {"key":"L0044","section":"Ideas filed, and what became of them","text":"Became a task","placement":"unplaced","state":"activity"},
2233
- {"key":"L0045","section":"Ideas filed, and what became of them","text":"{…} file{…}","placement":"placed","file":"modules/hall-ui/public/gate.js","line":151,"string_id":"3efa67dc6e07","state":"activity"},
2234
- {"key":"L0046","section":"Ideas filed, and what became of them","text":"Then caused 2 {…}","placement":"unplaced","state":"activity"},
2235
- {"key":"L0047","section":"Ideas filed, and what became of them","text":"{…} · depth 1 · {…}","placement":"unplaced","state":"activity","occurrences":3},
2236
- {"key":"L0048","section":"Ideas filed, and what became of them","text":"{…} · depth 2 · {…}","placement":"unplaced","state":"activity"},
2237
- {"key":"L0049","section":"Ideas filed, and what became of them","text":"Earned 240 {…} so far","placement":"unplaced","state":"activity"},
2238
- {"key":"L0050","section":"Ideas filed, and what became of them","text":"Became 2 {…}","placement":"unplaced","state":"activity","occurrences":2},
2239
- {"key":"L0051","section":"Ideas filed, and what became of them","text":"Then caused 1 task","placement":"unplaced","state":"activity","occurrences":2},
2240
- {"key":"L0052","section":"Ideas filed, and what became of them","text":"Earned 96 {…} so far","placement":"unplaced","state":"activity"},
2241
- {"key":"L0053","section":"Ideas filed, and what became of them","text":"Still open","placement":"placed","file":"modules/hall-ui/public/profile.js","line":511,"string_id":"efe530c0e3a7","state":"activity"},
2242
- {"key":"L0054","section":"Ideas filed, and what became of them","text":"Merged into","placement":"placed","file":"modules/hall-ui/public/profile.js","line":506,"string_id":"c7a670e9552d","state":"activity"},
2243
- {"key":"L0055","section":"Ideas filed, and what became of them","text":"Earned 12 {…} so far","placement":"unplaced","state":"activity"},
2244
- {"key":"L0056","section":"Ideas filed, and what became of them","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","state":"activity","occurrences":2},
2245
- {"key":"L0057","section":"Ideas filed, and what became of them","text":"Earned 180 {…} so far","placement":"unplaced","state":"activity"},
2246
- {"key":"L0058","section":"Ideas filed, and what became of them","text":"{…} of {…} shipped","placement":"placed","file":"modules/hall-ui/public/profile.js","line":612,"string_id":"c3d9687e2375","state":"activity"},
2247
- {"key":"L0059","section":"Ideas filed, and what became of them","text":"Discarded","placement":"unplaced","state":"activity"},
2248
- {"key":"L0060","section":"footer","text":"Sign out","placement":"shared","file":"modules/hall-ui/public/shell.js","line":471,"string_id":"1883ad7f07fc","state":"activity","occurrences":3},
2249
- {"key":"L0061","section":"Works","text":"Works","placement":"unplaced","state":"works"},
2250
- {"key":"L0062","section":"Works","text":"Everything this builder has shipped. Seen one role at a time, with goals and ideas, under","placement":"placed","file":"modules/hall-ui/public/profile.html","line":108,"string_id":"37110f7e2b27","state":"works"},
2251
- {"key":"L0063","section":"Works","text":"activity","placement":"unplaced","state":"works"},
2252
- {"key":"L0064","section":"Works","text":"Work","placement":"unplaced","state":"works"},
2253
- {"key":"L0065","section":"Works","text":"Credits","placement":"unplaced","state":"works"},
2254
- {"key":"L0066","section":"Works","text":"Shipped","placement":"placed","file":"modules/hall-ui/public/task.js","line":705,"string_id":"0c0a50ba1666","state":"works"},
2255
- {"key":"L0067","section":"Works","text":"{…} file{…}","placement":"placed","file":"modules/hall-ui/public/gate.js","line":151,"string_id":"3efa67dc6e07","state":"works","occurrences":3},
2256
- {"key":"L0068","section":"Works","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","state":"works"},
2257
- {"key":"L0069","section":"Works","text":"{…} of {…}","placement":"placed","file":"modules/hall-ui/public/sky-panel.js","line":120,"string_id":"73c1372b43d9","state":"works"},
2258
- {"key":"L0070","section":"profile","text":"Member since {…}","placement":"placed","file":"modules/hall-ui/public/profile.js","line":94,"string_id":"df335a1224ae"},
2259
- {"key":"L0071","section":"profile","text":"Preferred work:","placement":"placed","file":"modules/hall-ui/public/profile.js","line":87,"string_id":"ed8edd684547"},
2260
- {"key":"L0072","section":"profile","text":"Answerable for:","placement":"placed","file":"modules/hall-ui/public/profile.js","line":72,"string_id":"0293418d5e8e"},
2261
- {"key":"L0073","section":"profile","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232"},
2262
- {"key":"L0074","section":"profile","text":"karma","placement":"unplaced"},
2263
- {"key":"L0075","section":"By the numbers","text":"By the numbers","placement":"placed","file":"modules/hall-ui/public/profile.html","line":60,"string_id":"181cfa50b127"},
2264
- {"key":"L0076","section":"By the numbers","text":"Works {…}","placement":"unplaced"},
2265
- {"key":"L0077","section":"By the numbers","text":"Achievements","placement":"unplaced"},
2266
- {"key":"L0078","section":"By the numbers","text":"earned","placement":"placed","file":"modules/hall-ui/public/goals-render.js","line":822,"string_id":"cf89ac85440d"},
2267
- {"key":"L0079","section":"Over time","text":"Over time","placement":"placed","file":"modules/hall-ui/public/profile.html","line":72,"string_id":"695ffff13730"},
2268
- {"key":"L0080","section":"Over time","text":"30 days","placement":"unplaced"},
2269
- {"key":"L0081","section":"Over time","text":"90 days","placement":"unplaced"},
2270
- {"key":"L0082","section":"Over time","text":"1 year","placement":"unplaced"},
2271
- {"key":"L0083","section":"Over time","text":"All time","placement":"placed","file":"modules/hall-ui/public/hall-widgets.js","line":161,"string_id":"627c683a5e5d"},
2272
- {"key":"L0084","section":"Over time","text":"Works {…}","placement":"unplaced"},
2273
- {"key":"L0085","section":"Over time","text":"{…} of {…}","placement":"placed","file":"modules/hall-ui/public/sky-panel.js","line":120,"string_id":"73c1372b43d9","occurrences":3},
2274
- {"key":"L0086","section":"Over time","text":"24 works","placement":"unplaced"},
2275
- {"key":"L0087","section":"Over time","text":"today","placement":"unplaced","occurrences":2},
2276
- {"key":"L0088","section":"Over time","text":"as a table","placement":"placed","file":"modules/hall-ui/public/profile-charts.js","line":205,"string_id":"b4033000c537","occurrences":3},
2277
- {"key":"L0089","section":"Over time","text":"24 total · all time","placement":"unplaced"},
2278
- {"key":"L0090","section":"Over time","text":"{…} earned","placement":"placed","file":"modules/hall-ui/public/goals-render.js","line":822,"string_id":"cf89ac85440d"},
2279
- {"key":"L0091","section":"Over time","text":"16,035 paid, from the {…} ledger · all time","placement":"unplaced"},
2280
- {"key":"L0092","section":"Over time","text":"Works by role","placement":"unplaced"},
2281
- {"key":"L0093","section":"Over time","text":"UI","placement":"unplaced"},
2282
- {"key":"L0094","section":"Over time","text":"Artist","placement":"unplaced"},
2283
- {"key":"L0095","section":"Over time","text":"No role yet","placement":"unplaced"},
2284
- {"key":"L0096","section":"Over time","text":"Ideator","placement":"unplaced"},
2285
- {"key":"L0097","section":"Over time","text":"24 works · all time","placement":"unplaced"},
2286
- {"key":"L0098","section":"Over time","text":"Your pace, by week","placement":"unplaced"},
2287
- {"key":"L0099","section":"Over time","text":"this week","placement":"unplaced"},
2288
- {"key":"L0100","section":"Over time","text":"61 in the last 90 days · only you see this one","placement":"unplaced"},
2289
- {"key":"L0101","section":"Achievements","text":"Achievements","placement":"unplaced"},
2290
- {"key":"L0102","section":"Achievements","text":"Won {…}","placement":"placed","file":"modules/hall-ui/public/profile.js","line":168,"string_id":"c5fd76a9e03d","occurrences":2},
2291
- {"key":"L0103","section":"Cross-project record","text":"Cross-project record","placement":"placed","file":"modules/hall-ui/public/profile.html","line":94,"string_id":"a55e423263f0"},
2292
- {"key":"L0104","section":"Cross-project record","text":"Projects","placement":"unplaced"},
2293
- {"key":"L0105","section":"Cross-project record","text":"Works {…}","placement":"unplaced"},
2294
- {"key":"L0106","section":"Cross-project record","text":"Credits","placement":"unplaced"},
2295
- {"key":"L0107","section":"Cross-project record","text":"Karma","placement":"unplaced"},
2296
- {"key":"L0108","section":"Cross-project record","text":"Roles: {…}, UI · Last {…} {…}","placement":"unplaced"},
2297
- {"key":"L0109","section":"Cross-project record","text":"Project","placement":"unplaced"},
2298
- {"key":"L0110","section":"Cross-project record","text":"Standing there","placement":"placed","file":"modules/hall-ui/public/profile.js","line":331,"string_id":"ec1c2dae4a90"},
2299
- {"key":"L0111","section":"Cross-project record","text":"Archon","placement":"unplaced"},
2300
- {"key":"L0112","section":"Cross-project record","text":"Metic","placement":"unplaced"},
2301
- {"key":"L0113","section":"Cross-project record","text":"+ {…} more project{…} not publicly listed.","placement":"placed","file":"modules/hall-ui/public/profile.js","line":337,"string_id":"646fab1157fe"},
2302
- {"key":"L0114","section":"Cross-project record","text":"This is you —","placement":"placed","file":"modules/hall-ui/public/profile.js","line":307,"string_id":"23f531302e9e"},
2303
- {"key":"L0115","section":"Cross-project record","text":"manage its visibility in Settings → Profile and privacy","placement":"placed","file":"modules/hall-ui/public/profile.js","line":307,"string_id":"bc7923324b96"}
2195
+ {"key":"L0007","section":"profile","text":"{…} file{…}","placement":"placed","file":"modules/hall-ui/public/gate.js","line":151,"string_id":"3efa67dc6e07","state":"ideator","occurrences":2},
2196
+ {"key":"L0008","section":"profile","text":"{…} — {…} · 9 pages approved","placement":"unplaced","state":"artist"},
2197
+ {"key":"L0009","section":"profile","text":"{…} — {…} · 24 works {…}","placement":"unplaced"},
2198
+ {"key":"L0010","section":"profile","text":"Overview","placement":"unplaced"},
2199
+ {"key":"L0011","section":"profile","text":"Works","placement":"unplaced"},
2200
+ {"key":"L0012","section":"profile","text":"Activity","placement":"unplaced"},
2201
+ {"key":"L0013","section":"profile","text":"Connections","placement":"unplaced"},
2202
+ {"key":"L0014","section":"profile","text":"Member since {…}","placement":"placed","file":"modules/hall-ui/public/profile.js","line":118,"string_id":"df335a1224ae","state":"ideator","occurrences":3},
2203
+ {"key":"L0015","section":"profile","text":"Ideator, {…} role","placement":"unplaced","state":"ideator"},
2204
+ {"key":"L0016","section":"profile","text":"Artist, {…} role","placement":"unplaced","state":"artist"},
2205
+ {"key":"L0017","section":"Activity, by role","text":"Activity, by role","placement":"placed","file":"modules/hall-ui/public/profile.html","line":137,"string_id":"d628b36ec58e","state":"activity"},
2206
+ {"key":"L0018","section":"Activity, by role","text":"What this builder has done, seen one role at a time.","placement":"placed","file":"modules/hall-ui/public/profile.html","line":138,"string_id":"a444ad812e4f","state":"activity"},
2207
+ {"key":"L0019","section":"Activity, by role","text":"All","placement":"unplaced","state":"activity"},
2208
+ {"key":"L0020","section":"Activity, by role","text":"Artist","placement":"unplaced","state":"activity"},
2209
+ {"key":"L0021","section":"Activity, by role","text":"Ideator","placement":"unplaced","state":"activity"},
2210
+ {"key":"L0022","section":"Activity, by role","text":"UI","placement":"unplaced","state":"activity"},
2211
+ {"key":"L0023","section":"Works completed","text":"Works completed","placement":"placed","file":"modules/hall-ui/public/profile.html","line":144,"string_id":"0e6b8e8f26cc","state":"activity"},
2212
+ {"key":"L0024","section":"Works completed","text":"Work","placement":"unplaced","state":"activity"},
2213
+ {"key":"L0025","section":"Works completed","text":"Role","placement":"unplaced","state":"activity"},
2214
+ {"key":"L0026","section":"Works completed","text":"Shipped","placement":"placed","file":"modules/hall-ui/public/task.js","line":714,"string_id":"0c0a50ba1666","state":"activity"},
2215
+ {"key":"L0027","section":"Works completed","text":"{…} file{…}","placement":"placed","file":"modules/hall-ui/public/gate.js","line":151,"string_id":"3efa67dc6e07","state":"activity","occurrences":3},
2216
+ {"key":"L0028","section":"Works completed","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","state":"activity"},
2217
+ {"key":"L0029","section":"Works completed","text":"UI","placement":"unplaced","state":"activity","occurrences":6},
2218
+ {"key":"L0030","section":"Works completed","text":"{…} of {…}","placement":"placed","file":"modules/hall-ui/public/sky-panel.js","line":120,"string_id":"73c1372b43d9","state":"activity","occurrences":2},
2219
+ {"key":"L0031","section":"Works completed","text":"Artist","placement":"unplaced","state":"activity","occurrences":3},
2220
+ {"key":"L0032","section":"Works completed","text":"Ideator","placement":"unplaced","state":"activity"},
2221
+ {"key":"L0033","section":"Works completed","text":"Per page","placement":"placed","file":"modules/hall-ui/public/hall-kit.js","line":74,"string_id":"4a46b478edaf","state":"activity"},
2222
+ {"key":"L0034","section":"Works completed","text":"‹ Prev","placement":"placed","file":"modules/hall-ui/public/hall-kit.js","line":74,"string_id":"de8fa5223aee","state":"activity"},
2223
+ {"key":"L0035","section":"Works completed","text":"Page {…} of {…}","placement":"placed","file":"modules/hall-ui/public/hall-kit.js","line":112,"string_id":"15a49bf15007","state":"activity"},
2224
+ {"key":"L0036","section":"Works completed","text":"Next ›","placement":"placed","file":"modules/hall-ui/public/hall-kit.js","line":74,"string_id":"f52ba261d930","state":"activity"},
2225
+ {"key":"L0037","section":"Goals created","text":"Goals created","placement":"placed","file":"modules/hall-ui/public/profile.html","line":149,"string_id":"6a85997bda21","state":"activity"},
2226
+ {"key":"L0038","section":"Goals created","text":"Goal","placement":"placed","file":"modules/hall-ui/public/gate.js","line":288,"string_id":"ec88b946ad16","state":"activity"},
2227
+ {"key":"L0039","section":"Goals created","text":"Roles","placement":"unplaced","state":"activity"},
2228
+ {"key":"L0040","section":"Goals created","text":"Progress","placement":"unplaced","state":"activity"},
2229
+ {"key":"L0041","section":"Goals created","text":"{…} of {…} shipped","placement":"placed","file":"modules/hall-ui/public/profile.js","line":650,"string_id":"c3d9687e2375","state":"activity","occurrences":2},
2230
+ {"key":"L0042","section":"Goals created","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","state":"activity"},
2231
+ {"key":"L0043","section":"Ideas filed, and what became of them","text":"Ideas filed, and what became of them","placement":"placed","file":"modules/hall-ui/public/profile.html","line":156,"string_id":"d4e21769ce1c","state":"activity"},
2232
+ {"key":"L0044","section":"Ideas filed, and what became of them","text":"Every idea this builder captured — promoted, discarded, merged, or still open.","placement":"placed","file":"modules/hall-ui/public/profile.html","line":157,"string_id":"8825f1d90dd1","state":"activity"},
2233
+ {"key":"L0045","section":"Ideas filed, and what became of them","text":"Idea","placement":"placed","file":"modules/hall-ui/public/idea.js","line":445,"string_id":"a4ff1e9c34e3","state":"activity"},
2234
+ {"key":"L0046","section":"Ideas filed, and what became of them","text":"{…} of {…}","placement":"placed","file":"modules/hall-ui/public/sky-panel.js","line":120,"string_id":"73c1372b43d9","state":"activity"},
2235
+ {"key":"L0047","section":"Ideas filed, and what became of them","text":"Filed","placement":"unplaced","state":"activity"},
2236
+ {"key":"L0048","section":"Ideas filed, and what became of them","text":"{…} project{…}","placement":"placed","file":"modules/hall-ui/public/fleet.js","line":39,"string_id":"771bef3d31b5","state":"activity","occurrences":2},
2237
+ {"key":"L0049","section":"Ideas filed, and what became of them","text":"Became a task","placement":"unplaced","state":"activity"},
2238
+ {"key":"L0050","section":"Ideas filed, and what became of them","text":"{…} file{…}","placement":"placed","file":"modules/hall-ui/public/gate.js","line":151,"string_id":"3efa67dc6e07","state":"activity"},
2239
+ {"key":"L0051","section":"Ideas filed, and what became of them","text":"Then caused 2 {…}","placement":"unplaced","state":"activity"},
2240
+ {"key":"L0052","section":"Ideas filed, and what became of them","text":"{…} · depth 1 · {…}","placement":"unplaced","state":"activity","occurrences":3},
2241
+ {"key":"L0053","section":"Ideas filed, and what became of them","text":"{…} · depth 2 · {…}","placement":"unplaced","state":"activity"},
2242
+ {"key":"L0054","section":"Ideas filed, and what became of them","text":"Earned 240 {…} so far","placement":"unplaced","state":"activity"},
2243
+ {"key":"L0055","section":"Ideas filed, and what became of them","text":"Became 2 {…}","placement":"unplaced","state":"activity","occurrences":2},
2244
+ {"key":"L0056","section":"Ideas filed, and what became of them","text":"Then caused 1 task","placement":"unplaced","state":"activity","occurrences":2},
2245
+ {"key":"L0057","section":"Ideas filed, and what became of them","text":"Earned 96 {…} so far","placement":"unplaced","state":"activity"},
2246
+ {"key":"L0058","section":"Ideas filed, and what became of them","text":"Still open","placement":"placed","file":"modules/hall-ui/public/profile.js","line":549,"string_id":"efe530c0e3a7","state":"activity"},
2247
+ {"key":"L0059","section":"Ideas filed, and what became of them","text":"Merged into","placement":"placed","file":"modules/hall-ui/public/profile.js","line":544,"string_id":"c7a670e9552d","state":"activity"},
2248
+ {"key":"L0060","section":"Ideas filed, and what became of them","text":"Earned 12 {…} so far","placement":"unplaced","state":"activity"},
2249
+ {"key":"L0061","section":"Ideas filed, and what became of them","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","state":"activity","occurrences":2},
2250
+ {"key":"L0062","section":"Ideas filed, and what became of them","text":"Earned 180 {…} so far","placement":"unplaced","state":"activity"},
2251
+ {"key":"L0063","section":"Ideas filed, and what became of them","text":"{…} of {…} shipped","placement":"placed","file":"modules/hall-ui/public/profile.js","line":650,"string_id":"c3d9687e2375","state":"activity"},
2252
+ {"key":"L0064","section":"Ideas filed, and what became of them","text":"Discarded","placement":"unplaced","state":"activity"},
2253
+ {"key":"L0065","section":"footer","text":"Sign out","placement":"shared","file":"modules/hall-ui/public/shell.js","line":471,"string_id":"1883ad7f07fc","state":"activity","occurrences":4},
2254
+ {"key":"L0066","section":"Works","text":"Works","placement":"unplaced","state":"works"},
2255
+ {"key":"L0067","section":"Works","text":"Everything this builder has shipped. Seen one role at a time, with goals and ideas, under","placement":"placed","file":"modules/hall-ui/public/profile.html","line":112,"string_id":"37110f7e2b27","state":"works"},
2256
+ {"key":"L0068","section":"Works","text":"activity","placement":"unplaced","state":"works"},
2257
+ {"key":"L0069","section":"Works","text":"Work","placement":"unplaced","state":"works"},
2258
+ {"key":"L0070","section":"Works","text":"Credits","placement":"unplaced","state":"works"},
2259
+ {"key":"L0071","section":"Works","text":"Shipped","placement":"placed","file":"modules/hall-ui/public/task.js","line":714,"string_id":"0c0a50ba1666","state":"works"},
2260
+ {"key":"L0072","section":"Works","text":"{…} file{…}","placement":"placed","file":"modules/hall-ui/public/gate.js","line":151,"string_id":"3efa67dc6e07","state":"works","occurrences":3},
2261
+ {"key":"L0073","section":"Works","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","state":"works"},
2262
+ {"key":"L0074","section":"Works","text":"{…} of {…}","placement":"placed","file":"modules/hall-ui/public/sky-panel.js","line":120,"string_id":"73c1372b43d9","state":"works"},
2263
+ {"key":"L0075","section":"profile","text":"{…}, {…} role","placement":"unplaced"},
2264
+ {"key":"L0076","section":"profile","text":"Ideator","placement":"unplaced"},
2265
+ {"key":"L0077","section":"profile","text":"Answerable for:","placement":"placed","file":"modules/hall-ui/public/profile.js","line":72,"string_id":"0293418d5e8e"},
2266
+ {"key":"L0078","section":"profile","text":"{…} project{…}","placement":"placed","file":"modules/hall-ui/public/fleet.js","line":39,"string_id":"771bef3d31b5","state":"artist","occurrences":2},
2267
+ {"key":"L0079","section":"profile","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232"},
2268
+ {"key":"L0080","section":"profile","text":"ignited","placement":"unplaced","state":"ideator"},
2269
+ {"key":"L0081","section":"profile","text":"pages approved","placement":"unplaced","state":"artist"},
2270
+ {"key":"L0082","section":"profile","text":"this week","placement":"unplaced","state":"artist"},
2271
+ {"key":"L0083","section":"profile","text":"works {…}","placement":"unplaced"},
2272
+ {"key":"L0084","section":"profile","text":"karma","placement":"unplaced"},
2273
+ {"key":"L0085","section":"By the numbers","text":"By the numbers","placement":"placed","file":"modules/hall-ui/public/profile.html","line":64,"string_id":"181cfa50b127"},
2274
+ {"key":"L0086","section":"By the numbers","text":"works {…}","placement":"unplaced"},
2275
+ {"key":"L0087","section":"By the numbers","text":"all kinds, see below","placement":"unplaced"},
2276
+ {"key":"L0088","section":"By the numbers","text":"karma","placement":"unplaced"},
2277
+ {"key":"L0089","section":"By the numbers","text":"achievements","placement":"unplaced"},
2278
+ {"key":"L0090","section":"By the numbers","text":"earned","placement":"placed","file":"modules/hall-ui/public/goals-render.js","line":828,"string_id":"cf89ac85440d"},
2279
+ {"key":"L0091","section":"By the numbers","text":"pages approved","placement":"unplaced","state":"artist"},
2280
+ {"key":"L0092","section":"By the numbers","text":"3 surfaces","placement":"unplaced","state":"artist"},
2281
+ {"key":"L0093","section":"By the numbers","text":"{…} from pages","placement":"unplaced","state":"artist"},
2282
+ {"key":"L0094","section":"By the numbers","text":"this week","placement":"unplaced","state":"artist"},
2283
+ {"key":"L0095","section":"By the numbers","text":"{…} file{…}","placement":"placed","file":"modules/hall-ui/public/gate.js","line":151,"string_id":"3efa67dc6e07"},
2284
+ {"key":"L0096","section":"By the numbers","text":"ignited","placement":"unplaced","state":"ideator"},
2285
+ {"key":"L0097","section":"By the numbers","text":"became work","placement":"unplaced","state":"ideator"},
2286
+ {"key":"L0098","section":"By the numbers","text":"Full Ideas","placement":"unplaced","state":"ideator"},
2287
+ {"key":"L0099","section":"By the numbers","text":"1 ratified by the board","placement":"unplaced","state":"ideator"},
2288
+ {"key":"L0100","section":"By the numbers","text":"total size","placement":"unplaced","state":"ideator"},
2289
+ {"key":"L0101","section":"By the numbers","text":"{…}, every idea stream; ~ partly estimated","placement":"unplaced","state":"ideator"},
2290
+ {"key":"L0102","section":"By the numbers","text":"still alive","placement":"unplaced","state":"ideator"},
2291
+ {"key":"L0103","section":"By the numbers","text":"of {…}","placement":"placed","file":"modules/hall-ui/public/roadmap.js","line":288,"string_id":"5e7a2220c6a9","state":"ideator"},
2292
+ {"key":"L0104","section":"By the numbers","text":"1 ignited","placement":"unplaced","state":"artist"},
2293
+ {"key":"L0105","section":"pages tweaked, per surface","text":"pages tweaked, per surface","placement":"placed","file":"modules/hall-ui/public/profile.js","line":183,"string_id":"356573640ce1","state":"artist"},
2294
+ {"key":"L0106","section":"pages tweaked, per surface","text":"{…} of {…}","placement":"placed","file":"modules/hall-ui/public/sky-panel.js","line":120,"string_id":"73c1372b43d9","state":"artist","occurrences":3},
2295
+ {"key":"L0107","section":"By the numbers","text":"2 ignited","placement":"unplaced"},
2296
+ {"key":"L0108","section":"Over time","text":"Over time","placement":"placed","file":"modules/hall-ui/public/profile.html","line":76,"string_id":"695ffff13730"},
2297
+ {"key":"L0109","section":"Over time","text":"30 days","placement":"unplaced"},
2298
+ {"key":"L0110","section":"Over time","text":"90 days","placement":"unplaced"},
2299
+ {"key":"L0111","section":"Over time","text":"1 year","placement":"unplaced"},
2300
+ {"key":"L0112","section":"Over time","text":"All time","placement":"placed","file":"modules/hall-ui/public/hall-widgets.js","line":161,"string_id":"627c683a5e5d"},
2301
+ {"key":"L0113","section":"Over time","text":"Works {…}","placement":"unplaced"},
2302
+ {"key":"L0114","section":"Over time","text":"{…} of {…}","placement":"placed","file":"modules/hall-ui/public/sky-panel.js","line":120,"string_id":"73c1372b43d9","occurrences":3},
2303
+ {"key":"L0115","section":"Over time","text":"24 works","placement":"unplaced"},
2304
+ {"key":"L0116","section":"Over time","text":"today","placement":"unplaced","occurrences":2},
2305
+ {"key":"L0117","section":"Over time","text":"as a table","placement":"placed","file":"modules/hall-ui/public/profile-charts.js","line":205,"string_id":"b4033000c537","occurrences":3},
2306
+ {"key":"L0118","section":"Over time","text":"24 total · all time","placement":"unplaced"},
2307
+ {"key":"L0119","section":"Over time","text":"{…} earned","placement":"placed","file":"modules/hall-ui/public/goals-render.js","line":828,"string_id":"cf89ac85440d"},
2308
+ {"key":"L0120","section":"Over time","text":"16,035 paid, from the {…} ledger · all time","placement":"unplaced"},
2309
+ {"key":"L0121","section":"Over time","text":"Works by role","placement":"unplaced"},
2310
+ {"key":"L0122","section":"Over time","text":"UI","placement":"unplaced"},
2311
+ {"key":"L0123","section":"Over time","text":"Artist","placement":"unplaced"},
2312
+ {"key":"L0124","section":"Over time","text":"No role yet","placement":"unplaced"},
2313
+ {"key":"L0125","section":"Over time","text":"Ideator","placement":"unplaced"},
2314
+ {"key":"L0126","section":"Over time","text":"24 works · all time","placement":"unplaced"},
2315
+ {"key":"L0127","section":"Over time","text":"Your pace, by week","placement":"unplaced"},
2316
+ {"key":"L0128","section":"Over time","text":"this week","placement":"unplaced"},
2317
+ {"key":"L0129","section":"Over time","text":"61 in the last 90 days · only you see this one","placement":"unplaced"},
2318
+ {"key":"L0130","section":"Achievements","text":"Achievements","placement":"unplaced"},
2319
+ {"key":"L0131","section":"Achievements","text":"No achievements earned yet.","placement":"placed","file":"modules/hall-ui/public/profile.js","line":199,"string_id":"c255749ec989","state":"ideator"},
2320
+ {"key":"L0132","section":"Achievements","text":"Won {…}","placement":"placed","file":"modules/hall-ui/public/profile.js","line":206,"string_id":"c5fd76a9e03d","occurrences":2},
2321
+ {"key":"L0133","section":"Cross-project record","text":"Cross-project record","placement":"placed","file":"modules/hall-ui/public/profile.html","line":98,"string_id":"a55e423263f0"},
2322
+ {"key":"L0134","section":"Cross-project record","text":"Projects","placement":"unplaced"},
2323
+ {"key":"L0135","section":"Cross-project record","text":"Works {…}","placement":"unplaced"},
2324
+ {"key":"L0136","section":"Cross-project record","text":"Credits","placement":"unplaced"},
2325
+ {"key":"L0137","section":"Cross-project record","text":"Karma","placement":"unplaced"},
2326
+ {"key":"L0138","section":"Cross-project record","text":"Roles: {…}, UI · Last {…} {…}","placement":"unplaced"},
2327
+ {"key":"L0139","section":"Cross-project record","text":"Project","placement":"unplaced"},
2328
+ {"key":"L0140","section":"Cross-project record","text":"Standing there","placement":"placed","file":"modules/hall-ui/public/profile.js","line":369,"string_id":"ec1c2dae4a90"},
2329
+ {"key":"L0141","section":"Cross-project record","text":"Archon","placement":"unplaced"},
2330
+ {"key":"L0142","section":"Cross-project record","text":"Metic","placement":"unplaced"},
2331
+ {"key":"L0143","section":"Cross-project record","text":"+ {…} more project{…} not publicly listed.","placement":"placed","file":"modules/hall-ui/public/profile.js","line":375,"string_id":"646fab1157fe"},
2332
+ {"key":"L0144","section":"Cross-project record","text":"This is you —","placement":"placed","file":"modules/hall-ui/public/profile.js","line":345,"string_id":"23f531302e9e"},
2333
+ {"key":"L0145","section":"Cross-project record","text":"manage its visibility in Settings → Profile and privacy","placement":"placed","file":"modules/hall-ui/public/profile.js","line":345,"string_id":"bc7923324b96"}
2304
2334
  ]
2305
2335
  },
2306
2336
  {
@@ -0,0 +1,170 @@
1
+ // modules/hall-ui/public/profile-roles.js — what the profile's header and "By
2
+ // the numbers" say, for each craft (task 1004434 / WA6.RP04, goal 1000095,
3
+ // criterion wa6-roles-read-true-in-public).
4
+ //
5
+ // WHY. The profile led with "Works shipped" for everybody, so an artist with
6
+ // nine approved pages and an ideator with seven ignited thoughts both read as
7
+ // "0 works shipped": a person who had done real work looked like a person who
8
+ // had done none. The owner-approved mock (docs/design/mocks/profile-roles/, the
9
+ // pixel contract) has each craft lead with its own work: an engineer with works
10
+ // shipped, an artist with pages approved and the per-surface "N of M tweaked",
11
+ // an ideator with thoughts filed, ignited, size and what is still alive.
12
+ //
13
+ // WHERE THE NUMBERS COME FROM. The profile route's `roles` block (task 1004433,
14
+ // src/bongos/role-stats.js): `main` is the craft the builder chose (or, until
15
+ // they choose, the one they earned most in), `shown` is main first and then
16
+ // every other craft that has EARNED credits, in the order of their preferred
17
+ // crafts. This file decides nothing about which crafts a person has; it only
18
+ // says, for the crafts the server named, what to put on the page.
19
+ //
20
+ // PURE, like profile-charts.js: no document, no fetch, no window beyond the
21
+ // export at the foot, so a test requires it and runs the real wording against
22
+ // the real fixture instead of agreeing with a copy of it. profile.js turns the
23
+ // result into markup.
24
+ //
25
+ // A NUMBER THAT COULD NOT BE READ IS A DASH, NEVER A ZERO. The role ports are
26
+ // optional (an instance without the copy desk has no artist numbers); the
27
+ // server says so with `unavailable` and nulls, and "0 pages approved" would be
28
+ // a claim about the person rather than about the instance.
29
+
30
+ (function () {
31
+ 'use strict';
32
+
33
+ const CRAFT_WORD = Object.freeze({ engineer: 'Engineer', artist: 'Artist', ideator: 'Ideator' });
34
+ const DASH = '—';
35
+
36
+ function count(n) {
37
+ return Number.isFinite(n) ? n : null;
38
+ }
39
+ function plural(n, one, many) {
40
+ return n === 1 ? one : many;
41
+ }
42
+
43
+ // The crafts to show, main first. A response from before the roles block
44
+ // existed reads as the engineer it always rendered.
45
+ function craftsOf(roles) {
46
+ const shown = roles && Array.isArray(roles.shown) ? roles.shown.filter((c) => CRAFT_WORD[c]) : [];
47
+ return shown.length ? shown : ['engineer'];
48
+ }
49
+
50
+ function makeNum(fmt) {
51
+ return (n) => (count(n) == null ? DASH : fmt(n));
52
+ }
53
+
54
+ // The share of the work a person's thoughts caused that is still alive, as the
55
+ // tile shows it. A person whose thoughts caused nothing yet has no share at all
56
+ // (zero over zero), and one whose work could not be traced has an unknown one;
57
+ // both say so in the foot rather than drawing a 0%.
58
+ function aliveTile(alive) {
59
+ const a = alive || {};
60
+ if (Number.isFinite(a.share)) return { n: `${Math.round(a.share * 100)}%`, w: 'still alive', f: 'of the work they caused' };
61
+ if (a.has_work === false) return { n: DASH, w: 'still alive', f: 'nothing has come of them yet' };
62
+ return { n: DASH, w: 'still alive', f: 'not measurable yet' };
63
+ }
64
+
65
+ // headline(data, opts) — everything the header and "By the numbers" print.
66
+ // data the profile route's response ({ builder, shipped_count, achievements, roles })
67
+ // opts { fmt, currency, rank } — the page's number format, its currency word
68
+ // (branding, never hardcoded) and the rank's display label
69
+ // Returns { crafts, tally, tiles, surfaces, sub }.
70
+ function headline(data, opts = {}) {
71
+ const fmt = typeof opts.fmt === 'function' ? opts.fmt : (n) => Number(n).toLocaleString('en-US');
72
+ const num = makeNum(fmt);
73
+ const cur = opts.currency || 'credits';
74
+ const d = data || {};
75
+ const builder = d.builder || {};
76
+ const roles = d.roles || null;
77
+ const crafts = craftsOf(roles);
78
+ const main = crafts[0];
79
+ const shipped = Number(d.shipped_count) || 0;
80
+ const artist = (roles && roles.artist) || {};
81
+ const ideator = (roles && roles.ideator) || {};
82
+ const achievements = Array.isArray(d.achievements) ? d.achievements.length : 0;
83
+ const credits = { n: num(count(Number(builder.total_credits))), w: cur, lead: true };
84
+ const weekGain = (n) => (count(n) == null ? DASH : `+${fmt(n)}`);
85
+
86
+ // The tally: the person's total, then the two numbers their main craft leads with.
87
+ const LEAD = {
88
+ engineer: () => [{ n: num(shipped), w: plural(shipped, 'work shipped', 'works shipped') },
89
+ { n: num(count(Number(builder.karma))), w: 'karma' }],
90
+ artist: () => [{ n: num(artist.pages_approved), w: plural(artist.pages_approved, 'page approved', 'pages approved') },
91
+ { n: weekGain(artist.this_week), w: 'this week' }],
92
+ ideator: () => [{ n: num(ideator.filed), w: plural(ideator.filed, 'thought filed', 'thoughts filed') },
93
+ { n: num(ideator.ignited), w: 'ignited' }],
94
+ };
95
+
96
+ // The main craft's full set of tiles.
97
+ const surfacesWord = (n) => (count(n) == null ? '' : `${fmt(n)} ${plural(n, 'surface', 'surfaces')}`);
98
+ const MAIN = {
99
+ engineer: () => [
100
+ { n: num(shipped), w: plural(shipped, 'work shipped', 'works shipped') },
101
+ { n: num(count(Number(builder.total_credits))), w: cur, f: 'all kinds, see below' },
102
+ { n: num(count(Number(builder.karma))), w: 'karma' },
103
+ { n: num(achievements), w: plural(achievements, 'achievement', 'achievements'), f: 'earned' },
104
+ ],
105
+ artist: () => [
106
+ { n: num(artist.pages_approved), w: plural(artist.pages_approved, 'page approved', 'pages approved'), f: surfacesWord(artist.surfaces_touched) },
107
+ { n: num(artist.credits), w: `${cur} from pages` },
108
+ { n: weekGain(artist.this_week), w: 'this week' },
109
+ ],
110
+ ideator: () => {
111
+ const size = ideator.size || {};
112
+ const ratified = count(ideator.ratified);
113
+ return [
114
+ { n: num(ideator.filed), w: plural(ideator.filed, 'thought filed', 'thoughts filed') },
115
+ { n: num(ideator.ignited), w: 'ignited', f: 'became work' },
116
+ { n: num(ideator.full_ideas), w: plural(ideator.full_ideas, 'Full Idea', 'Full Ideas'), f: ratified == null ? '' : `${fmt(ratified)} ratified by the board` },
117
+ // The ~ is the sky's own mark for a size that includes a historical
118
+ // estimate (idea-size.js): the ledger did not record idea pay exactly
119
+ // before the streams were split, so part of the number is estimated.
120
+ { n: count(size.total) == null ? DASH : `${fmt(size.total)}${size.historical ? '~' : ''}`, w: 'total size',
121
+ f: size.historical ? `${cur}, every idea stream; ~ partly estimated` : `${cur}, every idea stream`,
122
+ title: size.historical ? `Includes ${fmt(size.estimated)} ${cur} of historical estimate, from before the ledger recorded idea pay exactly.` : '' },
123
+ aliveTile(ideator.alive),
124
+ ];
125
+ },
126
+ };
127
+
128
+ // Each OTHER craft a person has earned in gets its one headline tile, after
129
+ // the main craft's, in the order the server put them.
130
+ const SECOND = {
131
+ engineer: () => ({ n: num(shipped), w: plural(shipped, 'work shipped', 'works shipped') }),
132
+ artist: () => ({ n: num(artist.pages_approved), w: plural(artist.pages_approved, 'page approved', 'pages approved'), f: surfacesWord(artist.surfaces_touched) }),
133
+ ideator: () => ({ n: num(ideator.filed), w: plural(ideator.filed, 'thought filed', 'thoughts filed'), f: count(ideator.ignited) == null ? '' : `${fmt(ideator.ignited)} ignited` }),
134
+ };
135
+
136
+ const tiles = MAIN[main]().concat(crafts.slice(1).map((c) => SECOND[c]()));
137
+ // Karma is on every profile (the owner, 2026-10-01, reviewing this build:
138
+ // "karma for artists and ideators is definitely key"). The engineer's set
139
+ // already carries it; every other main craft ends with it.
140
+ if (main !== 'engineer') tiles.push({ n: num(count(Number(builder.karma))), w: 'karma' });
141
+
142
+ // The artist leads with the studio's "N of M tweaked", one row per surface.
143
+ const surfaces = main === 'artist' && Array.isArray(artist.surfaces)
144
+ ? artist.surfaces.filter((s) => s && Number(s.total) > 0).map((s) => ({
145
+ label: String(s.label || s.id || ''),
146
+ tweaked: Number(s.tweaked) || 0,
147
+ total: Number(s.total) || 0,
148
+ line: s.line || `${Number(s.tweaked) || 0} of ${Number(s.total) || 0} tweaked`,
149
+ }))
150
+ : [];
151
+
152
+ // The page subtitle under the h1: the main craft's headline, not always
153
+ // "works shipped".
154
+ const first = LEAD[main]()[0];
155
+ const name = builder.display_name || builder.github_login || 'Builder';
156
+ const sub = `${name} — ${opts.rank || ''} · ${first.n} ${first.w}`;
157
+
158
+ return {
159
+ crafts: crafts.map((c, i) => ({ craft: c, label: i === 0 ? `${CRAFT_WORD[c]}, main role` : CRAFT_WORD[c], lead: i === 0 })),
160
+ tally: [credits].concat(LEAD[main]()),
161
+ tiles,
162
+ surfaces,
163
+ sub,
164
+ };
165
+ }
166
+
167
+ const api = { headline };
168
+ if (typeof module !== 'undefined' && module.exports) module.exports = api;
169
+ if (typeof window !== 'undefined') window.OTBProfileRoles = api;
170
+ })();