@bongos/core 1.19.69 → 1.19.70
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 +18 -13
- package/docs/adr/0167-gate-trust-link-agpl-default.md +24 -0
- package/docs/adr/README.md +1 -0
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/public-landing/create.html +5 -1
- package/src/module-api.js +3 -1
- package/tests/onboard.mjs +13 -0
package/.bongos-core.json
CHANGED
|
@@ -2,22 +2,22 @@
|
|
|
2
2
|
"artifact": "bongos-core",
|
|
3
3
|
"manifest_schema": 1,
|
|
4
4
|
"generator": "scripts/gds/package-core.js",
|
|
5
|
-
"core_version": "1.19.
|
|
6
|
-
"core_contract": "1.19.
|
|
7
|
-
"source_commit": "
|
|
5
|
+
"core_version": "1.19.70",
|
|
6
|
+
"core_contract": "1.19.70",
|
|
7
|
+
"source_commit": "b92ae4a4d4458ff81409d2aff12bfc88bd0ef50d",
|
|
8
8
|
"source_ref": "HEAD",
|
|
9
|
-
"built_at": "2026-08-
|
|
9
|
+
"built_at": "2026-08-12T15:26:39.115Z",
|
|
10
10
|
"redaction": {
|
|
11
11
|
"model": "docs-redacted+functional-verbatim",
|
|
12
|
-
"docs_redacted":
|
|
12
|
+
"docs_redacted": 293,
|
|
13
13
|
"agent_docs_stubbed": 21,
|
|
14
14
|
"functional_verbatim": 1223,
|
|
15
15
|
"rules": 3,
|
|
16
16
|
"gate_literals": 3,
|
|
17
17
|
"gate": "passed"
|
|
18
18
|
},
|
|
19
|
-
"file_count":
|
|
20
|
-
"tree_sha256": "
|
|
19
|
+
"file_count": 1537,
|
|
20
|
+
"tree_sha256": "56c1de962c6965257fb63c72e0201b2a0652833acf9ade499ed57c96e9650adb",
|
|
21
21
|
"files": [
|
|
22
22
|
{
|
|
23
23
|
"path": ".claude/skills/blocker-review/SKILL.md",
|
|
@@ -1304,10 +1304,15 @@
|
|
|
1304
1304
|
"mode": "0000644",
|
|
1305
1305
|
"sha256": "3d260a52d4aa494e2df58f0db1c038c091786fbea99bad77d35b86b1a2024cf3"
|
|
1306
1306
|
},
|
|
1307
|
+
{
|
|
1308
|
+
"path": "docs/adr/0167-gate-trust-link-agpl-default.md",
|
|
1309
|
+
"mode": "0000644",
|
|
1310
|
+
"sha256": "bb187a29953ba5c316977f09fe86e26ca200693b23cf5c41ece93e9dd24f337e"
|
|
1311
|
+
},
|
|
1307
1312
|
{
|
|
1308
1313
|
"path": "docs/adr/README.md",
|
|
1309
1314
|
"mode": "0000644",
|
|
1310
|
-
"sha256": "
|
|
1315
|
+
"sha256": "b0387cdc43a67c4b9834691155d1fa9454930cb70b0660bb55a0f7e819c7ec90"
|
|
1311
1316
|
},
|
|
1312
1317
|
{
|
|
1313
1318
|
"path": "docs/api-reference.md",
|
|
@@ -4042,12 +4047,12 @@
|
|
|
4042
4047
|
{
|
|
4043
4048
|
"path": "package-lock.json",
|
|
4044
4049
|
"mode": "0000644",
|
|
4045
|
-
"sha256": "
|
|
4050
|
+
"sha256": "68b3bc7974e4f90d5291ba89dc3451d1cde4db4cff174ba3ed1347e4599c77da"
|
|
4046
4051
|
},
|
|
4047
4052
|
{
|
|
4048
4053
|
"path": "package.json",
|
|
4049
4054
|
"mode": "0000644",
|
|
4050
|
-
"sha256": "
|
|
4055
|
+
"sha256": "505474194374951dfc13ffca64f10c469da2782e1756214c3efb3a60b8151b68"
|
|
4051
4056
|
},
|
|
4052
4057
|
{
|
|
4053
4058
|
"path": "public-docs/index.html",
|
|
@@ -4292,7 +4297,7 @@
|
|
|
4292
4297
|
{
|
|
4293
4298
|
"path": "public-landing/create.html",
|
|
4294
4299
|
"mode": "0000644",
|
|
4295
|
-
"sha256": "
|
|
4300
|
+
"sha256": "419539862b5453d613a5ed3758a7d8fa677d16e463895ae64e6268a8d59372ba"
|
|
4296
4301
|
},
|
|
4297
4302
|
{
|
|
4298
4303
|
"path": "public-landing/gate/README.md",
|
|
@@ -5672,7 +5677,7 @@
|
|
|
5672
5677
|
{
|
|
5673
5678
|
"path": "src/module-api.js",
|
|
5674
5679
|
"mode": "0000644",
|
|
5675
|
-
"sha256": "
|
|
5680
|
+
"sha256": "993ad9f8c4be17c840767dff8c4e092a2ea55c5cbe73a09a53371e31cccfa720"
|
|
5676
5681
|
},
|
|
5677
5682
|
{
|
|
5678
5683
|
"path": "src/module-loader/loader.js",
|
|
@@ -7042,7 +7047,7 @@
|
|
|
7042
7047
|
{
|
|
7043
7048
|
"path": "tests/onboard.mjs",
|
|
7044
7049
|
"mode": "0000644",
|
|
7045
|
-
"sha256": "
|
|
7050
|
+
"sha256": "40d4656e2170370cd3b662911502579fed595fd66fd25b8add65d488a28bb834"
|
|
7046
7051
|
},
|
|
7047
7052
|
{
|
|
7048
7053
|
"path": "tests/onboarding_gate.mjs",
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# 0167 — The /create gate trust link defaults to the AGPL license text, not the npm package page
|
|
2
|
+
|
|
3
|
+
- **Status:** Accepted — built in task 1002705.
|
|
4
|
+
- **Date:** 2026-08-12
|
|
5
|
+
- **Deciders:** jaxri (Archon) — autonomous session; the residual choice is the owner's (idea 1000700).
|
|
6
|
+
- **Task:** task 1002705 · **Goal:** 1000059 (projects surface revamp) · gap 1 of [`docs/audits/project-creation-gap-list.md`](../audits/project-creation-gap-list.md).
|
|
7
|
+
|
|
8
|
+
## Context
|
|
9
|
+
|
|
10
|
+
The /create gate's "open source" trust link pointed at `github.com/example-owner/Claude-OTB` — a 404 even authenticated (the real core repo is private). Task 1002705's brief said to "default to the npm link so the 404 dies now," on the premise that `@cloudbongos/core` is public on the registry.
|
|
11
|
+
|
|
12
|
+
That premise is false, verified 2026-08-12 against `registry.npmjs.org`: **both `@cloudbongos/core` and `@bongos/core` 404 anonymously** — they are private scoped packages (ADR 0134 publishes the core privately; npm shows private packages as 404 to signed-out visitors). The [ADR 0099](<redacted>.md) public mirror is deliberately dormant until history clears the 180-day redaction window (~2026-11). So today there is **no browsable public code artifact at all** — following the brief literally would swap one dead link for another.
|
|
13
|
+
|
|
14
|
+
## Decision
|
|
15
|
+
|
|
16
|
+
Point the gate's "open source" link at the **AGPL-3.0 license text** (`https://www.gnu.org/licenses/agpl-3.0.html`) and tighten the copy to "open source (AGPL-3.0)". The license is the one live, instance-neutral artifact behind the claim today ([ADR 0065](<redacted>.md) — AGPL is the governance keystone), and the link carries no instance identity into the portable core.
|
|
17
|
+
|
|
18
|
+
The upgrade to a *browsable-code* link is the owner's call, filed as **idea 1000700** with three options: flip the repo public now (forfeits the redaction window — weigh ADR 0065 §4), publish a public npm package, or wait for the ADR 0099 mirror (~2026-11, zero extra work). When one lands, repoint the `finePrint` link in `public-landing/create.html`; the pin is `tests/onboard.mjs` "the /create gate trust link points at a live artifact".
|
|
19
|
+
|
|
20
|
+
## Alternatives considered
|
|
21
|
+
|
|
22
|
+
- **The npm package page (the brief's default)** — rejected: verified 404 for anonymous visitors; the gate's audience is exactly the signed-out visitor.
|
|
23
|
+
- **Make the repo public now** — not a builder's call; forfeits the deliberate 6-month redaction window (ADR 0065/0099). Surfaced to the owner instead (idea 1000700).
|
|
24
|
+
- **Drop the link, keep plain text** — dies the 404 but weakens the claim; the license link is strictly more information at the same cost.
|
package/docs/adr/README.md
CHANGED
|
@@ -239,5 +239,6 @@ This keeps the decision history honest and traceable.
|
|
|
239
239
|
| 0164 | [**The implausible-pass guard reads substance + evidence; the Metic+ honor-system residual is explicit** ([task 1002658](https://cloudbongos.com/builders#/task/1002658); grader-hardening goal 1000056). The guard fired only on `issues.length===0` — one fabricated `{}` defeated it, its magnitude inputs are client-supplied, and every in-sample firing (eval 2-for-2, tasks 1002643 ×2, 1002663) was a false positive on an honest unanimous zero-issue panel PASS. Redesign: count only SUBSTANTIVE issues (known severity + non-empty summary — padding trips the guard regardless), and waive the zero-issue pass when `signals.workers` carries the full ≥3-worker panel shape, stamped `implausible_pass_waived` for /grade-audit. The residual is named, not hidden: every grade-time input is client-authored, so plausibility at grade time is honest-mistake hygiene; the binding authorities on the real diff are land-time (CI unit, gate-review, main audit) — Metic+ grade-time honesty is accepted honor-system per this ADR. The ADR-0042 CI grade-gate (land it vs record permanent deferral) goes to the owner as a blocker, not decided here. No approval step added or removed (ADR 0162).](<redacted>.md) | GDS / grading |
|
|
240
240
|
| 0165 | [**Instances are hookless by default: no scaffolded `.husky/`; local hooks stay an instance-owned opt-in** ([task 1002641](https://cloudbongos.com/builders#/task/1002641); idea 1000655). Task 1002608 delivered the ADR 0043 Layer 1 pre-push gate for the CORE repo, but nothing materializes `.husky/` on a scaffolded standalone instance (`publish-manifest.js` excludes it by design). Decision: that is the accepted posture, not a gap. Sub-Metic instance builders hold no push credential at all (server-mediated publish, ADR 0053/0055) — a client pre-push hook guards a push that cannot happen; a client hook is not a security boundary (ADR 0016); the core cannot maintain hooks it deliberately does not ship (scaffolded hooks would be born orphans — the audit-authorship rot lesson, task 1002640); and ADR 0162 puts gates in CI, rank-consistent and hands-free. Secrets hooks follow the same rule (the PR-time CI secret scan enforces). The opt-in stays real and instance-owned: an instance commits its own `.husky/` and the core's `install-git-hooks.js` (already run by `/builder-setup`) activates it. Rejected: scaffolding wrappers at init, an `--with-hooks` flag (speculative), treating hooklessness as a regression. Revisit if an instance model has builders pushing directly with their own credentials.](<redacted>.md) | provisioning / trust boundary |
|
|
241
241
|
| 0166 | [**Module maintenance & deprecation policy: upkeep is a declared `maintenance` block, and `bongos upgrade` surfaces rot in DISABLED modules too** ([task 1001773](https://cloudbongos.com/builders#/task/1001773)). Implements [ADR 0107](<redacted>.md) §7, which named the catalog-rot problem and deferred the mechanics. `module.json` gains an optional-in-schema, required-to-upstream `maintenance` block — `status` one of `core-maintained` / `maintained` / `deprecated` / `orphaned`, plus `since` / `removeAfter` / `successor` / `note`. Each status owes something the validator enforces: `maintained` requires a named top-level `maintainer` (an unnamed owner IS the orphaning failure), a sunset status requires a deprecation path, and `removeAfter` is rejected on a non-sunset status. `orphaned` is deliberately first-class — a policy that only permits happy statuses gets satisfied by lying. The load-bearing fix: accepted modules ship `default:false` (§6), so every rotted catalog entry is DISABLED by construction — and `preflightModules()` returned only `blocking`, discarding `warnings`, so a real `bongos upgrade --to X` reported `"all enabled modules satisfy the target"` while saying nothing about them. It now returns + prints `warnings`/`deprecations`/`expired` with the maintainer NAMED, before the blocking check returns (so a refused bump reports them too). Enabled mismatches still refuse; disabled ones still never block — report, don't block, because blocking an instance's bump on a catalog entry it never opted into makes the shared catalog a liability. `bongos module check`/`submit` refuse an undeclared posture or an already-sunset module; `GET /modules` + the hall Modules tab show an `upkeep:` chip (incl. `undeclared`); all 17 bundled modules stamped `core-maintained` with a unit test holding the line. Rejected: blocking on disabled rot, a required manifest field (breaks every existing manifest), DB-tracked upkeep (must travel with the module, ADR 0107 §2), auto-deprecating on incompatibility (a fact is not a decision), a separate MAINTAINERS file.](<redacted>.md) | modules / upstreaming |
|
|
242
|
+
| 0167 | [**The /create gate trust link defaults to the AGPL-3.0 license text, not the npm package page** ([task 1002705](https://cloudbongos.com/builders#/task/1002705); gap 1 of the project-creation audit). The gate's "open source" link pointed at a nonexistent repo (404); the task brief's suggested default — the npm package page — is ALSO dead for the gate's actual audience (signed-out visitors): `@cloudbongos/core` and `@bongos/core` both 404 anonymously (private scopes, ADR 0134), and the ADR 0099 public mirror stays dormant until ~2026-11. The license text is the one live, instance-neutral artifact behind the claim today. The browsable-code upgrade is the owner's filed choice (idea 1000700): public repo now (forfeits the ADR 0065 §4 redaction window) / public npm package / wait for the mirror. Rejected: the npm link (verified dead), flipping the repo public (not a builder's call), plain unlinked text (less information, same cost).](<redacted>.md) | public landing / governance |
|
|
242
243
|
|
|
243
244
|
> ⚠️ **Numbering collision (known):** two ADRs share `0008`. The numbers were assigned in parallel sessions before the lock could be enforced. The files are kept under their existing filenames to preserve git history, but the table disambiguates them as `0008-a` / `0008-b`. New ADRs should resume at `0040` to avoid further collisions. (`0024` is also a real on-disk duplicate: the cloneable-repo/local-first-memory ADR and the multi-agent-system-architecture ADR were both numbered `0024` in parallel; both keep their filenames, disambiguated as `0024-a` / `0024-b` like `0008`. Likewise `0025` ended up with two on-disk files — the offsite-backup ADR and the structured-criterion↔task-link ADR — both kept under their existing filenames and disambiguated as `0025-a` / `0025-b`; separately, the BFG ADR had also claimed `0025` on 2026-05-30 and yielded to `0026`. A third happened 2026-06-06: `0036` was claimed in parallel by the builders-subdomain ADR ([#726](https://example.com/builders#/task/726)) and this Discord-channels ADR ([#727](https://example.com/builders#/task/727)); the Discord-channels ADR yielded to `0037`. A fourth landed 2026-06-10: `0044` was claimed in parallel by the palette-replacement ADR and the per-box game-preview ADR ([#897](https://example.com/builders#/task/897)); both keep their filenames, disambiguated as `0044-a` / `0044-b` like `0008`. A fifth was caught pre-land 2026-06-13: `0050` was claimed in parallel by the device-flow-admission ADR ([#1000](https://example.com/builders#/task/1000)) and the sandbox-for-everyone ADR ([#1001](https://example.com/builders#/task/1001)); the latter yielded to `0052` before merging, so there is no `0050` duplicate. A sixth was caught pre-land 2026-06-21: the tool-agnostic-design-layer ADR ([#1375](https://example.com/builders#/task/1375)) first collided at `0079` with the value-gated-autonomous-engagement ADR, then at `0080` with the llm-cache-api-transport ADR (both part of the 0075–0080 LLM-cost-reduction series, landed on `main` in parallel); it yielded to `0081` before merging, so there is no `0079`/`0080` design-layer duplicate. A seventh landed 2026-06-23: `0084` was claimed in parallel by the auto-derived-per-task-rank-floor ADR and the remove-default-spend-cap ADR (task 1499); the rank-floor ADR landed on `main` first, so the spend-cap ADR yielded to `0085`, leaving no `0084` duplicate. An eighth landed 2026-06-27: `0095` was claimed in parallel by the borrowed-memory-and-retrieval-concepts ADR (PR #459, landed first) and the cross-agent-context-management ADR ([#1651](https://example.com/builders#/task/1651), PR #460); both keep their filenames, disambiguated as `0095-a` / `0095-b` like `0008`. These two are companions — `0095-a` adopts the memory/retrieval concepts and explicitly defers the grep-vs-semantic question to `0095-b`.)
|
package/package-lock.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bongos/core",
|
|
3
|
-
"version": "1.19.
|
|
3
|
+
"version": "1.19.70",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@bongos/core",
|
|
9
|
-
"version": "1.19.
|
|
9
|
+
"version": "1.19.70",
|
|
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.
|
|
3
|
+
"version": "1.19.70",
|
|
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",
|
|
@@ -387,7 +387,11 @@ input[type=text].bad{border-color:var(--err);}
|
|
|
387
387
|
<svg class="gh" viewBox="0 0 16 16" aria-hidden="true"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27s1.36.09 2 .27c1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
|
|
388
388
|
Sign in with GitHub
|
|
389
389
|
</a>
|
|
390
|
-
|
|
390
|
+
<!-- Trust link → the AGPL license text (task 1002705): the old private-repo URL
|
|
391
|
+
404ed, and no public code artifact exists until the ADR 0099 mirror flips
|
|
392
|
+
(~2026-11; npm scopes are private too) — the license is the one live,
|
|
393
|
+
instance-neutral artifact behind the claim today. -->
|
|
394
|
+
<p class="finePrint">Free while we find our feet. Your project's repo and server are yours — Cloud Bongos is <a href="https://www.gnu.org/licenses/agpl-3.0.html" style="color:inherit" target="_blank" rel="noopener">open source (AGPL-3.0)</a> and capture-resistant by design.</p>
|
|
391
395
|
<div class="alert" id="gateAlert" role="alert"></div>
|
|
392
396
|
</section>
|
|
393
397
|
|
package/src/module-api.js
CHANGED
|
@@ -565,8 +565,10 @@ const { validateOrRespond, LIMITS, parseId, asyncHandler, corsPublicGet, parsePa
|
|
|
565
565
|
// landed since 1.19.67 with no explicit bump. run 31608183268. (task 1002620)
|
|
566
566
|
// 1.19.69 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
567
567
|
// landed since 1.19.68 with no explicit bump. run 31608503813. (task 1002620)
|
|
568
|
+
// 1.19.70 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
569
|
+
// landed since 1.19.69 with no explicit bump. run 31612248859. (task 1002620)
|
|
568
570
|
// ---------------------------------------------------------------------------
|
|
569
|
-
const CORE_VERSION = '1.19.
|
|
571
|
+
const CORE_VERSION = '1.19.70'; // CI auto-patch carrier (ADR 0161); see changelog above
|
|
570
572
|
|
|
571
573
|
// A namespaced logger so a module's log lines are attributable + consistent.
|
|
572
574
|
// Usage: const log = api.logger('dev-box'); log.info('mounted');
|
package/tests/onboard.mjs
CHANGED
|
@@ -110,6 +110,19 @@ test('the /create done panel is plan-driven, manifest-driven, and owner-honest (
|
|
|
110
110
|
assert.match(src, /adopt/i, 'the private path (adopt your own private repo) is named');
|
|
111
111
|
});
|
|
112
112
|
|
|
113
|
+
test('the /create gate trust link points at a live artifact, not the dead private-repo URL (task 1002705)', () => {
|
|
114
|
+
// Gap 1 of the project-creation audit: the gate linked a nonexistent private repo
|
|
115
|
+
// (404 even authenticated — ADR 0167 names it). No public code artifact exists yet
|
|
116
|
+
// (the ADR 0099 mirror is dormant until ~2026-11, and both npm scopes 404 anonymously
|
|
117
|
+
// — verified 2026-08-12), so the one live, instance-neutral artifact behind
|
|
118
|
+
// "open source" is the license itself.
|
|
119
|
+
const { readFileSync } = require('node:fs');
|
|
120
|
+
const path = require('node:path');
|
|
121
|
+
const src = readFileSync(path.join(import.meta.dirname, '..', 'public-landing/create.html'), 'utf8');
|
|
122
|
+
assert.doesNotMatch(src, /Claude-OTB/, 'the dead repo link is gone');
|
|
123
|
+
assert.match(src, /https:\/\/www\.gnu\.org\/licenses\/agpl-3\.0/, 'the trust link resolves (the AGPL-3.0 license text)');
|
|
124
|
+
});
|
|
125
|
+
|
|
113
126
|
test('oauthAppInstructions pins the apex callback + homepage and points at ACCOUNT Developer settings', () => {
|
|
114
127
|
const oa = ob.oauthAppInstructions('mercury.example.com');
|
|
115
128
|
assert.equal(oa.homepageUrl, 'https://mercury.example.com');
|