@bongos/core 1.19.436 → 1.19.437

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.436",
6
- "core_contract": "1.19.436",
7
- "source_commit": "a1241e98d95626ad0f0e4fb92e0bf5570ebd1d19",
5
+ "core_version": "1.19.437",
6
+ "core_contract": "1.19.437",
7
+ "source_commit": "a19cfca1c4490ec543603d83defdefb98de8da80",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-08-30T02:36:42.560Z",
9
+ "built_at": "2026-08-30T03:08:23.716Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 369,
@@ -17,7 +17,7 @@
17
17
  "gate": "passed"
18
18
  },
19
19
  "file_count": 2135,
20
- "tree_sha256": "fb1407f644a9e1ce28d901f454bb38108b7de3165d3aca0ae74533bf44192727",
20
+ "tree_sha256": "a3d39a99e32c492d5ae17ae906d89add5544bc902225fa056e0c6c8f9f4110ca",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/blocker-review/SKILL.md",
@@ -1997,7 +1997,7 @@
1997
1997
  {
1998
1998
  "path": "docs/module-api-changelog.md",
1999
1999
  "mode": "0000644",
2000
- "sha256": "8261227744e98ae0628e0f819b9df602e3f7417ccc23b1753f6314a74ac3b9ce"
2000
+ "sha256": "eb14f5a0f47e80dfc687ef5193e73de5da6d937a90e88ad71bb4e2e6d70c2ad3"
2001
2001
  },
