@bongos/core 1.19.712 → 1.19.714

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.712",
6
- "core_contract": "1.19.712",
7
- "source_commit": "e848d50ff42905384b1e3df672f2dfd3f6cebb23",
5
+ "core_version": "1.19.714",
6
+ "core_contract": "1.19.714",
7
+ "source_commit": "a5a66a5abc084908ffbcb70583aa9effa9bc86d7",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-09-13T07:31:19.809Z",
9
+ "built_at": "2026-09-13T07:48:24.895Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 478,
@@ -17,7 +17,7 @@
17
17
  "gate": "passed"
18
18
  },
19
19
  "file_count": 2649,
20
- "tree_sha256": "19c186cbca6bdf1dd7a73d69676cf9f52d37a5bd1dc25ed9eae3a46bdec158d2",
20
+ "tree_sha256": "51e98dc1aa5041914570019a3903f1b1c0cce050fff1b530c41da04241a719a7",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -2807,7 +2807,7 @@
2807
2807
  {
2808
2808
  "path": "docs/module-api-changelog.md",
2809
2809
  "mode": "0000644",
2810
- "sha256": "90cfe161bdbb28b563fe34f367c2e5700149f07e2cec5f783f5db8bb9ea4b3db"
2810
+ "sha256": "3484277ad5363b99cffe978b168fcdadd40051cb9fc45c51a2aab58dd43fe601"
2811
2811
  },
