@bongos/core 1.21.118 → 1.21.119

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.21.118",
6
- "core_contract": "1.21.118",
7
- "source_commit": "dcd72a0708a97d3f7456fa0a81107290b96735e1",
5
+ "core_version": "1.21.119",
6
+ "core_contract": "1.21.119",
7
+ "source_commit": "e45da330efcf6e68ae4775165b5025cbb4903372",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-10-14T10:48:05.194Z",
9
+ "built_at": "2026-10-14T13:43:35.449Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 605,
@@ -17,7 +17,7 @@
17
17
  "gate": "passed"
18
18
  },
19
19
  "file_count": 3750,
20
- "tree_sha256": "b11512b16cdfc9e1d2262db9dd14ef853c0e50f162acb1d37d7a5dcde00624af",
20
+ "tree_sha256": "ab4ca3dcbd21d9cc55a93db106532caca2363b955e5c205e9f69d3992547742e",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -2922,7 +2922,7 @@
2922
2922
  {
2923
2923
  "path": "docs/module-api-changelog.md",
2924
2924
  "mode": "0000644",
2925
- "sha256": "0bca8168d0f2d10c8d83bb1af215cb20c58dd4567d03ae883736a0f41f04599a"
2925
+ "sha256": "9273e8ea9033856fb3df24625de22515aa4129046a17c41c65bc5d3f71ec8e24"
2926
2926
  },
