Commit Graph

  • 17c4518944 my_buds: dismiss "No buds yet" empty-state row async on first-bud add — _appendBudEntry queried .bud-entry--empty but _applet-list-shell renders it w. the family-agnostic .applet-list-entry--empty class; the selector never matched, so first-bud appends landed alongside the empty row instead of replacing it; existing test_add_bud_via_bud_btn_appends_entry extended to also assert the empty row dismisses post-add (caught the bug — TDD) Disco DeDisco 2026-05-12 16:47:13 -04:00
  • be919c7aff bud panels duplicate-add guard: server-side already_present flag + client-side error Brief w. FYI flash highlight on the existing entry — for each of the three #id_bud_btn panels (My Buds / post-share / gatekeeper-invite), the JSON response from add_bud / share_post / invite_gamer now carries {already_present, recipient_display, recipient_user_id}; bud-btn.js branches on already_present → calls new Brief.showDuplicateBanner({display_name, target_selector}) instead of the normal onSuccess append; banner title reads @<username> is already present, NVM dismisses, FYI dismisses AND eases in the .bud-duplicate-flash class (color: var(--terUser); text-shadow: 0 0 .5em var(--ninUser); transition: 600ms) onto the existing element (.bud-entry .bud-name / .post-recipient[data-user-id=…] / .gate-slot.filled[data-user-id=…]); gatekeeper "already present" = recipient is either GateSlot.FILLED + gamer OR has TableSeat OR has a pending RoomInvite (highlight target only set when seated — pending invites have no visible slot); .post-recipient chips + .gate-slot.filled cells gain data-user-id so the FYI selector can find them; my_buds.html now loads note.js via the {% block scripts %} pattern (Brief module is required by the duplicate banner path); bonus: latent test_jasmine.py bug fixed — "0 failures" in result.text matched "10 failures" / "20 failures" / etc, silently passing up to 99 failed specs; replaced w. re.search(r"(?<!\d)0 failures\b", …) (caught my new red specs, would've caught any prior Jasmine regression); 18 new ITs + 10 new Jasmine specs + 3 new FTs (one per panel) — TDD Disco DeDisco 2026-05-12 16:40:15 -04:00
  • 264ed5968e bud panels DRY refactor: extract shared skeleton into bud-btn.js — the three #id_bud_btn partials (_bud_panel post-share, _bud_invite_panel gatekeeper, _bud_add_panel My Buds) duplicated ~70% of their JS (csrf/open/close, btn click, Escape, click-outside w. optional suggestions excl., Enter handler, OK POST + JSON routing); collapse into bindBudBtn({submitUrl, autocompleteUrl?, onSuccess(data)}) so each panel keeps only its markup + an onSuccess callback (post-share: _appendLine + _appendRecipientChip + Brief.showBanner; gatekeeper: Brief.showBanner only; my-buds: _appendBudEntry); autocomplete binding folded into bud-btn.js (drives bindBudAutocomplete when autocompleteUrl is passed) so callers stop repeating the bindBudAutocomplete(...) boilerplate; dead data-share-url/data-invite-url/data-add-url attrs dropped since bindBudBtn takes the URL directly; behavior-preserving — all 21 existing FTs (test_my_buds + test_bud_btn) + 49 ITs (test_buds + test_share_post + test_brief) green Disco DeDisco 2026-05-12 15:52:09 -04:00
  • 7015ddd534 my_buds: strip bud-autocomplete bindings from _bud_add_panel.html — the autocomplete pool is request.user.buds (per search_buds view), so on the page where you ADD new buds the suggestions are the precise set you can't usefully re-add; post-share + gatekeeper-invite panels keep the binding (re-sharing w. an existing bud is a real flow); test_autocomplete_suggests_buds_by_username_prefix → test_no_autocomplete_suggestions_on_my_buds_page (asserts #id_bud_suggestions absent — deterministic, no debounce-window race); dead id_bud_suggestions click-outside guard + unused {% load static %} dropped — TDD Disco DeDisco 2026-05-12 15:42:41 -04:00
  • 880408285a post.html line timestamps mirror scroll's relative_ts buckets: swap date:'g:i A' for the existing lyric_extras.relative_ts filter so same-day Lines render as 11:46 p.m., then collapse to weekday (Sat) past 24h, 07 Mar past a week, 07 Mar 2025 past a year — DRYs onto the single filter scroll already uses (no duplicated bucketing logic); same-day rendering shifts from 11:46 PM to 11:46 p.m. as a side effect of reusing the lowercase g:i a format relative_ts already standardised on — TDD Disco DeDisco 2026-05-12 15:13:49 -04:00
  • df99cad984 mobile h2 + sky wheel landscape fit: per-letter flex spread (justify-content: space-between via base.html JS letter-splitter) replaces text-justify: inter-character — iOS Safari + Firefox silently fall back to inter-word for Latin text, leaving letters clustered at the slot start; flex layout works everywhere; viewport-fluid font clamp(1.3rem, 5vw, 2rem) portrait + clamp(1.2rem, 4.4vh, 2.75rem) landscape so glyphs scale w. viewport instead of a fixed-rem ceiling that overflowed the 45/55 slot at the rem-clamp floor; portrait <500px gets padding-inline 0.4em→0.6em on the word-spans so H-B don't run together at the cramped font-size; .sky-page post-save scroll-snap sections pinned to height: 100% (was: min-height: 100%) + .sky-svg max-height: 100% so the wheel fits exactly one aperture on landscape mobile (was: 480px max blew past ~350px aperture, leaving an intermediate scroll position) Disco DeDisco 2026-05-09 14:01:16 -04:00
  • 22d0507c3f post.html header prose branches on viewer-vs-owner: invitees see "shared with me, @viewer the {title}" + "created by @owner the {title}" instead of the owner-centric "just me / shared between" lines; owner view unchanged — TDD Disco DeDisco 2026-05-09 01:14:11 -04:00
  • 419e022140 gatekeeper invite ports to #id_bud_btn slide-out: drop the inline #id_invite_email form, add bud-invite panel for room owner during gate phase, async POST to invite_gamer w. autocomplete + symmetric buds auto-add + slide-down Brief banner — TDD Disco DeDisco 2026-05-09 00:59:54 -04:00
  • 4010e452a6 recentered copyright on landscape Disco DeDisco 2026-05-09 00:38:51 -04:00
  • 72fefe2fc7 landscape footer rearrange: #id_bud_btn moves to top of right sidebar (upper-right corner of footer); ©2026 Dis Co. text becomes a single-line vertical strip at the very right edge of the viewport (mirror of portrait's "after the icons" position); bud-panel + bud-suggestions follow the bud-btn to the top w. transform-origin: right center Disco DeDisco 2026-05-09 00:35:26 -04:00
  • 47871b5b4a align #id_kit_btn / #id_gear_btn / #id_bud_btn under the unified centre formula — drop the legacy right: 2.5rem ≥1800px override on kit-btn that left it outboard of gear-btn after the rem-fluid sidebar refactor Disco DeDisco 2026-05-09 00:23:53 -04:00
  • ad9f7b43ed h2 padding-inline boundary between the two spans (BILL | BOARD natural gap) + landscape inherits portrait flex split (45/55 vertical, with padding-inline-end on first span = visual break between rotated words) Disco DeDisco 2026-05-09 00:18:57 -04:00
  • 3ab60c67b6 fluid root rem + landscape aperture: html font-size = clamp(14px, 2.4vmin, 22px) so 1rem scales w. viewport (rotation-invariant via vmin); --sidebar-w + --h2-col-w CSS vars unify navbar/footer/h2 sizing; container margin-left = sidebar + h2-col-w in landscape so applets clip cleanly under the rotated wordmark; h2 markup splits into two spans (45/55 horizontal title); drop the disparate min-height font-size jumps + 1800px sidebar-doubling overrides Disco DeDisco 2026-05-09 00:14:14 -04:00
  • c426ca69fa Note.grant_if_new admin prose: 'comes with the customary title of' → 'bestows the honorary title of'; 'additional benefits' → 'additional corporate benefits' Disco DeDisco 2026-05-08 23:44:46 -04:00
  • e0ace01670 post.html attribution palette: usernames render w. @-prefix (bare emails left as-is); .post-attribution spans wrap username+title combos for the --quaUser colour key — line author col, self/shared header lines, Note.grant_if_new prose Disco DeDisco 2026-05-08 23:42:51 -04:00
  • eb0369f0b7 buds Phase 2: top-3 username|email autocomplete on #id_recipient (post share + my_buds add); implicit symmetric auto-add on share_post (sharer ↔ recipient buds graph); recipient field accepts username OR email — TDD Disco DeDisco 2026-05-08 23:34:35 -04:00
  • 11ff109d1e my_posts: titles → @{handle}'s Posts + Posts by Others (view-side string build); applet-list link colour --terUser w. hover/active shifting to --ninUser + --terUser glow halo Disco DeDisco 2026-05-08 23:16:31 -04:00
  • 246e45e55d buds rename + applet-list shell — Buddies → Buds everywhere (model field, slug, URL, view, DOM, CSS); my_buds.html + my_posts.html share new _applet-list-shell.html partial — vertical-title applet-scroll card; my_posts hosts two side-by-side in landscape, stacked in portrait — TDD Disco DeDisco 2026-05-08 23:08:33 -04:00
  • 5f6002aa70 buddies sprint phase 1: User.buddies M2M(self,symm=False) + my_buddies aperture page + add_buddy JSON endpoint + buddy btn slide-out — TDD; My Contacts applet renamed → My Buddies (slug + name + partial) Disco DeDisco 2026-05-08 22:31:42 -04:00
  • b3eb14140c admin Posts (NOTE_UNLOCK): readonly input + 'No response needed' placeholder + secUser focus glow + buddy btn suppressed + view POST 403 + Line.admin_solicited listener nukes errant writes; share Lines: drop ts suffix, author = sharer (adman fallback for anon legacy), silent no-op on re-share — TDD Disco DeDisco 2026-05-08 21:52:34 -04:00
  • 6f76f6c176 post aperture refactor (May-8b): Post.title field; Line.author PROTECT FK + created_at; Note.grant_if_new admin-vs-Look! format dispatch w. note-ref anchor; bottom-anchored aperture w. shared-between header + per-Line user/timestamp; dotted-? Brief square; reserved adman seed — TDD Disco DeDisco 2026-05-08 21:29:21 -04:00
  • ba5f6556c0 buddy btn sprint: banner-anchor + window.Brief fix lands the last red FT — 16/16 buddy + 12 share/jasmine/my_notes + 818 IT regression — TDD Disco DeDisco 2026-05-08 19:14:50 -04:00
  • e465b6a3b3 buddy btn sprint scaffolding: TDD spec + partial template + SCSS + page_class — 15/16 FTs green, 1 captured-red for post-compaction handoff Disco DeDisco 2026-05-08 19:00:28 -04:00
  • 7b2780e642 test_applet_new_post: bump current-url regex /dashboard/post/ → /billboard/post/ Disco DeDisco 2026-05-08 18:26:00 -04:00
  • 14bab444ff brief sprint C3.b+c+d+e: share-post Line+Brief async, magic-link / invalid-link banners use Brief styling, .alert-* retired — TDD Disco DeDisco 2026-05-08 18:15:43 -04:00
  • fa53bf561a brief sprint C3.a: Note unlock spawns Line + Brief on the user's per-category Post; banner JS consumes the new brief payload (FYI → post detail, square → my-notes) — TDD Disco DeDisco 2026-05-08 18:00:01 -04:00
  • 7f9ff36d1d brief sprint C2: introduce billboard.Brief notification model + view_post marks-read on GET — TDD Disco DeDisco 2026-05-08 17:35:46 -04:00
  • d192b1522d brief sprint C1: relocate Post + Line from dashboard → billboard (no behavior change) — TDD Disco DeDisco 2026-05-08 17:20:06 -04:00
  • f659a64b91 some tweaks to portrait media query .btn-primary responsive sizing Disco DeDisco 2026-05-08 16:18:29 -04:00
  • a319318740 sky/sea modal titles: PICK SKY/SEA → SKY/SEA SELECT (titles only — table-hex .btn-primary instances stay PICK SKY/SEA where SELECT wouldn't fit) Disco DeDisco 2026-05-08 15:49:58 -04:00
  • d58fd1db15 small changes to .sky-field styling Disco DeDisco 2026-05-08 15:41:24 -04:00
  • 846f9ff461 PICK SKY DEL: server purge of seat Character + race guards stop the btn from re-injecting; readonly opacity bump (0.6 → 0.85) — TDD Disco DeDisco 2026-05-08 15:39:07 -04:00
  • 1111df8465 sky form TZ: render-readonly + drop #id_nf_tz_hint; placeholder absorbs the auto-detected hint copy — TDD Disco DeDisco 2026-05-08 15:27:09 -04:00
  • 8a8d1536b1 PICK SKY DEL btn: JS-inject after wheel paints so a blank modal carries no DEL action — TDD Disco DeDisco 2026-05-08 14:56:43 -04:00
  • 301b4e8201 applet-box: hide inner-applet scrollbars so they match the page-aperture treatment Disco DeDisco 2026-05-08 14:50:28 -04:00
  • 097a5dd437 my-sky applet DEL btn: shift left by half the applet's padding asymmetry so it re-aligns w. the SVG center Disco DeDisco 2026-05-08 14:44:54 -04:00
  • e9bceaab62 sky wheel: ubiquitous DEL btn — applet & PICK SKY parity w. Dashsky; PICK SKY clears client-only state (no User-model touch) — TDD Disco DeDisco 2026-05-08 14:34:41 -04:00
  • 283b417341 sky.html: tame iOS Firefox date/time native widgets w. appearance:none + max-width; mirror small-landscape btn-primary scaling onto portrait & narrow form-col gap on both Disco DeDisco 2026-05-08 14:04:15 -04:00
  • c8d7b055d7 sky.html: clip horizontal overflow on iOS Firefox — .sky-page overflow-x:hidden + min-width:0 on .sky-field input Disco DeDisco 2026-05-08 13:18:30 -04:00
  • 9ff437012a sky.html: DEL btn at wheel center; async SAVE SKY transitions into saved state without reload; pre-save hides wheel-col so form+SAVE SKY stay centered — TDD Disco DeDisco 2026-05-08 13:07:56 -04:00
  • bbd1b22bb0 sky.html post-save: reset (max-width:600px) form-main height cap & btn align-self so flex-column flip lands the SAVE SKY beneath the fields Disco DeDisco 2026-05-08 12:30:01 -04:00
  • 05c9f9c079 sky.html post-save: stack SAVE SKY beneath form fields & vertically center the pair, parity w. wheel Disco DeDisco 2026-05-08 12:27:47 -04:00
  • 319b787109 sky.html: snap-binary aperture scroll (wheel ↔ form, full aperture each); SAVE SKY animates scrollTop back to 0 — TDD Disco DeDisco 2026-05-08 12:24:11 -04:00
  • 3beedc3f0a sky form: flip label margins so each label hugs its own input below; zero geo-btn vertical margin so birth place doesn't drift Disco DeDisco 2026-05-08 12:00:03 -04:00
  • 9e68cfd8e4 sky form inputs: form-control look (gold border, pill, page-bg fill, focus glow); login email label matches sky-field label style Disco DeDisco 2026-05-08 11:53:05 -04:00
  • 4f2c7d9577 sky form: clear timezone field on new place pick so TZ auto-redetects from coords — TDD Disco DeDisco 2026-05-08 11:40:37 -04:00
  • cc2a3f3526 rename natus → sky across the codebase — natal chart abstraction is now sky throughout, since chart inputs aren't birthday-gated Disco DeDisco 2026-05-04 20:36:15 -04:00
  • 19b7828ea9 ignore .vscode/ in git & docker contexts; workspace tasks/settings are local-only (Windows paths + per-machine venv layout) Disco DeDisco 2026-05-04 18:17:54 -04:00
  • a97cd8dcff test_clicking_pick_sea_btn_opens_sea_overlay: poll click+sea-open assertion to absorb DOM-vs-script race on slow CI — TDD Disco DeDisco 2026-05-04 02:23:47 -04:00
  • c9563308d8 SAVE SKY provenance + sky→hex (not sky→sea) transition — TDD Disco DeDisco 2026-05-04 01:57:35 -04:00
  • 5413e63585 billboard Most Recent Scroll: fix SQLite NULL drop on SIG_READY exclude; pronouns flow FT; Blades middle reversal Nervous → Fickle — TDD Disco DeDisco 2026-05-04 01:27:17 -04:00
  • 29493c4f74 pronouns: per-user pronouns ideology + Pronouns applet on Game Kit; provenance prose uses actor.pronouns at render time — TDD Disco DeDisco 2026-05-04 01:11:40 -04:00
  • 599d40decd auth urls: mount apps.lyric.urls under /dashboard/ to mirror gameboard/epic & billboard/drama convention Disco DeDisco 2026-05-04 00:18:36 -04:00
  • 2dc68c41a7 billboard applets: drop billboard- prefix from partials & ids; Most Recent → Most Recent Scroll; room_scroll → scroll — TDD Disco DeDisco 2026-05-03 23:22:01 -04:00
  • b1a11504f5 game kit + role icons + tarot fan: in-use mini-portal label, FLIP cue polarity reset, role icon redraws Disco DeDisco 2026-05-03 22:28:32 -04:00
  • f78177778f SIG SELECT exit: 2s hang after tray closes; suppress waiting msg if PICK SKY already up — TDD Disco DeDisco 2026-05-03 22:11:07 -04:00
  • 480cb4aed6 tray: Tray.placeSig analogue of placeCard for SIG SELECT exit; rename arc-in → fade-in — TDD Disco DeDisco 2026-05-03 21:58:44 -04:00
  • 9b93b9d31b tray tooltips: tilt persists while portal is open; PRV|NXT pinned to corners — TDD Disco DeDisco 2026-05-03 21:18:09 -04:00
  • b29bcf5c38 tray sig-card tooltip: portal w. PRV|NXT pager — TDD Disco DeDisco 2026-05-03 21:07:33 -04:00
  • 08243d109d tray cards: shadow, hover-tilt w. focus persistence, role-card tooltip — TDD Disco DeDisco 2026-05-03 18:40:10 -04:00
  • 75fcc5b34d billboard applets: single-root wrapper for HTMX swap; full context on toggle — TDD Disco DeDisco 2026-05-03 17:15:26 -04:00
  • 536a558f26 PICK SEA: gate PRV|NXT on .fyi-open like sig + fan Disco DeDisco 2026-05-01 02:36:50 -04:00
  • 8b0ad545c9 collapse epic migrations 0007–0022 → 0007_finalize_earthman_deck; add reset_staging_db Disco DeDisco 2026-05-01 02:22:43 -04:00
  • 3410f073f0 fan-card title symmetry; pips → Minor; tray Sig card Disco DeDisco 2026-05-01 02:06:55 -04:00
  • c264b6e3ee PICK SEA reversal axis: server-side roll + preview + deposited slot — TDD Disco DeDisco 2026-05-01 00:11:40 -04:00
  • da57106d7a castanedan virtues + card 49 tweak; italic_word for trumps 19–21; sig/sea propagation — TDD Disco DeDisco 2026-04-30 23:36:35 -04:00
  • 270e48ab2c cards 48–49 polarity-split titles; sea-stage mobile breakpoints; @comment fix — TDD Disco DeDisco 2026-04-30 21:51:23 -04:00
  • 2f039559e6 Game Kit fan stage + FLIP/SPIN; sig/sea/fan refactor — TDD Disco DeDisco 2026-04-30 21:01:52 -04:00
  • 61162e36da fan-card-corner: icon outer-edge aligned; padding-left + fan-only padding-top Disco DeDisco 2026-04-29 15:00:37 -04:00
  • 26a3af21fa PICK SEA crucifix grid: rename CSS position classes + remove dead code Disco DeDisco 2026-04-29 14:19:30 -04:00
  • d728900c24 fix Nomad icon fa-hat-cowboy → fa-hat-cowboy-side; setup_sea_session command Disco DeDisco 2026-04-29 12:07:41 -04:00
  • 2dae861f30 tweaked box-shadow attr on active card in PICK SEA stage Disco DeDisco 2026-04-29 11:49:26 -04:00
  • 98354fd27b PICK SEA slot interaction: cover/cross appear animation; focused glow; card bg fully opaque Disco DeDisco 2026-04-29 11:47:50 -04:00
  • 7712cf1d56 PICK SEA FTs: add @tag("channels") to ChannelsFunctionalTest subclasses — CI fix Disco DeDisco 2026-04-29 11:27:51 -04:00
  • e084bcc2d5 PICK SEA slot interaction: polarity card bg/border, cross-slot opacity fix, two-step tap; _hideOk ReferenceError removed from sea.js; Jasmine spec updated for two-step; migration 0012 PENTACLES cleanup — TDD Disco DeDisco 2026-04-29 02:30:59 -04:00
  • 08aa4dc819 PICK SEA Sprint C: sea stage card viewer — FLIP in, SPIN/FYI, deposit/re-expand — TDD Disco DeDisco 2026-04-29 01:12:06 -04:00
  • 2af59b3a7f tarot card icons + ranks; sig fallback for pre-sync Characters; DECKS label sizing — TDD Disco DeDisco 2026-04-29 00:20:55 -04:00
  • 6d75b9541f PICK SEA styling: deck backs, card rank+icon display, fa-hand-dots Major Arcana — TDD Disco DeDisco 2026-04-28 23:30:07 -04:00
  • 132e60864e PICK SEA Sprint B: deck stacks, OK btn, card draw, LOCK HAND/DEL — TDD Disco DeDisco 2026-04-28 23:02:49 -04:00
  • ff3e4d295c PICK SEA Sprint B FTs: deck stacks, OK btn, card draw, LOCK HAND/DEL — red — TDD Disco DeDisco 2026-04-28 22:50:39 -04:00
  • 39e12d6a3d PICK SEA Sprint A: async sky→sea transition via WS room:sky_confirmed — TDD Disco DeDisco 2026-04-28 22:16:38 -04:00
  • 379e0ab80c character: significator field populated from seat on natus_save; my_tray_sig from Character when confirmed — TDD Disco DeDisco 2026-04-28 21:46:21 -04:00
  • b5fbc3d354 SIG SELECT: fix major arcana reversed face slot order — title first, qualifier second after spin — TDD Disco DeDisco 2026-04-28 20:48:47 -04:00
  • 4852113fbd SIG SELECT FYI: .card-ref spans in Schizo effects; Energy/Operation singular titles; .sig-info CSS fix — TDD Disco DeDisco 2026-04-28 20:44:50 -04:00
  • 239da7e5b1 fix ITs: update SigSelectRenderingTest for sig-info-* rename + energies/operations data attrs — TDD Disco DeDisco 2026-04-28 20:25:47 -04:00
  • ed55e4e529 SIG SELECT FYI: mechanisms→energies, articulations→operations; .sig-caution→.sig-info; .btn-caution→.btn-info — TDD Disco DeDisco 2026-04-28 20:22:19 -04:00
  • 2757ae855f SIG SELECT: non-major reversal display; face wrapper divs; middle arcana reversal seed — TDD Disco DeDisco 2026-04-28 20:09:23 -04:00
  • 505744312b SIG SELECT sprint 1+2: SPIN animation; Emanation/Reversal; Ally Interaction FYI — TDD Disco DeDisco 2026-04-28 17:18:16 -04:00
  • 0522b5c126 SIG SELECT: FLIP→SPIN rename; stage-card reversal JS — TDD Disco DeDisco 2026-04-28 16:51:53 -04:00
  • 759ce8d3e4 fix CI FT regressions: deck contribution, ROLE SELECT no-deck guard, sig qualifiers, Carte Blanche multi-slot Disco DeDisco 2026-04-28 16:29:51 -04:00
  • 9eb1c1523e natus wheel: element tooltips — Space/Air-Capacitor subtitle; score badge under square Disco DeDisco 2026-04-28 12:01:36 -04:00
  • c399afa26d role select channels FTs: get_or_create DeckVariant in _equip_earthman_deck — fixes CI flush wipe Disco DeDisco 2026-04-28 11:46:47 -04:00
  • 4b8e02b698 role select channels FTs: equip Earthman deck in setUp — fixes no-deck guard block Disco DeDisco 2026-04-28 02:33:15 -04:00
  • 478e845ecf test_game_invite: guard BillPost import with skipUnless — fixes CI loader error Disco DeDisco 2026-04-28 02:18:06 -04:00
  • d79380faa5 fix stale test assertions after note-page interaction changes — TDD Disco DeDisco 2026-04-28 02:00:22 -04:00
  • e78bbb873b Billnotes note-page interaction: hover glow, click-lock, DON/DOFF; note titles + card-ref styling — TDD Disco DeDisco 2026-04-28 01:54:57 -04:00
  • 763d555f0c backfill super-schizo + super-nomad Notes to existing superusers Disco DeDisco 2026-04-28 01:31:36 -04:00
  • 6ad736413b super-schizo + super-nomad Notes: auto-grant to superusers; sig unlock; navbar titles — TDD Disco DeDisco 2026-04-28 01:30:02 -04:00
  • 1c2b8f96ab SIG SELECT: Nomad/Schizo locked by default; Note-unlock gate — TDD Disco DeDisco 2026-04-28 01:05:25 -04:00
  • eaff2a1edb setup_sig_session: wire deck contributions; _room_deck_variant replaces owner.equipped_deck Disco DeDisco 2026-04-28 00:45:22 -04:00