@bongos/core 1.20.62 → 1.20.63

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.62",
6
- "core_contract": "1.20.62",
7
- "source_commit": "38acba884eac9c41b8648a84e81fd1bf405afa4f",
5
+ "core_version": "1.20.63",
6
+ "core_contract": "1.20.63",
7
+ "source_commit": "176bf17dc58ea3cf365fa0243dab4b05784ea5ff",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-10-01T10:28:21.912Z",
9
+ "built_at": "2026-10-01T10:39:31.324Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 572,
@@ -17,7 +17,7 @@
17
17
  "gate": "passed"
18
18
  },
19
19
  "file_count": 3390,
20
- "tree_sha256": "b152eccd4354d5a51a47a32cbe58eddabe889dcdc3771178d70814e05f61c58c",
20
+ "tree_sha256": "42a03693b34fa6dd32c78aae2429796822c0abf86e18f4d00a5dd9a250a7bd8e",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -2802,7 +2802,7 @@
2802
2802
  {
2803
2803
  "path": "docs/module-api-changelog.md",
2804
2804
  "mode": "0000644",
2805
- "sha256": "6ba77376f4f8ea0daa6090fe16135a131e9b90b8c5d3559c5932db2bab541016"
2805
+ "sha256": "4b74d3eb491a91c4b34c6d6b34433090c11a50e433377eaf6fe3cb1b84d9a7e8"
2806
2806
  },
