@bongos/core 1.19.199 → 1.19.201

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.199",
6
- "core_contract": "1.19.199",
7
- "source_commit": "08495813527c1aeffa0428e7234eaf43d9cabe73",
5
+ "core_version": "1.19.201",
6
+ "core_contract": "1.19.201",
7
+ "source_commit": "d12ce65286155db1a4609b647f8b5c6f3b7702c8",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-08-17T16:22:20.827Z",
9
+ "built_at": "2026-08-17T19:08:54.639Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 310,
@@ -17,7 +17,7 @@
17
17
  "gate": "passed"
18
18
  },
19
19
  "file_count": 1625,
20
- "tree_sha256": "acb3b4c8b4b4e9b69ee04cf812eb630279966cb39dbdde2dab3dd192a30302a4",
20
+ "tree_sha256": "300276855875716739e395ee304fab665d8e9cc9ee33839e0544ce763fea9a17",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/blocker-review/SKILL.md",
@@ -4047,7 +4047,7 @@
4047
4047
  {
4048
4048
  "path": "modules/security/artifact-scan/detectors/npm-lifecycle.js",
4049
4049
  "mode": "0000644",
4050
- "sha256": "ad38a6c63b2b55c31708a1a1b3e0302f7333ac39deb1a073c47423915cbc476b"
4050
+ "sha256": "97977c34dd71368a980e8eea568ad63c79aeb00a9e33eb93bf85075367f4b3c8"
4051
4051
  },
