@bongos/core 1.19.370 → 1.19.371

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.370",
6
- "core_contract": "1.19.370",
7
- "source_commit": "ebdccda3c80527bbbaaf2aa022f22c30b8353d93",
5
+ "core_version": "1.19.371",
6
+ "core_contract": "1.19.371",
7
+ "source_commit": "587eb4ed0b68da54bf63fb01b69fab937450bd66",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-08-25T22:03:32.779Z",
9
+ "built_at": "2026-08-25T22:08:11.031Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 334,
@@ -17,7 +17,7 @@
17
17
  "gate": "passed"
18
18
  },
19
19
  "file_count": 1900,
20
- "tree_sha256": "8d54fad99843ef1feeef5e52a4e23dd1dca2c6f5ba1e72eff5ce6aee06684aa3",
20
+ "tree_sha256": "55cb6adeadbe8a337b32bba8352f2dbc38d655ec2cdd807c550d527b9f49822d",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/blocker-review/SKILL.md",
@@ -1862,7 +1862,7 @@
1862
1862
  {
1863
1863
  "path": "docs/recipes/work-on-a-task-from-your-dev-box.md",
1864
1864
  "mode": "0000644",
1865
- "sha256": "15a8fa87b11a3d3ab86551f9bc54adaf84c2a7a2b8fb7fc6915c0d16e5f5199d"
1865
+ "sha256": "be4d67926e39c9f9c146f5f709d30595057058f5c4444c1e87ed92e37b3f3190"
1866
1866
  },
