@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 +13 -13
- package/docs/module-api-changelog.md +2 -0
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/public-landing/assets/cosmos.css +24 -10
- package/public-landing/projects.html +1 -1
- package/src/module-api.js +1 -1
- package/tests/projects_hub.mjs +21 -0
- package/tests/projects_hub_pre_uat.mjs +1 -1
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.
|
|
6
|
-
"core_contract": "1.19.
|
|
7
|
-
"source_commit": "
|
|
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-
|
|
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": "
|
|
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": "
|
|
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": "
|
|
5500
|
+
"sha256": "a2363ff4df6855d8697c3a70966ba26a1d08de556401c1bcfde19da58ddd135a"
|
|
5501
5501
|
},
|
|
5502
5502
|
{
|
|
5503
5503
|
"path": "package.json",
|
|
5504
5504
|
"mode": "0000644",
|
|
5505
|
-
"sha256": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
9685
|
+
"sha256": "b40e405b673524ad0d33c041730771d1ebf9c95198062ebf307aed5fa1e7d501"
|
|
9686
9686
|
},
|
|
9687
9687
|
{
|
|
9688
9688
|
"path": "tests/projects_hub_pre_uat.mjs",
|
|
9689
9689
|
"mode": "0000644",
|
|
9690
|
-
"sha256": "
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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{
|
|
910
|
-
.tbl .colGo{
|
|
911
|
-
|
|
912
|
-
|
|
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
|
|
1158
|
-
|
|
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.
|
|
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');
|
package/tests/projects_hub.mjs
CHANGED
|
@@ -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;\}/);
|