@bongos/core 1.24.31 → 1.24.32

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,11 +2,11 @@
2
2
  "artifact": "bongos-core",
3
3
  "manifest_schema": 1,
4
4
  "generator": "scripts/bongos/package-core.js",
5
- "core_version": "1.24.31",
6
- "core_contract": "1.24.31",
7
- "source_commit": "d2e58d357590e7725fb3e60831005573e8ff1ba5",
5
+ "core_version": "1.24.32",
6
+ "core_contract": "1.24.32",
7
+ "source_commit": "74f03f63c8be540ba7eed7d35a99d0e67626edca",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-11-04T14:12:59.817Z",
9
+ "built_at": "2026-11-04T15:22:37.102Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 635,
@@ -17,7 +17,7 @@
17
17
  "gate": "passed"
18
18
  },
19
19
  "file_count": 4529,
20
- "tree_sha256": "ee6a2e8d493dcf4c9d28728297420849db859fe115b90f661dd8a89195f1393c",
20
+ "tree_sha256": "49413236136d8b70a4a30a258c04e51d48f3c18f03e719a6d588a01261fecbff",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -2487,12 +2487,12 @@
2487
2487
  {
2488
2488
  "path": "docs/copy-inventory.md",
2489
2489
  "mode": "0000644",
2490
- "sha256": "01da02e9490eeb2323d251f5d9341e93f44f287d44aef250c4be11f7749b0c17"
2490
+ "sha256": "2098c6bef3b9e64744708620e8ed5939697b5af6ef2058a8459a4d5068635600"
2491
2491
  },
2492
2492
  {
2493
2493
  "path": "docs/copy-registry.json",
2494
2494
  "mode": "0000644",
2495
- "sha256": "14ad16cb71d3c219d46f888b0a31705840f2860ee8f4c0b571aaf1475423ccf3"
2495
+ "sha256": "f11e4ad68b419df07cc1605c44e4e76f81b7b52362f84a5ff8c8b7530a3f94f9"
2496
2496
  },
