@bongos/core 1.24.44 → 1.24.45
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 +52 -52
- package/docs/copy-inventory.md +9 -9
- package/docs/copy-registry.json +9 -9
- package/docs/module-api-changelog.md +2 -0
- package/docs/page-readings.json +228 -228
- 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 +4 -1
- package/modules/hall-ui/public/deploy.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/idea.html +1 -1
- package/modules/hall-ui/public/ideas.html +1 -1
- package/modules/hall-ui/public/index.html +1 -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.html +1 -1
- package/modules/hall-ui/public/modules.html +1 -1
- package/modules/hall-ui/public/money.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/roster.html +1 -1
- package/modules/hall-ui/public/settings.html +1 -1
- package/modules/hall-ui/public/shell.js +21 -1
- package/modules/hall-ui/public/street.html +1 -1
- package/modules/hall-ui/public/studio.html +1 -1
- 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/hall-navigation.md +5 -0
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +6 -0
- package/scripts/bongos/gen-hall-sitemap.js +3 -1
- package/src/module-api.js +1 -1
- package/tests/craft_mode_nav.mjs +51 -3
- package/tests/nav_permission_atoms.mjs +2 -1
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
90
90
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
91
91
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
92
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
92
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></script>
|
|
93
93
|
<script src="/builders/palette.js" defer></script>
|
|
94
94
|
<script src="/builders/tweak-editor-lib.js?v=2026-09-28-tw23"></script>
|
|
95
95
|
<script src="/builders/studio-lib.js?v=2026-10-09-day"></script>
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
93
93
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
94
94
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
95
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
95
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></script>
|
|
96
96
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
97
97
|
<script src="/builders/palette.js" defer></script>
|
|
98
98
|
<script src="/builders/atlas.js?v=2026-09-02-index" defer></script>
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
62
62
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
63
63
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
64
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
64
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></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>
|
|
67
67
|
<!-- the branding pack's currency label, loaded BEFORE blockers.js. -->
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
64
64
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
65
65
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
66
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
66
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></script>
|
|
67
67
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
68
68
|
<script src="/builders/palette.js" defer></script>
|
|
69
69
|
<script src="/builders/hall-kit.js"></script>
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
109
109
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers" defer></script>
|
|
110
110
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals" defer></script>
|
|
111
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
111
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar" defer></script>
|
|
112
112
|
<script src="/builders/palette.js" defer></script>
|
|
113
113
|
<script src="/builders/gov-living.js?v=2026-10-09-positions1" defer></script>
|
|
114
114
|
<script src="/builders/gov-feeds.js?v=2026-10-09-living3" defer></script>
|
|
@@ -162,7 +162,7 @@
|
|
|
162
162
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
163
163
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
164
164
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
165
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
165
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></script>
|
|
166
166
|
<script src="/builders/palette.js" defer></script>
|
|
167
167
|
<script src="/builders/collab-lib.js?v=2026-09-24-archive"></script>
|
|
168
168
|
<script src="/builders/collab.js?v=2026-09-24-archive"></script>
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
55
55
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
56
56
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
57
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
57
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></script>
|
|
58
58
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
59
59
|
<script src="/builders/palette.js" defer></script>
|
|
60
60
|
<script src="/builders/hall-kit.js"></script>
|
|
@@ -180,7 +180,7 @@
|
|
|
180
180
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
181
181
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
182
182
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
183
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
183
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></script>
|
|
184
184
|
<script src="/builders/palette.js" defer></script>
|
|
185
185
|
<script src="/builders/hall-kit.js"></script>
|
|
186
186
|
<script src="/builders/copy-desk.js?v=2026-09-01-redesign"></script>
|
|
@@ -103,8 +103,11 @@
|
|
|
103
103
|
// Primer is the newcomer's way in, and only Building could see it.
|
|
104
104
|
var ALWAYS_TABS = ['roster', 'collab', 'profile', 'my-agents',
|
|
105
105
|
'primer', 'commands', 'atlas', 'modules', 'apidocs'];
|
|
106
|
+
// No mode lists 'home': the craft plate under the brand is the Home button in
|
|
107
|
+
// every mode (task 1005065), so a Home tab beside it is a second home icon
|
|
108
|
+
// (task 1005070). With no mode the plate is absent and the Home tab shows.
|
|
106
109
|
var MODE_TABS = {
|
|
107
|
-
building: ['
|
|
110
|
+
building: ['goals', 'goal-map', 'work', 'blockers', 'thinking', 'studio',
|
|
108
111
|
'market-watch'],
|
|
109
112
|
artistry: ['studio', 'goals', 'thinking'],
|
|
110
113
|
ideating: ['goal-map', 'thinking', 'goals', 'market-watch'],
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
82
82
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
83
83
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
84
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
84
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></script>
|
|
85
85
|
<script src="/builders/palette.js" defer></script>
|
|
86
86
|
<script src="/builders/hall-kit.js"></script>
|
|
87
87
|
<!-- the shared ask card the move is drawn with (task 1004829) -->
|
|
@@ -140,7 +140,7 @@
|
|
|
140
140
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
141
141
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
142
142
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
143
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
143
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></script>
|
|
144
144
|
<script src="/builders/palette.js" defer></script>
|
|
145
145
|
|
|
146
146
|
<script src="/builders/idea-objects.js?v=2026-09-27-split"></script>
|
|
@@ -253,7 +253,7 @@
|
|
|
253
253
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
254
254
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
255
255
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
256
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
256
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></script>
|
|
257
257
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
258
258
|
<script src="/builders/palette.js" defer></script>
|
|
259
259
|
<!-- task 1004727: the ONE karma vote control every task/idea list renders -->
|
|
@@ -157,7 +157,7 @@
|
|
|
157
157
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
158
158
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
159
159
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
160
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
160
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></script>
|
|
161
161
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
162
162
|
<script src="/builders/palette.js" defer></script>
|
|
163
163
|
<script src="/builders/hall-kit.js"></script>
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
54
54
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
55
55
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
56
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
56
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></script>
|
|
57
57
|
<script src="/builders/palette.js" defer></script>
|
|
58
58
|
<!-- task-detail.js still owns the #/idea/N and #/blocker/N overlay, so a ref
|
|
59
59
|
written inside an idea's own prose keeps resolving from this page. -->
|
|
@@ -228,7 +228,7 @@
|
|
|
228
228
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
229
229
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
230
230
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
231
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
231
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></script>
|
|
232
232
|
<script src="/builders/palette.js" defer></script>
|
|
233
233
|
<!-- task 1004727: the ONE karma vote control every task/idea list renders -->
|
|
234
234
|
<script src="/builders/vote-control.js"></script>
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
<script src="/builders/welcome-boot.js?v=2026-10-23-city1" defer></script>
|
|
110
110
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers" defer></script>
|
|
111
111
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals" defer></script>
|
|
112
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
112
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar" defer></script>
|
|
113
113
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
114
114
|
<script src="/builders/palette.js" defer></script>
|
|
115
115
|
<!-- task 2166: the shared component kit (window.OTBKit) — pager/ledger/rail.
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
75
75
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
76
76
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
77
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
77
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></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-11-05-numbers"></script>
|
|
44
44
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
45
45
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
46
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
46
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></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>
|
|
@@ -188,7 +188,7 @@
|
|
|
188
188
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
189
189
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
190
190
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
191
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
191
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></script>
|
|
192
192
|
<script src="/builders/palette.js" defer></script>
|
|
193
193
|
<script src="/builders/hall-kit.js"></script>
|
|
194
194
|
<script src="/builders/market-watch-lib.js"></script>
|
|
@@ -128,7 +128,7 @@
|
|
|
128
128
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
129
129
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
130
130
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
131
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
131
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></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>
|
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
83
83
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
84
84
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
85
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
85
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></script>
|
|
86
86
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
87
87
|
<script src="/builders/palette.js" defer></script>
|
|
88
88
|
<script src="/builders/hall-kit.js"></script>
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
85
85
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
86
86
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
87
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
87
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></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-11-05-numbers"></script>
|
|
114
114
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
115
115
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
116
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
116
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></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
|
|
@@ -249,7 +249,7 @@
|
|
|
249
249
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
250
250
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
251
251
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
252
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
252
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></script>
|
|
253
253
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
254
254
|
<script src="/builders/palette.js" defer></script>
|
|
255
255
|
<!-- task 1004727: the ONE karma vote control every task/idea list renders -->
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
78
78
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
79
79
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
80
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
80
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></script>
|
|
81
81
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
82
82
|
<script src="/builders/palette.js" defer></script>
|
|
83
83
|
<script src="/builders/hall-kit.js"></script>
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
60
60
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
61
61
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
62
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
62
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></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
|
<!-- the branding pack's currency label, loaded BEFORE roster.js. -->
|
|
@@ -394,7 +394,7 @@
|
|
|
394
394
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
395
395
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
396
396
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
397
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
397
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></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). -->
|
|
@@ -877,6 +877,23 @@
|
|
|
877
877
|
// task 1004685: `positions` (seats held, null while unknown), `simRank` (?as=nobody's).
|
|
878
878
|
var access = { authed: null, rank: null, graduated: false, showWork: false, permissions: null, needs: null, founding: null, positions: null, simRank: null };
|
|
879
879
|
|
|
880
|
+
// THE REMEMBERED NAV (task 1005070): pages are full loads and the gate waits on /me, so the rail booted empty. The last
|
|
881
|
+
// settled access paints at boot, /me settles the rest; cosmetic (ADR 0016), no needs roster; a 401/403 or sign-out forgets it.
|
|
882
|
+
var NAV_KEY = 'hall-nav-access', NAV_TTL = 24 * 60 * 60 * 1000;
|
|
883
|
+
function rememberAccess(b) {
|
|
884
|
+
if (access.authed !== true || !b || b.id == null) return;
|
|
885
|
+
var who = { id: b.id, rank: b.rank, display_name: b.display_name, github_login: b.github_login, avatar_url: b.avatar_url, preferred_disciplines: b.preferred_disciplines };
|
|
886
|
+
try { window.localStorage.setItem(NAV_KEY, JSON.stringify({ at: Date.now(), rank: access.rank, graduated: access.graduated, showWork: access.showWork, permissions: access.permissions, builder: who })); } catch (_) { /* private mode: wait for /me */ }
|
|
887
|
+
}
|
|
888
|
+
function forgetAccess() { try { window.localStorage.removeItem(NAV_KEY); } catch (_) { /* nothing kept */ } }
|
|
889
|
+
function recallAccess() {
|
|
890
|
+
var c; try { c = JSON.parse(window.localStorage.getItem(NAV_KEY) || 'null'); } catch (_) { return; }
|
|
891
|
+
if (!c || !c.builder || c.builder.id == null || !(Date.now() - c.at < NAV_TTL)) return;
|
|
892
|
+
access.authed = true; access.rank = c.rank ? String(c.rank).toLowerCase() : null; access.graduated = !!c.graduated; access.showWork = !!c.showWork;
|
|
893
|
+
access.permissions = (c.permissions && typeof c.permissions === 'object') ? c.permissions : null;
|
|
894
|
+
renderUser(c.builder); applyCraftEmphasis(c.builder);
|
|
895
|
+
}
|
|
896
|
+
|
|
880
897
|
function gateAllows(gate) {
|
|
881
898
|
var authed = access.authed === true;
|
|
882
899
|
// ?as=nobody's stand-in rank only ever sits BELOW the real one (gov-positions.js).
|
|
@@ -1154,6 +1171,7 @@
|
|
|
1154
1171
|
if (state.builder) { renderUser(state.builder); applyCraftEmphasis(state.builder); }
|
|
1155
1172
|
// task 1004713: which seats this builder holds — /me's server-resolved block.
|
|
1156
1173
|
if (state.builder && access.authed === true) { loadPositions(state.builder, state.positions); loadGithubChip(state.builder); }
|
|
1174
|
+
if (state.builder && access.authed === true) rememberAccess(state.builder); else if (access.authed === false) forgetAccess(); // task 1005070
|
|
1157
1175
|
}
|
|
1158
1176
|
document.querySelectorAll('#app-sidebar [data-gate]').forEach(function (el) {
|
|
1159
1177
|
var ok = gateAllows(el.dataset.gate);
|
|
@@ -1301,6 +1319,7 @@
|
|
|
1301
1319
|
// live here, not only on the index (builders.js used to own it alone). Convert
|
|
1302
1320
|
// the click into the real POST, then bounce home.
|
|
1303
1321
|
function doLogout() {
|
|
1322
|
+
forgetAccess(); // task 1005070: the next visitor's rail is not this builder's
|
|
1304
1323
|
var finish = function () {
|
|
1305
1324
|
// Mirror the SERVER logout (src/bongos/routes/auth.js): expire BOTH the
|
|
1306
1325
|
// current gds_session and the legacy pms_session, each in BOTH the
|
|
@@ -1396,7 +1415,7 @@
|
|
|
1396
1415
|
// the governor pages' living model reads /me too: it takes this answer (gov-feeds.js)
|
|
1397
1416
|
HALL_READS['/me'] = meRead.then(function (res) { return res && res.ok ? res.data : (res && res.status === 403 ? false : null); }, function () { return null; });
|
|
1398
1417
|
meRead.then(function (res) {
|
|
1399
|
-
if (res.status === 401) { applyAccess({ authed: false }); return null; }
|
|
1418
|
+
if (res.status === 401 || res.status === 403) { applyAccess({ authed: false }); return null; }
|
|
1400
1419
|
if (!res.ok) return null;
|
|
1401
1420
|
return res.data;
|
|
1402
1421
|
}).then(function (me) {
|
|
@@ -1442,6 +1461,7 @@
|
|
|
1442
1461
|
applyZoom();
|
|
1443
1462
|
if (CRAFT) CRAFT.mount();
|
|
1444
1463
|
applyFullscreen(storedFullscreen());
|
|
1464
|
+
recallAccess(); // task 1005070: the last settled nav, so the rail paints before /me
|
|
1445
1465
|
applyAccess(null); // default: everything gated until access is known
|
|
1446
1466
|
wire();
|
|
1447
1467
|
TRAIL.fillExits();
|
|
@@ -231,7 +231,7 @@
|
|
|
231
231
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
232
232
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
233
233
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
234
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
234
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></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>
|
|
@@ -225,7 +225,7 @@
|
|
|
225
225
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
226
226
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
227
227
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
228
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
228
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></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. -->
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
60
60
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
61
61
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
62
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
62
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></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
|
|
@@ -141,7 +141,7 @@
|
|
|
141
141
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
142
142
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
143
143
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
144
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
144
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></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>
|
|
@@ -145,7 +145,7 @@
|
|
|
145
145
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
146
146
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
147
147
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
148
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
148
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></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>
|
|
@@ -271,7 +271,7 @@
|
|
|
271
271
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
272
272
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
273
273
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
274
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
274
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></script>
|
|
275
275
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
276
276
|
<script src="/builders/palette.js" defer></script>
|
|
277
277
|
<!-- shared component kit (window.OTBKit) — tabs, ledger, pager (task 2166). -->
|
|
@@ -174,7 +174,7 @@
|
|
|
174
174
|
<script src="/builders/dom-utils.js?v=2026-11-05-numbers"></script>
|
|
175
175
|
<script src="/builders/shell-trail.js?v=2026-11-05-numbers"></script>
|
|
176
176
|
<script src="/builders/craft-mode.js?v=2026-11-05-goals"></script>
|
|
177
|
-
<script src="/builders/shell.js?v=2026-11-
|
|
177
|
+
<script src="/builders/shell.js?v=2026-11-06-sidebar"></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 -->
|
|
@@ -28,3 +28,8 @@ Covers: every shelled hall page (`shell.js`, `style.css`), plus `goal-map.html`
|
|
|
28
28
|
`goal-map.html` now uses thinking.html's structure: sidebar and top-bar mounts, `style.css`, `shell.js`, the sky inside `<main id="hall-main" class="sky-stage">`, and a `<div class="brand">` because the shell's bar is the page's one `<header>`. In `thinking.css` both pages share one stage rule, `body[data-page] .sky-stage`. No hall page is standalone any more (`tests/hall_audit.mjs` `STANDALONE_EXEMPT` is empty).
|
|
29
29
|
|
|
30
30
|
Tests: `tests/hall_fullscreen.mjs` (the standard switch, `plain`, Back link, trail, fallback and exit cases), `tests/hall_record_world.mjs` §10 (the record places its exit), `tests/goal_map_page.mjs`, `tests/hall_audit.mjs` §8.
|
|
31
|
+
|
|
32
|
+
## The rail paints at once, and Home is one button (task 1005070)
|
|
33
|
+
|
|
34
|
+
- Every hall page is a full load, and the gate waits on `/me`, so the rail used to boot with only Home and pop the rest in once `/me` answered — longest for the owner, whose `/me` is the heaviest. `shell.js` now keeps the last settled access in `localStorage['hall-nav-access']` (rank, graduated/showWork, the nav permission map, the user chip; never the needs roster, so no badge is stale) and paints from it at boot. `/me` still settles the real state. It is forgotten on any signed-out settle (a 401 or a refused 403) and by the sign-out link, and is not painted once a day old.
|
|
35
|
+
- In a craft the plate under the brand is the Home button (task 1005065), so no mode's tab list names `home` — Building used to, which drew two home icons. With no craft chosen there is no plate and the Home tab shows. Pinned in `tests/craft_mode_nav.mjs`.
|
package/package-lock.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bongos/core",
|
|
3
|
-
"version": "1.24.
|
|
3
|
+
"version": "1.24.45",
|
|
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.45",
|
|
10
10
|
"license": "AGPL-3.0-or-later",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"express": "^4.21.2",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bongos/core",
|
|
3
|
-
"version": "1.24.
|
|
3
|
+
"version": "1.24.45",
|
|
4
4
|
"description": "Cloud Bongos — the AI-first build platform core (GDS + platform surfaces + module system), installed as a versioned dependency (ADR 0108).",
|
|
5
5
|
"license": "AGPL-3.0-or-later",
|
|
6
6
|
"main": "src/platform-server.js",
|
package/release-notes.json
CHANGED
|
@@ -11227,5 +11227,11 @@
|
|
|
11227
11227
|
"id": "1005051",
|
|
11228
11228
|
"text": "Goals now opens with the version's progress and the timeline of every version, so the separate Roadmap page is gone from the sidebar. Old Roadmap links open Goals. The Tasks board's 'see the version' line points at Goals too."
|
|
11229
11229
|
}
|
|
11230
|
+
],
|
|
11231
|
+
"1.24.45": [
|
|
11232
|
+
{
|
|
11233
|
+
"id": "1005070",
|
|
11234
|
+
"text": "The hall's sidebar now appears instantly on every page instead of popping in late, and Building mode shows a single Home button."
|
|
11235
|
+
}
|
|
11230
11236
|
]
|
|
11231
11237
|
}
|
|
@@ -269,7 +269,9 @@ function build() {
|
|
|
269
269
|
};
|
|
270
270
|
});
|
|
271
271
|
|
|
272
|
-
|
|
272
|
+
// 'home' is in every craft: there the plate under the brand IS the Home button
|
|
273
|
+
// (tasks 1005065, 1005070), so no mode lists the Home tab beside it.
|
|
274
|
+
const inAnyCraft = new Set(['home', ...CRAFTS.flatMap((c) => crafts.tabs[c])]);
|
|
273
275
|
const findings = {
|
|
274
276
|
broken: dedupe(broken).sort((a, b) => (a.from + a.href).localeCompare(b.from + b.href)),
|
|
275
277
|
orphan: rows.filter((r) => r.url !== '/' && !r.nav.length && !r.in.length).map((r) => r.url),
|
package/src/module-api.js
CHANGED
|
@@ -81,7 +81,7 @@ const { sleep } = require('./sleep');
|
|
|
81
81
|
// MAJOR (see allowBoxScope below): passes the request through untouched.
|
|
82
82
|
function deprecatedNoopMiddleware(_req, _res, next) { next(); }
|
|
83
83
|
|
|
84
|
-
const CORE_VERSION = '1.24.
|
|
84
|
+
const CORE_VERSION = '1.24.45'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
|
|
85
85
|
|
|
86
86
|
// A namespaced logger so a module's log lines are attributable + consistent.
|
|
87
87
|
// Usage: const log = api.logger('discord'); log.info('mounted');
|
package/tests/craft_mode_nav.mjs
CHANGED
|
@@ -63,7 +63,7 @@ function parseSidebar(html) {
|
|
|
63
63
|
});
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
function boot({ session = {}, perms = { 'board.vote.cast': true } } = {}) {
|
|
66
|
+
function boot({ session = {}, local = {}, perms = { 'board.vote.cast': true } } = {}) {
|
|
67
67
|
const root = makeEl('HTML');
|
|
68
68
|
const topbar = makeEl('DIV');
|
|
69
69
|
const sidebar = makeEl('NAV');
|
|
@@ -95,7 +95,7 @@ function boot({ session = {}, perms = { 'board.vote.cast': true } } = {}) {
|
|
|
95
95
|
__BRANDING__: {}, __MODULES__: { enabled: { provisioning: true } },
|
|
96
96
|
BongosClient: { createClient: () => ({ request: () => new Promise(() => {}) }) },
|
|
97
97
|
matchMedia: () => ({ matches: false, addEventListener() {} }),
|
|
98
|
-
localStorage: mk(
|
|
98
|
+
localStorage: mk(local), sessionStorage: mk(session), location,
|
|
99
99
|
clearTimeout() {}, setTimeout() { return 0; }, requestAnimationFrame() {}, scrollTo() {},
|
|
100
100
|
addEventListener() {}, dispatchEvent() { return true; },
|
|
101
101
|
};
|
|
@@ -116,6 +116,7 @@ function boot({ session = {}, perms = { 'board.vote.cast': true } } = {}) {
|
|
|
116
116
|
return {
|
|
117
117
|
craft, root,
|
|
118
118
|
signIn: (rank = 'archon') => shell.applyAccess({ authed: true, rank, permissions: perms, builder: { id: 7, rank } }),
|
|
119
|
+
signOut: () => shell.applyAccess({ authed: false }),
|
|
119
120
|
// The tabs a reader can see: the gate let them through AND the mode kept them.
|
|
120
121
|
showing: () => parsed().flatMap((g) => g.items).filter((a) => !a.hidden && !a.hasAttribute('data-craft-off')).map((a) => a.id.slice(4)),
|
|
121
122
|
headShowing: (group) => {
|
|
@@ -150,7 +151,20 @@ test('every tab a mode names is a real NAV item, and every NAV item lives in som
|
|
|
150
151
|
assert.ok(NAV_IDS.length >= 24, `read ${NAV_IDS.length} NAV ids from shell.js`);
|
|
151
152
|
const named = new Set(CRAFTS.flatMap((m) => craft.tabsFor(m)));
|
|
152
153
|
for (const id of named) assert.ok(NAV_IDS.includes(id), `${id} is a NAV id`);
|
|
153
|
-
|
|
154
|
+
// Home is the one exception: in a mode the craft plate IS the Home button
|
|
155
|
+
// (task 1005065), so no mode lists the Home tab beside it (task 1005070).
|
|
156
|
+
for (const id of NAV_IDS) {
|
|
157
|
+
if (id === 'home') continue;
|
|
158
|
+
assert.ok(named.has(id), `${id} is reachable from some mode's nav`);
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
test('ONE HOME: no mode shows the Home tab, because the plate is Home in every mode (task 1005070)', () => {
|
|
163
|
+
const { craft } = boot();
|
|
164
|
+
for (const m of CRAFTS) assert.ok(!craft.tabsFor(m).includes('home'), `${m} does not list the Home tab beside the plate`);
|
|
165
|
+
const none = boot();
|
|
166
|
+
none.signIn();
|
|
167
|
+
assert.ok(none.showing().includes('home'), 'with no mode there is no plate, so the Home tab shows');
|
|
154
168
|
});
|
|
155
169
|
|
|
156
170
|
test('Government shows only in Governing, and Governing is the shortest list', () => {
|
|
@@ -326,3 +340,37 @@ test('the dropdown opens on its own when the page you are on is inside it', () =
|
|
|
326
340
|
assert.equal(bootTree({ mode: 'artistry' }).fold(), null, 'no other mode folds anything');
|
|
327
341
|
assert.equal(bootTree().fold(), null, 'nor does no mode');
|
|
328
342
|
});
|
|
343
|
+
|
|
344
|
+
// ── the remembered nav (task 1005070) ──────────────────────────────────────
|
|
345
|
+
// Every hall page is a full load and /me is the slowest read the owner makes, so
|
|
346
|
+
// the rail used to boot empty and pop its tabs in once /me answered. The shell
|
|
347
|
+
// now keeps the last settled access and paints from it; /me (whose client never
|
|
348
|
+
// answers in this harness) still settles the rest.
|
|
349
|
+
const NAV_KEY = 'hall-nav-access';
|
|
350
|
+
|
|
351
|
+
test('THE REMEMBERED NAV: a signed-in settle is kept, and the next page paints it before /me answers', () => {
|
|
352
|
+
const local = {};
|
|
353
|
+
const first = boot({ local });
|
|
354
|
+
first.signIn();
|
|
355
|
+
const settled = first.showing();
|
|
356
|
+
const kept = JSON.parse(local[NAV_KEY]);
|
|
357
|
+
assert.equal(kept.rank, 'archon');
|
|
358
|
+
assert.equal(kept.builder.id, 7);
|
|
359
|
+
assert.ok(!('needs' in kept), 'never the needs roster, so a badge is never stale');
|
|
360
|
+
const next = boot({ local });
|
|
361
|
+
assert.deepEqual(next.showing(), settled, 'the next page paints the same tabs with /me still out');
|
|
362
|
+
const cold = boot();
|
|
363
|
+
assert.deepEqual(cold.showing(), ['home'], 'with nothing kept the rail waits for /me, as before');
|
|
364
|
+
});
|
|
365
|
+
|
|
366
|
+
test('THE REMEMBERED NAV is forgotten on a signed-out settle, and an old one is not painted', () => {
|
|
367
|
+
const local = {};
|
|
368
|
+
const p = boot({ local });
|
|
369
|
+
p.signIn();
|
|
370
|
+
assert.ok(local[NAV_KEY]);
|
|
371
|
+
p.signOut();
|
|
372
|
+
assert.ok(!(NAV_KEY in local), 'a sign-out or a 401 drops it');
|
|
373
|
+
const stale = boot({ local: { [NAV_KEY]: JSON.stringify({ at: Date.now() - 2 * 24 * 60 * 60 * 1000, rank: 'archon', builder: { id: 7 } }) } });
|
|
374
|
+
assert.deepEqual(stale.showing(), ['home'], 'a day-old memory is not painted');
|
|
375
|
+
assert.match(SHELL, /function doLogout\(\) \{\n\s+forgetAccess\(\);/, 'the sign-out link forgets it before it leaves');
|
|
376
|
+
});
|
|
@@ -100,7 +100,8 @@ test('the hall-preview fixture carries every atom /me resolves', () => {
|
|
|
100
100
|
// task 1005076: the setup flow's holdForSetup;
|
|
101
101
|
// task 1005050: Accomplishments left it (folded into Profile; its hashes redirect);
|
|
102
102
|
// task 1005051: Roadmap left it (folded into Goals; /roadmap redirects).
|
|
103
|
-
|
|
103
|
+
// task 1005070: the remembered nav (the rail paints before /me).
|
|
104
|
+
const SHELL_SHA = 'dbbe6f2eb49a65c3';
|
|
104
105
|
|
|
105
106
|
test('shell.js has not changed without its cache-bust being bumped', () => {
|
|
106
107
|
const actual = crypto.createHash('sha256').update(SHELL).digest('hex').slice(0, 16);
|