@bongos/core 1.20.77 → 1.20.78

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.
Files changed (52) hide show
  1. package/.bongos-core.json +79 -54
  2. package/clients/bongos-client/README.md +1 -1
  3. package/clients/bongos-client/bongos-client.global.js +2 -0
  4. package/clients/bongos-client/index.cjs +2 -0
  5. package/clients/bongos-client/index.d.ts +3 -0
  6. package/clients/bongos-client/index.mjs +2 -0
  7. package/docs/adr/0136-update-channel-subscription-policy.md +1 -1
  8. package/docs/adr/0360-bongos-follows-every-candidate-every-other-project-follows-releases.md +66 -0
  9. package/docs/adr/README.md +1 -0
  10. package/docs/api/openapi.json +70 -3
  11. package/docs/api-reference.md +3 -2
  12. package/docs/copy-inventory.md +22 -14
  13. package/docs/copy-registry.json +125 -41
  14. package/docs/module-api-changelog.md +2 -0
  15. package/docs/page-inventory.json +5 -1
  16. package/docs/page-readings.json +150 -137
  17. package/docs/recipes/upgrading-the-core.md +11 -2
  18. package/modules/copy-desk/artist-stats.js +15 -1
  19. package/modules/copy-desk/module.json +1 -1
  20. package/modules/copy-desk/page-status.js +41 -0
  21. package/modules/copy-desk/routes/copy-desk-artist.js +44 -0
  22. package/modules/copy-desk/tests/copy_no_cms.mjs +11 -2
  23. package/modules/hall-ui/public/deploy.states.json +1 -1
  24. package/modules/hall-ui/public/profile-crafts.js +231 -0
  25. package/modules/hall-ui/public/profile.css +60 -0
  26. package/modules/hall-ui/public/profile.html +31 -12
  27. package/modules/hall-ui/public/profile.js +180 -75
  28. package/modules/hall-ui/public/profile.states.json +34 -0
  29. package/modules/hall-ui/public/sky-draw.js +66 -39
  30. package/modules/hall-ui/public/sky-interaction.js +1 -1
  31. package/modules/hall-ui/public/sky-panel.js +1 -1
  32. package/modules/hall-ui/public/thinking.css +52 -24
  33. package/modules/hall-ui/records/profile-roles.md +18 -0
  34. package/modules/npm-release/public/work.js +72 -0
  35. package/modules/npm-release/work.js +67 -1
  36. package/package-lock.json +2 -2
  37. package/package.json +1 -1
  38. package/release-notes.json +18 -0
  39. package/scripts/gds/update-channel.js +68 -1
  40. package/scripts/gds/update-sweep.js +100 -4
  41. package/scripts/migrate.sh +6 -2
  42. package/src/module-api.js +1 -1
  43. package/tests/hall_sky.mjs +77 -0
  44. package/tests/helpers.mjs +32 -7
  45. package/tests/migrate_applied_check.mjs +94 -0
  46. package/tests/npm_release_page.mjs +67 -0
  47. package/tests/npm_release_work.mjs +82 -0
  48. package/tests/profile_activity.mjs +23 -15
  49. package/tests/profile_role_headline.mjs +4 -4
  50. package/tests/profile_role_tabs.mjs +163 -0
  51. package/tests/update_channel.mjs +80 -1
  52. package/tests/update_subscription_engine.mjs +99 -0
