@bongos/core 1.20.78 → 1.20.79

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.20.78",
6
- "core_contract": "1.20.78",
7
- "source_commit": "54fe45a4edf4789308fc09a05904110b20b555ff",
5
+ "core_version": "1.20.79",
6
+ "core_contract": "1.20.79",
7
+ "source_commit": "64ae8acdc9544a463ce41e8e0ce8dfee875327cd",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-10-01T20:43:40.208Z",
9
+ "built_at": "2026-10-01T20:53:47.318Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 575,
@@ -17,7 +17,7 @@
17
17
  "gate": "passed"
18
18
  },
19
19
  "file_count": 3414,
20
- "tree_sha256": "f7d14f92e9dd084e4959190624762c8a22148f6700e48f0ef079e9988a92a5dc",
20
+ "tree_sha256": "5941d8223207a2d128e436b272afafd9d42babc2a4e3a6f53703030f345c2524",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -2812,7 +2812,7 @@
2812
2812
  {
2813
2813
  "path": "docs/module-api-changelog.md",
2814
2814
  "mode": "0000644",
2815
- "sha256": "2b7d697f9a5870c16de63e84268ee995f0c1ef7aedc825cf1d7610559744677d"
2815
+ "sha256": "00fccfe8cd2be193718d7afb974532b1894c9a7e84d253efbc4d701bdeb77fd8"
2816
2816
  },
