@bongos/core 1.19.421 → 1.19.422

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.421",
6
- "core_contract": "1.19.421",
7
- "source_commit": "ea6e65fb6df2e2ca09fcb0769b194b3ccb407878",
5
+ "core_version": "1.19.422",
6
+ "core_contract": "1.19.422",
7
+ "source_commit": "a2cae68f503e499826a5d0114194b745b5aeb6f9",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-08-29T17:49:20.389Z",
9
+ "built_at": "2026-08-29T18:07:36.567Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 359,
@@ -17,7 +17,7 @@
17
17
  "gate": "passed"
18
18
  },
19
19
  "file_count": 2101,
20
- "tree_sha256": "9528e100c022a131a7ee286c52e98c8bd5544beec72d013af6aea2a668a8e487",
20
+ "tree_sha256": "091c6d00cc4a890a35034e201a0cd36ffb7a4a4dcecddf363b744ecf48111124",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/blocker-review/SKILL.md",
@@ -1937,7 +1937,7 @@
1937
1937
  {
1938
1938
  "path": "docs/module-api-changelog.md",
1939
1939
  "mode": "0000644",
1940
- "sha256": "54aad52c9bf29c0443c656e9ccc606b886e241bd6f0f1f6ea178d6e0ff4ce46a"
1940
+ "sha256": "68da337fe624beebbb36d6853b7bf812361710787a60d9edfad69f89308d171e"
1941
1941
  },
