@bongos/core 1.24.30 → 1.24.32
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 +153 -103
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +8 -0
- package/clients/bongos-client/index.cjs +8 -0
- package/clients/bongos-client/index.d.ts +8 -0
- package/clients/bongos-client/index.mjs +8 -0
- package/docs/api/openapi.json +139 -1
- package/docs/api-reference.md +7 -3
- package/docs/copy-inventory.md +192 -187
- package/docs/copy-registry.json +530 -458
- package/docs/module-api-changelog.md +4 -2
- package/docs/page-inventory.json +15 -35
- package/docs/page-readings.json +228 -265
- package/modules/copy-desk/module.json +1 -1
- package/modules/copy-desk/routes/copy-desk-studio.js +103 -0
- package/modules/copy-desk/tests/copy_no_cms.mjs +2 -2
- package/modules/hall-ui/public/ai-studio.html +1 -1
- package/modules/hall-ui/public/atlas.html +1 -1
- package/modules/hall-ui/public/blockers.html +1 -1
- package/modules/hall-ui/public/board-room.html +1 -1
- package/modules/hall-ui/public/city.html +1 -1
- package/modules/hall-ui/public/collab.html +1 -1
- package/modules/hall-ui/public/commands.html +1 -1
- package/modules/hall-ui/public/copy-desk.html +1 -1
- package/modules/hall-ui/public/craft-mode.js +1 -1
- package/modules/hall-ui/public/deploy.html +1 -1
- package/modules/hall-ui/public/diagrams.html +1 -1
- package/modules/hall-ui/public/drachmae.html +1 -1
- package/modules/hall-ui/public/fleet.html +1 -1
- package/modules/hall-ui/public/gate.html +1 -1
- package/modules/hall-ui/public/goal-map.html +1 -1
- package/modules/hall-ui/public/goals.html +1 -1
- package/modules/hall-ui/public/government.html +1 -1
- package/modules/hall-ui/public/hall-render.js +62 -86
- package/modules/hall-ui/public/home-city-draw.js +360 -52
- package/modules/hall-ui/public/home-city.css +47 -11
- package/modules/hall-ui/public/home-city.js +170 -40
- package/modules/hall-ui/public/home-gallery.css +129 -0
- package/modules/hall-ui/public/home-gallery.js +349 -0
- package/modules/hall-ui/public/home-studio.css +72 -0
- package/modules/hall-ui/public/home-studio.js +203 -0
- package/modules/hall-ui/public/idea.html +1 -1
- package/modules/hall-ui/public/ideas.html +1 -1
- package/modules/hall-ui/public/index.html +4 -1
- package/modules/hall-ui/public/market-watch-item.html +1 -1
- package/modules/hall-ui/public/market-watch-rules.html +1 -1
- package/modules/hall-ui/public/market-watch-settings.js +6 -1
- package/modules/hall-ui/public/market-watch.html +141 -54
- package/modules/hall-ui/public/market-watch.js +54 -0
- package/modules/hall-ui/public/market-watch.states.json +2 -1
- package/modules/hall-ui/public/modules.html +1 -1
- package/modules/hall-ui/public/my-agents.html +1 -1
- package/modules/hall-ui/public/primer.html +1 -1
- package/modules/hall-ui/public/profile.html +1 -1
- package/modules/hall-ui/public/project-settings.html +1 -1
- package/modules/hall-ui/public/ranks.html +1 -1
- package/modules/hall-ui/public/roadmap.html +1 -1
- package/modules/hall-ui/public/roster.html +1 -1
- package/modules/hall-ui/public/sessions.html +1 -1
- package/modules/hall-ui/public/settings.html +1 -1
- package/modules/hall-ui/public/shell.js +2 -3
- package/modules/hall-ui/public/street.html +1 -1
- package/modules/hall-ui/public/studio.html +9 -1
- package/modules/hall-ui/public/style.css +74 -27
- package/modules/hall-ui/public/task.html +1 -1
- package/modules/hall-ui/public/thinking.html +1 -1
- package/modules/hall-ui/public/tweak-editor.html +1 -1
- package/modules/hall-ui/public/watch.html +1 -1
- package/modules/hall-ui/public/work.html +1 -1
- package/modules/hall-ui/records/home-city.md +133 -0
- package/modules/hall-ui/records/loader.md +1 -1
- package/modules/hall-ui/records/market-watch-settings.md +16 -3
- package/modules/hall-ui/records/market-watch.md +3 -1
- package/modules/lifecycle/home-city.js +58 -10
- package/modules/lifecycle/home-gallery.js +320 -0
- package/modules/lifecycle/migrations/lifecycle_020_work_appreciations.sql +36 -0
- package/modules/lifecycle/module.json +1 -0
- package/modules/lifecycle/routes/home-gallery.js +37 -0
- package/modules/market-watch/routes/settings.js +1 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +35 -1
- package/scripts/bongos/leak-scan-allowlist.js +8 -0
- package/scripts/hall-preview/README.md +1 -0
- package/scripts/hall-preview/server.js +10 -0
- package/src/bongos/serve-internal.js +17 -3
- package/src/module-api.js +1 -1
- package/tests/hall_builders_page_pass.mjs +18 -27
- package/tests/hall_loading.mjs +1 -1
- package/tests/hall_nav.mjs +11 -4
- package/tests/hall_page_gate_map.mjs +7 -4
- package/tests/home_city.mjs +200 -5
- package/tests/home_city_widget.mjs +187 -27
- package/tests/home_gallery.mjs +255 -0
- package/tests/home_gallery_widget.mjs +220 -0
- package/tests/home_studio.mjs +169 -0
- package/tests/home_studio_widget.mjs +157 -0
- package/tests/market_watch_pages.mjs +162 -0
- package/tests/nav_permission_atoms.mjs +2 -2
- package/modules/hall-ui/public/market-watch-settings.html +0 -115
- package/modules/hall-ui/public/market-watch-settings.states.json +0 -14
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
<link rel="stylesheet" href="/builders/welcome-boot.css?v=2026-10-23-city1">
|
|
23
23
|
<link rel="stylesheet" href="/builders/hall-ask.css">
|
|
24
24
|
<link rel="stylesheet" href="/builders/home-city.css">
|
|
25
|
+
<link rel="stylesheet" href="/builders/home-gallery.css">
|
|
25
26
|
</head>
|
|
26
27
|
<body data-page="home">
|
|
27
28
|
|
|
@@ -122,7 +123,7 @@
|
|
|
122
123
|
<script src="/builders/welcome-boot.js?v=2026-10-23-city1" defer></script>
|
|
123
124
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab" defer></script>
|
|
124
125
|
<script src="/builders/craft-mode.js?v=2026-10-30-market-watch" defer></script>
|
|
125
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
126
|
+
<script src="/builders/shell.js?v=2026-11-04-one-market-watch" defer></script>
|
|
126
127
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
127
128
|
<script src="/builders/palette.js" defer></script>
|
|
128
129
|
<!-- task 2166: the shared component kit (window.OTBKit) — pager/ledger/rail.
|
|
@@ -141,7 +142,9 @@
|
|
|
141
142
|
<script src="/builders/genesis-home.js?v=2026-10-01-genesis" defer></script>
|
|
142
143
|
<!-- task 1005054: the project city — the drawing (pure) and the widget — in the
|
|
143
144
|
home-stats zone; the Goals card (goals.js) left Home with it. -->
|
|
145
|
+
<script src="/builders/city-draw.js" defer></script>
|
|
144
146
|
<script src="/builders/home-city-draw.js" defer></script>
|
|
147
|
+
<script src="/builders/home-gallery.js" defer></script>
|
|
145
148
|
<script src="/builders/home-city.js" defer></script>
|
|
146
149
|
<!-- task 1003455: the shared blocker-row renderer (window.OTBBlockersLib), read by
|
|
147
150
|
both goal-inbox.js's attention-inbox slice below and the /blockers page.
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
<script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
|
|
75
75
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
76
76
|
<script src="/builders/craft-mode.js?v=2026-10-09-living3"></script>
|
|
77
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
77
|
+
<script src="/builders/shell.js?v=2026-11-04-one-market-watch"></script>
|
|
78
78
|
<script src="/builders/palette.js" defer></script>
|
|
79
79
|
<script src="/builders/hall-kit.js"></script>
|
|
80
80
|
<script src="/builders/market-watch-lib.js"></script>
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
<script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
|
|
44
44
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
45
45
|
<script src="/builders/craft-mode.js?v=2026-10-30-market-watch"></script>
|
|
46
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
46
|
+
<script src="/builders/shell.js?v=2026-11-04-one-market-watch"></script>
|
|
47
47
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
48
48
|
<script src="/builders/palette.js" defer></script>
|
|
49
49
|
<script src="/builders/hall-kit.js"></script>
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
// market-watch-settings.js — the owner's Market Watch settings (task 1004938, goal 1000137),
|
|
2
2
|
// built to docs/design/mocks/market-watch/settings.html, option B, the fuel gauge.
|
|
3
3
|
//
|
|
4
|
+
// Since task 1005045 this draws the owner's Settings tab on /market-watch (the page of its
|
|
5
|
+
// own is gone, and its URL redirects to /market-watch#settings). It does not boot itself:
|
|
6
|
+
// market-watch.js calls OTBMarketWatchSettings.load() only for the owner, so no other
|
|
7
|
+
// viewer's page ever asks for the settings.
|
|
8
|
+
//
|
|
4
9
|
// One read and three writes, all owner-only on the server (the project.settings.manage atom plus the owner seat):
|
|
5
10
|
// GET /market-watch/settings everything drawn here
|
|
6
11
|
// PATCH /market-watch/settings { enabled } | { monthly_cap_usd } | { cadence }
|
|
@@ -226,5 +231,5 @@
|
|
|
226
231
|
else if (r.message) error(r.message);
|
|
227
232
|
}
|
|
228
233
|
|
|
229
|
-
|
|
234
|
+
window.OTBMarketWatchSettings = { load };
|
|
230
235
|
})();
|
|
@@ -10,6 +10,7 @@
|
|
|
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
12
|
<link rel="stylesheet" href="/builders/market-watch.css">
|
|
13
|
+
<link rel="stylesheet" href="/builders/market-watch-settings.css">
|
|
13
14
|
</head>
|
|
14
15
|
<body data-page="market-watch" data-page-title="Market Watch">
|
|
15
16
|
|
|
@@ -25,70 +26,155 @@
|
|
|
25
26
|
</div>
|
|
26
27
|
|
|
27
28
|
<main id="hall-main">
|
|
28
|
-
|
|
29
|
+
<!-- task 1005045: the owner's tabs. Hidden for everyone else, who see the watch
|
|
30
|
+
alone; market-watch.js builds the strip only for the owner (cosmetic: the
|
|
31
|
+
settings routes are the wall, ADR 0016). #settings is where the old
|
|
32
|
+
/market-watch-settings URL lands. -->
|
|
33
|
+
<div id="mw-tabs" hidden></div>
|
|
29
34
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
<span class="mw-label">market watch</span>
|
|
33
|
-
<p>Market Watch is off on this project.</p>
|
|
34
|
-
<p class="mw-quiet">An owner can turn it on from <a href="/modules">Modules</a>.</p>
|
|
35
|
-
</section>
|
|
36
|
-
|
|
37
|
-
<section class="mw-panel mw-off" id="mw-fail" hidden>
|
|
38
|
-
<p id="mw-fail-text">Could not read the watch. Try reloading the page.</p>
|
|
39
|
-
</section>
|
|
35
|
+
<div id="mw-panel-watch">
|
|
36
|
+
<p class="hall-loading hall-loading--page" id="mw-loading" role="status">Loading the watch…</p>
|
|
40
37
|
|
|
41
|
-
|
|
42
|
-
<section class="mw-panel"
|
|
43
|
-
<span class="mw-label"
|
|
44
|
-
<p
|
|
45
|
-
<
|
|
46
|
-
<button class="btn btn--ghost mw-send" type="button" id="mw-send">+ send a new scout</button>
|
|
47
|
-
<span class="mw-label" style="margin-top:16px">streak</span>
|
|
48
|
-
<div class="mw-streak" id="mw-streak"></div>
|
|
49
|
-
<a class="mw-rules-link" href="/market-watch-rules">the watch rules, and what members proposed →</a>
|
|
50
|
-
<div class="mw-pins" id="mw-pins" hidden>
|
|
51
|
-
<span class="mw-label">pinned</span>
|
|
52
|
-
<div id="mw-pin-list"></div>
|
|
53
|
-
</div>
|
|
38
|
+
<!-- Market Watch is off on this project: a quiet line, never an error. -->
|
|
39
|
+
<section class="mw-panel mw-off" id="mw-off" hidden>
|
|
40
|
+
<span class="mw-label">market watch</span>
|
|
41
|
+
<p>Market Watch is off on this project.</p>
|
|
42
|
+
<p class="mw-quiet">An owner can turn it on from <a href="/modules">Modules</a>.</p>
|
|
54
43
|
</section>
|
|
55
44
|
|
|
56
|
-
<section class="mw-panel mw-
|
|
57
|
-
<
|
|
58
|
-
<label for="mw-ax">across</label> <select id="mw-ax"></select>
|
|
59
|
-
<label for="mw-ay">up</label> <select id="mw-ay"></select>
|
|
60
|
-
<span class="mw-sp"></span>
|
|
61
|
-
<span class="mw-key"><i class="mw-dot" style="background:var(--accent)"></i> new signal</span>
|
|
62
|
-
<span class="mw-key"><i class="mw-dot" style="background:var(--ink)"></i> us</span>
|
|
63
|
-
</div>
|
|
64
|
-
<div class="mw-scope" id="mw-scope"></div>
|
|
65
|
-
<div class="mw-scope-tools mw-open">
|
|
66
|
-
<label for="mw-open">open a case file</label> <select id="mw-open"></select>
|
|
67
|
-
</div>
|
|
45
|
+
<section class="mw-panel mw-off" id="mw-fail" hidden>
|
|
46
|
+
<p id="mw-fail-text">Could not read the watch. Try reloading the page.</p>
|
|
68
47
|
</section>
|
|
69
48
|
|
|
70
|
-
<div class="mw-
|
|
71
|
-
<section class="mw-panel" aria-labelledby="mw-
|
|
72
|
-
<span class="mw-label" id="mw-
|
|
73
|
-
<
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
</div>
|
|
49
|
+
<div class="mw-desk" id="mw-desk" hidden>
|
|
50
|
+
<section class="mw-panel" aria-labelledby="mw-scouts-h">
|
|
51
|
+
<span class="mw-label" id="mw-scouts-h">your scouts</span>
|
|
52
|
+
<p class="mw-watched" id="mw-watched"></p>
|
|
53
|
+
<div id="mw-scouts"></div>
|
|
54
|
+
<button class="btn btn--ghost mw-send" type="button" id="mw-send">+ send a new scout</button>
|
|
55
|
+
<span class="mw-label" style="margin-top:16px">streak</span>
|
|
56
|
+
<div class="mw-streak" id="mw-streak"></div>
|
|
57
|
+
<a class="mw-rules-link" href="/market-watch-rules">the watch rules, and what members proposed →</a>
|
|
58
|
+
<div class="mw-pins" id="mw-pins" hidden>
|
|
59
|
+
<span class="mw-label">pinned</span>
|
|
60
|
+
<div id="mw-pin-list"></div>
|
|
83
61
|
</div>
|
|
84
62
|
</section>
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
<div class="mw-
|
|
88
|
-
|
|
63
|
+
|
|
64
|
+
<section class="mw-panel mw-scope-wrap" aria-label="The landscape">
|
|
65
|
+
<div class="mw-scope-tools">
|
|
66
|
+
<label for="mw-ax">across</label> <select id="mw-ax"></select>
|
|
67
|
+
<label for="mw-ay">up</label> <select id="mw-ay"></select>
|
|
68
|
+
<span class="mw-sp"></span>
|
|
69
|
+
<span class="mw-key"><i class="mw-dot" style="background:var(--accent)"></i> new signal</span>
|
|
70
|
+
<span class="mw-key"><i class="mw-dot" style="background:var(--ink)"></i> us</span>
|
|
71
|
+
</div>
|
|
72
|
+
<div class="mw-scope" id="mw-scope"></div>
|
|
73
|
+
<div class="mw-scope-tools mw-open">
|
|
74
|
+
<label for="mw-open">open a case file</label> <select id="mw-open"></select>
|
|
75
|
+
</div>
|
|
89
76
|
</section>
|
|
77
|
+
|
|
78
|
+
<div class="mw-side">
|
|
79
|
+
<section class="mw-panel" aria-labelledby="mw-sweep-h">
|
|
80
|
+
<span class="mw-label" id="mw-sweep-h">next sweep</span>
|
|
81
|
+
<div class="mw-fuel">
|
|
82
|
+
<div>
|
|
83
|
+
<div class="mw-count mw-num" id="mw-cd"></div>
|
|
84
|
+
<div class="mw-when" id="mw-when"></div>
|
|
85
|
+
</div>
|
|
86
|
+
<span class="mw-sp" style="flex:1"></span>
|
|
87
|
+
<div>
|
|
88
|
+
<div class="mw-tank" id="mw-tank"><i id="mw-tank-fill"></i></div>
|
|
89
|
+
<div class="mw-left mw-num" id="mw-left"></div>
|
|
90
|
+
</div>
|
|
91
|
+
</div>
|
|
92
|
+
</section>
|
|
93
|
+
<section class="mw-panel" aria-labelledby="mw-reps-h">
|
|
94
|
+
<span class="mw-label" id="mw-reps-h">reports in · this week</span>
|
|
95
|
+
<div class="mw-xp"><span class="mw-num" id="mw-xpn"></span><span class="mw-xp__b"><i id="mw-xpb" style="width:0"></i></span><span>read</span></div>
|
|
96
|
+
<div id="mw-reps"></div>
|
|
97
|
+
</section>
|
|
98
|
+
</div>
|
|
90
99
|
</div>
|
|
91
100
|
</div>
|
|
101
|
+
|
|
102
|
+
<!-- The owner's Market Watch settings (task 1004938's page, a tab since task 1005045). -->
|
|
103
|
+
<section id="mw-panel-settings" aria-label="Market Watch settings" hidden>
|
|
104
|
+
<!-- The page loader (records/loader.md), shown until the settings read reveals a
|
|
105
|
+
section below, so an owner landing on #settings never sees a blank panel. -->
|
|
106
|
+
<p class="hall-loading hall-loading--page hall-loading--wait" role="status">Loading…</p>
|
|
107
|
+
<!-- What a reader who is not the owner sees. The routes are the wall (403); this is
|
|
108
|
+
only what stands in for an empty gauge. -->
|
|
109
|
+
<section class="scroll" id="mws-sealed" aria-labelledby="mws-sealed-h" hidden>
|
|
110
|
+
<h2 class="scroll__h" id="mws-sealed-h">Owner only</h2>
|
|
111
|
+
<p class="scroll__lede">Only the project owner can see and change Market Watch settings.</p>
|
|
112
|
+
</section>
|
|
113
|
+
|
|
114
|
+
<section class="scroll" id="mws-off" aria-labelledby="mws-off-h" hidden>
|
|
115
|
+
<h2 class="scroll__h" id="mws-off-h">Market Watch is not on this project</h2>
|
|
116
|
+
<p class="scroll__lede">Turn the Market Watch module on under <a href="/modules">Modules</a> first. Its settings appear here once it is running.</p>
|
|
117
|
+
</section>
|
|
118
|
+
|
|
119
|
+
<p class="mws-error" id="mws-error" role="alert" hidden></p>
|
|
120
|
+
|
|
121
|
+
<!-- The fuel gauge (docs/design/mocks/market-watch/settings.html, option B). Drawn
|
|
122
|
+
by market-watch-settings.js from GET /market-watch/settings. -->
|
|
123
|
+
<section class="scroll mws" id="mws-body" aria-label="Market Watch settings" hidden>
|
|
124
|
+
<div class="mws-hero">
|
|
125
|
+
<div class="mws-ring" id="mws-ring">
|
|
126
|
+
<svg viewBox="0 0 100 100" aria-hidden="true">
|
|
127
|
+
<circle class="mws-ring__track" cx="50" cy="50" r="44" pathLength="100"/>
|
|
128
|
+
<circle class="mws-ring__spent" id="mws-arc" cx="50" cy="50" r="44" pathLength="100" stroke-dasharray="0 100"/>
|
|
129
|
+
<circle class="mws-ring__next" id="mws-arc2" cx="50" cy="50" r="44" pathLength="100" stroke-dasharray="0 100"/>
|
|
130
|
+
</svg>
|
|
131
|
+
<div class="mws-ring__c">
|
|
132
|
+
<div>
|
|
133
|
+
<div class="mws-ring__big" id="mws-spent">$0</div>
|
|
134
|
+
<div class="mws-soft" id="mws-of"></div>
|
|
135
|
+
<div class="mws-pill" id="mws-left"></div>
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
</div>
|
|
139
|
+
|
|
140
|
+
<div class="mws-controls">
|
|
141
|
+
<button type="button" class="mws-power" id="mws-power" aria-pressed="false">
|
|
142
|
+
<span id="mws-power-t">Market Watch is off</span><i aria-hidden="true">⏻</i>
|
|
143
|
+
</button>
|
|
144
|
+
|
|
145
|
+
<div class="mws-slide">
|
|
146
|
+
<label class="mws-soft" for="mws-cap">monthly AI cap</label>
|
|
147
|
+
<span class="mws-cap" id="mws-cap-t">$20</span>
|
|
148
|
+
<input type="range" min="5" max="60" step="5" value="20" id="mws-cap">
|
|
149
|
+
<span class="mws-soft" id="mws-hint"></span>
|
|
150
|
+
</div>
|
|
151
|
+
|
|
152
|
+
<div class="mws-cad" id="mws-cad" role="group" aria-label="how often it runs">
|
|
153
|
+
<button type="button" class="mws-chip" data-c="weekly">weekly</button>
|
|
154
|
+
<button type="button" class="mws-chip" data-c="biweekly">every 2 weeks</button>
|
|
155
|
+
<button type="button" class="mws-chip" data-c="monthly">monthly</button>
|
|
156
|
+
</div>
|
|
157
|
+
</div>
|
|
158
|
+
</div>
|
|
159
|
+
|
|
160
|
+
<div class="mws-lbl" id="mws-weeks-h">the last weeks</div>
|
|
161
|
+
<ol class="mws-weeks" id="mws-weeks" aria-labelledby="mws-weeks-h"></ol>
|
|
162
|
+
<div class="mws-legend" id="mws-legend"></div>
|
|
163
|
+
|
|
164
|
+
<!-- The project's own Anthropic key: write-only. The page only ever learns whether
|
|
165
|
+
one is set; it can replace it or clear it, never read it. -->
|
|
166
|
+
<div class="mws-lbl">anthropic key</div>
|
|
167
|
+
<div class="mws-key" id="mws-key">
|
|
168
|
+
<span class="mws-key__state" id="mws-key-state">not set</span>
|
|
169
|
+
<input type="password" id="mws-key-in" autocomplete="off" spellcheck="false" placeholder="paste the project's key" aria-label="the project's Anthropic key">
|
|
170
|
+
<button type="button" class="btn" id="mws-key-save">Save</button>
|
|
171
|
+
<button type="button" class="btn btn--ghost" id="mws-key-clear" hidden>Clear</button>
|
|
172
|
+
</div>
|
|
173
|
+
<p class="mws-soft mws-key__note" id="mws-key-note">Runs use this key, so the project's Anthropic account pays for them. It is stored encrypted and never shown again.</p>
|
|
174
|
+
<a class="mw-rules-link" href="/market-watch-rules">the watch rules, and what members proposed →</a>
|
|
175
|
+
</section>
|
|
176
|
+
</section>
|
|
177
|
+
<!-- /mw-panel-settings -->
|
|
92
178
|
</main>
|
|
93
179
|
|
|
94
180
|
<footer class="app-foot" id="app-foot"></footer>
|
|
@@ -102,10 +188,11 @@
|
|
|
102
188
|
<script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
|
|
103
189
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
104
190
|
<script src="/builders/craft-mode.js?v=2026-10-09-living3"></script>
|
|
105
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
191
|
+
<script src="/builders/shell.js?v=2026-11-04-one-market-watch"></script>
|
|
106
192
|
<script src="/builders/palette.js" defer></script>
|
|
107
193
|
<script src="/builders/hall-kit.js"></script>
|
|
108
194
|
<script src="/builders/market-watch-lib.js"></script>
|
|
195
|
+
<script src="/builders/market-watch-settings.js"></script>
|
|
109
196
|
<script src="/builders/market-watch.js"></script>
|
|
110
197
|
</body>
|
|
111
198
|
</html>
|
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
// record docs/design/mocks/market-watch/home.html, option D). One read,
|
|
3
3
|
// GET /market-watch/home, which every signed-in member may make. Where the module is off
|
|
4
4
|
// its routes do not exist, so the page shows its quiet off state rather than an error.
|
|
5
|
+
//
|
|
6
|
+
// task 1005045: the owner also gets a Settings tab here (task 1004938's settings page,
|
|
7
|
+
// folded in so the sidebar says "Market Watch" once). Owner means archon on /me, and it is
|
|
8
|
+
// cosmetic: the four settings routes are the wall (ADR 0016). Everyone else gets no tab
|
|
9
|
+
// strip at all, and their page never asks for the settings.
|
|
5
10
|
(() => {
|
|
6
11
|
'use strict';
|
|
7
12
|
|
|
@@ -102,8 +107,57 @@
|
|
|
102
107
|
});
|
|
103
108
|
}
|
|
104
109
|
|
|
110
|
+
// The viewer's rank, or null when /me cannot say. Unknown is not an owner.
|
|
111
|
+
// The shell already asks /me once on every hall page and shares the answer on
|
|
112
|
+
// window.__hallReads (the gov-feeds.js precedent), so this adopts that read rather
|
|
113
|
+
// than paying a second round trip; it asks itself only where the shell did not.
|
|
114
|
+
async function viewerRank() {
|
|
115
|
+
try {
|
|
116
|
+
const shared = window.__hallReads && window.__hallReads['/me'];
|
|
117
|
+
let me;
|
|
118
|
+
if (shared) {
|
|
119
|
+
me = await shared; // the data, false on a 403, or null when unreadable
|
|
120
|
+
} else {
|
|
121
|
+
const res = await fetch('/api/bongos/me', { credentials: 'same-origin' });
|
|
122
|
+
me = res.ok ? await res.json() : null;
|
|
123
|
+
}
|
|
124
|
+
const b = (me && (me.builder || me)) || {};
|
|
125
|
+
return b.rank ? String(b.rank).toLowerCase() : null;
|
|
126
|
+
} catch (_) {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// The owner's two tabs. #settings is the address the old /market-watch-settings URL
|
|
132
|
+
// redirects to, so the ids are the contract.
|
|
133
|
+
function mountOwnerTabs() {
|
|
134
|
+
$('mw-tabs').hidden = false;
|
|
135
|
+
window.OTBKit.makeTabs({
|
|
136
|
+
mount: $('mw-tabs'),
|
|
137
|
+
hash: true,
|
|
138
|
+
initial: 'watch',
|
|
139
|
+
tabs: [
|
|
140
|
+
{ id: 'watch', label: 'Watch', panel: 'mw-panel-watch' },
|
|
141
|
+
{ id: 'settings', label: 'Settings', panel: 'mw-panel-settings' },
|
|
142
|
+
],
|
|
143
|
+
});
|
|
144
|
+
window.OTBMarketWatchSettings.load();
|
|
145
|
+
}
|
|
146
|
+
|
|
105
147
|
async function load() {
|
|
106
148
|
if (moduleOff()) return show('mw-off');
|
|
149
|
+
const rank = viewerRank();
|
|
150
|
+
await loadDesk();
|
|
151
|
+
// Where the module's routes are not mounted there is nothing to set, so no tab.
|
|
152
|
+
// A watch that failed to READ (mw-fail) still gets the tab on purpose: the settings
|
|
153
|
+
// are their own read, and a broken watch must not lock the owner out of its switch,
|
|
154
|
+
// cap and key — the old settings page never depended on the desk either. The failure
|
|
155
|
+
// line stays on the Watch tab, where it belongs.
|
|
156
|
+
if (!$('mw-off').hidden) return;
|
|
157
|
+
if ((await rank) === 'archon') mountOwnerTabs();
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
async function loadDesk() {
|
|
107
161
|
let res;
|
|
108
162
|
try {
|
|
109
163
|
res = await fetch('/api/bongos/market-watch/home', { credentials: 'same-origin' });
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_": "MARKET WATCH HOME, the watchtower desk (task 1004939; design of record docs/design/mocks/market-watch/home.html, option D). One read, GET /market-watch/home. Against the kit's own stub it 404s, which the page reads as the module being off, so the stub render is the quiet off state. The populated desk needs the hall-preview harness with the module reported on; its market-watch__home.json fixture was built from the committed 2026-10-28 seed through the real shapes (tests/fixtures/market-watch-seed-rows.cjs):\n\n node scripts/hall-preview/server.js --port 4639 --fixture-me --modules-on market-watch\n node modules/ui-design/kit/render.js --states modules/hall-ui/public/market-watch.states.json --base-in http://localhost:4639 --base-out http://localhost:4639",
|
|
2
|
+
"_": "MARKET WATCH HOME, the watchtower desk (task 1004939; design of record docs/design/mocks/market-watch/home.html, option D). One read, GET /market-watch/home. Against the kit's own stub it 404s, which the page reads as the module being off, so the stub render is the quiet off state. The populated desk needs the hall-preview harness with the module reported on; its market-watch__home.json fixture was built from the committed 2026-10-28 seed through the real shapes (tests/fixtures/market-watch-seed-rows.cjs):\n\n node scripts/hall-preview/server.js --port 4639 --fixture-me --modules-on market-watch --rank archon\n node modules/ui-design/kit/render.js --states modules/hall-ui/public/market-watch.states.json --base-in http://localhost:4639 --base-out http://localhost:4639\n\nThe 'settings' state is the owner's Settings tab (task 1005045; task 1004938's page before it), drawn from GET /market-watch/settings (the harness's market-watch__settings.json, the mockup's month). Only an archon viewer gets the tab, so the harness needs --rank archon; for anyone else the state renders the desk with no tab strip.",
|
|
3
3
|
"page": "/builders/market-watch",
|
|
4
4
|
"surface": "hall-ui",
|
|
5
5
|
"stub": { "prefix": "/builders/" },
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"ignoreConsole": ["/api/(gds|bongos)/", "\\b401\\b", "\\b403\\b", "\\b404\\b", "Unauthorized", "Forbidden", "Not Found", "load failed"],
|
|
9
9
|
"states": {
|
|
10
10
|
"desk": { "auth": true, "actions": [["wait", 900], ["clickIfVisible", "[data-craft-close]"], ["wait", 200]], "expect": { "visible": ["#mw-desk", "#mw-scope svg"] } },
|
|
11
|
+
"settings": { "auth": true, "actions": [["wait", 900], ["clickIfVisible", "[data-craft-close]"], ["clickIfVisible", "#tab-settings"], ["wait", 300]] },
|
|
11
12
|
"out": { "auth": false, "actions": [["wait", 600], ["clickIfVisible", "[data-craft-close]"]] }
|
|
12
13
|
},
|
|
13
14
|
"reducedMotion": { "auth": true, "actions": [["wait", 900], ["clickIfVisible", "[data-craft-close]"], ["wait", 200]] }
|
|
@@ -128,7 +128,7 @@
|
|
|
128
128
|
<script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
|
|
129
129
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
130
130
|
<script src="/builders/craft-mode.js?v=2026-10-30-market-watch"></script>
|
|
131
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
131
|
+
<script src="/builders/shell.js?v=2026-11-04-one-market-watch"></script>
|
|
132
132
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
133
133
|
<script src="/builders/palette.js" defer></script>
|
|
134
134
|
<script src="/builders/brand-apply.js"></script>
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
<script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
|
|
85
85
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
86
86
|
<script src="/builders/craft-mode.js?v=2026-10-30-market-watch"></script>
|
|
87
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
87
|
+
<script src="/builders/shell.js?v=2026-11-04-one-market-watch"></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>
|
|
90
90
|
<script src="/builders/gov-living.js?v=2026-10-10-real1"></script>
|
|
@@ -113,7 +113,7 @@
|
|
|
113
113
|
<script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
|
|
114
114
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
115
115
|
<script src="/builders/craft-mode.js?v=2026-10-30-market-watch"></script>
|
|
116
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
116
|
+
<script src="/builders/shell.js?v=2026-11-04-one-market-watch"></script>
|
|
117
117
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
118
118
|
<script src="/builders/palette.js" defer></script>
|
|
119
119
|
<!-- the shared markdown reader (window.OTBMdReader) — primer.js renders through
|
|
@@ -208,7 +208,7 @@
|
|
|
208
208
|
<script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
|
|
209
209
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
210
210
|
<script src="/builders/craft-mode.js?v=2026-10-30-market-watch"></script>
|
|
211
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
211
|
+
<script src="/builders/shell.js?v=2026-11-04-one-market-watch"></script>
|
|
212
212
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
213
213
|
<script src="/builders/palette.js" defer></script>
|
|
214
214
|
<!-- task 1004727: the ONE karma vote control every task/idea list renders -->
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
<script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
|
|
88
88
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
89
89
|
<script src="/builders/craft-mode.js?v=2026-10-30-market-watch"></script>
|
|
90
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
90
|
+
<script src="/builders/shell.js?v=2026-11-04-one-market-watch"></script>
|
|
91
91
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
92
92
|
<script src="/builders/palette.js" defer></script>
|
|
93
93
|
<script src="/builders/hall-kit.js"></script>
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
<script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
|
|
75
75
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
76
76
|
<script src="/builders/craft-mode.js?v=2026-10-30-market-watch"></script>
|
|
77
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
77
|
+
<script src="/builders/shell.js?v=2026-11-04-one-market-watch"></script>
|
|
78
78
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
79
79
|
<script src="/builders/palette.js" defer></script>
|
|
80
80
|
<script src="/builders/founding-mark.js?v=2026-09-30-founding"></script>
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
<script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
|
|
45
45
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
46
46
|
<script src="/builders/craft-mode.js?v=2026-10-30-market-watch"></script>
|
|
47
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
47
|
+
<script src="/builders/shell.js?v=2026-11-04-one-market-watch"></script>
|
|
48
48
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
49
49
|
<script src="/builders/palette.js" defer></script>
|
|
50
50
|
<!-- The chart kit and the timeline's series builders (task 1003447). Both MUST
|
|
@@ -56,7 +56,7 @@
|
|
|
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
58
|
<script src="/builders/craft-mode.js?v=2026-10-30-market-watch"></script>
|
|
59
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
59
|
+
<script src="/builders/shell.js?v=2026-11-04-one-market-watch"></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. -->
|
|
@@ -114,7 +114,7 @@
|
|
|
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
116
|
<script src="/builders/craft-mode.js?v=2026-10-30-market-watch"></script>
|
|
117
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
117
|
+
<script src="/builders/shell.js?v=2026-11-04-one-market-watch"></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>
|
|
@@ -394,7 +394,7 @@
|
|
|
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
396
|
<script src="/builders/craft-mode.js?v=2026-10-30-market-watch"></script>
|
|
397
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
397
|
+
<script src="/builders/shell.js?v=2026-11-04-one-market-watch"></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). -->
|
|
@@ -126,7 +126,6 @@
|
|
|
126
126
|
settings: '<circle cx="9" cy="9" r="2.5"/><path d="M9 2.5v2m0 9v2M2.5 9h2m9 0h2M4.4 4.4l1.4 1.4m6.4 6.4 1.4 1.4m0-9.2-1.4 1.4M5.8 12.2l-1.4 1.4"/>',
|
|
127
127
|
deploy: '<path d="M9 12V3M5.5 6.5 9 3l3.5 3.5M3 12.5v2a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1v-2"/>',
|
|
128
128
|
fleet: '<path d="M4 2.5h10v13l-1.7-1-1.6 1-1.7-1-1.7 1-1.6-1-1.7 1v-13Z"/><path d="M6.5 6h5M6.5 9h5M6.5 12h3"/>',
|
|
129
|
-
fuel: '<path d="M3 13a6 6 0 1 1 12 0"/><path d="M9 13l3-4"/>',
|
|
130
129
|
permissions: '<circle cx="6" cy="12" r="3.5"/><path d="M8.5 9.5 15 3M12.5 5.5l2 2M10.5 7.5l1.5 1.5"/>',
|
|
131
130
|
// The governor city: a pediment over columns, the Governing mode's own glyph.
|
|
132
131
|
city: '<path d="M2.5 7 9 3l6.5 4M4 7.5v6.5M7 7.5v6.5M11 7.5v6.5M14 7.5v6.5M2.5 15.5h13"/>',
|
|
@@ -389,8 +388,8 @@
|
|
|
389
388
|
// of `provisioning.fleet.manage`, the atom its page and its one read check (the
|
|
390
389
|
// Deploy precedent above); dropped where the provisioning module is not enabled.
|
|
391
390
|
{ id: 'fleet', label: 'Fleet costs', icon: 'fleet', href: '/fleet', gate: 'government', module: 'provisioning', position: true },
|
|
392
|
-
// task
|
|
393
|
-
|
|
391
|
+
// task 1005045: the owner's Market Watch settings (task 1004938) are an owner-only tab on
|
|
392
|
+
// /market-watch now, so the sidebar says "Market Watch" once (owner decision 2026-11-03).
|
|
394
393
|
// BV1.R113: the roles-and-permissions tab (ADR 0151). The one genuinely
|
|
395
394
|
// Archon-only item the 'government' gate comment anticipated — cosmetic
|
|
396
395
|
// only. The wall is the `government.manage` atom checked on each of the
|
|
@@ -231,7 +231,7 @@
|
|
|
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
233
|
<script src="/builders/craft-mode.js?v=2026-10-30-market-watch"></script>
|
|
234
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
234
|
+
<script src="/builders/shell.js?v=2026-11-04-one-market-watch"></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>
|
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
<link rel="stylesheet" href="/builders/style.css?v=2026-07-02-shell1">
|
|
16
16
|
<link rel="stylesheet" href="/builders/studio.css?v=2026-10-09-day">
|
|
17
17
|
<link rel="stylesheet" href="/builders/approval-queue.css?v=2026-09-29-aqfix">
|
|
18
|
+
<link rel="stylesheet" href="/builders/home-gallery.css?v=2026-11-04-studio">
|
|
19
|
+
<link rel="stylesheet" href="/builders/home-studio.css?v=2026-11-04-studio">
|
|
18
20
|
</head>
|
|
19
21
|
<!-- THE STUDIO HOME (task 1003971 / BV2.TW16, goal 1000095; ADR 0341 D2, D5,
|
|
20
22
|
D8 and D11). docs/design/mocks/tweak-mode/Main.dc.html is the master design:
|
|
@@ -208,6 +210,10 @@
|
|
|
208
210
|
</div>
|
|
209
211
|
</div>
|
|
210
212
|
</main>
|
|
213
|
+
<!-- task 1005061: the studio's five shelves (home-studio.js), under the room, in the
|
|
214
|
+
gallery's colours: the easel, pages waiting, words to tune, pinned works and
|
|
215
|
+
your works. -->
|
|
216
|
+
<section class="hs-page" id="studio-shelves" aria-labelledby="hs-h"></section>
|
|
211
217
|
|
|
212
218
|
<footer class="app-foot" id="app-foot"></footer>
|
|
213
219
|
</div>
|
|
@@ -219,7 +225,7 @@
|
|
|
219
225
|
<script src="/builders/dom-utils.js?v=2026-10-25-escape"></script>
|
|
220
226
|
<script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
|
|
221
227
|
<script src="/builders/craft-mode.js?v=2026-10-30-market-watch"></script>
|
|
222
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
228
|
+
<script src="/builders/shell.js?v=2026-11-04-one-market-watch"></script>
|
|
223
229
|
<script src="/builders/palette.js" defer></script>
|
|
224
230
|
<!-- The kit, for its ONE renderer: the full-size ship-time visual figure
|
|
225
231
|
(task 1003829), which the older reviews still show. -->
|
|
@@ -236,5 +242,7 @@
|
|
|
236
242
|
<script src="/builders/studio-lib.js?v=2026-10-09-day"></script>
|
|
237
243
|
<script src="/builders/ai-studio-lib.js?v=2026-10-29-ais1"></script>
|
|
238
244
|
<script src="/builders/studio.js?v=2026-10-09-day"></script>
|
|
245
|
+
<script src="/builders/home-gallery.js?v=2026-11-04-studio"></script>
|
|
246
|
+
<script src="/builders/home-studio.js?v=2026-11-04-studio"></script>
|
|
239
247
|
</body>
|
|
240
248
|
</html>
|