@bongos/core 1.21.72 → 1.21.73

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.
Files changed (51) hide show
  1. package/.bongos-core.json +55 -55
  2. package/docs/copy-inventory.md +22 -22
  3. package/docs/copy-registry.json +25 -25
  4. package/docs/module-api-changelog.md +2 -0
  5. package/docs/page-readings.json +324 -325
  6. package/modules/hall-ui/public/atlas.html +3 -3
  7. package/modules/hall-ui/public/blockers.html +3 -3
  8. package/modules/hall-ui/public/board-room.html +3 -3
  9. package/modules/hall-ui/public/city.html +3 -3
  10. package/modules/hall-ui/public/collab.html +3 -3
  11. package/modules/hall-ui/public/commands.html +3 -3
  12. package/modules/hall-ui/public/copy-desk.html +3 -3
  13. package/modules/hall-ui/public/craft-mode.js +69 -1
  14. package/modules/hall-ui/public/deploy.html +3 -3
  15. package/modules/hall-ui/public/diagrams.html +3 -3
  16. package/modules/hall-ui/public/drachmae.html +3 -3
  17. package/modules/hall-ui/public/fleet.html +3 -3
  18. package/modules/hall-ui/public/gate.html +3 -3
  19. package/modules/hall-ui/public/goal-map.html +3 -3
  20. package/modules/hall-ui/public/goals.html +3 -3
  21. package/modules/hall-ui/public/government.html +3 -3
  22. package/modules/hall-ui/public/idea.html +3 -3
  23. package/modules/hall-ui/public/ideas.html +3 -3
  24. package/modules/hall-ui/public/index.html +3 -3
  25. package/modules/hall-ui/public/modules.html +3 -3
  26. package/modules/hall-ui/public/primer.html +3 -3
  27. package/modules/hall-ui/public/profile.html +3 -3
  28. package/modules/hall-ui/public/project-settings.html +3 -3
  29. package/modules/hall-ui/public/ranks.html +3 -3
  30. package/modules/hall-ui/public/roadmap.html +3 -3
  31. package/modules/hall-ui/public/roster.html +3 -3
  32. package/modules/hall-ui/public/sessions.html +3 -3
  33. package/modules/hall-ui/public/settings.html +3 -3
  34. package/modules/hall-ui/public/shell.js +9 -0
  35. package/modules/hall-ui/public/street.html +3 -3
  36. package/modules/hall-ui/public/studio.html +3 -3
  37. package/modules/hall-ui/public/task.html +3 -3
  38. package/modules/hall-ui/public/thinking.html +3 -3
  39. package/modules/hall-ui/public/tweak-editor.html +3 -3
  40. package/modules/hall-ui/public/watch.html +3 -3
  41. package/modules/hall-ui/public/work.html +3 -3
  42. package/package-lock.json +2 -2
  43. package/package.json +1 -1
  44. package/release-notes.json +6 -0
  45. package/src/module-api.js +1 -1
  46. package/tests/craft_mode_nav.mjs +117 -1
  47. package/tests/hall_city.mjs +5 -3
  48. package/tests/hall_nav.mjs +3 -1
  49. package/tests/hall_street.mjs +2 -1
  50. package/tests/hall_tweak_editor.mjs +1 -1
  51. package/tests/nav_permission_atoms.mjs +1 -1
@@ -91,9 +91,9 @@
91
91
 
92
92
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
93
93
 
94
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
95
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
96
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
94
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
95
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
96
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></script>
97
97
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
98
98
  <script src="/builders/palette.js" defer></script>
99
99
  <script src="/builders/atlas.js?v=2026-09-02-index" defer></script>
@@ -50,9 +50,9 @@
50
50
 
51
51
  <!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
52
52
  chrome exists before the page script runs. -->
53
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
54
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
55
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
53
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
54
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
55
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></script>
56
56
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
57
57
  <script src="/builders/palette.js" defer></script>
58
58
  <!-- shared frontend toolkit (window.OTB — rank labels, number formats) + the
@@ -60,9 +60,9 @@
60
60
 
61
61
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
62
62
 
63
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
64
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
65
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
63
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
64
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
65
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></script>
66
66
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
67
67
  <script src="/builders/palette.js" defer></script>
68
68
  <script src="/builders/dom-utils.js?v=2026-06-16-board"></script>
@@ -83,9 +83,9 @@
83
83
  </div>
84
84
  </div>
85
85
 
86
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
87
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
88
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
86
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
87
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
88
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></script>
89
89
  <script src="/builders/palette.js" defer></script>
