@bongos/core 1.19.193 → 1.19.195

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/gds/package-core.js",
5
- "core_version": "1.19.193",
6
- "core_contract": "1.19.193",
7
- "source_commit": "8a3a21b06b2034b9972f0ae33c509b4551bb2d15",
5
+ "core_version": "1.19.195",
6
+ "core_contract": "1.19.195",
7
+ "source_commit": "6f4385930d135df297276b8621d06766d37a31f4",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-08-17T01:42:01.062Z",
9
+ "built_at": "2026-08-17T02:34:38.864Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 309,
@@ -17,7 +17,7 @@
17
17
  "gate": "passed"
18
18
  },
19
19
  "file_count": 1614,
20
- "tree_sha256": "1e89fae2ed7eddba5976e753bd28c3e2b9d9acff1e43cc1046b24133fdede5b6",
20
+ "tree_sha256": "8116719f0704b34ec16115f9e0134e61f13a8dbdcf965a215c6696d637c7ed91",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/blocker-review/SKILL.md",
@@ -3332,7 +3332,7 @@
3332
3332
  {
3333
3333
  "path": "modules/hall-ui/public/people.js",
3334
3334
  "mode": "0000644",
3335
- "sha256": "5439654ddbc1ad6be7944dc198eca5094ec5978ad3b73b7196215ad3dc781dca"
3335
+ "sha256": "65240ee6f7c1dd4a73282f82a659e5906edbe612500e2e4ed9930f31f7e3f377"
3336
3336
  },