@@ -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":4553,"placed":1607,"shared":245,"unplaced":2701,"omitted_data":2243},
8
+ "counts": {"pages":40,"lines":4566,"placed":1610,"shared":245,"unplaced":2711,"omitted_data":2252},
9
9
  "pages": [
10
10
  {
11
11
  "id": "builders:atlas",
@@ -1000,7 +1000,7 @@
1000
1000
  "surface": "builders",
1001
1001
  "title": "The sky",
1002
1002
  "states_read": ["tour","sky","wells","ledger","full","full-back","out"],
1003
- "files_hash": "449fa529062187bd",
1003
+ "files_hash": "0b0ecaf938df3b1f",
1004
1004
  "reading_hash": "9bfeb3f4c15eee3a",
1005
1005
  "counts": {"lines":72,"placed":30,"shared":5,"unplaced":37},
1006
1006
  "omitted": {"data":34},
@@ -2179,11 +2179,11 @@
2179
2179
  "id": "builders:profile",
2180
2180
  "surface": "builders",
2181
2181
  "title": "Profile",
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},
2182
+ "states_read": ["own","works","activity","activity-artist","activity-ideator","other","artist","ideator","out"],
2183
+ "files_hash": "3db839b94a6dac3b",
2184
+ "reading_hash": "f8399f66cb754d7a",
2185
+ "counts": {"lines":158,"placed":57,"shared":5,"unplaced":96},
2186
+ "omitted": {"data":192},
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"},
@@ -2192,8 +2192,8 @@
2192
2192
  {"key":"L0004","section":"top bar","text":"Ctrl K","placement":"shared"},
2193
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":"{…} 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"},
2195
+ {"key":"L0007","section":"profile","text":"{…} file{…}","placement":"placed","file":"modules/hall-ui/public/gate.js","line":151,"string_id":"3efa67dc6e07","state":"activity-ideator","occurrences":2},
2196
+ {"key":"L0008","section":"profile","text":"{…} — {…} · 9 pages approved","placement":"unplaced","state":"activity-artist"},
2197
2197
  {"key":"L0009","section":"profile","text":"{…} — {…} · 24 works {…}","placement":"unplaced"},
2198
2198
  {"key":"L0010","section":"profile","text":"Overview","placement":"unplaced"},
2199
2199
  {"key":"L0011","section":"profile","text":"Works","placement":"unplaced"},
@@ -2204,133 +2204,146 @@
2204
2204
  {"key":"L0016","section":"profile","text":"Artist, {…} role","placement":"unplaced","state":"artist"},
2205
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
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"}
2207
+ {"key":"L0019","section":"Activity, by role","text":"Artist","placement":"unplaced","state":"activity-artist"},
2208
+ {"key":"L0020","section":"Activity, by role","text":"Ideator","placement":"unplaced","state":"activity"},
2209
+ {"key":"L0021","section":"Activity, by role","text":"{…} file{…}","placement":"placed","file":"modules/hall-ui/public/gate.js","line":151,"string_id":"3efa67dc6e07","state":"activity-ideator","occurrences":3},
2210
+ {"key":"L0022","section":"Activity, by role","text":"Aug","placement":"unplaced","state":"activity-ideator"},
2211
+ {"key":"L0023","section":"Activity, by role","text":"Sep","placement":"unplaced","state":"activity-ideator"},
2212
+ {"key":"L0024","section":"Activity, by role","text":"burning","placement":"unplaced","state":"activity-ideator","occurrences":6},
2213
+ {"key":"L0025","section":"Activity, by role","text":"waiting","placement":"placed","file":"modules/hall-ui/public/work.js","line":420,"string_id":"8186b562553a","state":"activity-ideator","occurrences":3},
2214
+ {"key":"L0026","section":"Activity, by role","text":"folded in","placement":"unplaced","state":"activity-ideator","occurrences":2},
2215
+ {"key":"L0027","section":"Activity, by role","text":"burned out","placement":"unplaced","state":"activity-ideator","occurrences":2},
2216
+ {"key":"L0028","section":"Activity, by role","text":"declined","placement":"unplaced","state":"activity-ideator","occurrences":2},
2217
+ {"key":"L0029","section":"Activity, by role","text":"{…} of {…}","placement":"placed","file":"modules/hall-ui/public/sky-panel.js","line":120,"string_id":"73c1372b43d9","state":"activity-ideator","occurrences":6},
2218
+ {"key":"L0030","section":"Activity, by role","text":"Thought","placement":"unplaced","state":"activity-ideator"},
2219
+ {"key":"L0031","section":"Activity, by role","text":"State","placement":"unplaced","state":"activity-ideator"},
2220
+ {"key":"L0032","section":"Activity, by role","text":"Size","placement":"unplaced","state":"activity-ideator"},
2221
+ {"key":"L0033","section":"Activity, by role","text":"Still alive","placement":"unplaced","state":"activity-ideator"},
2222
+ {"key":"L0034","section":"Activity, by role","text":"64 cr","placement":"unplaced","state":"activity-ideator"},
2223
+ {"key":"L0035","section":"Activity, by role","text":"Became a task","placement":"unplaced","state":"activity-ideator","occurrences":6},
2224
+ {"key":"L0036","section":"Activity, by role","text":"Earned 64 {…} so far","placement":"unplaced","state":"activity-ideator"},
2225
+ {"key":"L0037","section":"Activity, by role","text":"42 cr","placement":"unplaced","state":"activity-ideator"},
2226
+ {"key":"L0038","section":"Activity, by role","text":"Earned 42 {…} so far","placement":"unplaced","state":"activity-ideator"},
2227
+ {"key":"L0039","section":"Activity, by role","text":"no size","placement":"placed","file":"modules/hall-ui/public/profile-crafts.js","line":156,"string_id":"8769ce8ea030","state":"activity-ideator","occurrences":4},
2228
+ {"key":"L0040","section":"Activity, by role","text":"Still open","placement":"placed","file":"modules/hall-ui/public/profile.js","line":544,"string_id":"efe530c0e3a7","state":"activity-ideator","occurrences":2},
2229
+ {"key":"L0041","section":"Activity, by role","text":"18 cr","placement":"unplaced","state":"activity-ideator"},
2230
+ {"key":"L0042","section":"Activity, by role","text":"Earned 18 {…} so far","placement":"unplaced","state":"activity-ideator"},
2231
+ {"key":"L0043","section":"Activity, by role","text":"22 cr","placement":"unplaced","state":"activity-ideator"},
2232
+ {"key":"L0044","section":"Activity, by role","text":"Merged into","placement":"placed","file":"modules/hall-ui/public/profile.js","line":539,"string_id":"c7a670e9552d","state":"activity-ideator"},
2233
+ {"key":"L0045","section":"Activity, by role","text":"Discarded","placement":"unplaced","state":"activity-ideator"},
2234
+ {"key":"L0046","section":"Activity, by role","text":"26 cr","placement":"unplaced","state":"activity-ideator"},
2235
+ {"key":"L0047","section":"Activity, by role","text":"Earned 26 {…} so far","placement":"unplaced","state":"activity-ideator"},
2236
+ {"key":"L0048","section":"Activity, by role","text":"10 cr","placement":"unplaced","state":"activity-ideator"},
2237
+ {"key":"L0049","section":"Activity, by role","text":"Earned 10 {…} so far","placement":"unplaced","state":"activity-ideator"},
2238
+ {"key":"L0050","section":"Activity, by role","text":"Per page","placement":"placed","file":"modules/hall-ui/public/hall-kit.js","line":74,"string_id":"4a46b478edaf","state":"activity-ideator"},
2239
+ {"key":"L0051","section":"Activity, by role","text":"‹ Prev","placement":"placed","file":"modules/hall-ui/public/hall-kit.js","line":74,"string_id":"de8fa5223aee","state":"activity-ideator"},
2240
+ {"key":"L0052","section":"Activity, by role","text":"Page {…} of {…}","placement":"placed","file":"modules/hall-ui/public/hall-kit.js","line":112,"string_id":"15a49bf15007","state":"activity-ideator"},
2241
+ {"key":"L0053","section":"Activity, by role","text":"Next ›","placement":"placed","file":"modules/hall-ui/public/hall-kit.js","line":74,"string_id":"f52ba261d930","state":"activity-ideator"},
2242
+ {"key":"L0054","section":"Activity, by role","text":"~ marks a size that includes a historical estimate.","placement":"unplaced","state":"activity-ideator"},
2243
+ {"key":"L0055","section":"Activity, by role","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","state":"activity-artist"},
2244
+ {"key":"L0056","section":"Activity, by role","text":"{…} · approved {…}","placement":"unplaced","state":"activity-artist","occurrences":4},
2245
+ {"key":"L0057","section":"Activity, by role","text":"{…} {…} changed","placement":"placed","file":"modules/hall-ui/public/profile-crafts.js","line":218,"string_id":"2f75f69cdb2f","state":"activity-artist","occurrences":4},
2246
+ {"key":"L0058","section":"Activity, by role","text":"before","placement":"unplaced","state":"activity-artist","occurrences":4},
2247
+ {"key":"L0059","section":"Activity, by role","text":"{…} project{…}","placement":"placed","file":"modules/hall-ui/public/fleet.js","line":39,"string_id":"771bef3d31b5","state":"activity-artist","occurrences":3},
2248
+ {"key":"L0060","section":"Activity, by role","text":"after","placement":"unplaced","state":"activity-artist","occurrences":4},
2249
+ {"key":"L0061","section":"footer","text":"Sign out","placement":"shared","file":"modules/hall-ui/public/shell.js","line":471,"string_id":"1883ad7f07fc","state":"activity-artist","occurrences":5},
2250
+ {"key":"L0062","section":"Works completed","text":"Works completed","placement":"placed","file":"modules/hall-ui/public/profile.html","line":148,"string_id":"0e6b8e8f26cc","state":"activity"},
2251
+ {"key":"L0063","section":"Works completed","text":"Role","placement":"unplaced","state":"activity"},
2252
+ {"key":"L0064","section":"Works completed","text":"Shipped","placement":"placed","file":"modules/hall-ui/public/task.js","line":714,"string_id":"0c0a50ba1666","state":"activity"},
2253
+ {"key":"L0065","section":"Works completed","text":"{…} file{…}","placement":"placed","file":"modules/hall-ui/public/gate.js","line":151,"string_id":"3efa67dc6e07","state":"activity","occurrences":3},
2254
+ {"key":"L0066","section":"Works completed","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","state":"activity"},
2255
+ {"key":"L0067","section":"Works completed","text":"UI","placement":"unplaced","state":"activity","occurrences":6},
2256
+ {"key":"L0068","section":"Works completed","text":"{…} of {…}","placement":"placed","file":"modules/hall-ui/public/sky-panel.js","line":120,"string_id":"73c1372b43d9","state":"activity","occurrences":2},
2257
+ {"key":"L0069","section":"Works completed","text":"Artist","placement":"unplaced","state":"activity","occurrences":3},
2258
+ {"key":"L0070","section":"Works completed","text":"Ideator","placement":"unplaced","state":"activity"},
2259
+ {"key":"L0071","section":"Works completed","text":"Per page","placement":"placed","file":"modules/hall-ui/public/hall-kit.js","line":74,"string_id":"4a46b478edaf","state":"activity"},
2260
+ {"key":"L0072","section":"Works completed","text":"‹ Prev","placement":"placed","file":"modules/hall-ui/public/hall-kit.js","line":74,"string_id":"de8fa5223aee","state":"activity"},
2261
+ {"key":"L0073","section":"Works completed","text":"Page {…} of {…}","placement":"placed","file":"modules/hall-ui/public/hall-kit.js","line":112,"string_id":"15a49bf15007","state":"activity"},
2262
+ {"key":"L0074","section":"Works completed","text":"Next ›","placement":"placed","file":"modules/hall-ui/public/hall-kit.js","line":74,"string_id":"f52ba261d930","state":"activity"},
2263
+ {"key":"L0075","section":"Goals created","text":"Goals created","placement":"placed","file":"modules/hall-ui/public/profile.html","line":153,"string_id":"6a85997bda21","state":"activity"},
2264
+ {"key":"L0076","section":"Goals created","text":"Goal","placement":"placed","file":"modules/hall-ui/public/gate.js","line":288,"string_id":"ec88b946ad16","state":"activity"},
2265
+ {"key":"L0077","section":"Goals created","text":"Roles","placement":"unplaced","state":"activity"},
2266
+ {"key":"L0078","section":"Goals created","text":"Progress","placement":"unplaced","state":"activity"},
2267
+ {"key":"L0079","section":"Goals created","text":"{…} of {…} shipped","placement":"placed","file":"modules/hall-ui/public/profile.js","line":647,"string_id":"c3d9687e2375","state":"activity","occurrences":2},
2268
+ {"key":"L0080","section":"Goals created","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","state":"activity"},
2269
+ {"key":"L0081","section":"Works","text":"Works","placement":"unplaced","state":"works"},
2270
+ {"key":"L0082","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"},
2271
+ {"key":"L0083","section":"Works","text":"activity","placement":"unplaced","state":"works"},
2272
+ {"key":"L0084","section":"Works","text":"Credits","placement":"unplaced","state":"works"},
2273
+ {"key":"L0085","section":"Works","text":"Shipped","placement":"placed","file":"modules/hall-ui/public/task.js","line":714,"string_id":"0c0a50ba1666","state":"works"},
2274
+ {"key":"L0086","section":"Works","text":"{…} file{…}","placement":"placed","file":"modules/hall-ui/public/gate.js","line":151,"string_id":"3efa67dc6e07","state":"works","occurrences":3},
2275
+ {"key":"L0087","section":"Works","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232","state":"works"},
2276
+ {"key":"L0088","section":"Works","text":"{…} of {…}","placement":"placed","file":"modules/hall-ui/public/sky-panel.js","line":120,"string_id":"73c1372b43d9","state":"works"},
2277
+ {"key":"L0089","section":"profile","text":"{…}, {…} role","placement":"unplaced"},
2278
+ {"key":"L0090","section":"profile","text":"Ideator","placement":"unplaced"},
2279
+ {"key":"L0091","section":"profile","text":"Answerable for:","placement":"placed","file":"modules/hall-ui/public/profile.js","line":72,"string_id":"0293418d5e8e"},
2280
+ {"key":"L0092","section":"profile","text":"{…} project{…}","placement":"placed","file":"modules/hall-ui/public/fleet.js","line":39,"string_id":"771bef3d31b5","state":"artist","occurrences":2},
2281
+ {"key":"L0093","section":"profile","text":"{…} and {…}","placement":"placed","file":"modules/hall-ui/public/profile-nudge.js","line":77,"string_id":"56b00d773232"},
2282
+ {"key":"L0094","section":"profile","text":"ignited","placement":"unplaced","state":"ideator"},
2283
+ {"key":"L0095","section":"profile","text":"pages approved","placement":"unplaced","state":"artist"},
2284
+ {"key":"L0096","section":"profile","text":"this week","placement":"unplaced","state":"artist"},
2285
+ {"key":"L0097","section":"profile","text":"works {…}","placement":"unplaced"},
2286
+ {"key":"L0098","section":"profile","text":"karma","placement":"unplaced"},
2287
+ {"key":"L0099","section":"By the numbers","text":"By the numbers","placement":"placed","file":"modules/hall-ui/public/profile.html","line":64,"string_id":"181cfa50b127"},
2288
+ {"key":"L0100","section":"By the numbers","text":"works {…}","placement":"unplaced"},
2289
+ {"key":"L0101","section":"By the numbers","text":"all kinds, see below","placement":"unplaced"},
2290
+ {"key":"L0102","section":"By the numbers","text":"karma","placement":"unplaced"},
2291
+ {"key":"L0103","section":"By the numbers","text":"achievements","placement":"unplaced"},
2292
+ {"key":"L0104","section":"By the numbers","text":"earned","placement":"placed","file":"modules/hall-ui/public/goals-render.js","line":828,"string_id":"cf89ac85440d"},
2293
+ {"key":"L0105","section":"By the numbers","text":"pages approved","placement":"unplaced","state":"artist"},
2294
+ {"key":"L0106","section":"By the numbers","text":"3 surfaces","placement":"unplaced","state":"artist"},
2295
+ {"key":"L0107","section":"By the numbers","text":"{…} from pages","placement":"unplaced","state":"artist"},
2296
+ {"key":"L0108","section":"By the numbers","text":"this week","placement":"unplaced","state":"artist"},
2297
+ {"key":"L0109","section":"By the numbers","text":"{…} file{…}","placement":"placed","file":"modules/hall-ui/public/gate.js","line":151,"string_id":"3efa67dc6e07"},
2298
+ {"key":"L0110","section":"By the numbers","text":"ignited","placement":"unplaced","state":"ideator"},
2299
+ {"key":"L0111","section":"By the numbers","text":"became work","placement":"unplaced","state":"ideator"},
2300
+ {"key":"L0112","section":"By the numbers","text":"Full Ideas","placement":"unplaced","state":"ideator"},
2301
+ {"key":"L0113","section":"By the numbers","text":"1 ratified by the board","placement":"unplaced","state":"ideator"},
2302
+ {"key":"L0114","section":"By the numbers","text":"total size","placement":"unplaced","state":"ideator"},
2303
+ {"key":"L0115","section":"By the numbers","text":"{…}, every idea stream; ~ partly estimated","placement":"unplaced","state":"ideator"},
2304
+ {"key":"L0116","section":"By the numbers","text":"still alive","placement":"unplaced","state":"ideator"},
2305
+ {"key":"L0117","section":"By the numbers","text":"of {…}","placement":"placed","file":"modules/hall-ui/public/roadmap.js","line":288,"string_id":"5e7a2220c6a9","state":"ideator"},
2306
+ {"key":"L0118","section":"By the numbers","text":"1 ignited","placement":"unplaced","state":"artist"},
2307
+ {"key":"L0119","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"},
2308
+ {"key":"L0120","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},
2309
+ {"key":"L0121","section":"By the numbers","text":"2 ignited","placement":"unplaced"},
2310
+ {"key":"L0122","section":"Over time","text":"Over time","placement":"placed","file":"modules/hall-ui/public/profile.html","line":76,"string_id":"695ffff13730"},
2311
+ {"key":"L0123","section":"Over time","text":"30 days","placement":"unplaced"},
2312
+ {"key":"L0124","section":"Over time","text":"90 days","placement":"unplaced"},
2313
+ {"key":"L0125","section":"Over time","text":"1 year","placement":"unplaced"},
2314
+ {"key":"L0126","section":"Over time","text":"All time","placement":"placed","file":"modules/hall-ui/public/hall-widgets.js","line":161,"string_id":"627c683a5e5d"},
2315
+ {"key":"L0127","section":"Over time","text":"Works {…}","placement":"unplaced"},
2316
+ {"key":"L0128","section":"Over time","text":"{…} of {…}","placement":"placed","file":"modules/hall-ui/public/sky-panel.js","line":120,"string_id":"73c1372b43d9","occurrences":3},
2317
+ {"key":"L0129","section":"Over time","text":"24 works","placement":"unplaced"},
2318
+ {"key":"L0130","section":"Over time","text":"today","placement":"unplaced","occurrences":2},
2319
+ {"key":"L0131","section":"Over time","text":"as a table","placement":"placed","file":"modules/hall-ui/public/profile-charts.js","line":205,"string_id":"b4033000c537","occurrences":3},
2320
+ {"key":"L0132","section":"Over time","text":"24 total · all time","placement":"unplaced"},
2321
+ {"key":"L0133","section":"Over time","text":"{…} earned","placement":"placed","file":"modules/hall-ui/public/goals-render.js","line":828,"string_id":"cf89ac85440d"},
2322
+ {"key":"L0134","section":"Over time","text":"16,035 paid, from the {…} ledger · all time","placement":"unplaced"},
2323
+ {"key":"L0135","section":"Over time","text":"Works by role","placement":"unplaced"},
2324
+ {"key":"L0136","section":"Over time","text":"UI","placement":"unplaced"},
2325
+ {"key":"L0137","section":"Over time","text":"Artist","placement":"unplaced"},
2326
+ {"key":"L0138","section":"Over time","text":"No role yet","placement":"unplaced"},
2327
+ {"key":"L0139","section":"Over time","text":"Ideator","placement":"unplaced"},
2328
+ {"key":"L0140","section":"Over time","text":"24 works · all time","placement":"unplaced"},
2329
+ {"key":"L0141","section":"Over time","text":"Your pace, by week","placement":"unplaced"},
2330
+ {"key":"L0142","section":"Over time","text":"this week","placement":"unplaced"},
2331
+ {"key":"L0143","section":"Over time","text":"61 in the last 90 days · only you see this one","placement":"unplaced"},
2332
+ {"key":"L0144","section":"Achievements","text":"Achievements","placement":"unplaced"},
2333
+ {"key":"L0145","section":"Achievements","text":"No achievements earned yet.","placement":"placed","file":"modules/hall-ui/public/profile.js","line":199,"string_id":"c255749ec989","state":"ideator"},
2334
+ {"key":"L0146","section":"Achievements","text":"Won {…}","placement":"placed","file":"modules/hall-ui/public/profile.js","line":206,"string_id":"c5fd76a9e03d","occurrences":2},
2335
+ {"key":"L0147","section":"Cross-project record","text":"Cross-project record","placement":"placed","file":"modules/hall-ui/public/profile.html","line":98,"string_id":"a55e423263f0"},
2336
+ {"key":"L0148","section":"Cross-project record","text":"Works {…}","placement":"unplaced"},
2337
+ {"key":"L0149","section":"Cross-project record","text":"Credits","placement":"unplaced"},
2338
+ {"key":"L0150","section":"Cross-project record","text":"Karma","placement":"unplaced"},
2339
+ {"key":"L0151","section":"Cross-project record","text":"Roles: {…}, UI · Last {…} {…}","placement":"unplaced"},
2340
+ {"key":"L0152","section":"Cross-project record","text":"Project","placement":"unplaced"},
2341
+ {"key":"L0153","section":"Cross-project record","text":"Standing there","placement":"placed","file":"modules/hall-ui/public/profile.js","line":369,"string_id":"ec1c2dae4a90"},
2342
+ {"key":"L0154","section":"Cross-project record","text":"Archon","placement":"unplaced"},
2343
+ {"key":"L0155","section":"Cross-project record","text":"Metic","placement":"unplaced"},
2344
+ {"key":"L0156","section":"Cross-project record","text":"+ {…} more project{…} not publicly listed.","placement":"placed","file":"modules/hall-ui/public/profile.js","line":375,"string_id":"646fab1157fe"},
2345
+ {"key":"L0157","section":"Cross-project record","text":"This is you —","placement":"placed","file":"modules/hall-ui/public/profile.js","line":345,"string_id":"23f531302e9e"},
2346
+ {"key":"L0158","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"}
2334
2347
  ]
2335
2348
  },
