@bongos/core 1.19.444 → 1.19.446

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 (63) hide show
  1. package/.bongos-core.json +154 -49
  2. package/docs/adr/0054-session-token-reward-cost-plus.md +17 -0
  3. package/docs/copy-inventory.md +353 -352
  4. package/docs/copy-registry.json +397 -388
  5. package/docs/design/hall-direction-v2.md +295 -0
  6. package/docs/design/mocks/hall/_tokens.css +370 -0
  7. package/docs/design/mocks/hall/board/v1.html +846 -0
  8. package/docs/design/mocks/hall/board/v2.html +858 -0
  9. package/docs/design/mocks/hall/board/v3.html +884 -0
  10. package/docs/design/mocks/hall/goals/v1.html +1212 -0
  11. package/docs/design/mocks/hall/goals/v2.html +1192 -0
  12. package/docs/design/mocks/hall/goals/v3.html +1205 -0
  13. package/docs/design/mocks/hall/hall-sheet.html +244 -0
  14. package/docs/design/mocks/hall/reading/v1.html +1125 -0
  15. package/docs/design/mocks/hall/reading/v2.html +1177 -0
  16. package/docs/design/mocks/hall/reading/v3.html +1150 -0
  17. package/docs/design/mocks/hall/settings/v1.html +1238 -0
  18. package/docs/design/mocks/hall/settings/v2.html +1235 -0
  19. package/docs/design/mocks/hall/settings/v3.html +1299 -0
  20. package/docs/design/mocks/hall/task/v1.html +637 -0
  21. package/docs/design/mocks/hall/task/v2.html +646 -0
  22. package/docs/design/mocks/hall/task/v3.html +651 -0
  23. package/docs/design/vanilla-hall-ui-redesign-scope.md +2 -0
  24. package/docs/module-api-changelog.md +4 -0
  25. package/modules/economy/credits.js +46 -13
  26. package/modules/hall-ui/public/atlas.html +1 -2
  27. package/modules/hall-ui/public/collab.html +1 -2
  28. package/modules/hall-ui/public/copy-desk.css +11 -11
  29. package/modules/hall-ui/public/copy-desk.html +1 -2
  30. package/modules/hall-ui/public/diagrams.html +1 -2
  31. package/modules/hall-ui/public/drachmae.html +1 -2
  32. package/modules/hall-ui/public/gate.html +1 -2
  33. package/modules/hall-ui/public/goals.html +1 -2
  34. package/modules/hall-ui/public/government.html +1 -2
  35. package/modules/hall-ui/public/harbor.html +1 -2
  36. package/modules/hall-ui/public/idea.html +1 -2
  37. package/modules/hall-ui/public/ideas.css +6 -8
  38. package/modules/hall-ui/public/ideas.html +1 -2
  39. package/modules/hall-ui/public/index.html +3 -4
  40. package/modules/hall-ui/public/modules.html +1 -2
  41. package/modules/hall-ui/public/my-projects.html +1 -2
  42. package/modules/hall-ui/public/not-ready.html +1 -2
  43. package/modules/hall-ui/public/pair.html +1 -2
  44. package/modules/hall-ui/public/people.html +1 -2
  45. package/modules/hall-ui/public/primer.html +1 -2
  46. package/modules/hall-ui/public/profile.html +1 -2
  47. package/modules/hall-ui/public/ranks.html +1 -2
  48. package/modules/hall-ui/public/roadmap.html +1 -2
  49. package/modules/hall-ui/public/scouting.html +1 -2
  50. package/modules/hall-ui/public/sessions.html +1 -2
  51. package/modules/hall-ui/public/settings.html +1 -2
  52. package/modules/hall-ui/public/shell.js +35 -2
  53. package/modules/hall-ui/public/style.css +818 -392
  54. package/modules/hall-ui/public/task.html +1 -2
  55. package/modules/hall-ui/public/watch.css +1 -1
  56. package/modules/hall-ui/public/watch.html +1 -2
  57. package/modules/hall-ui/public/work.html +1 -2
  58. package/package-lock.json +2 -2
  59. package/package.json +1 -1
  60. package/scripts/gds/backfill-subagent-rewards.js +485 -0
  61. package/src/module-api.js +1 -1
  62. package/tests/backfill_subagent_rewards.mjs +308 -0
  63. package/tests/hall_tokens.mjs +371 -0
@@ -8,7 +8,6 @@
8
8
  <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>">
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com">
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11
- <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
12
11
  <link rel="stylesheet" href="/builders/style.css?v=2026-06-04-sessions">
13
12
  <link rel="stylesheet" href="/builders/sessions.css">
14
13
  </head>
@@ -22,7 +21,7 @@
22
21
  <div class="app-content">
23
22
  <div class="page-head"><p class="page-head__sub" id="ledger-sub">Loading sessions…</p></div>
24
23
 
25
- <main>
24
+ <main id="hall-main">
26
25
  <!-- Access notice — shown by sessions.js when the viewer is not an Archon. -->