3337
3337
  {
3338
3338
  "path": "modules/hall-ui/public/primer.css",
@@ -4267,12 +4267,12 @@
4267
4267
  {
4268
4268
  "path": "package-lock.json",
4269
4269
  "mode": "0000644",
4270
- "sha256": "7d80a4c5bc2445f0f5e3402d5e1fabd3715e1b9ef42a63b9a807a8a4d3d3b07e"
4270
+ "sha256": "7b801c937ba9dd1e63dd47500431d689b484386e24ce7dd4a170e8aad9fe3795"
4271
4271
  },
4272
4272
  {
4273
4273
  "path": "package.json",
4274
4274
  "mode": "0000644",
4275
- "sha256": "8afe9e20e19a60590530619bf1c380b4e8ba570a0fc49c15b8e3fdedc30f6f97"
4275
+ "sha256": "41ec69a812063ad9f24f616976b4492e2b651cfb5bdc4242ebd5873b7a9e8c2f"
4276
4276
  },
4277
4277
  {
4278
4278
  "path": "public-docs/index.html",
@@ -5882,7 +5882,7 @@
5882
5882
  {
5883
5883
  "path": "src/module-api.js",
5884
5884
  "mode": "0000644",
5885
- "sha256": "02055b996dbce5d537591cffca1eb0d12eff1207dd4df6b594da27482d3c2fdf"
5885
+ "sha256": "719cefa356719d4cbe09a49186afae9e5cc116eece82c2c2694ab93706effd54"
5886
5886
  },
5887
5887
  {
5888
5888
  "path": "src/module-loader/catalog.js",
@@ -6562,7 +6562,7 @@
6562
6562
  {
6563
6563
  "path": "tests/discord_channels.mjs",
6564
6564
  "mode": "0000644",
6565
- "sha256": "9685df65e80f438c082867f2167b63c224dd32a9fe1e722957ac97d48ad2e88c"
6565
+ "sha256": "981d34c2fb5ecb6e9b9f38ece947c6c7a400dceadf8bbcf09546c8b3a92eb899"
6566
6566
  },
6567
6567
  {
6568
6568
  "path": "tests/discord_foundation.mjs",
@@ -58,6 +58,25 @@
58
58
 
59
59
  function mountDirectory(builders) {
60
60
  all = Array.isArray(builders) ? builders : [];
61
+ // An EMPTY directory is almost never missing data — it is ADR 0171's
62
+ // fail-closed consent boundary doing exactly what it was ratified to do.
63
+ // `listScoutingRollup` filters on `profile_state = 'active'`, every account
64
+ // starts `'provisional'`, and an account activates ONLY when its human signs
65
+ // in at the hub itself (P03, ratified by the owner 2026-08-16: no backfill
66
+ // activation). This builders hall predates the hub flow, so its builders stay
67
+ // unlisted until each has signed in there once.
68
+ //
69
+ // Reporting that as "no cross-project activity reported yet" is actively
70
+ // misleading — the activity exists and is visible on every project's own
71
+ // leaderboard; the accounts simply are not publicly listed — and that wrong
72
+ // explanation is why an empty directory got filed as a bug (task 1002937).
73
+ // Say which of the two it is, so the page is never mistaken for broken.
74
+ if (!all.length) {
75
+ notice('Nobody is publicly listed here yet. A builder joins this directory once they have '
76
+ + 'signed in on the main platform site at least once — accounts stay unlisted until then, '
77
+ + 'and none are listed without it. Their work still shows on each project’s own ledger.');
78
+ return;
79
+ }
61
80
  kit.makeFilterBar({
62
81
  mount: document.getElementById('people-filters'),
63
82
  search: { id: 'people-q', label: 'Search', placeholder: 'name or discipline' },
@@ -73,7 +92,9 @@
73
92
  columns: ['Builder', { label: 'Projects', class: 'num' }, { label: 'Credits', class: 'num' },
74
93
  { label: 'Ships', class: 'num' }, { label: 'Karma', class: 'num' }, 'Disciplines', 'Last active'],
75
94
  rowHtml: rowHtml,
76
- emptyMsg: 'No cross-project activity reported yet.',
95
+ // Reached only when the directory HAS builders and the search excluded them
96
+ // all — the empty-API case returns above with its own explanation.
97
+ emptyMsg: 'No listed builder matches that search.',
77
98
  pager: pager,
78
99
  });
79
100
  rerender();
package/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.19.193",
3
+ "version": "1.19.195",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@bongos/core",
9
- "version": "1.19.193",
9
+ "version": "1.19.195",
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.19.193",
3
+ "version": "1.19.195",
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",
package/src/module-api.js CHANGED
@@ -813,8 +813,12 @@ const { validateOrRespond, LIMITS, parseId, asyncHandler, corsPublicGet, parsePa
813
813
  // landed since 1.19.191 with no explicit bump. run 31984583069. (task 1002620)
814
814
  // 1.19.193 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
815
815
  // landed since 1.19.192 with no explicit bump. run 31985689267. (task 1002620)
816
+ // 1.19.194 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
817
+ // landed since 1.19.193 with no explicit bump. run 31987857242. (task 1002620)
818
+ // 1.19.195 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
819
+ // landed since 1.19.194 with no explicit bump. run 31988381869. (task 1002620)
816
820
  // ---------------------------------------------------------------------------
817
- const CORE_VERSION = '1.19.193'; // CI auto-patch carrier (ADR 0161); see changelog above
821
+ const CORE_VERSION = '1.19.195'; // CI auto-patch carrier (ADR 0161); see changelog above
818
822
 
819
823
  // A namespaced logger so a module's log lines are attributable + consistent.
820
824
  // Usage: const log = api.logger('dev-box'); log.info('mounted');
@@ -333,5 +333,37 @@ await t('planChannelReconcile no-ops a guild already matching, categories includ
333
333
  assert.deepEqual(ops, [], `expected no ops after #202 fix, got ${JSON.stringify(ops.map((o) => o.op + ' ' + (o.name || o.id)))}`);
334
334
  });
335
335
 
336
+ // --- the REAL repo config (task 1003033 / R20 of goal 1000069) -------------
337
+ // ADR 0037 calls docs/discord/channels.json the single source of truth, and
338
+ // rests its "Archon-gated by construction" argument on that file being a
339
+ // REPO file that has to be merged. It was not tracked in core until R20, so
340
+ // loadConfig() threw ENOENT on a fresh checkout and the argument did not hold.
341
+ // These pin the file's existence and shape so it cannot silently vanish again.
342
+ await t('the real docs/discord/channels.json exists and parses', () => {
343
+ const cfg = ch.loadConfig();
344
+ assert.ok(Array.isArray(cfg.categories) && cfg.categories.length > 0,
345
+ 'config must declare at least one category');
346
+ });
347
+
348
+ await t('the real config declares the board-room channel, visible to every builder', () => {
349
+ const cfg = ch.loadConfig();
350
+ const channels = cfg.categories.flatMap((c) => c.channels || []);
351
+ const board = channels.find((c) => ch.slugify(c.name) === 'board-room');
352
+ assert.ok(board, 'expected a channel whose slug is board-room');
353
+ // ADR 0175 §9 chose an OPEN ballot: a board nobody can observe cannot hold
354
+ // anyone to account. `xenos` grants that rank and every rank above it, so
355
+ // every builder sees the board's business while only members vote — and the
356
+ // vote itself is cast in the hall, never here.
357
+ assert.equal(board.view, 'xenos', 'board-room must be visible to every builder');
358
+ assert.ok(board.topic && board.topic.length > 0, 'board-room needs a topic');
359
+ });
360
+
361
+ await t('the real config plans cleanly against an empty guild and never deletes', () => {
362
+ const cfg = ch.loadConfig();
363
+ const { ops } = ch.planChannelReconcile({ categories: [], channels: [] }, cfg, CTX_BOT);
364
+ assert.ok(ops.some((o) => o.op === 'create-channel'), 'expected the channel to be created');
365
+ assert.ok(!ops.some((o) => String(o.op).startsWith('delete')), 'reconcile must never delete');
366
+ });
367
+
336
368
  console.log(`\n${passed} passed, ${failed} failed`);
337
369
  process.exit(failed ? 1 : 0);