@bongos/core 1.19.1068 → 1.19.1070
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 +59 -54
- package/.claude/skills/design/SKILL.md +1 -1
- package/docs/adr/0342-module-categories-are-eight-parents-with-approved-sub-categories.md +83 -0
- package/docs/adr/README.md +1 -0
- package/docs/copy-inventory.md +12 -12
- package/docs/copy-registry.json +22 -22
- package/docs/module-api-changelog.md +4 -0
- package/docs/packs/artist.md +55 -31
- package/docs/packs/engineer.md +2 -0
- package/docs/page-readings.json +494 -488
- 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/collab.html +1 -1
- package/modules/hall-ui/public/copy-desk.html +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/goals.html +1 -1
- package/modules/hall-ui/public/government.html +1 -1
- package/modules/hall-ui/public/idea.html +3 -3
- package/modules/hall-ui/public/ideas.html +1 -1
- package/modules/hall-ui/public/index.html +1 -1
- package/modules/hall-ui/public/modules.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 +23 -32
- 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/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +16 -0
- package/src/module-api.js +1 -1
- package/tests/hall_nav.mjs +25 -1
- package/tests/hall_page_gate_map.mjs +2 -0
- package/tests/hall_tweak_editor.mjs +1 -1
- package/tests/nav_permission_atoms.mjs +1 -1
|
@@ -91,7 +91,7 @@
|
|
|
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.js?v=2026-09-
|
|
94
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></script>
|
|
95
95
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
96
96
|
<script src="/builders/palette.js" defer></script>
|
|
97
97
|
<script src="/builders/atlas.js?v=2026-09-02-index" defer></script>
|
|
@@ -50,7 +50,7 @@
|
|
|
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.js?v=2026-09-
|
|
53
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></script>
|
|
54
54
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
55
55
|
<script src="/builders/palette.js" defer></script>
|
|
56
56
|
<!-- shared frontend toolkit (window.OTB — rank labels, number formats) + the
|
|
@@ -60,7 +60,7 @@
|
|
|
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.js?v=2026-09-
|
|
63
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></script>
|
|
64
64
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
65
65
|
<script src="/builders/palette.js" defer></script>
|
|
66
66
|
<script src="/builders/dom-utils.js?v=2026-06-16-board"></script>
|
|
@@ -148,7 +148,7 @@
|
|
|
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.js?v=2026-09-
|
|
151
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></script>
|
|
152
152
|
<script src="/builders/palette.js" defer></script>
|
|
153
153
|
<script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
|
|
154
154
|
<script src="/builders/collab-lib.js?v=2026-09-24-archive"></script>
|
|
@@ -177,7 +177,7 @@
|
|
|
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.js?v=2026-09-
|
|
180
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></script>
|
|
181
181
|
<script src="/builders/palette.js" defer></script>
|
|
182
182
|
<script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
|
|
183
183
|
<script src="/builders/hall-kit.js"></script>
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
|
|
70
70
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
71
71
|
|
|
72
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
72
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></script>
|
|
73
73
|
<script src="/builders/palette.js" defer></script>
|
|
74
74
|
<script src="/builders/dom-utils.js?v=2026-06-16-gate"></script>
|
|
75
75
|
<script src="/builders/hall-kit.js"></script>
|
|
@@ -97,7 +97,7 @@
|
|
|
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.js?v=2026-09-
|
|
100
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></script>
|
|
101
101
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
102
102
|
<script src="/builders/palette.js" defer></script>
|
|
103
103
|
<script src="/builders/diagram-viewer.js?v=2026-06-14-diagviewer-1" defer></script>
|
|
@@ -98,7 +98,7 @@
|
|
|
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.js?v=2026-09-
|
|
101
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></script>
|
|
102
102
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
103
103
|
<script src="/builders/palette.js" defer></script>
|
|
104
104
|
<script src="/builders/md-reader.js?v=2026-09-02-mdreader-2"></script>
|
|
@@ -54,7 +54,7 @@
|
|
|
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.js?v=2026-09-
|
|
57
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></script>
|
|
58
58
|
<script src="/builders/palette.js" defer></script>
|
|
59
59
|
<script src="/builders/dom-utils.js?v=2026-06-16-gate"></script>
|
|
60
60
|
<script src="/builders/hall-kit.js"></script>
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
<div id="gate-modal-root"></div>
|
|
77
77
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
78
78
|
|
|
79
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
79
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></script>
|
|
80
80
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
81
81
|
<script src="/builders/palette.js" defer></script>
|
|
82
82
|
<script src="/builders/dom-utils.js?v=2026-06-16-gate"></script>
|
|
@@ -235,7 +235,7 @@
|
|
|
235
235
|
|
|
236
236
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
237
237
|
|
|
238
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
238
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></script>
|
|
239
239
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
240
240
|
<script src="/builders/palette.js" defer></script>
|
|
241
241
|
<script src="/builders/dom-utils.js?v=2026-06-14-domutils"></script>
|
|
@@ -134,7 +134,7 @@
|
|
|
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.js?v=2026-09-
|
|
137
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></script>
|
|
138
138
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
139
139
|
<script src="/builders/palette.js" defer></script>
|
|
140
140
|
<script src="/builders/dom-utils.js?v=2026-06-16-gate"></script>
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
link), so a deep-linked visitor needs a way back before the body loads
|
|
28
28
|
— the task.html precedent. -->
|
|
29
29
|
<div class="rec-crumb">
|
|
30
|
-
<a class="rec-back" href="/
|
|
31
|
-
<svg class="rec-back__ic" viewBox="0 0 16 16" aria-hidden="true"><path d="M9.4 3.6 5 8l4.4 4.4"/><path d="M5 8h7.2"/></svg>Back to
|
|
30
|
+
<a class="rec-back" href="/thinking">
|
|
31
|
+
<svg class="rec-back__ic" viewBox="0 0 16 16" aria-hidden="true"><path d="M9.4 3.6 5 8l4.4 4.4"/><path d="M5 8h7.2"/></svg>Back to your thinking</a>
|
|
32
32
|
<p class="rec-sub" id="idea-sub">Loading idea</p>
|
|
33
33
|
</div>
|
|
34
34
|
</div>
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
|
|
53
53
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
54
54
|
|
|
55
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
55
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></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,7 +225,7 @@
|
|
|
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.js?v=2026-09-
|
|
228
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></script>
|
|
229
229
|
<script src="/builders/palette.js" defer></script>
|
|
230
230
|
<script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
|
|
231
231
|
<!-- task 1003069 (R08) — the quick-filing form's routed result links a task
|
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
<script src="/builders/brand-apply.js?v=2026-06-27-r75" defer></script>
|
|
103
103
|
<!-- The app shell (sidebar + top bar + view router). Dependency-free; loaded
|
|
104
104
|
BEFORE builders.js so the chrome ids exist when events are wired. -->
|
|
105
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
105
|
+
<script src="/builders/shell.js?v=2026-09-28-archive" defer></script>
|
|
106
106
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
107
107
|
<script src="/builders/palette.js" defer></script>
|
|
108
108
|
<!-- task 2166: the shared component kit (window.OTBKit) — pager/ledger/rail.
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
|
|
81
81
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
82
82
|
|
|
83
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
83
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></script>
|
|
84
84
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
85
85
|
<script src="/builders/palette.js" defer></script>
|
|
86
86
|
<script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
|
|
@@ -115,7 +115,7 @@
|
|
|
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.js?v=2026-09-
|
|
118
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></script>
|
|
119
119
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
120
120
|
<script src="/builders/palette.js" defer></script>
|
|
121
121
|
<!-- the shared markdown reader (window.OTBMdReader) — primer.js renders through
|
|
@@ -187,7 +187,7 @@
|
|
|
187
187
|
|
|
188
188
|
<!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
|
|
189
189
|
chrome exists before the page script runs. -->
|
|
190
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
190
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></script>
|
|
191
191
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
192
192
|
<script src="/builders/palette.js" defer></script>
|
|
193
193
|
<!-- shared frontend toolkit (window.OTB) — loaded before profile.js, which pulls from it. -->
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
|
|
59
59
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
60
60
|
|
|
61
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
61
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></script>
|
|
62
62
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
63
63
|
<script src="/builders/palette.js" defer></script>
|
|
64
64
|
<script src="/builders/dom-utils.js?v=2026-06-16-gate"></script>
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
|
|
69
69
|
<!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
|
|
70
70
|
chrome exists before the page script runs. -->
|
|
71
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
71
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></script>
|
|
72
72
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
73
73
|
<script src="/builders/palette.js" defer></script>
|
|
74
74
|
<!-- shared frontend toolkit (window.OTB) — loaded before ranks.js, which pulls from it. -->
|
|
@@ -41,7 +41,7 @@
|
|
|
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.js?v=2026-09-
|
|
44
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></script>
|
|
45
45
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
46
46
|
<script src="/builders/palette.js" defer></script>
|
|
47
47
|
<script src="/builders/dom-utils.js?v=2026-06-14-domutils"></script>
|
|
@@ -50,7 +50,7 @@
|
|
|
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.js?v=2026-09-
|
|
53
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></script>
|
|
54
54
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
55
55
|
<script src="/builders/palette.js" defer></script>
|
|
56
56
|
<!-- shared frontend toolkit (window.OTB — rank labels, number formats) + the
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
|
|
100
100
|
<!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
|
|
101
101
|
chrome exists before the page script runs. -->
|
|
102
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
102
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></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
|
<!-- shared frontend toolkit (window.OTB) — loaded BEFORE sessions.js so it can pull from it. -->
|
|
@@ -436,7 +436,7 @@
|
|
|
436
436
|
|
|
437
437
|
<!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
|
|
438
438
|
chrome exists before the page scripts run. -->
|
|
439
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
439
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></script>
|
|
440
440
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
441
441
|
<script src="/builders/palette.js" defer></script>
|
|
442
442
|
<!-- shared frontend toolkit (window.OTB) — loaded before consuming IIFEs. -->
|
|
@@ -210,43 +210,34 @@
|
|
|
210
210
|
// so the badge counts ballots this viewer can actually cast, never "items
|
|
211
211
|
// open somewhere".
|
|
212
212
|
{ id: 'board-room', label: 'Board Room', icon: 'admin', href: '/board-room', gate: 'perm:board.vote.cast', count: 'board_votes' },
|
|
213
|
-
// task
|
|
214
|
-
//
|
|
215
|
-
//
|
|
216
|
-
//
|
|
217
|
-
//
|
|
218
|
-
//
|
|
219
|
-
//
|
|
220
|
-
//
|
|
221
|
-
//
|
|
222
|
-
//
|
|
223
|
-
// not one of "your numbers". gate 'signed' and NOT a craft or rank gate, on
|
|
224
|
-
// the goal's own settled decision: there is no permission gate on Full
|
|
225
|
-
// Ideas, completeness scoring and triage do the filtering. Hiding the page
|
|
226
|
-
// behind the ideator craft would hide the ideator's own surface from
|
|
227
|
-
// everyone else who has a thought, which is most of the value.
|
|
228
|
-
{ id: 'ideas', label: 'Ideas', icon: 'goals', href: '/ideas', gate: 'signed' },
|
|
213
|
+
// task 1004326 (BV2.TW15 of goal 1000095): the Ideas board (/ideas, task
|
|
214
|
+
// 1002928) and the Copy desk (/copy-desk, task 1003113) are ARCHIVED — off
|
|
215
|
+
// the nav on the owner's call of 2026-09-27, NOT deleted. Both pages and
|
|
216
|
+
// their routes stay reachable by URL, so old bookmarks, the studio's
|
|
217
|
+
// old-reviews dialog and idea.js's 'Develop it' deep link still land, and
|
|
218
|
+
// no data moves (page asks keep copy_desk_flags, ADR 0341 D6). Ideas are
|
|
219
|
+
// filed from Your thinking, whose form covers quick and Full Ideas; artist
|
|
220
|
+
// work lives in the Studio. Do not re-add either item without a new owner
|
|
221
|
+
// call: tests/hall_nav.mjs pins the group without them.
|
|
222
|
+
//
|
|
229
223
|
// task 1004098 (BV2.R03 of goal 1000095): THE ROOM — what you filed and
|
|
230
|
-
// what became of it
|
|
231
|
-
//
|
|
232
|
-
//
|
|
233
|
-
//
|
|
234
|
-
//
|
|
235
|
-
//
|
|
236
|
-
//
|
|
237
|
-
//
|
|
238
|
-
//
|
|
224
|
+
// what became of it, and since TW15 also where you file: the daily loop
|
|
225
|
+
// (file, then find out) on one page, and the whole criterion
|
|
226
|
+
// (`ideator-nothing-is-lost`) is that the second half must be reachable
|
|
227
|
+
// without asking anyone. NOT in the 'You' group beside Standing and
|
|
228
|
+
// Profile, even though it is your own view: that group is your numbers,
|
|
229
|
+
// and this page's subject is the project's work, seen from the thought
|
|
230
|
+
// that caused it. gate 'signed' — there is no permission gate on having a
|
|
231
|
+
// thought, and the route reads the VIEWER's own trail, so there is
|
|
232
|
+
// nothing here a rank could protect.
|
|
239
233
|
{ id: 'thinking', label: 'Your thinking', icon: 'goals', href: '/thinking', gate: 'signed' },
|
|
240
|
-
{ id: 'copy-desk', label: 'Copy desk', icon: 'docs', href: '/copy-desk', gate: 'signed', module: 'copy-desk' },
|
|
241
234
|
// task 1003117 (R06 of goal 1000074): the Studio — artist mode, "a place an
|
|
242
|
-
// artist wants to be, not a form".
|
|
243
|
-
//
|
|
244
|
-
// ACT, not reference) or You (its subject is the product, not a person).
|
|
235
|
+
// artist wants to be, not a form". Here and not in Docs (a place you ACT,
|
|
236
|
+
// not reference) or You (its subject is the product, not a person).
|
|
245
237
|
// gate 'signed' and NOT craft-gated: an artist is a craft, not a rank, so
|
|
246
238
|
// hiding the artist's own room behind the artist craft would hide it from
|
|
247
|
-
// the artist
|
|
248
|
-
//
|
|
249
|
-
// rather than vanishing.
|
|
239
|
+
// the artist. NO module gate: it degrades to reviews alone on an instance
|
|
240
|
+
// without copy-desk, rather than vanishing.
|
|
250
241
|
{ id: 'studio', label: 'Studio', icon: 'studio', href: '/studio', gate: 'signed' },
|
|
251
242
|
] },
|
|
252
243
|
// Your own numbers. task 2174 folded Achievements into Standing and this task
|
|
@@ -176,7 +176,7 @@
|
|
|
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.js?v=2026-09-
|
|
179
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></script>
|
|
180
180
|
<script src="/builders/palette.js" defer></script>
|
|
181
181
|
<script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
|
|
182
182
|
<!-- The kit, for its ONE renderer: the full-size ship-time visual figure
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
|
|
58
58
|
<!-- The app shell (sidebar + top bar + footer). Dependency-free; runs at parse
|
|
59
59
|
time so the chrome exists before the deferred page scripts execute. -->
|
|
60
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
60
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></script>
|
|
61
61
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
62
62
|
<script src="/builders/palette.js" defer></script>
|
|
63
63
|
<!-- shared frontend toolkit (window.OTB) — loaded FIRST so task.js can pull from it. -->
|
|
@@ -138,7 +138,7 @@
|
|
|
138
138
|
</div>
|
|
139
139
|
</div>
|
|
140
140
|
|
|
141
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
141
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></script>
|
|
142
142
|
<script src="/builders/palette.js" defer></script>
|
|
143
143
|
|
|
144
144
|
<script src="/builders/idea-objects.js?v=2026-09-27-split"></script>
|
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
|
|
103
103
|
<div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
|
|
104
104
|
|
|
105
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
105
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></script>
|
|
106
106
|
<script src="/builders/palette.js" defer></script>
|
|
107
107
|
<script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
|
|
108
108
|
<script src="/builders/tweak-editor-lib.js?v=2026-09-28-tw10"></script>
|
|
@@ -162,7 +162,7 @@
|
|
|
162
162
|
|
|
163
163
|
<!-- The app shell (sidebar + top bar). Dependency-free; loaded FIRST so the
|
|
164
164
|
chrome exists before the page script runs. -->
|
|
165
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
165
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></script>
|
|
166
166
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
167
167
|
<script src="/builders/palette.js" defer></script>
|
|
168
168
|
<!-- shared frontend toolkit (window.OTB) — loaded before watch.js, which pulls from it. -->
|
|
@@ -171,7 +171,7 @@
|
|
|
171
171
|
|
|
172
172
|
<!-- The app shell (sidebar + top bar + footer). Dependency-free; runs at parse
|
|
173
173
|
time so the chrome exists before the deferred page scripts execute. -->
|
|
174
|
-
<script src="/builders/shell.js?v=2026-09-
|
|
174
|
+
<script src="/builders/shell.js?v=2026-09-28-archive"></script>
|
|
175
175
|
<!-- jump palette (Ctrl/Cmd-K). Optional by design: without it the shell's slot stays hidden. -->
|
|
176
176
|
<script src="/builders/palette.js" defer></script>
|
|
177
177
|
<!-- shared frontend toolkit (window.OTB) — loaded FIRST so work.js can pull from it. -->
|
package/package-lock.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bongos/core",
|
|
3
|
-
"version": "1.19.
|
|
3
|
+
"version": "1.19.1070",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@bongos/core",
|
|
9
|
-
"version": "1.19.
|
|
9
|
+
"version": "1.19.1070",
|
|
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.19.
|
|
3
|
+
"version": "1.19.1070",
|
|
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
|
@@ -7709,5 +7709,21 @@
|
|
|
7709
7709
|
"id": "1003971",
|
|
7710
7710
|
"text": "The Studio is now the lofi home from the approved design: a night room with a window, moon, city lights, a lamp and a plant. Top right, your tally: credits, pages tweaked and this week. Resume takes you back into the page you"
|
|
7711
7711
|
}
|
|
7712
|
+
],
|
|
7713
|
+
"1.19.1069": [
|
|
7714
|
+
{
|
|
7715
|
+
"id": "1004326",
|
|
7716
|
+
"text": "The Ideas and Copy desk tabs are gone from the hall's sidebar, as you decided. Nothing was deleted: both pages still open from their old links and bookmarks, and every idea and flag is kept. New ideas are filed from Your think"
|
|
7717
|
+
}
|
|
7718
|
+
],
|
|
7719
|
+
"1.19.1070": [
|
|
7720
|
+
{
|
|
7721
|
+
"id": "1004333",
|
|
7722
|
+
"text": "The artist's guide now starts with the studio. An artist's AI session reading it learns the whole Tweak Mode loop: pick up where they left off, take the suggested page or pick another, rewrite every word in the editor (or in W"
|
|
7723
|
+
},
|
|
7724
|
+
{
|
|
7725
|
+
"id": "1003783",
|
|
7726
|
+
"text": "Decided how modules in the store are grouped: eight broad sections, each with narrow sub-categories that authors suggest and trusted builders approve, so the top-ten limit compares like with like."
|
|
7727
|
+
}
|
|
7712
7728
|
]
|
|
7713
7729
|
}
|
package/src/module-api.js
CHANGED
|
@@ -71,7 +71,7 @@ const { responsibilityFor, ROLE_RESPONSIBILITIES } = require('./role-responsibil
|
|
|
71
71
|
// there. scripts/gds/bump-version.js still rewrites the literal below; it appends
|
|
72
72
|
// the entry to that file. Look for a version's history there, not here.
|
|
73
73
|
// ---------------------------------------------------------------------------
|
|
74
|
-
const CORE_VERSION = '1.19.
|
|
74
|
+
const CORE_VERSION = '1.19.1070'; // CI auto-patch carrier (ADR 0161); changelog: docs/module-api-changelog.md
|
|
75
75
|
|
|
76
76
|
// A namespaced logger so a module's log lines are attributable + consistent.
|
|
77
77
|
// Usage: const log = api.logger('dev-box'); log.info('mounted');
|
package/tests/hall_nav.mjs
CHANGED
|
@@ -258,12 +258,16 @@ test('sidebar groups read by audience, in order', () => {
|
|
|
258
258
|
// task 1003455 (goal 1000089): 'blockers' joins the same group, after Tasks —
|
|
259
259
|
// its subject is the project (what's stuck on the owner), not a person or a
|
|
260
260
|
// craft, and its one data source (GET /blockers) is public like Roadmap's.
|
|
261
|
+
// task 1004326 (BV2.TW15, goal 1000095): 'ideas' and 'copy-desk' LEFT the group.
|
|
262
|
+
// Owner call 2026-09-27: both are ARCHIVED, not deleted — the pages and routes
|
|
263
|
+
// stay reachable by URL (the test below holds that), filing happens on Your
|
|
264
|
+
// thinking, and artist work lives in the Studio.
|
|
261
265
|
// task 1004232 (sky part 4, goal 1000095): 'goal-map' — THE PROJECT SKY — joins
|
|
262
266
|
// directly under 'goals'. The goal map that held the URL took no nav slot on
|
|
263
267
|
// purpose (task 1003479, and tests/goal_map_page.mjs pinned it); the owner
|
|
264
268
|
// granted the sky that slot on 2026-09-24 (ADR 0227 §11), under Goals because
|
|
265
269
|
// it is the goals seen as one picture.
|
|
266
|
-
assert.deepEqual(nav[0].items.map((i) => i.id), ['home', 'roadmap', 'goals', 'goal-map', 'work', 'blockers', 'board-room', '
|
|
270
|
+
assert.deepEqual(nav[0].items.map((i) => i.id), ['home', 'roadmap', 'goals', 'goal-map', 'work', 'blockers', 'board-room', 'thinking', 'studio'],
|
|
267
271
|
'the unlabeled group is the project itself (task 1002425 order)');
|
|
268
272
|
assert.deepEqual(nav[1].items.map((i) => i.id), ['standing', 'profile'], 'You = your own numbers');
|
|
269
273
|
// task 1003444: 'people' LEFT the group — the owner deleted the hall's
|
|
@@ -312,6 +316,26 @@ test('every nav link lands on a page that exists', () => {
|
|
|
312
316
|
assert.deepEqual(dead, [], 'no nav item points at a missing page');
|
|
313
317
|
});
|
|
314
318
|
|
|
319
|
+
// task 1004326 (BV2.TW15, goal 1000095): ARCHIVED, not deleted. The owner took
|
|
320
|
+
// the Ideas board and the Copy desk off the nav on 2026-09-27 and kept both
|
|
321
|
+
// pages, so old bookmarks, idea.js's "Develop it" link and the studio's
|
|
322
|
+
// old-reviews dialog still land. Both halves are held here: the nav offers
|
|
323
|
+
// neither (checked in the source too, because the copy-desk item was
|
|
324
|
+
// module-gated and a boot without that module would never render it anyway),
|
|
325
|
+
// and both page files are still served. tests/hall_page_gate_map.mjs keeps
|
|
326
|
+
// their server-side gate rows.
|
|
327
|
+
test('THE ARCHIVE: Ideas and Copy desk are off the nav, and both pages still exist', () => {
|
|
328
|
+
const items = parseNav(boot().sidebarHtml).flatMap((g) => g.items);
|
|
329
|
+
for (const id of ['ideas', 'copy-desk']) {
|
|
330
|
+
assert.equal(items.some((i) => i.id === id), false, `the nav no longer renders '${id}'`);
|
|
331
|
+
assert.doesNotMatch(SRC, new RegExp(`id: '${id}'`), `shell.js NAV declares no '${id}' item`);
|
|
332
|
+
assert.doesNotMatch(SRC, new RegExp(`href: '/${id}'`), `and no item points at /${id}`);
|
|
333
|
+
assert.ok(fs.existsSync(path.join(HALL, `${id}.html`)), `${id}.html is still in the hall, so /${id} still loads`);
|
|
334
|
+
}
|
|
335
|
+
assert.match(fs.readFileSync(path.join(HALL, 'studio.js'), 'utf8'), /href="\/builders\/copy-desk"/,
|
|
336
|
+
'the studio\'s old-reviews dialog still links to the copy desk');
|
|
337
|
+
});
|
|
338
|
+
|
|
315
339
|
test('href check actually CATCHES a dead link', () => {
|
|
316
340
|
assert.equal(hrefResolves({ href: '/no-such-page', external: false }), false);
|
|
317
341
|
assert.equal(hrefResolves({ href: '/drachmae', external: false }), true);
|
|
@@ -56,6 +56,8 @@ const ORACLE = {
|
|
|
56
56
|
// module's pages: copy-desk (task 1003113) and ideas (task 1002928) are open to
|
|
57
57
|
// every rank by design, and collab's reads (task 1003172) are scoped to the
|
|
58
58
|
// caller by the server — so for all three, sign-in IS the whole gate.
|
|
59
|
+
// task 1004326 (BV2.TW15): copy-desk and ideas are ARCHIVED — off the nav, not
|
|
60
|
+
// deleted — so both rows stay: the pages still load by URL, on this tier.
|
|
59
61
|
'/builders/copy-desk': 'requireBuilderPage',
|
|
60
62
|
// task 1003117 (R06 of goal 1000074): the Studio (artist mode) — open to every
|
|
61
63
|
// rank like copy-desk (an artist is a craft, not a rank), so sign-in is the
|
|
@@ -407,7 +407,7 @@ try {
|
|
|
407
407
|
assert.match(HTML, /<body data-page="tweak-editor"[^>]*data-fullscreen-switch/);
|
|
408
408
|
assert.equal((HTML.match(/<h1\b/g) || []).length, 1);
|
|
409
409
|
assert.ok(HTML.indexOf('tweak-editor-lib.js') < HTML.indexOf('tweak-editor.js?'), 'the lib loads first');
|
|
410
|
-
assert.match(HTML, /shell\.js\?v=2026-09-
|
|
410
|
+
assert.match(HTML, /shell\.js\?v=2026-09-28-archive/);
|
|
411
411
|
assert.equal(/fonts\.googleapis\.com\/css/.test(HTML), false);
|
|
412
412
|
for (const id of ['tw-bar', 'tw-counter', 'tw-open', 'tw-download', 'tw-upload', 'tw-file', 'tw-submit', 'tw-paper', 'tw-doc', 'tw-notice', 'tw-done', 'tw-take', 'tw-pick', 'tw-picks']) {
|
|
413
413
|
assert.ok(new RegExp(`id="${id}"`).test(HTML), `#${id} is in the markup`);
|
|
@@ -87,7 +87,7 @@ test('the hall-preview fixture carries every atom /me resolves', () => {
|
|
|
87
87
|
// the file and left the query alone, so a returning browser kept the cached copy —
|
|
88
88
|
// a fix that reaches nobody looks identical to a fix that does not work.
|
|
89
89
|
|
|
90
|
-
const SHELL_SHA = '
|
|
90
|
+
const SHELL_SHA = '0c646e5bac9336e8';
|
|
91
91
|
|
|
92
92
|
test('shell.js has not changed without its cache-bust being bumped', () => {
|
|
93
93
|
const actual = crypto.createHash('sha256').update(SHELL).digest('hex').slice(0, 16);
|