@bongos/core 1.19.738 → 1.19.740

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.
@@ -1950,5 +1950,9 @@ is load-bearing: the script throws rather than guess if it is missing, and
1950
1950
  landed since 1.19.736 with no explicit bump. run 34795026282. (task 1002620)
1951
1951
  1.19.738 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
1952
1952
  landed since 1.19.737 with no explicit bump. run 34797297122. (task 1002620)
1953
+ 1.19.739 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
1954
+ landed since 1.19.738 with no explicit bump. run 34838475604. (task 1002620)
1955
+ 1.19.740 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
1956
+ landed since 1.19.739 with no explicit bump. run 34839732962. (task 1002620)
1953
1957
  ---------------------------------------------------------------------------
1954
1958
  ```
@@ -14,7 +14,7 @@
14
14
  |---|---|---|
15
15
  | `@bongos/core` | the platform an instance installs + the `bongos` CLI (`bin`) | `bongos package-core` (`scripts/gds/package-core.js`) — synthesizes the package.json + a pruned lockfile, redacts, and packs a `.tgz` |
16
16
 
17
- `@bongos/core` carries `publishConfig: { access: "restricted" }`, so **publishing it is private by default** — no public leak if a flag is forgotten.
17
+ `@bongos/core` carries `publishConfig: { access: "public" }`, and `publishArgs` passes `--access public` as well — both, so neither drifting alone can silently take the package back to restricted ([ADR 0283](../adr/0283-the-core-publishes-publicly-because-access-was-never-the-thing-protecting-it.md)). It read `restricted` until 2026-09-13; what protects the artifact is the no-leak gate on the build, not who may fetch it.
18
18
 
19
19
  The generated typed client (`node scripts/gds/gen-api-client.js` → `clients/bongos-client/`) is deliberately **not** in this table: it is not published, carries no `publishConfig`, and is consumed by vendoring. See its own README.
20
20
 
@@ -33,15 +33,15 @@ These involve payment and permanent, account-level actions. They are **not** don
33
33
  Always preview with a dry-run first (no upload, no login needed):
34
34
 
35
35
  ```sh
36
- # Core — build the tarball and DRY-RUN the private publish:
36
+ # Core — build the tarball and DRY-RUN the publish:
37
37
  node scripts/gds/package-core.js --publish
38
38
  ```
39
39
 
40
- Look for `restricted access` and the `@bongos/core@<version>` line. When it looks right, publish for real (this is **permanent** — npm can't delete a name after 72h):
40
+ Look for `public access` and the `@bongos/core@<version>` line. When it looks right, publish for real (this is **permanent and public** — npm can't delete a name after 72h, and the version is never reusable):
41
41
 
42
42
  ```sh
43
43
  npm login # once per machine (+ 2FA)
44
- node scripts/gds/package-core.js --publish --live # actually publishes, still private
44
+ node scripts/gds/package-core.js --publish --live # actually publishes, PUBLIC
45
45
  ```
46
46
 
47
47
  For the client (note the `./` — without it, npm reads the path as a git package spec, not a folder):
@@ -101,13 +101,13 @@ A tokenless registry `npm ci` 404s cleanly (`E404 … @bongos/core … could not
101
101
 
102
102
  > **Proven end-to-end (2026-07-08, task 2118 / blocker 71).** A real `bongos init --registry-core` scaffold, with a valid read-only token in `NPM_TOKEN`, resolved `@bongos/core@1.17.0` straight from `registry.npmjs.org` and generated a reproducible `package-lock.json`. Both legs are confirmed: the registry pull works with a token and fails closed (404) without one. Provisioning still defaults to the vendored tarball until an owner explicitly sets `PROVISION_CORE_FROM_REGISTRY=1` on a live runner.
103
103
 
104
- ## Going public at launch
104
+ ## Going public — DONE 2026-09-13
105
105
 
