discoman
  • Joined on 2026-02-10
discoman pushed to main at discoman/python-tdd 2026-05-12 20:42:42 +00: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
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
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
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
Compare 4 commits »
discoman pushed to main at discoman/python-tdd 2026-05-09 18:02:17 +00: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)
discoman pushed to main at discoman/python-tdd 2026-05-09 05:14:52 +00: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
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
4010e452a6 recentered copyright on landscape
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
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
Compare 7 commits »
discoman pushed to main at discoman/python-tdd 2026-05-09 03:58:28 +00:00
c426ca69fa Note.grant_if_new admin prose: 'comes with the customary title of' → 'bestows the honorary title of'; 'additional benefits' → 'additional corporate benefits'
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
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
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
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
Compare 6 commits »
discoman pushed to main at discoman/python-tdd 2026-05-09 02:04:32 +00: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
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
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
e465b6a3b3 buddy btn sprint scaffolding: TDD spec + partial template + SCSS + page_class — 15/16 FTs green, 1 captured-red for post-compaction handoff
Compare 4 commits »
discoman pushed to main at discoman/python-tdd 2026-05-08 22:27:16 +00:00
7b2780e642 test_applet_new_post: bump current-url regex /dashboard/post/ → /billboard/post/
14bab444ff brief sprint C3.b+c+d+e: share-post Line+Brief async, magic-link / invalid-link banners use Brief styling, .alert-* retired — TDD
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
7f9ff36d1d brief sprint C2: introduce billboard.Brief notification model + view_post marks-read on GET — TDD
Compare 4 commits »
discoman pushed to main at discoman/python-tdd 2026-05-08 21:29:52 +00:00
d192b1522d brief sprint C1: relocate Post + Line from dashboard → billboard (no behavior change) — TDD
discoman pushed to main at discoman/python-tdd 2026-05-08 20:18:41 +00:00
f659a64b91 some tweaks to portrait media query .btn-primary responsive sizing
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)
d58fd1db15 small changes to .sky-field styling
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
Compare 4 commits »
discoman pushed to main at discoman/python-tdd 2026-05-08 19:28:32 +00:00
1111df8465 sky form TZ: render-readonly + drop #id_nf_tz_hint; placeholder absorbs the auto-detected hint copy — TDD
8a8d1536b1 PICK SKY DEL btn: JS-inject after wheel paints so a blank modal carries no DEL action — TDD
301b4e8201 applet-box: hide inner-applet scrollbars so they match the page-aperture treatment
097a5dd437 my-sky applet DEL btn: shift left by half the applet's padding asymmetry so it re-aligns w. the SVG center
e9bceaab62 sky wheel: ubiquitous DEL btn — applet & PICK SKY parity w. Dashsky; PICK SKY clears client-only state (no User-model touch) — TDD
Compare 14 commits »
discoman pushed to main at discoman/python-tdd 2026-05-05 05:59:04 +00:00
cc2a3f3526 rename natus → sky across the codebase — natal chart abstraction is now sky throughout, since chart inputs aren't birthday-gated
19b7828ea9 ignore .vscode/ in git & docker contexts; workspace tasks/settings are local-only (Windows paths + per-machine venv layout)
Compare 2 commits »
discoman pushed to main at discoman/python-tdd 2026-05-04 06:25:15 +00: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
discoman pushed to main at discoman/python-tdd 2026-05-04 05:58:49 +00:00
c9563308d8 SAVE SKY provenance + sky→hex (not sky→sea) transition — TDD
5413e63585 billboard Most Recent Scroll: fix SQLite NULL drop on SIG_READY exclude; pronouns flow FT; Blades middle reversal Nervous → Fickle — TDD
29493c4f74 pronouns: per-user pronouns ideology + Pronouns applet on Game Kit; provenance prose uses actor.pronouns at render time — TDD
599d40decd auth urls: mount apps.lyric.urls under /dashboard/ to mirror gameboard/epic & billboard/drama convention
2dc68c41a7 billboard applets: drop billboard- prefix from partials & ids; Most Recent → Most Recent Scroll; room_scroll → scroll — TDD
Compare 5 commits »
discoman pushed to main at discoman/python-tdd 2026-05-04 02:28:55 +00:00
b1a11504f5 game kit + role icons + tarot fan: in-use mini-portal label, FLIP cue polarity reset, role icon redraws
f78177778f SIG SELECT exit: 2s hang after tray closes; suppress waiting msg if PICK SKY already up — TDD
480cb4aed6 tray: Tray.placeSig analogue of placeCard for SIG SELECT exit; rename arc-in → fade-in — TDD
9b93b9d31b tray tooltips: tilt persists while portal is open; PRV|NXT pinned to corners — TDD
b29bcf5c38 tray sig-card tooltip: portal w. PRV|NXT pager — TDD
Compare 7 commits »
discoman pushed to main at discoman/python-tdd 2026-05-01 06:37:56 +00:00
536a558f26 PICK SEA: gate PRV|NXT on .fyi-open like sig + fan
discoman pushed to main at discoman/python-tdd 2026-05-01 06:27:47 +00:00
8b0ad545c9 collapse epic migrations 0007–0022 → 0007_finalize_earthman_deck; add reset_staging_db
3410f073f0 fan-card title symmetry; pips → Minor; tray Sig card
c264b6e3ee PICK SEA reversal axis: server-side roll + preview + deposited slot — TDD
Compare 3 commits »
discoman pushed to main at discoman/python-tdd 2026-05-01 03:36:47 +00:00
da57106d7a castanedan virtues + card 49 tweak; italic_word for trumps 19–21; sig/sea propagation — TDD
270e48ab2c cards 48–49 polarity-split titles; sea-stage mobile breakpoints; @comment fix — TDD
Compare 2 commits »
discoman pushed to main at discoman/python-tdd 2026-05-01 01:02:10 +00:00
2f039559e6 Game Kit fan stage + FLIP/SPIN; sig/sea/fan refactor — TDD
discoman pushed to main at discoman/python-tdd 2026-04-29 19:00:54 +00:00
61162e36da fan-card-corner: icon outer-edge aligned; padding-left + fan-only padding-top
26a3af21fa PICK SEA crucifix grid: rename CSS position classes + remove dead code
Compare 2 commits »
discoman pushed to main at discoman/python-tdd 2026-04-29 16:08:54 +00:00
d728900c24 fix Nomad icon fa-hat-cowboy → fa-hat-cowboy-side; setup_sea_session command
2dae861f30 tweaked box-shadow attr on active card in PICK SEA stage
98354fd27b PICK SEA slot interaction: cover/cross appear animation; focused glow; card bg fully opaque
Compare 3 commits »
discoman pushed to main at discoman/python-tdd 2026-04-29 15:28:18 +00:00
7712cf1d56 PICK SEA FTs: add @tag("channels") to ChannelsFunctionalTest subclasses — CI fix