@bongos/core 1.24.66 → 1.24.67

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/bongos/package-core.js",
5
- "core_version": "1.24.66",
6
- "core_contract": "1.24.66",
7
- "source_commit": "c8dd200682525465ab4c31d562c49ede1a515404",
5
+ "core_version": "1.24.67",
6
+ "core_contract": "1.24.67",
7
+ "source_commit": "cb3a73a80b0216905417a6379f4caf4f66a159c2",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-11-09T19:50:40.752Z",
9
+ "built_at": "2026-11-09T20:07:37.283Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 638,
@@ -17,7 +17,7 @@
17
17
  "gate": "passed"
18
18
  },
19
19
  "file_count": 4575,
20
- "tree_sha256": "8863cadeb49c7cd719e61a10cdc6f7fb0e2452e1e6e52089b74b997125377f11",
20
+ "tree_sha256": "ab4503425d89d4eec00873f68e4ed95088cb713b9816a7a0f3cc218da4f734d1",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -3007,7 +3007,7 @@
3007
3007
  {
3008
3008
  "path": "docs/module-api-changelog.md",
3009
3009
  "mode": "0000644",
3010
- "sha256": "d9de836d931d1f89f45b5500fc6b7eceed36543deb0dc521decb3b1722074a69"
3010
+ "sha256": "b2ea544c7a4c86e2c83d079531d105a0f8ade34933bfe96929c5bd8256dcea5c"
3011
3011
  },