90
90
  <script src="/builders/city-draw.js?v=2026-10-04-pins1"></script>
91
91
  <script src="/builders/city.js?v=2026-10-04-pins1"></script>
@@ -148,9 +148,9 @@
148
148
 
149
149
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
150
150
 
151
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
152
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
153
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
151
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
152
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
153
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></script>
154
154
  <script src="/builders/palette.js" defer></script>
155
155
  <script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
156
156
  <script src="/builders/collab-lib.js?v=2026-09-24-archive"></script>
@@ -54,9 +54,9 @@
54
54
 
55
55
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
56
56
 
57
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
58
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
59
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
57
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
58
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
59
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></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
  <script src="/builders/dom-utils.js?v=2026-06-14-domutils"></script>
@@ -177,9 +177,9 @@
177
177
 
178
178
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
179
179
 
180
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
181
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
182
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
180
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
181
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
182
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></script>
183
183
  <script src="/builders/palette.js" defer></script>
184
184
  <script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
185
185
  <script src="/builders/hall-kit.js"></script>
@@ -58,9 +58,16 @@
58
58
  'primer', 'ranks', 'economy', 'commands', 'diagrams', 'atlas', 'modules', 'apidocs'],
59
59
  artistry: ['studio', 'goals', 'thinking'],
60
60
  ideating: ['goal-map', 'thinking', 'goals'],
61
- governing: ['blockers', 'board-room',
61
+ governing: ['city', 'blockers', 'board-room',
62
62
  'watch', 'gate', 'sessions', 'project-settings', 'deploy', 'fleet', 'government'],
63
63
  };
64
+ // A mode can lead with ONE tab and fold the rest of its own under a dropdown
65
+ // (owner, 2026-10-08: the city is Governing's tab, everything else under it).
66
+ // The folded items are MOVED into the dropdown, never copied, so the ids, the
67
+ // gate attributes and the active mark the shell set all travel with them; a
68
+ // placeholder keeps each one's place so leaving the mode puts it back exactly.
69
+ var MODE_LEAD = { governing: { lead: 'city', label: 'More governing' } };
70
+ var FOLD_ID = 'craft-fold';
64
71
  // The tab ids a mode shows, or null for every tab.
