@bongos/core 1.19.620 → 1.19.621

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.620",
6
- "core_contract": "1.19.620",
7
- "source_commit": "7e8c8d38a15a24575258eda58829e9120d9ed55f",
5
+ "core_version": "1.19.621",
6
+ "core_contract": "1.19.621",
7
+ "source_commit": "09c7ba3955b0789f34ce6265e17cfcf52de9f146",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-09-09T06:53:24.739Z",
9
+ "built_at": "2026-09-09T06:59:03.131Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 464,
@@ -17,7 +17,7 @@
17
17
  "gate": "passed"
18
18
  },
19
19
  "file_count": 2574,
20
- "tree_sha256": "8c5d0cef512909da1de5dd90510ca13a74737c8d3b80ec2d8e0a7fc5e1d9451d",
20
+ "tree_sha256": "76d591f3c619056f89124f5d2abb9e8d1fc2745277375693f575438d155faf7e",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/backlog-review/SKILL.md",
@@ -377,7 +377,7 @@
377
377
  {
378
378
  "path": "clients/bongos-client/README.md",
379
379
  "mode": "0000644",
380
- "sha256": "7486f9978e473b0adf09f8bfcbe2a029eb2833636ae3bd55fc307ccb3e773963"
380
+ "sha256": "65fb7649709e966a90f431d57b8855bd39951684a754320c4a797da9e3ccac13"
381
381
  },
