@bongos/core 1.19.223 → 1.19.224

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.223",
6
- "core_contract": "1.19.223",
7
- "source_commit": "f9d11234723ed42c73cf2eff487deabe34464ab5",
5
+ "core_version": "1.19.224",
6
+ "core_contract": "1.19.224",
7
+ "source_commit": "cddd2aa1a006cc4524db36eb319d3813a35c5e57",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-08-18T04:00:41.918Z",
9
+ "built_at": "2026-08-18T04:10:09.443Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 311,
@@ -17,7 +17,7 @@
17
17
  "gate": "passed"
18
18
  },
19
19
  "file_count": 1637,
20
- "tree_sha256": "149332598cd294f2de39adf373feaa298158120232a1dfebbd58e5ee56207689",
20
+ "tree_sha256": "88a20aaa26450db245b3da0aa9685b344fb4c9c2a53618fb5242e79dfe8ec9fb",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/blocker-review/SKILL.md",
@@ -3247,12 +3247,12 @@
3247
3247
  {
3248
3248
  "path": "modules/hall-ui/public/government.html",
3249
3249
  "mode": "0000644",
3250
- "sha256": "91c14637adc59dde39f47e51cfd243ddc1796b0a4108491f46aa64e68eea4a0d"
3250
+ "sha256": "23ceb462eddfb0f66ba3030231ae1394d72eb0b6689a7f127c1ba52554c874bf"
3251
3251
  },
3252
3252
  {
3253
3253
  "path": "modules/hall-ui/public/government.js",
3254
3254
  "mode": "0000644",
3255
- "sha256": "b7504f63fc1086c4367dbd76da7ac96ac4297a23f74456f90c5aebe5e974e034"
3255
+ "sha256": "4778f9a83d63900aca6969a85e7cb67850ffb591a6cbae1fb4be270393741cd1"
3256
3256
  },
