@bongos/core 1.24.80 → 1.24.82
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 +154 -124
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +4 -0
- package/clients/bongos-client/index.cjs +4 -0
- package/clients/bongos-client/index.d.ts +5 -0
- package/clients/bongos-client/index.mjs +4 -0
- package/docs/adr/0402-helm-is-the-halls-look-and-the-hall-is-dark-only.md +142 -0
- package/docs/adr/README.md +1 -0
- package/docs/api/openapi.json +86 -2
- package/docs/api-reference.md +4 -2
- package/docs/copy-inventory.md +51 -50
- package/docs/copy-registry.json +121 -123
- package/docs/module-api-changelog.md +4 -0
- package/docs/page-inventory.json +2 -3
- package/docs/page-readings.json +226 -220
- package/modules/builder-settings/hall-view-prefs.js +50 -0
- package/modules/builder-settings/routes/settings.js +32 -0
- package/modules/hall-ui/public/ai-studio.html +5 -3
- package/modules/hall-ui/public/ai-studio.states.json +1 -0
- package/modules/hall-ui/public/atlas.html +3 -3
- package/modules/hall-ui/public/atlas.states.json +1 -0
- package/modules/hall-ui/public/blockers.html +3 -3
- package/modules/hall-ui/public/board-room.html +3 -3
- package/modules/hall-ui/public/board-room.states.json +1 -0
- package/modules/hall-ui/public/city.css +1 -3
- package/modules/hall-ui/public/city.html +6 -9
- package/modules/hall-ui/public/city.js +10 -55
- package/modules/hall-ui/public/city.states.json +7 -32
- package/modules/hall-ui/public/collab.html +3 -3
- package/modules/hall-ui/public/collab.states.json +1 -0
- package/modules/hall-ui/public/commands.html +3 -3
- package/modules/hall-ui/public/commands.states.json +1 -0
- package/modules/hall-ui/public/controls.css +63 -11
- package/modules/hall-ui/public/copy-desk.html +3 -3
- package/modules/hall-ui/public/copy-desk.states.json +1 -0
- package/modules/hall-ui/public/deploy.html +3 -3
- package/modules/hall-ui/public/deploy.states.json +1 -0
- package/modules/hall-ui/public/goal-map.html +4 -4
- package/modules/hall-ui/public/goals.html +3 -3
- package/modules/hall-ui/public/goals.states.json +1 -0
- package/modules/hall-ui/public/government.html +3 -3
- package/modules/hall-ui/public/government.states.json +1 -0
- package/modules/hall-ui/public/idea.html +3 -3
- package/modules/hall-ui/public/idea.states.json +1 -0
- package/modules/hall-ui/public/ideas.html +3 -3
- package/modules/hall-ui/public/ideas.states.json +1 -0
- package/modules/hall-ui/public/index-founding.states.json +1 -0
- package/modules/hall-ui/public/index-genesis-decide.states.json +1 -0
- package/modules/hall-ui/public/index-genesis-demo.states.json +1 -0
- package/modules/hall-ui/public/index-genesis.states.json +1 -0
- package/modules/hall-ui/public/index.html +5 -5
- package/modules/hall-ui/public/index.states.json +1 -0
- package/modules/hall-ui/public/market-watch-item.html +3 -3
- package/modules/hall-ui/public/market-watch-item.states.json +1 -0
- package/modules/hall-ui/public/market-watch-rules.html +3 -3
- package/modules/hall-ui/public/market-watch-rules.states.json +1 -0
- package/modules/hall-ui/public/market-watch.html +3 -3
- package/modules/hall-ui/public/market-watch.states.json +1 -0
- package/modules/hall-ui/public/modules.html +3 -3
- package/modules/hall-ui/public/modules.states.json +1 -0
- package/modules/hall-ui/public/money.html +3 -3
- package/modules/hall-ui/public/money.states.json +1 -0
- package/modules/hall-ui/public/my-agents.html +3 -3
- package/modules/hall-ui/public/my-agents.states.json +1 -0
- package/modules/hall-ui/public/options-menu.js +2 -1
- package/modules/hall-ui/public/primer.html +3 -3
- package/modules/hall-ui/public/primer.states.json +1 -0
- package/modules/hall-ui/public/profile.html +3 -3
- package/modules/hall-ui/public/profile.states.json +1 -0
- package/modules/hall-ui/public/project-settings.html +3 -3
- package/modules/hall-ui/public/roster.html +3 -3
- package/modules/hall-ui/public/roster.states.json +1 -0
- package/modules/hall-ui/public/settings-view.js +75 -0
- package/modules/hall-ui/public/settings.html +17 -4
- package/modules/hall-ui/public/settings.states.json +1 -0
- package/modules/hall-ui/public/shell-game.css +97 -42
- package/modules/hall-ui/public/shell-game.js +138 -40
- package/modules/hall-ui/public/shell.js +12 -43
- package/modules/hall-ui/public/street-card.states.json +1 -0
- package/modules/hall-ui/public/street.css +1 -5
- package/modules/hall-ui/public/street.html +5 -9
- package/modules/hall-ui/public/street.js +8 -59
- package/modules/hall-ui/public/street.states.json +7 -32
- package/modules/hall-ui/public/studio.html +3 -3
- package/modules/hall-ui/public/studio.states.json +1 -0
- package/modules/hall-ui/public/style.css +126 -65
- package/modules/hall-ui/public/task.html +3 -3
- package/modules/hall-ui/public/task.states.json +1 -0
- package/modules/hall-ui/public/thinking.html +4 -4
- package/modules/hall-ui/public/thinking.states.json +1 -0
- package/modules/hall-ui/public/tweak-editor.html +3 -3
- package/modules/hall-ui/public/tweak-editor.states.json +1 -0
- package/modules/hall-ui/public/visor.js +7 -1
- package/modules/hall-ui/public/watch.html +3 -3
- package/modules/hall-ui/public/watch.states.json +1 -0
- package/modules/hall-ui/public/work-founding.states.json +1 -0
- package/modules/hall-ui/public/work.html +3 -3
- package/modules/hall-ui/public/work.states.json +1 -0
- package/modules/hall-ui/records/game-mode.md +5 -4
- package/modules/hall-ui/records/start-screen.md +10 -2
- package/modules/hall-ui/specimens/components.states.json +2 -1
- package/modules/ui-design/public/brand.html +2 -2
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +12 -0
- package/scripts/hall-preview/README.md +2 -3
- package/scripts/hall-preview/pref-writes.js +8 -1
- package/src/bongos/serve-internal.js +7 -2
- package/src/hall-helm.js +79 -0
- package/src/module-api.js +1 -1
- package/tests/design_reference.mjs +1 -1
- package/tests/hall_builders_page_pass.mjs +2 -1
- package/tests/hall_city.mjs +15 -29
- package/tests/hall_controls.mjs +52 -4
- package/tests/hall_fullscreen.mjs +42 -21
- package/tests/hall_helm.mjs +187 -0
- package/tests/hall_record_world.mjs +4 -2
- package/tests/hall_start_screen.mjs +103 -5
- package/tests/hall_street.mjs +13 -26
- package/tests/hall_topbar_320.mjs +4 -2
- package/tests/hall_view_prefs.mjs +42 -0
- package/tests/hall_visor.mjs +3 -2
- package/tests/nav_permission_atoms.mjs +1 -1
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
|
|
9
9
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
10
10
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
11
|
-
<link rel="stylesheet" href="/builders/style.css?v=2026-11-
|
|
11
|
+
<link rel="stylesheet" href="/builders/style.css?v=2026-11-11-view2">
|
|
12
12
|
<link rel="stylesheet" href="/builders/oversight.css">
|
|
13
13
|
<link rel="stylesheet" href="/builders/project-settings.css?v=2026-11-02-outflow">
|
|
14
14
|
</head>
|
|
@@ -80,10 +80,10 @@
|
|
|
80
80
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
81
81
|
|
|
82
82
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
83
|
-
<script src="/builders/shell-game.js?v=2026-11-
|
|
83
|
+
<script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
|
|
84
84
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
85
85
|
<script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
|
|
86
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
86
|
+
<script src="/builders/shell.js?v=2026-11-11-view2"></script>
|
|
87
87
|
<script src="/builders/hall-dialog.js"></script>
|
|
88
88
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
89
89
|
<script src="/builders/palette.js" defer></script>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_": "MONEY (task 1005047; once FLEET COSTS, task 1001949, ADR 0327) through modules/ui-design/kit/render.js. The page reads three authenticated routes — GET /project-account/outflow (payout.approve), GET /public/cost-summary and GET /provisioning/fleet/cost-ledger (provisioning.fleet.manage) — each section hidden until its own read answers. Against the kit's own stub every read fails, so the page shows its one 'Nothing to show yet' line, a state the floors must hold in. To look at the populated page run it against the hall-preview harness, whose fixtures answer all three (the ledger's two cloud hosts carry no recorded plan, the state live is in today):\n\n node scripts/hall-preview/server.js --port 4620 --fixture-me\n node modules/ui-design/kit/render.js --states modules/hall-ui/public/money.states.json --base-in http://localhost:4620 --base-out http://localhost:4620",
|
|
3
3
|
"page": "/builders/money",
|
|
4
|
+
"modes": ["dark"],
|
|
4
5
|
"_storage": "The hall asks a first-visit question (the session mode picker, craft-mode.js) over every page; seeding \"already asked\" renders the page a returning builder sees (task 1005080).",
|
|
5
6
|
"storage": { "session": { "hall-craft-asked": "1" } },
|
|
6
7
|
"surface": "hall-ui",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
|
|
9
9
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
10
10
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
11
|
-
<link rel="stylesheet" href="/builders/style.css?v=2026-11-
|
|
11
|
+
<link rel="stylesheet" href="/builders/style.css?v=2026-11-11-view2">
|
|
12
12
|
<!-- The oversight family's archetype: a titled row with facts and actions, the
|
|
13
13
|
group head and the foot line (records/oversight-family.md). This page's
|
|
14
14
|
repeated thing is that row at the desk's one-line density. -->
|
|
@@ -82,10 +82,10 @@
|
|
|
82
82
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
83
83
|
|
|
84
84
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
85
|
-
<script src="/builders/shell-game.js?v=2026-11-
|
|
85
|
+
<script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
|
|
86
86
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
87
87
|
<script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
|
|
88
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
88
|
+
<script src="/builders/shell.js?v=2026-11-11-view2"></script>
|
|
89
89
|
<script src="/builders/hall-dialog.js"></script>
|
|
90
90
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
91
91
|
<script src="/builders/palette.js" defer></script>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_": "MY AGENTS (task 1004685, the living-city prototype) through modules/ui-design/kit/render.js. Every row is filled from GET /me and its prefs, so the floors run against the hall-preview harness, which serves those reads and records the pref writes (scripts/hall-preview/pref-writes.js):\n\n node scripts/hall-preview/server.js --port 4614 --fixture-me --rank archon\n node modules/ui-design/kit/render.js --states modules/hall-ui/public/my-agents.states.json --base-in http://builders.localhost:4614 --base-out http://builders.localhost:4614\n\nAgainst the kit's own stub the reads 404 and the page shows its sign-in line. The 'nobody' state is the same page as a builder who holds no seat (?as=nobody, a stand-in that can only take away, gov-positions.js).",
|
|
3
3
|
"page": "/my-agents",
|
|
4
|
+
"modes": ["dark"],
|
|
4
5
|
"_storage": "The hall asks a first-visit question (the session mode picker, craft-mode.js) over every page; seeding \"already asked\" renders the page a returning builder sees (task 1005080).",
|
|
5
6
|
"storage": { "session": { "hall-craft-asked": "1" } },
|
|
6
7
|
"surface": "hall-ui",
|
|
@@ -66,7 +66,8 @@
|
|
|
66
66
|
] },
|
|
67
67
|
] },
|
|
68
68
|
{ head: 'Preferences', items: [
|
|
69
|
-
{ id: 'preferences', label: 'Preferences', native: true, gate: 'signed', words: 'usage reports'
|
|
69
|
+
{ id: 'preferences', label: 'Preferences', native: true, gate: 'signed', words: 'usage reports view game classic mode sidebar',
|
|
70
|
+
anchors: [{ label: 'View: game or classic', anchor: 'view-scroll', words: 'game classic mode full screen sidebar' }] },
|
|
70
71
|
{ id: 'sound', label: 'Sound', native: true, gate: 'signed', words: 'sounds audio chime event volume mute' },
|
|
71
72
|
] },
|
|
72
73
|
{ head: 'The project', items: [
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
|
|
9
9
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
10
10
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
11
|
-
<link rel="stylesheet" href="/builders/style.css?v=2026-11-
|
|
11
|
+
<link rel="stylesheet" href="/builders/style.css?v=2026-11-11-view2">
|
|
12
12
|
<link rel="stylesheet" href="/builders/room.css">
|
|
13
13
|
<link rel="stylesheet" href="/builders/primer.css?v=2026-07-02-shell1">
|
|
14
14
|
<link rel="stylesheet" href="/builders/diagram-viewer.css?v=2026-11-04-reading-room">
|
|
@@ -111,10 +111,10 @@
|
|
|
111
111
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
112
112
|
|
|
113
113
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
114
|
-
<script src="/builders/shell-game.js?v=2026-11-
|
|
114
|
+
<script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
|
|
115
115
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
116
116
|
<script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
|
|
117
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
117
|
+
<script src="/builders/shell.js?v=2026-11-11-view2"></script>
|
|
118
118
|
<script src="/builders/hall-dialog.js"></script>
|
|
119
119
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
120
120
|
<script src="/builders/palette.js" defer></script>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_": "The hall's primer through modules/ui-design/kit/render.js (task 1003306). Written with the reading-room re-skin so the room's failure state and its table of contents are MEASURED at 1440/390/320 in both modes, not just looked at.",
|
|
3
3
|
"page": "/builders/primer",
|
|
4
|
+
"modes": ["dark"],
|
|
4
5
|
"_storage": "The hall asks a first-visit question (the session mode picker, craft-mode.js) over every page; seeding \"already asked\" renders the page a returning builder sees (task 1005080).",
|
|
5
6
|
"storage": { "session": { "hall-craft-asked": "1" } },
|
|
6
7
|
"surface": "hall-ui",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
<link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
|
|
15
15
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
16
16
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
17
|
-
<link rel="stylesheet" href="/builders/style.css?v=2026-11-
|
|
17
|
+
<link rel="stylesheet" href="/builders/style.css?v=2026-11-11-view2">
|
|
18
18
|
<!-- The PANEL archetype (task 1003308) before the page's own sheet. -->
|
|
19
19
|
<link rel="stylesheet" href="/builders/panel.css">
|
|
20
20
|
<link rel="stylesheet" href="/builders/hall-ask.css">
|
|
@@ -248,10 +248,10 @@
|
|
|
248
248
|
<!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
|
|
249
249
|
chrome exists before the page script runs. -->
|
|
250
250
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
251
|
-
<script src="/builders/shell-game.js?v=2026-11-
|
|
251
|
+
<script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
|
|
252
252
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
253
253
|
<script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
|
|
254
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
254
|
+
<script src="/builders/shell.js?v=2026-11-11-view2"></script>
|
|
255
255
|
<script src="/builders/hall-dialog.js"></script>
|
|
256
256
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
257
257
|
<script src="/builders/palette.js" defer></script>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_": "The hall's PROFILE page through modules/ui-design/kit/render.js (task 1003308; four screens behind the section rail since task 1003489 — overview, works, activity, connections). The identity band, the charts, the works ledger and the activity ledgers only exist once a profile has LOADED, so the floors run against the hall-preview harness (see settings.states.json for the two commands; pass --base-in/--base-out at it). One rail key renders at a time, so each key is its own state. `out` is a real state here rather than a redirect: a signed-out visitor with no ?id= gets the empty state, not a bounce — under the harness's --fixture-me the /me read still answers, so `out` renders the own profile there and the empty state only under the kit's own stub.",
|
|
3
3
|
"page": "/profile",
|
|
4
|
+
"modes": ["dark"],
|
|
4
5
|
"_storage": "The hall asks a first-visit question (the session mode picker, craft-mode.js) over every page; seeding \"already asked\" renders the page a returning builder sees (task 1005080).",
|
|
5
6
|
"storage": { "session": { "hall-craft-asked": "1" } },
|
|
6
7
|
"surface": "hall-ui",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
|
|
9
9
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
10
10
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
11
|
-
<link rel="stylesheet" href="/builders/style.css?v=2026-11-
|
|
11
|
+
<link rel="stylesheet" href="/builders/style.css?v=2026-11-11-view2">
|
|
12
12
|
<link rel="stylesheet" href="/builders/oversight.css">
|
|
13
13
|
<link rel="stylesheet" href="/builders/project-settings.css?v=2026-11-02-outflow">
|
|
14
14
|
</head>
|
|
@@ -75,10 +75,10 @@
|
|
|
75
75
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
76
76
|
|
|
77
77
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
78
|
-
<script src="/builders/shell-game.js?v=2026-11-
|
|
78
|
+
<script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
|
|
79
79
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
80
80
|
<script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
|
|
81
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
81
|
+
<script src="/builders/shell.js?v=2026-11-11-view2"></script>
|
|
82
82
|
<script src="/builders/hall-dialog.js"></script>
|
|
83
83
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
84
84
|
<script src="/builders/palette.js" defer></script>
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
|
|
9
9
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
10
10
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
11
|
-
<link rel="stylesheet" href="/builders/style.css?v=2026-11-
|
|
11
|
+
<link rel="stylesheet" href="/builders/style.css?v=2026-11-11-view2">
|
|
12
12
|
<!-- task 1003441: the identity cell (avatar, name, login). It was shared with
|
|
13
13
|
the cross-project /people page until task 1003444 deleted it. -->
|
|
14
14
|
<link rel="stylesheet" href="/builders/roster.css">
|
|
@@ -57,10 +57,10 @@
|
|
|
57
57
|
<!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
|
|
58
58
|
chrome exists before the page script runs. -->
|
|
59
59
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
60
|
-
<script src="/builders/shell-game.js?v=2026-11-
|
|
60
|
+
<script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
|
|
61
61
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
62
62
|
<script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
|
|
63
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
63
|
+
<script src="/builders/shell.js?v=2026-11-11-view2"></script>
|
|
64
64
|
<script src="/builders/hall-dialog.js"></script>
|
|
65
65
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
66
66
|
<script src="/builders/palette.js" defer></script>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_": "Builders — this project's OWN roster, ranked by credits earned (task 1003441, goal 1000075). Was the #leaderboard hash view on index.html; /#leaderboard now redirects here. Deliberately UNGATED, because its one data source (GET /leaderboard) is deliberately unauthenticated and mirrors the public status surface — so unlike a gated page's states file the `out` state below renders the real page rather than a seal. Populated look: the hall-preview harness (scripts/hall-preview/fixtures/public__leaderboard.json, since task 1004437 the list the page reads: fifteen builders with avatars, ranks, karma, tokens and each one's roles, including an artist and an ideator with no AI sessions).",
|
|
3
3
|
"page": "/builders/roster",
|
|
4
|
+
"modes": ["dark"],
|
|
4
5
|
"_storage": "The hall asks a first-visit question (the session mode picker, craft-mode.js) over every page; seeding \"already asked\" renders the page a returning builder sees (task 1005080).",
|
|
5
6
|
"storage": { "session": { "hall-craft-asked": "1" } },
|
|
6
7
|
"surface": "hall-ui",
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// modules/hall-ui/public/settings-view.js — Options → Preferences → View: game or
|
|
2
|
+
// classic (task 1005200; owner, 2026-11-11). The one place the view is switched after
|
|
3
|
+
// sign-in. The two never mix: classic is the hall with its sidebar, game is the city
|
|
4
|
+
// full screen with only the game's places (shell-game.js).
|
|
5
|
+
//
|
|
6
|
+
// The account holds the choice (GET/PATCH /api/bongos/me/hall-view, builder-settings
|
|
7
|
+
// hall-view-prefs.js), so it follows the builder to any browser. This panel saves it
|
|
8
|
+
// there first and only then switches the page, so a failed save never leaves the page
|
|
9
|
+
// in one view and the account in the other.
|
|
10
|
+
//
|
|
11
|
+
// Own file on the settings-usage-reports.js precedent: it shares nothing with the rest
|
|
12
|
+
// of the page.
|
|
13
|
+
|
|
14
|
+
(() => {
|
|
15
|
+
'use strict';
|
|
16
|
+
|
|
17
|
+
const PATH = '/api/bongos/me/hall-view';
|
|
18
|
+
const { $ } = window.OTB;
|
|
19
|
+
const toast = (msg) => window.OTB.toast(msg);
|
|
20
|
+
const api = window.BongosClient.createClient({ baseUrl: '', credentials: 'same-origin', throwOnError: false });
|
|
21
|
+
const game = () => window.OTBShellGame;
|
|
22
|
+
|
|
23
|
+
const CHOICES = [
|
|
24
|
+
{ value: 'game', label: 'Game', desc: 'The project city, full screen. Only the game’s places: the city, the skies and the atlas.' },
|
|
25
|
+
{ value: 'classic', label: 'Classic', desc: 'The hall with its sidebar and every page.' },
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
function render(view) {
|
|
29
|
+
const wrap = $('#view-rows');
|
|
30
|
+
if (!wrap) return;
|
|
31
|
+
wrap.innerHTML =
|
|
32
|
+
'<fieldset class="pgroup" id="view-group">' +
|
|
33
|
+
'<legend class="prow__label">How you see the project</legend>' +
|
|
34
|
+
CHOICES.map((c) => {
|
|
35
|
+
const id = `view-${c.value}`;
|
|
36
|
+
return (
|
|
37
|
+
`<label class="prow prow--pick" for="${id}">` +
|
|
38
|
+
`<input class="pradio" type="radio" name="hall-view" id="${id}" value="${c.value}"${view === c.value ? ' checked' : ''}>` +
|
|
39
|
+
'<span class="prow__main">' +
|
|
40
|
+
`<span class="prow__label">${c.label}</span>` +
|
|
41
|
+
`<span class="prow__desc">${c.desc}</span>` +
|
|
42
|
+
'</span></label>'
|
|
43
|
+
);
|
|
44
|
+
}).join('') +
|
|
45
|
+
'</fieldset>';
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
async function save(view) {
|
|
49
|
+
const status = $('#view-status');
|
|
50
|
+
if (status) status.textContent = 'Saving…';
|
|
51
|
+
const res = await api.request('PATCH', PATH, { body: { view } });
|
|
52
|
+
if (!res.ok) {
|
|
53
|
+
render(game() && game().on() ? 'game' : 'classic');
|
|
54
|
+
if (status) status.textContent = 'Could not save. Try again.';
|
|
55
|
+
toast('Could not switch the view. Try again.');
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const msg = view === 'game' ? 'Saved. You are in the game view.' : 'Saved. You are in the classic view.';
|
|
59
|
+
if (status) status.textContent = msg;
|
|
60
|
+
if (game()) game().set(view === 'game', { local: true });
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function setup() {
|
|
64
|
+
const section = $('#view-scroll');
|
|
65
|
+
if (!section || !game()) return;
|
|
66
|
+
render(game().on() ? 'game' : 'classic');
|
|
67
|
+
section.hidden = false;
|
|
68
|
+
$('#view-rows').addEventListener('change', (e) => {
|
|
69
|
+
if (e.target && e.target.name === 'hall-view') save(e.target.value);
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', setup);
|
|
74
|
+
else setup();
|
|
75
|
+
})();
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
<link rel="icon" href="/modules/ui-design/public/brand/favicon.svg" type="image/svg+xml">
|
|
12
12
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
13
13
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
14
|
-
<link rel="stylesheet" href="/builders/style.css?v=2026-11-
|
|
14
|
+
<link rel="stylesheet" href="/builders/style.css?v=2026-11-11-view2">
|
|
15
15
|
<!-- The PANEL archetype (task 1003308): the row, the switch, the field, the
|
|
16
16
|
chip control and the family's voices, shared with profile and pair.
|
|
17
17
|
settings.css then holds only what this page
|
|
@@ -287,6 +287,18 @@
|
|
|
287
287
|
on the same routes. They live on My agents only now; this line is where
|
|
288
288
|
they were. Old deep links (#interaction, #wandering, #rendering, …) are
|
|
289
289
|
sent there by settings-moved.js. -->
|
|
290
|
+
<!-- VIEW — game or classic (task 1005200): the one place the view is switched
|
|
291
|
+
after sign-in. Kept on the account (GET/PATCH /me/hall-view); drawn by
|
|
292
|
+
settings-view.js. -->
|
|
293
|
+
<section class="scroll" id="view-scroll" aria-labelledby="view-h" data-group="preferences" hidden>
|
|
294
|
+
<h2 id="view-h" class="scroll__h">View</h2>
|
|
295
|
+
<p class="scroll__lede">
|
|
296
|
+
Game or classic, never both. You also choose each time you sign in.
|
|
297
|
+
</p>
|
|
298
|
+
<div class="sound-rows" id="view-rows"></div>
|
|
299
|
+
<p class="settings-status" id="view-status" role="status" aria-live="polite"></p>
|
|
300
|
+
</section>
|
|
301
|
+
|
|
290
302
|
<section class="scroll" id="agents-moved-preferences" aria-labelledby="agents-moved-preferences-h" data-group="preferences">
|
|
291
303
|
<h2 id="agents-moved-preferences-h" class="scroll__h">Your agents</h2>
|
|
292
304
|
<p class="scroll__lede">
|
|
@@ -405,10 +417,10 @@
|
|
|
405
417
|
<!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
|
|
406
418
|
chrome exists before the page scripts run. -->
|
|
407
419
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
408
|
-
<script src="/builders/shell-game.js?v=2026-11-
|
|
420
|
+
<script src="/builders/shell-game.js?v=2026-11-11-view2"></script>
|
|
409
421
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
410
422
|
<script src="/builders/craft-mode.js?v=2026-11-10-visor"></script>
|
|
411
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
423
|
+
<script src="/builders/shell.js?v=2026-11-11-view2"></script>
|
|
412
424
|
<script src="/builders/hall-dialog.js"></script>
|
|
413
425
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
414
426
|
<script src="/builders/palette.js" defer></script>
|
|
@@ -420,7 +432,7 @@
|
|
|
420
432
|
<!-- task 1005044: the old deep links to the agent settings that moved to My agents -->
|
|
421
433
|
<script src="/builders/settings-moved.js?v=2026-11-03-moved"></script>
|
|
422
434
|
<!-- task 1005144: the ONE options menu — the rail, its search, and the screens it opens in a frame. -->
|
|
423
|
-
<script src="/builders/options-menu.js?v=2026-11-
|
|
435
|
+
<script src="/builders/options-menu.js?v=2026-11-11-view2"></script>
|
|
424
436
|
<script src="/builders/settings.js?v=2026-11-10-options"></script>
|
|
425
437
|
<!-- task 1003341: the Active sessions panel. Its own file rather than more of
|
|
426
438
|
settings.js, which sits close to the 1500-line size ratchet. -->
|
|
@@ -437,6 +449,7 @@
|
|
|
437
449
|
<script src="/builders/runner-button.js"></script>
|
|
438
450
|
<script src="/builders/settings-autobongos.js?v=2026-11-09-run-button"></script>
|
|
439
451
|
<!-- task 1003793: Settings → Module install reports. Own file on the same precedent. -->
|
|
452
|
+
<script src="/builders/settings-view.js?v=2026-11-11-view"></script>
|
|
440
453
|
<script src="/builders/settings-usage-reports.js?v=2026-10-08-usage-reports"></script>
|
|
441
454
|
</body>
|
|
442
455
|
</html>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_": "The hall's SETTINGS page through modules/ui-design/kit/render.js (task 1003308). Every panel on it is a form the page script fills from a dozen /me/* reads, so the floors run against the hall-preview harness rather than the kit's own stub:\n\n node scripts/hall-preview/server.js --port 4621 --fixture-me\n node modules/ui-design/kit/render.js --states modules/hall-ui/public/settings.states.json --base-in http://builders.localhost:4621 --base-out http://builders.localhost:4621\n\nOne group renders at a time behind the section rail, so each rail group is its own state. There is no `out` state on purpose: settings.js answers a 401 by navigating to the sign-in flow, and a state whose page navigates away measures the destination, not this page (the not-signed-in gate panel is the non-401 failure render, pinned statically in tests/hall_settings_world.mjs).",
|
|
3
3
|
"page": "/settings",
|
|
4
|
+
"modes": ["dark"],
|
|
4
5
|
"_storage": "The hall asks a first-visit question (the session mode picker, craft-mode.js) over every page; seeding \"already asked\" renders the page a returning builder sees (task 1005080).",
|
|
5
6
|
"storage": { "session": { "hall-craft-asked": "1" } },
|
|
6
7
|
"surface": "hall-ui",
|
|
@@ -1,65 +1,120 @@
|
|
|
1
|
-
/* shell-game.css — the game's start screen and load screen (task 1005143; shell-game.js start())
|
|
2
|
-
|
|
3
|
-
screen
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
/* shell-game.css — the game's start screen and load screen (task 1005143; shell-game.js start()),
|
|
2
|
+
in the Helm look (task 1005192, ADR 0402). Both stand over the welcome's painting. The start
|
|
3
|
+
screen is one full-height night panel on the left, closed left and right by an ice hairline:
|
|
4
|
+
the mark and the project's name in the name voice, the five choices as full-width rows, one
|
|
5
|
+
line at the foot. The load screen is the same panel language, centred: the week in the name
|
|
6
|
+
voice, one segment per week, the city, the tip. Colours, sizes, corners, spacing and the
|
|
7
|
+
panel's own measures are the hall tier's tokens (style.css); nothing here is typed in, and
|
|
8
|
+
there is no breakpoint: the panel is as wide as a phone and stands off the edge on a desk
|
|
9
|
+
(--helm-inset). Rules: modules/hall-ui/records/start-screen.md. */
|
|
6
10
|
html.gs-open { overflow: hidden; }
|
|
7
11
|
.gs {
|
|
8
12
|
position: fixed; inset: 0; z-index: var(--ds-z-modal, 160); overflow: auto;
|
|
9
|
-
display: flex; align-items:
|
|
10
|
-
padding:
|
|
11
|
-
background: var(--bg); color: var(--ink); font-family: var(--font-body);
|
|
12
|
-
transition: opacity
|
|
13
|
+
display: flex; align-items: stretch; justify-content: flex-start;
|
|
14
|
+
padding: 0 0 0 var(--helm-inset);
|
|
15
|
+
background: var(--bg); color: var(--ink-soft); font-family: var(--font-body);
|
|
16
|
+
transition: opacity var(--ds-dur-slower) var(--ds-ease);
|
|
13
17
|
}
|
|
14
18
|
.gs--leaving { opacity: 0; pointer-events: none; }
|
|
19
|
+
.gs--load { align-items: center; justify-content: center; padding: var(--ds-space-lg) var(--ds-space-gutter-narrow); }
|
|
15
20
|
|
|
16
|
-
/* the still: the painting, covering the screen
|
|
21
|
+
/* the still: the painting, covering the screen. The start screen leaves it bare (the panel is
|
|
22
|
+
its own ground); the load screen lays the scrim over it so the centred panel reads anywhere. */
|
|
17
23
|
.gs__art { position: absolute; inset: 0; }
|
|
18
|
-
.gs__art::after { content: ""; position: absolute; inset: 0; background: var(--scrim); }
|
|
24
|
+
.gs--load .gs__art::after { content: ""; position: absolute; inset: 0; background: var(--scrim); }
|
|
19
25
|
.gs__img { width: 100%; height: 100%; object-fit: cover; display: block; }
|
|
20
26
|
|
|
21
|
-
/* the two
|
|
27
|
+
/* the two panels: night over the art, an ice hairline left and right, no corner, no shadow */
|
|
22
28
|
.gs__menu, .gs__load {
|
|
23
|
-
position: relative;
|
|
24
|
-
background: var(--
|
|
29
|
+
position: relative; box-sizing: border-box;
|
|
30
|
+
background: var(--night-glass);
|
|
31
|
+
border: 0 solid var(--rule); border-left-width: var(--line-strong); border-right-width: var(--line-strong);
|
|
25
32
|
}
|
|
26
33
|
.gs__menu[hidden], .gs__load[hidden] { display: none; }
|
|
27
34
|
|
|
28
|
-
/* the start screen: the
|
|
29
|
-
.gs__menu {
|
|
35
|
+
/* the start screen: the mark and the name, the five choices, one line at the foot */
|
|
36
|
+
.gs__menu {
|
|
37
|
+
width: min(100%, var(--helm-panel-w)); min-height: 100%; flex: none;
|
|
38
|
+
display: flex; flex-direction: column; justify-content: space-between; gap: var(--ds-space-lg);
|
|
39
|
+
padding: var(--ds-space-xl) 0 var(--ds-space-lg);
|
|
40
|
+
}
|
|
41
|
+
.gs__top { display: flex; flex-direction: column; gap: var(--ds-space-xl); }
|
|
42
|
+
.gs__head { display: flex; flex-direction: column; gap: var(--ds-space-md); padding: 0 var(--ds-space-lg); }
|
|
43
|
+
.gs__mark { display: block; width: var(--helm-mark); height: var(--helm-mark); object-fit: contain; --mark-ink: var(--ink); }
|
|
30
44
|
.gs__title {
|
|
31
|
-
margin:
|
|
32
|
-
font-family: var(--
|
|
45
|
+
margin: 0; overflow-wrap: anywhere;
|
|
46
|
+
font-family: var(--name-face); font-size: var(--ds-text-headline); font-weight: var(--name-weight);
|
|
47
|
+
letter-spacing: var(--name-space-wide); text-transform: var(--name-case); line-height: 1.15;
|
|
48
|
+
color: var(--ink); text-shadow: var(--name-glow);
|
|
33
49
|
}
|
|
34
|
-
.gs__items { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column;
|
|
50
|
+
.gs__items { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
|
|
35
51
|
.gs__items[hidden] { display: none; }
|
|
36
|
-
.gs__items--extras { margin-top: var(--ds-space-sm); flex-direction: row; flex-wrap: wrap; justify-content: center; }
|
|
37
52
|
.gs__item {
|
|
38
|
-
display: flex; align-items: center; justify-content:
|
|
39
|
-
width: 100%; min-height:
|
|
40
|
-
background: transparent; color:
|
|
41
|
-
|
|
53
|
+
display: flex; align-items: center; justify-content: space-between; box-sizing: border-box;
|
|
54
|
+
width: 100%; min-height: var(--helm-row); padding: var(--ds-space-hair) var(--ds-space-lg);
|
|
55
|
+
background: transparent; color: var(--ink); border: 0; border-bottom: var(--line) solid var(--rule-soft);
|
|
56
|
+
font-family: var(--name-face); font-size: var(--ds-text-5xl); font-weight: 400;
|
|
57
|
+
letter-spacing: var(--name-space); text-transform: var(--name-case); text-align: left;
|
|
42
58
|
text-decoration: none; cursor: pointer;
|
|
43
|
-
transition: background-color
|
|
59
|
+
transition: background-color var(--ds-dur-fast) var(--ds-ease);
|
|
60
|
+
}
|
|
61
|
+
.gs__items > li:last-child > .gs__item { border-bottom-color: transparent; }
|
|
62
|
+
.gs__item:hover { background: var(--glass); color: var(--ink); text-decoration: none; }
|
|
63
|
+
/* the ring sits inside the row: the focus colour on the edge, a band of the night inside it, so
|
|
64
|
+
one of the two reads on the accent bar as well as on the panel */
|
|
65
|
+
.gs__item:focus-visible { outline: 0; border-radius: var(--press-radius); box-shadow: var(--press-focus); }
|
|
66
|
+
/* Start is the one thing lit: the accent bar under its dark ink, with the key that takes it */
|
|
67
|
+
.gs__item[data-gs="start"] {
|
|
68
|
+
background: var(--accent); color: var(--accent-on); border-bottom-color: transparent;
|
|
69
|
+
font-weight: var(--name-weight-lit); box-shadow: var(--accent-glow);
|
|
70
|
+
}
|
|
71
|
+
.gs__item[data-gs="start"]:hover { background: var(--accent-lift); color: var(--accent-on); }
|
|
72
|
+
.gs__item[data-gs="start"]:focus-visible { box-shadow: var(--press-focus), var(--accent-glow); }
|
|
73
|
+
.gs__item[data-gs="start"]::after {
|
|
74
|
+
content: "Enter"; padding: 0 var(--ds-space-hair);
|
|
75
|
+
border: var(--line-strong) solid currentColor;
|
|
76
|
+
font-size: var(--ds-text-md); letter-spacing: var(--label-space);
|
|
77
|
+
}
|
|
78
|
+
/* Extras: three quieter rows, stepped in under the menu */
|
|
79
|
+
.gs__items--extras { border-top: var(--line) solid var(--rule-soft); }
|
|
80
|
+
.gs__item--extra {
|
|
81
|
+
min-height: var(--ds-space-xl); padding-left: var(--ds-space-xl);
|
|
82
|
+
font-size: var(--ds-text-xl); letter-spacing: var(--name-space-tight); color: var(--ink-soft);
|
|
44
83
|
}
|
|
45
|
-
|
|
46
|
-
.
|
|
47
|
-
|
|
48
|
-
.
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
84
|
+
/* the foot: one line said to you, over the strong hairline */
|
|
85
|
+
.gs__foot { padding: var(--ds-space-md) var(--ds-space-lg) 0; border-top: var(--line-strong) solid var(--rule); }
|
|
86
|
+
.gs__line, .gs__note { margin: 0; font-size: var(--ds-text-lg); line-height: 1.5; text-wrap: pretty; color: var(--ink-soft); }
|
|
87
|
+
.gs__note { margin-top: var(--ds-space-xs); color: var(--ink); }
|
|
88
|
+
/* the view chooser in front of the menu (task 1005200): Game or Classic as two rows in the
|
|
89
|
+
panel's own voice, each with one line saying what it is; the view chosen last time is lit
|
|
90
|
+
with the accent on its edge and says so */
|
|
91
|
+
.gs__ask { margin: 0; padding: 0 var(--ds-space-lg) var(--ds-space-sm); font-size: var(--ds-text-lg); color: var(--ink-soft); }
|
|
92
|
+
.gs__ask[hidden] { display: none; }
|
|
93
|
+
.gs__item--view { flex-direction: column; align-items: flex-start; justify-content: center; gap: var(--ds-space-hair); padding-top: var(--ds-space-sm); padding-bottom: var(--ds-space-sm); }
|
|
94
|
+
.gs__item--last { box-shadow: inset var(--line-strong) 0 0 var(--accent); }
|
|
95
|
+
.gs__view { display: inline-flex; align-items: baseline; gap: var(--ds-space-sm); }
|
|
96
|
+
.gs__sub { font-family: var(--font-body); font-size: var(--ds-text-md); letter-spacing: 0; text-transform: none; color: var(--ink-soft); }
|
|
97
|
+
.gs__last { font-family: var(--font-body); font-size: var(--label-size); letter-spacing: var(--label-space); text-transform: uppercase; color: var(--accent); }
|
|
52
98
|
.gs__note[hidden] { display: none; }
|
|
53
99
|
|
|
54
|
-
/* the load screen: the
|
|
55
|
-
.gs__load {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
.
|
|
100
|
+
/* the load screen: the week it is showing, a segment per week, the city, and the tip under it */
|
|
101
|
+
.gs__load {
|
|
102
|
+
width: 100%; max-width: 44rem; padding: var(--ds-space-lg) var(--ds-space-md);
|
|
103
|
+
display: flex; flex-direction: column; gap: var(--ds-space-sm);
|
|
104
|
+
}
|
|
105
|
+
.gs__city { display: block; width: 100%; height: auto; max-height: 52vh; }
|
|
106
|
+
.gs__city[hidden], .gs__when[hidden], .gs__segs[hidden] { display: none; }
|
|
107
|
+
.gs__when {
|
|
108
|
+
margin: 0; color: var(--ink); font-variant-numeric: tabular-nums;
|
|
109
|
+
font-family: var(--name-face); font-size: var(--ds-text-xl); font-weight: var(--name-weight);
|
|
110
|
+
letter-spacing: var(--name-space); text-transform: var(--name-case);
|
|
111
|
+
}
|
|
112
|
+
.gs__tip {
|
|
113
|
+
margin: 0; padding-top: var(--ds-space-sm); border-top: var(--line) solid var(--rule-soft);
|
|
114
|
+
font-size: var(--ds-text-lg); line-height: 1.5; text-wrap: pretty; color: var(--ink-soft);
|
|
115
|
+
}
|
|
60
116
|
.gs__tip b {
|
|
61
|
-
display:
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
color: var(--ink-soft); vertical-align: middle;
|
|
117
|
+
display: block; margin-bottom: var(--ds-space-hair);
|
|
118
|
+
font-family: var(--name-face); font-size: var(--label-size); font-weight: var(--name-weight);
|
|
119
|
+
letter-spacing: var(--label-space); text-transform: var(--name-case); color: var(--ink);
|
|
65
120
|
}
|