1942
1942
  {
1943
1943
  "path": "docs/modules-contract.md",
@@ -5497,12 +5497,12 @@
5497
5497
  {
5498
5498
  "path": "package-lock.json",
5499
5499
  "mode": "0000644",
5500
- "sha256": "c735a709aeb39ba8d543a0d1a116c6c4c99398fdee629b719228b21dc351e931"
5500
+ "sha256": "a2363ff4df6855d8697c3a70966ba26a1d08de556401c1bcfde19da58ddd135a"
5501
5501
  },
5502
5502
  {
5503
5503
  "path": "package.json",
5504
5504
  "mode": "0000644",
5505
- "sha256": "82dbf5b00684863b19d987b3aed3abbf668b38f2aa8133081993a3dc6ec37b57"
5505
+ "sha256": "7e93fe6cffacf733f52b48c0c96c6ce55ba74c90f8b34d6464a629071ae7265b"
5506
5506
  },
5507
5507
  {
5508
5508
  "path": "public-docs/index.html",
@@ -5742,7 +5742,7 @@
5742
5742
  {
5743
5743
  "path": "public-landing/assets/cosmos.css",
5744
5744
  "mode": "0000644",
5745
- "sha256": "85797e1405425d852572a796f56fde0928b596af49b04214b576c7e4067fbfcd"
5745
+ "sha256": "282ec017ecdd9ecde6ef3c80df5b7874b392e2b4d97ae29b4222a87c2ed51f3a"
5746
5746
  },
5747
5747
  {
5748
5748
  "path": "public-landing/assets/verro-medallion.png",
@@ -5962,7 +5962,7 @@
5962
5962
  {
5963
5963
  "path": "public-landing/projects.html",
5964
5964
  "mode": "0000644",
5965
- "sha256": "8f74c9a2d3eda52bc91d04c0b1b13fc4752688fdf864bcc0ae8cb9e242c7b8d3"
5965
+ "sha256": "4174cf9209dd56e38944462d62f178bf684a7fb593d3c20b81620f004e64a57b"
5966
5966
  },
5967
5967
  {
5968
5968
  "path": "public-landing/projects.probes.json",
@@ -7632,7 +7632,7 @@
7632
7632
  {
7633
7633
  "path": "src/module-api.js",
7634
7634
  "mode": "0000644",
7635
- "sha256": "1dda5c82cffdacd548fa5f46dace55a9967f8b43b3ddd3eff267ddf9002f0020"
7635
+ "sha256": "4427e50f39df281c8381e932a2ede8b4550c8a6fc4582d74a36b4054dfca2e17"
7636
7636
  },
7637
7637
  {
7638
7638
  "path": "src/module-loader/catalog.js",
@@ -9682,12 +9682,12 @@
9682
9682
  {
9683
9683
  "path": "tests/projects_hub.mjs",
9684
9684
  "mode": "0000644",
9685
- "sha256": "27a10d25acbf114ba0939325bf225399503b54149d3c24f25592c82d7bbe5f85"
9685
+ "sha256": "b40e405b673524ad0d33c041730771d1ebf9c95198062ebf307aed5fa1e7d501"
9686
9686
  },
9687
9687
  {
9688
9688
  "path": "tests/projects_hub_pre_uat.mjs",
9689
9689
  "mode": "0000644",
9690
- "sha256": "ecf1a225759d8d8475bac145727c006fe7341c4b945690ffd47a620e42e8140e"
9690
+ "sha256": "48b314b096c67793dba8f5faeec5b03d043c42a17a38466e072e6bf9c7ae9ec5"
9691
9691
  },
9692
9692
  {
9693
9693
  "path": "tests/promote_goal_id.mjs",
@@ -1279,5 +1279,7 @@ is load-bearing: the script throws rather than guess if it is missing, and
1279
1279
  landed since 1.19.419 with no explicit bump. run 33266034679. (task 1002620)
1280
1280
  1.19.421 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
1281
1281
  landed since 1.19.420 with no explicit bump. run 33266605270. (task 1002620)
1282
+ 1.19.422 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
1283
+ landed since 1.19.421 with no explicit bump. run 33267393283. (task 1002620)
1282
1284
  ---------------------------------------------------------------------------
1283
1285
  ```
package/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.19.421",
3
+ "version": "1.19.422",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@bongos/core",
9
- "version": "1.19.421",
9
+ "version": "1.19.422",
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.421",
3
+ "version": "1.19.422",
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",
@@ -903,17 +903,30 @@ p.sec-p{font-size:var(--fs-lede);font-weight:500;color:var(--ink-soft);line-heig
903
903
  .tbl td.right{text-align:right;}
904
904
  /* Nothing in an action or status cell may wrap: "Manage →" breaking after the
905
905
  space and the chip's recency dropping to a second line both read as a broken
906
- control rather than a tight column. Those two cells claim their width and the
907
- name cell absorbs the slack. */
906
+ control rather than a tight column. */
908
907
  .tbl .btn,.tbl .chip{white-space:nowrap;}
909
- .tbl .colStatus{width:1%;white-space:nowrap;}
910
- .tbl .colGo{width:1%;white-space:nowrap;padding-left:8px;}
911
- .tbl .colName{width:auto;}
912
- .tbl .colType{width:1%;white-space:nowrap;}
908
+ .tbl .colStatus,.tbl .colGo,.tbl .colType{white-space:nowrap;}
909
+ .tbl .colGo{padding-left:8px;}
910
+ /* ── FIXED tracks (task 1003348; the owner: "the columns don't look aligned").
911
+ An auto table sized every column by its content, so the status column hugged
912
+ its widest chip and the headers drifted off their cells. table-layout:fixed
913
+ takes the widths from the header row — one set of tracks for every row, each
914
+ column edge one vertical line — and the name column absorbs the slack. The
915
+ Project header sits over the NAME (past the 10px dot and its 12px gap), and a
916
+ right-aligned column's header is right-aligned too. Below the table's minimum
917
+ the wrap scrolls (#sub-table-body), never the page. ── */
918
+ .tbl{table-layout:fixed;min-width:860px;}
919
+ .tbl th.colName{padding-left:22px;}
920
+ .tbl th.right{text-align:right;}
921
+ .tbl th.colType{width:88px;}
922
+ .tbl th.colBuilders{width:96px;}
923
+ .tbl th.colTags{width:168px;}
924
+ .tbl th.colStatus{width:224px;}
925
+ .tbl th.colGo{width:112px;}
913
926
  /* the declared-type tag (task 1002772) — its own vocabulary: not the relationship
914
927
  .pill, not the liveness .chip. Two different facts never wear the same chrome. */
915
928
  .typeTag{font-family:var(--font-mono);font-size:10.5px;font-weight:500;color:var(--ink-soft);border:1px solid var(--rule);border-radius:999px;padding:2px 9px;white-space:nowrap;}
916
- @media (max-width:780px){.tbl .colTags,.tbl .colType{display:none;}}
929
+ @media (max-width:780px){.tbl .colTags,.tbl .colType{display:none;}.tbl{min-width:600px;}}
917
930
  @media (max-width:900px){
918
931
  .tblMast{gap:16px;padding:22px 0 20px;}
919
932
  .tblTitle{font-size:clamp(28px,7.4vw,34px);}
@@ -1065,7 +1078,6 @@ p.sec-p{font-size:var(--fs-lede);font-weight:500;color:var(--ink-soft);line-heig
1065
1078
  .rowHall{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;margin-left:10px;
1066
1079
  vertical-align:middle;color:var(--accent-deep);border-radius:var(--radius-pill);}
1067
1080
  .rowHall:hover{background:var(--glass);}
1068
- .tbl .colGo{white-space:nowrap;}
1069
1081
  @media (max-width:640px){
1070
1082
  .projCard h3{font-size:26px;padding:0 20px;}
1071
1083
  .projCard .cardTag,.projCard .cardRel,.projCard .cardFaces,.projCard .cardFigs,.projCard .cardMeta,
@@ -1154,8 +1166,10 @@ p.sec-p{font-size:var(--fs-lede);font-weight:500;color:var(--ink-soft);line-heig
1154
1166
  structure, the project's own planet as the row's object, the strip drawn
1155
1167
  as the lifecycle rail, the doors as hairline pills with the accent only on
1156
1168
  the one that acts. One set of FIXED tracks across every row, so the list
1157
- reads as one ledger (task 1003348). Dark only (ADR 0204); every colour a
1158
- token; halos are outlines, never box-shadow (DESIGN.md).
1169
+ reads as one ledger — the same column grammar the every-project table takes
1170
+ in its `.tbl` rules (table-layout:fixed, the header row's widths; task
1171
+ 1003348, both halves pinned together in tests/projects_hub.mjs). Dark only
1172
+ (ADR 0204); every colour a token; halos are outlines, never box-shadow.
1159
1173
  ═══════════════════════════════════════════════════════════════════════ */
1160
1174
  #view-mine .wrap,#view-manage .wrap{max-width:1180px;}
1161
1175
  #view-mine .card,#view-manage .card{background:none;border-radius:0;box-shadow:none;padding:0;margin:0;}
@@ -489,7 +489,7 @@ summary{min-height:24px;padding:3px 0;}
489
489
  <tr>
490
490
  <th class="colName" data-sort="name" aria-sort="ascending"><button type="button" class="thSort">Project</button></th>
491
491
  <th class="colType">Type</th>
492
- <th class="right" data-sort="builders"><button type="button" class="thSort">Builders</button></th>
492
+ <th class="right colBuilders" data-sort="builders"><button type="button" class="thSort">Builders</button></th>
493
493
  <th class="colTags">Runs</th>
494
494
  <th class="right colStatus">Status</th>
495
495
  <th class="colGo"></th>
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.421'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
36
+ const CORE_VERSION = '1.19.422'; // 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');
@@ -1655,3 +1655,24 @@ test('the kit proves the field path: the fixture carries a curated template and
1655
1655
  assert.ok(attrs.some((a) => a.includes('amazonprimea.com') && a.endsWith('data-template bead-wash')), 'the curated template reaches the orb');
1656
1656
  assert.ok(attrs.some((a) => a.includes('demo.cloudbongos.com') && a.endsWith('data-material gold')), 'the material reaches the orb as its own attribute');
1657
1657
  });
1658
+
1659
+ /* ── the table's columns on FIXED tracks (task 1003348; the owner, 2026-08-29: "the
1660
+ columns in that projects table view dont look aligned") ── */
1661
+ test('one column grammar: the table lays every row on one set of fixed tracks (each header over its cells), and the mine list shares the rule', () => {
1662
+ assert.match(COSMOS, /\.tbl\{table-layout:fixed;min-width:860px;\}/, 'the header row\'s widths are the table\'s — no per-row content sizing');
1663
+ // the task's other half — the Your projects list — landed with task 1003345 and is pinned above
1664
+ // ('the mine list lays every row on one set of FIXED tracks'); it is asserted here too so the two
1665
+ // halves of the grammar can never drift apart: fixed planet + doors, ratio tracks with no content minimum
1666
+ assert.match(COSMOS, /#view-mine \.proj\{display:grid;grid-template-columns:72px minmax\(0,1fr\);/, 'the mine row: the planet track is a width');
1667
+ assert.match(COSMOS, /#view-mine \.projBody\{display:grid;grid-template-columns:minmax\(0,1\.1fr\) minmax\(0,1\.3fr\) minmax\(0,1fr\) 232px;/, 'the mine row: name, facts and rail by ratio with no content minimum, the doors a width');
1668
+ assert.match(COSMOS, /the same column grammar the every-project table takes/, 'the mine block names the table as its twin');
1669
+ for (const [col, w] of [['colType', 88], ['colBuilders', 96], ['colTags', 168], ['colStatus', 224], ['colGo', 112]]) {
1670
+ assert.match(COSMOS, new RegExp(`\\.tbl th\\.${col}\\{width:${w}px;\\}`), `${col} is a width, not a 1% hug`);
1671
+ }
1672
+ assert.doesNotMatch(COSMOS, /\.tbl \.col\w+\{width:1%/, 'no column hugs its widest cell any more');
1673
+ assert.match(COSMOS, /\.tbl th\.colName\{padding-left:22px;\}/, 'the Project header sits over the name, past the dot and its gap');
1674
+ assert.match(COSMOS, /\.tbl th\.right\{text-align:right;\}/, 'a right-aligned column\'s header is right-aligned too');
1675
+ assert.match(HUB, /<th class="right colBuilders" data-sort="builders">/, 'the builders header names its column so its width can be set');
1676
+ assert.match(COSMOS, /@media \(max-width:780px\)\{\.tbl \.colTags,\.tbl \.colType\{display:none;\}\.tbl\{min-width:600px;\}\}/, 'a phone scrolls the table inside its wrap');
1677
+ assert.match(COSMOS, /#sub-table-body\{overflow-x:auto;\}/, 'the wrap scrolls, never the page');
1678
+ });
@@ -560,7 +560,7 @@ test('the done panel’s progress region is stable, change-only, and says each s
560
560
 
561
561
  test('the map table sorts from the keyboard and an owned row’s name is a real link', () => {
562
562
  assert.match(HUB, /<th class="colName" data-sort="name" aria-sort="ascending"><button type="button" class="thSort">Project<\/button><\/th>/);
563
- assert.match(HUB, /<th class="right" data-sort="builders"><button type="button" class="thSort">Builders<\/button><\/th>/);
563
+ assert.match(HUB, /<th class="right colBuilders" data-sort="builders"><button type="button" class="thSort">Builders<\/button><\/th>/);
564
564
  assert.match(SCRIPT, /var btn = th\.querySelector\('button'\);\n\s*if \(!btn\) return;\n\s*btn\.addEventListener\('click'/, 'the listener sits on the button, not the th');
565
565
  assert.doesNotMatch(SCRIPT, /th\.style\.cursor/, 'no JS-set cursor on the th');
566
566
  assert.match(COSMOS, /\.tbl th button\{all:unset;cursor:pointer;\}/);