65
72
  function tabsFor(mode) {
66
73
  var own = Object.prototype.hasOwnProperty.call(MODE_TABS, mode) ? MODE_TABS[mode] : null;
@@ -71,9 +78,70 @@
71
78
  // shell's access gate: the gate owns `hidden`, a mode only ever takes away, and
72
79
  // switching back simply drops the attribute. A group head goes too once
73
80
  // nothing under it is left showing. shell.js calls this after every gate pass.
81
+ // The fold (MODE_LEAD): a collapsible group placed right under the lead tab,
82
+ // holding the mode's other own tabs. shell.js's group-head click handler opens
83
+ // and closes it like any other group. Leaving the mode puts every tab back.
84
+ var slots = {};
85
+ function unfold() {
86
+ var fold = document.getElementById(FOLD_ID);
87
+ for (var id in slots) {
88
+ var slot = slots[id], el = document.getElementById('nav-' + id);
89
+ if (el && slot.parentNode) slot.parentNode.insertBefore(el, slot);
90
+ remove(slot);
91
+ }
92
+ slots = {};
93
+ remove(fold);
94
+ }
95
+ function applyFold(mode) {
96
+ var spec = Object.prototype.hasOwnProperty.call(MODE_LEAD, mode) ? MODE_LEAD[mode] : null;
97
+ var fold = document.getElementById(FOLD_ID);
98
+ if (fold && (!spec || fold.getAttribute('data-fold') !== mode)) { unfold(); fold = null; }
99
+ var lead = spec && document.getElementById('nav-' + spec.lead);
100
+ if (!lead || !lead.parentNode || !document.createComment) return;
101
+ var list;
102
+ if (!fold) {
103
+ fold = document.createElement('div');
104
+ fold.id = FOLD_ID;
105
+ fold.className = 'nav-group nav-group--collapsible nav-group--collapsed craft-fold';
106
+ fold.setAttribute('data-group', FOLD_ID);
107
+ fold.setAttribute('data-fold', mode);
108
+ var head = document.createElement('button');
109
+ head.type = 'button';
110
+ head.className = 'nav-group__head';
111
+ head.setAttribute('data-group', FOLD_ID);
112
+ head.setAttribute('aria-expanded', 'false');
113
+ head.setAttribute('aria-controls', 'nav-items-' + FOLD_ID);
114
+ head.innerHTML = '<span class="nav-group__head-label">' + esc(spec.label) + '</span>' +
115
+ '<svg class="nav-group__chevron" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 7l4 4 4-4"/></svg>';
116
+ list = document.createElement('div');
117
+ list.className = 'nav-items';
118
+ list.id = 'nav-items-' + FOLD_ID;
119
+ fold.appendChild(head);
120
+ fold.appendChild(list);
121
+ lead.parentNode.insertBefore(fold, lead.nextSibling);
122
+ } else {
123
+ list = document.getElementById('nav-items-' + FOLD_ID);
124
+ }
125
+ if (!list) return;
126
+ MODE_TABS[mode].forEach(function (id) {
127
+ var el = id !== spec.lead && document.getElementById('nav-' + id);
128
+ if (!el || el.parentNode === list) return;
129
+ var slot = document.createComment('craft-fold:' + id);
130
+ el.parentNode.insertBefore(slot, el);
131
+ slots[id] = slot;
132
+ list.appendChild(el);
133
+ });
134
+ // A dropdown starts closed, except when the page you are on is inside it.
135
+ if (list.querySelector && list.querySelector('.nav-item--active')) {
136
+ fold.classList.remove('nav-group--collapsed');
137
+ var h = fold.querySelector && fold.querySelector('.nav-group__head');
138
+ if (h) h.setAttribute('aria-expanded', 'true');
139
+ }
140
+ }
74
141
  function applyNav() {
75
142
  var nav = document.getElementById('app-sidebar');
76
143
  if (!nav || !nav.querySelectorAll) return;
144
+ applyFold(document.documentElement.dataset.craft);
77
145
  var keep = tabsFor(document.documentElement.dataset.craft);
78
146
  var items = nav.querySelectorAll('.nav-item');
79
147
  for (var i = 0; i < items.length; i++) {
@@ -74,9 +74,9 @@
74
74
 
75
75
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
76
76
 
77
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
78
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
79
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
77
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
78
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
79
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></script>
80
80
  <script src="/builders/palette.js" defer></script>
81
81
  <script src="/builders/dom-utils.js?v=2026-06-16-gate"></script>
82
82
  <script src="/builders/hall-kit.js"></script>
@@ -97,9 +97,9 @@
97
97
 
98
98
  <!-- The app shell (sidebar + top bar + footer). Dependency-free; runs at parse
99
99
  time so the chrome exists before the deferred page scripts execute. -->
100
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
101
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
102
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
100
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
101
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
102
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></script>
103
103
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
104
104
  <script src="/builders/palette.js" defer></script>
105
105
  <script src="/builders/diagram-viewer.js?v=2026-06-14-diagviewer-1" defer></script>
@@ -98,9 +98,9 @@
98
98
 
99
99
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
100
100
 
101
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
102
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
103
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
101
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
102
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
103
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></script>
104
104
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
105
105
  <script src="/builders/palette.js" defer></script>
106
106
  <script src="/builders/md-reader.js?v=2026-09-02-mdreader-2"></script>
@@ -54,9 +54,9 @@
54
54
 
55
55
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
56
56
 
57
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
58
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
59
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
57
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
58
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
59
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></script>
60
60
  <script src="/builders/palette.js" defer></script>
61
61
  <script src="/builders/dom-utils.js?v=2026-06-16-gate"></script>
62
62
  <script src="/builders/hall-kit.js"></script>
@@ -77,9 +77,9 @@
77
77
  <div id="gate-modal-root"></div>
78
78
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
79
79
 
80
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
81
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
82
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
80
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
81
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
82
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></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>
85
85
  <script src="/builders/dom-utils.js?v=2026-06-16-gate"></script>
@@ -137,9 +137,9 @@
137
137
  </div>
138
138
  </div>
139
139
 
140
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
141
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
142
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
140
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
141
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
142
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></script>
143
143
  <script src="/builders/palette.js" defer></script>
144
144
 
145
145
  <script src="/builders/idea-objects.js?v=2026-09-27-split"></script>
@@ -230,9 +230,9 @@
230
230
 
231
231
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
232
232
 
233
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
234
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
235
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
233
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
234
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
235
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></script>
236
236
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
237
237
  <script src="/builders/palette.js" defer></script>
238
238
  <script src="/builders/dom-utils.js?v=2026-06-14-domutils"></script>
@@ -134,9 +134,9 @@
134
134
 
135
135
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
136
136
 
137
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
138
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
139
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
137
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
138
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
139
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></script>
140
140
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
141
141
  <script src="/builders/palette.js" defer></script>
142
142
  <script src="/builders/dom-utils.js?v=2026-06-16-gate"></script>
@@ -50,9 +50,9 @@
50
50
 
51
51
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
52
52
 
53
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
54
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
55
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
53
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
54
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
55
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></script>
56
56
  <script src="/builders/palette.js" defer></script>
57
57
  <script src="/builders/dom-utils.js?v=2026-06-23-contrib" defer></script>
58
58
  <!-- task-detail.js still owns the #/idea/N and #/blocker/N overlay, so a ref
@@ -225,9 +225,9 @@
225
225
 
226
226
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
227
227
 
228
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
229
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
230
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
228
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
229
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
230
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></script>
231
231
  <script src="/builders/palette.js" defer></script>
232
232
  <script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
233
233
  <!-- task 1003069 (R08) — the quick-filing form's routed result links a task
@@ -106,9 +106,9 @@
106
106
  <script src="/builders/brand-apply.js?v=2026-06-27-r75" defer></script>
107
107
  <!-- The app shell (sidebar + top bar + view router). Dependency-free; loaded
108
108
  BEFORE builders.js so the chrome ids exist when events are wired. -->
109
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb" defer></script>
110
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb" defer></script>
111
- <script src="/builders/shell.js?v=2026-10-04-lightbulb" defer></script>
109
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab" defer></script>
110
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab" defer></script>
111
+ <script src="/builders/shell.js?v=2026-10-08-city-tab" defer></script>
112
112
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
113
113
  <script src="/builders/palette.js" defer></script>
114
114
  <!-- task 2166: the shared component kit (window.OTBKit) — pager/ledger/rail.
@@ -101,9 +101,9 @@
101
101
 
102
102
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
103
103
 
104
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
105
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
106
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
104
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
105
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
106
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></script>
107
107
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
108
108
  <script src="/builders/palette.js" defer></script>
109
109
  <script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
@@ -115,9 +115,9 @@
115
115
 
116
116
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
117
117
 
118
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
119
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
120
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
118
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
119
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
120
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></script>
121
121
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
122
122
  <script src="/builders/palette.js" defer></script>
123
123
  <!-- the shared markdown reader (window.OTBMdReader) — primer.js renders through
@@ -207,9 +207,9 @@
207
207
 
208
208
  <!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
209
209
  chrome exists before the page script runs. -->
210
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
211
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
212
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
210
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
211
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
212
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></script>
213
213
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
214
214
  <script src="/builders/palette.js" defer></script>
215
215
  <!-- shared frontend toolkit (window.OTB) — loaded before profile.js, which pulls from it. -->
@@ -70,9 +70,9 @@
70
70
 
71
71
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
72
72
 
73
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
74
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
75
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
73
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
74
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
75
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></script>
76
76
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
77
77
  <script src="/builders/palette.js" defer></script>
78
78
  <script src="/builders/dom-utils.js?v=2026-06-16-gate"></script>
@@ -77,9 +77,9 @@
77
77
 
78
78
  <!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
79
79
  chrome exists before the page script runs. -->
80
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
81
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
82
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
80
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
81
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
82
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></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>
85
85
  <!-- shared frontend toolkit (window.OTB) — loaded before ranks.js, which pulls from it. -->
@@ -41,9 +41,9 @@
41
41
 
42
42
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
43
43
 
44
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
45
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
46
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
44
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
45
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
46
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></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/dom-utils.js?v=2026-06-14-domutils"></script>
@@ -53,9 +53,9 @@
53
53
 
54
54
  <!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
55
55
  chrome exists before the page script runs. -->
56
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
57
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
58
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
56
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
57
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
58
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></script>
59
59
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
60
60
  <script src="/builders/palette.js" defer></script>
61
61
  <!-- shared frontend toolkit (window.OTB — rank labels, number formats) + the
@@ -111,9 +111,9 @@
111
111
 
112
112
  <!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
113
113
  chrome exists before the page script runs. -->
114
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
115
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
116
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
114
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
115
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
116
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></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
  <!-- shared frontend toolkit (window.OTB) — loaded BEFORE sessions.js so it can pull from it. -->
@@ -435,9 +435,9 @@
435
435
 
436
436
  <!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
437
437
  chrome exists before the page scripts run. -->
438
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
439
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
440
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
438
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
439
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
440
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></script>
441
441
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
442
442
  <script src="/builders/palette.js" defer></script>
443
443
  <!-- shared frontend toolkit (window.OTB) — loaded before consuming IIFEs. -->
@@ -99,6 +99,8 @@
99
99
  studio: '<path d="M9 15.5V8.5"/><path d="M9 8.5C9 5.5 6.5 3.5 3.5 3.5c0 3 2.5 5 5.5 5Z"/><path d="M9 10C9 7.5 11.2 5.5 14 5.5c0 2.7-2.2 4.5-5 4.5Z"/>',
100
100
  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"/>',
101
101
  admin: '<path d="M9 2.5 15 5v4c0 3.5-2.4 6-6 7-3.6-1-6-3.5-6-7V5l6-2.5Z"/>',
102
+ // The governor city: a pediment over columns, the Governing mode's own glyph.
103
+ 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"/>',
102
104
  signout: '<path d="M7 3.5H4a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h3M12 12l3-3-3-3M15 9H7"/>',
103
105
  };
104
106
  function icon(name) {
@@ -210,6 +212,13 @@
210
212
  // so the badge counts ballots this viewer can actually cast, never "items
211
213
  // open somewhere".
212
214
  { id: 'board-room', label: 'Board Room', icon: 'admin', href: '/board-room', gate: 'perm:board.vote.cast', count: 'board_votes' },
215
+ // The governor city (task 1004524): the owner put it on the sidebar on
216
+ // 2026-10-08, reversing "leave it off". It is the Governing mode's lead tab
217
+ // (craft-mode.js folds that mode's other tabs into a dropdown under it).
218
+ // Gated on the atom its page is (requireBoardVotePage), and it sits in this
219
+ // head-less group for the reason the Board Room does: the atom floors below
220
+ // any rank head. Cosmetic only (ADR 0016).
221
+ { id: 'city', label: 'City', icon: 'city', href: '/city', gate: 'perm:board.vote.cast' },
213
222
  // task 1004326 (BV2.TW15 of goal 1000095): the Ideas board (/ideas, task
214
223
  // 1002928) and the Copy desk (/copy-desk, task 1003113) are ARCHIVED — off
215
224
  // the nav on the owner's call of 2026-09-27, NOT deleted. Both pages and
@@ -203,9 +203,9 @@
203
203
  </div>
204
204
  </div>
205
205
 
206
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
207
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
208
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
206
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
207
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
208
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></script>
209
209
  <script src="/builders/palette.js" defer></script>
210
210
  <script src="/builders/city-draw.js?v=2026-10-04-pins1"></script>
211
211
  <script src="/builders/street-draw.js?v=2026-10-04-pins1"></script>
@@ -176,9 +176,9 @@
176
176
 
177
177
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
178
178
 
179
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
180
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
181
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
179
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
180
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
181
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></script>
182
182
  <script src="/builders/palette.js" defer></script>
183
183
  <script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
184
184
  <!-- The kit, for its ONE renderer: the full-size ship-time visual figure
@@ -54,9 +54,9 @@
54
54
 
55
55
  <!-- The app shell (sidebar + top bar + footer). Dependency-free; runs at parse
56
56
  time so the chrome exists before the deferred page scripts execute. -->
57
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
58
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
59
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
57
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
58
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
59
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></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
  <!-- shared frontend toolkit (window.OTB) — loaded FIRST so task.js can pull from it. -->
@@ -138,9 +138,9 @@
138
138
  </div>
139
139
  </div>
140
140
 
141
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
142
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
143
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
141
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
142
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
143
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></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>
@@ -142,9 +142,9 @@
142
142
 
143
143
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
144
144
 
145
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
146
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
147
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
145
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
146
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
147
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></script>
148
148
  <script src="/builders/palette.js" defer></script>
149
149
  <script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
150
150
  <script src="/builders/brand-holes.js?v=2026-09-29-aqfix"></script>
@@ -165,9 +165,9 @@
165
165
 
166
166
  <!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
167
167
  chrome exists before the page script runs. -->
168
- <script src="/builders/shell-trail.js?v=2026-10-04-lightbulb"></script>
169
- <script src="/builders/craft-mode.js?v=2026-10-04-lightbulb"></script>
170
- <script src="/builders/shell.js?v=2026-10-04-lightbulb"></script>
168
+ <script src="/builders/shell-trail.js?v=2026-10-08-city-tab"></script>
169
+ <script src="/builders/craft-mode.js?v=2026-10-08-city-tab"></script>
170
+ <script src="/builders/shell.js?v=2026-10-08-city-tab"></script>
171
171
  <!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
172
172
  <script src="/builders/palette.js" defer></script>
173
173
  <!-- shared frontend toolkit (window.OTB) — loaded before watch.js, which pulls from it. -->