@bongos/core 1.19.1067 → 1.19.1069

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 (54) hide show
  1. package/.bongos-core.json +73 -58
  2. package/docs/copy-inventory.md +74 -53
  3. package/docs/copy-registry.json +310 -101
  4. package/docs/module-api-changelog.md +4 -0
  5. package/docs/page-inventory.json +10 -2
  6. package/docs/page-readings.json +566 -536
  7. package/modules/hall-ui/public/atlas.html +1 -1
  8. package/modules/hall-ui/public/blockers.html +1 -1
  9. package/modules/hall-ui/public/board-room.html +1 -1
  10. package/modules/hall-ui/public/collab.html +1 -1
  11. package/modules/hall-ui/public/copy-desk.html +1 -1
  12. package/modules/hall-ui/public/deploy.html +1 -1
  13. package/modules/hall-ui/public/diagrams.html +1 -1
  14. package/modules/hall-ui/public/drachmae.html +1 -1
  15. package/modules/hall-ui/public/fleet.html +1 -1
  16. package/modules/hall-ui/public/gate.html +1 -1
  17. package/modules/hall-ui/public/goals.html +1 -1
  18. package/modules/hall-ui/public/government.html +1 -1
  19. package/modules/hall-ui/public/idea.html +3 -3
  20. package/modules/hall-ui/public/ideas.html +1 -1
  21. package/modules/hall-ui/public/index.html +1 -1
  22. package/modules/hall-ui/public/modules.html +1 -1
  23. package/modules/hall-ui/public/primer.html +1 -1
  24. package/modules/hall-ui/public/profile.html +1 -1
  25. package/modules/hall-ui/public/project-settings.html +1 -1
  26. package/modules/hall-ui/public/ranks.html +1 -1
  27. package/modules/hall-ui/public/roadmap.html +1 -1
  28. package/modules/hall-ui/public/roster.html +1 -1
  29. package/modules/hall-ui/public/sessions.html +1 -1
  30. package/modules/hall-ui/public/settings.html +1 -1
  31. package/modules/hall-ui/public/shell.js +23 -32
  32. package/modules/hall-ui/public/studio-lib.js +207 -0
  33. package/modules/hall-ui/public/studio.css +559 -170
  34. package/modules/hall-ui/public/studio.html +143 -49
  35. package/modules/hall-ui/public/studio.js +442 -33
  36. package/modules/hall-ui/public/studio.states.json +164 -4
  37. package/modules/hall-ui/public/task.html +1 -1
  38. package/modules/hall-ui/public/thinking.html +1 -1
  39. package/modules/hall-ui/public/tweak-editor.html +1 -1
  40. package/modules/hall-ui/public/watch.html +1 -1
  41. package/modules/hall-ui/public/work.html +1 -1
  42. package/modules/hall-ui/records/studio.md +47 -0
  43. package/package-lock.json +2 -2
  44. package/package.json +1 -1
  45. package/release-notes.json +12 -0
  46. package/scripts/hall-preview/server.js +5 -0
  47. package/src/module-api.js +1 -1
  48. package/tests/hall_audit.mjs +4 -0
  49. package/tests/hall_nav.mjs +25 -1
  50. package/tests/hall_page_gate_map.mjs +2 -0
  51. package/tests/hall_studio_home.mjs +429 -0
  52. package/tests/hall_studio_world.mjs +7 -1
  53. package/tests/hall_tweak_editor.mjs +1 -1
  54. package/tests/nav_permission_atoms.mjs +1 -1
@@ -8,17 +8,26 @@
8
8
  <meta charset="utf-8">
9
9
  <meta name="viewport" content="width=device-width, initial-scale=1">
10
10
  <title>Studio — {{worldName}}</title>
11
- <meta name="description" content="Artist mode — a calm place to tend the words and art the project shows people, one piece at a time: the review that shipped, and the copy someone flagged.">
11
+ <meta name="description" content="The studio: the artist's lofi home in Tweak Mode. Resume the page you hold, take the next one, approve what was applied, and see how far each surface has come.">
12
12
  <link rel="icon" href="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><text x='16' y='24' font-size='24' text-anchor='middle' font-family='sans-serif'>⌂</text></svg>">
13
13
  <link rel="preconnect" href="https://fonts.googleapis.com">
14
14
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
15
15
  <link rel="stylesheet" href="/builders/style.css?v=2026-07-02-shell1">
16
- <link rel="stylesheet" href="/builders/studio.css">
16
+ <link rel="stylesheet" href="/builders/studio.css?v=2026-09-28-tw16">
17
17
  <link rel="stylesheet" href="/builders/approval-queue.css">
