@bongos/core 1.19.899 → 1.19.901

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.bongos-core.json CHANGED
@@ -2,22 +2,22 @@
2
2
  "artifact": "bongos-core",
3
3
  "manifest_schema": 1,
4
4
  "generator": "scripts/gds/package-core.js",
5
- "core_version": "1.19.899",
6
- "core_contract": "1.19.899",
7
- "source_commit": "18e19a9f8472cc87ac263b0266d11f1d87e352d4",
5
+ "core_version": "1.19.901",
6
+ "core_contract": "1.19.901",
7
+ "source_commit": "eaeb90f6f672cebb32a56069fe0f4cdab41c983a",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-09-20T04:05:43.927Z",
9
+ "built_at": "2026-09-20T06:23:47.726Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 502,
13
13
  "agent_docs_stubbed": 26,
14
- "functional_verbatim": 2277,
14
+ "functional_verbatim": 2283,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 2805,
20
- "tree_sha256": "02493e71ddfd64f20d5be962a0a967ab57c24e1cac948681b566a8a7d87dcc75",
19
+ "file_count": 2811,
20
+ "tree_sha256": "c3fd3f2ffac72933f622b7cb06be2429710627f38d9a3d541cb1ce7f595cdf6a",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -2097,12 +2097,12 @@
2097
2097
  {
2098
2098
  "path": "docs/copy-inventory.md",
2099
2099
  "mode": "0000644",
2100
- "sha256": "f1b9049057c56a02af6031f472a2634050753ca1539aa79549f663851db22e54"
2100
+ "sha256": "bee7d1411eaf22aaaf7887b53e1151a0654055f8b4a7f6d78802b1eea766aa71"
2101
2101
  },
2102
2102
  {
2103
2103
  "path": "docs/copy-registry.json",
2104
2104
  "mode": "0000644",
2105
- "sha256": "969894adbb9bc33d4e6f1656aaaa3ba863aba18a5fa7cdce15922916e4d43a6d"
2105
+ "sha256": "120d68ae5ad77ce670704ccd385b14b523ff7a530742b0038788e480084c6e34"
2106
2106
  },