27
26
  <section class="scroll" id="gate-scroll" aria-labelledby="gate-h" hidden>
28
27
  <h2 id="gate-h" class="scroll__h">Archons only</h2>
@@ -8,7 +8,6 @@
8
8
  <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>">
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com">
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11
- <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
12
11
  <link rel="stylesheet" href="/builders/style.css?v=2026-07-02-shell1">
13
12
  <!-- Page-local styles (task 2172) — extracted from the old inline <style>
14
13
  block per the hall placement rules; the rail comes from style.css's
@@ -25,7 +24,7 @@
25
24
  <div class="app-content">
26
25
  <div class="page-head"><p class="page-head__sub" id="settings-sub">Loading your preferences…</p></div>
27
26
 
28
- <main>
27
+ <main id="hall-main">
29
28
  <!-- Not-signed-in notice — shown by settings.js before it redirects, and
30
29
  as a fallback if reading the viewer fails. Deliberately OUTSIDE the
31
30
  grouped layout: full-width, ungrouped. -->
@@ -259,13 +259,23 @@
259
259
  ' title="' + esc(it.label) + '" hidden>' + icon(it.icon) +
260
260
  '<span class="nav-item__label">' + esc(it.label) + '</span></a>';
261
261
  }).join('');
262
+ // task 1003303: aria-controls names the region the head discloses. The
263
+ // frozen markup carried aria-expanded pointing at nothing, which is an
264
+ // accessibility gap a screen reader cannot recover from. The items get a
265
+ // wrapper to be that region; its class deliberately does NOT begin with
266
+ // "nav-group", because tests/hall_nav.mjs splits the sidebar on that
267
+ // string to find groups and a matching wrapper would parse as a phantom
268
+ // one. `data-gate` stays immediately after the class for the same reason.
262
269
  var head = g.group
263
- ? '<button type="button" class="nav-group__head" data-gate="' + (g.gate || 'always') + '" data-group="' + esc(groupId) + '" aria-expanded="' + (collapsed ? 'false' : 'true') + '" hidden>' +
270
+ ? '<button type="button" class="nav-group__head" data-gate="' + (g.gate || 'always') + '" data-group="' + esc(groupId) + '" aria-expanded="' + (collapsed ? 'false' : 'true') + '" aria-controls="nav-items-' + esc(groupId) + '" hidden>' +
264
271
  '<span class="nav-group__head-label">' + esc(g.group) + '</span>' + chevronIcon() +
265
272
  '</button>'
266
273
  : '';
274
+ var body = collapsible
275
+ ? '<div class="nav-items" id="nav-items-' + esc(groupId) + '">' + items + '</div>'
276
+ : items;
267
277
  return '<div class="nav-group' + (collapsible ? ' nav-group--collapsible' : '') + (collapsed ? ' nav-group--collapsed' : '') + '"' +
268
- (collapsible ? ' data-group="' + esc(groupId) + '"' : '') + '>' + head + items + '</div>';
278
+ (collapsible ? ' data-group="' + esc(groupId) + '"' : '') + '>' + head + body + '</div>';
269
279
  }).join('');
270
280
 
271
281
  el.innerHTML =
@@ -423,6 +433,28 @@
423
433
  history.replaceState(null, '', window.location.pathname + rest + window.location.hash);
424
434
  }
425
435
 
436
+ // task 1003303: the skip link, rendered once here rather than pasted into 27
437
+ // heads. The hall had none, which is a platform floor (DESIGN.md
438
+ // §Accessibility Floors) and, with the sidebar first in the DOM, meant a
439
+ // keyboard reader walked the whole nav before reaching the page on every
440
+ // page. It is the first focusable thing in the document and it targets a
441
+ // <main> made focusable but never ringed, so focus actually lands there.
442
+ function renderSkipLink() {
443
+ // Both mounts are looked up BY ID, not by selector: every hall page carries
444
+ // #app-sidebar and gives its <main> id="hall-main" for exactly this, and
445
+ // getElementById is the only lookup the hall's vm test stubs implement.
446
+ var main = document.getElementById('hall-main');
447
+ var sidebar = document.getElementById('app-sidebar');
448
+ if (!main || !sidebar || !sidebar.parentNode) return;
449
+ main.setAttribute('tabindex', '-1');
450
+ var a = document.createElement('a');
451
+ a.className = 'skip';
452
+ a.href = '#hall-main';
453
+ a.textContent = 'Skip to content';
454
+ // Before the sidebar, so it is the first focusable thing in the document.
455
+ sidebar.parentNode.insertBefore(a, sidebar);
456
+ }
457
+
426
458
  function renderFoot() {
427
459
  var el = document.getElementById('app-foot');
428
460
  if (!el) return;
@@ -676,6 +708,7 @@
676
708
 
677
709
  // ---------- boot (defer = DOM parsed; render synchronously) ----------
678
710
 
711
+ renderSkipLink();
679
712
  renderSidebar();
680
713
  renderTopbar();
681
714
  renderDeniedNotice();