18
18
  </head>
19
- <!-- data-fullscreen-switch opts into the shell's full-screen switch (task
20
- 1004327): the studio in the hall chrome by default, and one button in the top
21
- bar that hides it so the room fills the window, remembered for this page. -->
19
+ <!-- THE STUDIO HOME (task 1003971 / BV2.TW16, goal 1000095; ADR 0341 D2, D5,
20
+ D8 and D11). docs/design/mocks/tweak-mode/Main.dc.html is the master design:
21
+ the night room (window, moon, city lights, the lamp's glow, the desk and the
22
+ plant), the greeting and its sub-line, editable where they stand, the tally
23
+ top right, Resume, and three quick actions that open glass panels in place.
24
+ Every difference a gate or a route forced is listed in
25
+ modules/hall-ui/records/studio.md.
26
+
27
+ data-fullscreen-switch opts into the shell's full-screen switch (task
28
+ 1004327): the studio in the hall chrome by default, and one button in the
29
+ top bar that hides it so the room fills the window, as the artboard draws
30
+ it, remembered for this page. -->
22
31
  <body data-page="studio" data-page-title="Studio" data-fullscreen-switch>
23
32
 
24
33
  <div class="app">
@@ -28,54 +37,136 @@
28
37
  <header class="app-topbar" id="app-topbar"></header>
29
38
  <div class="app-content">
30
39
 