2817
2817
  {
2818
2818
  "path": "docs/modules-contract.md",
@@ -8062,7 +8062,7 @@
8062
8062
  {
8063
8063
  "path": "modules/provisioning/render-standup.js",
8064
8064
  "mode": "0000644",
8065
- "sha256": "e1ace20074d6bcb25cc457b240512925ed5b7d4cc931633082d262067fce9f8a"
8065
+ "sha256": "51c00d712c515978cdffcde9ae2c6a170c96be931937a10d557b56de553baf67"
8066
8066
  },
8067
8067
  {
8068
8068
  "path": "modules/provisioning/repo-private.js",
@@ -9492,12 +9492,12 @@
9492
9492
  {
9493
9493
  "path": "package-lock.json",
9494
9494
  "mode": "0000644",
9495
- "sha256": "f8da6c11ec17d4c4a83d5e070d3ae0c941376a527b4a9a0be7ce1903d7beb482"
9495
+ "sha256": "a4642f9f20444bff0403d128e168c46d6b4f324e2ac1f4c96d7bedfd46364993"
9496
9496
  },
9497
9497
  {
9498
9498
  "path": "package.json",
9499
9499
  "mode": "0000644",
9500
- "sha256": "8dfe3adc1e608279f3ffee6a8cdfd3c7c32b7581395ea81bb000dc370afe0035"
9500
+ "sha256": "777adb699d644169fbc9f584cc905c72f2194e128bbbd2b9964e3cc5f0b85c8a"
9501
9501
  },
9502
9502
  {
9503
9503
  "path": "public-docs/index.html",
@@ -9517,7 +9517,7 @@
9517
9517
  {
9518
9518
  "path": "release-notes.json",
9519
9519
  "mode": "0000644",
9520
- "sha256": "e70c626913df104cf096a75eb4b06ff9cabcddda470e063839a4fffd26e78407"
9520
+ "sha256": "3e51a0173ecdada1d9b65f38767b58a304e2a6b8db380d19cd385161a04802f5"
9521
9521
  },
9522
9522
  {
9523
9523
  "path": "scripts/bongos-mcp.js",
@@ -10242,7 +10242,7 @@
10242
10242
  {
10243
10243
  "path": "scripts/gds/init.js",
10244
10244
  "mode": "0000644",
10245
- "sha256": "14c21f1640f81fa039c59a49acb0155e5fa6eb4eb177e845ceec1f88bc067528"
10245
+ "sha256": "f9e77db85aa1ec20f55f0e96cade7c2977863d21a4c148407deb965b436bfdc3"
10246
10246
  },
10247
10247
  {
10248
10248
  "path": "scripts/gds/install-git-hooks.js",
@@ -11712,7 +11712,7 @@
11712
11712
  {
11713
11713
  "path": "src/module-api.js",
11714
11714
  "mode": "0000644",
11715
- "sha256": "f11189e9084e5a2b10a2767bfa8166a419fbd202e90252a628a1fc426f7102f9"
11715
+ "sha256": "63daeed9c2794aa30bb815c8e2af623e13808ecbe4d58c3d02b9d8fb1aeeae79"
11716
11716
  },
11717
11717
  {
11718
11718
  "path": "src/module-loader/catalog.js",
@@ -14367,7 +14367,7 @@
14367
14367
  {
14368
14368
  "path": "tests/init.mjs",
14369
14369
  "mode": "0000644",
14370
- "sha256": "376da89565a6ad32788029406163bc6b5198e3279e07645256550747ec1b728a"
14370
+ "sha256": "6549706010a545b9d387d8e3f4f4a157a5088c4292dbc288e3e7fc27f5335ead"
14371
14371
  },
14372
14372
  {
14373
14373
  "path": "tests/instance_config.mjs",
@@ -16892,7 +16892,7 @@
16892
16892
  {
16893
16893
  "path": "tests/upgrade_migrate.mjs",
16894
16894
  "mode": "0000644",
16895
- "sha256": "d3f5b941b89ede78ebb3cd7af43467363e5d6c6d35c7ad26a2977683ecf869e7"
16895
+ "sha256": "47048521bb37c9debc02ef5c366bfe863450eb944023cce60ba182b9640563ee"
16896
16896
  },
16897
16897
  {
16898
16898
  "path": "tests/upgrade_outcome.mjs",
@@ -2813,5 +2813,7 @@ is load-bearing: the script throws rather than guess if it is missing, and
2813
2813
  landed since 1.20.76 with no explicit bump. run 36909904812. (task 1002620)
2814
2814
  1.20.78 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2815
2815
  landed since 1.20.77 with no explicit bump. run 36923602676. (task 1002620)
2816
+ 1.20.79 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2817
+ landed since 1.20.78 with no explicit bump. run 36924822923. (task 1002620)
2816
2818
  ---------------------------------------------------------------------------
2817
2819
  ```
@@ -57,7 +57,8 @@ const SERVICE_RE = /^srv-[a-z0-9]{8,64}$/;
57
57
  // The hall is never the app (ADR 0345 D1). A command that runs the Bongos core itself puts
58
58
  // a second, database-less copy of the project's hall on Render, where it never answers and
59
59
  // the deploy times out — measured live on project 43 (task 1004483). It cannot see through
60
- // the scaffold's own `npm start`, which still runs the hall; that is task 1004484.
60
+ // `npm start`, so the scaffold no longer puts the hall there: it is `npm run hall`, and
61
+ // `npm start` is left for the app (task 1004484, scripts/gds/init.js).
61
62
  const HALL_COMMAND_RE = /platform-server\.js|node_modules[\\/]@bongos[\\/]core/i;
62
63
  const HALL_REFUSAL = 'That command starts the project’s Builders’ hall, which we already host — not your app. Give the command that starts your app.';
63
64
  function badRequest(body) {
package/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.20.78",
3
+ "version": "1.20.79",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@bongos/core",
9
- "version": "1.20.78",
9
+ "version": "1.20.79",
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.20.78",
3
+ "version": "1.20.79",
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",
@@ -8609,5 +8609,11 @@
8609
8609
  "id": "1004297",
8610
8610
  "text": "Each project can now be set to take every new version (Bongos) or only released ones (everyone else), a version that fails is no longer retried in a loop, and the deploy page shows each upgrade, any rollback, and when the auto"
8611
8611
  }
8612
+ ],
8613
+ "1.20.79": [
8614
+ {
8615
+ "id": "1004484",
8616
+ "text": "New projects no longer have their 'start' command pointing at the Bongos hall, so when an owner later connects Render with the usual 'npm start', it runs their app instead of a broken second copy of the hall."
8617
+ }
8612
8618
  ]
8613
8619
  }
@@ -126,20 +126,24 @@ function coreVersionSafe() {
126
126
  }
127
127
 
128
128
  // The npm scripts a STANDALONE greenfield instance runs. They MIRROR how the control
129
- // plane runs a standalone instance (scripts/gds/provision.js): `start` = the systemd
129
+ // plane runs a standalone instance (scripts/gds/provision.js): `hall` = the systemd
130
130
  // ExecStart (`node <core>/src/platform-server.js`), `migrate` = standaloneMigrateCmd
131
- // (`bash <core>/scripts/migrate.sh`). Keeping them identical means `npm start` /
131
+ // (`bash <core>/scripts/migrate.sh`). Keeping them identical means `npm run hall` /
132
132
  // `npm run migrate` on the instance behave like production, and `bongos upgrade`'s
133
133
  // `npm run migrate` step resolves to the core's migrate.sh (ADR 0108).
134
+ // The hall is deliberately NOT `start` (task 1004484): `npm start` belongs to the
135
+ // project's own app, and a host like Render reads it as "how this app starts" — given the
136
+ // hall there, the deploy has no database and times out. Nothing runs an instance's
137
+ // `npm start`: the box unit and `bongos dev` both start platform-server.js directly.
134
138
  const INSTANCE_CORE_PKG_DIR = 'node_modules/@bongos/core';
135
- const INSTANCE_START_SCRIPT = `node ${INSTANCE_CORE_PKG_DIR}/src/platform-server.js`;
139
+ const INSTANCE_HALL_SCRIPT = `node ${INSTANCE_CORE_PKG_DIR}/src/platform-server.js`;
136
140
  const INSTANCE_MIGRATE_SCRIPT = `bash ${INSTANCE_CORE_PKG_DIR}/scripts/migrate.sh`;
137
141
 
138
142
  // PURE (exported for tests) — build/augment the greenfield instance package.json so a
139
143
  // fresh instance is `npm ci`-installable and runnable (ADR 0108 greenfield gap 1/4,
140
144
  // task 2053): the @bongos/core dependency (the `file:` tarball pin when a tarball is
141
145
  // vendored, else the declared caret range — the CARET RESOLVES NOWHERE on npm, which is
142
- // exactly why the vendored path pins `file:`) plus the start/migrate npm scripts a
146
+ // exactly why the vendored path pins `file:`) plus the hall/migrate npm scripts a
143
147
  // standalone instance runs. Preserves any pre-existing fields + scripts (fills only what
144
148
  // is missing); greenfield OWNS the core dep, so it is always (re)set to `coreDep`. Never
145
149
  // spawns npm — generating the lockfile is a separate imperative step in main().
@@ -155,7 +159,13 @@ function buildInstancePackageJson(existing, { name = 'cloudbongos-instance', cor
155
159
  if (!pkg.name) pkg.name = name;
156
160
  if (pkg.private === undefined) pkg.private = true;
157
161
  pkg.scripts = { ...(isObj(pkg.scripts) ? pkg.scripts : {}) };
158
- if (!pkg.scripts.start) pkg.scripts.start = INSTANCE_START_SCRIPT;
162
+ // A scaffold from before task 1004484 wrote the hall as `start`; move exactly that
163
+ // command (never an owner's own start) to `hall`, unless they already have a `hall`.
164
+ if (pkg.scripts.start === INSTANCE_HALL_SCRIPT && !pkg.scripts.hall) {
165
+ pkg.scripts.hall = pkg.scripts.start;
166
+ delete pkg.scripts.start;
167
+ }
168
+ if (!pkg.scripts.hall) pkg.scripts.hall = INSTANCE_HALL_SCRIPT;
159
169
  if (!pkg.scripts.migrate) pkg.scripts.migrate = INSTANCE_MIGRATE_SCRIPT;
160
170
  pkg.dependencies = {
161
171
  ...(isObj(moduleDeps) ? moduleDeps : {}),
@@ -1136,7 +1146,7 @@ module.exports = {
1136
1146
  buildReadmeSection, appendReadmeSection, layerReadme, README_MARKER,
1137
1147
  KNOWN_MODULES, HOSTING_SHAPES, CORE_PKG,
1138
1148
  // greenfield installability (ADR 0108 gap 1/4, task 2053)
1139
- buildInstancePackageJson, coreVersionSafe, INSTANCE_START_SCRIPT, INSTANCE_MIGRATE_SCRIPT,
1149
+ buildInstancePackageJson, coreVersionSafe, INSTANCE_HALL_SCRIPT, INSTANCE_MIGRATE_SCRIPT,
1140
1150
  // enabled-module dep composition (ADR 0138 / task 2160)
1141
1151
  moduleDeclaredDeps, enabledModuleDeps,
1142
1152
  };
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.20.78'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
78
+ const CORE_VERSION = '1.20.79'; // 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');
package/tests/init.mjs CHANGED
@@ -389,15 +389,18 @@ test('layerPackageJson: no package.json → creates one; second run → present,
389
389
  // ---- greenfield installability: package.json minting + writeConfigs (ADR 0108 gap 1/4, task 2053) ----
390
390
  // PURE — no fs, no npm. The imperative vendor + `npm install` lockfile step lives in main()
391
391
  // and is deliberately NOT unit-tested (keeps real npm out of the suite, per the task).
392
- test('buildInstancePackageJson: no package.json → mints a private one with the caret core dep + start/migrate scripts', () => {
392
+ test('buildInstancePackageJson: no package.json → mints a private one with the caret core dep + hall/migrate scripts', () => {
393
393
  const pkg = init.buildInstancePackageJson(null, { name: 'demo' });
394
394
  assert.equal(pkg.name, 'demo');
395
395
  assert.equal(pkg.private, true);
396
396
  assert.equal(pkg.dependencies[init.CORE_PKG], init.coreDepRange()); // caret when no tarball vendored
397
- assert.equal(pkg.scripts.start, init.INSTANCE_START_SCRIPT);
397
+ assert.equal(pkg.scripts.hall, init.INSTANCE_HALL_SCRIPT);
398
398
  assert.equal(pkg.scripts.migrate, init.INSTANCE_MIGRATE_SCRIPT);
399
- // the start/migrate scripts must target the installed core package so `npm ci` output is runnable
400
- assert.match(pkg.scripts.start, /node_modules\/@bongos\/core\/src\/platform-server\.js$/);
399
+ // `npm start` is left for the project's OWN app (task 1004484): a host like Render reads it
400
+ // as "how this app starts", and the hall there has no database and times out.
401
+ assert.equal(pkg.scripts.start, undefined);
402
+ // the hall/migrate scripts must target the installed core package so `npm ci` output is runnable
403
+ assert.match(pkg.scripts.hall, /node_modules\/@bongos\/core\/src\/platform-server\.js$/);
401
404
  assert.match(pkg.scripts.migrate, /node_modules\/@bongos\/core\/scripts\/migrate\.sh$/);
402
405
  });
403
406
 
@@ -419,6 +422,18 @@ test('buildInstancePackageJson: preserves existing fields + never clobbers a cus
419
422
  assert.equal(pkg.dependencies[init.CORE_PKG], 'file:vendor/bongos-core-1.17.0.tgz'); // dep (re)pinned
420
423
  });
421
424
 
425
+ test('buildInstancePackageJson: a start that is exactly the old scaffolded hall command moves to "hall" (task 1004484)', () => {
426
+ const old = 'node node_modules/@bongos/core/src/platform-server.js';
427
+ const pkg = init.buildInstancePackageJson({ scripts: { start: old, test: 'node --test' } }, { name: 'demo' });
428
+ assert.equal(pkg.scripts.start, undefined, 'npm start no longer runs the hall');
429
+ assert.equal(pkg.scripts.hall, old);
430
+ assert.equal(pkg.scripts.test, 'node --test');
431
+ // an owner's own "hall" script is never overwritten by the move
432
+ const kept = init.buildInstancePackageJson({ scripts: { start: old, hall: 'node my-hall.js' } }, { name: 'demo' });
433
+ assert.equal(kept.scripts.hall, 'node my-hall.js');
434
+ assert.equal(kept.scripts.start, old, 'with "hall" taken, start is left as the owner has it');
435
+ });
436
+
422
437
  // --- enabled-module dep composition (ADR 0138 / task 2160) --------------------
423
438
 
424
439
  test('enabledModuleDeps: merges only the ENABLED modules’ declared deps', () => {
@@ -475,7 +490,8 @@ test('writeConfigs (greenfield): mints package.json with the caret core dep + st
475
490
  assert.equal(pkg.name, 'cloud-bongos'); // slugified productName
476
491
  assert.equal(pkg.private, true);
477
492
  assert.equal(pkg.dependencies[init.CORE_PKG], init.coreDepRange());
478
- assert.equal(pkg.scripts.start, init.INSTANCE_START_SCRIPT);
493
+ assert.equal(pkg.scripts.hall, init.INSTANCE_HALL_SCRIPT);
494
+ assert.equal(pkg.scripts.start, undefined);
479
495
  assert.equal(pkg.scripts.migrate, init.INSTANCE_MIGRATE_SCRIPT);
480
496
  } finally {
481
497
  rmSync(dir, { recursive: true, force: true });
@@ -47,7 +47,7 @@ function adoptedProject({ installed = '1.19.312' } = {}) {
47
47
  return dir;
48
48
  }
49
49
 
50
- function scaffoldedProject(scripts = { migrate: init.INSTANCE_MIGRATE_SCRIPT, start: init.INSTANCE_START_SCRIPT }) {
50
+ function scaffoldedProject(scripts = { migrate: init.INSTANCE_MIGRATE_SCRIPT, hall: init.INSTANCE_HALL_SCRIPT }) {
51
51
  const dir = fixture('upgrade-migrate-scaffold-');
52
52
  writeFileSync(path.join(dir, 'package.json'), `${JSON.stringify({ name: 'charter', private: true, scripts, dependencies: { '@bongos/core': '1.19.871' } }, null, 2)}\n`);
53
53
  return dir;