2336
2349
  {
@@ -2968,7 +2981,7 @@
2968
2981
  "surface": "builders",
2969
2982
  "title": "Your thinking",
2970
2983
  "states_read": ["tour","sky","list","simple","full-idea","full","full-list","full-back","out"],
2971
- "files_hash": "8a32d33cd6353401",
2984
+ "files_hash": "df4076c7865c9c8a",
2972
2985
  "reading_hash": "fd3ca97a04e31555",
2973
2986
  "counts": {"lines":85,"placed":34,"shared":5,"unplaced":46},
2974
2987
  "omitted": {"data":23},
@@ -90,6 +90,15 @@ The sections above are the *manual* `bongos upgrade`. The **subscription** runs
90
90
 
91
91
  A **major** is never automatic; prereleases are never auto-targeted.
92
92
 
93
+ **Per-instance follow** says which published versions it takes at all (task 1004297, [ADR 0360](../adr/0360-bongos-follows-every-candidate-every-other-project-follows-releases.md)). The channel bounds how far a jump may go; the follow bounds which versions exist to jump to.
94
+
95
+ | follow | takes | who |
96
+ |---|---|---|
97
+ | `released` *(default)* | versions at or below the registry's `latest` label, what the owner has released | every project |
98
+ | `candidates` | every published version, as soon as it is published | **the platform's own hall only** |
99
+
100
+ An instance that follows releases and whose `latest` label cannot be read is **skipped**, never upgraded on a guess. Until candidates publish under their own label (task 1004298), `latest` is the newest version, so the two follows pick the same target. Set the platform's own entry to `"follow": "candidates"` **before** that split lands, or the platform stops taking candidates the day they appear.
101
+
93
102
  **Crossing a minor from /deploy** (task [1004405](https://cloudbongos.com/builders#/task/1004405)): set the project's update rule to **Fixes and new releases** (`minor`), or press **Allow new releases and move** on the refused move — either is the explicit "this crosses a minor version" choice. That only works once the box runs a core whose runner reads the rule (core 1.20.29 or later, task [1004445](https://cloudbongos.com/builders#/task/1004445)). A box on anything older runs the old runner, which bounds every move to `patch` whatever the rule says, so its **first** crossing is the manual `upgrade.js --to <version>` above; every later one goes through /deploy.
94
103
 
95
104
  **Where the channel comes from** ([ADR 0357](../adr/0357-the-update-rule-set-on-deploy-is-the-one-the-sweep-follows.md), task [1004468](https://cloudbongos.com/builders#/task/1004468)): the rule set on **/deploy** (`provisioning_instances.update_channel`) wins for any roster entry whose `slug` matches a project row. The roster's `channel` below is only the fallback, used when no row matches or the sweep can't read the database. The sweep reads the control plane's DB from `UPDATE_CHANNEL_DB` (a db name or connection string), else `DATABASE_URL` / `PGDATABASE`. On a control plane, set `UPDATE_CHANNEL_DB`, never `PGDATABASE`: the sweep's env reaches every upgrade it spawns, so a tenant entry with no database of its own would migrate against the control plane's. Every run prints each entry's channel and its source.
@@ -101,7 +110,7 @@ A **major** is never automatic; prereleases are never auto-targeted.
101
110
  "defaultChannel": "patch",
102
111
  "instances": [
103
112
  { "slug": "demo", "dir": "/srv/cloudbongos/demo", "service": "demo.service",
104
- "healthUrl": "https://demo.cloudbongos.com/healthz", "channel": "patch",
113
+ "healthUrl": "https://demo.cloudbongos.com/healthz", "channel": "patch", "follow": "released",
105
114
  "env": { "PGDATABASE": "demo" } }
106
115
  ]
107
116
  }
@@ -114,7 +123,7 @@ node .claude/scheduled-tasks/core-update-subscription/subscribe.js #
114
123
  node .claude/scheduled-tasks/core-update-subscription/subscribe.js --apply # upgrade
115
124
  ```
116
125
 
117
- Each subscribed instance: read its installed core → ask the registry (`npm view`, no credential needed — the package is public) → resolve the newest version its channel permits → if newer, `bongos upgrade --to <v> --registry` with **auto-rollback ON**. It prints one line per instance plus a tally; a non-zero exit means an upgrade failed (already auto-reverted).
126
+ Each subscribed instance: read its installed core → ask the registry (`npm view`, no credential needed — the package is public) → narrow to the versions its follow admits → resolve the newest one its channel permits → if newer, `bongos upgrade --to <v> --registry` with **auto-rollback ON**. It prints one line per instance plus a tally; a non-zero exit means an upgrade failed (already auto-reverted).
118
127
 
119
128
  > **Enrolling a `file:`-pinned instance resolves NOTHING — convert the pin first** (task 1003915). A scaffolded co-tenant declares its core as `"@bongos/core": "file:vendor/bongos-core-<v>.tgz"`, a local path with no registry channel to follow, so the sweep has nothing to compare against and the instance sits frozen while the roster reports it enrolled. The conversion is not a separate chore: one manual `bongos upgrade --to <v> --registry` rewrites the pin to a bare registry semver on its way through, and every later sweep then works. Measured on the cloudbongos droplet 2026-09-13, **20 of 22 co-tenants** were `file:`-pinned, which is why enrolment alone had never moved any of them.
120
129
 
@@ -53,4 +53,18 @@ async function readArtistStats(builderId, { now = new Date() } = {}) {
53
53
  return out;
54
54
  }
55
55
 
56
- module.exports = { tallyCreditRows, readArtistStats, TALLY_ROW_CAP };
56
+ // One artist's approved pages, a page at a time, for the profile's Artist tab
57
+ // (task 1004435). Unlike readArtistStats this DOES carry words (each round's
58
+ // first changed line), so it is never handed to the port: only the signed-in
59
+ // route in routes/copy-desk-artist.js calls it. Same per-artist read as the
60
+ // numbers, so the list and the count above it cannot disagree.
61
+ async function readArtistPages(builderId, { limit = 10, offset = 0 } = {}) {
62
+ const lifecycle = api.resolveOptional && api.resolveOptional('lifecycle');
63
+ if (!lifecycle || typeof lifecycle.listPageTweakTasks !== 'function') return null;
64
+ const inv = pageData.loadInventory();
65
+ const tasks = await lifecycle.listPageTweakTasks({ artistId: builderId });
66
+ const all = pageStatus.composeArtistPages({ builderId, inventory: inv.ok ? inv.data : null, tasks });
67
+ return { rows: all.slice(offset, offset + limit), total: all.length, inventory_known: !!inv.ok };
68
+ }
69
+
70
+ module.exports = { tallyCreditRows, readArtistStats, readArtistPages, TALLY_ROW_CAP };
@@ -6,7 +6,7 @@
6
6
  "coreVersion": "^1.8.0",
7
7
  "default": true,
8
8
  "maintenance": { "status": "core-maintained" },
9
- "contributes": { "routes": ["copy-desk"], "migrations": true, "skills": ["tweak"] },
9
+ "contributes": { "routes": ["copy-desk", "copy-desk-artist"], "migrations": true, "skills": ["tweak"] },
10
10
  "provides": ["copy-desk.artistStats"],
11
11
  "consumes": ["lifecycle"]
12
12
  }
@@ -708,7 +708,48 @@ function composeApprovals({ inventory, tasks, builderId, crafts }) {
708
708
  };
709
709
  }
710
710
 
711
+ // ---------------------------------------------------------------------------
712
+ // One artist's approved pages, for the profile's Artist tab (task 1004435 /
713
+ // WA6.RP05). Every round of theirs that shipped, newest first: the page, its
714
+ // surface, the day it landed, how many lines changed and the FIRST changed line
715
+ // before and after. That line is the before/after the approved mock shows in
716
+ // words; the approval renders (the round's task visuals) sit beside it.
717
+ //
718
+ // It carries copy — the lines themselves — so it is a signed-in read on its
719
+ // own route, never part of the `copy-desk.artistStats` port, which is counts
720
+ // only (owner decision (a), tests/copy_no_cms.mjs).
721
+ // ---------------------------------------------------------------------------
722
+
723
+ function composeArtistPages({ builderId, inventory, tasks }) {
724
+ const byId = new Map(((inventory && inventory.pages) || []).filter((p) => p && p.id).map((p) => [p.id, p]));
725
+ const mine = [];
726
+ for (const [pageId, rounds] of indexRounds(tasks)) {
727
+ for (const r of rounds) {
728
+ if (r.status !== 'shipped' || String(r.artist_id) !== String(builderId)) continue;
729
+ const b = pages.parseBatchBlock(r.description);
730
+ const lines = b.ok ? b.batch.lines : [];
731
+ const first = lines.find((l) => l && (l.before || l.after)) || null;
732
+ const page = byId.get(pageId) || null;
733
+ const surface = page ? page.surface : null;
734
+ mine.push({
735
+ task_id: String(r.id),
736
+ page_id: pageId,
737
+ page_title: (page && page.title) || pageId,
738
+ surface,
739
+ surface_label: surface ? (SURFACE_LABELS[surface] || surface) : null,
740
+ round: r.round,
741
+ approved_at: iso(r.shipped_at),
742
+ kind: roundKind(r),
743
+ line_count: lines.length,
744
+ first: first ? { before: first.before || '', after: first.after || '' } : null,
745
+ });
746
+ }
747
+ }
748
+ return mine.sort((a, b) => String(b.approved_at || '').localeCompare(String(a.approved_at || '')) || Number(b.task_id) - Number(a.task_id));
749
+ }
750
+
711
751
  module.exports = {
752
+ composeArtistPages,
712
753
  composeApprovals,
713
754
  composeEditor,
714
755
  TALLY_REASON_PREFIX,