3257
3257
  {
3258
3258
  "path": "modules/hall-ui/public/hall-kit.js",
@@ -3342,7 +3342,7 @@
3342
3342
  {
3343
3343
  "path": "modules/hall-ui/public/palette.js",
3344
3344
  "mode": "0000644",
3345
- "sha256": "f01a585277f24dafb12caa39d4b475cd65e61cda50ba918c66941a20916fd8b1"
3345
+ "sha256": "f6b2dc3a7ee452ff7121fbc0245bd554c692f6d8be1dc6285d0fa0eab2d6aed6"
3346
3346
  },
3347
3347
  {
3348
3348
  "path": "modules/hall-ui/public/people.html",
@@ -4297,12 +4297,12 @@
4297
4297
  {
4298
4298
  "path": "package-lock.json",
4299
4299
  "mode": "0000644",
4300
- "sha256": "886be125dcb957387fea954c943d27f852347b7f38662905d59e2146cbb17e0b"
4300
+ "sha256": "c0b226a7cd5289673d7a88f416d410c5855a7094e8cd0bcff12e063b705baf82"
4301
4301
  },
4302
4302
  {
4303
4303
  "path": "package.json",
4304
4304
  "mode": "0000644",
4305
- "sha256": "7e5374d7ead5886cd5b376a95724500196a0e9dc748617a99af436b2863a235c"
4305
+ "sha256": "49b050b03e108d8f8be6aef3ed472dfd699496a1101e7bd286793e17351db3b5"
4306
4306
  },
4307
4307
  {
4308
4308
  "path": "public-docs/index.html",
@@ -5917,7 +5917,7 @@
5917
5917
  {
5918
5918
  "path": "src/module-api.js",
5919
5919
  "mode": "0000644",
5920
- "sha256": "ea7ae52689115222eeafffffbcf8fb1f9fcf13b6e01f90f1153e133928d52dea"
5920
+ "sha256": "ff93015b043ae508d50b88b8de3fe512221a9906479d36e28bc418d837455fd4"
5921
5921
  },
5922
5922
  {
5923
5923
  "path": "src/module-loader/catalog.js",
@@ -7017,7 +7017,7 @@
7017
7017
  {
7018
7018
  "path": "tests/hall_palette.mjs",
7019
7019
  "mode": "0000644",
7020
- "sha256": "6a37c64bce418e7669c43b9225dffd50687e450937285b2a556287a302970a7c"
7020
+ "sha256": "7cb75511b1b09bc2ff542aa7d85849ad800d18624646e40f23483ae86127fa28"
7021
7021
  },
7022
7022
  {
7023
7023
  "path": "tests/hall_signout.mjs",
@@ -4,7 +4,7 @@
4
4
  <meta charset="utf-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
6
  <title>Government — {{worldName}}</title>
7
- <meta name="description" content="Ranks and permissions — create a custom rank, grant everyday permissions, assign it to a builder. Trust-boundary powers stay locked.">
7
+ <meta name="description" content="How this project is governed — the constitution it runs, the Board Room where Full Ideas are ratified, and the ranks &amp; permissions that administer it.">
8
8
  <link rel="icon" href="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><text x='16' y='24' font-size='24' text-anchor='middle' font-family='sans-serif'>⌂</text></svg>">
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com">
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
@@ -26,6 +26,30 @@
26
26
  <p class="gov-sealed" id="gov-sealed" hidden>Archons only.</p>
27
27
 
28
28
  <section id="gov-body" hidden>
29
+ <!-- The three-section IA (R15 of goal 1000069, ADR 0175): the page that
30
+ answers "how is this project governed". Tabs are OTBKit.makeTabs
31
+ (the work.js idiom) with hash deep links — #constitution,
32
+ #board-room, #ranks. -->
33
+ <div id="gov-tabs"></div>
34
+
35
+ <!-- §1 Constitution — what this project runs. The live view (today's
36
+ values + the change history) and the charter library land with
37
+ R18/R19; until then the section frames the model honestly. -->
38
+ <section id="gov-panel-constitution" hidden>
39
+ <h2 class="gov-h">Constitution</h2>
40
+ <p class="gov-grid-note">Three dials decide how this project is governed: <strong>who sits on the board</strong> (a rank — everyone holding it is a member), <strong>what counts as passing</strong> (a first ratifier, or the consent of the sitting), and <strong>how long a vote stays open</strong> (a timed sitting, or no clock at all). They are configuration on the same machinery at every setting — a project starts with the founder ratifying alone and opens up by changing numbers, not code.</p>
41
+ <div id="gov-constitution"></div>
42
+ </section>
43
+
44
+ <!-- §2 Board Room — open items, the clock, your vote (R16/R17). -->
45
+ <section id="gov-panel-board" hidden>
46
+ <h2 class="gov-h">Board Room</h2>
47
+ <p class="gov-grid-note">Where a Full Idea that cleared the completeness grade comes to be ratified — and where the constitution itself is amended. Open items appear here with their clock and a live tally; an objection must carry a reason and name the section it faults, which is why votes are cast here and only mirrored to chat.</p>
48
+ <div id="gov-board"></div>
49
+ </section>
50
+
51
+ <!-- §3 Ranks & Permissions — the administration surface, unchanged. -->
52
+ <section id="gov-panel-ranks" hidden>
29
53
  <div class="gov-layout">
30
54
  <div class="gov-ranks-col">
31
55
  <h2 class="gov-h">Ranks</h2>
@@ -59,6 +83,7 @@
59
83
  <h2 class="gov-h">Machine principals</h2>
60
84
  <p class="gov-grid-note">Capabilities held by a machine identity, never by a person or a rank. Shown for completeness — nothing here can be granted.</p>
61
85
  <div id="gov-principals"></div>
86
+ </section>
62
87
  </section>
63
88
  </main>
64
89
 
@@ -73,6 +98,7 @@
73
98
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
74
99
  <script src="/builders/palette.js" defer></script>
75
100
  <script src="/builders/dom-utils.js?v=2026-06-16-gate"></script>
76
- <script src="/builders/government.js?v=2026-08-16-government"></script>
101
+ <script src="/builders/hall-kit.js"></script>
102
+ <script src="/builders/government.js?v=2026-08-18-government-ia"></script>
77
103
  </body>
78
104
  </html>
@@ -25,9 +25,16 @@
25
25
  // gated server-side on the `government.manage` atom (archon floor). On 401 →
26
26
  // web sign-in.
27
27
  //
28
- // DELIBERATELY NOT IN THE SIDEBAR YET: the nav entry + the server page gate are
29
- // R113 (the next slice) — tests/hall_nav.mjs pins the Government nav group and
30
- // grows with that slice, not this one. Until then the page is reached by URL.
28
+ // SINCE R15 (goal 1000069, ADR 0175) this page carries the three-section IA —
29
+ // Constitution · Board Room · Ranks & Permissions — because Government is the
30
+ // page that answers "how is this project governed", and administration is only
31
+ // the third part of that answer. Tabs are OTBKit.makeTabs with hash deep links
32
+ // (#constitution / #board-room / #ranks). The first two sections are FRAMES
33
+ // until their build-out lands: R18 fills Constitution with the live values +
34
+ // change history, R19 adds the charter library, R16/R17 fill the Board Room
35
+ // with open items and the vote. Until then each frame states what belongs there
36
+ // and shows an honest kit empty state — never a fake or a hardcoded value that
37
+ // could drift from the real config.
31
38
 
32
39
  (() => {
33
40
  'use strict';
@@ -392,6 +399,34 @@
392
399
  });
393
400
  }
394
401
 
402
+ // ---- the three-section IA (R15) -------------------------------------------
403
+
404
+ // Tab order is the spec's — Constitution · Board Room · Ranks & Permissions —
405
+ // but the INITIAL tab is Ranks until R16/R18 fill the other two: landing the
406
+ // Archon on a frame when the working surface is one tab over would be IA
407
+ // winning over usefulness. Flip `initial` to 'constitution' when R18 lands.
408
+ function wireTabs() {
409
+ window.OTBKit.makeTabs({
410
+ mount: document.getElementById('gov-tabs'),
411
+ hash: true,
412
+ initial: 'ranks',
413
+ tabs: [
414
+ { id: 'constitution', label: 'Constitution', panel: 'gov-panel-constitution' },
415
+ { id: 'board-room', label: 'Board Room', panel: 'gov-panel-board' },
416
+ { id: 'ranks', label: 'Ranks & Permissions', panel: 'gov-panel-ranks' },
417
+ ],
418
+ });
419
+ // The frames' empty states — kit-standard, one line, no fake data. What this
420
+ // project actually RUNS is config the server owns; rendering it here before
421
+ // the R18 read exists would mean hardcoding a value that drifts.
422
+ document.getElementById('gov-constitution').innerHTML = window.OTBKit.emptyStateHtml(
423
+ 'The live constitution — what this project runs today, and how it has changed — appears here when the Board Room opens.',
424
+ );
425
+ document.getElementById('gov-board').innerHTML = window.OTBKit.emptyStateHtml(
426
+ 'Nothing is before the board. When a Full Idea clears the completeness grade, its window opens here.',
427
+ );
428
+ }
429
+
395
430
  // ---- init ----------------------------------------------------------------
396
431
 
397
432
  function showSealed() {
@@ -416,8 +451,9 @@
416
451
  const rank = (me && (me.builder || me).rank || '').toLowerCase();
417
452
  if (rank !== 'archon') { showSealed(); return; }
418
453
 
419
- document.getElementById('gov-sub').textContent = 'Ranks, permissions, and who holds them. Ranks below Archon are yours to shape; what the substrate enforces stays locked.';
454
+ document.getElementById('gov-sub').textContent = 'How this project is governed — the constitution it runs, the Board Room, and the ranks & permissions that administer it.';
420
455
  document.getElementById('gov-body').hidden = false;
456
+ wireTabs();
421
457
  wireForms();
422
458
  try {
423
459
  await load();
@@ -13,7 +13,7 @@
13
13
  // 1. Pages — read live from the sidebar shell.js rendered, so rank + module
14
14
  // gating come for free and can never drift from the nav. A hidden nav item
15
15
  // is a hidden destination. (Cosmetic only; the server still gates each page.)
16
- // 2. Sections — the sub-destinations of the three pages that have them. These
16
+ // 2. Sections — the sub-destinations of the four pages that have them. These
17
17
  // cannot be read from another page's DOM, so they are declared below and
18
18
  // held to the real ids by tests/hall_palette.mjs.
19
19
  // 3. Records — id syntax: `1234`, `g 12`, `b 7`, `i 42`.
@@ -28,9 +28,10 @@
28
28
  // element whose visibility decides whether the group is offered — the nav item
29
29
  // itself for pages, the profile chip for Settings (which is not a nav item).
30
30
  // Anchors must stay in step with their source of truth; the test asserts it:
31
- // standing → builders.js STANDING_GROUPS (+ shell.js VIEW_ALIASES)
32
- // work → work.js makeTabs ids
33
- // settings → settings.js RAIL_GROUPS
31
+ // standing → builders.js STANDING_GROUPS (+ shell.js VIEW_ALIASES)
32
+ // work → work.js makeTabs ids
33
+ // government → government.js makeTabs ids (the R15 three-section IA)
34
+ // settings → settings.js RAIL_GROUPS
34
35
  var SECTIONS = [
35
36
  { parent: 'Standing', gate: 'nav-standing', items: [
36
37
  { label: 'Work', href: '/#standing-work' },
@@ -44,6 +45,11 @@
44
45
  { label: 'Backlog', href: '/work#backlog' },
45
46
  { label: 'Completed', href: '/work#completed' },
46
47
  ] },
48
+ { parent: 'Government', gate: 'nav-government', items: [
49
+ { label: 'Constitution', href: '/government#constitution' },
50
+ { label: 'Board Room', href: '/government#board-room' },
51
+ { label: 'Ranks & Permissions', href: '/government#ranks' },
52
+ ] },
47
53
  { parent: 'Settings', gate: 'shell-user', items: [
48
54
  { label: 'Account', href: '/settings#account' },
49
55
  { label: 'Access', href: '/settings#access' },
package/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.19.223",
3
+ "version": "1.19.224",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@bongos/core",
9
- "version": "1.19.223",
9
+ "version": "1.19.224",
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.223",
3
+ "version": "1.19.224",
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
@@ -873,8 +873,10 @@ const { validateOrRespond, LIMITS, parseId, asyncHandler, corsPublicGet, parsePa
873
873
  // landed since 1.19.221 with no explicit bump. run 32096034408. (task 1002620)
874
874
  // 1.19.223 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
875
875
  // landed since 1.19.222 with no explicit bump. run 32097491676. (task 1002620)
876
+ // 1.19.224 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
877
+ // landed since 1.19.223 with no explicit bump. run 32098083321. (task 1002620)
876
878
  // ---------------------------------------------------------------------------
877
- const CORE_VERSION = '1.19.223'; // CI auto-patch carrier (ADR 0161); see changelog above
879
+ const CORE_VERSION = '1.19.224'; // CI auto-patch carrier (ADR 0161); see changelog above
878
880
 
879
881
  // A namespaced logger so a module's log lines are attributable + consistent.
880
882
  // Usage: const log = api.logger('dev-box'); log.info('mounted');
@@ -111,6 +111,16 @@ test('Tasks tab anchors exist in work.js makeTabs', () => {
111
111
  }
112
112
  });
113
113
 
114
+ test('Government section anchors exist in government.js makeTabs (the R15 three-section IA)', () => {
115
+ const ids = [...read('government.js').matchAll(/\{ id: '([a-z-]+)', label: '[^']*', panel:/g)].map((m) => m[1]);
116
+ assert.ok(ids.length === 3, `sanity: found the three government tabs (${ids})`);
117
+ const declared = declaredHrefs((x) => x.startsWith('/government#'));
118
+ assert.ok(declared.length === 3, 'palette declares the three Government sections');
119
+ for (const h of declared) {
120
+ assert.ok(ids.includes(h.split('#')[1]), `${h} must be a real government.js tab id`);
121
+ }
122
+ });
123
+
114
124
  test('Settings panel anchors exist in settings.js RAIL_GROUPS', () => {
115
125
  // RAIL_GROUPS is derived: RAIL_ITEMS.map(i => i.id).concat('extensions').
116
126
  const src = read('settings.js');