4052
4052
  {
4053
4053
  "path": "modules/security/artifact-scan/detectors/permissions.js",
@@ -4067,7 +4067,7 @@
4067
4067
  {
4068
4068
  "path": "modules/security/artifact-scan/fetch.js",
4069
4069
  "mode": "0000644",
4070
- "sha256": "73fecaa98fd69649edf75c8854ffcefa9117412e8604cf5ccfa1ac376ae27fd6"
4070
+ "sha256": "7f6241a971f3a13b2b4e367ed657302a4e1de4db26a47881c20f50f16a9897fc"
4071
4071
  },
4072
4072
  {
4073
4073
  "path": "modules/security/artifact-scan/floor.js",
@@ -4152,12 +4152,12 @@
4152
4152
  {
4153
4153
  "path": "modules/security/tests/artifact_scan.mjs",
4154
4154
  "mode": "0000644",
4155
- "sha256": "68079f8cc0e8c8466054865032fa03bd23f0a46513cbe997c4390d2e236e9249"
4155
+ "sha256": "dbdc9f017a2a6dff3379c1a0acb08e023278cfb382d91b20a4ec0b5e5f8229b0"
4156
4156
  },
4157
4157
  {
4158
4158
  "path": "modules/security/tests/floor.mjs",
4159
4159
  "mode": "0000644",
4160
- "sha256": "7fcc6fedf6d087156ba91c6a6935fcf86b4c0cd0d80c31082121669f14b58172"
4160
+ "sha256": "799dca44c7570ef11de2df5b721428de2670343882b6942eb6bac62c1b3b40ca"
4161
4161
  },
4162
4162
  {
4163
4163
  "path": "modules/security/tests/mirror.mjs",
@@ -4272,12 +4272,12 @@
4272
4272
  {
4273
4273
  "path": "package-lock.json",
4274
4274
  "mode": "0000644",
4275
- "sha256": "b25cf066ce8236ed3fe30f161b673cb3e2e5b6f5c82c623aaa4698008c7cecb3"
4275
+ "sha256": "4cade958ecb05d2f70af056f7316e5e773771f304236d17ceeddc04b1147899b"
4276
4276
  },
4277
4277
  {
4278
4278
  "path": "package.json",
4279
4279
  "mode": "0000644",
4280
- "sha256": "7e57f9372d4637486d5826db9256a4b75628228907aa56dac60120f0e6ad78bb"
4280
+ "sha256": "7da6bdc2ce6176f9c673bee2f697426ee7a94cc151823d65526c9fe50e646746"
4281
4281
  },
4282
4282
  {
4283
4283
  "path": "public-docs/index.html",
@@ -5887,7 +5887,7 @@
5887
5887
  {
5888
5888
  "path": "src/module-api.js",
5889
5889
  "mode": "0000644",
5890
- "sha256": "86156bb0d8387b1c0ed62a350d89c966fe23e39ce264680a6838f83a18981afe"
5890
+ "sha256": "ed3ac8884e7e1deaa6ddd27accdc066707203de95a45924c1255b6b28e45527d"
5891
5891
  },
5892
5892
  {
5893
5893
  "path": "src/module-loader/catalog.js",
@@ -26,6 +26,20 @@ const AUTO_RUN_SCRIPTS = Object.freeze([
26
26
  'dependencies',
27
27
  ]);
28
28
 
29
+ // When each hook actually fires. All are auto-run (same severity), but calling a
30
+ // publish-time hook "install time" overstates the risk to the INSTALLING user —
31
+ // the message must name the real trigger. `prepare` fires on both (install from
32
+ // git, and publish); the deprecated `prepublish` no longer runs on install in
33
+ // modern npm.
34
+ const SCRIPT_TIMING = Object.freeze({
35
+ prepublish: 'publish/pack time',
36
+ prepublishOnly: 'publish/pack time',
37
+ prepack: 'publish/pack time',
38
+ postpack: 'publish/pack time',
39
+ prepare: 'install (git deps) and publish time',
40
+ });
41
+ const timingOf = (name) => SCRIPT_TIMING[name] || 'install time';
42
+
29
43
  function detect(corpus) {
30
44
  const findings = [];
31
45
  for (const file of corpus.files) {
@@ -43,7 +57,7 @@ function detect(corpus) {
43
57
  for (const name of AUTO_RUN_SCRIPTS) {
44
58
  if (Object.prototype.hasOwnProperty.call(scripts, name)) {
45
59
  findings.push(finding('npm_lifecycle_script', 'high', file.path,
46
- `npm auto-runs "${name}" at install time: ${excerpt(scripts[name])}`,
60
+ `npm auto-runs "${name}" at ${timingOf(name)}: ${excerpt(scripts[name])}`,
47
61
  { script: name, command: excerpt(scripts[name]) }));
48
62
  }
49
63
  const rawCount = rawCounts.get(name) || 0;
@@ -115,6 +115,10 @@ function hardeningConfig(q) {
115
115
  'filter.lfs.smudge=', // an LFS smudge filter is a process git runs on checkout
116
116
  'filter.lfs.process=',
117
117
  'filter.lfs.required=false',
118
+ // Windows MAX_PATH: pen path + a deeply nested artifact path can exceed 260
119
+ // chars, and without this the clone dies "Filename too long" (fail-closed,
120
+ // but the artifact was scannable). Pen-confined writes only; no-op elsewhere.
121
+ 'core.longpaths=true',
118
122
  'advice.detachedHead=false',
119
123
  ].flatMap((kv) => ['-c', kv]);
120
124
  }
@@ -262,6 +262,7 @@ await test('the git hardening contract is present in full', async () => {
262
262
  'transfer.fsckObjects=true',
263
263
  'credential.helper=',
264
264
  'filter.lfs.smudge=',
265
+ 'core.longpaths=true',
265
266
  ]) {
266
267
  assert.ok(cfg.includes(required), `missing hardening: ${required}`);
267
268
  }
@@ -68,6 +68,19 @@ await test('npm-lifecycle: quotes a postinstall verbatim as a high finding', ()
68
68
  assert.match(hit.message, /node steal\.js/);
69
69
  });
70
70
 
71
+ await test('npm-lifecycle: the message names when the hook really fires (publish/pack vs install)', () => {
72
+ const f = npmLifecycle.detect(corpusOf({ 'package.json': JSON.stringify({
73
+ scripts: { prepublishOnly: 'npm run build', postinstall: 'node setup.js' },
74
+ }) }));
75
+ const pub = f.find((x) => x.code === 'npm_lifecycle_script' && x.detail.script === 'prepublishOnly');
76
+ const inst = f.find((x) => x.code === 'npm_lifecycle_script' && x.detail.script === 'postinstall');
77
+ assert.ok(pub && inst);
78
+ // prepublishOnly fires at publish/pack time — calling it install-time overstates.
79
+ assert.match(pub.message, /publish\/pack time/);
80
+ assert.doesNotMatch(pub.message, /install time/);
81
+ assert.match(inst.message, /install time/);
82
+ });
83
+
71
84
  await test('npm-lifecycle: a "test" script (run-by-request) is NOT flagged', () => {
72
85
  const f = npmLifecycle.detect(corpusOf({ 'package.json': JSON.stringify({ scripts: { test: 'jest', build: 'tsc' } }) }));
73
86
  assert.equal(f.length, 0);
package/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.19.199",
3
+ "version": "1.19.201",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@bongos/core",
9
- "version": "1.19.199",
9
+ "version": "1.19.201",
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.199",
3
+ "version": "1.19.201",
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
@@ -825,8 +825,12 @@ const { validateOrRespond, LIMITS, parseId, asyncHandler, corsPublicGet, parsePa
825
825
  // landed since 1.19.197 with no explicit bump. run 32045034525. (task 1002620)
826
826
  // 1.19.199 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
827
827
  // landed since 1.19.198 with no explicit bump. run 32045249602. (task 1002620)
828
+ // 1.19.200 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
829
+ // landed since 1.19.199 with no explicit bump. run 32058296632. (task 1002620)
830
+ // 1.19.201 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
831
+ // landed since 1.19.200 with no explicit bump. run 32058666256. (task 1002620)
828
832
  // ---------------------------------------------------------------------------
829
- const CORE_VERSION = '1.19.199'; // CI auto-patch carrier (ADR 0161); see changelog above
833
+ const CORE_VERSION = '1.19.201'; // CI auto-patch carrier (ADR 0161); see changelog above
830
834
 
831
835
  // A namespaced logger so a module's log lines are attributable + consistent.
832
836
  // Usage: const log = api.logger('dev-box'); log.info('mounted');