31
- <!-- The studio is a room, not a board, so it carries its OWN head voice
32
- (a greeting in the display face) rather than the quiet .page-head--board
33
- a working table uses. The static h1 is the no-JS / signed-out fallback;
34
- studio.js rewrites it to "Good evening, <name>" once /me answers, and
35
- fills the sub-line with what waits. It is the page's one <h1>. -->
36
- <main id="hall-main" class="studio">
37
- <div class="studio-atmos" aria-hidden="true"></div>
40
+ <!-- data-apex: the instance's own address, stamped by the server from the
41
+ branding pack (the landing surface's line in Artist Review Status). -->
42
+ <main id="hall-main" class="studio" data-apex="{{publicOrigin}}">
43
+ <!-- The night room. Drawn, not an image: it is the artboard's own shapes. -->
44
+ <div class="st-room" aria-hidden="true">
45
+ <div class="st-window">
46
+ <span class="st-moon"></span>
47
+ <span class="st-star st-star--1"></span>
48
+ <span class="st-star st-star--2"></span>
49
+ <span class="st-star st-star--3"></span>
50
+ <span class="st-star st-star--4"></span>
51
+ <span class="st-star st-star--5"></span>
52
+ <span class="st-tower st-tower--1"></span>
53
+ <span class="st-tower st-tower--2"></span>
54
+ <span class="st-tower st-tower--3"></span>
55
+ <span class="st-tower st-tower--4"></span>
56
+ <span class="st-tower st-tower--5"></span>
57
+ <span class="st-light st-light--1"></span>
58
+ <span class="st-light st-light--2"></span>
59
+ <span class="st-light st-light--3"></span>
60
+ <span class="st-light st-light--4"></span>
61
+ <span class="st-light st-light--5"></span>
62
+ <span class="st-light st-light--6"></span>
63
+ <span class="st-light st-light--7"></span>
64
+ <span class="st-mullion"></span>
65
+ </div>
66
+ <div class="st-floor"></div>
67
+ <div class="st-glow"></div>
68
+ <div class="st-lamp-stem"></div>
69
+ <div class="st-lamp-shade"></div>
70
+ <div class="st-mug"></div>
71
+ <div class="st-leaf st-leaf--1"></div>
72
+ <div class="st-leaf st-leaf--2"></div>
73
+ </div>
38
74
 
39
- <!-- A <div>, not a <header>: the shell's top bar is the page's one
40
- <header> (the kit's one-header-main-h1 floor), and in full screen it
41
- stays in the document as the way back (task 1004327). -->
42
- <div class="studio-head">
43
- <p class="studio-eyebrow">artist mode</p>
44
- <h1 class="studio-greet" id="studio-greet">The studio</h1>
45
- <p class="studio-sub" id="studio-sub">A quiet place to tend the words and art the project shows people.</p>
75
+ <!-- The name of the room, and the artist's tally (GET /copy-desk/tally)
76
+ in a glass pill top right. The shell's full-screen button keeps the
77
+ window's corner above it. -->
78
+ <div class="st-top">
79
+ <span class="st-eyebrow">{{worldName}} · studio</span>
80
+ <div class="st-tally" id="st-tally" hidden>
81
+ <span class="st-tally__item"><span class="st-tally__n st-tally__n--credits" id="st-tally-credits">0</span><span class="st-tally__label">credits</span></span>
82
+ <span class="st-tally__rule" aria-hidden="true"></span>
83
+ <span class="st-tally__item"><span class="st-tally__n" id="st-tally-pages">0</span><span class="st-tally__label">pages tweaked</span></span>
84
+ <span class="st-tally__rule" aria-hidden="true"></span>
85
+ <span class="st-tally__item"><span class="st-tally__n" id="st-tally-week">0</span><span class="st-tally__label">this week</span></span>
86
+ </div>
87
+ </div>
88
+
89
+ <!-- The studio's own words. Rewriting them is a tweak of THIS page
90
+ (builders:studio, ADR 0341 D2): the first click offers to take the
91
+ studio page, and then these lines are typed over in place and saved
92
+ to its draft, never to the page itself. A <div>, not a <header>: the
93
+ shell's top bar is the page's one <header>. -->
94
+ <div class="st-words" id="st-words">
95
+ <h1 class="st-greet" id="studio-greet" data-words>Good evening.</h1>
96
+ <p class="st-sub" id="studio-sub" data-words>Nothing is on your desk yet. The Tweak/CopyWrite Flow has a page ready for you.</p>
97
+ <button type="button" class="st-hint" id="st-hint" aria-controls="st-offer">click any words here to rewrite them</button>
98
+ <p class="st-editing" id="st-editing" aria-live="polite" hidden></p>
99
+ <div class="st-offer" id="st-offer" hidden>
100
+ <p class="st-offer__text">These words are the studio page itself. Take the page, type over them here, and submit it from the editor when you are done.</p>
101
+ <p class="st-offer__err" id="st-offer-err" role="alert" hidden></p>
102
+ <div class="st-offer__acts">
103
+ <button type="button" class="st-offer__take" id="st-offer-take">take the studio page</button>
104
+ <button type="button" class="st-offer__no" id="st-offer-no">not now</button>
105
+ </div>
106
+ </div>
46
107
  </div>
47
108
 
48
- <!-- The quick actions. One today: the Approval queue (task 1004323 / TW12),
49
- the pages /tweak has applied, waiting for the artist to approve or
50
- send back. It opens the glass panel in place (approval-queue.js);
51
- the lofi studio home (task 1003971 / TW16) moves this door into its
52
- own quick actions and keeps the panel as it is. -->
53
- <div class="studio-doors">
54
- <button type="button" class="studio-door" id="studio-approvals" data-approvals aria-haspopup="dialog">
55
- <span class="studio-door__label">Approval queue</span>
56
- <span class="studio-door__detail" id="studio-approvals-detail">the pages /tweak has applied</span>
109
+ <!-- Resume, then the three quick actions. Each action opens its panel
110
+ in place, so the artist never leaves the room. -->
111
+ <div class="st-actions">
112
+ <a class="st-resume" id="st-resume" href="/builders/tweak-editor" hidden>
113
+ <span class="st-resume__label">Resume</span>
114
+ <span class="st-resume__detail" id="st-resume-detail"></span>
115
+ </a>
116
+ <button type="button" class="st-action" id="st-flow" aria-haspopup="dialog">
117
+ <span class="st-action__label">Tweak/CopyWrite Flow</span>
118
+ <span class="st-action__detail" id="st-flow-detail">the next page to tweak</span>
119
+ </button>
120
+ <button type="button" class="st-action" id="studio-approvals" data-approvals aria-haspopup="dialog">
121
+ <span class="st-action__label">Approval queue</span>
122
+ <span class="st-action__detail" id="studio-approvals-detail">the pages /tweak has applied</span>
123
+ </button>
124
+ <button type="button" class="st-action" id="st-status" aria-haspopup="dialog">
125
+ <span class="st-action__label">Artist Review Status</span>
126
+ <span class="st-action__detail" id="st-status-detail">how far each surface has come</span>
127
+ </button>
128
+ <!-- The retired review queue (task 1004325 / TW14), a quiet door that
129
+ shows only while reviews filed before Tweak Mode still wait. -->
130
+ <button type="button" class="st-older" id="st-older" aria-haspopup="dialog" hidden>
131
+ <span id="st-older-label">reviews from before Tweak Mode</span>
57
132
  </button>
58
133
  </div>
59
134
 
60
- <!-- The one thing to tend now. Rendered by studio.js; the markup here is
61
- the loading state (and the no-JS fallback), never an empty panel. -->
62
- <section class="studio-focus" id="studio-focus" aria-live="polite">
63
- <div class="studio-empty">
64
- <h2>Opening the studio…</h2>
65
- <p>Gathering the reviews and flagged copy that wait for you.</p>
135
+ <!-- The two small glass panels: the Tweak/CopyWrite Flow and Artist
136
+ Review Status. The Approval queue is its own component
137
+ (approval-queue.js), mounted by studio.js. -->
138
+ <div class="st-overlay" id="st-panel" hidden>
139
+ <div class="st-dialog" role="dialog" aria-modal="true" aria-labelledby="st-panel-title">
140
+ <div class="st-dialog__head">
141
+ <h2 class="st-dialog__title" id="st-panel-title" tabindex="-1">Tweak/CopyWrite Flow</h2>
142
+ <button type="button" class="st-close" data-close-panel>close</button>
143
+ </div>
144
+ <div class="st-dialog__body" id="st-panel-body"></div>
66
145
  </div>
67
- </section>
68
-
69
- <!-- What else waits — the garden's remaining stones. Hidden until there
70
- is more than the one in focus. -->
71
- <div class="studio-rest" id="studio-rest" hidden></div>
146
+ </div>
72
147
 
73
- <!-- The full tables the room replaces stay one link away, for when the
74
- reader wants the whole list rather than one piece at a time. -->
75
- <nav class="studio-links" aria-label="The full queues">
76
- <a href="/builders/copy-desk">The copy desk — every flagged string</a>
77
- <a href="/builders/work">The task board — all work</a>
78
- </nav>
148
+ <!-- The reviews filed before Tweak Mode (R04, retired in TW14): the
149
+ garden, one piece at a time, answered here until none remain. -->
150
+ <div class="st-reviews" id="st-reviews" hidden>
151
+ <div class="st-reviews__dialog" role="dialog" aria-modal="true" aria-labelledby="st-reviews-title">
152
+ <div class="st-reviews__head">
153
+ <h2 class="st-reviews__title" id="st-reviews-title" tabindex="-1">Reviews from before Tweak Mode</h2>
154
+ <button type="button" class="btn-ghost" data-close-reviews>close</button>
155
+ </div>
156
+ <p class="st-reviews__sub">Each was filed when a ship changed copy or visuals. No new ones arrive; answer these and the door goes.</p>
157
+ <section class="studio-focus" id="studio-focus" aria-live="polite">
158
+ <div class="studio-empty">
159
+ <h2>Opening the reviews…</h2>
160
+ <p>Gathering the reviews and flagged copy that wait for you.</p>
161
+ </div>
162
+ </section>
163
+ <div class="studio-rest" id="studio-rest" hidden></div>
164
+ <nav class="studio-links" aria-label="The full queues">
165
+ <a href="/builders/copy-desk">The copy desk — every flagged string</a>
166
+ <a href="/builders/work">The task board — all work</a>
167
+ </nav>
168
+ </div>
169
+ </div>
79
170
  </main>
80
171
 
81
172
  <footer class="app-foot" id="app-foot"></footer>
@@ -85,18 +176,21 @@
85
176
 
86
177
  <div id="toast" class="toast" role="status" aria-live="polite" data-visible="0"></div>
87
178
 
88
- <script src="/builders/shell.js?v=2026-09-27-fullscreen"></script>
179
+ <script src="/builders/shell.js?v=2026-09-28-archive"></script>
89
180
  <script src="/builders/palette.js" defer></script>
90
181
  <script src="/builders/dom-utils.js?v=2026-06-23-contrib"></script>
91
182
  <!-- The kit, for its ONE renderer: the full-size ship-time visual figure
92
- (task 1003829). The copy desk — the artist's other room — already loads it,
93
- and a fourth hand-rolled <figure> is what the kit exists to stop. -->
183
+ (task 1003829), which the older reviews still show. -->
94
184
  <script src="/builders/hall-visual.js?v=2026-09-16-visual1"></script>
95
185
  <script src="/builders/hall-kit.js"></script>
96
186
  <!-- The Approval queue panel (task 1004323): its pure rules, then the panel.
97
187
  studio.js mounts it with its own WRITE_ROUTES. -->
98
188
  <script src="/builders/approval-queue-lib.js"></script>
99
189
  <script src="/builders/approval-queue.js"></script>
100
- <script src="/builders/studio.js?v=2026-09-28-tw14"></script>
190
+ <!-- The page names and the draft body (the tweak editor's pure rules), then
191
+ the studio's own. -->
192
+ <script src="/builders/tweak-editor-lib.js?v=2026-09-28-tw10"></script>
193
+ <script src="/builders/studio-lib.js?v=2026-09-28-tw16"></script>
194
+ <script src="/builders/studio.js?v=2026-09-28-tw16"></script>
101
195
  </body>
102
196
  </html>