2927
2927
  {
2928
2928
  "path": "docs/modules-contract.md",
@@ -10467,12 +10467,12 @@
10467
10467
  {
10468
10468
  "path": "package-lock.json",
10469
10469
  "mode": "0000644",
10470
- "sha256": "8e4eea79cadc227a61eae2aa188d59b77164d48bb6ced42f3a12fdc0337d3552"
10470
+ "sha256": "6469337696b64177fd52f7466f9ac81a7944f2095f16b3d0f7689569038efd02"
10471
10471
  },
10472
10472
  {
10473
10473
  "path": "package.json",
10474
10474
  "mode": "0000644",
10475
- "sha256": "d80da007318c57a326aade4c46f86611e2b4c880238ce41b6687fc0eb16ccb58"
10475
+ "sha256": "90f1c32901b1026f763dc05ee48aa2e1a6aa09727fbe360f49fbb4d21e5126a6"
10476
10476
  },
10477
10477
  {
10478
10478
  "path": "public-docs/index.html",
@@ -10492,7 +10492,7 @@
10492
10492
  {
10493
10493
  "path": "release-notes.json",
10494
10494
  "mode": "0000644",
10495
- "sha256": "1d8eee0dd66972332df040258a793f718f61d157d519942957e85269e04413f6"
10495
+ "sha256": "ef8c6938bb9e62be346bd1a44b2a590a7ff503bbbc0b44fc7ad2a4d112e96910"
10496
10496
  },
10497
10497
  {
10498
10498
  "path": "scripts/cron/style_guide_audit.sh",
@@ -11742,7 +11742,7 @@
11742
11742
  {
11743
11743
  "path": "scripts/gds/run-unit-tests.js",
11744
11744
  "mode": "0000644",
11745
- "sha256": "b57b79a2c32798f7f8f1479b06dd9994ffafdd13e01fd80e7bfa758e02b2d317"
11745
+ "sha256": "d6d81c3bb8017122cb6b5a46355b637f7986ec324132bcd583f0c02d2725b6d0"
11746
11746
  },
11747
11747
  {
11748
11748
  "path": "scripts/gds/runner-drift.js",
@@ -12802,7 +12802,7 @@
12802
12802
  {
12803
12803
  "path": "src/module-api.js",
12804
12804
  "mode": "0000644",
12805
- "sha256": "4bd32a9182893767f8c604f943ca6a760dd6907894107bee785f51ae6c39d559"
12805
+ "sha256": "9d6d6c4c7cbec83c8655f8299d3700b0810cb2d6e0cf5b7a06757e33cd756263"
12806
12806
  },
12807
12807
  {
12808
12808
  "path": "src/module-loader/catalog.js",
@@ -15632,7 +15632,7 @@
15632
15632
  {
15633
15633
  "path": "tests/hub_profile_leak.mjs",
15634
15634
  "mode": "0000644",
15635
- "sha256": "e9609a8adad0c460c24db69211f02beef3699e3e841d44c1385105c4f5c93385"
15635
+ "sha256": "298afa1c71a485c3c64d90a3976c1a7147f1e888a9362a84502d5a9a94611d56"
15636
15636
  },
15637
15637
  {
15638
15638
  "path": "tests/hub_recent_ships.mjs",
@@ -3073,5 +3073,7 @@ is load-bearing: the script throws rather than guess if it is missing, and
3073
3073
  landed since 1.21.116 with no explicit bump. run 38548762428. (task 1002620)
3074
3074
  1.21.118 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
3075
3075
  landed since 1.21.117 with no explicit bump. run 38552002742. (task 1002620)
3076
+ 1.21.119 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
3077
+ landed since 1.21.118 with no explicit bump. run 38574092141. (task 1002620)
3076
3078
  ---------------------------------------------------------------------------
3077
3079
  ```
package/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.21.118",
3
+ "version": "1.21.119",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@bongos/core",
9
- "version": "1.21.118",
9
+ "version": "1.21.119",
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.21.118",
3
+ "version": "1.21.119",
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",
@@ -9690,5 +9690,11 @@
9690
9690
  "id": "1004729",
9691
9691
  "text": "Hosted projects now take released core updates on their own, one at a time, by each project's update rule (pinned projects never move), with a platform-wide off switch."
9692
9692
  }
9693
+ ],
9694
+ "1.21.119": [
9695
+ {
9696
+ "id": "1004664",
9697
+ "text": "A profile privacy test that had been switched off because it failed on a fresh database is fixed and switched back on, so it guards the public profile page again."
9698
+ }
9693
9699
  ]
9694
9700
  }
@@ -465,7 +465,7 @@ const INTEGRATION_PARKED = new Set([
465
465
  'bfg', 'bfg_write',
466
466
  'claim_gate_open_blocker', 'claim_gate_rebase',
467
467
  'clawback_confirmed_backlog', 'copy_desk_flags_db',
468
- 'government_board_membership_db', 'handle_machinery', 'hub_profile_leak',
468
+ 'government_board_membership_db', 'handle_machinery',
469
469
  'idea_credit_streams_db', 'memory_isolation', 'memory_pull', 'needs_rebase',
470
470
  'profile_fields', 'project_visibility_db', 'reward_mode_cost_plus_only',
471
471
  'session_earnings_mirror_db', 'setup_smoke', 'status-probe',
package/src/module-api.js CHANGED
@@ -75,7 +75,7 @@ const { responsibilityFor, ROLE_RESPONSIBILITIES } = require('./role-responsibil
75
75
  // MAJOR (see allowBoxScope below): passes the request through untouched.
76
76
  function deprecatedNoopMiddleware(_req, _res, next) { next(); }
77
77
 
78
- const CORE_VERSION = '1.21.118'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
78
+ const CORE_VERSION = '1.21.119'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
79
79
 
80
80
  // A namespaced logger so a module's log lines are attributable + consistent.
81
81
  // Usage: const log = api.logger('discord'); log.info('mounted');
@@ -68,7 +68,8 @@ const SECRET_HASH = 'HASH-DO-NOT-LEAK-p05';
68
68
  const SECRET_PROJECT = 'P05-PRIVATE-DO-NOT-LEAK';
69
69
  const SECRET_PREV = 'p05-prev-sentinel';
70
70
  const PUB_ORIGIN = 'https://p05-pub.example', PRIV_ORIGIN = 'https://p05-priv.example';
71
- const CP_KEYS = ['totals', 'disciplines', 'last_active', 'projects', 'more_projects'];
71
+ // crafts: each craft's own summed numbers (task 1004440), named or not like the totals.
72
+ const CP_KEYS = ['totals', 'disciplines', 'crafts', 'last_active', 'projects', 'more_projects'];
72
73
  const ACCOUNT_KEYS = ['handle', 'github_login', 'display_name', 'avatar_url', 'member_since', 'bio', 'links'];
73
74
 
74
75
  const q = (sql, params) => pool.query(sql, params);
@@ -128,6 +129,16 @@ try {
128
129
  // 42703 "column does not exist" instead of a 404-vs-200 assertion.
129
130
  await q(migrationSql('platform_identity_012_account_privacy.sql'));
130
131
  await q(migrationSql('platform_identity_019_terms_acceptance.sql'));
132
+ // getRollupForBuilder reads four more (task 1004664 — this file failed 3 of 7 on a FRESH
133
+ // database: every check that reaches the rollup answered 42703, while an old shared
134
+ // database that already had the columns hid it). It names a project only when it is ON
135
+ // THE MAP (projects-feed.js onMapSql: status, the publish gate's description, a known
136
+ // door) AND its door is public — 011 + 020 — and serializes a.recent_ships (012) and
137
+ // a.crafts (029).
138
+ await q(migrationSql('platform_identity_011_project_visibility.sql'));
139
+ await q(migrationSql('platform_identity_012_recent_ships.sql'));
140
+ await q(migrationSql('platform_identity_020_visibility_pull.sql'));
141
+ await q(migrationSql('platform_identity_029_activity_crafts.sql'));
131
142
  await cleanup();
132
143
 
133
144
  // The active account carries the P02 fields + a user-set name source, so the
@@ -150,9 +161,13 @@ try {
150
161
  VALUES ($1, $3, 'P05 Pub Proj', $4), ($2, $3, $5, $6)`,
151
162
  [SECRET_CLIENT_PUB, SECRET_CLIENT_PRIV, SECRET_HASH, PUB_ORIGIN, SECRET_PROJECT, PRIV_ORIGIN],
152
163
  );
164
+ // Both projects are on the map — active, described, door known — so the ONLY thing that
165
+ // keeps the second one unnamed is its private door. A fixture that left out the
166
+ // description would pass the "never named" check for the wrong reason (unpublishable).
153
167
  await q(
154
- `INSERT INTO platform_identity_projects (origin, name, featured, status)
155
- VALUES ($1, 'P05 Pub Proj', true, 'active'), ($2, $3, false, 'active')`,
168
+ `INSERT INTO platform_identity_projects (origin, name, featured, status, description, visibility, visibility_source)
169
+ VALUES ($1, 'P05 Pub Proj', true, 'active', 'A public P05 project.', 'public', 'control-plane'),
170
+ ($2, $3, false, 'active', 'A private P05 project.', 'private', 'control-plane')`,
156
171
  [PUB_ORIGIN, PRIV_ORIGIN, SECRET_PROJECT],
157
172
  );
158
173
  await q(
@@ -180,7 +195,7 @@ try {
180
195
  assert.equal(r.json.cross_project.totals.projects, 2, 'both projects count');
181
196
  assert.equal(r.json.cross_project.projects.length, 1, 'only the publicly listed project is named');
182
197
  assert.equal(r.json.cross_project.projects[0].name, 'P05 Pub Proj');
183
- assert.deepEqual(Object.keys(r.json.cross_project.projects[0]).sort(), ['name', 'origin', 'rank_held'].sort());
198
+ assert.deepEqual(Object.keys(r.json.cross_project.projects[0]).sort(), ['name', 'origin', 'rank_held', 'recent_ships'].sort());
184
199
  assert.equal(r.json.cross_project.more_projects, 1, 'the non-public project is counted, never named');
185
200
  assert.equal(r.json.account.bio, 'Builds things.', 'bio serializes (P02)');
186
201
  assert.deepEqual(r.json.account.links, { website: 'https://p05.example/' }, 'links serialize (P02)');