106
- Pick either — both keep the daily `bongos` command working:
106
+ `@bongos/core` is public ([ADR 0283](../adr/0283-the-core-publishes-publicly-because-access-was-never-the-thing-protecting-it.md), [task 1003872](https://cloudbongos.com/builders#/task/1003872)). `publishConfig.access` is `"public"` and the registry-side status was flipped with the one-time owner step:
107
107
 
108
- - **Flip the same scoped packages public** (simplest):
109
- ```sh
110
- npm access public @bongos/core
111
- ```
112
- (Or change `publishConfig.access` to `"public"` and republish.) Public installs need no token; the paid seats can be dropped.
108
+ ```sh
109
+ npm access set status=public @bongos/core
110
+ ```
111
+
112
+ That registry flip is separate from `--access public` on a publish, which governs only what *that* publish declares and is historically a no-op when re-publishing an already-private package. Verify the flip by a tokenless install from a clean `HOME`, not by the flag's presence. Public installs need no token; the paid private-package seats can be dropped.
113
113
  - **Also publish the unscoped vanity name** for `npm install -g cloudbongos` — that is [task 2025](https://example.com/builders#/task/2025) (rename in `package-core.js`/`upgrade.js` + docs), done at launch.
@@ -985,12 +985,19 @@ summary{min-height:24px;padding:3px 0;}
985
985
  the reason is stated here, on the path every founder actually takes —
986
986
  not only on the Home step's re-connect branch (task 1003232). -->
987
987
  <p class="finePrint" id="wizScopeNote">Signing in asks GitHub for repository access. GitHub words this as access to <em>all</em> your repositories — that is the only permission it offers that can write to a private repo. We use it to create (or read) the one repo your project lives in and push its starting files. Nothing else is touched.</p>
988
- <!-- Trust link → the AGPL license text (task 1002705): the old private-repo URL
989
- 404ed, and no public code artifact exists until the ADR 0099 mirror flips
990
- (~2026-11; npm scopes are private too) — the license is the one live,
991
- instance-neutral artifact behind the claim today. -->
988
+ <!-- Trust links (task 1003502, superseding task 1002705's license-only fallback).
989
+ TWO links, because the sentence makes two claims: "open source" → the CODE,
990
+ "(AGPL-3.0)" → the licence it is under. The code half was impossible until
991
+ 2026-09-13 — the old private-repo URL 404ed, both npm scopes were private,
992
+ and the ADR 0099 mirror is dormant until ~2026-11, which left the licence
993
+ text as the only live artifact. Task 1003872 / ADR 0283 published
994
+ @bongos/core publicly, so the claim now resolves to the platform itself
995
+ (npm renders a README + a browsable Code tab; verified by a tokenless
996
+ `npm pack` from a clean HOME, the ADR 0283 standard). Not @cloudbongos/cli:
997
+ that is the 32-file generated client, a slice of the thing being claimed. -->
992
998
  <p class="finePrint">Free while we find our feet. Your project’s repo and server are yours —
993
- <span data-brand-product-inline>Cloud Bongos</span> is <a href="https://www.gnu.org/licenses/agpl-3.0.html" target="_blank" rel="noopener">open source (AGPL-3.0)</a>
999
+ <span data-brand-product-inline>Cloud Bongos</span> is <a href="https://www.npmjs.com/package/@bongos/core" target="_blank" rel="noopener">open source</a>
1000
+ (<a href="https://www.gnu.org/licenses/agpl-3.0.html" target="_blank" rel="noopener">AGPL-3.0</a>)
994
1001
  and capture-resistant by design.</p>
995
1002
  <div class="alert" id="wizGateAlert" role="alert"></div>
996
1003
  </section>
@@ -1016,7 +1023,8 @@ summary{min-height:24px;padding:3px 0;}
1016
1023
  </div>
1017
1024
  </form>
1018
1025
  <p class="finePrint">Free while we find our feet. Your project’s repo and server are yours —
1019
- <span data-brand-product-inline>Cloud Bongos</span> is <a href="https://www.gnu.org/licenses/agpl-3.0.html" target="_blank" rel="noopener">open source (AGPL-3.0)</a>
1026
+ <span data-brand-product-inline>Cloud Bongos</span> is <a href="https://www.npmjs.com/package/@bongos/core" target="_blank" rel="noopener">open source</a>
1027
+ (<a href="https://www.gnu.org/licenses/agpl-3.0.html" target="_blank" rel="noopener">AGPL-3.0</a>)
1020
1028
  and capture-resistant by design.</p>
1021
1029
  </section>
1022
1030
 
package/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.19.738",
3
+ "version": "1.19.740",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@bongos/core",
9
- "version": "1.19.738",
9
+ "version": "1.19.740",
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.738",
3
+ "version": "1.19.740",
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",
@@ -580,7 +580,8 @@ function publishArgs(tgzPath, live) {
580
580
 
581
581
  // Publish (or dry-run) the built .tgz to npm. Auth is npm's own concern — this
582
582
  // never holds a token; it shells out to `npm publish` and the owner's `npm login`
583
- // (+ the cloudbongos org on a paid plan, for a PRIVATE scoped publish) provides it.
583
+ // provides it. The package is PUBLIC (task 1003872, ADR 0283), so no paid org plan
584
+ // is involved — a public scoped publish needs none.
584
585
  // The child's stdout is routed to OUR stderr so main()'s machine-readable pin on
585
586
  // stdout stays clean for CI capture.
586
587
  function publishTarball({ tgzPath, live }) {
@@ -589,16 +590,16 @@ function publishTarball({ tgzPath, live }) {
589
590
  console.error(`[package-core] ${live ? 'PUBLISH (permanent)' : 'publish DRY-RUN'} → ${NPM_BIN} ${args.join(' ')}`);
590
591
  if (!live) {
591
592
  console.error(' Dry-run: nothing is uploaded. To publish for real: re-run with --publish --live.');
592
- console.error(' That is PERMANENT and requires `npm login` + the cloudbongos npm org on a paid plan');
593
- console.error(' (private scoped publish needs one). Going public later: `npm access public @bongos/core`.');
593
+ console.error(' That is PERMANENT and PUBLIC (ADR 0283) — anyone can fetch it, and a version is never');
594
+ console.error(' reusable once taken. It requires `npm login`; no paid org plan (the package is public).');
594
595
  }
595
596
  const r = spawnSync(NPM_BIN, args, { cwd: REPO_ROOT, stdio: ['inherit', process.stderr, 'inherit'] });
596
597
  if (r.error || r.status !== 0) {
597
598
  console.error(`[package-core] npm publish ${live ? '' : '--dry-run '}FAILED (${r.error ? r.error.message : `exit ${r.status}`}).`);
598
- if (live) console.error(' Common causes: not logged in (`npm login`), the org isn’t on a paid plan (private scoped publish requires one), or 2FA.');
599
+ if (live) console.error(' Common causes: not logged in (`npm login`), no publish rights on the @bongos scope, that version already taken, or 2FA.');
599
600
  process.exit(r.status || 1);
600
601
  }
601
- console.error(`[package-core] npm publish ${live ? 'succeeded — @bongos/core is live (private).' : 'dry-run OK — the tarball is publishable.'}`);
602
+ console.error(`[package-core] npm publish ${live ? 'succeeded — @bongos/core is live and PUBLIC on the registry.' : 'dry-run OK — the tarball is publishable.'}`);
602
603
  }
603
604
 
604
605
  // The neutral FLOOR — customer-zero identity tokens a portable core must never carry (task 1002220
@@ -1048,7 +1049,7 @@ module.exports = {
1048
1049
  isAgentDoc, CORE_AGENT_DOC_STUB,
1049
1050
  // task 1882 (ADR 0108 §2) — the real installable npm package
1050
1051
  CORE_DEP_NAMES, buildPackageJson, resolveLockDep, lockfileClosure, prunePackageLock,
1051
- // task 2089 (ADR 0134) — private-by-default npm publish
1052
+ // task 2089 (ADR 0134) — the npm publish argv; PUBLIC since task 1003872 / ADR 0283
1052
1053
  publishArgs,
1053
1054
  // task 1002218 (audit H3) — build-time self-verify (reproduce pin + optional bare-install boot)
1054
1055
  selfVerify, reproducePinFromTree,
package/src/module-api.js CHANGED
@@ -71,7 +71,7 @@ const { responsibilityFor, ROLE_RESPONSIBILITIES } = require('./role-responsibil
71
71
  // there. scripts/gds/bump-version.js still rewrites the literal below; it appends
72
72
  // the entry to that file. Look for a version's history there, not here.
73
73
  // ---------------------------------------------------------------------------
74
- const CORE_VERSION = '1.19.738'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
74
+ const CORE_VERSION = '1.19.740'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
75
75
 
76
76
  // A namespaced logger so a module's log lines are attributable + consistent.
77
77
  // Usage: const log = api.logger('dev-box'); log.info('mounted');
package/tests/onboard.mjs CHANGED
@@ -213,17 +213,24 @@ test('the wizard done panel is plan-driven, manifest-driven, and owner-honest (t
213
213
  assert.match(src, /id="c-adopt"/, 'the private path (adopt your own private repo) is named');
214
214
  });
215
215
 
216
- test('the wizard gate trust link points at a live artifact, not the dead private-repo URL (task 1002705)', () => {
216
+ test('the wizard gate trust link points at browsable code, not just the license (tasks 1002705, 1003502)', () => {
217
217
  // Gap 1 of the project-creation audit: the gate linked a nonexistent private repo
218
- // (404 even authenticated — ADR 0167 names it). No public code artifact exists yet
219
- // (the ADR 0099 mirror is dormant until ~2026-11, and both npm scopes 404 anonymously
220
- // — verified 2026-08-12), so the one live, instance-neutral artifact behind
221
- // "open source" is the license itself.
218
+ // (404 even authenticated — ADR 0167 names it). Task 1002705 fell back to the license
219
+ // text because nothing else was live: the ADR 0099 mirror is dormant until ~2026-11,
220
+ // and both npm scopes 404ed anonymously (verified 2026-08-12).
221
+ //
222
+ // THAT PREMISE DIED 2026-09-13 (task 1003872 / ADR 0283): @bongos/core publishes
223
+ // PUBLIC, and a tokenless `npm pack` from a clean HOME fetches the platform. So the
224
+ // sentence now splits its two claims across two links — "open source" at the code,
225
+ // "(AGPL-3.0)" at the license — and BOTH are asserted here. Do not collapse them:
226
+ // dropping the npm link silently returns the gate to claiming open source while
227
+ // showing only a license, which is the defect task 1003502 was filed about.
222
228
  const { readFileSync } = require('node:fs');
223
229
  const path = require('node:path');
224
230
  const src = readFileSync(path.join(import.meta.dirname, '..', 'modules/public-landing/public/projects.html'), 'utf8');
225
231
  assert.doesNotMatch(src, /Claude-OTB/, 'the dead repo link is gone');
226
- assert.match(src, /https:\/\/www\.gnu\.org\/licenses\/agpl-3\.0/, 'the trust link resolves (the AGPL-3.0 license text)');
232
+ assert.match(src, /https:\/\/www\.npmjs\.com\/package\/@bongos\/core/, 'the trust link reaches browsable code (the public @bongos/core package)');
233
+ assert.match(src, /https:\/\/www\.gnu\.org\/licenses\/agpl-3\.0/, 'and the license it is under is still one click away');
227
234
  });
228
235
 
229
236
  test('oauthAppInstructions pins the apex callback + homepage and points at ACCOUNT Developer settings', () => {