2812
2812
  {
2813
2813
  "path": "docs/modules-contract.md",
@@ -4547,7 +4547,7 @@
4547
4547
  {
4548
4548
  "path": "modules/government/config.js",
4549
4549
  "mode": "0000644",
4550
- "sha256": "8edccad7dc69a95503d9e0d1de7795fd6082c8122e0695d1f018f49b37051fed"
4550
+ "sha256": "0110e6a9421696632fa749291547045c60ace60255d55f35a88accd61dcf5c80"
4551
4551
  },
4552
4552
  {
4553
4553
  "path": "modules/government/db.js",
@@ -7817,12 +7817,12 @@
7817
7817
  {
7818
7818
  "path": "package-lock.json",
7819
7819
  "mode": "0000644",
7820
- "sha256": "0cdb4130832c4680860dc1687b17e496d4e3a6ff963898690d8b7301c4040835"
7820
+ "sha256": "732fe7dc9bc6b9c48aabb5fb6dcf35aa9a71f50fcf16d6548e183a1092c40853"
7821
7821
  },
7822
7822
  {
7823
7823
  "path": "package.json",
7824
7824
  "mode": "0000644",
7825
- "sha256": "3c89b0fe35a5787a494119123aa0ba2a6e55f2428dfd912a208762e21743b71d"
7825
+ "sha256": "6543f1d328faab7d974585c1ad7f0f1b79ba653563bf5d75b7948f01501ce322"
7826
7826
  },
7827
7827
  {
7828
7828
  "path": "public-docs/index.html",
@@ -9602,7 +9602,7 @@
9602
9602
  {
9603
9603
  "path": "src/module-api.js",
9604
9604
  "mode": "0000644",
9605
- "sha256": "aa71f9f73709ca7b062e9bb5994bfb2fa7d586aa3cca4e89daa74a3204a0db15"
9605
+ "sha256": "e836253fa5b1c1b117c308430b19b2129a19904b21371ad2c033f0613951d0c2"
9606
9606
  },
9607
9607
  {
9608
9608
  "path": "src/module-loader/catalog.js",
@@ -11107,7 +11107,7 @@
11107
11107
  {
11108
11108
  "path": "tests/government_vanilla_boot.mjs",
11109
11109
  "mode": "0000644",
11110
- "sha256": "da3ebb855209f5de20b7d9ec45a9b09a068e251bc644e3090818e5a3f063b356"
11110
+ "sha256": "5c2676855575784f9fffcf909dd6179e4b588e49cb5c80b5395d6803bf89386d"
11111
11111
  },
11112
11112
  {
11113
11113
  "path": "tests/government_vocabulary.mjs",
@@ -1883,5 +1883,9 @@ is load-bearing: the script throws rather than guess if it is missing, and
1883
1883
  landed since 1.19.710 with no explicit bump. run 34744940181. (task 1002620)
1884
1884
  1.19.712 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
1885
1885
  landed since 1.19.711 with no explicit bump. run 34745412403. (task 1002620)
1886
+ 1.19.713 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
1887
+ landed since 1.19.712 with no explicit bump. run 34745667268. (task 1002620)
1888
+ 1.19.714 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
1889
+ landed since 1.19.713 with no explicit bump. run 34746102135. (task 1002620)
1886
1890
  ---------------------------------------------------------------------------
1887
1891
  ```
@@ -33,8 +33,13 @@
33
33
  // Their grants are DERIVED from catalog floors and materialised by
34
34
  // governance_002; config may relabel a seeded rank, never re-grant it.
35
35
  //
36
- // Stripping rather than throwing matches resolver.js: a typo in a config file must
37
- // fail CLOSED, not brick the boot.
36
+ // Stripping rather than throwing matches resolver.js: a template entry that asks for
37
+ // authority it may not have is DROPPED, so a wrong entry fails CLOSED rather than
38
+ // bricking the boot.
39
+ //
40
+ // SCOPE OF THAT RULE — it is about a pack that PARSES and asks for the wrong thing.
41
+ // A pack that does not parse at all is the other case, and the disk loader below
42
+ // throws on it deliberately. See the loadGovernmentConfig header.
38
43
  //
39
44
  // SLICE BOUNDARY: this file is the config CONTRACT, and deliberately has no production
40
45
  // caller yet — R96 is the "what shape is a rank template, and what can config never
@@ -321,11 +326,22 @@ function readJson(p) {
321
326
  catch (e) { if (e.code === 'ENOENT') return null; throw e; }
322
327
  }
323
328
 
324
- // Disk loader with the documented precedence. BOTH files are optional: the instance
325
- // pack because a vanilla instance ships only the neutral starter, and the neutral
326
- // starter because the four ranks still resolve to their canonical names without
329
+ // Disk loader with the documented precedence. BOTH files are optional when ABSENT: the
330
+ // instance pack because a vanilla instance ships only the neutral starter, and the
331
+ // neutral starter because the four ranks still resolve to their canonical names without
327
332
  // it. Unlike branding — where a missing identity is fatal — no value here is required,
328
- // so the loader fails to sane defaults rather than throwing.
333
+ // so an absent pack falls through to sane defaults.
334
+ //
335
+ // ABSENT and MALFORMED are NOT the same case, and this loader treats them differently
336
+ // on purpose. readJson() swallows only ENOENT; a pack that is present but does not
337
+ // parse raises a SyntaxError that propagates out of here and stops boot. A corrupt
338
+ // authority-adjacent file must be fixed by a human, not silently replaced by defaults
339
+ // nobody chose — the loud stop IS the fail-closed behaviour, since a boot that never
340
+ // completes grants nothing. Both halves are pinned as source: the absent half by
341
+ // tests/government_config.mjs ('tolerates a missing instance pack') and
342
+ // tests/government_vanilla_boot.mjs's no-packs-at-all case, the malformed half by
343
+ // that file's 'a malformed config pack fails LOUD'. Changing the throw into a
344
+ // fallback is therefore a deliberate decision plus a test edit, not a tidy-up.
329
345
  //
330
346
  // CALL THIS AT BOOT, NOT PER REQUEST. The two reads are synchronous, which is correct
331
347
  // for a startup read of a committed file and wrong inside a request handler. If a
package/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.19.712",
3
+ "version": "1.19.714",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@bongos/core",
9
- "version": "1.19.712",
9
+ "version": "1.19.714",
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.712",
3
+ "version": "1.19.714",
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
@@ -71,7 +71,7 @@ const { responsibilityFor, ROLE_RESPONSIBILITIES } = require('./role-responsibil
71
71
  // there. scripts/gds/bump-version.js still rewrites the literal below; it appends
72
72
  // the entry to that file. Look for a version's history there, not here.
73
73
  // ---------------------------------------------------------------------------
74
- const CORE_VERSION = '1.19.712'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
74
+ const CORE_VERSION = '1.19.714'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
75
75
 
76
76
  // A namespaced logger so a module's log lines are attributable + consistent.
77
77
  // Usage: const log = api.logger('dev-box'); log.info('mounted');
@@ -94,13 +94,16 @@ test('a core with NO config packs at all still boots four roles rather than none
94
94
  });
95
95
 
96
96
  test('a malformed config pack fails LOUD — it never degrades into a silent grant', () => {
97
- // Documents the loader's real behaviour: readJson() returns null only for ENOENT,
98
- // so a syntactically broken pack throws. That is fail-CLOSED (no authority is
99
- // produced), which is the property this proof cares about — but it does contradict
100
- // the loader's own header note ("the loader fails to sane defaults rather than
101
- // throwing"). Reported as a doc/behaviour mismatch in the R102 handoff, not fixed
102
- // here: turning a corrupt authority-adjacent file into a silent fallback is a
103
- // decision, not a typo.
97
+ // Pins the loader's real behaviour: readJson() returns null only for ENOENT, so a
98
+ // syntactically broken pack throws. That is fail-CLOSED (no authority is produced),
99
+ // which is the property this proof cares about.
100
+ //
101
+ // This assertion used to contradict the loader's own header note, which promised
102
+ // "the loader fails to sane defaults rather than throwing" for the malformed case
103
+ // too. The PROSE was the bug, not the throw: config.js now states the absent and
104
+ // malformed cases separately and names this test as the oracle for the second
105
+ // (task 1002876). Turning a corrupt authority-adjacent file into a silent fallback
106
+ // remains a decision, not a typo — it would have to change this assertion first.
104
107
  withScratchDir((dir) => {
105
108
  const broken = path.join(dir, 'broken.json');
106
109
  fs.writeFileSync(broken, '{ not json');