3012
3012
  {
3013
3013
  "path": "docs/modules-contract.md",
@@ -5757,7 +5757,7 @@
5757
5757
  {
5758
5758
  "path": "modules/government/protected-surfaces.json",
5759
5759
  "mode": "0000644",
5760
- "sha256": "12308c4d0a2f58fe874ef8b3ed4698709869a42c24c08d2b72011bd81c0ff160"
5760
+ "sha256": "0b54c64b1515a2208a8094e80a891e99e374a99bc26e99f70c81d592ef125cbc"
5761
5761
  },
5762
5762
  {
5763
5763
  "path": "modules/government/ranks.js",
@@ -11902,12 +11902,12 @@
11902
11902
  {
11903
11903
  "path": "package-lock.json",
11904
11904
  "mode": "0000644",
11905
- "sha256": "6404eb74f3c63e5cbd0cc64d9a18d2a860b758a8077199241d508938f556ddb5"
11905
+ "sha256": "02030268a28d3b76dc99198d41bf1de043460b72e8dedde3caa400b65c5ea4bf"
11906
11906
  },
11907
11907
  {
11908
11908
  "path": "package.json",
11909
11909
  "mode": "0000644",
11910
- "sha256": "e6fa2b150dfc6c0ebdd2fb524ba028608c04ff5d698ab8ab4be2cbc62a7c2501"
11910
+ "sha256": "f18b77185a5d2b924bf459cc5415880fea61d1118f9a358f0691b8d703565120"
11911
11911
  },
11912
11912
  {
11913
11913
  "path": "public-docs/index.html",
@@ -11927,7 +11927,7 @@
11927
11927
  {
11928
11928
  "path": "release-notes.json",
11929
11929
  "mode": "0000644",
11930
- "sha256": "f21fea4a4cb0dd1eceb683e196ac37110931e63de4290b1d99614d747f30fb78"
11930
+ "sha256": "576be7645a892c65c51e1ae3c8a17d7a5ecb2a2505cf9467dfff7a26b7aa5679"
11931
11931
  },
11932
11932
  {
11933
11933
  "path": "scripts/bongos/CLAUDE.md",
@@ -15877,7 +15877,7 @@
15877
15877
  {
15878
15878
  "path": "src/module-api.js",
15879
15879
  "mode": "0000644",
15880
- "sha256": "66cdc6ea2874f48cf67645553922f875fb60cfc951e7f075ac58ce2ab9adb660"
15880
+ "sha256": "ab5adbd2f126b45470953b8c28545124554f69e04a1ba70494471d888288d509"
15881
15881
  },
15882
15882
  {
15883
15883
  "path": "src/module-loader/catalog.js",
@@ -18437,7 +18437,7 @@
18437
18437
  {
18438
18438
  "path": "tests/government_protected_surfaces.mjs",
18439
18439
  "mode": "0000644",
18440
- "sha256": "edbc428d065ead0a9fd9ba02218fa25f72f1646e594d01386f13256b0621490f"
18440
+ "sha256": "de07f6405cc18311d0e048efcbc450bb15b270387a9579b53811ae4ac506c7e0"
18441
18441
  },
18442
18442
  {
18443
18443
  "path": "tests/government_rank_sync.mjs",
@@ -3386,5 +3386,7 @@ is load-bearing: the script throws rather than guess if it is missing, and
3386
3386
  landed since 1.24.64 with no explicit bump. run 42516347052. (task 1002620)
3387
3387
  1.24.66 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
3388
3388
  landed since 1.24.65 with no explicit bump. run 42686885661. (task 1002620)
3389
+ 1.24.67 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
3390
+ landed since 1.24.66 with no explicit bump. run 42689728958. (task 1002620)
3389
3391
  ---------------------------------------------------------------------------
3390
3392
  ```
@@ -104,6 +104,16 @@
104
104
  { "glob": "scripts/bongos/main-audit.js", "group": "pipeline", "why": "the post-push audit — the authoritative substrate layer (self-protect)" },
105
105
  { "glob": "scripts/bongos/push-main.js", "group": "pipeline", "why": "the sanctioned main-push (carries the override)" },
106
106
  { "glob": "scripts/bongos/run-unit-tests.js", "group": "pipeline", "why": "the unit-gate test SELECTOR — muting tests here blunts the CI gate (ADR 0058)" },
107
+ { "glob": "scripts/bongos/fitness.js", "group": "pipeline", "why": "task 1004383. The architecture fitness gate CI runs on every merge, including the module-migration DDL check task 1003373 extends. scripts/gds/fitness.js is only a forwarder to it (already under scripts/gds/); the real gate sat unprotected." },
108
+ { "glob": "scripts/bongos/fitness-checks-error-envelope.js", "group": "pipeline", "why": "task 1004383. A check file of the fitness CI gate, split out beside fitness.js; protected with it under the 1004024 carve rule, since muting a check here blunts the gate." },
109
+ { "glob": "scripts/bongos/fitness-checks-identity.js", "group": "pipeline", "why": "task 1004383. A check file of the fitness CI gate, split out beside fitness.js; protected with it under the 1004024 carve rule, since muting a check here blunts the gate." },
110
+ { "glob": "scripts/bongos/fitness-checks-packaging.js", "group": "pipeline", "why": "task 1004383. A check file of the fitness CI gate, split out beside fitness.js; protected with it under the 1004024 carve rule, since muting a check here blunts the gate." },
111
+ { "glob": "scripts/bongos/fitness-checks-route-pins.js", "group": "pipeline", "why": "task 1004383. A check file of the fitness CI gate, split out beside fitness.js; protected with it under the 1004024 carve rule, since muting a check here blunts the gate." },
112
+ { "glob": "scripts/bongos/fitness-checks-vocabulary.js", "group": "pipeline", "why": "task 1004383. A check file of the fitness CI gate, split out beside fitness.js; protected with it under the 1004024 carve rule, since muting a check here blunts the gate." },
113
+ { "glob": "scripts/bongos/fitness-checks-write-validation.js", "group": "pipeline", "why": "task 1004383. A check file of the fitness CI gate, split out beside fitness.js; protected with it under the 1004024 carve rule, since muting a check here blunts the gate." },
114
+ { "glob": "scripts/bongos/fitness-lib.js", "group": "pipeline", "why": "task 1004383. A check file of the fitness CI gate, split out beside fitness.js; protected with it under the 1004024 carve rule, since muting a check here blunts the gate." },
115
+ { "glob": "scripts/bongos/fitness-migration-contraction.js", "group": "pipeline", "why": "task 1004383. A check file of the fitness CI gate, split out beside fitness.js; protected with it under the 1004024 carve rule, since muting a check here blunts the gate." },
116
+ { "glob": "scripts/bongos/fitness-ratchets.js", "group": "pipeline", "why": "task 1004383. A check file of the fitness CI gate, split out beside fitness.js; protected with it under the 1004024 carve rule, since muting a check here blunts the gate." },
107
117
  { "glob": "scripts/bongos/hard-floor.js", "group": "pipeline", "why": "task 1004859. The trust-boundary hard-floor list (self-protect). It moved here from scripts/bongos/gate-review.js when that never-run CI classifier was removed; publish-manifest.js and adopt-preflight.js read it." },
108
118
  { "glob": "scripts/bongos/setup.js", "group": "pipeline", "why": "/builder-setup — installs the pre-push hook" },
109
119
  { "glob": "scripts/bongos/install-git-hooks.js", "group": "pipeline", "why": "the hook installer (self-protect)" },
package/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.24.66",
3
+ "version": "1.24.67",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@bongos/core",
9
- "version": "1.24.66",
9
+ "version": "1.24.67",
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.24.66",
3
+ "version": "1.24.67",
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",
@@ -11399,5 +11399,11 @@
11399
11399
  "id": "1004384",
11400
11400
  "text": "Sessions that start on a claimed task no longer receive raw idea titles from Discord: hint titles are now cleaned and boxed off as data, and outside ideas are left out, so a planted instruction can't steer the agent. The hints"
11401
11401
  }
11402
+ ],
11403
+ "1.24.67": [
11404
+ {
11405
+ "id": "1004383",
11406
+ "text": "The CI check that guards every merge is now protected, so a builder below Metic can no longer quietly switch its checks off. Protecting the credit-minting file was held back for the owner to decide, because it would lock the w"
11407
+ }
11402
11408
  ]
11403
11409
  }
package/src/module-api.js CHANGED
@@ -81,7 +81,7 @@ const { sleep } = require('./sleep');
81
81
  // MAJOR (see allowBoxScope below): passes the request through untouched.
82
82
  function deprecatedNoopMiddleware(_req, _res, next) { next(); }
83
83
 
84
- const CORE_VERSION = '1.24.66'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
84
+ const CORE_VERSION = '1.24.67'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
85
85
 
86
86
  // A namespaced logger so a module's log lines are attributable + consistent.
87
87
  // Usage: const log = api.logger('discord'); log.info('mounted');
@@ -350,6 +350,19 @@ const ADDED_SINCE_R101 = [
350
350
  glob: 'modules/lifecycle/claim-eligibility.js',
351
351
  why: "the queue axis of the claim gate: which tasks a builder's permissions let them claim at all.",
352
352
  },
353
+ // task 1004383 (2026-09-29 security-goal audit). The fitness CI gate: the filing task
354
+ // named scripts/gds/fitness.js, which by the claim was a forwarder already protected
355
+ // under scripts/gds/ — the real gate and its check files sat unprotected.
356
+ {
357
+ after: 'scripts/bongos/run-unit-tests.js',
358
+ glob: 'scripts/bongos/fitness.js',
359
+ why: 'the architecture fitness gate CI runs on every merge, including the module-'
360
+ + 'migration DDL check; muting a check here blunts the gate.',
361
+ },
362
+ ...carve('scripts/bongos/fitness.js', ['fitness-checks-error-envelope', 'fitness-checks-identity',
363
+ 'fitness-checks-packaging', 'fitness-checks-route-pins', 'fitness-checks-vocabulary',
364
+ 'fitness-checks-write-validation', 'fitness-lib', 'fitness-migration-contraction', 'fitness-ratchets'],
365
+ 'a check file of the fitness CI gate, split out beside fitness.js.'),
353
366
  // task 1004546: the Autobongos self-edit wall. The grade of task 1004540 refused a
354
367
  // version whose guard lived in unprotected shared files, so it moved into these two
355
368
  // small ones and they sit beside the rest of the publish pipeline.
@@ -602,6 +615,23 @@ const AUTHZ_INVENTORY = [
602
615
  'permissionAllowsClaim', 'claimEligibilityAllows', // modules/lifecycle/claim-eligibility.js
603
616
  ];
604
617
 
618
+ // task 1004383. The files that ACT on a grade or gate a merge — not just the grader itself.
619
+ // db-grade.js writes the grade and attributes its credit (registered with the lifecycle/db.js
620
+ // family, task 1004382); scripts/bongos/fitness.js is the CI gate, and the carve tripwire
621
+ // above makes its fitness-*.js check files follow it. scripts/gds/fitness.js is only a
622
+ // forwarder to it, already under scripts/gds/. modules/economy/credits.js is deliberately
623
+ // NOT here: registering it walls the whole economy module, an owner decision (task 1005184).
624
+ const GATE_ACTORS = ['modules/lifecycle/db-grade.js', 'scripts/bongos/fitness.js'];
625
+
626
+ test('the grade write and the fitness CI gate are protected at Metic (1004383)', () => {
627
+ for (const rel of GATE_ACTORS) {
628
+ assert.ok(fs.existsSync(path.join(ROOT, rel)), `${rel} is gone — update GATE_ACTORS to where it moved`);
629
+ const surface = ppc.surfaceFor(rel);
630
+ assert.ok(surface, `${rel} acts on a grade or gates a merge but no protected surface covers it.`);
631
+ assert.ok(ppc.RANK_TIER[surface.floor] >= ppc.RANK_TIER.metic, `${rel} is floored below Metic.`);
632
+ }
633
+ });
634
+
605
635
  // Files (repo-relative) that DEFINE `name` as a function, out of the tracked non-test .js.
606
636
  function definitionSites(name, tracked, read = (rel) => fs.readFileSync(path.join(ROOT, rel), 'utf8')) {
607
637
  const re = new RegExp(`(?:^|[^\\w$.])(?:async\\s+)?function\\s*\\*?\\s*${name}\\s*\\(`