2497
2497
  {
2498
2498
  "path": "docs/design/apex-pass-2-direction.md",
@@ -3002,7 +3002,7 @@
3002
3002
  {
3003
3003
  "path": "docs/module-api-changelog.md",
3004
3004
  "mode": "0000644",
3005
- "sha256": "c0d759ece512a67f65f8bef958cc67346894e4118ee520fa78ddc5a471290931"
3005
+ "sha256": "ccb78b589c23a1173239ff110388a2dd92659cf8bc39ee651a85d32b2aa6e27b"
3006
3006
  },
3007
3007
  {
3008
3008
  "path": "docs/modules-contract.md",
@@ -3092,7 +3092,7 @@
3092
3092
  {
3093
3093
  "path": "docs/page-readings.json",
3094
3094
  "mode": "0000644",
3095
- "sha256": "4fd927245760e4c098574fedc3dc9bb8cd6edb9ebdb5eaf2650c2754f7184e2c"
3095
+ "sha256": "52f7e14411fa56ec4e1303d01b893e2ba2d0aa7b6fba4834265cb0c9c7d2dcbb"
3096
3096
  },
3097
3097
  {
3098
3098
  "path": "docs/project-context.template.md",
@@ -6577,7 +6577,7 @@
6577
6577
  {
6578
6578
  "path": "modules/hall-ui/public/home-city.js",
6579
6579
  "mode": "0000644",
6580
- "sha256": "7836677af6b4dc363216a088a3c42ff90231061193b5369fb7c909655a09c91f"
6580
+ "sha256": "7e033d33b09f051056ce993a1150eceeace13857d8ee8eb2a309d13f6b630302"
6581
6581
  },
6582
6582
  {
6583
6583
  "path": "modules/hall-ui/public/home-gallery.css",
@@ -7497,7 +7497,7 @@
7497
7497
  {
7498
7498
  "path": "modules/hall-ui/records/home-city.md",
7499
7499
  "mode": "0000644",
7500
- "sha256": "1da06bb6c6abf49deeaf3c1d27defe9701a6c396f5d0373a7784627c767a1835"
7500
+ "sha256": "bd44d0719364d2a91706122caf39c8c91c9a99f2e90f0776168bdd24fdb7e7ce"
7501
7501
  },
7502
7502
  {
7503
7503
  "path": "modules/hall-ui/records/home-reshuffle.md",
@@ -11857,12 +11857,12 @@
11857
11857
  {
11858
11858
  "path": "package-lock.json",
11859
11859
  "mode": "0000644",
11860
- "sha256": "cbc85a8e8a85856c632857b5ca8dca6505227f3a531bd48194c42737104ea99b"
11860
+ "sha256": "441aa921253c83e56a7aaf6e3ad1ac92cd64afea2a82dbe170b3627e2a826930"
11861
11861
  },
11862
11862
  {
11863
11863
  "path": "package.json",
11864
11864
  "mode": "0000644",
11865
- "sha256": "9313bcdf74bff9d28f503dcbff98d7fa9dd014e8a14ba033f3b0fa2797c9ac0c"
11865
+ "sha256": "b442054183f9e027bca0248da213f2a7a99d5f64b672b5de7e03b6e8733a69f3"
11866
11866
  },
11867
11867
  {
11868
11868
  "path": "public-docs/index.html",
@@ -11882,7 +11882,7 @@
11882
11882
  {
11883
11883
  "path": "release-notes.json",
11884
11884
  "mode": "0000644",
11885
- "sha256": "dda83e6fd8dddb031285dae2a70447b7de68603430de90709aca2fa8d416882d"
11885
+ "sha256": "c9d146cf755ca59f00ec9f167aa45b91cfcd47926cf7c7d898b609c0e11709f9"
11886
11886
  },
11887
11887
  {
11888
11888
  "path": "scripts/bongos/CLAUDE.md",
@@ -15777,7 +15777,7 @@
15777
15777
  {
15778
15778
  "path": "src/module-api.js",
15779
15779
  "mode": "0000644",
15780
- "sha256": "ea1abdb3dce0a52f8b2f8656e5cedb7d8633ba4747a77283012c1935268d233e"
15780
+ "sha256": "66082776590cad85fa4219517c46f1acedab1e0b850ad85f25c9651abfdda5fe"
15781
15781
  },
15782
15782
  {
15783
15783
  "path": "src/module-loader/catalog.js",
@@ -18892,7 +18892,7 @@
18892
18892
  {
18893
18893
  "path": "tests/home_city_widget.mjs",
18894
18894
  "mode": "0000644",
18895
- "sha256": "72c4db1595e0e3d35dbe1a59f84fda77c56d299bcc29d04548f7fb8c45fadb80"
18895
+ "sha256": "a5b8fc11d9f6f5c857d3512a9230f10efbb3756ee55c07503f9cf834d88ba6e9"
18896
18896
  },
18897
18897
  {
18898
18898
  "path": "tests/home_gallery.mjs",
@@ -538,7 +538,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
538
538
  | `89d9c0962048` | certain | Everything that fell out of it | `modules/hall-ui/public/idea.js:420` |
539
539
  | `57d5ba0fdefb` | certain | Exit full screen | `modules/hall-ui/public/shell.js:627` |
540
540
  | `94339ddaeeea` | certain | Explore: the sky reveals itself as you follow routes from where you begin. | `modules/hall-ui/public/goal-map.html:74` |
541
- | `75bf2f13e4c0` | certain | Fast forward | `modules/hall-ui/public/home-city.js:313` |
541
+ | `75bf2f13e4c0` | certain | Fast forward | `modules/hall-ui/public/home-city.js:327` |
542
542
  | `8608a2dfdf61` | certain | File a blocker | `modules/hall-ui/public/blockers.js:316` |
543
543
  | `de62f4cc7d2e` | certain | File a bug or idea | `modules/hall-ui/public/ideas.html:55` |
544
544
  | `297a6d0a8608` | certain | File conflicts in your goals | `modules/hall-ui/public/goal-inbox.js:125` |
@@ -1473,7 +1473,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1473
1473
  | `74bc22f38140` | certain | The platform confirmed this request came from the account it names. | `modules/hall-ui/public/watch.js:396` |
1474
1474
  | `6c3d88de42de` | certain | The primer | `modules/hall-ui/public/primer.html:37` |
1475
1475
  | `dea378cd4837` | certain | The primer did not load | `modules/hall-ui/public/primer.html:83` |
1476
- | `ca10fbab561e` | certain | The project this week | `modules/hall-ui/public/home-city.js:301` |
1476
+ | `ca10fbab561e` | certain | The project this week | `modules/hall-ui/public/home-city.js:315` |
1477
1477
  | `dc2d6fd0350a` | certain | The project’s life so far | `modules/hall-ui/public/genesis-home.js:156` |
1478
1478
  | `3bc5ec5f35ec` | certain | The ranks, lowest to highest | `modules/hall-ui/public/ranks.html:49` |
1479
1479
  | `c0034db3281c` | certain | The reason is recorded in the audit log. This is recoverable: a retired task can be restored to the backlog wi | `modules/hall-ui/public/task.js:829` |
@@ -1564,10 +1564,10 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1564
1564
  | `09256febc32d` | certain | This sentence has {…} {…} where a value is dropped in when it is shown. | `modules/hall-ui/public/copy-desk.js:422` |
1565
1565
  | `9333d71e3e15` | certain | This speciality offers no skills to choose. | `modules/hall-ui/public/speciality-tools.js:125` |
1566
1566
  | `62b0940efd7d` | certain | This task is already retired. Promote restores it to the backlog. | `modules/hall-ui/public/task.js:805` |
1567
- | `1d77cc332601` | certain | This week's builders, ranked by what they did | `modules/hall-ui/public/home-city.js:304` |
1567
+ | `1d77cc332601` | certain | This week's builders, ranked by what they did | `modules/hall-ui/public/home-city.js:318` |
1568
1568
  | `4301ecd67891` | certain | This would fail. | `modules/hall-ui/public/deploy.js:473` |
1569
1569
  | `2ad5823d2cd7` | certain | Three dials, all settings rather than code: | `modules/hall-ui/public/government.html:55` |
1570
- | `3fe05a59a64d` | certain | Time, from the start of the version to live | `modules/hall-ui/public/home-city.js:316` |
1570
+ | `3fe05a59a64d` | certain | Time, from the start of the version to live | `modules/hall-ui/public/home-city.js:330` |
1571
1571
  | `f158ed1c24a2` | certain | Toggle fullscreen | `modules/hall-ui/public/diagram-viewer.js:105` |
1572
1572
  | `7dfdc26f9f79` | certain | Tokens refresh on use; re-issuing never signs you out anywhere else. | `modules/hall-ui/public/settings.html:179` |
1573
1573
  | `8f38bbae750b` | certain | Tool errors | `modules/hall-ui/public/sessions.html:76` |
@@ -7381,7 +7381,7 @@
7381
7381
  "surface": "builders-hall",
7382
7382
  "text": "Fast forward",
7383
7383
  "file": "modules/hall-ui/public/home-city.js",
7384
- "line": 313,
7384
+ "line": 327,
7385
7385
  "origin": "js-markup",
7386
7386
  "confidence": "certain"
7387
7387
  },
@@ -15796,7 +15796,7 @@
15796
15796
  "surface": "builders-hall",
15797
15797
  "text": "The project this week",
15798
15798
  "file": "modules/hall-ui/public/home-city.js",
15799
- "line": 301,
15799
+ "line": 315,
15800
15800
  "origin": "js-markup",
15801
15801
  "confidence": "certain"
15802
15802
  },
@@ -16615,7 +16615,7 @@
16615
16615
  "surface": "builders-hall",
16616
16616
  "text": "This week's builders, ranked by what they did",
16617
16617
  "file": "modules/hall-ui/public/home-city.js",
16618
- "line": 304,
16618
+ "line": 318,
16619
16619
  "origin": "js-markup",
16620
16620
  "confidence": "certain"
16621
16621
  },
@@ -16642,7 +16642,7 @@
16642
16642
  "surface": "builders-hall",
16643
16643
  "text": "Time, from the start of the version to live",
16644
16644
  "file": "modules/hall-ui/public/home-city.js",
16645
- "line": 316,
16645
+ "line": 330,
16646
16646
  "origin": "js-markup",
16647
16647
  "confidence": "certain"
16648
16648
  },
@@ -3316,5 +3316,7 @@ is load-bearing: the script throws rather than guess if it is missing, and
3316
3316
  landed since 1.24.28 with no explicit bump. run 41749478213. (task 1002620)
3317
3317
  1.24.31 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
3318
3318
  landed since 1.24.29 with no explicit bump. run 41845085453. (task 1002620)
3319
+ 1.24.32 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
3320
+ landed since 1.24.31 with no explicit bump. run 41856839551. (task 1002620)
3319
3321
  ---------------------------------------------------------------------------
3320
3322
  ```
@@ -1553,8 +1553,8 @@
1553
1553
  "surface": "builders",
1554
1554
  "title": "Builders' Hall",
1555
1555
  "states_read": ["home","standing","standing-karma","out","founding","genesis","decide","demo"],
1556
- "files_hash": "92288d3d0ba6ce16",
1557
- "reading_hash": "be810abf7682a95e",
1556
+ "files_hash": "00317819a451418e",
1557
+ "reading_hash": "b84e9e431bceadb1",
1558
1558
  "counts": {"lines":96,"placed":48,"shared":11,"unplaced":37},
1559
1559
  "omitted": {"data":90},
1560
1560
  "notes": ["founding: an action failed (page.focus: Timeout 6000ms exceeded.); read as it stood"],
@@ -1634,7 +1634,7 @@
1634
1634
  {"key":"L0073","section":"Achievements","text":"Won {…}","placement":"placed","file":"modules/hall-ui/public/builders.js","line":478,"string_id":"c5fd76a9e03d","state":"standing","occurrences":10},
1635
1635
  {"key":"L0074","section":"Achievements","text":"{…} of {…}","placement":"placed","file":"modules/hall-ui/public/sky-panel.js","line":120,"string_id":"73c1372b43d9","state":"standing"},
1636
1636
  {"key":"L0075","section":"footer","text":"Sign out","placement":"shared","file":"modules/hall-ui/public/shell.js","line":519,"string_id":"1883ad7f07fc","state":"standing","occurrences":2},
1637
- {"key":"L0076","section":"Achievements","text":"core 1.24.29","placement":"unplaced","state":"standing"},
1637
+ {"key":"L0076","section":"Achievements","text":"core 1.24.31","placement":"unplaced","state":"standing"},
1638
1638
  {"key":"L0077","section":"Achievements","text":"Skip","placement":"unplaced","state":"standing"},
1639
1639
  {"key":"L0078","section":"Achievements","text":"Built on","placement":"placed","file":"modules/hall-ui/public/welcome-boot.js","line":179,"string_id":"fef59346ffee","state":"standing"},
1640
1640
  {"key":"L0079","section":"Achievements","text":"cloudbongos.com","placement":"unplaced","state":"standing"},
@@ -1646,7 +1646,7 @@
1646
1646
  {"key":"L0085","section":"Needs your attention13","text":"From the system","placement":"placed","file":"modules/hall-ui/public/hall-render.js","line":682,"string_id":"d32c5e058d1e"},
1647
1647
  {"key":"L0086","section":"Needs your attention13","text":"Ideas awaiting triage","placement":"placed","file":"modules/hall-ui/public/builders.js","line":841,"string_id":"e181637c5a5e"},
1648
1648
  {"key":"L0087","section":"Needs your attention13","text":"Requires project {…} fix","placement":"unplaced"},
1649
- {"key":"L0088","section":"Needs your attention13","text":"core 1.24.29","placement":"unplaced"},
1649
+ {"key":"L0088","section":"Needs your attention13","text":"core 1.24.31","placement":"unplaced"},
1650
1650
  {"key":"L0089","section":"Needs your attention13","text":"Skip","placement":"unplaced"},
1651
1651
  {"key":"L0090","section":"Needs your attention13","text":"Built on","placement":"placed","file":"modules/hall-ui/public/welcome-boot.js","line":179,"string_id":"fef59346ffee"},
1652
1652
  {"key":"L0091","section":"Needs your attention13","text":"cloudbongos.com","placement":"unplaced"},
@@ -22,6 +22,10 @@
22
22
  // (home-city-draw.js skySvg) from the same read, and the ladder ranks the week's
23
23
  // ideators — ideas filed, votes cast, ideas that became work. Every other craft keeps
24
24
  // the builder's city exactly as it was.
25
+ //
26
+ // The governor's Home is the street (task 1005064; the v16 round's v16-governing.html):
27
+ // choosing Governing on Home, or opening Home with it chosen, goes to the street page
28
+ // (GovCity.STREET_HREF), which is never redrawn here.
25
29
  (function () {
26
30
  'use strict';
27
31
  if (!window.OTB || typeof window.OTB.contributeHallWidget !== 'function') return;
@@ -295,7 +299,17 @@
295
299
  host.hidden = !(art || shown);
296
300
  }
297
301
 
302
+ // ---- the governor's Home is the street; tests swap the hop for a recorder ----
303
+ function streetHop() {
304
+ const href = window.GovCity && window.GovCity.STREET_HREF;
305
+ if (document.documentElement.dataset.craft !== 'governing' || !href) return false;
306
+ (window.OTBHomeStreetHop || ((h) => window.location.assign(h)))(href);
307
+ return true;
308
+ }
309
+
298
310
  function mount(hostEl) {
311
+ document.addEventListener('otb:craft', streetHop);
312
+ if (streetHop()) return; // leaving for the street: build nothing, read nothing
299
313
  host = hostEl;
300
314
  host.innerHTML =
301
315
  '<h2 id="home-city-h" class="sr-only">The project this week</h2>' +
@@ -175,6 +175,16 @@ leaderboard.
175
175
  - Pinned in `tests/home_studio.mjs` and `tests/home_studio_widget.mjs` (real browser, empty states included); harness
176
176
  fixtures `copy-desk__studio.json` and `home__studio__works.json`.
177
177
 
178
+ ## The governor's Home is the street (task 1005064)
179
+
180
+ The owner, 2026-11-04, after the four Homes went live: "when you tab between the pages the home screen
181
+ doesn't change." Building, Ideating and Artistry had their own Homes, but Governing still showed the
182
+ builder's city. The v16 round settled it ([`v16-governing.html`](../../../docs/design/mocks/hall/home/v16-governing.html)):
183
+ Governing's Home **is** the street page, never redrawn. Governing's nav already leads with `city`, the street.
184
+ So choosing Governing on Home, or opening Home with it chosen, goes to `GovCity.STREET_HREF`
185
+ (`home-city.js` `streetHop`). In Governing the street's "← Home" link therefore lands back on the street;
186
+ switching craft from the top bar leaves it. Pinned in `tests/home_city_widget.mjs`.
187
+
178
188
  ## Private areas
179
189
 
180
190
  A private goal the viewer is neither a member of nor an Archon over still stands as a tower (its counts are structure), but the server sends no title for it or for the ideas tied to it; the drawing labels them "A private area" and "A private idea" (ADR 0112, as the goal map and the sky apply it). Pinned in `tests/home_city.mjs`.
package/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.24.31",
3
+ "version": "1.24.32",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@bongos/core",
9
- "version": "1.24.31",
9
+ "version": "1.24.32",
10
10
  "license": "AGPL-3.0-or-later",
11
11
  "dependencies": {
12
12
  "express": "^4.21.2",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.24.31",
3
+ "version": "1.24.32",
4
4
  "description": "Cloud Bongos — the AI-first build platform core (GDS + platform surfaces + module system), installed as a versioned dependency (ADR 0108).",
5
5
  "license": "AGPL-3.0-or-later",
6
6
  "main": "src/platform-server.js",
@@ -11145,5 +11145,11 @@
11145
11145
  "id": "1005054",
11146
11146
  "text": "Home now shows the whole project as a living city: towers that grow as work ships, the people building them, and a slider to replay the last ten weeks."
11147
11147
  }
11148
+ ],
11149
+ "1.24.32": [
11150
+ {
11151
+ "id": "1005064",
11152
+ "text": "The governor's Home is now the street: choosing Owner on Home takes you straight to it, so each of the four crafts has its own Home."
11153
+ }
11148
11154
  ]
11149
11155
  }
package/src/module-api.js CHANGED
@@ -81,7 +81,7 @@ const { sleep } = require('./sleep');
81
81
  // MAJOR (see allowBoxScope below): passes the request through untouched.
82
82
  function deprecatedNoopMiddleware(_req, _res, next) { next(); }
83
83
 
84
- const CORE_VERSION = '1.24.31'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
84
+ const CORE_VERSION = '1.24.32'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
85
85
 
86
86
  // A namespaced logger so a module's log lines are attributable + consistent.
87
87
  // Usage: const log = api.logger('discord'); log.info('mounted');
@@ -41,7 +41,10 @@ const stubs = (status, craft) => `
41
41
  return p.startsWith('/api/bongos/home/city') ? { ok: true, status: 200, data: window.__CITY } : { ok: false, status: 404, data: null };
42
42
  } }) };
43
43
  window.__chosen = [];
44
+ window.__hops = [];
45
+ window.OTBHomeStreetHop = (h) => window.__hops.push(h);
44
46
  window.__craft = ${JSON.stringify(craft || null)};
47
+ if (window.__craft) document.documentElement.dataset.craft = window.__craft;
45
48
  window.OTBCraftMode = { iconHtml: (k, cls) => '<svg class="' + cls + '" data-icon="' + k + '"></svg>', choose: (m) => window.__chosen.push(m), current: () => window.__craft };
46
49
  window.OTB = { contributeHallWidget(w) { window.__widget = w; } };`;
47
50
 
@@ -162,6 +165,23 @@ test('the museum and the band of stars switch the craft; the core and a building
162
165
  assert.match(r.tower, /^\/goals#\/goal\/\d+$/);
163
166
  });
164
167
 
168
+ test('the governor\'s Home is the street: Governing on Home goes there, opened or chosen; other crafts stay', { skip }, async () => {
169
+ const opened = await boot({ craft: 'governing' });
170
+ const onOpen = await opened.page.evaluate(() => ({ hops: window.__hops, asked: window.__asked, built: !!document.querySelector('.hc-svg') }));
171
+ await opened.ctx.close();
172
+ assert.deepEqual(onOpen.hops, ['/builders/street'], 'Home opened with Governing chosen goes to the street');
173
+ assert.deepEqual(onOpen.asked, [], 'and asks the server for nothing on the way');
174
+ assert.equal(onOpen.built, false, 'and builds no city it is leaving');
175
+
176
+ const { ctx, page } = await boot();
177
+ await page.waitForFunction(() => document.querySelectorAll('.hc-rung').length > 0);
178
+ const flip = (m) => page.evaluate((mode) => { document.documentElement.dataset.craft = mode; window.__craft = mode; document.dispatchEvent(new CustomEvent('otb:craft', { detail: { mode } })); return window.__hops.slice(); }, m);
179
+ assert.deepEqual(await flip('artistry'), [], 'Artistry stays on Home');
180
+ assert.deepEqual(await flip('ideating'), [], 'Ideating stays on Home');
181
+ assert.deepEqual(await flip('governing'), ['/builders/street'], 'choosing Governing on Home goes to the street');
182
+ await ctx.close();
183
+ });
184
+
165
185
  test('a refused read leaves the section hidden: never an empty plate', { skip }, async () => {
166
186
  const { ctx, page } = await boot({ status: 401 });
167
187
  await page.evaluate(() => new Promise((r) => setTimeout(r, 0)));