2107
2107
  {
2108
2108
  "path": "docs/design/apex-pass-2-direction.md",
@@ -2632,7 +2632,7 @@
2632
2632
  {
2633
2633
  "path": "docs/module-api-changelog.md",
2634
2634
  "mode": "0000644",
2635
- "sha256": "7c5f4afd7ed31a886824fdce76aea1f7a5e4ff5e0d05ac40358a18fbceb6ac58"
2635
+ "sha256": "3ff6099cba4fdc3c31689aa4f007bdb23a8aa5fca100f118eb817e44cf8986c0"
2636
2636
  },
2637
2637
  {
2638
2638
  "path": "docs/modules-contract.md",
@@ -5037,7 +5037,7 @@
5037
5037
  {
5038
5038
  "path": "modules/hall-ui/public/profile.js",
5039
5039
  "mode": "0000644",
5040
- "sha256": "201199cc05841179b975cd46f22a9b82a312a748256733aa758f8fe55bb99aa6"
5040
+ "sha256": "0ca0433fa846d12e2ea2d69084ad406d6e23fbe92e20c7364da4e92e54e26cf4"
5041
5041
  },
5042
5042
  {
5043
5043
  "path": "modules/hall-ui/public/profile.states.json",
@@ -5309,6 +5309,11 @@
5309
5309
  "mode": "0000644",
5310
5310
  "sha256": "07e5666362c91f92d34388b4f6f4507cc5387866d317970478e6cae417c19975"
5311
5311
  },
5312
+ {
5313
+ "path": "modules/ideas/descent.js",
5314
+ "mode": "0000644",
5315
+ "sha256": "778558f148d8b403b64f0714b27436b08c41ae0d21ed18b4ed73939928e05cd4"
5316
+ },
5312
5317
  {
5313
5318
  "path": "modules/ideas/homeless-home.js",
5314
5319
  "mode": "0000644",
@@ -5349,10 +5354,20 @@
5349
5354
  "mode": "0000644",
5350
5355
  "sha256": "51f790ec7d5c0ad9941ed16174e260db0de18be4d4cb18af0d704a1190a1beee"
5351
5356
  },
5357
+ {
5358
+ "path": "modules/ideas/migrations/ideas_007_task_descent_edges.sql",
5359
+ "mode": "0000644",
5360
+ "sha256": "76f2af78af1ebb01e97ce182142c9de6b044d617cec102f9e7174ec513157c98"
5361
+ },
5352
5362
  {
5353
5363
  "path": "modules/ideas/module.json",
5354
5364
  "mode": "0000644",
5355
- "sha256": "c9a5e2bab38b9e45e4934f578f4ebbf0966f9e971318548d5c445d2f6a3de3a7"
5365
+ "sha256": "d78cc041fcd92485e38684a216a846e163ea443a8afea9f304aca3a2ac086d4d"
5366
+ },
5367
+ {
5368
+ "path": "modules/ideas/pollers/descent-writer.js",
5369
+ "mode": "0000644",
5370
+ "sha256": "80faf8d20df4f051000460a0453472bd1a177ca4e9e9a31e8c5b7f3065575995"
5356
5371
  },
5357
5372
  {
5358
5373
  "path": "modules/ideas/routes/blockers.js",
@@ -5362,7 +5377,7 @@
5362
5377
  {
5363
5378
  "path": "modules/ideas/routes/inbox.js",
5364
5379
  "mode": "0000644",
5365
- "sha256": "0f5997e58ca3f8ee33e84948136697519f095670387f0ae26cadb325f2389268"
5380
+ "sha256": "5324f8d2eb8d55decadd371f2c48ee141e88b9aa3d62de0921d467aef401c2ae"
5366
5381
  },
5367
5382
  {
5368
5383
  "path": "modules/ideas/routing.js",
@@ -5379,6 +5394,11 @@
5379
5394
  "mode": "0000644",
5380
5395
  "sha256": "eade9a2d07da0a39af17c086d188a195be00c544889d61454ed3c6368d39ea04"
5381
5396
  },
5397
+ {
5398
+ "path": "modules/ideas/trail-descent.js",
5399
+ "mode": "0000644",
5400
+ "sha256": "2d0693b00dded081b6a0082c450762763d324d54f098a8f42a9aa25ec27370c4"
5401
+ },
5382
5402
  {
5383
5403
  "path": "modules/lifecycle/CLAUDE.md",
5384
5404
  "mode": "0000644",
@@ -7742,12 +7762,12 @@
7742
7762
  {
7743
7763
  "path": "package-lock.json",
7744
7764
  "mode": "0000644",
7745
- "sha256": "640f2bc9b3f15ca82640c73a681425eb06518b9fceb1d649486c55ad3cf73469"
7765
+ "sha256": "81176248d1045cd137a823208e30bdf4907b4f08ae1c0c0ff85750a38d2aeed3"
7746
7766
  },
7747
7767
  {
7748
7768
  "path": "package.json",
7749
7769
  "mode": "0000644",
7750
- "sha256": "d04cbdbb7e6b3f4788c1b161337a4aa7935811a50100c6779e80b177f7ce7505"
7770
+ "sha256": "bff9286aa9803a2eedaffb0f0798fcd15a27791208c786a6544424aa04db4a16"
7751
7771
  },
7752
7772
  {
7753
7773
  "path": "public-docs/index.html",
@@ -9757,7 +9777,7 @@
9757
9777
  {
9758
9778
  "path": "src/module-api.js",
9759
9779
  "mode": "0000644",
9760
- "sha256": "452208ca788059958d16240ae3c879df1ce3ecb1db4a7084c19aeba9a453aa84"
9780
+ "sha256": "5ac46b294e25abc7c2a076f538a123991a638f3069dd4980ba2b75392942b710"
9761
9781
  },
9762
9782
  {
9763
9783
  "path": "src/module-loader/catalog.js",
@@ -11707,7 +11727,7 @@
11707
11727
  {
11708
11728
  "path": "tests/helpers.mjs",
11709
11729
  "mode": "0000644",
11710
- "sha256": "d90ec6d640f3a9a389169180d4a852c85e7c3a5336900f93b871673681b8718a"
11730
+ "sha256": "40b3377e8f1e69f5f3465297018c9e148582a23aca85d5ea5802c119620562c6"
11711
11731
  },
11712
11732
  {
11713
11733
  "path": "tests/hierarchy-config.mjs",
@@ -11869,6 +11889,11 @@
11869
11889
  "mode": "0000644",
11870
11890
  "sha256": "8bfc36537ffccae702e74e8763534fa535486a2eb8bbf9ee546a2c7368d1dc6b"
11871
11891
  },
11892
+ {
11893
+ "path": "tests/idea_task_descent.mjs",
11894
+ "mode": "0000644",
11895
+ "sha256": "36674ef87ccf2d10fca66f4999e62ec8c3518798618c1abfc77f3a6dcc9c330f"
11896
+ },
11872
11897
  {
11873
11898
  "path": "tests/idea_task_lineage.mjs",
11874
11899
  "mode": "0000644",
@@ -11884,6 +11909,11 @@
11884
11909
  "mode": "0000644",
11885
11910
  "sha256": "943afa2366f92c4d6188ce9f8d68f499aac8d67930f91d6860a2cb83020642ab"
11886
11911
  },
11912
+ {
11913
+ "path": "tests/idea_trail_descent.mjs",
11914
+ "mode": "0000644",
11915
+ "sha256": "00701012dbdc9c4d9cb2484aeff4426cb1af0a4643bd979211b361b00af80c69"
11916
+ },
11887
11917
  {
11888
11918
  "path": "tests/idea_triage.mjs",
11889
11919
  "mode": "0000644",
@@ -12557,7 +12587,7 @@
12557
12587
  {
12558
12588
  "path": "tests/profile_activity.mjs",
12559
12589
  "mode": "0000644",
12560
- "sha256": "840aad045289d95ef44c011934e782da23e5ba687d4b2163da99a54062bbc676"
12590
+ "sha256": "483d249339dd696809a4d9ac53aa10d7b67a35ce064884ef5590cc7249418047"
12561
12591
  },
12562
12592
  {
12563
12593
  "path": "tests/profile_connections_ui.mjs",
@@ -4,13 +4,13 @@
4
4
  > Deterministic on a given tree — regenerate and commit rather than hand-editing.
5
5
  > Machine-readable twin: [`copy-registry.json`](copy-registry.json).
6
6
 
7
- **1826 strings** across 3 surfaces · 1584 distinct pieces of copy · 1826 certain, 0 heuristic · 166 shown in more than one place.
7
+ **1827 strings** across 3 surfaces · 1585 distinct pieces of copy · 1827 certain, 0 heuristic · 166 shown in more than one place.
8
8
 
9
9
  ## Surfaces
10
10
 
11
11
  | surface | lives at | files | strings |
12
12
  |---|---|---|---|
13
- | `builders-hall` | `modules/hall-ui/public` | 84 | 1336 |
13
+ | `builders-hall` | `modules/hall-ui/public` | 84 | 1337 |
14
14
  | `status-dashboard` | `modules/status-ui/public` | 4 | 100 |
15
15
  | `landing` | `modules/public-landing/public` | 5 | 390 |
16
16
 
@@ -78,7 +78,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
78
78
  | `996edffc1966` | 2x | Access requests | modules/hall-ui/public/watch.html:46, modules/hall-ui/public/watch.html:61 |
79
79
  | … | | _126 more in the JSON registry_ | |
80
80
 
81
- ## `builders-hall` — 1336 strings
81
+ ## `builders-hall` — 1337 strings
82
82
 
83
83
  | id | conf | text | where |
84
84
  |---|---|---|---|
@@ -309,7 +309,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
309
309
  | `7775fec0fa85` | certain | Could not load sessions. | `modules/hall-ui/public/sessions.js:437` |
310
310
  | `a2f2e8babef5` | certain | Could not load that page. Try again. | `modules/hall-ui/public/blockers.js:274` |
311
311
  | `b2147cc90e36` | certain | Could not load the idea template. Reload, or file from the terminal with capture.js. | `modules/hall-ui/public/ideas.js:626` |
312
- | `7604af13c40e` | certain | Could not load the profile. | `modules/hall-ui/public/profile.js:790` |
312
+ | `7604af13c40e` | certain | Could not load the profile. | `modules/hall-ui/public/profile.js:836` |
313
313
  | `8b69e445592a` | certain | Could not load the question labels; showing the answers as stored. | `modules/hall-ui/public/idea.js:244` |
314
314
  | `edd5bafbe075` | certain | Could not load the queue just now. | `modules/hall-ui/public/ideas.js:565` |
315
315
  | `02bb0570996a` | certain | Could not load the ranks. | `modules/hall-ui/public/ranks.js:197` |
@@ -601,7 +601,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
601
601
  | `6e73716aec6c` | certain | May be offered for sale later | `modules/hall-ui/public/settings.html:297` |
602
602
  | `df335a1224ae` | certain | Member since {…} | `modules/hall-ui/public/hall-render.js:563` |
603
603
  | `df335a1224ae` | certain | Member since {…} | `modules/hall-ui/public/profile.js:94` |
604
- | `c7a670e9552d` | certain | Merged into | `modules/hall-ui/public/profile.js:406` |
604
+ | `c7a670e9552d` | certain | Merged into | `modules/hall-ui/public/profile.js:452` |
605
605
  | `dce0546c9e34` | certain | Merging work does not put it in front of anyone. This is the step that does: it moves this platform — or any p | `modules/hall-ui/public/deploy.html:39` |
606
606
  | `7637613c231b` | certain | Metic rank and above may vote | `modules/hall-ui/public/builders.js:781` |
607
607
  | `91328a97fe68` | certain | Mingle pairs you with someone from another role. Saying no costs nothing. | `modules/hall-ui/public/collab.html:87` |
@@ -919,7 +919,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
919
919
  | `9d4372b173cf` | certain | Standing sections | `modules/hall-ui/public/index.html:79` |
920
920
  | `ec1c2dae4a90` | certain | Standing there | `modules/hall-ui/public/profile.js:314` |
921
921
  | `eaad12cacb9d` | certain | Start over | `modules/hall-ui/public/studio.js:235` |
922
- | `efe530c0e3a7` | certain | Still open | `modules/hall-ui/public/profile.js:411` |
922
+ | `efe530c0e3a7` | certain | Still open | `modules/hall-ui/public/profile.js:457` |
923
923
  | `9a4ced1afb6c` | certain | Stop waiting on task {…} | `modules/hall-ui/public/task.js:278` |
924
924
  | `b0861c874a2f` | certain | Stopped using it. | `modules/hall-ui/public/settings-specialities.js:200` |
925
925
  | `6c6544f5c011` | certain | Stored encrypted; never shown again after saving — only its last four digits. | `modules/hall-ui/public/settings.html:193` |
@@ -1180,6 +1180,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1180
1180
  | `bc960f460250` | certain | and install dependencies ( | `modules/hall-ui/public/hall-render.js:864` |
1181
1181
  | `2177da93be9b` | certain | and leave this alone. | `modules/hall-ui/public/settings.html:339` |
1182
1182
  | `b867876e8b6c` | certain | and press Enter. | `modules/hall-ui/public/hall-render.js:825` |
1183
+ | `0257cb508ae7` | certain | and {…} more below this thought | `modules/hall-ui/public/profile.js:415` |
1183
1184
  | `d86265f99668` | certain | and {…} more waiting{…} | `modules/hall-ui/public/studio.js:277` |
1184
1185
  | `520853131591` | certain | artist mode | `modules/hall-ui/public/studio.html:36` |
1185
1186
  | `b4033000c537` | certain | as a table | `modules/hall-ui/public/profile-charts.js:205` |
@@ -1352,7 +1353,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1352
1353
  | `cc5106af4b35` | certain | {…} of {…} criteria satisfied | `modules/hall-ui/public/goals-lib.js:32` |
1353
1354
  | `cc5106af4b35` | certain | {…} of {…} criteria satisfied | `modules/hall-ui/public/goals-render.js:682` |
1354
1355
  | `cc5106af4b35` | certain | {…} of {…} criteria satisfied | `modules/hall-ui/public/goals.js:45` |
1355
- | `c3d9687e2375` | certain | {…} of {…} shipped | `modules/hall-ui/public/profile.js:512` |
1356
+ | `c3d9687e2375` | certain | {…} of {…} shipped | `modules/hall-ui/public/profile.js:558` |
1356
1357
  | `f32710d0ef37` | certain | {…} of {…} steps cleared. | `modules/hall-ui/public/hall-render.js:1037` |
1357
1358
  | `60743fe1e40d` | certain | {…} per page | `modules/hall-ui/public/hall-kit.js:74` |
1358
1359
  | `154bc518bab4` | certain | {…} proposed | `modules/hall-ui/public/government.js:695` |
@@ -3,9 +3,9 @@
3
3
  "generator": "scripts/gds/copy-inventory.js",
4
4
  "goal": 1000074,
5
5
  "counts": {
6
- "strings": 1826,
7
- "unique_ids": 1584,
8
- "certain": 1826,
6
+ "strings": 1827,
7
+ "unique_ids": 1585,
8
+ "certain": 1827,
9
9
  "heuristic": 0,
10
10
  "duplicate_ids": 166
11
11
  },
@@ -13,7 +13,7 @@
13
13
  "builders-hall": {
14
14
  "at": "modules/hall-ui/public",
15
15
  "files": 84,
16
- "strings": 1336
16
+ "strings": 1337
17
17
  },
18
18
  "status-dashboard": {
19
19
  "at": "modules/status-ui/public",
@@ -3824,7 +3824,7 @@
3824
3824
  "surface": "builders-hall",
3825
3825
  "text": "Could not load the profile.",
3826
3826
  "file": "modules/hall-ui/public/profile.js",
3827
- "line": 790,
3827
+ "line": 836,
3828
3828
  "origin": "js-notice",
3829
3829
  "confidence": "certain"
3830
3830
  },
@@ -6452,7 +6452,7 @@
6452
6452
  "surface": "builders-hall",
6453
6453
  "text": "Merged into",
6454
6454
  "file": "modules/hall-ui/public/profile.js",
6455
- "line": 406,
6455
+ "line": 452,
6456
6456
  "origin": "js-markup",
6457
6457
  "confidence": "certain"
6458
6458
  },
@@ -9314,7 +9314,7 @@
9314
9314
  "surface": "builders-hall",
9315
9315
  "text": "Still open",
9316
9316
  "file": "modules/hall-ui/public/profile.js",
9317
- "line": 411,
9317
+ "line": 457,
9318
9318
  "origin": "js-markup",
9319
9319
  "confidence": "certain"
9320
9320
  },
@@ -11658,6 +11658,15 @@
11658
11658
  "origin": "js-markup",
11659
11659
  "confidence": "certain"
11660
11660
  },
11661
+ {
11662
+ "id": "0257cb508ae7",
11663
+ "surface": "builders-hall",
11664
+ "text": "and {…} more below this thought",
11665
+ "file": "modules/hall-ui/public/profile.js",
11666
+ "line": 415,
11667
+ "origin": "js-markup",
11668
+ "confidence": "certain"
11669
+ },
11661
11670
  {
11662
11671
  "id": "d86265f99668",
11663
11672
  "surface": "builders-hall",
@@ -13211,7 +13220,7 @@
13211
13220
  "surface": "builders-hall",
13212
13221
  "text": "{…} of {…} shipped",
13213
13222
  "file": "modules/hall-ui/public/profile.js",
13214
- "line": 512,
13223
+ "line": 558,
13215
13224
  "origin": "js-markup",
13216
13225
  "confidence": "certain"
13217
13226
  },
@@ -2272,5 +2272,9 @@ is load-bearing: the script throws rather than guess if it is missing, and
2272
2272
  landed since 1.19.897 with no explicit bump. run 35487863230. (task 1002620)
2273
2273
  1.19.899 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2274
2274
  landed since 1.19.898 with no explicit bump. run 35488237998. (task 1002620)
2275
+ 1.19.900 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2276
+ landed since 1.19.899 with no explicit bump. run 35492534307. (task 1002620)
2277
+ 1.19.901 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2278
+ landed since 1.19.900 with no explicit bump. run 35494090938. (task 1002620)
2275
2279
  ---------------------------------------------------------------------------
2276
2280
  ```
@@ -378,9 +378,55 @@
378
378
  const ideaHref = (id) => href(`${hallBase()}/idea/${encodeURIComponent(id)}`);
379
379
  const goalHref = (id) => href(`${hallBase()}/goals#/goal/${encodeURIComponent(id)}`);
380
380
 
381
+ // THE DESCENT — everything an idea's tasks went on to cause, at any depth and
382
+ // across version boundaries (task 1004089, BV2.R09; ADR 0312). Served as
383
+ // `descent_tasks`, already ordered nearest-first by the server, each entry at
384
+ // its shortest depth from one of the idea's own tasks.
385
+ //
386
+ // WHY IT RENDERS HERE, under the outcome and not beside it. The outcome line
387
+ // answers "what became of my idea" with the FIRST thing it became, which is
388
+ // all the trail could ever say while the read was one hop. The descent is the
389
+ // rest of that sentence, so it belongs in the same cell, subordinate to it.
390
+ //
391
+ // CAPPED, and the cap says so. The whole descent is the idea page's job
392
+ // (BV2.R10); a ledger row that paints forty tasks stops being a row. The
393
+ // overflow is a LINK to that page, never a silent truncation.
394
+ const DESCENT_SHOWN = 6;
395
+ function descentHtml(idea) {
396
+ const rows = Array.isArray(idea.descent_tasks) ? idea.descent_tasks : [];
397
+ if (!rows.length) return '';
398
+ const cells = rows.slice(0, DESCENT_SHOWN).map((t) => {
399
+ // The version is printed rather than compared away. A descendant living
400
+ // in a LATER version is the interesting case — it is the proof that an
401
+ // origin tag survives a version boundary — so it is labelled, not
402
+ // filtered and not silently flattened into the idea's own version.
403
+ const meta = [
404
+ `${escapeHtml(String(t.relation || 'descends'))}`,
405
+ `depth ${escapeHtml(String(t.depth))}`,
406
+ t.version_id ? escapeHtml(String(t.version_id)) : null,
407
+ ].filter(Boolean).join(' · ');
408
+ return `<span style="display:block;margin-top:2px">`
409
+ + `<a href="${taskHref(t.task_id)}">#${escapeHtml(String(t.task_id))} ${escapeHtml(t.title || '')}</a>`
410
+ + ` <span style="font-size:11px;color:var(--ink-faint)">${meta}</span>`
411
+ + `</span>`;
412
+ }).join('');
413
+ const rest = rows.length - DESCENT_SHOWN;
414
+ const more = rest > 0
415
+ ? `<span style="display:block;margin-top:2px;font-size:12px"><a href="${ideaHref(idea.id)}">and ${escapeHtml(String(rest))} more below this thought</a></span>`
416
+ : '';
417
+ return `<span style="display:block;margin-top:4px;font-size:12px;color:var(--ink-faint)">`
418
+ + `Then caused ${escapeHtml(String(rows.length))} ${rows.length === 1 ? 'task' : 'tasks'}</span>`
419
+ + cells + more;
420
+ }
421
+
381
422
  // What became of one idea, in a sentence a person can read. The four outcomes
382
423
  // the criterion names, each linked through to the thing it became.
383
424
  function ideaOutcomeHtml(idea) {
425
+ // The descent rides under EVERY outcome, not just a promotion: a merged
426
+ // idea inherits the descent of the idea it merged into (that is what
427
+ // "nothing is lost" means), and an idea whose first task was later split
428
+ // has a descent whatever its own status says.
429
+ const descent = descentHtml(idea);
384
430
  const note = idea.triage_note
385
431
  ? `<span style="display:block;margin-top:2px;font-size:12px;color:var(--ink-faint)">${escapeHtml(idea.triage_note)}</span>`
386
432
  : '';
@@ -396,19 +442,19 @@
396
442
  : []);
397
443
  // 'promoted' with nothing to point at is a real (old) state, not a bug to
398
444
  // paper over — say what is known rather than inventing a link.
399
- if (!links.length) return `<span class="task__tag">Promoted</span>${note}`;
400
- return `<span class="task__tag">Became ${links.length === 1 ? 'a task' : `${links.length} tasks`}</span> ${links.join(' · ')}${note}`;
445
+ if (!links.length) return `<span class="task__tag">Promoted</span>${note}${descent}`;
446
+ return `<span class="task__tag">Became ${links.length === 1 ? 'a task' : `${links.length} tasks`}</span> ${links.join(' · ')}${note}${descent}`;
401
447
  }
402
448
  if (idea.status === 'merged') {
403
449
  const target = idea.merged_into_idea_id
404
450
  ? ` <a href="${ideaHref(idea.merged_into_idea_id)}">#${escapeHtml(String(idea.merged_into_idea_id))} ${escapeHtml(idea.merged_into_idea_title || '')}</a>`
405
451
  : '';
406
- return `<span class="task__tag">Merged into</span>${target}${note}`;
452
+ return `<span class="task__tag">Merged into</span>${target}${note}${descent}`;
407
453
  }
408
454
  if (idea.status === 'discarded') {
409
- return `<span class="task__tag">Discarded</span>${note}`;
455
+ return `<span class="task__tag">Discarded</span>${note}${descent}`;
410
456
  }
411
- return `<span class="task__tag">Still open</span>${note}`;
457
+ return `<span class="task__tag">Still open</span>${note}${descent}`;
412
458
  }
413
459
 
414
460
  // One ledger driven by one server-paged endpoint. `fetchPage(offset, perPage)`