2807
2807
  {
2808
2808
  "path": "docs/modules-contract.md",
@@ -3057,7 +3057,7 @@
3057
3057
  {
3058
3058
  "path": "docs/recipes/upgrading-the-core.md",
3059
3059
  "mode": "0000644",
3060
- "sha256": "dfb8a97fc8955bdea090dcb673c0a1b8ea890ae1aa15dff1d22a5db8d0477429"
3060
+ "sha256": "d480c1cae6b31e4cc13e662468ca421cc7a57a2be435bba083796dba56b64bc8"
3061
3061
  },
3062
3062
  {
3063
3063
  "path": "docs/recipes/windows-builders.md",
@@ -9447,12 +9447,12 @@
9447
9447
  {
9448
9448
  "path": "package-lock.json",
9449
9449
  "mode": "0000644",
9450
- "sha256": "8d6ab41ffe14567ae2027926260eda90e96ffb4c98737f1e14409c699003aab3"
9450
+ "sha256": "f7863bad94ee203f0202eb82ffcb14eb16169d6d9d468949f9ce10b474bebb48"
9451
9451
  },
9452
9452
  {
9453
9453
  "path": "package.json",
9454
9454
  "mode": "0000644",
9455
- "sha256": "185364d802ce214a78623d07f59be243499b5f854efe3447a62c2dc023f7fa1e"
9455
+ "sha256": "cf1878df111c38785f9cea2ad79345600cb52753c9ee0240557c34c2d5a4ec4d"
9456
9456
  },
9457
9457
  {
9458
9458
  "path": "public-docs/index.html",
@@ -9472,7 +9472,7 @@
9472
9472
  {
9473
9473
  "path": "release-notes.json",
9474
9474
  "mode": "0000644",
9475
- "sha256": "2d0a6e7f73b17f7eae1cdd2e621ae2880082141195a1cfd0bfe88d6eaa879622"
9475
+ "sha256": "c20ccbe0a440e41263b90ff1c1ac287293ddad91987e51c54169c53557d58048"
9476
9476
  },
9477
9477
  {
9478
9478
  "path": "scripts/bongos-mcp.js",
@@ -10457,7 +10457,7 @@
10457
10457
  {
10458
10458
  "path": "scripts/gds/provision-core-upgrade.js",
10459
10459
  "mode": "0000644",
10460
- "sha256": "53904eb7a91f7f0c7c80c3caaceed29d6317652d6830e1f575198b0ba9f5158f"
10460
+ "sha256": "1f63f4b896a235f6c4efc4889d8b94aba4118ab2d7e702d637fd3642f9de1ccc"
10461
10461
  },
10462
10462
  {
10463
10463
  "path": "scripts/gds/provision-disconnect.js",
@@ -11652,7 +11652,7 @@
11652
11652
  {
11653
11653
  "path": "src/module-api.js",
11654
11654
  "mode": "0000644",
11655
- "sha256": "46631e7f30bf1f9056e310e5ebf8cb0c88001eb043a93a725be8513638e90ac6"
11655
+ "sha256": "fea073232885d1447d4a04887ae94ab788a8879682972c39666cc06bc848f4ff"
11656
11656
  },
11657
11657
  {
11658
11658
  "path": "src/module-loader/catalog.js",
@@ -12627,7 +12627,7 @@
12627
12627
  {
12628
12628
  "path": "tests/core_upgrade_runner.mjs",
12629
12629
  "mode": "0000644",
12630
- "sha256": "525e38bbafc2dd1419f3e41131dd89c6adc4f063f8585b193e2be72801bede5a"
12630
+ "sha256": "756ddbafdf6e1d116c6984a989154c24cdbfb927572b71dc2b9dab27f82b2dab"
12631
12631
  },
12632
12632
  {
12633
12633
  "path": "tests/cosmos_token_contrast.mjs",
@@ -2781,5 +2781,7 @@ is load-bearing: the script throws rather than guess if it is missing, and
2781
2781
  landed since 1.20.60 with no explicit bump. run 36846600005. (task 1002620)
2782
2782
  1.20.62 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2783
2783
  landed since 1.20.61 with no explicit bump. run 36849277076. (task 1002620)
2784
+ 1.20.63 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
2785
+ landed since 1.20.62 with no explicit bump. run 36850426143. (task 1002620)
2784
2786
  ---------------------------------------------------------------------------
2785
2787
  ```
@@ -90,6 +90,8 @@ The sections above are the *manual* `bongos upgrade`. The **subscription** runs
90
90
 
91
91
  A **major** is never automatic; prereleases are never auto-targeted.
92
92
 
93
+ **Crossing a minor from /deploy** (task [1004405](https://cloudbongos.com/builders#/task/1004405)): set the project's update rule to **Fixes and new releases** (`minor`), or press **Allow new releases and move** on the refused move — either is the explicit "this crosses a minor version" choice. That only works once the box runs a core whose runner reads the rule (core 1.20.29 or later, task [1004445](https://cloudbongos.com/builders#/task/1004445)). A box on anything older runs the old runner, which bounds every move to `patch` whatever the rule says, so its **first** crossing is the manual `upgrade.js --to <version>` above; every later one goes through /deploy.
94
+
93
95
  **Where the channel comes from** ([ADR 0357](../adr/0357-the-update-rule-set-on-deploy-is-the-one-the-sweep-follows.md), task [1004468](https://cloudbongos.com/builders#/task/1004468)): the rule set on **/deploy** (`provisioning_instances.update_channel`) wins for any roster entry whose `slug` matches a project row. The roster's `channel` below is only the fallback, used when no row matches or the sweep can't read the database. The sweep reads the control plane's DB from `UPDATE_CHANNEL_DB` (a db name or connection string), else `DATABASE_URL` / `PGDATABASE`. On a control plane, set `UPDATE_CHANNEL_DB`, never `PGDATABASE`: the sweep's env reaches every upgrade it spawns, so a tenant entry with no database of its own would migrate against the control plane's. Every run prints each entry's channel and its source.
94
96
 
95
97
  **Enrolling an instance** — add it to `config/update-subscriptions.json` (instance-side) (ships empty). `env` carries per-instance vars merged into the upgrade child — set `PGDATABASE` so `migrate` hits the right DB (see the Gotchas):
package/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.20.62",
3
+ "version": "1.20.63",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@bongos/core",
9
- "version": "1.20.62",
9
+ "version": "1.20.63",
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.62",
3
+ "version": "1.20.63",
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",
@@ -8497,5 +8497,11 @@
8497
8497
  "id": "1004307",
8498
8498
  "text": "The automatic update on cloudbongos.com will now always run the newest version of itself, instead of a copy stuck from August."
8499
8499
  }
8500
+ ],
8501
+ "1.20.63": [
8502
+ {
8503
+ "id": "1004405",
8504
+ "text": "When the Upgrade button refuses a jump to a new release line, it now tells you exactly which setting on /deploy to change, instead of pointing at a setting that didn't exist."
8505
+ }
8500
8506
  ]
8501
8507
  }
@@ -137,11 +137,26 @@ function targetFault(to, available, installed, channel, channelAllows) {
137
137
  return `could not read the core version installed at this instance — nothing was changed. An upgrade that cannot say where it is starting from cannot be bounded by the '${channel}' channel.`;
138
138
  }
139
139
  if (channelAllows && !channelAllows(installed, to, channel)) {
140
- return `core ${to} is outside this project's '${channel}' update channel — nothing was changed. Change the channel first if this is deliberate.`;
140
+ return `core ${to} is outside this project's '${channel}' update channel — nothing was changed. ${channelNextStep(channel)}`;
141
141
  }
142
142
  return null;
143
143
  }
144
144
 
145
+ // The step that gets a channel-refused move through, named by the control a person can
146
+ // actually reach (task 1004405). The old line said "change the channel first" while no
147
+ // channel could be changed; the update rule on /deploy (task 1004445) is that control now,
148
+ // and its labels are the words used here. `minor` is the widest rule, so a move it refuses
149
+ // (a major, a prerelease) has no rule to widen to and is named as the by-hand step it is.
150
+ function channelNextStep(channel) {
151
+ if (channel === 'pinned') {
152
+ return 'Its update rule on /deploy is "Stay put"; change it to "Fixes only" or "Fixes and new releases", then move again.';
153
+ }
154
+ if (channel === 'minor') {
155
+ return 'No update rule moves a project across a major version or onto a prerelease; that move is made by hand with upgrade.js (docs/recipes/upgrading-the-core.md).';
156
+ }
157
+ return 'To take a new release line, set this project\'s update rule on /deploy to "Fixes and new releases" (or press "Allow new releases and move"), then move again.';
158
+ }
159
+
145
160
  // The update channel that bounds a move for THIS instance (task 1004445): the row's own
146
161
  // `update_channel`, normalised by update-channel.js so anything unknown or absent (a row
147
162
  // read before migration provisioning_029) falls back to DEFAULT_CHANNEL. PURE. One helper
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.62'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
78
+ const CORE_VERSION = '1.20.63'; // 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');
@@ -219,6 +219,19 @@ await t('a version that is not published yet is refused, and the message says th
219
219
  assert.match(f, /tag appears several minutes before/);
220
220
  });
221
221
 
222
+ await t('the channel refusal names a step that EXISTS on /deploy, never "change the channel first" (task 1004405)', () => {
223
+ const patch = R.targetFault('1.20.1', ['1.19.1081', '1.20.1'], '1.19.1081', 'patch', () => false);
224
+ assert.ok(!/Change the channel first/.test(patch), 'the old wording named nothing a person could do');
225
+ assert.match(patch, /\/deploy/);
226
+ assert.match(patch, /Fixes and new releases/, 'patch → names the rule that admits a minor jump');
227
+ const pinned = R.targetFault('1.19.1082', ['1.19.1081', '1.19.1082'], '1.19.1081', 'pinned', () => false);
228
+ assert.match(pinned, /Stay put/);
229
+ assert.match(pinned, /Fixes only/);
230
+ const major = R.targetFault('2.0.0', ['1.19.1081', '2.0.0'], '1.19.1081', 'minor', () => false);
231
+ assert.match(major, /no update rule/i, 'minor is the widest rule, so pointing at a wider one would be a lie');
232
+ assert.match(major, /upgrading-the-core\.md/);
233
+ });
234
+
222
235
  await t('a registry that could not be read is refused DIFFERENTLY from a version that does not exist', () => {
223
236
  const empty = R.targetFault('1.19.760', [], '1.19.758', 'patch', () => true);
224
237
  assert.match(empty, /could not read the published core versions/);