2002
2002
  {
2003
2003
  "path": "docs/modules-contract.md",
@@ -5607,12 +5607,12 @@
5607
5607
  {
5608
5608
  "path": "package-lock.json",
5609
5609
  "mode": "0000644",
5610
- "sha256": "6a868844044c8ad9bb4914949f7787e746f9e88fc03c2517a10a3aa3c31f0962"
5610
+ "sha256": "38ae27226a931dea4012fd645931624e0592a047c14350cfd0c5252b2230c0d6"
5611
5611
  },
5612
5612
  {
5613
5613
  "path": "package.json",
5614
5614
  "mode": "0000644",
5615
- "sha256": "185654794f0cbca9357dd5804fb45bf89fed4d8c358b2e6b0ffab14f1c2806f7"
5615
+ "sha256": "54a547f0c6490348fe2695d83d7a0639fd9c583a0472bc3974db590ee23e1434"
5616
5616
  },
5617
5617
  {
5618
5618
  "path": "public-docs/index.html",
@@ -7747,7 +7747,7 @@
7747
7747
  {
7748
7748
  "path": "src/module-api.js",
7749
7749
  "mode": "0000644",
7750
- "sha256": "61dda9cd35bcb286dd5573c96baded0e1c651945c7249113131f9b50e7f767f0"
7750
+ "sha256": "0537028fe74fccf01b238c487a133a416cedfcdceba1d212c4259f50101c6014"
7751
7751
  },
7752
7752
  {
7753
7753
  "path": "src/module-loader/catalog.js",
@@ -10472,7 +10472,7 @@
10472
10472
  {
10473
10473
  "path": "tests/stop_refcheck.mjs",
10474
10474
  "mode": "0000644",
10475
- "sha256": "2ddc5ada648e7eabb41d3ae0afd39f885f3840c8ec14483f83330e8eade11330"
10475
+ "sha256": "a95e75e1cd3fe6cb6d48a8a082a8d2339eaae8589e5091fe83d88e6f106cc717"
10476
10476
  },
10477
10477
  {
10478
10478
  "path": "tests/strand_watch.mjs",
@@ -1309,5 +1309,7 @@ is load-bearing: the script throws rather than guess if it is missing, and
1309
1309
  landed since 1.19.434 with no explicit bump. run 33286790214. (task 1002620)
1310
1310
  1.19.436 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
1311
1311
  landed since 1.19.435 with no explicit bump. run 33288364716. (task 1002620)
1312
+ 1.19.437 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
1313
+ landed since 1.19.436 with no explicit bump. run 33289560561. (task 1002620)
1312
1314
  ---------------------------------------------------------------------------
1313
1315
  ```
package/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.19.436",
3
+ "version": "1.19.437",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@bongos/core",
9
- "version": "1.19.436",
9
+ "version": "1.19.437",
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.436",
3
+ "version": "1.19.437",
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
@@ -33,7 +33,7 @@ const { validateOrRespond, LIMITS, parseId, asyncHandler, corsPublicGet, parsePa
33
33
  // there. scripts/gds/bump-version.js still rewrites the literal below; it appends
34
34
  // the entry to that file. Look for a version's history there, not here.
35
35
  // ---------------------------------------------------------------------------
36
- const CORE_VERSION = '1.19.436'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
36
+ const CORE_VERSION = '1.19.437'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
37
37
 
38
38
  // A namespaced logger so a module's log lines are attributable + consistent.
39
39
  // Usage: const log = api.logger('dev-box'); log.info('mounted');
@@ -141,5 +141,61 @@ t('lastAssistantText returns the final assistant text, skipping tool_use blocks'
141
141
  }
142
142
  });
143
143
 
144
+ // ---- the process contract, spawned like the harness does (task 1003432) ----
145
+ // The hook used to abort on Windows at turn end (libuv UV_HANDLE_CLOSING) because
146
+ // process.exit() raced fetch()'s socket teardown. These run the real file: exit
147
+ // code + stdout are the interface, and each case also proves the process ended on
148
+ // its own (no signal / no timeout) — a hang or an abort is the regression.
149
+ // Offline: OTB_REFIDS supplies the allow-list, so no network, no cache.
150
+ import { spawnSync } from 'node:child_process';
151
+ const HOOK = require.resolve('../.claude/hooks/stop-refcheck.js'); // same file the guard above required
152
+ const SPAWN_DIR = fs.mkdtempSync(path.join(os.tmpdir(), 'refcheck-spawn-'));
153
+ function spawnTranscript(text) {
154
+ const p = path.join(SPAWN_DIR, `t-${Math.random().toString(36).slice(2)}.jsonl`);
155
+ fs.writeFileSync(p, JSON.stringify({ type: 'assistant', message: { content: [{ type: 'text', text }] } }) + '\n');
156
+ return p;
157
+ }
158
+ function spawnHook(payload) {
159
+ const r = spawnSync(process.execPath, [HOOK], {
160
+ input: typeof payload === 'string' ? payload : JSON.stringify(payload),
161
+ encoding: 'utf8',
162
+ timeout: 8000,
163
+ env: { ...process.env, OTB_REFIDS: '1,2,3' },
164
+ });
165
+ assert.equal(r.signal, null, `hook must exit on its own, not be killed: ${r.stderr}`);
166
+ assert.ok(!/Assertion failed/.test(r.stderr || ''), `no libuv abort on teardown: ${r.stderr}`);
167
+ return r;
168
+ }
169
+
170
+ t('spawned: no bare ref → exit 0, no output, clean teardown', () => {
171
+ const r = spawnHook({ transcript_path: spawnTranscript('shipped task 1003365 cleanly'), stop_hook_active: false });
172
+ assert.equal(r.status, 0);
173
+ assert.equal(r.stdout.trim(), '');
174
+ });
175
+
176
+ t('spawned: an allow-listed bare ref → the block decision on stdout, exit 0', () => {
177
+ const r = spawnHook({ transcript_path: spawnTranscript('see #2 for details'), stop_hook_active: false });
178
+ assert.equal(r.status, 0);
179
+ const out = JSON.parse(r.stdout);
180
+ assert.equal(out.decision, 'block');
181
+ assert.ok(out.reason.includes('#2'));
182
+ });
183
+
184
+ t('spawned: stop_hook_active → exit 0 (never loops the re-emit)', () => {
185
+ const r = spawnHook({ transcript_path: spawnTranscript('see #2'), stop_hook_active: true });
186
+ assert.equal(r.status, 0);
187
+ assert.equal(r.stdout.trim(), '');
188
+ });
189
+
190
+ t('spawned: malformed / empty stdin or a missing transcript → exit 0 (fail open)', () => {
191
+ for (const payload of ['', '{not json', JSON.stringify({ transcript_path: path.join(SPAWN_DIR, 'nope.jsonl') })]) {
192
+ const r = spawnHook(payload);
193
+ assert.equal(r.status, 0, `payload ${JSON.stringify(payload)}`);
194
+ assert.equal(r.stdout.trim(), '');
195
+ }
196
+ });
197
+
198
+ fs.rmSync(SPAWN_DIR, { recursive: true, force: true });
199
+
144
200
  console.log(`\nstop_refcheck: ${passed} passed, ${failed} failed`);
145
201
  process.exit(failed ? 1 : 0);