@bongos/core 1.19.469 → 1.19.471
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 +54 -34
- package/clients/bongos-client/index.d.ts +2 -2
- package/docs/adr/0226-one-stale-timer-reporting-degrades-enforcement-refuses.md +121 -0
- package/docs/adr/README.md +1 -0
- package/docs/api/openapi.json +9 -5
- package/docs/copy-inventory.md +40 -43
- package/docs/copy-registry.json +155 -182
- package/docs/module-api-changelog.md +4 -0
- package/modules/hall-ui/public/atlas.css +96 -88
- package/modules/hall-ui/public/atlas.html +43 -20
- package/modules/hall-ui/public/atlas.js +118 -20
- package/modules/hall-ui/public/atlas.states.json +52 -1
- package/modules/hall-ui/public/modules.css +67 -86
- package/modules/hall-ui/public/modules.html +46 -35
- package/modules/hall-ui/public/modules.js +195 -103
- package/modules/hall-ui/public/modules.states.json +48 -1
- package/modules/hall-ui/public/style.css +8 -8
- package/modules/hall-ui/public/task-lib.js +7 -3
- package/modules/lifecycle/db-ship.js +22 -11
- package/modules/sessions/pulse.js +15 -5
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/scripts/gds/fitness.js +6 -0
- package/scripts/gds/pulse.js +48 -24
- package/src/bongos/routes/builders.js +56 -24
- package/src/module-api.js +16 -1
- package/src/stale-timer.js +177 -0
- package/tests/hall_catalog_world.mjs +181 -0
- package/tests/module_api.mjs +1 -0
- package/tests/onboarding_observability.mjs +41 -1
- package/tests/stale_timer.mjs +230 -0
|
@@ -1,93 +1,74 @@
|
|
|
1
|
-
/* modules.css —
|
|
2
|
-
|
|
3
|
-
the
|
|
4
|
-
|
|
1
|
+
/* modules.css — what a MODULE row has that no other oversight row does (task
|
|
2
|
+
1003472, goal 1000081). The panel, the filter bar, the figure band, the group
|
|
3
|
+
heads, the row, the toggle and the foot line are all the shell's or the
|
|
4
|
+
family's (oversight.css); this sheet adds the clamped description, the
|
|
5
|
+
per-row details disclosure and the lines it opens onto.
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
.mod-card
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
7
|
+
ROWS, NOT CARDS — the call task 1003472 asked for. Modules was the one hall
|
|
8
|
+
page already rendering its record's description, so a card looked like the
|
|
9
|
+
case where prose earns a box. Rendered against the real catalog it is the
|
|
10
|
+
opposite: the descriptions run from 120 to 1,200 characters, so the 280px
|
|
11
|
+
auto-fill grid stood a 500px card beside a 120px one, the toggle (the row's
|
|
12
|
+
one control) sat at a different height in every column, and a builder
|
|
13
|
+
scanning for a NAME and a STATE read paragraphs to find either. A row puts
|
|
14
|
+
every title on one x, every switch on another, clamps the prose to two lines
|
|
15
|
+
and opens the rest on request. The card grammar (.mod-grid/.mod-card), the
|
|
16
|
+
boxed .mod-browse field and the .mod-chip alias are gone. */
|
|
17
|
+
|
|
18
|
+
/* The filter bar closes on a hairline, the goals panel's rule: the count and
|
|
19
|
+
the figures under it read as the panel's content, not as more controls. */
|
|
20
|
+
#mod-filters { margin: 0 0 12px; padding: 0 0 6px; border-bottom: var(--line) solid var(--rule-soft); }
|
|
21
|
+
#mod-filters .filters { margin-bottom: 10px; }
|
|
22
|
+
.mod-count { margin: 0 0 14px; font-family: var(--font-mono); font-size: 12.5px; font-variant-numeric: tabular-nums; color: var(--ink-faint); }
|
|
23
|
+
.mod-count:empty { display: none; }
|
|
24
|
+
|
|
25
|
+
/* One group after another: the second head carries the family's air above it,
|
|
26
|
+
and the first row after a head starts flush (oversight.css draws the rule). */
|
|
27
|
+
.mod-panel .ov-group + .ov-group { margin-top: var(--sp-md); }
|
|
28
|
+
.mod-loading { padding: 10px 0; font-size: 13.5px; color: var(--ink-soft); }
|
|
29
|
+
|
|
30
|
+
/* The description is the sub line, clamped to two lines of the measure so
|
|
31
|
+
twenty rows scan as twenty rows. The details disclosure under it opens the
|
|
32
|
+
rest; while it is open the clamp lifts, so the prose is never shown twice. */
|
|
33
|
+
.mod-row__desc {
|
|
34
|
+
display: -webkit-box;
|
|
35
|
+
-webkit-box-orient: vertical;
|
|
36
|
+
-webkit-line-clamp: 2;
|
|
37
|
+
overflow: hidden;
|
|
19
38
|
}
|
|
20
|
-
.mod-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
.mod-card__actions { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: 10px; }
|
|
35
|
-
button.mod-toggle {
|
|
36
|
-
font-family: var(--font-body);
|
|
39
|
+
.mod-row:has(.mod-more[open]) .mod-row__desc { display: block; -webkit-line-clamp: unset; overflow: visible; }
|
|
40
|
+
|
|
41
|
+
/* The disclosure is a text control in a 13px facts line: inline-block with the
|
|
42
|
+
family's padding trick so it clears the 24px floor on both axes. No marker
|
|
43
|
+
— the word says what it does, and the open state says so too. */
|
|
44
|
+
.mod-more { margin: 8px 0 0; }
|
|
45
|
+
.mod-more > summary {
|
|
46
|
+
display: inline-block;
|
|
47
|
+
list-style: none;
|
|
48
|
+
min-height: 24px;
|
|
49
|
+
min-width: 24px;
|
|
50
|
+
padding: 3px 4px;
|
|
51
|
+
margin: -3px -4px;
|
|
52
|
+
line-height: 18px;
|
|
37
53
|
font-size: 12.5px;
|
|
38
|
-
|
|
39
|
-
padding: 5px 16px;
|
|
40
|
-
min-width: 78px;
|
|
41
|
-
border-radius: var(--radius-pill);
|
|
42
|
-
border: var(--line) solid var(--rule);
|
|
43
|
-
background: var(--bg-card);
|
|
44
|
-
color: var(--ink-soft);
|
|
54
|
+
color: var(--accent-ink);
|
|
45
55
|
cursor: pointer;
|
|
46
56
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
background: transparent;
|
|
57
|
-
color: var(--ink-soft);
|
|
58
|
-
cursor: pointer;
|
|
59
|
-
}
|
|
60
|
-
button.mod-submit:disabled { opacity: 0.45; cursor: not-allowed; }
|
|
61
|
-
/* Italic was this sheet's alone — nothing else in the hall sets it, and an
|
|
62
|
-
empty state is a plain statement, not an aside (task 1003307). */
|
|
63
|
-
.mod-empty { color: var(--ink-faint); font-size: 13px; padding: 10px 0; }
|
|
64
|
-
.mod-note { font-size: 12px; color: var(--ink-faint); margin-top: 4px; }
|
|
57
|
+
.mod-more > summary::-webkit-details-marker { display: none; }
|
|
58
|
+
.mod-more > summary:hover { text-decoration: underline; text-underline-offset: 3px; }
|
|
59
|
+
.mod-more > summary::before { content: "details"; }
|
|
60
|
+
.mod-more[open] > summary::before { content: "fewer details"; }
|
|
61
|
+
/* The lines the disclosure opens onto are the family's key/value lines; the
|
|
62
|
+
list of what a module contributes wraps as chips on its own line. */
|
|
63
|
+
.mod-more .ov-lines { margin-top: 8px; }
|
|
64
|
+
.mod-more .ov-lines .ov-lines__v { text-align: left; margin-left: 0; }
|
|
65
|
+
.mod-more .ov-lines .ov-lines__v .fact-chip { margin: 0 6px 4px 0; }
|
|
65
66
|
|
|
66
|
-
/* Catalog browse bar (task 1001772) — one filter over both grids. */
|
|
67
|
-
.mod-browse { margin: 0 0 16px; }
|
|
68
|
-
.mod-browse__label {
|
|
69
|
-
display: block;
|
|
70
|
-
font-size: 12px;
|
|
71
|
-
font-weight: 600;
|
|
72
|
-
color: var(--ink-soft);
|
|
73
|
-
margin-bottom: 6px;
|
|
74
|
-
}
|
|
75
|
-
.mod-browse__input {
|
|
76
|
-
font-family: var(--font-body);
|
|
77
|
-
font-size: 13.5px;
|
|
78
|
-
width: 100%;
|
|
79
|
-
max-width: 420px;
|
|
80
|
-
padding: 8px 12px;
|
|
81
|
-
border-radius: var(--radius-sm);
|
|
82
|
-
border: var(--line) solid var(--rule);
|
|
83
|
-
background: var(--bg-card);
|
|
84
|
-
color: var(--ink);
|
|
85
|
-
}
|
|
86
67
|
/* The marker on an inferred credit — quiet, but hoverable for the reason. */
|
|
87
|
-
.mod-inferred {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}
|
|
68
|
+
.mod-inferred { border: 0; text-decoration: none; cursor: help; color: var(--ink-faint); margin-left: 1px; }
|
|
69
|
+
|
|
70
|
+
/* The right column holds the switch and, on a module built here, the submit
|
|
71
|
+
door under it. The switch is the family's grant toggle: enabled reads in ink,
|
|
72
|
+
disabled in the faint ink, the accent only on hover. A viewer below the floor
|
|
73
|
+
sees the state as a pill, not a dead control. */
|
|
74
|
+
.mod-row__right .btn-ghost { white-space: nowrap; }
|
|
@@ -9,6 +9,10 @@
|
|
|
9
9
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
10
10
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
11
11
|
<link rel="stylesheet" href="/builders/style.css?v=2026-07-02-shell1">
|
|
12
|
+
<!-- task 1003472: the catalog rides the oversight family's row (a titled row
|
|
13
|
+
with facts and one action on the right), so the family sheet loads first
|
|
14
|
+
and modules.css holds only what a module row has that no other row does. -->
|
|
15
|
+
<link rel="stylesheet" href="/builders/oversight.css">
|
|
12
16
|
<link rel="stylesheet" href="/builders/modules.css">
|
|
13
17
|
</head>
|
|
14
18
|
<body data-page="modules" data-page-title="Modules">
|
|
@@ -19,48 +23,53 @@
|
|
|
19
23
|
<div class="app-body">
|
|
20
24
|
<header class="app-topbar" id="app-topbar"></header>
|
|
21
25
|
<div class="app-content">
|
|
22
|
-
<!--
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
page's own name is the least interesting thing on it. -->
|
|
26
|
+
<!-- The board page head (task 1003307): the label voice, because on a
|
|
27
|
+
working surface the page's own name is the least interesting thing on
|
|
28
|
+
it. The sub says what the page IS; the numbers moved into the panel's
|
|
29
|
+
figure band (task 1003472), where a number belongs. -->
|
|
27
30
|
<div class="page-head page-head--board">
|
|
28
31
|
<h1 class="page-head__h">Modules</h1>
|
|
29
|
-
<p class="page-head__sub" id="modules-sub">
|
|
32
|
+
<p class="page-head__sub" id="modules-sub">Everything this instance can run: what the core ships, what this project built, and who keeps each one true as the core advances.</p>
|
|
30
33
|
</div>
|
|
31
34
|
|
|
32
35
|
<main id="hall-main">
|
|
33
|
-
<!--
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
carries its author + origin credit (§2/§3: credit now, money later). -->
|
|
44
|
-
<section class="scroll" id="core-scroll" aria-labelledby="core-h">
|
|
36
|
+
<!-- task 1003472: ONE panel. The search and the state lens sit on a
|
|
37
|
+
hairline at the top, the figure band under them, then two runs of
|
|
38
|
+
rows under group heads — shipped with the core, built by this
|
|
39
|
+
project. Before this the page was a boxed search on the ground over
|
|
40
|
+
three panels, the middle two holding 280px card grids whose height
|
|
41
|
+
varied tenfold with the description, so the one control per record
|
|
42
|
+
(the toggle) landed at a different height on every card. A record
|
|
43
|
+
carrying this many facts is a row (docs/design/hall-direction-v2.md
|
|
44
|
+
section 6; the archetype at docs/design/mocks/hall/goals/v3.html). -->
|
|
45
|
+
<section class="scroll mod-panel" id="core-scroll" aria-labelledby="core-h">
|
|
45
46
|
<h2 id="core-h" class="scroll__h">Module catalog</h2>
|
|
46
|
-
<p class="scroll__lede">
|
|
47
|
-
<div
|
|
48
|
-
|
|
47
|
+
<p class="scroll__lede">The shared repository the core ships and the modules this project built for itself, each credited to its author and the project it came from. Everyone can see the state; the switch is rank-gated.</p>
|
|
48
|
+
<div id="mod-filters"></div>
|
|
49
|
+
<p class="mod-count" id="mod-count" role="status" aria-live="polite"></p>
|
|
50
|
+
<div class="ov-figs" id="mod-figs" aria-label="Catalog at a glance"></div>
|
|
49
51
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
52
|
+
<!-- Shipped with the core — the catalog this instance opts into
|
|
53
|
+
(ADR 0107 §6: accepted modules land default-off). -->
|
|
54
|
+
<div class="ov-group" id="core-group">
|
|
55
|
+
<div class="ov-group__head">
|
|
56
|
+
<span class="ov-group__name">Shipped with the core</span>
|
|
57
|
+
<span class="ov-group__n" id="core-n"></span>
|
|
58
|
+
</div>
|
|
59
|
+
<ul class="ov-rows" id="core-grid"><li class="mod-loading">Loading the catalog…</li></ul>
|
|
60
|
+
</div>
|
|
58
61
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
<
|
|
63
|
-
|
|
62
|
+
<!-- Built by this project — the pool `bongos module submit` draws from
|
|
63
|
+
(ADR 0107 §1/§9). The submit door is on the row, beside the module
|
|
64
|
+
it files, so the third panel this page used to carry is gone. -->
|
|
65
|
+
<div class="ov-group" id="own-group">
|
|
66
|
+
<div class="ov-group__head">
|
|
67
|
+
<span class="ov-group__name">Built by this project</span>
|
|
68
|
+
<span class="ov-group__n" id="own-n"></span>
|
|
69
|
+
</div>
|
|
70
|
+
<ul class="ov-rows" id="own-grid"></ul>
|
|
71
|
+
<p class="ov-foot" id="submit-lede">A module built here can be submitted upstream for review, so it can join the shared catalog with your name and this project credited.</p>
|
|
72
|
+
</div>
|
|
64
73
|
</section>
|
|
65
74
|
</main>
|
|
66
75
|
|
|
@@ -75,6 +84,8 @@
|
|
|
75
84
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
76
85
|
<script src="/builders/palette.js" defer></script>
|
|
77
86
|
<script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
|
|
78
|
-
<script src="/builders/
|
|
87
|
+
<script src="/builders/brand-apply.js"></script>
|
|
88
|
+
<script src="/builders/hall-kit.js"></script>
|
|
89
|
+
<script src="/builders/modules.js?v=2026-09-02-rows"></script>
|
|
79
90
|
</body>
|
|
80
91
|
</html>
|