@bongos/core 1.24.34 → 1.24.36
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 +102 -147
- package/.claude/skills/merge-mode/SKILL.md +1 -1
- package/docs/adr/0228-the-reading-room-owes-a-reference-content-rules-not-a-second-archetype.md +1 -1
- package/docs/copy-inventory.md +136 -192
- package/docs/copy-registry.json +186 -752
- package/docs/module-api-changelog.md +4 -0
- package/docs/onboarding/diagrams/README.md +1 -2
- package/docs/onboarding/primer.md +66 -22
- package/docs/page-inventory.json +7 -101
- package/docs/page-readings.json +947 -1413
- package/docs/recipes/ui-look-before-you-ship.md +2 -2
- package/modules/design-styles/skills/style/SKILL.md +2 -2
- package/modules/hall-ui/public/ai-studio.html +2 -2
- package/modules/hall-ui/public/atlas.html +2 -2
- package/modules/hall-ui/public/blockers.html +2 -2
- package/modules/hall-ui/public/board-room.html +2 -2
- package/modules/hall-ui/public/builders.js +8 -6
- package/modules/hall-ui/public/city.html +2 -2
- package/modules/hall-ui/public/collab.html +2 -2
- package/modules/hall-ui/public/commands.html +2 -2
- package/modules/hall-ui/public/copy-desk.html +2 -2
- package/modules/hall-ui/public/craft-mode.js +1 -1
- package/modules/hall-ui/public/deploy.html +2 -2
- package/modules/hall-ui/public/diagram-viewer.css +1 -1
- package/modules/hall-ui/public/diagram-viewer.js +5 -5
- package/modules/hall-ui/public/fleet.html +2 -2
- package/modules/hall-ui/public/founding-mark.js +3 -2
- package/modules/hall-ui/public/gate.html +2 -2
- package/modules/hall-ui/public/goal-map.html +2 -2
- package/modules/hall-ui/public/goals.html +2 -2
- package/modules/hall-ui/public/government.html +2 -2
- package/modules/hall-ui/public/hall-render.js +62 -1
- package/modules/hall-ui/public/hall-widgets.js +11 -1
- package/modules/hall-ui/public/idea.html +2 -2
- package/modules/hall-ui/public/ideas.html +2 -2
- package/modules/hall-ui/public/index.html +4 -4
- package/modules/hall-ui/public/market-watch-item.html +2 -2
- package/modules/hall-ui/public/market-watch-rules.html +2 -2
- package/modules/hall-ui/public/market-watch.html +2 -2
- package/modules/hall-ui/public/modules.html +2 -2
- package/modules/hall-ui/public/my-agents.html +2 -2
- package/modules/hall-ui/public/palette.js +15 -0
- package/modules/hall-ui/public/primer-live.js +188 -0
- package/modules/hall-ui/public/primer.html +11 -6
- package/modules/hall-ui/public/primer.js +101 -22
- package/modules/hall-ui/public/primer.states.json +54 -7
- package/modules/hall-ui/public/profile.html +2 -2
- package/modules/hall-ui/public/project-settings.html +2 -2
- package/modules/hall-ui/public/roadmap.html +2 -2
- package/modules/hall-ui/public/room.css +23 -121
- package/modules/hall-ui/public/roster.html +2 -2
- package/modules/hall-ui/public/sessions.html +2 -2
- package/modules/hall-ui/public/settings.html +2 -2
- package/modules/hall-ui/public/shell.js +14 -21
- package/modules/hall-ui/public/street.html +2 -2
- package/modules/hall-ui/public/studio.html +2 -2
- package/modules/hall-ui/public/style.css +8 -55
- package/modules/hall-ui/public/task.html +2 -2
- package/modules/hall-ui/public/thinking.html +2 -2
- package/modules/hall-ui/public/tweak-editor.html +2 -2
- package/modules/hall-ui/public/watch.html +2 -2
- package/modules/hall-ui/public/work.html +2 -2
- package/modules/hall-ui/records/founding-mark.md +4 -4
- package/modules/hall-ui/records/reading-rooms.md +2 -0
- package/modules/hall-ui/records/reference-room.md +2 -0
- package/modules/onboarding/founding-mode.js +6 -2
- package/modules/ui-design/kit/render.js +1 -1
- package/modules/ui-design/styles/README.md +2 -2
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +12 -0
- package/scripts/bongos/gen-hall-sitemap.js +15 -2
- package/scripts/hall-preview/server.js +6 -11
- package/src/bongos/serve-internal.js +28 -37
- package/src/module-api.js +1 -1
- package/tests/craft_mode_home.mjs +6 -2
- package/tests/founding_builders.mjs +6 -5
- package/tests/founding_mode.mjs +7 -4
- package/tests/hall_board_world.mjs +44 -1
- package/tests/hall_fullscreen.mjs +1 -1
- package/tests/hall_nav.mjs +24 -7
- package/tests/hall_page_gate_map.mjs +14 -5
- package/tests/hall_reading_room.mjs +426 -0
- package/tests/hall_reading_world.mjs +36 -30
- package/tests/hall_sitemap.mjs +25 -0
- package/tests/nav_permission_atoms.mjs +3 -2
- package/tests/rank_tier_single_source.mjs +0 -1
- package/tests/ui_design_kit.mjs +1 -1
- package/modules/hall-ui/public/diagrams.css +0 -45
- package/modules/hall-ui/public/diagrams.html +0 -106
- package/modules/hall-ui/public/diagrams.states.json +0 -28
- package/modules/hall-ui/public/drachmae.html +0 -110
- package/modules/hall-ui/public/drachmae.js +0 -431
- package/modules/hall-ui/public/drachmae.states.json +0 -58
- package/modules/hall-ui/public/ranks-founding.states.json +0 -12
- package/modules/hall-ui/public/ranks.html +0 -83
- package/modules/hall-ui/public/ranks.js +0 -229
- package/modules/hall-ui/public/ranks.states.json +0 -15
- package/tests/hall_reference_world.mjs +0 -352
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/* room.css — the READING-ROOM archetype: a long document read end to end
|
|
2
|
-
(task 1003306, goal 1000081).
|
|
3
|
-
|
|
4
|
-
(task 1003473
|
|
2
|
+
(task 1003306, goal 1000081). The primer (primer.html) is the hall's one
|
|
3
|
+
reading room since task 1005046, which folded the diagrams index and the
|
|
4
|
+
Economy reference (drachmae, task 1003473) into it as chapters; the
|
|
5
|
+
reference rules that page switched on (`room--reference`) went with it.
|
|
5
6
|
|
|
6
7
|
THE ARCHETYPE is v3 "the glass hall", the owner's pick from the composition
|
|
7
8
|
round — docs/design/hall-direction-v2.md §6, mock
|
|
@@ -13,13 +14,11 @@
|
|
|
13
14
|
topbar, the document is content and belongs on a panel the ground can never
|
|
14
15
|
reach the ink on.
|
|
15
16
|
|
|
16
|
-
WHY IT IS ITS OWN SHEET rather than more of primer.css: the
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
Modules inherit this archetype next. Page-specific shapes stay page-local:
|
|
22
|
-
primer.css keeps the acknowledge gate, diagrams.css keeps the legend strip.
|
|
17
|
+
WHY IT IS ITS OWN SHEET rather than more of primer.css: the archetype is the
|
|
18
|
+
room, not the document — the Modules page borrows its article card too — and
|
|
19
|
+
the framed figure is one object wherever it appears (diagram-viewer.js upgrades
|
|
20
|
+
`figure.primer-figure img`).
|
|
21
|
+
Page-specific shapes stay page-local: primer.css keeps the acknowledge gate.
|
|
23
22
|
|
|
24
23
|
WHY THE CLASSES ARE STILL `primer-`: two live surfaces spell them —
|
|
25
24
|
diagram-viewer.js's upgrade selector and tests/hall_audit.mjs's pinned
|
|
@@ -352,20 +351,20 @@ body.room .page-head { max-width: var(--room-max); }
|
|
|
352
351
|
.primer-article tr:last-child td { border-bottom: 0; }
|
|
353
352
|
|
|
354
353
|
/* ---- 5. the framed figure ------------------------------------------------
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
.primer-figure
|
|
354
|
+
diagram-viewer.js upgrades `figure.primer-figure img` into a pannable
|
|
355
|
+
canvas, and until (or unless) the SVG fetch succeeds the PNG stays in this
|
|
356
|
+
frame. Glass rather than a card, so a figure inside the article reads as
|
|
357
|
+
inset. (The diagrams index's `figure.diagram` shared this rule until task
|
|
358
|
+
1005046 folded that page into the primer's chapters.) */
|
|
359
|
+
.primer-figure {
|
|
361
360
|
margin: var(--sp-xl) 0;
|
|
362
361
|
padding: var(--sp-lg) var(--sp-md);
|
|
363
362
|
background: var(--glass);
|
|
364
363
|
border: var(--line) solid var(--glass-edge);
|
|
365
364
|
border-radius: var(--radius);
|
|
366
365
|
}
|
|
367
|
-
.primer-figure:last-child
|
|
368
|
-
.primer-figure img
|
|
366
|
+
.primer-figure:last-child { margin-bottom: 0; }
|
|
367
|
+
.primer-figure img {
|
|
369
368
|
display: block;
|
|
370
369
|
width: 100%;
|
|
371
370
|
max-width: 100%;
|
|
@@ -375,21 +374,21 @@ body.room .page-head { max-width: var(--room-max); }
|
|
|
375
374
|
before the SVG arrives and whenever it cannot. Dark turns it the way
|
|
376
375
|
diagram-viewer.css turns the canvas (task 1003639), so a dark reader never
|
|
377
376
|
gets a white flash; the PNG keeps its baked ground, which inverts to black. */
|
|
378
|
-
html[data-theme="dark"] .primer-figure img
|
|
377
|
+
html[data-theme="dark"] .primer-figure img { filter: invert(1) hue-rotate(180deg); }
|
|
379
378
|
@media (prefers-color-scheme: dark) {
|
|
380
|
-
html:not([data-theme]) .primer-figure img
|
|
379
|
+
html:not([data-theme]) .primer-figure img { filter: invert(1) hue-rotate(180deg); }
|
|
381
380
|
}
|
|
382
381
|
/* diagram-viewer.js inserts its canvas INSIDE the figure and hides the <img>,
|
|
383
382
|
so the frame has to belong to exactly one of them or the diagram ends up in
|
|
384
383
|
two nested boxes. The figure keeps it; the canvas gives its own up. (Its
|
|
385
384
|
fullscreen state re-declares both, and diagram-viewer.css loads after this
|
|
386
|
-
sheet
|
|
387
|
-
.primer-figure .dgv
|
|
385
|
+
sheet, so the overlay still paints.) */
|
|
386
|
+
.primer-figure .dgv {
|
|
388
387
|
background: none;
|
|
389
388
|
border: 0;
|
|
390
389
|
border-radius: var(--radius-sm);
|
|
391
390
|
}
|
|
392
|
-
.primer-figure figcaption
|
|
391
|
+
.primer-figure figcaption {
|
|
393
392
|
margin-top: 14px;
|
|
394
393
|
max-width: var(--measure);
|
|
395
394
|
font-size: 13.5px;
|
|
@@ -452,7 +451,7 @@ html[data-theme="dark"] .primer-figure img, html[data-theme="dark"] figure.diagr
|
|
|
452
451
|
.primer-toc__inner { display: none; margin-top: 8px; }
|
|
453
452
|
.primer-toc.is-open .primer-toc__inner { display: block; }
|
|
454
453
|
/* A markdown table's column count is fixed by its source, so its min-content
|
|
455
|
-
width outruns a phone (measured: 79px of page overflow on /drachmae). Give
|
|
454
|
+
width outruns a phone (measured: 79px of page overflow on the old /drachmae page). Give
|
|
456
455
|
the table its own horizontal scroller instead of letting it drag the page
|
|
457
456
|
sideways. `display: block` is what makes the table box a scrollport; the
|
|
458
457
|
rows still lay out through the anonymous table box inside it. */
|
|
@@ -463,100 +462,3 @@ html[data-theme="dark"] .primer-figure img, html[data-theme="dark"] figure.diagr
|
|
|
463
462
|
overflow-x: auto;
|
|
464
463
|
}
|
|
465
464
|
}
|
|
466
|
-
|
|
467
|
-
/* ---- 8. the reference ----------------------------------------------------
|
|
468
|
-
The same room, a second document (task 1003473). The primer is read once,
|
|
469
|
-
start to finish, with a gate at the end; drachmae is a REFERENCE that people
|
|
470
|
-
open to answer one question about how they get paid. Nothing about the
|
|
471
|
-
composition changes — the head, the glass contents beside the card, the
|
|
472
|
-
measure — because the room is right for both. What changes is what the room
|
|
473
|
-
does for a reader who is looking rather than reading, and `room--reference`
|
|
474
|
-
on the body switches those content rules on:
|
|
475
|
-
* the counters are off (no numerals in the contents, no "01" over a
|
|
476
|
-
heading), because a reference has no order to keep;
|
|
477
|
-
* the contents nest h3s under their h2s, since the sub-questions are what
|
|
478
|
-
a reader scans for, and the spy lights the entry AND its part (.is-trail);
|
|
479
|
-
* every heading carries its own link (.room-anchor), always visible in the
|
|
480
|
-
faint ink — an address is part of the content, not a hover secret — and
|
|
481
|
-
in the accent when it is the one the reader arrived at (:target);
|
|
482
|
-
* the phone toggle's middle names the part the reader is in.
|
|
483
|
-
There is no progress hairline on a reference: the page omits the markup and
|
|
484
|
-
§1 above stays for the primer, whose gate is fed by it. Why a modifier and
|
|
485
|
-
not a second archetype: the third document that is scanned (the ranks, the
|
|
486
|
-
API docs) takes these four rules by one body class, and a sheet of its own
|
|
487
|
-
would be room.css again with the counter deleted. */
|
|
488
|
-
.room--reference .primer-article h2::before,
|
|
489
|
-
.room--reference .primer-toc__list a::before { content: none; }
|
|
490
|
-
.room--reference .primer-toc__list a.is-trail { color: var(--ink); }
|
|
491
|
-
.room--reference .primer-toc__sub {
|
|
492
|
-
list-style: none;
|
|
493
|
-
margin: 0 0 6px var(--sp-xs);
|
|
494
|
-
padding: 0 0 0 10px;
|
|
495
|
-
border-left: var(--line) solid var(--rule-soft);
|
|
496
|
-
}
|
|
497
|
-
.room--reference .primer-toc__sub a {
|
|
498
|
-
min-height: 30px;
|
|
499
|
-
padding: 6px var(--sp-xs);
|
|
500
|
-
font-size: 13px;
|
|
501
|
-
color: var(--ink-faint);
|
|
502
|
-
}
|
|
503
|
-
.room--reference .primer-toc__sub a:hover,
|
|
504
|
-
.room--reference .primer-toc__sub a.is-active { color: var(--ink); }
|
|
505
|
-
|
|
506
|
-
/* the toggle's middle: the part the reader is in, in the faint ink, cut with an
|
|
507
|
-
ellipsis before it can push the chevron off the row. Empty until the spy has
|
|
508
|
-
something to say, and then it takes no room at all. */
|
|
509
|
-
.room--reference .primer-toc__toggle-label { flex: none; }
|
|
510
|
-
.room--reference .primer-toc__current {
|
|
511
|
-
flex: 1 1 auto;
|
|
512
|
-
min-width: 0;
|
|
513
|
-
overflow: hidden;
|
|
514
|
-
text-overflow: ellipsis;
|
|
515
|
-
white-space: nowrap;
|
|
516
|
-
text-align: right;
|
|
517
|
-
font-size: 13px;
|
|
518
|
-
color: var(--ink-faint);
|
|
519
|
-
}
|
|
520
|
-
.room--reference .primer-toc__current:empty { display: none; }
|
|
521
|
-
|
|
522
|
-
/* the address. Outranks the prose-link rule (.primer-article a): no underline,
|
|
523
|
-
no padding, a 24px box of its own so the floor holds without the padding
|
|
524
|
-
trick, and the glass under it on hover so the target reads as one. */
|
|
525
|
-
.room--reference .primer-article .room-anchor {
|
|
526
|
-
display: inline-flex;
|
|
527
|
-
align-items: center;
|
|
528
|
-
justify-content: center;
|
|
529
|
-
width: 24px;
|
|
530
|
-
height: 24px;
|
|
531
|
-
margin-left: 6px;
|
|
532
|
-
padding: 0;
|
|
533
|
-
vertical-align: middle;
|
|
534
|
-
color: var(--ink-faint);
|
|
535
|
-
text-decoration: none;
|
|
536
|
-
border-radius: var(--radius-sm);
|
|
537
|
-
transition: color 200ms cubic-bezier(.2, .7, .3, 1), background 200ms cubic-bezier(.2, .7, .3, 1);
|
|
538
|
-
}
|
|
539
|
-
.room--reference .primer-article .room-anchor:hover { color: var(--accent-ink); background: var(--glass); }
|
|
540
|
-
/* the one the reader arrived at. :target alone misses a deep link into a
|
|
541
|
-
document that renders after load, so drachmae.js marks the landing itself. */
|
|
542
|
-
.room--reference .primer-article :is(:target, .is-target) > .room-anchor { color: var(--accent-ink); }
|
|
543
|
-
|
|
544
|
-
/* On a phone the collapsed outline rides under the top bar, so the reader can
|
|
545
|
-
open it from anywhere in the document and read which part they are in. The
|
|
546
|
-
toggle is glass, the same material as the bar it sits under, and below the
|
|
547
|
-
bar in the z ladder for the same reason the progress hairline is. */
|
|
548
|
-
@media (max-width: 760px) {
|
|
549
|
-
.room--reference .primer-toc {
|
|
550
|
-
position: sticky;
|
|
551
|
-
top: calc(var(--topbar-h) + 8px);
|
|
552
|
-
z-index: var(--z-progress);
|
|
553
|
-
}
|
|
554
|
-
/* Riding over the article, the toggle and the open list take the card's
|
|
555
|
-
ground at 92% rather than the bare glass: light's glass has no blur, so
|
|
556
|
-
over scrolling prose the bare tint was the prose showing through the pill
|
|
557
|
-
(measured on the deep-link render at 390). The edge stays the glass edge. */
|
|
558
|
-
.room--reference .primer-toc__toggle,
|
|
559
|
-
.room--reference .primer-toc__inner { background: color-mix(in srgb, var(--bg-card) 92%, transparent); }
|
|
560
|
-
/* a landed heading has to clear the sticky toggle as well as the top bar */
|
|
561
|
-
.room--reference .primer-article :is(h2, h3, h4) { scroll-margin-top: calc(var(--topbar-h) + 72px); }
|
|
562
|
-
}
|
|
@@ -55,8 +55,8 @@
|
|
|
55
55
|
chrome exists before the page script runs. -->
|
|
56
56
|
<script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
|
|
57
57
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
58
|
-
<script src="/builders/craft-mode.js?v=2026-
|
|
59
|
-
<script src="/builders/shell.js?v=2026-11-04-
|
|
58
|
+
<script src="/builders/craft-mode.js?v=2026-11-04-reading-room"></script>
|
|
59
|
+
<script src="/builders/shell.js?v=2026-11-04-reading-room"></script>
|
|
60
60
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
61
61
|
<script src="/builders/palette.js" defer></script>
|
|
62
62
|
<!-- the branding pack's currency label, loaded BEFORE roster.js. -->
|
|
@@ -113,8 +113,8 @@
|
|
|
113
113
|
chrome exists before the page script runs. -->
|
|
114
114
|
<script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
|
|
115
115
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
116
|
-
<script src="/builders/craft-mode.js?v=2026-
|
|
117
|
-
<script src="/builders/shell.js?v=2026-11-04-
|
|
116
|
+
<script src="/builders/craft-mode.js?v=2026-11-04-reading-room"></script>
|
|
117
|
+
<script src="/builders/shell.js?v=2026-11-04-reading-room"></script>
|
|
118
118
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
119
119
|
<script src="/builders/palette.js" defer></script>
|
|
120
120
|
<script src="/builders/task-detail.js?v=2026-07-03-taskdetail"></script>
|
|
@@ -393,8 +393,8 @@
|
|
|
393
393
|
chrome exists before the page scripts run. -->
|
|
394
394
|
<script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
|
|
395
395
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
396
|
-
<script src="/builders/craft-mode.js?v=2026-
|
|
397
|
-
<script src="/builders/shell.js?v=2026-11-04-
|
|
396
|
+
<script src="/builders/craft-mode.js?v=2026-11-04-reading-room"></script>
|
|
397
|
+
<script src="/builders/shell.js?v=2026-11-04-reading-room"></script>
|
|
398
398
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
399
399
|
<script src="/builders/palette.js" defer></script>
|
|
400
400
|
<!-- shared component kit (window.OTBKit) — section rail (task 2166). -->
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// (Vanilla hall-ui redesign, task 1723; scope: docs/design/vanilla-hall-ui-redesign-scope.md.)
|
|
3
3
|
//
|
|
4
4
|
// Dependency-free by design: it must run on pages that don't load dom-utils.js
|
|
5
|
-
// (primer,
|
|
5
|
+
// (primer, not-ready, atlas), so it reads window.__BRANDING__ /
|
|
6
6
|
// window.__MODULES__ directly and defines its own tiny helpers. Loaded with
|
|
7
7
|
// `defer` BEFORE the page's own script so the chrome it renders (#logout-link,
|
|
8
8
|
// #welcome-line, #topbar-title, …) exists when page scripts wire events.
|
|
@@ -112,10 +112,7 @@
|
|
|
112
112
|
roster: '<circle cx="6.5" cy="6.3" r="2.3"/><path d="M2.5 15c.4-2.3 1.9-3.7 4-3.7s3.6 1.4 4 3.7"/><circle cx="12.5" cy="5.8" r="2"/><path d="M11.4 10.5c.4-.1.7-.2 1.1-.2 1.9 0 3.3 1.3 3.7 3.5"/>',
|
|
113
113
|
// Docs
|
|
114
114
|
primer: '<path d="M9 5C7.5 3.9 5.5 3.5 2.5 3.5v10c3 0 5 .4 6.5 1.5 1.5-1.1 3.5-1.5 6.5-1.5v-10c-3 0-5 .4-6.5 1.5Z"/><path d="M9 5v10"/>',
|
|
115
|
-
ranks: '<path d="M4 7.5 9 4l5 3.5M4 11 9 7.5l5 3.5M4 14.5 9 11l5 3.5"/>',
|
|
116
|
-
economy: '<circle cx="9" cy="9" r="6.5"/><path d="M11 6.7c-.4-.6-1.1-.9-2-.9-1.2 0-2 .6-2 1.5 0 2 4 1 4 3.1 0 .9-.9 1.5-2.1 1.5-.9 0-1.7-.4-2.1-1M9 4.7v1.1M9 12.2v1.1"/>',
|
|
117
115
|
commands: '<rect x="2.5" y="3.5" width="13" height="11" rx="1.5"/><path d="M5.5 7.3 7.7 9l-2.2 1.7M9.5 11.2h3"/>',
|
|
118
|
-
diagrams: '<rect x="2.5" y="2.5" width="5.5" height="4" rx="1"/><rect x="10" y="11.5" width="5.5" height="4" rx="1"/><path d="M5.2 6.5v4a1.5 1.5 0 0 0 1.5 1.5H10"/>',
|
|
119
116
|
atlas: '<circle cx="9" cy="9" r="6.5"/><path d="M2.5 9h13M9 2.5c1.7 1.8 2.6 4 2.6 6.5s-.9 4.7-2.6 6.5c-1.7-1.8-2.6-4-2.6-6.5S7.3 4.3 9 2.5Z"/>',
|
|
120
117
|
modules: '<rect x="2.5" y="2.5" width="5.5" height="5.5" rx="1"/><rect x="10" y="2.5" width="5.5" height="5.5" rx="1"/><rect x="2.5" y="10" width="5.5" height="5.5" rx="1"/><path d="M12.75 10.5v4.5M10.5 12.75h4.5"/>',
|
|
121
118
|
apidocs: '<path d="M6.5 3C5 3 4.5 3.7 4.5 5v2c0 1-.6 2-1.5 2 .9 0 1.5 1 1.5 2v2c0 1.3.5 2 2 2M11.5 3c1.5 0 2 .7 2 2v2c0 1 .6 2 1.5 2-.9 0-1.5 1-1.5 2v2c0 1.3-.5 2-2 2"/>',
|
|
@@ -212,7 +209,7 @@
|
|
|
212
209
|
// owner. Lives with the project's own state (Roadmap/Goals/Tasks), not You
|
|
213
210
|
// or Community, because its subject is the project, not a person. Its one
|
|
214
211
|
// data source (GET /blockers) is deliberately public, like Roadmap's — but
|
|
215
|
-
// the NAV FLAG stays 'signed' on the roster
|
|
212
|
+
// the NAV FLAG stays 'signed' on the roster precedent: an ungated
|
|
216
213
|
// page can still gate cosmetically wider in the sidebar than the API it
|
|
217
214
|
// fronts, showing the link to signed-in builders while a stranger who
|
|
218
215
|
// already has the URL can still open it.
|
|
@@ -333,25 +330,21 @@
|
|
|
333
330
|
// /people redirects to /roster.
|
|
334
331
|
] },
|
|
335
332
|
{ group: 'Docs', gate: 'signed', items: [
|
|
336
|
-
// task 1002710: primer
|
|
337
|
-
// mirror the old thetes+ page gate. That gate is gone — the
|
|
338
|
-
//
|
|
339
|
-
// down to 'signed'. Leaving them at 'member' would have ungated the pages
|
|
333
|
+
// task 1002710: primer (and the old diagrams page) were gate:'member' (rank
|
|
334
|
+
// !== xenos) to mirror the old thetes+ page gate. That gate is gone — the
|
|
335
|
+
// reading room is for the first-session newcomer above all — so the link
|
|
336
|
+
// follows it down to 'signed'. Leaving them at 'member' would have ungated the pages
|
|
340
337
|
// while still hiding them from the only readers the change was for.
|
|
341
338
|
{ id: 'primer', label: 'Primer', icon: 'primer', href: '/primer', gate: 'signed' },
|
|
342
|
-
|
|
343
|
-
//
|
|
344
|
-
//
|
|
345
|
-
//
|
|
346
|
-
//
|
|
347
|
-
//
|
|
348
|
-
// stays right whatever `branding.currency.label` is set to. Page is public
|
|
349
|
-
// like /ranks — 'signed' is the same cosmetic "show it once you're in".
|
|
350
|
-
{ id: 'economy', label: 'Economy', icon: 'economy', href: '/drachmae', gate: 'signed' },
|
|
339
|
+
// task 1005046 (owner decision 2026-11-03, idea 1001311): ONE reading room.
|
|
340
|
+
// Ranks, Economy and Diagrams were three more pages explaining what the
|
|
341
|
+
// Primer already explained, so the copies drifted. They are Primer
|
|
342
|
+
// chapters now, each with its diagram beside it; /ranks, /drachmae and
|
|
343
|
+
// /diagrams 302 to the matching chapter (serve-internal.js), and the
|
|
344
|
+
// personal "Where you stand" card moved to Accomplishments.
|
|
351
345
|
// task 1004473: every skill and every bongos CLI verb, read live. Its page and
|
|
352
346
|
// both reads behind it are sign-in gated, so 'signed' is the real floor here.
|
|
353
347
|
{ id: 'commands', label: 'Commands', icon: 'commands', href: '/commands', gate: 'signed' },
|
|
354
|
-
{ id: 'diagrams', label: 'Diagrams', icon: 'diagrams', href: '/diagrams', gate: 'signed' },
|
|
355
348
|
{ id: 'atlas', label: 'Repo Atlas', icon: 'atlas', href: '/atlas', gate: 'member' },
|
|
356
349
|
{ id: 'modules', label: 'Modules', icon: 'modules', href: '/modules', gate: 'member' },
|
|
357
350
|
// The rendered OpenAPI reference lives on the APEX (/docs), not this builders
|
|
@@ -396,8 +389,8 @@
|
|
|
396
389
|
// tab's nine data routes (route-rank-check.js); the page SHELL itself is
|
|
397
390
|
// metic+, because R16 made /government three rooms and only this one is
|
|
398
391
|
// the archon surface.
|
|
399
|
-
{ id: 'government', label: 'Permissions', icon: 'permissions', href: '/government', gate: 'archon', position: true } // NOT 'Ranks':
|
|
400
|
-
// reading 'Ranks' is the confusion this rename exists to remove. This tab
|
|
392
|
+
{ id: 'government', label: 'Permissions', icon: 'permissions', href: '/government', gate: 'archon', position: true } // NOT 'Ranks': the ladder is explained in the Primer, and a nav item
|
|
393
|
+
// reading 'Ranks' beside it is the confusion this rename exists to remove. This tab
|
|
401
394
|
// is where a rank's permissions are granted, so it says what it does.,
|
|
402
395
|
] },
|
|
403
396
|
];
|
|
@@ -230,8 +230,8 @@
|
|
|
230
230
|
|
|
231
231
|
<script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
|
|
232
232
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
233
|
-
<script src="/builders/craft-mode.js?v=2026-
|
|
234
|
-
<script src="/builders/shell.js?v=2026-11-04-
|
|
233
|
+
<script src="/builders/craft-mode.js?v=2026-11-04-reading-room"></script>
|
|
234
|
+
<script src="/builders/shell.js?v=2026-11-04-reading-room"></script>
|
|
235
235
|
<script src="/builders/palette.js" defer></script>
|
|
236
236
|
<script src="/builders/gov-living.js?v=2026-10-09-positions1"></script>
|
|
237
237
|
<script src="/builders/gov-feeds.js?v=2026-10-09-living3"></script>
|
|
@@ -224,8 +224,8 @@
|
|
|
224
224
|
|
|
225
225
|
<script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
|
|
226
226
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
227
|
-
<script src="/builders/craft-mode.js?v=2026-
|
|
228
|
-
<script src="/builders/shell.js?v=2026-11-04-
|
|
227
|
+
<script src="/builders/craft-mode.js?v=2026-11-04-reading-room"></script>
|
|
228
|
+
<script src="/builders/shell.js?v=2026-11-04-reading-room"></script>
|
|
229
229
|
<script src="/builders/palette.js" defer></script>
|
|
230
230
|
<!-- The kit, for its ONE renderer: the full-size ship-time visual figure
|
|
231
231
|
(task 1003829), which the older reviews still show. -->
|
|
@@ -747,9 +747,6 @@ html[data-theme="dark"] .brand-mark__mark .mp { fill: #e2e1e4; }
|
|
|
747
747
|
}
|
|
748
748
|
.lb-founding { display: block; margin-top: 4px; }
|
|
749
749
|
.profile__founding { margin: 2px 0 0; font-size: 13px; color: var(--ink-soft); }
|
|
750
|
-
/* The prose-link 24px floor: the target grows by padding, handed back by margin. */
|
|
751
|
-
.founding-name { display: inline-block; padding: 3px 6px; margin: -3px -6px; }
|
|
752
|
-
.founding-line { display: block; font-size: 12px; color: var(--ink-faint); }
|
|
753
750
|
.founding-wall { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 14px; }
|
|
754
751
|
.founding-wall__item { display: grid; justify-items: center; gap: 4px; text-align: center; padding: 12px 8px; }
|
|
755
752
|
.founding-wall__seed { width: 14px; height: 14px; margin-bottom: 4px; box-shadow: 0 0 0 4px color-mix(in srgb, var(--accent) 18%, transparent); }
|
|
@@ -2880,7 +2877,7 @@ main [id] { scroll-margin-top: calc(var(--topbar-h) + 16px); }
|
|
|
2880
2877
|
layout, so that happened on every hall page at phone width with nothing even
|
|
2881
2878
|
visible (measured: 62px of phantom scroll at 390w). Below the breakpoint where
|
|
2882
2879
|
.profile already reflows, drop it: it is a hover popover, and a touch on the
|
|
2883
|
-
badge follows .rank-badge-stretch to
|
|
2880
|
+
badge follows .rank-badge-stretch to the Primer's rank ladder — the full ladder the tip's own
|
|
2884
2881
|
footer points at. The badge keeps its aria-label, so the rank is still named. */
|
|
2885
2882
|
@media (max-width: 640px) {
|
|
2886
2883
|
.rank-tip { display: none; }
|
|
@@ -3135,7 +3132,7 @@ main [id] { scroll-margin-top: calc(var(--topbar-h) + 16px); }
|
|
|
3135
3132
|
/* The FIGURE a plot sits in — a card one tonal step down from the panel (glass
|
|
3136
3133
|
on the card, like settings' quote), its caption, its live readout, its
|
|
3137
3134
|
<details> table twin and its foot. Moved here from profile.css in task
|
|
3138
|
-
1003446, when
|
|
3135
|
+
1003446, when the Economy page's treasury (the Primer's since task 1005046) became the second consumer; the `.pchart`
|
|
3139
3136
|
names are unchanged because they are spelled into profile.js and drachmae.js.
|
|
3140
3137
|
The kit does NOT emit these — a page composes its own figure and the kit
|
|
3141
3138
|
draws the series inside it. */
|
|
@@ -3923,17 +3920,12 @@ html[data-door="out"] #hall-main { width: 100%; }
|
|
|
3923
3920
|
.task__body { grid-column: 1 / -1; }
|
|
3924
3921
|
}
|
|
3925
3922
|
|
|
3926
|
-
/* ----------
|
|
3927
|
-
|
|
3928
|
-
|
|
3929
|
-
|
|
3930
|
-
|
|
3931
|
-
|
|
3932
|
-
The rank card is `.scroll--quiet`'s level expressed as a list row: a tone one
|
|
3933
|
-
step further from the ground than the panel it sits in, with the edge
|
|
3934
|
-
reserved as transparent so a modifier can draw one without the base having
|
|
3935
|
-
to. The compat aliases are retired here; the badges above still spend them,
|
|
3936
|
-
because they render on every page in the hall and belong to 1003308. */
|
|
3923
|
+
/* ---------- where you stand (Accomplishments) ----------
|
|
3924
|
+
The personal half of the retired Ranks page (task 1005046): the viewer's rank,
|
|
3925
|
+
the one above it and how they reach it, as a card in Accomplishments' Progress
|
|
3926
|
+
section. The ladder itself is the Primer's rank-ladder chapter, so the ladder
|
|
3927
|
+
cards that used to live here went with the page. Re-skinned into the chrome
|
|
3928
|
+
world by task 1003306: real token names, no compat aliases. */
|
|
3937
3929
|
|
|
3938
3930
|
.ranks-standing {
|
|
3939
3931
|
display: grid;
|
|
@@ -3947,45 +3939,6 @@ html[data-door="out"] #hall-main { width: 100%; }
|
|
|
3947
3939
|
.ranks-standing__next { grid-column: 1 / -1; font-size: 13px; color: var(--ink-faint); }
|
|
3948
3940
|
@media (max-width: 540px) { .ranks-standing { grid-template-columns: minmax(0, 1fr); } }
|
|
3949
3941
|
|
|
3950
|
-
.ranks-ladder { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
|
|
3951
|
-
.rank-card {
|
|
3952
|
-
background: var(--glass);
|
|
3953
|
-
border: var(--line) solid transparent;
|
|
3954
|
-
border-radius: var(--radius);
|
|
3955
|
-
padding: var(--sp-sm) 16px;
|
|
3956
|
-
}
|
|
3957
|
-
/* the reader's own rung is the one warm thing on the ladder */
|
|
3958
|
-
.rank-card--current { background: var(--accent-tint); border-color: color-mix(in srgb, var(--accent) 45%, transparent); }
|
|
3959
|
-
.rank-card--next { border-style: dashed; border-color: var(--rule); }
|
|
3960
|
-
.rank-card--sealed { opacity: 0.7; }
|
|
3961
|
-
.rank-card--placeholder { color: var(--ink-faint); }
|
|
3962
|
-
.rank-card__head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
|
|
3963
|
-
.rank-card__title { font-family: var(--font-display); font-weight: 400; font-size: 16px; letter-spacing: -0.02em; }
|
|
3964
|
-
.rank-card__status {
|
|
3965
|
-
margin-left: auto;
|
|
3966
|
-
font-family: var(--label-face);
|
|
3967
|
-
font-size: var(--label-size);
|
|
3968
|
-
font-weight: 400;
|
|
3969
|
-
letter-spacing: var(--label-space);
|
|
3970
|
-
text-transform: var(--label-case);
|
|
3971
|
-
}
|
|
3972
|
-
.rank-card__status--current { color: var(--accent-ink); }
|
|
3973
|
-
.rank-card__status--next { color: var(--info); }
|
|
3974
|
-
.rank-card__status--sealed { color: var(--ink-faint); }
|
|
3975
|
-
.rank-card__blurb { font-size: 13px; color: var(--ink-soft); margin: 6px 0; max-width: var(--measure); }
|
|
3976
|
-
.rank-card__blurb--sealed { font-style: italic; }
|
|
3977
|
-
.rank-card__unlocks-label {
|
|
3978
|
-
font-family: var(--label-face);
|
|
3979
|
-
font-size: var(--label-size);
|
|
3980
|
-
font-weight: 400;
|
|
3981
|
-
letter-spacing: var(--label-space);
|
|
3982
|
-
text-transform: var(--label-case);
|
|
3983
|
-
color: var(--ink-faint);
|
|
3984
|
-
margin: 10px 0 4px;
|
|
3985
|
-
}
|
|
3986
|
-
.rank-card__list { margin: 0; padding-left: 18px; font-size: 13px; color: var(--ink-soft); max-width: var(--measure); }
|
|
3987
|
-
.rank-card__list li { margin: 2px 0; }
|
|
3988
|
-
.rank-card__list li::marker { color: var(--ink-faint); }
|
|
3989
3942
|
.ranks-rise__body { font-size: 13.5px; max-width: var(--measure); }
|
|
3990
3943
|
.ranks-rise__body p { margin: 8px 0; }
|
|
3991
3944
|
|
|
@@ -58,8 +58,8 @@
|
|
|
58
58
|
time so the chrome exists before the deferred page scripts execute. -->
|
|
59
59
|
<script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
|
|
60
60
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
61
|
-
<script src="/builders/craft-mode.js?v=2026-
|
|
62
|
-
<script src="/builders/shell.js?v=2026-11-04-
|
|
61
|
+
<script src="/builders/craft-mode.js?v=2026-11-04-reading-room"></script>
|
|
62
|
+
<script src="/builders/shell.js?v=2026-11-04-reading-room"></script>
|
|
63
63
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
64
64
|
<script src="/builders/palette.js" defer></script>
|
|
65
65
|
<!-- task-detail.js still owns the #/idea/N and #/blocker/N deep-link overlay
|
|
@@ -140,8 +140,8 @@
|
|
|
140
140
|
|
|
141
141
|
<script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
|
|
142
142
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
143
|
-
<script src="/builders/craft-mode.js?v=2026-
|
|
144
|
-
<script src="/builders/shell.js?v=2026-11-04-
|
|
143
|
+
<script src="/builders/craft-mode.js?v=2026-11-04-reading-room"></script>
|
|
144
|
+
<script src="/builders/shell.js?v=2026-11-04-reading-room"></script>
|
|
145
145
|
<script src="/builders/palette.js" defer></script>
|
|
146
146
|
|
|
147
147
|
<script src="/builders/idea-objects.js?v=2026-09-27-split"></script>
|
|
@@ -144,8 +144,8 @@
|
|
|
144
144
|
|
|
145
145
|
<script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
|
|
146
146
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
147
|
-
<script src="/builders/craft-mode.js?v=2026-
|
|
148
|
-
<script src="/builders/shell.js?v=2026-11-04-
|
|
147
|
+
<script src="/builders/craft-mode.js?v=2026-11-04-reading-room"></script>
|
|
148
|
+
<script src="/builders/shell.js?v=2026-11-04-reading-room"></script>
|
|
149
149
|
<script src="/builders/palette.js" defer></script>
|
|
150
150
|
<script src="/builders/brand-holes.js?v=2026-09-29-aqfix"></script>
|
|
151
151
|
<script src="/builders/tweak-editor-lib.js?v=2026-09-29-tw27"></script>
|
|
@@ -167,8 +167,8 @@
|
|
|
167
167
|
chrome exists before the page script runs. -->
|
|
168
168
|
<script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
|
|
169
169
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
170
|
-
<script src="/builders/craft-mode.js?v=2026-
|
|
171
|
-
<script src="/builders/shell.js?v=2026-11-04-
|
|
170
|
+
<script src="/builders/craft-mode.js?v=2026-11-04-reading-room"></script>
|
|
171
|
+
<script src="/builders/shell.js?v=2026-11-04-reading-room"></script>
|
|
172
172
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
173
173
|
<script src="/builders/palette.js" defer></script>
|
|
174
174
|
<!-- shared component kit (window.OTBKit) — tabs, ledger, pager (task 2166). -->
|
|
@@ -173,8 +173,8 @@
|
|
|
173
173
|
time so the chrome exists before the deferred page scripts execute. -->
|
|
174
174
|
<script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
|
|
175
175
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
176
|
-
<script src="/builders/craft-mode.js?v=2026-
|
|
177
|
-
<script src="/builders/shell.js?v=2026-11-04-
|
|
176
|
+
<script src="/builders/craft-mode.js?v=2026-11-04-reading-room"></script>
|
|
177
|
+
<script src="/builders/shell.js?v=2026-11-04-reading-room"></script>
|
|
178
178
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
179
179
|
<script src="/builders/palette.js" defer></script>
|
|
180
180
|
<!-- task 1004727: the ONE karma vote control every task/idea list renders -->
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
# The founding mark — a seed badge on the roster
|
|
1
|
+
# The founding mark — a seed badge on the roster and the profile, and the founding wall on Home (task 1004424)
|
|
2
2
|
|
|
3
3
|
**BV2.PS10 (goal 1000121; spec `docs/specs/<redacted>.md` D1).** The canvas frame is `docs/design/mocks/project-startup/FoundingBuilders.dc.html`. Everyone who joined while the project was being founded is a founding builder, numbered in join order; the project owner is "founder". **It is a mark, not a rank: it grants nothing**, and nothing in the hall or on the server reads it to decide anything.
|
|
4
4
|
|
|
5
|
-
Files: `founding-mark.js` (`window.OTBFounding`: one shared read of `GET /api/bongos/founding/builders`, the pill, the plain "Joined at scope, day 3 of genesis" sentence), plus a few lines in `roster.js
|
|
5
|
+
Files: `founding-mark.js` (`window.OTBFounding`: one shared read of `GET /api/bongos/founding/builders`, the pill, the plain "Joined at scope, day 3 of genesis" sentence), plus a few lines in `roster.js` and `profile.js` and the `home-founding` widget in `hall-widgets.js`. The CSS sits beside the founding band in `style.css`. The data is `modules/onboarding/founding-builders.js`.
|
|
6
6
|
|
|
7
7
|
## Blended, not re-skinned
|
|
8
8
|
|
|
9
9
|
The canvas draws its own hall chrome: a ranks table, seed images, an emblem wall. The live hall wins (the blend rule), so the mark is built from the hall's own parts:
|
|
10
10
|
|
|
11
11
|
- **The pill is `.rank-badge`'s grammar**: the same 24px height, 11.5px/600 type and full radius, so it sits beside a rank without competing with it. The seed is a dot in `--accent`, the founding band's live-state colour, because the mark is that state made permanent. It is not a link, because it confers nothing.
|
|
12
|
-
- **The ranks page
|
|
12
|
+
- **The ranks page had no builders table**, so the canvas's "column on the ranks page" was a `Founding builders` ledger section there. That page folded into the Primer in task 1005046 and the ledger went with it: the roster and the founding wall already list every founder.
|
|
13
13
|
- **The wall is a core Home widget in `home-main`**, which brings that zone to its budget of three. It is hidden by default and fills itself from the shared read.
|
|
14
14
|
|
|
15
15
|
## Off is today's hall
|
|
16
16
|
|
|
17
|
-
A project that was never founded has no founding window, so the read returns an empty list without querying, and every surface renders exactly as before. The roster row of an unmarked builder is byte-identical,
|
|
17
|
+
A project that was never founded has no founding window, so the read returns an empty list without querying, and every surface renders exactly as before. The roster row of an unmarked builder is byte-identical, and the wall never unhides. `tests/founding_builders.mjs` runs the real `roster.js` and `hall-widgets.js` to hold this. A signed-out viewer (the profile is public) gets a 401 on the read, which is the same empty list.
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# The reading rooms — the primer and the diagrams (task 1003306)
|
|
2
2
|
|
|
3
|
+
> Since task 1005046 the primer is the one reading room: `diagrams.css` and the diagrams index folded into its chapters.
|
|
4
|
+
|
|
3
5
|
**The READING ROOMS landed next (task 1003306).** `room.css` is the archetype, the second after `record.css`; `primer.css` and `diagrams.css` then hold only what one room has and the other does not. **The classes stay `primer-`-prefixed on purpose**: `diagram-viewer.js` upgrades `figure.diagram img, figure.primer-figure img` with one selector and `hall_audit` pins `.primer-article table`'s 760px scrollport by name, so the sheet is named for the room and the prefix is left alone. Four things it settled:
|
|
4
6
|
|
|
5
7
|
- **ONE markdown parser.** `primer.js` carried its own copy of `md-reader.js`'s grammar *minus blockquotes*, so every `> aside` in the primer silently collapsed into a paragraph. The copy is gone; the primer keeps only the two things that are genuinely its own — the diagram injected after a named h2, and the one rewrite that sends `drachmae-and-karma.md` to `/builders/drachmae` instead of GitHub. **Anything the primer's markdown needs next belongs in `md-reader.js`**, where the economy reader gets it too.
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# The reference room — drachmae, at /drachmae (task 1003473)
|
|
2
2
|
|
|
3
|
+
> **Retired by task 1005046 (2026-11-04).** The page folded into the Primer as its credits-and-karma chapter, `/drachmae` redirects there, and the `room--reference` rules left `room.css`. Its live sections live on in `primer-live.js`. What follows is the history.
|
|
4
|
+
|
|
3
5
|
**The REFERENCE room landed last (task 1003473)** — drachmae, the fifth and smallest redesign task under goal 1000081. It is the reading-room archetype (`room.css`) with ONE body modifier, `room--reference`, and not a second archetype: the room's composition — the head, the glass contents beside the `--bg-card` article, the measure — is right for a document people scan as much as for one they read, so what changes is the content rules (`room.css` §8, ADR 0228). Five things it settled:
|
|
4
6
|
|
|
5
7
|
- **A reference has no end to reach, so the linear-read instruments are off.** No progress hairline (the markup is simply absent; §1 of the sheet stays for the primer, whose gate is fed by it), no section counters (`content: none` on the h2's and the contents' `::before`), no "About a five-minute read". `primer.css` is no longer loaded here: it holds only the acknowledge gate.
|
|
@@ -37,8 +37,12 @@ const WAKES = Object.freeze({
|
|
|
37
37
|
scope: Object.freeze(['roadmap', 'goals', 'goal-map']),
|
|
38
38
|
strategize: Object.freeze(['work']),
|
|
39
39
|
charter: Object.freeze(['board-room']),
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
// task 1005046: legalize woke Economy and legislation woke Ranks. Both pages
|
|
41
|
+
// are Primer chapters now (one reading room), and the Primer never sleeps —
|
|
42
|
+
// it is the newcomer's first read — so these two stages wake no sidebar room.
|
|
43
|
+
// The stages themselves are unchanged; only what they unlock in the nav is.
|
|
44
|
+
legalize: Object.freeze([]),
|
|
45
|
+
legislation: Object.freeze([]),
|
|
42
46
|
});
|
|
43
47
|
const WAKES_WHEN_ALIVE = Object.freeze(['collab', 'roster']);
|
|
44
48
|
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
// reduced-motion pass per mode. Writes the shots + a JSON report; exits non-zero on any problem.
|
|
10
10
|
//
|
|
11
11
|
// node modules/ui-design/kit/render.js --page /projects (surface defaults to the public-landing module key)
|
|
12
|
-
// node modules/ui-design/kit/render.js --page /builders/
|
|
12
|
+
// node modules/ui-design/kit/render.js --page /builders/primer --surface hall-ui
|
|
13
13
|
// node modules/ui-design/kit/render.js --states <file> (explicit file)
|
|
14
14
|
// --modes dark,light --sizes 1440,390,320 --only a,b --out <dir>
|
|
15
15
|
// --style <name> render under a look from the style library (STYLE= on the stubs; task 1003323)
|
|
@@ -36,7 +36,7 @@ modules/ui-design/styles/<name>/
|
|
|
36
36
|
```
|
|
37
37
|
STYLE=grove node modules/ui-design/kit/serve.js # the front door under the grove
|
|
38
38
|
node modules/ui-design/kit/render.js --page / --style expedition # every state × width × mode, audited
|
|
39
|
-
node modules/ui-design/kit/render.js --page /builders/
|
|
39
|
+
node modules/ui-design/kit/render.js --page /builders/primer --surface hall-ui --style grove
|
|
40
40
|
node modules/ui-design/kit/probe.js --page /projects --style grove
|
|
41
41
|
node modules/ui-design/kit/contrast.js --pack expedition # the pack floor, no browser
|
|
42
42
|
node modules/ui-design/kit/check-mock.js --file modules/ui-design/styles/grove/mock.html --pack grove
|
|
@@ -56,5 +56,5 @@ The steps below are the manual path. The **`/style` session** ([task 1003475](ht
|
|
|
56
56
|
1. Make the dir with the three files; start from the alternate nearest to it.
|
|
57
57
|
2. `node modules/ui-design/kit/contrast.js --pack <name>` until the floor is clean; then `node --test tests/ui_design_styles.mjs`, which runs the world / cosmos / hall suites under the pack and tells you the exact pair that fails. Tune the thirteen, never the sheets.
|
|
58
58
|
3. `node modules/ui-design/kit/check-mock.js --file modules/ui-design/styles/<name>/mock.html --pack <name>` until ALL RULES PASS.
|
|
59
|
-
4. `node modules/ui-design/kit/render.js --page / --style <name>` and look at the shots; the hall's `/builders/
|
|
59
|
+
4. `node modules/ui-design/kit/render.js --page / --style <name>` and look at the shots; the hall's `/builders/primer` shows the light tier.
|
|
60
60
|
5. Add the row above, the line in the module's `CLAUDE.md` and in `/design`. Ship under a claimed task.
|
package/package-lock.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bongos/core",
|
|
3
|
-
"version": "1.24.
|
|
3
|
+
"version": "1.24.36",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@bongos/core",
|
|
9
|
-
"version": "1.24.
|
|
9
|
+
"version": "1.24.36",
|
|
10
10
|
"license": "AGPL-3.0-or-later",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"express": "^4.21.2",
|