382
382
  {
383
383
  "path": "clients/bongos-client/bongos-client.global.js",
@@ -407,7 +407,7 @@
407
407
  {
408
408
  "path": "clients/bongos-client/package.json",
409
409
  "mode": "0000644",
410
- "sha256": "ca32245dc6322f0399058b91f07fe12709fe7b97485fd5d8f5f37cb42f730aae"
410
+ "sha256": "d299252221daca415cf982b61fe5e3d9c3707c672a7d47adc052a9ee8166223f"
411
411
  },
412
412
  {
413
413
  "path": "config/branding.neutral.json",
@@ -1172,7 +1172,7 @@
1172
1172
  {
1173
1173
  "path": "docs/adr/0134-private-first-npm-distribution.md",
1174
1174
  "mode": "0000644",
1175
- "sha256": "ce1345a7de47416745964de31ec0d72cdf37f29fc1d41337b24d0e705710b0d7"
1175
+ "sha256": "87b5f5038221e8244c3f98e6f9bc6bf64b23cf8cc758327dd5a58c9b31196fb2"
1176
1176
  },
1177
1177
  {
1178
1178
  "path": "docs/adr/0135-module-upstream-submission-interim-queue.md",
@@ -1812,7 +1812,7 @@
1812
1812
  {
1813
1813
  "path": "docs/adr/0258-the-public-cli-is-a-generated-client-package-not-the-published-core.md",
1814
1814
  "mode": "0000644",
1815
- "sha256": "43bf2232da3353ab49bfd956a73d09c5045e5fa155e0004d0855a50587c299cd"
1815
+ "sha256": "e701aa98eddf2a0bde803fecfaf681502db33e67765f6a355e883cd3c714cd08"
1816
1816
  },
1817
1817
  {
1818
1818
  "path": "docs/adr/0259-a-projects-departure-from-the-public-list-is-public.md",
@@ -1872,7 +1872,7 @@
1872
1872
  {
1873
1873
  "path": "docs/adr/README.md",
1874
1874
  "mode": "0000644",
1875
- "sha256": "d660b4bc0bc3306f5fcf583118ca9149ba3deafe82dfe3894fe0b1c11b60cc2f"
1875
+ "sha256": "6b90114abfa5e891a8f2ea16c547c960c982030d6228d43c2a833840123a3f69"
1876
1876
  },
1877
1877
  {
1878
1878
  "path": "docs/api-reference.md",
@@ -2757,7 +2757,7 @@
2757
2757
  {
2758
2758
  "path": "docs/module-api-changelog.md",
2759
2759
  "mode": "0000644",
2760
- "sha256": "6b3c53cfb31b4bf6963f740bb386c24059ef370af8927b0ececde09e062fff33"
2760
+ "sha256": "37afa2a8a4f3e0d4b2689de8b45dfafa6c17569ff07575ff4b3d6b1b1393d683"
2761
2761
  },
2762
2762
  {
2763
2763
  "path": "docs/modules-contract.md",
@@ -2947,7 +2947,7 @@
2947
2947
  {
2948
2948
  "path": "docs/recipes/private-npm-distribution.md",
2949
2949
  "mode": "0000644",
2950
- "sha256": "3c6613920881220ec4a076b4608ed57557d645c43dee3fbb4086ad4adb81f593"
2950
+ "sha256": "87851cddc742fb4c62de1cde8b0443a6b6fd800e753e715ed8d2ab838557d4b8"
2951
2951
  },
2952
2952
  {
2953
2953
  "path": "docs/recipes/redteam-patrol.md",
@@ -7662,12 +7662,12 @@
7662
7662
  {
7663
7663
  "path": "package-lock.json",
7664
7664
  "mode": "0000644",
7665
- "sha256": "401ae455c8e67d7bf4d622ef7e93fce203948868ae3b07de9770e6d90607249f"
7665
+ "sha256": "cc6fce6807181651ec0ec230ad34473092623805b54a1ac9fbaa84e3092b3f34"
7666
7666
  },
7667
7667
  {
7668
7668
  "path": "package.json",
7669
7669
  "mode": "0000644",
7670
- "sha256": "f6c0e1047dcef4fe6e429e149606d521e0d196ff748bcdeb6de6e1c63d2a60ab"
7670
+ "sha256": "aa932c27317fc8f47d1939478cd55134c96eb1265357cc37de7765e98fe146fc"
7671
7671
  },
7672
7672
  {
7673
7673
  "path": "public-docs/index.html",
@@ -7872,7 +7872,7 @@
7872
7872
  {
7873
7873
  "path": "scripts/gds/build-cli-package.js",
7874
7874
  "mode": "0000644",
7875
- "sha256": "de1cdede17761775722509b1e1edb4bb43fbbf336450556f22119b18b93e43d3"
7875
+ "sha256": "e24710d5546428beba9400831d69eb3101e76bfdb1083916bf12411839e16735"
7876
7876
  },
7877
7877
  {
7878
7878
  "path": "scripts/gds/bump-version.js",
@@ -8157,7 +8157,7 @@
8157
8157
  {
8158
8158
  "path": "scripts/gds/gen-api-client.js",
8159
8159
  "mode": "0000644",
8160
- "sha256": "e9a6c6498f41b51dbcc17a3538d997b220f671beb433ae65ebc5365727a444ec"
8160
+ "sha256": "d363c76caf379a051faea40a2497db8bbba18effd68e9cd9922e9445638c57c5"
8161
8161
  },
8162
8162
  {
8163
8163
  "path": "scripts/gds/gen-api-docs.js",
@@ -9397,7 +9397,7 @@
9397
9397
  {
9398
9398
  "path": "src/module-api.js",
9399
9399
  "mode": "0000644",
9400
- "sha256": "d2b45162be47422810ab7a05c42c9926520df6c1c5ab7e7274386c5a25eb07a3"
9400
+ "sha256": "155f6fd854a43d20569e168af8238b3a082a03d74360d9e6248650ec453568a8"
9401
9401
  },
9402
9402
  {
9403
9403
  "path": "src/module-loader/catalog.js",
@@ -7,14 +7,26 @@ by hand; it regenerates when the spec changes, so it can never drift from the ro
7
7
  - API version: **v1** (served at `/api/bongos/v1`)
8
8
  - 360 operations across 55 resource groups
9
9
 
10
- ## Install
10
+ ## Use it from your project
11
+
12
+ **This is not an npm package** — it is not published, and nothing depends on it as one
13
+ (task 1003742). Consume it by VENDORING the build you need, which is what every consumer
14
+ in this repo already does:
11
15
 
12
16
  ```bash
13
- npm install @bongos/client # internal registry / workspace path
17
+ # ESM / bundler: cp clients/bongos-client/index.mjs <your project>/vendor/
18
+ # CommonJS: cp clients/bongos-client/index.cjs <your project>/vendor/
19
+ # Browser global: cp clients/bongos-client/bongos-client.global.js <your project>/public/
14
20
  ```
15
21
 
22
+ Copy `index.d.ts` alongside it for types. Re-copy after `gen-api-client.js` runs, so the
23
+ client cannot drift from the routes.
24
+
16
25
  ## Use
17
26
 
27
+ The examples import by package name, which resolves in a workspace. A VENDORED copy is
28
+ imported by its path instead — `from './vendor/index.mjs'` — everything below is identical.
29
+
18
30
  ```js
19
31
  import { createClient, ApiError } from '@bongos/client';
20
32
 
@@ -25,8 +25,5 @@
25
25
  "README.md"
26
26
  ],
27
27
  "license": "AGPL-3.0-or-later",
28
- "publishConfig": {
29
- "access": "restricted"
30
- },
31
28
  "sideEffects": false
32
29
  }
@@ -1,6 +1,6 @@
1
1
  # 0134 — Private-first npm distribution for the core + client (paid scoped, then public at launch)
2
2
 
3
- - **Status:** Accepted — publish path + private-by-default config built in task 2089; the real publish is a gated owner step.
3
+ - **Status:** Accepted for the CORE; the **client half is superseded** by [task 1003742](https://cloudbongos.com/builders#/task/1003742) (2026-09-09) see the note under Decision. Publish path + private-by-default config built in task 2089; the real publish is a gated owner step.
4
4
  - **Date:** 2026-07-07
5
5
  - **Deciders:** example-owner (owner/Archon), Claude. Owner asked to have the npm/CLI onboarding commands ready but kept private pre-launch, choosing paid private npm over the free GitHub Packages option.
6
6
  - **Task:** [#2089](https://example.com/builders#/task/2089) (publish path + private config) · [#2092](https://example.com/builders#/task/2092) (the `@cloudbongos` → `@bongos` scope rename + first real publish) · **Goal:** 35 (project-creation flow), criterion 165.
@@ -18,6 +18,25 @@ One npm rule forces the shape: **unscoped packages are always public — only *s
18
18
 
19
19
  Publish **`@bongos/core`** and **`@bongos/client`** as **scoped, private** npm packages during pre-launch, on the owner's **paid** `bongos` npm org — the **canonical** brand org.
20
20
 
21
+ > **SUPERSEDED for the client (2026-09-09, [task 1003742](https://cloudbongos.com/builders#/task/1003742)).** `@bongos/client`
22
+ > is no longer an npm package at all, and the reason is worth keeping so it does not come back.
23
+ >
24
+ > It was published **once** — 2026-07-07, version 0.0.2 — and never updated, while the API it is
25
+ > *generated from* moved 500+ core versions. In that time it had **zero consumers**: a sweep of every
26
+ > `package.json` across the core and every instance repo (hermeslines-marketing, cloudbongos-instance,
27
+ > mercury, charter, demo) found no dependency on it; the only matches were its own manifest. Everyone
28
+ > who needs the generated client **vendors a copy** — `modules/dev-box/app/src/vendor/bongos-client.cjs`,
29
+ > and `build-cli-package.js` into `@cloudbongos/cli`, which as a *public* package could not have
30
+ > depended on a private one anyway ([ADR 0258](<redacted>.md)).
31
+ > A stale generated client that nobody installs is worse than none: the only thing it could do is
32
+ > mislead someone into pinning a client 500 versions behind the routes.
33
+ >
34
+ > The owner removed it from the registry. The **generated artifact stays** and still regenerates
35
+ > ([ADR 0118](<redacted>.md)) — `clients/bongos-client/` and
36
+ > `gen-api-client.js` earn their place. What is retired is only the claim that it is a package: the
37
+ > generator no longer emits a `publishConfig`, and its README now documents vendoring instead of
38
+ > `npm install`. **This ADR's core half is unaffected.**
39
+
21
40
  > **Scope correction (task 2092).** The publish path first shipped (task 2089) under the `@cloudbongos` scope, matching the name the repo already used. But when publishing, the paid org turned out to be **`bongos`** (the canonical brand the owner put on Teams), while `cloudbongos` — one of the ~10 defensive orgs — was left on the free tier. Since a private scoped publish requires the scope to match a *paid* org, and `@bongos` is the intended canonical brand anyway, we **renamed the core + client package identity `@cloudbongos/*` → `@bongos/*`** (a consistent rename across the build + vendored-install flow, verified by the test suite) rather than pay for a second org. Existing vendored consumers keep their pinned `@cloudbongos/core` tarball; only new scaffolds use `@bongos`.
22
41
 
23
42
  - **Private by default in code, not just by flag.** The synthesized core `package.json` (`buildPackageJson`) and the generated client `package.json` (`gen-api-client.js`) both carry `publishConfig: { access: "restricted" }`. `package-core.js --publish` additionally passes `--access restricted` on the CLI — belt-and-suspenders so a stray config edit can't silently make the pre-launch artifact public.
@@ -120,9 +120,11 @@ benefit. It gains one when ADR 0099's mirror lands.
120
120
  - **Publishing is the owner's action, not a builder's.** It is the owner's npm account, and a
121
121
  public package name cannot be un-taken. The build stops at a packed tarball and hands over one
122
122
  `npm publish --access public`.
123
- - `@bongos/client` stays private and is **vendored** as a single file rather than declared as a
124
- dependency — a public package that depended on a private one would be uninstallable for
125
- everyone.
123
+ - `@bongos/client` is **vendored** as a single file rather than declared as a dependency — a public
124
+ package that depended on a private one would be uninstallable for everyone. (It was private then;
125
+ since [task 1003742](https://cloudbongos.com/builders#/task/1003742) it is not published at all,
126
+ which makes the vendoring not merely preferable but the only option. Vendoring was the right call
127
+ either way, and this package is one of the two reasons the client had no consumers to lose.)
126
128
  - Task 1002025 is superseded and should be closed against this ADR rather than done.
127
129
  - **The journey above is instance-dependent, and 0.1.1 shipped assuming it was not**
128
130
  ([task 1003730](https://cloudbongos.com/builders#/task/1003730)). `bongos shell` is the answer
@@ -208,7 +208,7 @@ This keeps the decision history honest and traceable.
208
208
  | 0131 | [Rank-scoped skill visibility — feasibility spike (task [#1650](https://example.com/builders#/task/1650)). Wanted: a session lists only the skills the builder's rank can use, via a SessionStart hook filtering the skill menu — pure UX declutter (the server rank gate + each skill's early self-check still enforce). Finding: Claude Code hooks CANNOT filter/hide/rewrite the skill listing — SessionStart offers only `additionalContext` (inject text) + `reloadSkills` (add-only), no hook subtracts a skill, and hooks can't mutate settings at runtime. A HARD menu hide needs a pre-launch step (the launcher that already fetches rank) writing per-builder `skillOverrides:"off"` into `.claude/settings.local.json` before `claude` starts (misses plugin skills; workspace-trust-gated). Recommendation: don't build the heavy launcher change for a cosmetic gain; if some declutter is wanted now, use the existing hook's `additionalContext` as a soft nudge; keep the server gate + self-checks. Owner to decide.](<redacted>.md) | dx / skills |
209
209
  | 0132 | [Migrate the co-hosting fleet to the control plane over an SSH DB tunnel (task [#2071](https://example.com/builders#/task/2071), BONGOS-V1, goal 26; extends ADR 0130, completes 2065 / blocker 64). Stripping the co-hosting box's tokens proved NOT a switch-flip: it runs FIVE token-consuming timers (the 4 `box.js` dev-box lifecycle sweeps + `provision-intent-runner`), each reading its queue from the box's LOCAL `example` Postgres (firewalled to localhost) — so a control-plane runner can't reach the queues, and ADR 0130 moved only box-step execution, not queue reading. Also `box.js` was never migrated. Decision: a persistent SSH tunnel (control-plane `127.0.0.1:5433` → co-hosting `127.0.0.1:5432`, `infra/cohost-db-tunnel.service`) + all five runners re-homed as `cohost-*` control-plane variants reading the example queues via `DATABASE_URL` through the tunnel (no public Postgres exposure), calling DO/CF with the control-plane tokens; provisioning remote-execs box steps per ADR 0130. DB auth: a scram password on the EXISTING `lars` role (identical privileges the runners already use; reachable only via `127.0.0.1`), stored only in chmod-600 `/etc/cloudbongos/cohost-fleet.env`. `box.js` unchanged (pure DO/CF API + Discord/DNS-hook execs, all on the control plane). `cohost-provision-intent-runner.*` supersedes 2065's `provision-intent-runner-cloudbongos.*`. Rejected: exposing Postgres over the VPC (opens a TCP surface + `pg_hba`/cred work; droplets not guaranteed same-VPC); a token-signing broker on the co-hosting box (leaves tokens' blast radius there — opposite of the goal); moving the queue tables to the cloudbongos DB (the OTB web tier can't reach it either — firewall symmetry). Units ship additive + not-enabled, self-healed install-only. Activation (SSH trust · DB password · tunnel · enable `cohost-*` + disable co-hosting timers same window · verify via drift-reconcile · bake · owner token rotate+strip · drop rollback DB) is a sequenced operator-op.](<redacted>.md) | infra / Cloud Bongos |
210
210
  | 0133 | [One-click GitHub sign-in for onboarding via the GitHub App Manifest flow (task [#2080](https://example.com/builders#/task/2080), BONGOS-V1, goal 35 / criterion 165). The last onboarding friction was wiring GitHub sign-in — the owner had to hand-create an OAuth App + paste a client secret, unscriptable because GitHub has NO create-OAuth-App API. Decision: use GitHub's App **Manifest** flow. The signed-in owner clicks one pre-filled link; GitHub creates the App and returns a temporary `code`; the control-plane runner (`provision.js`, sole token-holder) exchanges it for `client_id`/`client_secret`, writes them to `/etc/<slug>/web.env` (the `oauth-secret.js` path), restarts, and verifies `/healthz` auth_configured — the secret never touches the browser, chat, or web tier. Spans the trust boundary: web tier mints a one-time `state` + stores a `provisioning_oauth_manifests` row + a PUBLIC callback stores GitHub's code (`state` is the auth); the control-plane runner drains `code_received` rows on its existing timer tick (gated on instance=active). Sign-in code unchanged — a GitHub App's user token hits the same `GET /user`; GitHub ignores the extra `scope` for Apps. Back-compat: existing OAuth-app instances untouched; manifest is the new default, manual path kept as fallback. All three onboarding surfaces (hall wizard one-click button, `bongos onboard`, `/new-project`) updated in lockstep.](<redacted>.md) | onboarding / auth |
211
- | 0134 | [Private-first npm distribution for the core + client (task [#2089](https://example.com/builders#/task/2089), BONGOS-V1, goal 35 / criterion 165; refines [#2025](https://example.com/builders#/task/2025), builds on ADR 0108). Owner wants the npm/CLI onboarding commands ready but private pre-launch, choosing paid private npm over free GitHub Packages. npm rule forces the shape: unscoped names are always public, only SCOPED packages can be private (paid plan) — so the private form stays scoped `@bongos/core` + `@bongos/client` (zero rename; org already owned). Decision: publish both as scoped PRIVATE packages now via `publishConfig:{access:"restricted"}` baked into the synthesized core `package.json` (`package-core.js buildPackageJson`) + the generated client `package.json` (`gen-api-client.js`); `package-core.js --publish` dry-runs by default, real publish needs `--publish --live` + owner `npm login` (tooling holds no token). Consumers auth via env-fed `.npmrc` `_authToken=<redacted> Vendored-tarball install (task 2053) stays the working default; provision/init registry auto-pull is a follow-up. Going public at launch is one flag (`npm access public`) or task 2025's unscoped vanity `cloudbongos` — 2025 becomes the go-public step, not superseded. The daily `bongos` command is name-independent throughout. Runbook: docs/recipes/private-npm-distribution.md.](<redacted>.md) | distribution / npm |
211
+ | 0134 | [Private-first npm distribution for the core + client (task [#2089](https://example.com/builders#/task/2089), BONGOS-V1, goal 35 / criterion 165; refines [#2025](https://example.com/builders#/task/2025), builds on ADR 0108). Owner wants the npm/CLI onboarding commands ready but private pre-launch, choosing paid private npm over free GitHub Packages. npm rule forces the shape: unscoped names are always public, only SCOPED packages can be private (paid plan) — so the private form stays scoped `@bongos/core` + `@bongos/client` (zero rename; org already owned). Decision: publish both as scoped PRIVATE packages now via `publishConfig:{access:"restricted"}` baked into the synthesized core `package.json` (`package-core.js buildPackageJson`) + the generated client `package.json` (`gen-api-client.js`); `package-core.js --publish` dry-runs by default, real publish needs `--publish --live` + owner `npm login` (tooling holds no token). Consumers auth via env-fed `.npmrc` `_authToken=<redacted> Vendored-tarball install (task 2053) stays the working default; provision/init registry auto-pull is a follow-up. Going public at launch is one flag (`npm access public`) or task 2025's unscoped vanity `cloudbongos` — 2025 becomes the go-public step, not superseded. The daily `bongos` command is name-independent throughout. Runbook: docs/recipes/private-npm-distribution.md. **CLIENT HALF SUPERSEDED** ([task 1003742](https://cloudbongos.com/builders#/task/1003742), 2026-09-09): `@bongos/client` is not an npm package at all — published once at 0.0.2 on 2026-07-07, never updated while the API moved 500+ core versions, and ZERO consumers the whole time (no package.json in the core or any instance repo ever declared it; every consumer vendors a copy, and `@cloudbongos/cli` could not have depended on a private package anyway). Removed from the registry; the generator no longer emits a `publishConfig` and its README documents vendoring. The generated artifact stays (ADR 0118). Core half unaffected.](<redacted>.md) | distribution / npm |
212
212
  | 0135 | [Module upstream submission: the review queue lives in the submitting instance's own DB, interim (task [#1770](https://example.com/builders#/task/1770), BONGOS-V1, builds on ADR 0107). ADR 0107 §1 says `bongos module submit` files a packaged module into a rank-gated review queue "on the core" — but the extracted core (`github.com/example-owner/cloud-bongos`) is a private GIT REPO, not a running service (no HTTP API), and per ADR 0100 §3 each project runs its OWN GDS DB, so there is no shared cross-repo queue to file into; R85 (the forcing-function second consumer) was also abandoned. Decision: the queue is a table (`module_submissions`, migration `<redacted>.sql`) in THIS instance's own Bongos DB. `bongos module submit <key>` and the hall's submit button both call the SAME route, `POST /modules/:key/submit` (metic+archon), which re-runs the ADR 0107 §4 pre-check against its OWN on-disk copy (authoritative — a local CLI pass is a courtesy) and refuses without a sign-off; `GET /modules/submissions` lists the queue for task 1771 (core-side review & accept, still backlog) to read from. Rejected: a live call to a not-yet-built core endpoint (guesses at 1771's contract); a GitHub Issue/PR against the private core repo (loses the structured queue, no standing credential); a dry-run-only local-file client mirroring do-api.js (a worse queue than a DB table this instance already operates). Forward-compatible: when a real core endpoint exists, filing becomes a network hop with no change to the CLI/UI contract.](<redacted>.md) | modules / upstreaming |
213
213
  | 0136 | [Update-channel subscription policy (task [#2150](https://example.com/builders#/task/2150), BONGOS-V1, goal 26; completes the update-consumption workstream on ADR 0100 §2 + ADR 0134 + task 2149). Answers "how do projects subscribe to regular @bongos/core updates?" with the owner-chosen policy: **patch-only by default, health-gated with auto-rollback, opt-in, autonomy-gated.** Per-instance `update_channel` = `pinned` (never) / `patch` (higher z within x.y — DEFAULT) / `minor` (higher y within the major); a MAJOR is never automatic, prereleases never auto-targeted — the pure math is `scripts/gds/update-channel.js` (`resolveChannelTarget`), unit-tested in `tests/update_channel.mjs`. The registry (npm view, ADR 0134) is the "what's newest" source. A new `mode:deterministic` instance-wide routine `core-update-subscription` reads the opt-in roster `config/update-subscriptions.json` (ships EMPTY) and runs `bongos upgrade --to <v> --registry` per subscribed instance with auto-rollback ON (task 2149). Triple-gated: autonomy flag OFF by default (ADR 0115) + empty roster + health-gated. Upstream auto-publish (whether main merges auto-publish a patch) is deliberately SPLIT to its own follow-up task, so goal 26 closes on the consumption half; the subscription just consumes whatever the owner publishes. Scope is local same-host instances; multi-host fleet orchestration is the deferred fleet-control-plane epic (task 1948). Rejected: a `provisioning_instances` DB column (presumes the still-unbuilt fleet-registry schema; a config manifest is migration-free + ADR-0115-shaped), minor-by-default (less conservative), deciding auto-publish here (orthogonal, would block consumption).](<redacted>.md) | distribution / updates |
214
214
  | 0137 | [Upstream publish policy: `@bongos/core` patches are published MANUALLY (owner-gated), NOT auto-published on merge (task [#2158](https://example.com/builders#/task/2158), BONGOS-V1, goal 26; the SUPPLY half split out of ADR 0136 §5 / task 2150, builds on ADR 0134). Owner chose manual over auto. Decision: the owner runs `package-core.js --publish --live` to cut a release (optional `core-v<version>` git tag as the auditable marker — triggers no CI); `CORE_VERSION` (src/module-api.js) is bumped by hand in-task with a changelog line (provenance stays in git, not a release-tool side effect); NO npm write-token at rest (preserves ADR 0134 tokenless tooling — owner auths at publish time; only the read token exists); the no-leak/mirror-redact gate is already fail-closed inside `package-core.js`, so `--publish` cannot upload a leaking artifact. The ADR 0136 subscription consumes whatever is published; freshness is owner-paced by design. Rejected: auto-publish-on-merge (needs a standing npm write-token as a CI secret — reverses the tokenless posture for little gain at low, deliberate release volume). Revisit as a tag-triggered CI publish when the managed-fleet epic (task 1948) makes the manual step a real bottleneck. Ritual: docs/recipes/private-npm-distribution.md "Cutting a core release".](<redacted>.md) | distribution / npm |
@@ -1689,5 +1689,7 @@ is load-bearing: the script throws rather than guess if it is missing, and
1689
1689
  landed since 1.19.618 with no explicit bump. run 34320024204. (task 1002620)
1690
1690
  1.19.620 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
1691
1691
  landed since 1.19.619 with no explicit bump. run 34321089991. (task 1002620)
1692
+ 1.19.621 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
1693
+ landed since 1.19.620 with no explicit bump. run 34321546662. (task 1002620)
1692
1694
  ---------------------------------------------------------------------------
1693
1695
  ```
@@ -1,8 +1,10 @@
1
- # Recipe — private-first npm distribution (core + client)
1
+ # Recipe — private-first npm distribution (the core)
2
2
 
3
3
  > **This is one leg of three.** For the whole path from a change on core `main` to a live instance — and for when publishing to npm is *not* what moves an instance — start at [the core release pipeline](core-release-pipeline.md).
4
4
  >
5
- > Implements [ADR 0134](../adr/<redacted>.md). Pre-launch, `@bongos/core` and `@bongos/client` publish as **private, scoped** npm packages on the owner's paid `bongos` npm org (the canonical brand); at launch they flip to public. The daily command is `bongos` regardless of package name.
5
+ > Implements [ADR 0134](../adr/<redacted>.md), **core half only**. Pre-launch, `@bongos/core` publishes as a **private, scoped** npm package on the owner's paid `bongos` npm org (the canonical brand); at launch it flips to public. The daily command is `bongos` regardless of package name.
6
+ >
7
+ > **`@bongos/client` is no longer part of this.** It was published once (2026-07-07, 0.0.2), never updated while the API moved 500+ core versions, and had **zero** consumers the whole time — every consumer vendors a copy instead. The owner removed it from npm on 2026-09-09; ADR 0134's client half is superseded ([task 1003742](https://cloudbongos.com/builders#/task/1003742)). The generated client still exists and still regenerates — it is simply not a package.
6
8
  >
7
9
  > **Why private must be scoped:** on npm, *unscoped* names are always public — only *scoped* names (`@bongos/…`) can be private, and only on a paid plan. So the packages publish under the `@bongos` scope, which maps to the paid `bongos` org.
8
10
 
@@ -11,9 +13,10 @@
11
13
  | Package | What it is | Built by |
12
14
  |---|---|---|
13
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` |
14
- | `@bongos/client` | the generated typed API client | `node scripts/gds/gen-api-client.js` (regenerates `clients/bongos-client/`) |
15
16
 
16
- Both carry `publishConfig: { access: "restricted" }`, so **publishing them is private by default** — no public leak if a flag is forgotten.
17
+ `@bongos/core` carries `publishConfig: { access: "restricted" }`, so **publishing it is private by default** — no public leak if a flag is forgotten.
18
+
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.
17
20
 
18
21
  ## One-time owner setup (only the owner can do these)
19
22
 
@@ -80,9 +83,10 @@ Then, with `NPM_TOKEN` set in the environment:
80
83
 
81
84
  ```sh
82
85
  npm install -g @bongos/core # global → the `bongos` command, then `bongos init`
83
- npm install @bongos/client # in a project that calls the API
84
86
  ```
85
87
 
88
+ (A project that calls the API vendors the generated client instead — it is not installable.)
89
+
86
90
  Without a valid token + org membership the install 404s — that is the private gate working.
87
91
 
88
92
  ## Provisioning: registry pull vs vendored tarball (task 2090)
@@ -104,7 +108,6 @@ Pick either — both keep the daily `bongos` command working:
104
108
  - **Flip the same scoped packages public** (simplest):
105
109
  ```sh
106
110
  npm access public @bongos/core
107
- npm access public @bongos/client
108
111
  ```
109
112
  (Or change `publishConfig.access` to `"public"` and republish.) Public installs need no token; the paid seats can be dropped.
110
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.
package/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.19.620",
3
+ "version": "1.19.621",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@bongos/core",
9
- "version": "1.19.620",
9
+ "version": "1.19.621",
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.620",
3
+ "version": "1.19.621",
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",
@@ -87,11 +87,12 @@ const FILES = [
87
87
  'src/bongos/api-prefix.js',
88
88
 
89
89
  // The generated typed API client (ADR 0118), which cli-lib.js reaches by a dynamic
90
- // `import()` of this exact path. Vendored as a single file rather than depended on: it is
91
- // published as `@bongos/client`, which is PRIVATE, so a public package that declared it as a
92
- // dependency would be uninstallable for everyone. index.mjs is self-contained and imports
93
- // nothing; the sibling package.json is deliberately NOT shipped (it carries
94
- // publishConfig.access=restricted and a nested manifest only confuses packing).
90
+ // `import()` of this exact path. Vendored as a single file rather than depended on: it is not
91
+ // published to npm at all (task 1003742 it was private, had zero consumers, and was removed),
92
+ // so there is nothing to declare a dependency ON. Vendoring was already the right call while it
93
+ // was merely private, since a public package cannot depend on a private one. index.mjs is
94
+ // self-contained and imports nothing; the sibling package.json is deliberately NOT shipped —
95
+ // a nested manifest only confuses packing.
95
96
  'clients/bongos-client/index.mjs',
96
97
 
97
98
  // Neutral branding defaults, so the CLI has sane strings with no instance checkout present.
@@ -10,8 +10,9 @@
10
10
  //
11
11
  // Design (mirrors gen-api-docs.js / ADR 0063): deterministic (stable sort, no
12
12
  // clock), zero runtime deps, --check gate. The client itself has ZERO deps — it
13
- // uses the platform `fetch` (Node 18+ / browsers), so `npm i @bongos/client`
14
- // pulls nothing transitive.
13
+ // uses the platform `fetch` (Node 18+ / browsers), so vendoring it pulls nothing
14
+ // transitive. It is NOT published to npm (task 1003742) — consumers copy the build
15
+ // they need; see the generated README.
15
16
  //
16
17
  // Usage:
17
18
  // node scripts/gds/gen-api-client.js # (re)generate the client package
@@ -372,10 +373,17 @@ function renderPackageJson(spec) {
372
373
  },
373
374
  files: ['index.mjs', 'index.cjs', 'index.d.ts', 'bongos-client.global.js', 'README.md'],
374
375
  license: 'AGPL-3.0-or-later',
375
- // Pre-launch: publish PRIVATE (task 2089 / ADR 0134). Scoped + access:"restricted"
376
- // = only paid-org members can install. Flip to "public" (or `npm access public
377
- // @bongos/client`) at launch, alongside the core.
378
- publishConfig: { access: 'restricted' },
376
+ // NO publishConfig this client is NOT an npm package (task 1003742).
377
+ //
378
+ // It was published once, 2026-07-07 at 0.0.2, under ADR 0134's private-first plan, and never
379
+ // updated while the API it is generated FROM moved 500+ core versions. It had zero consumers
380
+ // the whole time: nothing across the core or any instance repo ever declared it as a
381
+ // dependency — every consumer VENDORS a copy instead (modules/dev-box/app/src/vendor/, and
382
+ // build-cli-package.js into @cloudbongos/cli, which could not depend on it anyway). The owner
383
+ // removed it from the registry on 2026-09-09.
384
+ //
385
+ // The manifest itself stays: `main`/`types`/`exports` are what make the vendored copy and a
386
+ // workspace link resolve. Declaring a publish posture is the part that was fiction.
379
387
  sideEffects: false,
380
388
  }, null, 2) + '\n';
381
389
  }
@@ -427,14 +435,26 @@ function renderReadme(spec, ops) {
427
435
  `- API version: **${spec['x-api-version'] || 'v1'}** (served at \`${base}\`)`,
428
436
  `- ${ops.length} operations across ${new Set(ops.map((o) => o.tag)).size} resource groups`,
429
437
  ``,
430
- `## Install`,
438
+ `## Use it from your project`,
439
+ ``,
440
+ `**This is not an npm package** — it is not published, and nothing depends on it as one`,
441
+ `(task 1003742). Consume it by VENDORING the build you need, which is what every consumer`,
442
+ `in this repo already does:`,
431
443
  ``,
432
444
  '```bash',
433
- `npm install @bongos/client # internal registry / workspace path`,
445
+ `# ESM / bundler: cp clients/bongos-client/index.mjs <your project>/vendor/`,
446
+ `# CommonJS: cp clients/bongos-client/index.cjs <your project>/vendor/`,
447
+ `# Browser global: cp clients/bongos-client/bongos-client.global.js <your project>/public/`,
434
448
  '```',
435
449
  ``,
450
+ `Copy \`index.d.ts\` alongside it for types. Re-copy after \`gen-api-client.js\` runs, so the`,
451
+ `client cannot drift from the routes.`,
452
+ ``,
436
453
  `## Use`,
437
454
  ``,
455
+ `The examples import by package name, which resolves in a workspace. A VENDORED copy is`,
456
+ `imported by its path instead — \`from './vendor/index.mjs'\` — everything below is identical.`,
457
+ ``,
438
458
  '```js',
439
459
  `import { createClient, ApiError } from '@bongos/client';`,
440
460
  ``,
package/src/module-api.js CHANGED
@@ -55,7 +55,7 @@ const { buildInfo } = require('./build-info');
55
55
  // there. scripts/gds/bump-version.js still rewrites the literal below; it appends
56
56
  // the entry to that file. Look for a version's history there, not here.
57
57
  // ---------------------------------------------------------------------------
58
- const CORE_VERSION = '1.19.620'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
58
+ const CORE_VERSION = '1.19.621'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
59
59
 
60
60
  // A namespaced logger so a module's log lines are attributable + consistent.
61
61
  // Usage: const log = api.logger('dev-box'); log.info('mounted');