1867
1867
  {
1868
1868
  "path": "docs/research/cursor-competitive-analysis.md",
@@ -4902,12 +4902,12 @@
4902
4902
  {
4903
4903
  "path": "package-lock.json",
4904
4904
  "mode": "0000644",
4905
- "sha256": "9dff8f392336cdd431ed666c04b21e660115a6fdba3040fd0f6c280aafbfe0a7"
4905
+ "sha256": "9013a462765ac09e02093fd322534183ef67983cba7fb17b01ffd9e514c904ba"
4906
4906
  },
4907
4907
  {
4908
4908
  "path": "package.json",
4909
4909
  "mode": "0000644",
4910
- "sha256": "416d8ecc99b8e45e6d71bda6f0be7f1a57fdb24cd1a08f11093184e4b8e8622d"
4910
+ "sha256": "02ba6d7d5c371b3b07671bb84216d7a38a23b9ab97f3ab491d218fb31f9afa46"
4911
4911
  },
4912
4912
  {
4913
4913
  "path": "public-docs/index.html",
@@ -6792,7 +6792,7 @@
6792
6792
  {
6793
6793
  "path": "src/module-api.js",
6794
6794
  "mode": "0000644",
6795
- "sha256": "4844a8a3d51f23328f5c31766f10a194579f779b225d024bdb20f62f0ee4f0c1"
6795
+ "sha256": "acc072cf951d0eb479345626f462425a47d7f8a0247db473375fa614f64e7589"
6796
6796
  },
6797
6797
  {
6798
6798
  "path": "src/module-loader/catalog.js",
@@ -1,12 +1,13 @@
1
1
  # Work on a task from your dev box
2
2
 
3
- > Your dev box is **task-scoped**: claim a task and the box pulls **only the code
4
- > that task needs** — the module(s) its work touches, on top of a small base
5
- > instance — never the whole repo. Your GitHub token never leaves the server; the
6
- > box fetches its slice through the control plane. See
7
- > [ADR 0148](../adr/<redacted>.md) (the scope model) and
8
- > [ADR 0150](../adr/<redacted>.md) (how the box
9
- > comes up).
3
+ > Your dev box serves your **rank scope**: Metic+ boxes carry the **whole repo**;
4
+ > newcomer (starter) boxes carry the safe starter surface. Task-scoped slices are
5
+ > **paused** per [ADR 0193](../adr/<redacted>.md) (the
6
+ > machinery from [ADR 0148](../adr/<redacted>.md) remains;
7
+ > `BOX_TASK_SCOPE=on` re-enables it). Your GitHub token never leaves the server —
8
+ > see "How git works on a box" below, and
9
+ > [ADR 0150](../adr/<redacted>.md) for how the
10
+ > box comes up.
10
11
 
11
12
  ## TL;DR
12
13
 
@@ -15,32 +16,48 @@ In your dev box's terminal:
15
16
  ```bash
16
17
  /builder-start # see what you can claim
17
18
  /builder-claim <N> # claim task N (locks it to your session)
18
- /builder-sync # pull task N's code onto the box now (re-scopes in place)
19
+ /builder-sync # pull the latest main onto the box right now
19
20
  # …work in /workspace…
20
21
  /builder-ship # smoke + review, then land + deploy — awards credits
21
22
  ```
22
23
 
23
- That's the whole loop. `/builder-sync` is the new step: it materializes the claimed
24
- task's code within seconds instead of waiting for the box's ~10-minute refresh.
24
+ That's the whole loop. `/builder-sync` pulls fresh code within seconds instead of
25
+ waiting for the box's ~10-minute refresh.
26
+
27
+ ## How git works on a box — read this BEFORE diagnosing "stuck"
28
+
29
+ The box holds **no stored git credential, ever** — and that is the design, not a
30
+ fault ([ADR 0055](../adr/<redacted>.md)):
31
+
32
+ - **Reads are server-mediated, per request.** Every remote git operation goes
33
+ through `/usr/local/bin/otb-git-credential`, which asks the control plane
34
+ (`GET /box/source-access`) for a **short-lived, read-only** credential. The
35
+ server checks your **live** rank + status on every single request — demotion or
36
+ deactivation cuts off the next fetch instantly.
37
+ - **`git push` always fails with 403 here — by design.** The read credential
38
+ cannot write. Landing code is the server's job: `/builder-ship` uploads your
39
+ work, opens the PR, and lands it. Never try to fix the 403 by embedding a
40
+ token or editing git config.
41
+ - **Source refreshes from `main` every ~10 minutes** (the `box-source-fetch`
42
+ cron; log at `/tmp/box-source-fetch.log`). `/builder-sync` runs the same fetch
43
+ on demand.
44
+ - **If a remote git op says `could not read Username`, or the sync log shows
45
+ 401:** the box's GDS session expired. Run `/builder-reauth`, then
46
+ `/builder-sync`. That is the whole fix.
47
+
48
+ The box writes these same facts to `/workspace/CLAUDE.local.md` on every sync, so
49
+ a Claude session on the box loads them automatically (the file is gitignored and
50
+ box-written — don't edit it).
25
51
 
26
52
  ## The model — what's on your box
27
53
 
28
- A task-scoped box carries two layers:
29
-
30
- 1. **The base instance** — always present, whatever you've claimed: the methodology
31
- (`CLAUDE.md`, `.claude/`), the build tooling (`scripts/`, `src/bongos/`),
32
- `docs/`, `infra/`, and the **test suite** (`tests/`). Enough for Claude to hold
33
- context and run the `/builder-*` CLI, and to run your module's tests.
34
- 2. **Your claimed task's code** — the module directories the task's goal scopes
35
- (`goals.scope_modules` → globs, [ADR 0086](../adr/<redacted>.md)). Claim a `dev-box` task → you get
36
- `modules/dev-box/`; claim a `game` task → you get the game world too. Nothing
37
- else.
38
-
39
- What you do **not** get: other builders' modules, the product/game runtime (unless
40
- your task is game-scoped), and — the point — **no GitHub credential on the box**.
41
- The box asks the control plane (`GET /box/source-access`) for its slice on each
42
- fetch; the server holds the token and returns a scoped, cone-mode sparse-checkout
43
- spec. Lose the claim or a rank, and the next fetch is cut off at the server.
54
+ - **Metic and above:** the full repo in `/workspace` — same tree as a laptop
55
+ clone, refreshed from `main` by the sync cron.
56
+ - **Below Metic (starter):** the starter surface — methodology (`CLAUDE.md`,
57
+ `.claude/`), build tooling (`scripts/`, `src/bongos/`), `docs/`, `infra/`,
58
+ `tests/`, and the sandbox-runnable product code. Rank, checked live by the
59
+ server, is what bounds a box — not the task you claimed
60
+ ([ADR 0193](../adr/<redacted>.md)).
44
61
 
45
62
  ## Step by step
46
63
 
@@ -51,11 +68,10 @@ If you haven't yet, run **`/builder-connect`** (or follow the
51
68
  box, then **`/builder-setup`** once on the box to sign the Bongos CLI in. The browser
52
69
  terminal drops you into `/workspace` — the one working folder.
53
70
 
54
- > **`bongos shell` / `bongos code` re-scope on connect (BV1.R101).** Connecting with
55
- > either verb runs the sync for you first, so you land in `/workspace` already scoped
56
- > to your active claim — no manual `/builder-sync` needed just to arrive. (The browser
57
- > terminal drops you straight into `/workspace`; run `/builder-sync` there if you
58
- > claimed or switched since your last sync.)
71
+ > **`bongos shell` / `bongos code` sync on connect (BV1.R101).** Connecting with
72
+ > either verb runs the source fetch for you first, so you land in `/workspace`
73
+ > already fresh. (The browser terminal drops you straight into `/workspace`; run
74
+ > `/builder-sync` there if you want the latest immediately.)
59
75
 
60
76
  ### 2. See what you can claim — `/builder-start`
61
77
 
@@ -64,21 +80,18 @@ claims. Pick one.
64
80
 
65
81
  ### 3. Claim it — `/builder-claim <N>`
66
82
 
67
- Locks task N to your session. **This is what drives your box's scope:** source
68
- access is computed from your **active claim** — its task → goal → `scope_modules`.
83
+ Locks task N to your session so no parallel session collides with your work.
69
84
 
70
- ### 4. Pull the code now — `/builder-sync`
85
+ ### 4. Freshen the code — `/builder-sync`
71
86
 
72
- Re-runs the box's source-fetch immediately, so `/workspace` re-scopes to task N's
73
- modules within seconds. (A ~10-minute cron does this on its own as a backstop — you
74
- just don't want to wait for it.) Off a box there's nothing to sync — your source is
75
- your local checkout — and the command tells you so.
87
+ Re-runs the box's source fetch immediately so `/workspace` is on the current
88
+ `main` before you branch. (The ~10-minute cron does this on its own as a
89
+ backstop.) Off a box there's nothing to sync — your source is your local
90
+ checkout — and the command tells you so.
76
91
 
77
92
  ### 5. Work — in `/workspace`
78
93
 
79
- `/workspace` now holds the base instance **plus** task N's module code. One folder:
80
- when you switch tasks it **re-scopes in place**, so there are no per-task folders to
81
- manage.
94
+ One folder, always. When you switch tasks, keep working in place.
82
95
 
83
96
  ### 6. Ship — `/builder-ship`
84
97
 
@@ -90,19 +103,20 @@ One box, one working folder, one active claim at a time (the server enforces
90
103
  one-claim-per-session). To move to a different task:
91
104
 
92
105
  1. `/builder-ship` (or `/builder-release`) the current claim.
93
- 2. `/builder-claim <M>` the new one.
94
- 3. `/builder-sync` — the box re-scopes to task M in place.
106
+ 2. `/builder-claim <M>` the new one — and keep working in `/workspace`.
95
107
 
96
108
  ## Notes + gotchas
97
109
 
98
- - **`tests/` is always in the base** — so a module's tests run on the box (they
99
- live in the top-level `tests/`, not inside `modules/<key>/`).
100
- - **Idle boxes rest.** A box with no activity is reclaimed after ~10–15 min; the
101
- next connect re-provisions a fresh one and re-fetches your scope. **Uncommitted
102
- work on a reaped box is lost** — ship or commit before you step away.
110
+ - **`tests/` is on every box** — a starter box can run the suite for the code it
111
+ holds (tests live in the top-level `tests/`, not inside `modules/<key>/`).
112
+ - **Idle boxes park, they don't die.** After ~2 hours of no activity the box is
113
+ **parked**: a snapshot is kept and the droplet is destroyed, so compute billing
114
+ stops and a wake restores your filesystem. Only weeks of staying parked lead to
115
+ reclaim (with a warning first). Still: **ship or commit before you step away** —
116
+ a snapshot is a safety net, not a workflow.
103
117
  - **`/builder-sync` is idempotent** — safe to re-run; it just does, on demand, what
104
118
  the cron does on its schedule.
105
- - **A fresh box comes up with the base already cloned.** If a box ever comes up
119
+ - **A fresh box comes up with the code already cloned.** If a box ever comes up
106
120
  *bare* (no code, no terminal), that's the packaging bug
107
121
  [ADR 0150](../adr/<redacted>.md) fixed on the
108
122
  control plane — flag it rather than working around it.
package/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.19.370",
3
+ "version": "1.19.371",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@bongos/core",
9
- "version": "1.19.370",
9
+ "version": "1.19.371",
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.370",
3
+ "version": "1.19.371",
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",
package/src/module-api.js CHANGED
@@ -1170,8 +1170,10 @@ const { validateOrRespond, LIMITS, parseId, asyncHandler, corsPublicGet, parsePa
1170
1170
  // landed since 1.19.368 with no explicit bump. run 32903289072. (task 1002620)
1171
1171
  // 1.19.370 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
1172
1172
  // landed since 1.19.369 with no explicit bump. run 32904231221. (task 1002620)
1173
+ // 1.19.371 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
1174
+ // landed since 1.19.370 with no explicit bump. run 32904582252. (task 1002620)
1173
1175
  // ---------------------------------------------------------------------------
1174
- const CORE_VERSION = '1.19.370'; // CI auto-patch carrier (ADR 0161); see changelog above
1176
+ const CORE_VERSION = '1.19.371'; // CI auto-patch carrier (ADR 0161); see changelog above
1175
1177
 
1176
1178
  // A namespaced logger so a module's log lines are attributable + consistent.
1177
1179
  // Usage: const log = api.logger('dev-box'); log.info('mounted');