activity log.
every meaningful change. one file per day in vault/10-Activity-Log/. read top-down for the timeline.
thu · 2026-06-11
Decisions / rules
- Subagent model routing updated: Fable 5 added as premium tier alongside Opus. Max ONE premium agent (Fable OR Opus combined) running at a time; all parallel siblings go to haiku/sonnet. Locked in CLAUDE.md § Orchestrator pattern.
mon · 2026-06-08
Cosmo , New "Polish" status: frontend shipped, backend handoff for Leor (2026-06-08)
- New quota status Polish = a playable currently
in_progressthat has ALREADY been to TL/PG review at least once (auditor reworking after review feedback). Splits the catch-all in_progress so TL/PG/leads see rework vs first-pass.revision_roundunrelated (it's a task type). - Investigated the status convention first (Ishai: be consistent, don't invent). Backend recon: statuses are computed-on-read in
_effective_quota_status()(weekly_data.py) + persisted-on-webhook in_recompute_quota_status()(quota_rollup_service.py), ranked by_QUOTA_STATUS_RANK; canonical set = sharedQuotaStatusenum.unfillableset the precedent for a new status not yet in the shared enum (local raw string until coordinated pkg release). The "has been to review" signal EXISTS inorchestration_states(append-only event log, indexed) but is NOT exposed to the frontend. So Polish must be BACKEND-computed (quota_status='polish'), same pattern as the others; frontend renders it like any status. - Frontend shipped (commit 9d142eb, work/live, front-only, tsc clean): teal (aquamarine tone) + Brush-icon Polish pill in StatsBar STATUS after In Progress; clickable filter w/ the selected/unselected dim coordination; shows at count 0 (never hides); no double-count with In Progress. Added
STATUS_LABELS.polish, FiltersPicker option,matchesStatusaccepts 'polish'. Presentation-local| 'polish'type widenings +as QuotaStatuscasts (all commented) avoid editing no-touch data/types.ts. Verified live: pill renders teal (bg rgba(97,226,209,.2)/border .5/text rgb(1,165,168)), clickable, dims siblings, count 0, position 3. - PlyCard chip not touched , it flows from quota_status through the no-touch helpers, so it renders Polish automatically once Leor adds 'polish' to data/helpers.ts (STATUS_LABEL + STATUS_TONE) + the backend sends it.
- Handoff written:
vault/08-Design-specs/polish-status-backend-handoff.md, 6 backend sync points + 4 data/ contract points + the unfillable-precedent + verify steps. To go to Leor with his other items (his handoff branch is stale June-7; route via PR body / refreshed branch / Slack , Ishai's call). Polish lights up end-to-end the moment backend sends quota_status='polish'. - Pending: get the handoff to Leor; once backend lands, remove the presentation-local widenings; demo + PR (Ishai publishes).
The Platform (SETT Studio) , project kickoff + knowledge foundation (2026-06-08)
- New STANDALONE customer-facing product kicked off (Sergey's spec). Customer/partner-facing playable review app; CP reviews -> Approve/Revise/Reject; AI turns vague feedback into a clean change request that flows into Cosmo as feedback on the existing playable work item. NOT part of Cosmo; own milestone track (PM1), own lab folder, own future repo. Per Ishai: "It's a new project, not part of Cosmo, don't declare it in the same milestones." CP = Creative Producer (the reviewer at the partner).
- Created
platform-design/lab (raw/ specs/ research/ prototypes/ site/). Dropped Sergey's spec verbatim intoplatform-design/raw/2026-06-08-sergey-platform-spec.md. - Wrote the knowledge layer: UX-IA-SPEC (6-screen IA + the Revise flow + Cosmo bridge + scope split), JTBD, CP + PG personas, concept-ai-change-request (hero flow), concept-ack-rulebook, ACTION-ITEMS (PM1 milestone + gaps), IDEAS-AND-THOUGHTS (naming, design-language Option C recommendation, one-loop framing). Vault mirror:
vault/11-Subjects/SUB-022-the-platform.md. - Built a browsable HTML knowledge site at
platform-design/site/index.html(warm editorial doc-site, all 10 docs, works file://). For Ishai to read in-browser instead of Obsidian. - Gave Ishai a 7-cluster product-research-directions doc for his own mood-board hunt (Frame.io as the closest cousin). Visual research = Ishai's hand.
- Vault precursor was McSett; this supersedes it. M4 ("Client platform") in vault is the same product but stays as a vault note; the live home is SUB-022 + platform-design/, on its own milestone clock.
Cosmo , Weekly stats bar redesign + responsive header: PR #300 (2026-06-08)
- Opened PR #300 (github.com/sett-backend/cosmo/pull/300, branch
pr/stats-header-responsiveoff origin/main, 6 commits, 5 files: tag.tsx, components.css, StatsBar.tsx, TopBar.tsx, weekly-page.css). Scope = stats + header responsiveness ONLY (no segtabs/ply-detail/8pt/nav bleed). Ishai's explicit "open the PR". - Feature recap (built over the prior session + today on work/live): 3-state status pills (regular/selected/unselected, new Tag
unselectedprop , selecting one filter dims the rest across all sections); per-pill min-width floors (R/V static, STATUS->icon+count, TL/PG short label) with a hard.stats-barmin-width bottom-out; continuous flex-driven label truncation replacing the JS ResizeObserver (Gali CSS-over-JS rule); "Review" dropped from TL/PG; Unfillable hidden at count 0; applied-filter space reserved at the chip's slot position (no jump on toggle); narrow/tablet stacks the stats onto its own row below the toolbar (left-aligned, taller header) via @media(max-width:1320px), inline single row when wide. - PR built in an ISOLATED worktree (/tmp/cosmo-pr-stats) off origin/main so work/live (the user's live :5174 view) was never reparented. Cherry-picked 6 stats commits; the one conflict (TopBar Pill->Chip divergence , origin/main already had AppliedFiltersChip) resolved by keeping the chip wiring + dropping the now-dead resize hooks import. tsc --noEmit clean on the PR branch (node_modules symlinked from main worktree).
- Skipped the flush-left commit + its revert (net-zero) from the cherry-pick set.
- Pending (Ishai's hand): attach the demo video to PR #300 (Gali rule , capture list: 3 pill states, no-jump filter toggle, tablet stack, truncation ladder); merge. Worktree /tmp/cosmo-pr-stats stays until merge, then remove.
Decision , 8-point grid is the spacing convention (locked 2026-06-08)
- Ishai: stop using the random-feeling 5px scale; adopt the 8pt grid (8/16/24/32/48/64, 4px sub-step). Web-validated (Material + Apple HIG). Typography exempt (font-size 14/18/20 ok); line-height should be a multiple of 8.
- Locked in .claude/rules/cosmo-design-system.md. Migration approach (Ishai's call): PARALLEL scale, not a remap , added
--s-4 .. --s-64to cosmo-prod tokens.css alongside the legacy 5px--space-*(untouched so no consumer shifts); new work uses--s-*, old surfaces migrate gradually. Committed (tokens cosmo-prod e517c41-ish; rule in workspace repo). - The stacked-header padding is currently 20px (off-grid; Ishai chose "keep 20 + see how it looks"). When eyeballed, snap to --s-16 or --s-24. Weekly-surface spacing migration to --s-* is a separate planned pass.
Done , Cosmo
- Fixed three Weekly topbar menus rendering light cream in dark theme (Filters, Games, Team picker). Root cause both spots:
--color-white(hardcoded#fefcf9, no dark override). Fixes:components/ui/multi-select.tsx:80bg-[var(--color-white)]->bg-popover(Filters + Games, shared primitive);design-system/components.css:3275.popover-menubackground--color-white->--bg-panel(Team picker + any.popover-menuconsumer).bg-popover->--popover->--bg-panel, which flips dark under[data-theme="dark"]. tsc clean, both themes verified. On work/live, scoped commits, not pushed.
Knowledge , Ingested Cosmos "Specs" index + 3 linked pages (SUB-020)
- From Confluence eng "Specs" (816906278): fetched the 3 net-new linked pages (4th, PG Operational Flows, already in SUB-017). Author Sergey.
- Cosmos Weekly Board Product Spec (816906298), Glossary (816939017), Status Alignment (816742434).
- Wrote SUB-020. Headlines: full quota data model (commitment+wrapper, 2 flavors, 4 composition tiers CR/LM/HP/Regular, bundle=2, 3 attach mechanisms, detach-on-submit, roll-up); the 3 canonical status vocabularies (Apollo Task / Orchestration / Quota) + mapping , RESOLVES our old C1 lifecycle-vocab conflict; "revision = client-returned only, company-wide" , RESOLVES C3 origin-conflation; "completed != delivered" (board is auditor-production view) , the mechanism behind the SUB-019 divergence; Sergey's own 11 "broken today" rules (HP-not-solo, grow-to-3, refill divergence, saved-vs-live status lag, version-count pollution, revision-age-from-latest-round) , map to our pain clusters.
- Updated entity glossary with a canonical "Quota model" section (quota, work item, composition tiers, bundle, attach, orchestration, 3 status vocabularies, Polishing, canonical Revision).
- Flagged (not done): reconcile Playable-Schema.md against the 3-vocabulary model (big job, confirm first); mark C1/C3 spec-resolved in SUB-018; resolve answered items in Open-Questions/PG.md.
Knowledge , Consolidated PG Jobs-to-Be-Done into one canonical doc (SUB-021)
- Found 5 fragmented PG-JTBD docs; consolidated into ONE canonical SUB-021-pg-jobs-to-be-done.md using the jobs-to-be-done skill (Christensen) + Ulwick ODI hybrid (web-researched the method to confirm the scale; Christensen alone scored insufficient, added ODI outcome statements + job map).
- 10 big jobs (each: When/I-want/so-I-can statement + functional/emotional/social + 4 forces + what's-hired-today + big-vs-little hire + ODI sub-job outcomes). 8 consolidated from the old docs; 2 NET-NEW from recent ingests (PG-BJ-9 capture-knowledge, PG-BJ-10 pre-send-QA) + 6 new sub-jobs (Apollo-review triage, Mark-as-Sent quota choice, partner-ID matching, network-rejection recovery, Slack-send fallback, build_id concept). Forces rewritten on BJ-4 (revision=client-returned-only) + BJ-5 (completed!=delivered) + BJ-8 (two-signal quality model).
- Self-scored 8/10 vs JTBD rubric; gap to 10 = an Opportunity Landscape from 10-15 PG interviews (Importance+Satisfaction scoring). Flagged as the highest-value next research action.
- Built the presentable infographic cosmo-design/designs/pg-jtbd.html (frontend-design skill; editorial, the 10 jobs as expandable cards + job map + adoption-forces callout + non-obvious-competition + 8/10 score). Structurally verified (JS clean, ids matched, 0 dashes); NOT pixel-verified (Playwright browser locked by another session).
- Archived 4 superseded docs to vault/_archive/jtbd-superseded-2026-06-08/ (SUB-012 draft + enrichment, the 2 03-Cosmo-pages JTBD docs). Left vault/02-Users/Jobs-to-be-Done.md in place (multi-role) with a pointer to SUB-021 for the PG section.
Cosmo , Week switcher: dropdown -> inline switcher, promoted to DS, PR #295 (2026-06-08)
- Rebuilt WeekSelector from a popover dropdown into an inline switcher (prev/next chevrons + center calendar button) per Figma node 82:23752 (file DXwDrK80JIeHenmr2I0NsM). Center is inert
CalendarRange(muted) on this week; becomesCalendarArrowDown(accent) "back to this week" on other weeks. Arrows step one week, clamp at range bounds. - Promoted
pages/weekly/WeekSelector.tsx->components/ui/week-selector.tsxas a DS composite nestingFButton variant="subtle"primitives (chevrons match sibling topbar icons). Old file deleted, TopBar repointed. - Iteration: chevrons swapped from shadcn Button-ghost to FButton-subtle (color match); label/date stack tightened 4px (label line-height 20->16); calendar-to-text gap loosened 4->8px.
- Showcase added on Sett Design website (cosmo-ds-site, :5175) PATTERNS > Week Selector.
@frontalias confirmed resolving to canonical cosmo-prod (no divergence). No showcase code in product repo. - Code review vs Gali standards = KOSHER. Reviewer's CSS-spacing-token flags rejected: cosmo scale is 5px-based, no token fits the Figma-exact 4/8/9/1px literals (figma-to-code rule permits literals when no token matches). Raw center
= defensible Pattern A (no Button size variant fits 24px/9px + two-line stack). - Sliced WeekSelector-only commit off tangled work/live (SegmentedTabs leftover left unstaged + stashed). Branch
feat/weekly-week-switcheroff fresh origin/main, TopBar import conflict resolved, tsc clean, no no-touch zones. Pushed + opened PR #295 (Ishai's explicit go). Snapshot tag recover/worklive-1780899312. - Pending: Ishai attaches demo video + merges (both his hand). PR flags
WeekOptiontype-import from data/ for Leor's awareness. - Week switcher range cap (PR #295 update): discovered backend
/api/weekly/weeksserves 5 weeks (offsets -2..+2 viarange(-2,3)inweekly_data.py), not 3. Ishai: cap forward at +1 (Next Week is furthest future), keep all past weeks. Implemented as a frontend-only filter incomponents/ui/week-selector.tsx(visibleWeeks = weeks.filter((_,i) => i-realIdx <= 1)), recompute prev/next/clamp against it. No backend touch. Committed b5c041c on work/live, cherry-picked ontofeat/weekly-week-switcher, pushed (PR #295 now 2 commits), PR body rewritten to reflect real range + flag for Leor to widen backend PAST range if more depth wanted. tsc clean, :5174 200. Snapshot recover/worklive-1780906007.
Cosmo , Re-enabled editable difficulty dropdown in ply-detail panel (2026-06-08)
- The DifficultyDropdown + handleSetDifficulty + useSetDifficulty hook were already on work/live but gated off (
canEditDifficulty = false, "temporarily HIDDEN 2026-06-04"). Flipped tocanEditDifficulty = true(open to everyone; tighten to a role check later). Dropped the deaduseAuthimport the subagent had added via|| true. - Feature is fully built FE + writes to DB via existing
PATCH /api/delivery/feedback/{id}(complexity_level), optimistic cache + rollback inhooks/useSetDifficulty.ts. Backend endpoint exists, so NO new backend data needed , it is a REVIEW-ONLY item for Lior. Left a// LIOR (review only)code note at the.mutate(...)call. - Landed ADDITIVELY on work/live: snapshot tags (recover/worklive-prediff-*, recover/worklive-preland), resolved in an isolated worktree (
cosmo-prod-graft), TWICE caught + dropped a stale June-4weekly-page.csstopbar revert that the cherry-pick tried to drag in (would have clobbered another session's live topbar tuning). Final landed commit touches ONLYPlyDetailDrawer.tsx. tsc + build clean, :5174 200. Worktree removed. - Original source branch
feat/difficulty-dropdown(c132342 + b617686) turned out unneeded , feature was already merged, just disabled. - Pushed to Lior's branch: refreshed
handoff/frontend-for-lioron origin (5fa5cbd -> c246ffc) to current work/live frontend + rewrote HANDOFF-FOR-LIOR.md. Doc now has Part 1 (3 panel backend-data needs: solution_paths, customer_feedback, revision_difficulty-read) + Part 2 (difficulty editing = REVIEW-ONLY, already writes via PATCH /api/delivery/feedback/{id}, no new data). Built in isolated worktree (cosmo-prod-handoff on temp branch handoff-build off work/live commit), force-with-lease pushed, worktree removed, local handoff ref synced. work/live worktree never touched. Snapshot recover/worklive-prehandoff (e517c41). Branch is a handoff artifact, NOT merged to main.
Decision , Scope PG JTBD to the playable workflow only (locked 2026-06-08)
- Ishai: the lens is the playable. PG-BJ-1 "grow the studio relationship (land and expand)" was too broad. Rescoped to "Manage the partner conversation a playable needs" , playable-facing communication only (right delivery info out, clean feedback in, delivery expectations per playable).
- OUT of scope for our PG work: land-and-expand / account growth, dealmaking, winning/retaining partners, the studio-level business relationship, and video content (separate PG workstream on Monday.com).
- IN: everything a playable needs idea->delivered->revised; partner comms only where a specific playable needs it.
- Applied to SUB-021 (scope boundary section + BJ-1 rewrite + map row + design-implication + forces-summary + single-source note), the infographic pg-jtbd.html (BJ-1 entry, scope note under the masthead, competition line), and locked the rule in the entity glossary PG entry.
sun · 2026-06-07
# 2026-06-07
Done
Cosmo , Weekly stats bar responsivity: floors + no-jump + Review-removal + zero-unfillable (2026-06-07, on work/live)
- Squeeze model rebuilt (continuing the 3-state pill work). Replaced the brittle px-threshold @container ladder with flex-driven continuous truncation: the pill LABEL is the flexible element (min-width:0 chain + flex-shrink:1 on label, flex-shrink:0 protecting icon + count). Labels truncate with ellipsis as the bar tightens; section gaps stay full the whole time (user rule: gaps never merge until pills squeeze). weekly-page.css STATS BAR section.
- Per-pill minimum floors (user: "define the minimum size for each type, then it stops"). R/V tags
flex-shrink:0+ min-width ~34-42px, NEVER shrink/clip (user: "don't touch them, they're at minimum"). STATUS pills floor = icon + count (label hidden via the one remaining @container step),flex-shrink:0once floored. LAST MILE floor = "TL"/"PG" + count..stats-bar { min-width: 500px }so the whole component bottoms out and stops shrinking; below that it may overflow the cell and the topbar/next-solution takes over. Verified live: at viewport 900 bar floors at 500px (was 448), all pills legible, no clip, one row. - No-jump filter reservation (user: the AppliedFiltersChip mounts/unmounts via
if(!count) return null, so toggling a filter jumped the bar)..app-topbar-end { min-width: 580px; justify-content: flex-end; padding-left: var(--space-6) }reserves the chip's max footprint always, so center/stats width is constant whether the chip is present or not (measured: center 795px both states). The padding-left also adds the "more space between action bar and stats" the user wanted. - "Review" removed from TL/PG permanently (user request). Dropped the
.stats-pill-label-suffixspans entirely; TL/PG now always render "TL"/"PG " (their permanent min form). Added .stats-pill-lastmilemarker class so CSS distinguishes STATUS vs LAST MILE pills by class instead of the now-gone:has(.stats-pill-label-suffix). (Note:title="TL Review"tooltip still on the pill , flag to revisit per tooltip-label-only convention.) - Unfillable hidden at zero (user rule: unfillable = quotas without enough ideas to start; if 0, do not present it). STATUS_PILLS
.filter()skips theunfillableentry when its count is falsy , the pill is absent from the DOM at 0, appears only when >0. Other 3 status pills always shown. - Dead-query cleanup: the prior Step C/D gap-tighten @container rules were self-referential (
.stats-barboth the container AND the styled element , an element can't query itself), so they never fired in Chrome. Removed them; the min-width floor handles bottom-out instead. Container ladder is now minimal (one STATUS label-hide step; truncation is pure flex). - Also: useMemo removed from StatsBar.tsx (React 19 compiler handles it, per banned-list) , incidental to the unfillable edit. tsc clean throughout. Stale-Vite
AppliedFiltersPill404 (from another session's file rename folding into work/live) cleared with a clean dev-server restart (rm .vite + restart). - All on
work/live(shared workbench), not committed as a discrete feature commit yet beyond the earlier 360d6ae checkpoint. Local-only, no push/PR. - LOST + RE-APPLIED (later that night). Another session's merge into work/live (commits f204a74 ply-detail + 31caecb segtabs, then 046530e AppliedFiltersChip rename) swapped the working tree and CLOBBERED all 4 of the above layers, which were still UNCOMMITTED (only the 3-state pill work at 360d6ae had been committed, so it survived; floors / no-jump / Review-removal / unfillable were dirty-tree and wiped). Not recoverable from git (not in any stash/branch/dangling commit , pure uncommitted state). Confirmed nothing conflicted (no other session had touched StatsBar.tsx or the stats CSS since 360d6ae; only components.css got +215 unrelated lines). Re-applied the full consolidated end-state in one pass from the spec above, verified live (no overflow at any width, bar floors at 500px, suffix=0, unfillable absent at 0, R/V rigid, STATUS icon+count floor, one row, end reserves 580px), then COMMITTED as adefe3d so it can never be clobbered again. Lesson: commit work/live feature layers immediately after each verified iteration; do not leave them as dirty tree on a shared branch other sessions check out.
Knowledge , Ingested 2 auth-gated HTML artifacts from Sergey (SUB-019)
- Both pages sit behind @sett.ai Google SSO; unauthenticated fetch returned only login screens. Ishai saved both logged-in to ~/Downloads (with _files/ asset dirs); ingested the local saves.
- Revision Count Divergence report (
sett-internal-decks.vercel.app/reports/revision-divergence/, snapshot 2026-06-05): SQL-level reconciliation of the Cosmo-vs-Cosmos revision-count mismatch = our cluster C2. Finding: the two pages count different objects (Cosmo = orchestrationsrevision_count>0no-week-no-quota-filter; Cosmos = current-week revision quotas, rollup from Apollo, quotas can bundle orchs). 112 Cosmo = 92 shared + 20 Cosmo-only; 97 Cosmos = 92 shared + 5 Cosmos-only; 97->94 via bundling. Gap fully decomposes into 5 SQL-checkable problems (P1 detached/no-quota +11, P2 advanced-to-build +6, P3 prior-week +3, P4 fake-revision-quota +5 all one PG, P5 bundling -3). Ships a verbatim re-run agent prompt (targets Marty/Yoni's Agent/Logos). Data caveat: don't trustorchestration.updated_at, usemax(orchestration_states.created_at). RESOLVES C2 at the mechanism level. - SETT Eval / Quality Pulse (
sett-eval-tiktok.vercel.app/pulse, live): net-new creative-quality surface. Expert BAD/OK/GOOD ratings of delivered playables. BAD% 23.5% last 14d (down 16.5pts), split 23.5/42.6/33.9, 115 ratings, coverage 430/1489 (28.9%, matches Scorecard Delivered 430). Qualitative hot-takes feed = the revision-cause signal the never-built 6-type taxonomy (C3) was meant to capture. - Wrote SUB-019; cross-linked C2 in SUB-018 as mechanism-resolved.
Knowledge , Re-ingested Sergey's PG Operational Flows doc (v13 -> v18)
- Re-fetched Confluence eng page 802881537 (now v18, last edited 2026-06-04 by Sergey; was v13 when first ingested 2026-06-03). Diffed against SUB-017 capture, routed all new material into the vault.
- SUB-017 updated with a "v13 -> v18 delta" section: flow 1 (no brief/asset ingest into ACK; can create ideas pre-core taking a half-baked build_id on a WIP core), flow 4 (NC creation paths , Cosmo batch prompt / Atlas chat / Monday ticket for new core max 1x/month; "Missing Helix at scale", Shahaf gatekeeps Helix compat, asset-manager bottleneck), flow 5 (no ACK knowledge invalidation; manual-only save; 💡 auto-save-to-ACK-on-revision), flow 6 (Approve vs Add-a-feedback split; happy/unhappy build flow; mobile-play friction; hard to find PG-review tasks in Apollo), flow 7 (explicit QA checklist + Fix-menu annotations; History = PG+customer revisions only).
- Glossary (vault/98-References/Cosmo-PG-entity-glossary.md) gained 5 entities: Shahaf, asset manager (Helix), NC, WIP core / half-baked build_id, Add-a-feedback.
- Open-Questions/PG.md gained a dated section with Sergey's 5 open items + 8 glossary unknowns (ACK, Logos, Helix, build_id, Dead Ends/Pending Allocation, partner-ID matching, approved-core gate, auto-save-to-ACK).
Cosmo , Weekly stats bar: 3-state pills + CSS-driven responsivity (2026-06-07)
- Root-caused two breakages in the weekly topbar stats bar (QUOTAS/STATUS/LAST MILE counts): (1) the responsive CSS targeted dead
.stats-pill*classes from the old hand-rolled markup, but StatsBar.tsx renders theTagcomponent (.sds-tag) , so the whole full/compact/wrap ladder never fired; (2) responsivity ran on a JS ResizeObserver + magic widths in TopBar.tsx, violating Gali's "CSS over JS for responsive" hard rule. - Source of truth: Figma node 39:5863 (Sett-Design). Spec sheet defines 3 pill states + a 5-step responsive ladder. Branch
feat/weekly-stats-statesoff main. - New Unselected state added to Tag (cosmo-prod/packages/front/src/components/ui/tag.tsx):
unselected?: booleanprop ->data-unselected, forces--_tag-bg: transparentwhile keeping border (/100) + text (/400); also sets--_tag-hover: transparentso it stays flat on hover. components.css:.sds-tag[data-unselected]{background:transparent}. This is the third state (Regular=/50 bg, Selected=/100 bg swap which already worked, Unselected=transparent). One component + boolean flags, no sibling component (Gali rule). - Pill box matched to Figma:
.sds-tag--pillpadding 1px 4px -> 1px 7px; pill icons 14px -> 12px (scoped to.sds-tag--pill .sds-tag-icon, non-pill tags keep 14px). Verified live via getComputedStyle: height 20px, padding 1px 7px, gap 4px, radius 9999px, icon 12px , all match. - Global dim coordination (StatsBar.tsx):
anySelected = active.size>0 || vActive || rActive; every pill getsunselected={anySelected && !isThisOne}. Selecting any one filter dims every other pill across ALL 3 sections (confirmed decision). Verified live: clicking In Progress -> it fills, all others go transparent. - JS responsive deleted, replaced with CSS container queries: TopBar.tsx lost TopBarFit/FULL_STATS_W/COMPACT_STATS_W/SAFETY_GAP/getInitialFit/the fit useState/the ResizeObserver useEffect/topbarRef + 3 dead imports;
data-fitremoved from the header. weekly-page.css: dead.stats-pill*+.stats-vr*+.stats-divider+ thedata-fitwrap-to-row-2 block removed; new@container statsladder (full labels -> ellipsis truncate -> icon+count only; TL/PG short labels persist longest; NO second-row wrap, per Figma). - Container-collapse bug found + fixed:
container-type: inline-sizeon the grid track.app-topbar-centersize-collapsed it to 40px (queries always fired tightest step). Fix: container moved to.stats-barwithwidth:100%; min-width:0, and.app-topbar-centerjustify-self start -> stretch so the child gets a definite parent width. Verified live: container reports real widths (864px wide / 244px narrow), ladder fires correctly at each step, bar stays one row at realistic widths. - tsc clean. Local-only, not committed/pushed, no PR. Showcase (3 Tag states) for the Sett Design website still pending (decision: website only, not cosmo-prod DesignSystemPage).
- KNOWN FOLLOW-UPS: (a) container-query thresholds (720/620/520/430) are first-pass guesses , truncation starts later than the Figma 5-step cadence; tune live. (b) at extreme-narrow (~244px) bar height grows to 50px (minor wrap); fine at >=1024px. (c) the Wave-1 components.css stats hunks got bundled into rogue commit e76b319 on feat/ply-detail-panel-content during an agent git-dance; extracted cleanly onto the stats branch via patch, but e76b319 still carries them mixed with View-all work , needs splitting before that branch's PR. (d) tabs-legacy carried edit is isolated in stash (On feat/weekly-stats-states: pre-ply-detail-verify-stash) + QuotaBacklog edit in another stash.
Cosmo , SegmentedTabs redesign + QuotaBacklog wiring (2026-06-07)
- Renamed + archived: old SegmentedTabs (outdated All/Game/Auditor design) -> SegmentedTabsLegacy (cosmo-prod/packages/front/src/components/ui/segmented-tabs-legacy.tsx, CSS
.tabs-legacy/.tabs-legacy-item); FToggle (the current, good design) -> SegmentedTabs (cosmo-prod/packages/front/src/components/ui/segmented-tabs.tsx, CSS.segmented-tabs). All consumers + CSS classes migrated. QuotaBacklog repointed from Legacy to new SegmentedTabs. - Redesigned .segmented-tabs CSS from Figma node 85:3810 / 85:3888 (Sett Design file). Track + hover backgrounds now use design-system cream tokens at reduced opacity via
color-mix(in oklch, var(--cream-400) 20%, transparent)(track) andcolor-mix(in oklch, var(--cream-300) 50%, transparent)(hover). Selected pill =var(--cream-50)solid. Text colors: --ink-600 idle/hover, --ink-700 selected, --ink-200 disabled. Track radius 10px, tab radius 8px, tab padding 0 9px. Rationale: using color-mix with token-based opacity instead of hardcoded rgba keeps the component linked to the token system so future token edits cascade in automatically. - Product wiring: QuotaBacklog grouping toggle (All / Game / Auditor) swapped from SegmentedTabsLegacy to new SegmentedTabs. Added
stretchedprop so tabs fill the header edge-to-edge with equal width (.segmented-tabs--stretched, each tab flex:1). Prop API identical (value/onChange/options/ariaLabel), so real grouping logic (buildBacklogGroups) preserved unchanged. - DS website updated: cosmo-ds-site/packages/design-system-site/src/pages/. "Toggle" showcase page became "Segmented Tabs"; new "Segmented Tabs (Legacy)" page added. Both consume real components via @front alias (resolves to cosmo-prod/packages/front/src).
- Local-only, not committed/pushed. Ready for PR + demo video when Ishai approves.
Deferred
Decisions / rules
- Design System / Color-mix pattern. When a DS component needs a translucent version of an existing token (e.g. a track background that's cream-based but requires reduced opacity to layer over varied backgrounds), use
color-mix(in oklch, var(--token) N%, transparent)instead of a hardcoded rgba literal. This keeps the component linked to the token system so future token edits cascade in automatically. Example: SegmentedTabs track usescolor-mix(in oklch, var(--cream-400) 20%, transparent)instead ofrgba(212, 201, 185, 0.2). Locked 2026-06-07 per Ishai's rationale for SegmentedTabs redesign.
Cosmo , PlyCard tooltips + 6 PRs + StatsBar restore (2026-06-07)
- Added CopyTip (HoverCard-backed click-to-copy tooltip) + wired Tip/CopyTip across PlyCard (id/game/title copy, chips descriptive). Fixed asChild={false} rail-overlap regression. Added Tooltip showcase page to DS website (+ tw-animate-css so Radix anim utilities resolve).
- Split the PlayCard effort into 6 clean reviewed branches off origin/main + opened PRs: #272 CopyTip, #273 Tag states, #274 ply-card rail, #275 main-nav, #276 ply-card tooltips (base 274), #277 showcase (base 276). Converged all 6 into local main (11 ahead, local only). ds-site website pile committed locally (01fa6bc).
- INCIDENT: converging local main excluded StatsBar (parked as non-PlayCard), so the StatsBar Tag-pill work vanished from :5174. Work was safe (stash@{0} + feat/ply-card-responsive + tag wip/playcard-tangle-snapshot), restored to main as commit 773d35f. The 8 separate DS-component files (ftoggle/menu/data-grid/field/check/fcheckbox/radio-group/applied-filters-chip) remain safe in stash@{0} (untracked, captured via --include-untracked), pending their own PRs.
Decisions / rules
- Locked HARD RULE in .claude/rules/cosmo-v2-frontend.md "Never let a visible feature vanish from :5174": before any branch switch/convergence that changes the live working state, diff the visible surface and carry-forward or explicitly flag any dropped feature. The user's screen must never lose something they were just looking at. Parked-from-a-PR != removed-from-view.
Cosmo , nav effort converged to local main + Gali PR fixes + card/tag tweaks (2026-06-07 PM)
- Converged the full MainNav effort + StatsBar into local main (FF). Applied Gali's two PR-review fixes onto main: #274 ply-card rail JS ResizeObserver -> CSS @container query (then made .ply-card-tags flex-wrap:wrap so chips never clip outside the card regardless of count); #276 chip tooltips moved INTO the Tag component via a
tooltipprop (like Button) , removed call-site+.ply-card-chip-wrap. CopyTip on id/name/title preserved. - Ply-card difficulty chip is now ICON-ONLY (label dropped from card; word lives in tooltip + detail panel). Removed the now-moot difficulty-label-collapse @container logic.
.sds-taghorizontal padding set 7px -> 4px (commit 4e6bf79). NOTE: this had no prior committed record , sds-tag was 7px since creation; the 4px intent had been lost. Now recorded here.
Decisions / rules
.sds-tagrounded-tag horizontal padding = 4px (padding: 1px 4px). Locked 2026-06-07. (Was 7px, undocumented; reset to 4px per Ishai.)- Locked in cosmo-prod/packages/front/CLAUDE.md: (1) component behavior via a prop not call-site wrapping (Button tooltip pattern); (2) CSS over JS for layout/responsive; (3) every product-visible PR needs a demo video, orchestrator prompts before opening; (4) fixing sibling PR branches uses an isolated worktree so :5174 never reparents (from Gali's review + the branch-park regression).
Cosmo , nav 15-step compliance pass (2026-06-07)
- Executed adversarial audit pass on MainNav/NavButton: 15 steps, commit 521811b on main.
- Behavior changes: (1) disabled NavButton items now keyboard-focusable + announce aria-disabled (removed tabIndex={-1}); (2) border-radius now var(--radius-sm) -> squares in wireframe theme; (3) collapse trigger migrated to NavButton primitive + nav-button--compact modifier (focus ring + hover now consistent with rest of nav).
- Token fixes: --text-2xs (12.5px) + --text-3xs (10px) added to tokens.css; all hardcoded font-size 10/10.5/12.5px across components.css replaced with token vars.
- Structure: .nav-button-icon and .nav-button-trailing deduplicated to delegate to .icon-16/.icon-12; 7x cubic-bezier literals replaced with var(--ease-out); height 40px -> var(--space-8); line-height 18.13px -> 1.45 unitless.
- A11y: aria-expanded on both expand+collapse toggles; role=group + aria-labelledby on section divs; .main-nav--collapsed .main-nav-user-text gains visibility:hidden for AT.
- CosmoMark extracted to components/ui/cosmo-mark.tsx; data-collapsed attr removed; letter-fade now driven by .main-nav--collapsed parent class.
- Showcase: NavButton + MainNav sections added to DesignSystemPage. DESIGN.md primitive count 23 -> 25.
Sett OS , concept + spec + presentation (multi-session, 2026-06-01 -> 06-03, documented 06-07)
- Built the full Sett OS concept (working name was "Claude OS"): a personal command-center over the vault as a single Knowledge Bank that is Claude's memory + context. Studio = the build/interface; Sett OS = the system.
- Spec folder (was
vault/08-Design-specs/studio/) moved OUT of the vault tosett-os/concept/studio/(25 files) so the concept stays insulated from the vault structure it redefines until a deliberate migration. Presentation atsett-os/presentation/sett-os-concept-v2.html. Subject copies insett-os/subjects/. - Foundation =
_tech-databank-schema.md: the data-bank schema + librarian routing contract. Two primitives , Area (stable per-system home, multi-valued, fills the missing main-project gap) + Scope (dynamic cross-area relevance lens, v1 = named saved-query, lifecycle deferred to v2). Tag schema: Type/Area/Scope/Importance/Impact/Effort/Timing/Business-goal/trust. Merged Aviran's (brother's) v6 architecture: intent-vs-event input, 6-stage librarian, two stores (Vault=intent / Artifact=record) +bothtag + commit gate + reconciliation, Spine/Augmentation/Overlays vault structure, views-by-kind, agent-layer build list. - Trust layer: one
trustfield, ladderfloating -> reviewing -> verified -> stale, verified = LOCKED, only a human sets verified. Concrete first use = org tree + role definitions. - Section specs drafted: Home, Daily Ingest, Gallery, Subjects (+off-keyboard capture, Inbox removed), Tasks (Linear backend), Milestones (command center + Confluence mirror), Documentation (verification console), Commands (launch button + action component), Activity Log (low-pri), Workflow Observability (agent + skills health). + tech pages for each.
- Subjects created: SUB-016 (command-center concept from the Aviran conversation), SUB-017 (measuring success / OKRs), SUB-018 (pluggable Knowledge Bank via MCP). SUB-014 (weekly proactive-comms) created earlier in the run.
- Presentation: 16 sections, then an
/impeccablepass (one-time exception, Ishai approved by name) , editorial restyle (Fraunces + Source Serif 4 + IBM Plex Mono, warm paper, hairline rules, 8 SVG diagrams: pipeline, tag-anatomy, impact-effort 2x2, area-vs-scope map, trust ladder, views hub-spoke, agent layer, prior-art lanes). - Prior-art research: Scope = known pattern (Tana supertags/live-search, Capacities Queries, Obsidian Bases); vault-as-MCP = commodity (basic-memory, obsidian-web-mcp); verified/unverified = Guru + Notion verified-pages. The MOAT (nobody ships it): connecting the trust layer to the prioritization layer.
- Linear: stood up a Studio project + 13 issues + owner labels, then CANCELED all 13 (Ishai wants to restructure tasks fresh after the system is hashed out); project + labels kept as scaffolding.
Open / next
- Ishai to do his own scan of the Sett OS spec + presentation, then give comments. Concept stage only , no real vault/system changes yet.
- 5 decisions applied this session (naming=Knowledge Bank; Sett OS vs Studio; cloud=read-only; Scope v1-simple; Linear backend + tags-in-vault). Still open: goals-bank location, success metrics (SUB-017), Spine/Augmentation vault migration plan, private-overrides-shared overlay design (SUB-018).
Cosmo , git workbench model (2026-06-07)
- Adopted integration/workbench branch model for parallel screen-area work. ONE long-lived local branch
work/liveholds all in-progress work; :5174 always shows the union; orchestrator never switches the working tree out from under Ishai (root cause of vanishing-work wasgit checkoutswapping the whole tree). Commits scoped per-feature so each slices out cleanly. Shipping is per-feature (cherry-pick that feature's commits onto a fresh branch off origin/main), never all-or-nothing. PR -> origin/main (= the product); local main is a read-only downstream mirror, never a push target. Worktrees only on demand for side-by-side viewing. - Renamed
feat/weekly-stats-states(already a 38-commit de-facto workbench) ->work/live, rebased onto fresh origin/main (clean, no conflicts, 3 already-landed commits auto-skipped), restored 5 dirty files via stash. :5174 verified 200, nothing lost. - Rule locked:
.claude/rules/cosmo-v2-frontend.md§ "The workbench model , ONE live branch holds all in-progress work (HARD RULE)".
Daily ingest (22:56) - WIDE SWEEP 2026-05-24 to 2026-06-07
Window: 2026-05-24 00:00 to 2026-06-07 22:56 Asia/Jerusalem (14-day wide sweep; last ingest was 2026-05-31 09:48) Sources scanned:- Notion: meeting notes query FAILED (operator format mismatch across both attempts), not swept
- Slack: #cosmo-v2 full 14d, #cosmo-support search, #pa-general search, group TL DM, selected DMs - ~80 msgs with signal
- Gmail: 19 threads scanned, 12 project-relevant (calendar invites, Confluence digests, "Intro - Product" follow-up)
- Calendar: 17 events pulled 2026-05-24 to 2026-06-14
- Confluence: 10 pages found via CQL; PG Operational Flows (page 802881537) confirmed present + last edited 2026-06-04 by Sergey (already ingested today via git commits 227c75e + 4c579f4 + 80961e6); 6 new Yuval Balak Eng-space pages created 2026-06-07 (Quality+Evals, Work Process Lifecycle, Persona TLs, Cosmo-Apollo Integration, Persona Auditors, Persona CPs) - FYI, not Ishai-authored
- Jira: not swept (no project-signal query run)
- Git (sett-ux): 7 commits in window (see Product changes below)
- Comms gaps: run against stakeholder-comms.md
https://sett-ai.slack.com/archives/C0A89ME20FP/p1780414547459489. See vault/08-Design-specs/manage-quotas-modal.md.
2. Manage quotas / PG Internal Reject. PG fix request on a Ready-to-Send task (approved + built) NO LONGER counted as a revision. Apollo task returns to In Progress; quota returns to Last Mile. Shipped 2026-06-02 (Matan + Lior). Source: same #pa-general post. See vault/08-Design-specs/manage-quotas-modal.md.
3. Manage quotas / Auto-refill. When LAST orchestration of a quota is cancelled, quota auto-fills from available tasks or ideas. Shipped 2026-06-02. Source: same release note.
4. Manage quotas / build_id mandatory. Cosmo Ideation: adding a prompt now requires build_id. Adding a build to a previously blocked idea unblocks it. Shipped 2026-06-02. Source: same release note.
5. Manage quotas / High Priority ideas. High Priority ideas always get a dedicated quota. Shipped 2026-06-02, fixing a prior detach-reattachment bug. Source: same release note.
6. Auto-refill detail rules (locked 2026-05-26 by Lior in #cosmo-v2). (a) auto-refill fires only on LAST orchestration cancellation; (b) same-auditor priority order: same auditor > no-auditor/other with no prior work > all others; (c) delete quota = archive with attribution (TLs/PGs can access); (d) rollover = move everything, no stale task filtering; (e) explore Sun-Sat week (Mon-Sun is current). Source: https://sett-ai.slack.com/archives/C0AUCBKUKN3/p1779722382711649.
7. PR workflow rule (Yuval DM 2026-06-04). Small color/style changes = FYI in #cosmo-v2. Logic changes = send PR link. Applies to Cosmo V2 frontend.
New tasks (4):
- Address Gali Pruzansky's code review comments on PR #274 (ply-card responsive tag rail) and PR #276 (tooltips/click-to-copy). Both active reviews. Route to
vault/00-Action-Items.mdDesign Tasks. Source: PR notifications + prior session context. - Fix null-TL bug:
applyClientFiltersexcludes quotas withtl_name=null- Duskin found 2026-05-28, proposed fix is render under "Unassigned TL" lane. Route to Design Tasks. - Fix quota FE allocation bug: revision quotas incorrectly counted in min/max calculation (should count only version quotas). Sergey raised 2026-06-04 in #cosmo-v2. Route to Design Tasks.
- Week switcher design update: Ishai has a corrective design ready (per DM to Sergey 2026-06-07). Route to Design Tasks - apply new week switcher design to header.
- Cosmo/Cosmos data divergence is now the TOP priority for week of 2026-06-07. Yuval announced in #cosmo-v2 2026-06-07: "we need to focus this week in data alignment between Cosmo and Cosmos. Find the missing logics that fucks us and present different data." Sergey running daily reports at
sett-internal-decks.vercel.app/reports/revision-divergence/. Lior working on fixes. - Lior Finkelman absent 2026-06-07. Yuval skipped daily standup and announced it.
- Ishai OOF starts 2026-06-14. (Seen in calendar from prior session context.)
- Cosmos V2 UI updates shipped 2026-06-04 by Ishai (per #cosmo-support announcement): lighter color palette for tags/statuses; Quota details panel now matches quota card layout; game names capitalized ("Two Dots" not "two-dots"); collapsed columns now default.
- 2026-05-24: Ishai/Sergey 1:1 (calendar entry)
- 2026-05-25: Elad Werber / Ishai PG walkthrough (already filed this session)
- 2026-05-25: Yuval Arbel / Ishai (calendar, already filed this session)
- 2026-05-26: "Cosmos sync" (Yuval B + Sergey + Lior + Matan + Einat + Ishai; already filed as
vault/10-Activity-Log/...entry) - 2026-05-28: "Cosmos & Cosmo" (Einat organizer; agenda = why old Cosmo, how revisions, what missing; attendees: Sergey, Mykyta, Marija, Daria, Tatiana, Volodymyr, Aleksa, Ishai). Not yet filed.
- 2026-06-03: Ishai/Sergey 1:1 + Sergey/Elad (calendar). "PG Flows contd." (Sergey + Dafna + Elad + Ishai, 10:30-11am). Gemini notes likely exist.
- 2026-06-04: Lior/Ishai 1:1 (Lior accepted). "Sett Up" all-hands (monthly, last Thursday, Gemini notes likely).
- Tatiana: needs customer feedback text 100% visible in Cosmos (currently must go to old Cosmo). Not switching between weeks at all (no use for week switcher in Tatiana's workflow). Source:
https://sett-ai.slack.com/archives/C0B4JJ17HHA/p1780639501021289. - Tatiana (2026-05-26 #cosmo-support): needs "reset" button and specific page from old system in Cosmos.
- Aleksa (same group DM, prior session): wants Apollo thumbnails embedded for task identification.
- "Quality and Evals - Overview" (page 823132429) - Apollo quality discipline landing
- "Work Process - Effort Lifecycle and Ceremonies" (page 823066719) - Apollo squad process
- "Persona - Team Leads and Auditor Operations" (page 823066690) - TL persona doc
- "Cosmo + Apollo - Orchestration and Quota Integration" (page 823034022) - integration seam
- "Persona - Auditors" (page 823033942) - auditor persona
- "Persona - Creative Producers" (page 822968425) - CP persona
- "Playable QA Agent - Overview" (page 822968609) - QA agent PRD
- "Creative Quality - Quality Checklist PRD" (page 822968664) - quality checklist
- "Cosmos Weekly Board - Product Spec" (page 816906298, Sergey author, last edited 2026-06-04) - Cosmos spec
- Mon 2026-06-08 10am-11:30am IDT: "Platform" (Sergey organizer). UNREAD invite.
- Tue 2026-06-09 10am-10:30am IDT: "cosmo - brain storming" (Einat organizer, Gal Vitner also invited). UNREAD invite.
- Recurring: "Cosmos Daily" standups (Sun-Thu, ~3:50pm IDT) - Yuval running.
c1624592026-05-30 recover(studio): restore lost cosmetic-surgery work from session transcripts (vault/spec files, 12+ files)533cd162026-06-07 feat(sett-os): concept + spec + presentation for the Knowledge Bank command center (sett-os/, vault subjects, .claude/ files, N files)fd869dc2026-06-07 rules(cosmo-v2): lock branch-park corollary + visible-surface protection (.claude/rules/cosmo-v2-frontend.md, 1 file)3e018b62026-06-07 rules(cosmo-v2): adopt work/live integration-branch model (.claude/rules/cosmo-v2-frontend.md, 1 file)227c75e2026-06-07 knowledge(pg): re-ingest Sergey PG Operational Flows v13->v18 (vault/11-Subjects/SUB-017, 2 files)4c579f42026-06-07 research(pg): deep-dive pain correlation + Sergey-doc contribution + HTML viz (vault/11-Subjects/SUB-018, cosmo-design/screens/, N files)80961e62026-06-07 knowledge(pg): ingest Sergey revision-divergence report + Quality Pulse (vault/11-Subjects/SUB-019, 1 file)
- Harel Pick: OVERDUE. Last contact: never. Cadence: weekly. 7+ weeks since AB-016 opened. Run
/comms Harelfor a draft. - Tatiana Iudina: DUE. Last Ishai-sent Slack DM: 2026-05-03. Active in group DM 2026-06-05 (she wrote, Ishai may not have replied). Cadence: weekly. Run
/comms Tatiana. - Gali Pruzansky: OVERDUE. Last Ishai-sent DM: 2026-05-06. Has active PR review comments on #274 + #276. Cadence: 2-3x/week. Run
/comms Gali. - Omer Duskin: note - Duskin replaced as Cosmo dev by Yuval Balak + Leor Finkelman (per memory 2026-05-18). Comms map stale. Lior Finkelman now the relevant dev contact.
- Notion meeting notes: query API failed (both attempts), not swept this run. Retry with correct
one_week_agorelative filter next ingest. - "Intro - Product" org meeting 2026-05-26 (Gemini follow-up email from Sergey): Typeform feedback poll + deck link. Organizational context only, no Cosmo design action.
sat · 2026-06-06
# 2026-06-06
Done
Cosmo , Ply card rail: id truncates first, wrap as last resort
- Refined the crowded-rail rule per Ishai: the quota id (least important) is the sole flex-shrink target and truncates toward zero FIRST while every tag keeps full shape and the assign button stays put. Only when the id is gone AND tags+assign still overflow does the rail wrap the assign to a second row.
- CSS can't express "shrink then wrap" on one flex container (wrap breaks the line before shrinking), so PlyCardBody now measures rail overflow via a ResizeObserver (in nowrap mode) and toggles .ply-card-tags--wrap. id is a direct rail child (margin-left:auto, flex-shrink:1, ellipsis); assign wrapped in .ply-card-assign (flex-shrink:0). Order of tags unchanged.
- Verified live :5175 across 240/210/180/150: 1-4 chip cards stay single-row with id truncating (idW shrinks to ~7px, ellipsis), tags full + assign in; 5-6 chip cards wrap (tags row1, id+assign row2), id full, nothing clipped. cosmo-prod tsc clean.
- Ply card rail fix #2: grouped id + assign into one .ply-card-end-cluster (margin-left:auto, nowrap internally) so they always stay together + right-aligned and the assign never drops to its own left-aligned line. id is the sole shrink target inside the cluster (truncates first). Rail is flex-wrap:wrap; cluster wraps as one unit. Removed the flaky ResizeObserver wrap-toggle (was causing spurious 2nd rows + an occasional 3rd row). Verified at 224: all cards <=2 rows, cluster right-aligned, assign on same row as id, in-bounds.
- Ply card rail fix #3 (final): a second line is now strictly last resort. Rail is flex-wrap:nowrap so the id truncates all the way to nothing first (single row preserved). PlyCardBody measures: only when the id has fully collapsed (clientWidth<=1) AND the rail still overflows does it set .ply-card-tags--wrap, dropping the id+assign cluster to row 2 (assign never clipped, stays grouped+right). Verified at 224/200/180: light cards stay 1 row with id truncated; crowded cards wrap only after id gone. (6-chip card still 3 rows below ~200px, physical limit, not a real board width.)
Cosmo , Main side-nav pattern component (Figma 75:1832)
- Built the new left-rail navigation as production DS components in cosmo-prod (per Ishai: new DS component + showcase first, do NOT touch live WeeklyPage yet).
components/ui/nav-button.tsx , NavButton primitive: open (icon+label, full width) vs collapsed (40px icon-only), states regular/hover(--bg-sunken)/selected(--accent-soft + --accent). Props: icon, label, collapsed, selected, leading (for avatar), onClick.
- components/ui/main-nav.tsx , MainNav pattern: full-height rail, brand logo (reuses CosmoLogoFull/Icon), data-driven grouped sections (heading + NavButtons), collapse toggle (PanelLeftClose/Open), footer + user slots. Open 294px / collapsed 88px.
- CSS recipes in components.css (.nav-button*, .main-nav*), tokens only, dark-mode-safe.
- Website (design-system-site): new Patterns > Navigation page (MainNavPage) showing Open + Collapsed (interactive collapse + active selection) + NavButton states; Code tab with usage. Added to Sidebar Patterns + App routing.
- Verified live :5175: open=294px, collapsed=88px, selected=accent-soft, logo + collapse toggle + footer + user all render. cosmo-prod + site tsc clean. NOT wired into the live product (separate step pending Ishai's go).
- MainNav fixes: (1) collapsed expand toggle (PanelLeftOpen) moved to the TOP of the body as the first nav item (per Figma 75:1834), out of the footer. (2) Added width transition (220ms ease, reduced-motion safe) to .main-nav so collapse/expand animates like the prototype. Verified live :5175.
- MainNav: replaced logo with the new "Cosmos" wordmark (orbit glyph + Cosmos lettering + 3 sparkles; icon-only variant = orbit + 2 sparkles), sourced from cosmo-lab lab-shell. Updated shared Logo.tsx (CosmoLogoFull viewBox 0 0 151 35 overflow visible; CosmoLogoIcon 0 0 42 35) , propagates to product + nav.
- Reworked the collapse animation to match the prototype (analyzed cosmo-lab/weekly-v1.html): nav-button now transitions max-width (220px<->40px) + padding over 0.28s cubic-bezier(0.4,0,0.2,1) with overflow:hidden, label stays in DOM and slides out under the clip (no pop), icon fixed; rail width transitions 0.22s. Verified live :5175 (open logo viewBox 151x35, label in DOM, transitions correct). tsc clean.
- MainNav anti-jump animation rework (analyzed lab-shell prototype exactly): killed every discrete swap that caused "snap then animate":
- MainNav refinements: (1) Logo now morphs , split CosmoLogoFull SVG into .cosmo-logo-mark (orbit glyph + C + o + glyph sparkles, always visible) and .cosmo-logo-word (smos + trailing sparkle); the word group fades via opacity (250ms, 80ms stagger) when .main-nav-logo[data-collapsed]. Collapsed shows the orbit glyph only, not a stuck full wordmark. (2) Section titles fade instead of snapping , .main-nav-section-head now stays mounted and transitions height+opacity to 0 on collapse (was conditionally unmounted = snap); collapse toggle inside is the only thing removed when collapsed. Verified live :5175: open word/head opacity 1, collapsed 0. tsc clean.
- MainNav logo: split wordmark into per-letter groups (.cosmo-logo-letter), staggered opacity fade (collapse right->left, open left->right, ~50ms steps). Dropped the first "o" from the always-on mark group into the word group , collapsed now shows orbit glyph + C only.
- Ply card 3-line fix: in wrap mode the id+assign cluster now flows inline (margin-left:0) + flex:1 1 auto so it fills the last tag line and the id truncates there instead of forcing a 3rd row. Verified @224 (real board): both crowded(5-chip) + max(6-chip) cards = 2 lines, assign in-bounds. NOTE: a 6-chip card below ~200px still hits 3 lines (6 full tags physically overflow); flagged to Ishai , would need difficulty-label-collapse to guarantee 2 lines at every width.
- Ply card 3-line bug fully fixed: the wrapped id+assign cluster was flex-basis:auto, so the wrap algorithm pushed it to a fresh 3rd line when the trailing tag (Hard) sat alone on line 2. Changed to flex:1 1 0 (basis 0) + min-width:0 , the cluster now keeps to the SAME line as the trailing tag and the id truncates to fit. Verified Max(6-chip) card = 2 lines at every width 140-224 (was 3); id truncates on line 2; assign in-bounds.
- Ply card flash fixed + 3-line eliminated, pure CSS now. Removed the ResizeObserver/railWrap JS (it left the rail in a clipping nowrap state for one frame -> the assign-icon flash before wrapping). Rail is now always flex-wrap:wrap; the .ply-card-end-cluster is flex:1 1 0 + justify-content:flex-end, so its zero base size keeps it on the trailing tag's line, it grows to fill, and the id truncates there. Verified all 7 cards <=2 lines across 140-224px, id truncates first, assign always in-bounds, no flash. Dropped unused useEffect/useRef/useState imports.
- Ply card assign-overlap fix: the flex:1 1 0 cluster could collapse to 0 width on a full tag line, so the non-shrinking assign icon overlapped the last tag (Hard). Set .ply-card-end-cluster min-width:24px (the assign's width) so the cluster wraps to the next line when there's no room instead of collapsing. Verified all 7 cards across 160-224px: no tag/assign overlap, <=2 lines, assign in-bounds, id truncates first.
- Playable card page brought in line with the other DS-site pages: added the hero panel (live card at 224px) on top, and moved content into label-column .sds-desc-row sections , "Density" (card across chip loads) + "Responsiveness" (the interactive lane-width slider playground). Description/Code tab shell unchanged. tsc clean.
- Ply card degradation order corrected per Ishai: now id-truncate -> difficulty-label-collapse-to-icon -> wrap (in that order, applied only as far as needed). PlyCardBody measures pre-paint in a useLayoutEffect (no flash) and adds .ply-card-tags--effort-icon then --wrap to the nowrap rail until it fits one line. Only the type tag keeps text under pressure; difficulty drops to its icon before any wrap. Verified: Max(6-chip) card now 1 line at 160-224 (Hard->icon, id truncated, assign in, no overlap); crowded(5-chip) keeps "Hard" label + 1 line. Stale-HMR railRef errors were transient; live module clean, 10 cards render.
Cosmo , ported 4 component families from lab DS into production DS + DS website
- Built 6 React primitives in
cosmo-prod/packages/front/src/components/ui/:ftoggle.tsx(segmented control, Figma 670:18003, sunken pill + lift, adaptive/stretched, 4 states),data-grid.tsx(columns+rows config, interactive/scroll/empty variants, ellipsis cells, Tag/Badge slot in),field.tsx(TextInput: label + hint + error, covers search/plain/date/error states),menu.tsx(slot-based, all 6 lab variants: action+section, simple action, switch, buttons+select, full filter, applied-removable; reuses FCheckbox/Check/Switch),applied-filters-chip.tsx(the new two-zone chip: revert X + count badge + label + chevron, opens a Popover-wrapped Menu). - Added matching CSS recipes to
design-system/components.css(.ftoggle, .dt-table/.dt-scroll, .menu*, .applied-filters-chip*), token-mapped (no hardcoded hexes; auto-adapts to dark/wireframe). - Added 4 DS-website pages (
cosmo-ds-site/.../pages/): TogglePage, TextInputPage, DataGridPage, MenuPage; wired into Sidebar (Components + Patterns groups) + App.tsx routing. Radio already existed (radio-group.tsx). - Fix: Menu row was a
- Verified live :5175 all 4 pages + Playable card: zero console errors on fresh load (the earlier railRef/idRef + nested-button errors were stale-HMR accumulation). cosmo-prod + site tsc clean (lone site error is pre-existing api-client import.meta.env via PlyCardPage's @front transitive import, not from this work). Local-only, nothing pushed.
fri · 2026-06-05
# 2026-06-05
Done
Cosmo
- Tag component: added selection states (selection prop: regular/selected/unselected). regular=bg/50 border/100, selected=bg/100 border/50 (swap), unselected=transparent bg border/100, text stays /400. Per Figma 39:5863. Verified live: click flips alpha 0.2<->0.5.
- StatsBar: replaced status + last-mile pills with Tag component (tones: Not Started=neutral, In Progress=active, Complete=positive, Unfillable=negative, TL=violet, PG=purple; icons Ban/RefreshCw/CircleCheckBig/Hourglass per Figma 39:4998), removed both stats-dividers, wired selection=selected on active filter. QUOTAS total + R/V left as-is for now. Verified live :5174: 0 dividers, 6 tags, correct refreshed-palette tones, selection swap works. Still on feat/palette-refresh-v2 branch (stacked on palette refresh #271).
Cosmo , Sett Design website (DS site)
- Clarified: "the website" =
cosmo-ds-site/packages/design-system-site/(:5175), the standalone Sett Design site. NOT the cosmo-prod/design-systemroute. Locked terminology rule in.claude/rules/design-system-source-of-truth.md+ topic-index pointer in CLAUDE.md. - Repointed the site's
@frontalias (vite.config.ts + .js + tsconfig paths) from the localcosmo-ds-siteworktree's../front/srcto the canonicalcosmo-prod/packages/front/src. Per Ishai's call: one source of truth, site never drifts from merged product. Fixes blank Color page (worktree copy had diverged from main: different palette values +--color-*prefix scheme). - ColorPage SCALES updated to canonical
--color-*names + added Bordo. Verified live :5175: 65 swatches, 0 empty, values match main (green-400 #0dab4b, bordo-400 #dc1367). - Ported
fcheckbox.tsx(was worktree-only, blocked the site boot once aliased to main) into cosmo-prod maincomponents/ui/+ added a token-based.fcheckrecipe to main components.css (the.fcheckCSS had never existed anywhere; component referenced it). - Pending: add the Playable-card showcase page to the website (today's ply-card responsiveness work was built in the wrong viewer , cosmo-prod's
/design-systemroute).
Cosmo , Checkbox/Check/Radio ported to production components + website
- Ported the lab DS input controls (cosmo-design/design-system, Figma 843:66791/66792/67104) into cosmo-prod main as real React components:
FCheckbox(.fcheck box, accent fill + white check),Check(.fcheck-bare borderless checkmark),RadioGroup+Radio(.fradio circle + accent dot). All Radix-backed, Gali standards (arrow fn, named export, inline props). CSS recipes added to cosmo-prod components.css (token-only). Replaced the earlier stopgap fcheck CSS. - Website (design-system-site, :5175): rewrote CheckboxPage desc; added CheckPage, RadioPage, PlyCardPage; wired App.tsx switch + Sidebar nav (Components: +Check, reordered; Patterns: +Playable card). Verified live: checkbox accent-fill+check, radio dot, borderless check, ply-card playground (7 cards, slider, tags hold h20).
- Note: site
tsc --noEmitflags one pre-existing error in cosmo-prod api-client.ts (import.meta.env needs vite/client types in site tsconfig) , not from this work; dev/build unaffected. Flag for later tsconfig fix.
Cosmo , DS website new page layout (all pages)
- New component-page layout applied across the Sett Design website (design-system-site, :5175), per Figma 67:5881: interactive HERO panel on top (every case live), then a renamed tab strip + structured "Description" sections (label column + bordered example card, label-col/card row layout). Tag page built as the template, then Button/Checkbox/Check/Radio/Switch via parallel subagents; PlyCard + Color got Code tabs.
- Tabs trimmed to Description + Code only (removed Usage + Changelog). Code tab now holds usage instructions via new CodeBlock component (import + snippets per component).
- Removed all empty/stub pages from nav + deleted StubPage.tsx. Nav now: Foundations(Color); Components(Button, Tag, Checkbox, Check, Radio, Switch); Patterns(Playable card).
- New CSS in sett-design-site.css: .sds-hero/.sds-hero-row, .sds-desc-row/.sds-desc-label/.sds-desc-card/.sds-desc-cards/.sds-desc-subcard, .sds-code-tab/.sds-code-pre. New components: CodeBlock.tsx.
- Verified live: all 8 pages render, tabs Description+Code, heroes on component pages, desc-rows populated. Typecheck clean (1 pre-existing api-client import.meta.env error in site tsconfig, unrelated).
Cosmo , DS website SHELL rebuilt (Figma 67:5881)
- Moved brand (SETT Design logo) + theme switcher (Light/Dark/Wire segmented) into the LEFT sidebar top; removed the top Topbar entirely (deleted Topbar.tsx). Content is the right column, padding 32/128.
- Sidebar: width 272, p-32 gap-32. Nav groups now COLLAPSIBLE , header = label + flex divider line + ChevronUp toggle (SidebarGroup useState open). Nav buttons restyled per Figma: h-24, p-8, rounded-4, active = --accent-wash bg + --accent text. NavItem icon slot removed.
- Theme toggle restyled to segmented control (bg-sunken, rounded-8, active button bg-panel).
- New CSS in sett-design-site.css (sds-sidebar/-brand/-groups/-group-header/-group-divider/-group-chevron/-items, sds-nav-item, sds-theme-toggle). Verified live :5175 after dev restart (cleared stale HMR ghosts of deleted Topbar/StubPage). Typecheck clean.
Cosmo , DS website Playable-card assign button restored
- The website PlyCardPage rendered PlyCardBody with showAssign={false} (set earlier to dodge the provider deps), hiding the assign-auditor control. Restored: wrapped the page in QueryClientProvider (local QueryClient, retry:false) + WeeklyStateProvider, flipped to showAssign default (true). Added @tanstack/react-query to the site package.json deps (was only in front's tree; tsc couldn't resolve it).
- Verified live :5175: all 7 cards show the 24x24 UserRoundPlus assign button. Expected /api/weekly/teams CORS/network errors only (no backend behind the DS site) , no QueryClient context error, button renders + opens. Typecheck clean.
Cosmo , Ply card tag rail wraps instead of clipping (Figma 2026-06-05)
- Extreme-crowding behavior changed: when chips + id + assign don't fit one line, the rail now WRAPS to a second row instead of truncating the id / clipping the assign button. .ply-card-tags = flex-wrap:wrap + row-gap:4px; .ply-card-row-end (id + assign) is flex-shrink:0 and wraps as one intact unit, margin-left:auto keeps it right-aligned on whatever line it lands.
- Removed the count-based difficulty collapse (effortCollapsedByCount + --effort-collapsed) , labels stay full, wrap handles crowding. Kept a deep-fallback container-query collapse at <=168px lane only. Removed id flex-shrink/ellipsis truncation (id stays full).
- Verified live :5175: light cards single-row; crowded/max cards wrap (tags row1, id+assign row2 right). id full + not clipped, assign button always >=24px and inside the card at 224/200/170. Matches Figma. cosmo-prod tsc clean.
thu · 2026-06-04
Cosmo
- Fixed FButton Down state ignoring physical hover (worktree cosmo-ds-site). Root cause:
.fbtn--primary:hover:not(:disabled)specificity (0,3,0) beat.fbtn--primary.is-down(0,2,0), so hovering a static Down button flipped it to the hover look. Added:not(:disabled)to the down/active/selected rules (primary + secondary + subtle) to lift them to (0,3,0); source-order-later breaks the tie in their favour. Verified live while hovered: down stays orange-600, no inset shadow, no 2px raise. Also fixed the same latent bug on subtle's.is-selected. - Split the two weekly text-display changes into two independent branches off fresh main (cosmo-prod), committed locally (I don't push/PR):
feat/weekly-game-name (READY): displayGameName() helper + 4 call sites (PlyCard, PlyDetailDrawer, QuotaBacklog, QuotaBugReportDialog). Pure frontend. Build green. Commit 2f45950.
- feat/weekly-multi-prompt (BLOCKED on Leor backend): +N card render + types.ts optional fields (prompt_count, first_prompt_name) + .ply-card-prompt-more css. Ships dark with safe fallback. Build green. Commit b8bc9e0. Needs rebase onto main after the game-name PR merges (small PlyCard overlap).
- Handed Ishai the gh push + gh pr create commands for both (multi-prompt as --draft).
- DS-site (cosmo-ds-site) refresh no longer resets to Tag: mirrored active nav item to the URL hash (#Button etc.) in App.tsx, init from hash, hashchange listener for back/forward. tsc clean, verified live at :5175 (#Switch reload stays on Switch).
- Pushed
feat/weekly-game-name+ opened PR #263 (title-case game names) on Ishai's go. Ready to merge. Multi-prompt branch still local/draft, blocked on Leor. - FButton (cosmo-ds-site worktree): removed the inset bottom line on hover for primary + secondary (
box-shadow: inset 0 -2px 0 ...). Hover now signals via the 2px content raise alone. Verified primary state colors against tokens live: Regular #dc6821 (orange-400), Hover #cf3f00 (orange-500), Down #b43600 (orange-600), all box-shadow none. Confirmed orange-400 token value matches Ishai's Figma value #DC6821 exactly, no color revisit needed. - FButton outline ring on hover FIXED (real root cause). The thin "outline" tracing the rounded corners on hover was: inset box-shadow + the 1px transparent border + default
background-clip: border-box= shadow drawn offset 1px, tracing a ring on the radius. Fix:background-clip: padding-boxon base.fbtn+ converted all 13 variantbackground:shorthands tobackground-color:(shorthand was resetting the clip back to border-box). Kept the hardinset 0 -2px 0depth as designed (not blurred). Verified by decoding hover screenshot corner+bottom pixels: clean 2px dark inset band at bottom, single AA pixel at corner, no ring. Earlier wrong attempts: removed the shadow entirely, then blurred it, both wrong, Ishai wanted the hard shadow minus the ring. - FButton secondary hover inset: color changed to cream-300 (match the border, was --line), then reduced from 2px to 1px since secondary already has a visible 1px border (2px read as 3px total). Primary stays 2px (no border). Verified icon stroke-width already 1.5px on all 44 FButton icons+chevrons in the DS-site (FButton passes strokeWidth={1.5}); no change needed there. If thicker strokes appear, it's the product's separate Button component, not FButton.
- FButton icon stroke fixed properly. Two findings: (1) a CSS rule
.fbtn svg path,circle,...{stroke-width}overrides the lucidestrokeWidthprop, so changing the TSX prop did nothing, the CSS rule is the real control. (2) lucide viewBox is 24 but icons render at 16px, so stroke-width scales x0.667; a raw 1.5 rendered ~1px (too thin). Set the CSS rule to 2.25 so effective visual = 1.5px (the Figma value): 2.25 x 16/24 = 1.5. Verified Plus + funnel both compute effective 1.5px. The Plus looked thinner than the funnel only because straight pixel-aligned lines read lighter than diagonal/closed shapes at the same stroke, optical not code. - FButton regular primary icon color changed cream-300 -> cream-50 (match text), per Ishai. Reverses the earlier "icon dimmer than text in regular" decision for primary regular; icon + chev now equal the cream-50 text. Verified computed icon color === text color.
- Built DS-site Color page (cosmo-ds-site, ColorPage.tsx + nav route #Color + CSS). Shows 10 scales / 40 swatches: chip + token name + live-resolved sRGB hex + raw declared value when different. Reads tokens live (probe element) so it reflects real tokens.css and distinguishes token-vs-component mismatch. Surfaced: orange is the only hex-declared scale (rest oklch); orange-400 #dc6821 / 500 #cf3f00 / 600 #b43600 resolve exactly. tsc clean.
- FButton hover raise reduced 2px -> 1px (primary + secondary .fbtn-inner), per Ishai (he'd designed 1px). Verified matrix -1.
- Color page expanded to the FULL token universe (was missing the tag color families). Added: Tag colors palette (13 --tagc-
-text: gray/green/red/eggyolk/blue/purple/darkblue/pink/aquamarine/lightblue/yellow/orange/peach), Tag color tints (-50/-100), Tag tones semantic (--tag- -bg/border/text, 8 tones). 13 sections total. tagc tokens live in tokens.css (60 of them), not components.css. tsc clean. - Color page reworked to base-only, grouped by color type (Ishai: drop semantic/alias/usage duplicates, just the raw scales). Sections: Orange, Cream, Ink, Green, Amber, Red, Extended hues (13 --tagc base colors). Removed accent/surfaces/lines/tag-tone/tint sections + dead TAG_COLORS/TAG_TONES consts. 40 swatches, tsc clean, verified live render.
- Hid difficulty/effort editing in production (PlyDetailDrawer) per Ishai (push now). Set canEditDifficulty=false: SET difficulty renders read-only tag (no dropdown chevron, not clickable), UNSET suppresses the editable "Effort" empty state. Removed now-unused useAuth import. Branch fix/hide-difficulty-editing off main, tsc+build clean, pushed, PR #264. DifficultyDropdown + useSetDifficulty wiring left intact for one-line re-enable.
- Palette refactor (cosmo-ds-site worktree, subagent): unified all color tokens to Figma base palette (node 14:889), --
- naming (yellow/egg-yolk/orange/red/pink/purple/dark-blue/blue/light-blue/aquamarine/green/cream/ink/white), 50/100 alpha hex + 200/400 solid. Retired --tagc-*, --amber-*, peach. Repointed --tag- -* + accent + 60 amber consumers + badge/tag tones. Light+dark+wireframe. Rebuilt Color page. tsc clean both packages, grep-clean of old tokens. NOT committed (worktree, awaiting Ishai visual review). - Palette migration strategy decided (Ishai): parallel-then-shift, NOT big-bang. Discovered production main still has OLD oklch colors (orange-500=oklch, not #cf3f00); refreshed hexes never merged. New palette ships under --color-
- prefix in parallel to legacy --orange/--red/--amber/--tagc/--chip, migrate surface-by-surface, retire legacy last. - PR #265 (feat/palette-base-tokens, off main): additive --color-* base palette (61 tokens, Figma node 14:889) in :root only. Zero existing token changed, zero consumer touched, zero visual change. Build clean. Foundation PR. Scrapped the subagent's big-bang tokens.css in favor of this additive approach. Per-surface migration PRs + final retire-PR to follow.
- Tag component aligned to new --color-* palette (worktree, for review at :5175/#Tag). Reset worktree's prod-shared files (tokens/components/tag/badge) to origin/main first (dropped the scrapped big-bang contamination), confirmed #265 merged to prod main (--color-* present). Then: .sds-tag font 10->12px, icon+chevron stroke-width 1->1.2; repointed all 13 --tag-
-* aliases to --color-* (neutral->ink, positive->green, negative->red, midd->egg-yolk, active->blue, violet->purple, purple->dark-blue, magenta->pink, aquamarine, lightblue->light-blue, yellow, orange; peach temporarily->orange, no peach hue in new palette, flagged); made tag.tsx uniform (zero --tagc- refs). Verified: font 12px, stroke 1.2px, tag-positive-text=#00853f=color-green-400. tsc clean. NOT committed, awaiting Ishai review then Tag PR into prod. - Tag icon stroke fix (viewBox-scale trap, same as FButton): raw 1.2 rendered only 0.7px visual (24 viewBox scaled to 14px icon / 13px chevron). Compensated to definite VISUAL 1.2px: icon stroke-width 2.06 (1.2 / (14/24)), chevron 2.22 (1.2 / (13/24)). Verified effective 1.202px / 1.203px. Font already 12px.
- Tag dark mode fixed (broke when tones moved to theme-independent --color-* palette: dark-green-400 text on dark bg = unreadable, light tints washed out). Added [data-theme="dark"] --tag-
-* override block replicating the proven old tagc dark model: bg/border = saturated --color- -400 at 22%/45% via color-mix to transparent, text = light --color- -200 tint. All 13 tones. Verified dark positive text=rgb(130,239,170) light green, bg=22% alpha. Light mode unchanged. - Partner Request icon: parked. User's Figma megaphone (filled, bell-right, handle loop) differs from lucide Megaphone (thin tilted outline). lucide has no match; needs custom SVG from Figma. Deferred.
- Locked DS single-source-of-truth workflow (Ishai): DS lives in cosmo-prod/packages/front; product (:5174) + DS website both consume the SAME files (DS-site via @front alias, proven: imports @front/components/ui/tag = product's real Tag, no copy). Edit once, both update, never diverge. Test local first, push after. Rule: .claude/rules/design-system-source-of-truth.md + memory. Root cause of session's FButton wipe + divergence = editing the worktree's copy of front/src instead of cosmo-prod; banned going forward.
- Applied Tag palette migration + difficulty-hide directly in cosmo-prod (branch feat/tag-palette-migration, what :5174 serves), per the new workflow: tag.tsx uniform (--tag-
for all 13 tones), tokens.css light tag aliases -> --color-*, dark [data-theme=dark] tag block (color-mix 22/45% + -200 text), components.css .sds-tag 12px + icon stroke 2.06/chev 2.22 (visual 1.2px). canEditDifficulty=false already present. tsc clean, :5174 = 200. - Backend was hung on dead DB connections (VPN had dropped: psycopg2 timeout to sett-db RDS) -> :5174 stuck on skeleton. Ishai reconnected VPN; restarted uvicorn, /docs=200, board=422 (healthy), DB reachable. Not a code issue.
- Pushed Tag palette-migration PR #266 (feat/tag-palette-migration) after Ishai verified tags live at :5174. 3 files (tag.tsx uniform tones, tokens.css light+dark --tag->--color- aliases, components.css .sds-tag 12px + stroke 2.06/2.22). No API break, legacy --tagc- left intact (parallel). First component migrated onto --color-*.
- Consolidated to main. All 4 PRs merged to main (game-name #263, difficulty-hide #264, palette #265, tag-migration #266) , Ishai merged them on GitHub. Switched local :5174 off the stale feat/weekly-text-display branch onto main + pulled, so local now shows everything together (game names title-cased was missing only because local was on the pre-split branch). Pruned 4 dead merged branches. Locked "always converge to main / local works from main" rule in cosmo-v2-frontend.md.
- Ported FButton into cosmo-prod (branch feat/fbutton-component off main), per single-source rule (was worktree-only). fbutton.tsx copied; .fbtn CSS appended to components.css with light-mode tokens remapped to --color-* (orange-400/accent/cream/ink/green -> --color-*; dark [data-theme=dark] rules already --color-*, kept). Showcase "Button (F)" section + nav entry added to DesignSystemPage.tsx. Verified live :5174/design-system#fbutton: 12 buttons, primary bg #dc6821 (=--color-orange-400 Figma hex), text cream-50. tsc + build clean. Not committed yet (awaiting Ishai review). Next: PR component, then wire into TopBar action bar LOCALLY (no PR) to try.
- Pushed FButton component PR #267 (feat/fbutton-component): fbutton.tsx + .fbtn CSS (light on --color-*, dark per Figma) + "Button (F)" showcase. Additive, no consumer yet, zero visual change to existing screens. Build clean. Next (after merge): sync local to main, wire FButton into TopBar action bar LOCALLY to try (no PR).
- FButton hover raise fixed 2px->1px (the 1px tweak from earlier never made it into the merged component; rebuild used 2px). Isolated to its own PR #268 (fix/fbutton-hover-raise-1px) off main, components.css only, all variants light+dark. The action-bar experiment (TeamPicker trigger -> FButton) stays local on try/fbutton-in-action-bar; verified click opens the dropdown (Radix popover wiring intact, FButton dropdown prop is visual-only). Both visible locally at :5174.
- Action-bar experiment (local, try/fbutton-in-action-bar): header height -> 83px (--topbar-h). Converted all 5 TopBar end-cluster triggers to FButton: GameFilter + FiltersPicker (via shared MultiSelect trigger, only 2 consumers) + ViewOptionsPicker = subtle icon-only; WeekSelector + TeamPicker = secondary labeled w/ dropdown. WeekSelector rebuilt as FButton dropdown (This Week first / Last / Next, relative label on button, date range inside menu, checkmark on active, onSelectWeek->setCurrentWeekStart; dropped prev/next arrows). All dropdowns open via Radix popover (FButton dropdown prop = visual only). tsc clean, removed dead Button imports + 3 dead week-nav funcs. NOT pushed.
- Action bar PR #269 (feat/action-bar-fbuttons): all 5 TopBar triggers -> FButton (3 subtle icon-only: game/filter/view-options; 2 secondary: WeekSelector + TeamPicker), header 83px, WeekSelector rebuilt as This/Last/Next FButton dropdown. Excluded the redundant components.css 1px-raise (already on main via #268) by rebranching off fresh main + restoring only the 7 action-bar files. tsc+build clean. Deleted the try/fbutton-in-action-bar experiment branch (content in PR).
- Menu polish PR #270 (feat/menu-white-bg-cleanup, follow-up to merged #269): all popover menus -> --color-white #fefcf9 (.popover-menu + MultiSelect filter menus; MultiSelect Command set bg-transparent so inner inherits white instead of cream --bg-popover). TeamPicker: removed divider + "Teams" title. GameFilter+FiltersPicker: red presence dot repinned to icon-button top-right corner (5px/5px, 7px, white ring) instead of floating off-side (broke when trigger became icon-only FButton). tsc+build clean. #269 (action bar) confirmed merged to main; deleted that branch, back on main.
- Palette refresh PR #271 (feat/palette-refresh-v2): updated ALL --color-* to current Figma node 14:889 (hues re-tuned brighter since initial import) + added new bordo hue. green-400 #00853f->#0dab4b, blue #3a66da->#4b86fa, orange-500 #cf3f00->#e12d00, ink-400 ->#8c8781, cream-50 ->#fef8f1, etc. Cascade: Tag/FButton pick up new values automatically (verified tag-positive-text=#0dab4b live). Foundation for StatsBar tag work. Legacy COLOR_FAMILIES showcase (old oklch tokens) left untouched (out of scope).
- StatsBar plan (from Figma 39:4998 + select-states 39:5863, via subagent): step1=palette refresh (#271 done). Remaining: (2) add Tag selected/unselected states = /50<->/100 swap, unselected=border-only no bg, text stays /400, no hover/ring/flip; (3) StatsBar pills->Tag (Not started=neutral/ink, In Progress=blue refresh-cw, Complete=green circle-check-big, TL=purple hourglass, PG=dark-blue hourglass, R=egg-yolk, V=green; rounded-full pills px7, R/V rounded-4 px5 no icon) + remove 2 dividers; (4) responsiveness (label truncate -> count-only -> wrap). Polish tag deferred (TL+PG only for now).
wed · 2026-06-03
# 2026-06-03
Done
Cosmo
- Started DS-in-production workflow. Synced
cosmo-prodlocal main toedc06cc(was 88 commits behind). Locked workflow: per-component branch off fresh main + PR per change for Leor. - Audited current DS (
packages/front/): 23 primitives, 2-pattern hybrid (A CSS-class / B cva+Tailwind), only 6/23 showcased, ~19 files drift from Gali's syntax standards (React-namespace import +functionkeyword), flat tokens.css. - Researched + wrote
vault/11-Subjects/SUB-019-sett-design-system-spec.md, "Sett Design" DS website + component library spec modeled on atlassian.design (4-tab pages, top-bar IA, 3-state maturity), Base-UI-v1-go-forward build stack for a 1-2 dev team, 3-tier token model (no Style Dictionary), phased roadmap 0-7. Memory pointer saved. - Investigated public hosting of
/design-system: it's auth-gated (Cognito via AuthProvider inmain.tsx:13), already deploys to staging/prod viadeploy-front.ymlbut bounces public visitors to login. Decided: standalone static site, Sett AWS, inside cosmo-prod aspackages/design-system-site/. - Built
packages/design-system-site/LOCALLY as proof (NOT committed/deployed, Leor not looped). Shares front's DS source via@frontalias to../front/src(zero drift), no auth/backend, Google Fonts for Barlow/Red Hat Text/Rubik, build clean (0 TS errors), dev atlocalhost:5175, Pattern B components render styled. - Got the local Cosmo V2 backend running against staging data (21:00-21:40 IDT). Frontend already on :5174; backend was down + venv empty. Root blocker was private dep
sett-infra>=0.6.150(not on PyPI, lives in AWS CodeArtifact). Used BALAC's onboarding links (Confluence pageId 348913669 +sett-onboard.txt) to extract hardcoded AWS values. Set up~/.aws/config(SSO profilemain); discovered Ishai's only AWS role isaws-others(NOT developers/product , those denied), account664134625559.aws sso loginsucceeded after role fix. Refreshed CodeArtifact token into backend.venv/pip.conf,pip install -r requirements.txtthen pulledsett-infraclean. Wrotecosmo-prod/packages/backend/.env(SETT_ENV=local+ staging DB creds, gitignored).SETT_ENV=localauto-maps tosett_db_stagingschema + mock-user auth bypass. uvicorn up on :8000,/docs=200,Application startup complete, connected tosett_db_staging. Verified data endpoints reachable (422 on missing query param = healthy). - Wrote
.claude/rules/cosmo-local-backend.md(full reproducible setup: AWS SSO config, CodeArtifact dance,.env, daily-restart vs full-refresh commands, health checks; DB password kept OUT of tracked file). Added topic-index pointer + session-boot step 7 to CLAUDE.md.
Decisions / rules
- Always log to the activity log; never ask first (21:41 IDT). Ishai: "log everything, always. You don't have to ask me." Locked as standing rule in CLAUDE.md , append to the day's log after any meaningful change without prompting.
- Auto-start local Cosmo backend on relevant sessions. When a session is about Cosmo V2 / the product / running it locally, orchestrator silently checks
:8000; if down, starts it (no AWS needed unless deps must reinstall); if up, leaves it alone. Not run for vault/design/Apollo sessions. Rule in.claude/rules/cosmo-local-backend.md+ CLAUDE.md boot step 7. - Ishai's AWS access = role
aws-others, account664134625559only. SSO starthttps://d-99675dba7f.awsapps.com/start, regioneu-central-1. SSO session ~12h; only needed to (re)install Python deps, not to keep the running backend serving data. - Sett Design website effort ON HOLD (13:10 IDT). Pivot to working on the components themselves against the
/design-systemroute (needs no DB / local Cosmo backend, which Ishai currently lacks access to in a parallel session). Standalone-site scaffold parked, ready to resume on Ishai's say-so. - Net-new strategic decision logged for Gali sign-off: Radix as legacy / Base UI v1 as go-forward primitive layer (she co-owns
frontend-development-standards.mdwhich hard-codes Radix).
Deferred
- Public DS hosting: commit + PR of the standalone package, AWS wiring (
deploy-ds-site.yml+ public S3/CloudFront, Leor's territory). Resume when website track un-holds.
tue · 2026-06-02
# 2026-06-02
Done
Cosmo
- Scanned
#cosmo-support+#cosmo-bug-reports(May 7 to Jun 2) for UX insights. Wrotevault/11-Subjects/SUB-015-cosmo-support-ux-insights.md. 11 insights; top themes: Apollo-Cosmo sync gaps, data-trust on counts/statuses, silent board mutation, cryptic errors, meaningless labels (Last Mile / Unfillable).
Personal / concepts
- Brother conversation on "agentic to-do / command center" (3 voice files, ~83 min). ChatGPT transcript came back with unrecoverable Hebrew mojibake; re-transcribed locally via whisper.cpp (large-v3-turbo,
-l he) — clean. Raw audio + per-file txt/srt + full Hebrew transcript stored invault/11-Subjects/raw-audio/2026-06-02-brother-agentic-todo/. Wrote subject summarySUB-016-agentic-todo-command-center.mdand a clean shareable write-upSHARE-agentic-todo-writeup.md(for the brother). Key concepts: data-bank-as-single-source-of-truth, the Scope model (dynamic relevance-based lens, not folders), primary/secondary/focus + motivator bank, project lifecycle + JTBD, goals triad, concept/feature-flag engine, Figma indexing gap. - Built a single-file visual explainer of the command-center concept:
vault/11-Subjects/raw-audio/2026-06-02-brother-agentic-todo/command-center-explainer.html(12 sections, diagram-heavy, ADHD-friendly + presentable). Served locally on :8799. - Connected the concept to Studio: wrote
vault/08-Design-specs/studio/_handoff-command-center-concept.md(concept→Studio-section mapping table) + pointer instudio-spec.md. The command-center conversation IS Studio's conceptual backbone (same architecture: vault = single source of truth, Studio = view/control layer). Biggest unclaimed idea for Studio: the Scope relevance-lens primitive. Decision flagged: markdown-as-DB (Ishai) vs Linear/existing-API (Aviran) — Studio already sits on Ishai's side, worth declining the API option consciously. - Follow-up: Ishai also ran files 1-2 through ivrit.ai (diarized PDFs). Stored both PDFs in the data bank. ivrit.ai's 0/1 speaker labels are unreliable (flip between files), so attributed by content: Ishai = vision/designer/PM with the running vault+librarian; brother = eng/data/management lens. Folded ivrit.ai corrections into both docs: "Claude OS" term, "view not folders" reframe, and a new backbone + augmentation layers + Certified/slop + shared-vs-private DB section. File 03 (60 min) not in ivrit.ai — whisper remains its only source.
Deferred
Decisions / rules
sun · 2026-05-31
# 2026-05-31 (Sun)
Done
Studio site
c162459— recovered lost cosmetic-surgery work from session transcripts (Ishai Revach, 2026-05-30). Replayed 247 Edit/Write events from ~10 Claude sessions (2026-05-16 to 2026-05-17) in timestamp order. 19 files changed, 2047 insertions. See Product changes section below.
Daily ingest (09:48)
Window: 2026-05-30 09:46 -> 2026-05-31 09:46 Asia/Jerusalem Sources scanned:- Notion: 2 meeting notes retrieved (2026-05-25 + 2026-05-26); keyword search returned 0 additional pages
- Slack: 6 searches across public + private + DM space; ~35 messages with project signal across #cosmo-support, #cosmo-bug-reports, #playables-ops-status-update, #einat-and-yonis-agent, #structured-ideation
- Gmail: 3 threads reviewed, 1 project-relevant (GitHub PR #35 Qodo bot comment); 1 Figma receipt skipped (financial); 1 Cline newsletter skipped (noise)
- Calendar: 1 event in extended window (2026-05-28 "Cosmos & Cosmo" team meeting, 15:00-15:30 IDT)
- Atlassian (Confluence + Jira): unavailable this run (cloud connector access error "not explicitly granted by user")
- Git: 1 commit in window (
c162459, Studio site recovery, 2026-05-30) - Merged PRs: not scanned (Atlassian unavailable; GitHub search deferred)
- Cosmo V2 / revision-age display. Lior Finkelman clarified in #cosmo-support (2026-05-30) that two separate age values exist: (1) R1 age = how long ago the revision request was created; (2) Status Age at the top = how long the quota has been in its current status. These are intentionally different fields, not a bug. Sergey asked, Lior confirmed. See
vault/08-Design-specs/manage-quotas-modal.md— "Recent decisions" updated below.
- Studio site cosmetic surgery. Committed as recoverable, canonical state in
sites/studio/. Geist typography sitewide, edge-to-edge divider removal, dark/light theme toggle (replaced 5-swatch picker), Figma logo in sidebar, removed section-number markers, homepage gallery-cards section first, milestone cards. Root cause of prior loss: edits sat uncommitted in working tree. Fix: commit after each session.
- Re-authenticate Atlassian MCP connector (claude.ai connector not granted access this run). Manual step: re-auth via claude.ai integrations settings. Add to AB as housekeeping. ->
vault/00-Action-Items.md(Design Tasks)
- Game onboarding UX is a pain point (Elad + PG in Notion 2026-05-25 meeting: "headache in onboarding a new game, it's triggered from Monday/CRM but the flow needs UX review"). Flag for M2 scope discussion. ->
vault/00-Action-Items.md(Open Design Questions)
- Build pipeline freeze (Cosmo production). 7 orchestrations entered
build/in_progresswithin a 13-minute window (2026-05-29 18:22-18:35 UTC) and never cleared, now 27h+. Games: clash-royale (orches 4858, 4666, 4662) + bestplay (5683, 5682, 5672, 5676) + jewelscape (5816, added next day). Apollo-agent assessed: Apollo tasks succeeded; block is on Cosmo's state machine missing build-completion callbacks. Monday ticket created (Critical, Ready for Dev). Escalated in #cosmo-support by Yoni's Agent. Status as of 2026-05-30 21:17 UTC: still frozen.
- Apollo agent image-vision ticket created. Apollo-agent created Monday ticket "Hook up Apollo Agent with Slack attachment / image-vision support" (item 2952205529, Sprint 2026_Q1_C1_S14, Epic: apollo, Priority: Medium, Status: Ready 2 Start). Yuval approved.
- Notion: https://www.notion.so/36b8755ea8a180f9b232fdbb09109283
- Attendees: Ishai + Elad Werber (1:1, confirmed from page parent "elad / Ishai")
- Key signal extracted:
- Filed as meeting note:
vault/06-Meeting-notes/2026-05-25-elad-pg-operational-prototype-review.md(written below)
- Notion: https://www.notion.so/36c8755ea8a18028b32acd625a934764
- Attendees: Sergey Bukhman, Mykyta Assieiev, Marija Tatar, Ishai Revach, Einat Harmelin (organizer), Daria Yakusheva, Volo Storozhuk, Aleksa Bogdanovich, Gal Vitner (optional), Yuval Balak — confirmed via Calendar event 2026-05-28 (same recurring session, 15:00-15:30 IDT). Tatiana Iudina declined.
- Calendar description: "why are we using old cosmo? how we need to work with revisions? what are we missing in new cosmos?"
- Key signal from Notion transcript (machine-translated, quality varies):
- Filed as meeting note:
vault/06-Meeting-notes/2026-05-26-cosmos-cosmo-team-session.md(written below)
- Weekly playables ops (week of 2026-05-25 to 2026-05-29): Volo posted in #playables-ops-status-update. Auditors: 33 FT + 1 PT + 5 TLs. Week totals: Mon 96 (32 new / 64 rev), Tue 67 (42/25), Wed 35 (18/17), Thu 43 (34/9), Fri 61 (52/11). No UX action. Context only.
- GitHub PR #35 (Daily ingest 2026-05-29) — Qodo bot paused. Qodo code review bot left a comment on
sett-backend/sett-ux#35saying reviews are paused (user needs a paid seat + linked Git account). No blocking issue for vault work. FYI.
- Heroes vs Hordes V2 briefs report posted by Yoni's Agent in #structured-ideation (2026-05-30). S3 presigned link. Ops/production signal, no UX action.
- Setto / injection issue in #cosmo-support (2026-05-31 morning): Matan asked about ANTHROPIC_API_KEY and "something breaking the injection process," tagged Peter Hutsul + Shay Zilberman. Backend ops issue, no UX action.
- Gmail: Figma receipt from Stripe (invoice+statements+acct...@stripe.com) — skipped: financial figure. [REDACTED - sensitive, review manually]
- Atlassian (Confluence + Jira): source unavailable this run — connector access not granted. Re-auth needed. Last known Confluence activity: Quota Manager spec page 765296641 (rev 2, 2026-05-13). Check manually for any UX-space page updates since 2026-05-20.
- Studio site.
c162459(Ishai Revach, 2026-05-30, 19 files, +2047/-280). Recovered lost cosmetic-surgery session work: Geist typography sitewide; edge-to-edge divider removal; dark/light theme toggle replacing 5-swatch picker + search bar removal; Figma logo + nav redesign in sidebar; paper background; removed section-number markers; homepage gallery-cards section moved first after KPI, milestone cards added; deduped double escapeRegex/daysBetween/loadActiveGalleryItems block in vault.ts; fixed duplicate gallery grid above title on homepage. Root cause of original loss: edits were uncommitted in working tree and silently overwritten. Fix: commit after every session.
personal/stakeholder-comms.md:
- Lior Finkelman: active in #cosmo-support (2026-05-30, revision-age clarification to Sergey). No direct Ishai DM found in window. Last ingest flagged him as active on Quota Manager. Status: in-flight, no action needed.
- Yuval Balak: active in #cosmo-support (2026-05-29, approved Apollo image-vision ticket). No Ishai DM in window.
- Sergey Bukhman: active (revision-age question in #cosmo-support 2026-05-30; attended Cosmos & Cosmo meeting 2026-05-28). No Ishai DM in window.
- Harel Pick: no signal in window. Last flagged OVERDUE (8+ days, weekly cadence) in 2026-05-20 ingest. Now 11+ days. Still flagged. Run
/comms Harel. - Tatiana Iudina: declined the 2026-05-28 Cosmos & Cosmo meeting. No other signal. Last flagged OVERDUE in 2026-05-20 ingest. Run
/comms Tatiana. - Gali Pruzansky: no signal in window. Last flagged DUE in 2026-05-20 ingest. Now 11 days since that flag. Run
/comms Gali.
- Harel Pick: OVERDUE (11+ days, weekly cadence). Suggested send window: today (Sunday). Run
/comms Harel. - Tatiana Iudina: OVERDUE (11+ days, weekly cadence). Declined last team meeting. Run
/comms Tatiana. - Gali Pruzansky: DUE (11 days since last flag, 2-3x/week cadence). Run
/comms Gali.
Decisions / rules
- Cosmo V2 / Manage Quotas. Revision-age (R1 label) and Status Age (header) are intentionally two different values, not a bug. Lior Finkelman confirmed to Sergey in #cosmo-support 2026-05-30. See
vault/08-Design-specs/manage-quotas-modal.md. - Studio site. After any cosmetic-surgery session, commit before ending. Uncommitted working-tree edits can be silently overwritten. Rule applies to all
sites/studio/work.
mon · 2026-05-25
# 2026-05-25 (Mon)
Done
Cosmo (DS - chip CSS promoted to components.css)
- Moved all 13
.applied-filters-chip*CSS rule blocks verbatim fromscreens/components/topbar.cssintodesign-system/components.css(new labeled section at bottom). Tombstone comment left in topbar.css. Cache-busters bumped to?v=2026-05-25-chip-promotedondesign-system/index.html,cosmo-lab/weekly-v1.html,cosmo-lab/pg-v1.html,cosmo-lab/settings-v1.html. Chip now styled in DS showcase without topbar.css dependency. Backups:design-system/versions/components-2026-05-25-pre-chip-promote.css,screens/components/versions/topbar-2026-05-25-pre-chip-promote.css.
Cosmo (DS - topbar button migration to .fbtn)
- Migrated all topbar buttons in cosmo-lab/weekly-v1.html (3 icon + 2 pill) and cosmo-lab/pg-v1.html (5 icon + 3 pill) to canonical DS
.fbtnfamily. Icon buttons:.fbtn.fbtn--subtle.fbtn--icon-only. Pill buttons:.fbtn.fbtn--secondarywith.fbtn-chev. Dot indicator.topbar-icon-btn-dotrenamed.fbtn-dotand promoted todesign-system/components.cssunder.fbtn--icon-only.is-active. Legacy.topbar-icon-btn,.topbar-icon-btn-dot,.topbar-pill-btnrule blocks deleted fromscreens/components/topbar.css(tombstone comments left). Cache-busters bumped. CHANGELOG updated. Backups incosmo-lab/versions/andscreens/components/versions/.
Cosmo (DS - Applied Filters chip extraction)
- Extracted Applied Filters chip from inline markup in 4 consumers into shared component
cosmo-design/screens/components/applied-filters-chip.js. API:mountAppliedFiltersChip(containerSel, { getCount, getRemovables, onClearAll })returns{ update, destroy }. Revert icon swapped fromrotate-ccwtox. Consumers: cosmo-lab/weekly-v1.html, cosmo-lab/pg-v1.html, clean-lab/weekly.html, clean-lab/deliver.html. DS showcase entry added to design-system/index.html with 0/1/3 filter demos. Removed:_buildSelectedFiltersConfig,_selectedFiltersCtrl,_mountPgAppliedFiltersChipfrom all pages. CHANGELOG updated.
Cosmo (continued)
- Ingested Elad Werber / Ishai meeting (2026-05-25 11:45 IDT). Meeting note file:
vault/06-Meeting-notes/2026-05-25-elad-werber-ishai-pg-walkthrough.md. Key findings: (1) "Ready to Send" canonical definition confirmed (passed PG review, built clean). (2) Revision time-in-process is killer signal (25+ days). (3) Top 5 per-status criteria vary by status (Ready to Send, Pending Customer, Revisions each need distinct logic). (4) Save filters + save views are real needs (planned future). (5) Game onboarding pain point identified as NP-5 (NEW), unreviewed UX flow from Monday/CRM trigger to Cosmo allocation. Added to SUB-012 enrichment section + Problem catalogue as P69 (Medium severity). - Ingested Yuval Arbel braindump (2026-05-25 ~13:16 IDT, no Notion recording). Meeting note file:
vault/06-Meeting-notes/2026-05-25-yuval-arbel-pg-feedback-braindump.md. Key findings: (1) Launchpad has zero value to PGs (2-source pattern with Elad). (2) Ready to Send is primary work area (reconfirms). (3) Side-by-side preview pattern: playable + artifacts + concept in one screen, history/feedback secondary. (4) Ideation should stay in Cosmo, redesigned around per-game counts, bulk-request, inline editing. (5) CONTRADICTION FLAGGED: Elad says move ideation to Atlas, Yuval Arbel says keep in Cosmo. Needs reconciliation. Added to SUB-012 enrichment section + Action Items for design-team sync.
Cosmo
- Applied Omer Barzel meeting findings (2026-05-24) to
vault/08-Design-specs/playable-lifecycle-pg-share-draft.md: rev 2. Status flow now canonical (Waiting for Your Review → approve → Build → Ready to Send → send → Pending Customer → Completed). Stage 5 explicit Waiting-for-Your-Review status (does not exist in Cosmo today, only Apollo). Stage 6 Build placement moved (between approval + Ready to Send, 5 min to 2 hr). Stage 7 lane names corrected to PG Deliver vocabulary. SLA semantics added (timer starts at request entry, not work start). Dispatch view Top-5 vs Show-All raised. Atlas → Apollo reference flow gap added. Morph table Status row updated. - Published Confluence page: "Playable Lifecycle , end-to-end (review draft rev 2)" to UX space (id 791511125). URL: https://sett-ai.atlassian.net/wiki/spaces/UX/pages/791511125. Per Ishai explicit "publish to Confluence" trigger. Curated, Ishai-authored doc. Parent auto-attached to UX space root.
- Published Confluence page: "PG Jobs to be Done (review draft)" to UX space (id 792100865). URL: https://sett-ai.atlassian.net/wiki/spaces/UX/pages/792100865. Curated PG-facing version of
vault/11-Subjects/SUB-012-pg-jtbd-draft.md. Stripped P-numbers, status_key meta, source list. 27 JTBDs + 4 new pain points + coverage scorecard + 5 review prompts at end. - Archived
cosmo-lab/workshop-v1.htmlto_archive/. Removed live references from lab-shell (already clean), settings-v1 (nav item lines 2513-2516), panel-milestones.js (prompt example), milestones-_.json (M1 pages array), nav-panel.css (comment), nav-panel.js (usage example), mock-loader.js (consumer comment). - DS website section header unification. All 19 component/pattern sections in
cosmo-design/design-system/index.html+ 4 sections infoundations.htmlmigrated to a single unified header pattern: Row 1 = eyebrow (left) + Design/Code toggle (right) in.section-headflex row; Row 2 = title; Row 3 = single plain-English description (no Figma node, source path, or class dump in chrome). Body = Design pane (visual showcase) and Code pane (flat class-ref table + HTML snippet +.ds-code-metafor Figma/source + optional variant matrix). Toggle added only to sections with code content (foundations swatches/scales = chrome-only, no toggle). 5 variants found in survey collapsed to 1. Eyebrows renumbered: Variant A took Components · 01-06 (fbtn, ftoggle, fgrid, fnav, fstatus, ftag); inputs renumbered 03→07, icons renumbered 07→08; Patterns numbering preserved with gaps; menu added as Patterns · 26. CSS scaffolding incomponents.css(.section-head,.ds-code-snippet,.ds-code-meta,.ds-variant-matrix,.comp-tab-pane[data-tab="code"] .ds-class-refflatten rules). JS toggle handler extended to resolvedata-scope="X"togetElementById("X-tabs")with fallback to legacyclosest('.comp-tab-section'). Inline duplicate of.section-headCSS (introduced during Variant A migration) removed from index.htmlblock. Backups created indesign-system/versions/for every step. Spec atcosmo-design/design-system/_unify-sections-spec.md. - pg-v1.html Wave B menu migration. Migrated 3 bespoke
.pg-dropdownmenus (Sort, Group by, Timeframe) tomountMenuvia_mountControlMenus()+ config builders_buildSortConfig,_buildGroupByConfig,_buildTimeframeConfig. Wired PG card kebab (data-action="menu") toopenPgKebabMenu()with Demo 1 action list (Download ZIP, Report A Bug / Fix section: Rename Zip & Files, Remove HTML Zips, Mark as Sent, Fix Slack link, Rebuild, Rebuild without Analytics). Filter trigger (filter-panel.js) and people-picker verified untouched. Column manager popover left bespoke (checkbox + up/down reorder; out of mountMenu scope). Backup atcosmo-lab/versions/pg-v1-2026-05-25-pre-menu-migration.html. - weekly-v1.html full menu migration to mountMenu. Migrated all 7 bespoke topbar/context menus: (1) game filter -
_gameFilterCtrl+_buildGameFilterConfig(), search + check + counts; (2) all-filters panel -_allFiltersCtrl+_buildAllFiltersConfig(), 5-section search + check + counts + per-section clear; (3) config/view-options -_configMenuCtrl+_buildConfigMenuConfig(), switch list; (4) team picker -_teamPickerCtrl+_buildTeamPickerConfig(), radioHeader + check list; (5) week selector -_weekMenuCtrl+_buildWeekMenuConfig(), plain list closeOn item-select; (6) applied-filters chip -_selectedFiltersCtrl+_buildSelectedFiltersConfig(), removable items with onRemove + is-open class sync; (7) context menu -_ctxMenuCtrlself-mounts on right-click via invisible anchor. AddedinitMenus()called frominit()IIFE. Removed all bespoke DOM builders, click-outside listeners,closeOtherTopbarMenusreal impl, and triggeronclickattrs. Backup atcosmo-lab/versions/weekly-v1-2026-05-25-pre-menu-migration.html. - Menu behavior contract baked into menu.js + DS showcase migrated to mountStaticMenu + cache-buster sweep. Triggered by pg-v1.html regressions reported at 12:31 IDT (pink-tint selected row, menus don't close, filter overflows viewport, columns popover transparent, game picker still bespoke). Root cause: pg-v1.html loaded stale CSS (
2026-05-24-sla-removed) while menu.js was fresh, AND DS showcase index.html hand-rolled staticmarkup that diverged silently from mountMenu's runtimeoutput. Fixes: (a) menu.js mountMenu now owns: outside-click dismiss, trigger re-click toggle, ESC dismiss with focus return, max-height min(70vh,600px) + sticky search/buttons + internal scroll, viewport collision (clamp left + flip above when no room below + recompute on resize), single-vs-multi-select close-on-pick (radio/plain/removable close on pick, check/switch stay open, item.keepOpen/closeOnPick override), light focus-trap (focus first item on open, Tab/Shift+Tab cycles, ESC returns focus to trigger). Behaviors documented as JSDoc contract on mountMenu. Opt-outs:noOutsideClick,noEsc,noFocusTrap. (b) Hardcoded#ffdbc0selected-row background removed from.menu-item--selectedin components.css; selected state now conveyed only via.check/.checkboxprimitives. (c)mountStaticMenuexported; DS showcase id="menu" section's 6 demos migrated from static markup to mountStaticMenu calls so showcase consumes the same runtime as prototypes. (d)screens/cache-buster.jscreated +data-dsbustattribute pattern applied to DS asset tags across cosmo-lab consumers (pg-v1, weekly-v1, settings-v1, design-system/index, foundations, archive); per-page explicit?v=strings bumped to2026-05-25-menu-behavior-contractsincepreload-scan precedes any script-side rewrite (build-step solution deferred). Known issue logged: Demo 6 onRemove won't fire in showcase (items lackid; pre-existing limitation). Backups: versions/menu-2026-05-25-pre-behavior-contract.js, versions/components-2026-05-25-pre-menu-selected-bg-removed.css, versions/index-2026-05-25-pre-menu-showcase-mount.html.- menu.js outside-click fix. Changed
e.target !== triggerto!trigger.contains(e.target)in_attachOutsidehandler (line 491). Bug: clicking an SVG/icon child inside the trigger button sete.targetto the inner node, which is not=== trigger, so the handler treated the trigger click as an outside click and closed the menu immediately. Fix makes the check descendant-aware.setTimeoutdefer was already in place. Backup:screens/components/versions/menu-2026-05-25-pre-outside-click-fix.js. Cache-buster bumped to2026-05-25-menu-outside-click-fixinweekly-v1.html,pg-v1.html, anddesign-system/index.html.- mountPeoplePicker now delegates to mountMenu (Demo 4 preset + check pattern). Public API preserved byte-compatible.
people-picker.jsinternals rewritten to callmountMenuwithradioHeader(My Games / All Games preset buttons) +type:'check'items section. Old bespoke popover DOM + custom CSS removed. My Games picker checkboxes now use canonical.checkboxprimitive from menu.js. Backup atscreens/components/versions/people-picker-2026-05-25-pre-menu-swap.js. Cache-buster bumped to2026-05-25-people-picker-via-mountmenuinpg-v1.html. Clean-lab synced.- pg-v1.html Pattern A + B topbar parity with weekly-v1.html. Added Applied Filters chip + revert button + filter-button dot indicator to PG Deliver. Markup:
#pg-applied-filters-chip(outer wrapper,hiddenby default),#pg-applied-filters-revert(rotate-ccw icon),#pg-selected-filters-trigger(count + label + chevron). CSS: loadstopbar.css(shared),#pg-applied-filters-chip[hidden]guard. JS:_pgActiveFilterCount(),updatePgAppliedFiltersChip(),_buildPgSelectedFiltersConfig()(removable items fromv.multiFilters),renderPgSelectedFiltersMenu(),_mountPgAppliedFiltersChip()(mounts via mountMenu, wires is-open class patch, wires revert button). Called frominit().syncControlsToView()now callsupdatePgAppliedFiltersChip()+renderPgSelectedFiltersMenu(). Pattern B:#pg-mygames-btnmigrated fromfbtn fbtn--secondarytotopbar-pill-btnwithtopbar-pill-btn-icon/label/chevchildren. Reused classes:applied-filters-chip,applied-filters-chip-revert,applied-filters-chip-body,applied-filters-chip-count,applied-filters-chip-label,applied-filters-chip-chev,topbar-icon-btn-dot,topbar-pill-btn,topbar-pill-btn-icon,topbar-pill-btn-label,topbar-pill-btn-chev. Backup:cosmo-lab/versions/pg-v1-2026-05-25-pre-applied-filters.html. Clean-lab synced (clean-lab/deliver.html).- Column manager popover migrated to mountMenu (multi-select check items). Drag-to-reorder dropped (will be redesigned later).
openGlobalColumnsPopover,closeGlobalColPopover, their 3 document event listeners (outside-click, change, reorder up/down buttons), and all.pg-dropdown/.pg-gcol-rowDOM generation removed frompg-v1.htmlandclean-lab/deliver.html. Replaced with_buildColumnsConfig()config builder (type: 'check', one item perCOLUMN_REGISTRYentry,onClicktogglesGLOBAL_COLUMNSand calls_pgColumnsMenu.update()to re-sync afterrender()).window._pgColumnsMenu = mountMenu('#pg-columns-btn', _buildColumnsConfig())added to_mountControlMenus().COLUMN_REGISTRYandGLOBAL_COLUMNSstate shape unchanged.fixed: truecolumns (Name) handled by early-return guard inonClick; menu.js does not natively supportdisableditem rendering (flagged). Cache-buster bumped to2026-05-25-columns-mountmenuinpg-v1.html. Backup atcosmo-lab/versions/pg-v1-2026-05-25-pre-columns-migration.html.- pg-v1.html + clean-lab/deliver.html row action hover regression fixed. Root cause:
LANE_PRIMARYmap included aclsfield (fbtn--primary/fbtn--success) that was interpolated directly into the button class list at render time (line 1793 pg-v1 / line 1781 deliver.html), making every Send/Approve button permanently orange or green regardless of row hover state. Fix: (1) RemovedclsfromLANE_PRIMARYentries. (2) Button now renders asfbtn fbtn--subtle fbtn--icon-only pg-row-actionalways, plusdata-lane="attribute. (3) Added CSS rules gating filled color on" .fgrid-row:hover .pg-row-action[data-lane="ready|review"](accent orange) and[data-lane="pending"](green-500). Ghost action reveal on hover was already working correctly. Backup:cosmo-lab/versions/pg-v1-2026-05-25-pre-row-action-hover.html.- people-picker.js rewritten with simple selected-array state model. Old
{ mode, includePgs }shape replaced with{ selected: string[] }. State = plain Set of checked PG names, no mode flag. Each checkbox is independent. "My Games" preset =selected: [meName]. "All Games" preset =selected: [all names]. Preset active indicators derived from selected array (no separate flag). meName treated as a plain row (no special label, count shown if any). Filter logic in both consumers changed frommode==='mine'/'all'/'custom'branches to a single size-comparison gate. getState/setState callbacks updated incosmo-lab/pg-v1.htmlandclean-lab/deliver.htmlwith one-time migration shim for any stale localStorage with old shape. clean-lab/screens/components/people-picker.js synced. Backups:screens/components/versions/people-picker-2026-05-25-pre-simple-state.js,cosmo-lab/versions/pg-v1-2026-05-25-pre-picker-rewrite.html. Cache-buster bumped to2026-05-25-simple-stateinpg-v1.html.Cosmo (DS - native checkbox and radio showcase variants dropped)
- Dropped native
anddemo blocks from the DS showcase. Removed 3 native checkbox rows from "Select & checkboxes" subsection (renamed to "Select"), deleted the standalone native "Checkbox" subsection and standalone "Radio" subsection entirely. Updated button-based Checkbox subsection description to call out Figma source 843:67104 and canonicalrendering. Replaced native code snippet with button-based canonical example. Updated.checkbox-rowandbutton.checkboxclass-reference table rows. No changes tocomponents.css(rules already correct for button targets). Backup:design-system/versions/index-2026-05-25-pre-native-checkbox-drop.html.
Decisions / rules
- PG-facing Confluence docs strip internal vault refs (P-numbers, SUB-NNN, status_key, vault paths). Replace with plain-English verdicts (works / friction / no path). PGs don't have access to vault catalogue, internal refs become noise.
- "Partner" is canonical Sett vernacular for Sett's customer. NOT "customer" or "client" in new prose. Added Partner entry to
vault/98-References/Glossary.mdEntities section. Memory locked infeedback_partner_vernacular.md. Existing Cosmo UI status labels like "Waiting for Customer" need deliberate swap , flagged for future review. - Core Playables added to Concepts to Develop in
vault/00-Action-Items.md. Undefined entity used as input source for ideas; vault has no definition of what makes a playable "core", who creates them, lifecycle, or whether they enter Cosmo. Promoted to vault exploration topic. - Published Confluence "Cosmo V2 MVP , what changed (short spec)" (id 792494082). URL: https://sett-ai.atlassian.net/wiki/spaces/UX/pages/792494082. Synthesized from
vault/08-Design-specs/cosmo-v2-mvp.md(PRD last updated 2026-05-03). 10 headline before/after changes + roles table + out-of-scope + success bar. May be stale on: PG-approval-vs-build-complete detach trigger, PG review surface placement, partner vernacular. Flag for cross-check vs Omer 2026-05-24 corrections. - JTBD Confluence page (id 792100865) → v5. Reorganized around the 10-stage playable pipeline. Scope clarified: only PG playable work in Cosmo (NOT video / partner mgmt / commercial). Stage 2 corrected: V1 MVP auto-attaches 2 ideas per quota, auditors no longer pull from a pool. PG review staged-rollout note (representation first, full interface later). Customer → Partner global swap. JTBD-SEND-1 multi-channel constraint sourced to Elad Werber.
- PG = Partnership Growth (canonical, role name JUST that). NOT "Publishing Game Manager", NOT "Partnership Growth Manager", NOT "Producer", NOT "Game Owner". Glossary at
vault/98-References/Glossary.md:25is source of truth (updated to explicitly flag "Partnership Growth Manager" as incorrect historical usage). Fixed in:vault/11-Subjects/SUB-012-pg-jtbd-draft.md(frontmatter title + H1),vault/02-Users/PGs.md(role field),vault/02-Users/Jobs-to-be-Done.md(H2 header),vault/09-Notes/consolidated-findings.md(role table),vault/10-Open-Questions/PG.md(resolved-note),cosmo-design/screens/glossary.html(PG entry). Confluence JTBD page id 792100865 went v1 → v2 (Publishing Game Manager fix) → v3 (drop "Manager" suffix). Memory locked. - Component edits live in the component, never in consumers (HARD RULE). Locked in
.claude/rules/cosmo-design-system.md. Any change to.menu,.checkbox,.check,.switch,.ftag,.fbtn,.fnav,.ftoggle,.fstatus,.fgrid,.entity-card,.mq-dialog,.nav-item, or any primitive shown in the DS showcase goes ONLY incosmo-design/design-system/components.css(visual) +cosmo-design/screens/components/(behavior). Consumer pages (pg-v1, weekly-v1, settings-v1, design-system/index, foundations) NEVER hardcode component CSS inline, NEVER hand-roll component DOM when a mount factory exists, NEVER monkey-patch component behavior. Variants live as modifier classes (.js .menu--), not inline overrides. When showcase and consumers diverge, the consumer is wrong (cache, missing import, wrong mount call), not a reason to fork. Trigger event: 2026-05-25 DS showcase hand-rolled static menu markup that diverged from mountMenu runtime; pg-v1 broke silently while showcase looked fine. /impeccableBANNED on Ishai-built components. Extension of 2026-05-24 ban. No autonomous design choices on any component Ishai authored (from Figma or otherwise). No padding tweaks, no radius nudges, no color shifts, no hover-state invention, no "polish"./impeccableallowed ONLY on DS website chrome (page shell, sidenav, hero, doc-page layout, copy hierarchy) and on non-component product UI work. Component primitives are LOCKED at Ishai's Figma-source spec. Locked in.claude/rules/cosmo-design-system.md.- PG filter button red-accent bug fixed. Root cause:
.fbtn.is-activeCSS rule (pg-v1.html line 130) made the whole filter button go accent-orange when filters applied. Fix: removed.fbtn.is-activerule, replaced with.fbtn.has-filters .topbar-icon-btn-dot { display: block; }. JS changed fromclassList.toggle('is-active', ...)toclassList.toggle('has-filters', ...). Thetopbar-icon-btn-dotspan was already present in markup; now it shows as a small 8px red dot (from topbar.css) instead of lighting up the full button. Applied topg-v1.htmlandclean-lab/deliver.html. - PG Deliver game-filter added (mirrors Weekly exactly). Added
#pg-game-filter-triggericon button (gamepad-2,.topbar-icon-btn,.topbar-icon-btn-dot) to PG action bar between#pg-filter-btnand#pg-columns-btn. JS:pgGameFilterSet,pgGameMenuSearchstring,getAllPgGameNames(),countForPgGame(),_pgGameFilterCtrl,_buildPgGameFilterConfig()(search + check + counts + per-section Clear),renderPgGameFilterMenu(),togglePgGameInFilter(),clearPgGameFilter(),updatePgGameFilterTrigger(). Mounted via_mountControlMenus()._pgActiveFilterCount()updated to includepgGameFilter.size._buildPgSelectedFiltersConfig()extended with Games section (rendered first, removable items, per-item onRemove deletes from Set + triggers dot + chip sync).applyPipeline()filters bypgGameFilterafter multiFilters step.syncControlsToView()callsupdatePgGameFilterTrigger(). Revert button clearspgGameFilterin addition tomultiFilters. Applied to bothcosmo-lab/pg-v1.htmlandclean-lab/deliver.html. Cache-buster bumped to2026-05-25-game-filterinpg-v1.html. Backup:cosmo-lab/versions/pg-v1-2026-05-25-pre-game-filter.html. - Applied Filters chip moved to end of PG action bar. Was positioned between Sort and Filter buttons. Moved to after My Games picker (last item in action bar). Applied to
pg-v1.htmlandclean-lab/deliver.html. - "N Selected" summary pill removed from filter popover. The
_isSummaryblock infilter-panel.jsthat injected "N Selected / Clear all" as the first section in the filter panel menu was removed entirely. No config flag needed - the applied-filters chip at the top level replaces this pattern everywhere. Empty-state guard updated fromsections.length === 1 && sections[0]._isSummarytosections.length === 0. Applied toscreens/components/filter-panel.jsandclean-lab/screens/components/filter-panel.js. The.menu-selected-pillCSS class remains incomponents.cssanddesign-system/index.htmlshowcase as a standalone DS primitive. - Cache-buster: filter-panel.js bumped to
2026-05-25-no-summary-pillinpg-v1.html. Backup:cosmo-lab/versions/pg-v1-2026-05-25-pre-filter-btn-fixes.html. - PG Deliver topbar converted to Weekly's exact pattern. Search / Sort / Filter / Columns icon buttons in PG action bar changed from
.fbtn fbtn--subtle fbtn--icon-onlyto.topbar-icon-btn(matches Weekly's class). Filter button dot indicator now works correctly via.topbar-icon-btn-dotsince the dot CSS intopbar.cssonly targets.topbar-icon-btnparents. Applied Filters chip repositioned to sit FIRST in the action bar cluster (before icon buttons), mirroring Weekly's order. Applied topg-v1.htmlandclean-lab/deliver.html. Backup:cosmo-lab/versions/pg-v1-2026-05-25-pre-weekly-parity.html.
- menu.js outside-click fix. Changed
sun · 2026-05-24
# 2026-05-24 (Sun)
Done
Cosmo
[T:stage-filter]PG Deliver: renamed "Lane (default)" label to "Stage (default)" in group-by dropdown (data keylaneunchanged). Added "Status" group-by option (groups byp.status, title-cases kebab keys). Replaced old tier/partner filter popover with sharedmountFilterPanelcomponent. MigratedtierFilter/partnerFilterview fields tomultiFilters: {}.DATA_VERSIONbumped to2026-05-24-stage-filter.- Created
cosmo-design/screens/components/filter-panel.js- sharedmountFilterPanel(triggerSelector, options)component. Popover with search, cross-filter counts, Clear/Clear-all, click-outside dismiss. Idempotent. Consumed by both pg-v1.html and weekly-v1.html. - weekly-v1.html: added
filter-panel.jsscript tag;mountWeeklyFilterPanel()bridges weekly's internalallFiltersSets to shared panel via getFilters/setFilters adapters.renderAllFiltersPanel+toggleAllFiltersdelegate to shared panel when mounted, fall back to inline render before mount completes. Cache-busters bumped to2026-05-24-stage-filteron tokens.css, components.css, dropdown.css. - Backup:
cosmo-design/cosmo-lab/versions/weekly-v1-pre-shared-filter.htmlcreated before refactor. - Synthesized playable lifecycle end-to-end draft for PG review: 8 stages (Demand, Ideation, Assignment, Production, CP review at 4.5, Internal review, Build, Delivery, Revision loop). 7-row morph table across entity name / surface / owner / status / what attaches / outside-Cosmo status. 7 open questions for PGs to resolve. Saved to
vault/08-Design-specs/playable-lifecycle-pg-share-draft.md. NOT published. Ishai will copy + post to Confluence UX space himself. - Created Slack canvas "PG lifecycle questions (draft)" in Ishai's private canvas space. URL: https://sett-ai.slack.com/docs/T0479T54LUF/F0B5WME2A0Z. Mirror of local draft at
vault/06-Meeting-notes/2026-05-24-pg-lifecycle-questions-slack-draft.md. Per Ishai explicit "do it now" trigger. Private to Ishai until he shares. [T:mygames-button]PG Deliver: My Games trigger swapped from.fbtn--subtleto.fbtn--secondaryper user direction. Weekly My Team trigger left alone (alreadytopbar-pill-btn, was correct).[T:popover-clip]PG Deliver:cosmo-design/screens/components/people-picker.jspopover repositioner. Switched.pp-popoverfromposition: absolutetoposition: fixed.repositionPopover()clamps left to[8, vw-w-8], flips above on bottom overflow. Runs on open + resize. Addedmax-height: calc(100vh - 32px) + overflow-y: auto.[T:panel-empty-btn]PG Deliver: Removed two empty icon-only buttons from side panel render. line 2022 (renderEventslot=play, hollow circle next to "Play version"), line 2084 (renderFeedbackContentBlockslot=comment-and-play, external-link next to "Preview"). Neither had wired handlers.[T:groupby-none-flat]PG Deliver: When groupBy=none,renderLaneearly-returns bare.fgridw/ column titles + rows. No section wrapper, no lane header, no group icon. Matches single-filter visual (Ready/Review/Pending).- Mock data
[T:db-fill-120]:cosmo-design/mock-data/playables.jsonexpanded PLY 3172-3194 (23 records). Total 120 records, max id 3194. 32 revisions (27%). Lane counts: ready 40, review 53, pending 27. 27 of 37 games now 3-6 playables. - Cache-buster sweep:
2026-05-24-mygames-history-groupto2026-05-24-mygames-button-fixto2026-05-24-panel-empty-btn-removedto2026-05-24-groupby-none-flatover the session. - Backups created in
cosmo-design/cosmo-lab/versions/: pg-v1-2026-05-24-mygames-button-fix.html, pg-v1-2026-05-24-panel-empty-btn-removed.html, pg-v1-2026-05-24-groupby-none-flat.html.
Decisions / rules
- Lifecycle doc is treated as a curated, Ishai-authored spec, NOT a raw meeting share. No disclaimer block. Once PGs comment + we converge, corrections propagate back to:
vault/04-Concepts/Playable-lifecycle.md,Playable-Schema.md,Glossary.md,Internal-vs-client-revisions.md. - "Air" and "Patch" RETIRED from the lexicon. Not canonical surface or concept names. Only existed as legacy HTML prototype filenames (
cosmo-design/screens/prototypes/air.html,patch.html). Going forward, do not refer to "Air" or "Patch" as surfaces, lanes, or concepts in any vault doc, spec, or PG-facing artifact. Legacy file paths incosmo-design/screens/prototypes/stay as-is (file artifacts, not lexicon). Removed fromplayable-lifecycle-pg-share-draft.md.
wed · 2026-05-20
# 2026-05-20 (Tue)
Done
Infrastructure / Claude Code
- Created
sett-staleness-check.shSessionStart hook (initially at~/.claude/hooks/, moved to.claude/hooks/inside workspace so it lives in git). Updated path in~/.claude/settings.json. Hook checks: TODAY.md staleness, STATE.md staleness (>3 days), daily ingest missed. Injects mandatory instructions before first response. - Added daily ingest check to hook: compares
_daily-ingest-summary.mdlast-modified date against today; injects/daily-ingestinstruction if not run today. - Added
## Same-file queue rule (HARD RULE)toCLAUDE.mdorchestrator section. Cross-reference added to.claude/rules/cosmo-v2-frontend.mdline ~88. - Added B/C/D story nudge rule to Nudge Engine section in
CLAUDE.md: surface 1 untouched B/C/D story item per session boot.
Research / Vault
- Created
vault/11-Subjects/SUB-012-pg-jtbd-draft.md: 27 PG JTBDs (23 verified, 4 needs-validation). 74% unmet today. Sources: vault users/problems/meeting notes across 8 files. Notion Elad Werber/Eynat notes not yet pulled. - Created
vault/11-Subjects/SUB-010-vault-quality-knowledge-base.md: vault quality problem + passive correction propagation + active audit vision + long-term company knowledge base concept. - Created
vault/11-Subjects/SUB-011-story-tiers-a-b-c-d.md: A/B/C/D story framework - named priority tiers for parallel work tracks, Nudge Engine integration spec.
PG JTBD
- Restructured
SUB-012-pg-jtbd-draft.mdto v2 format: Job/Today/Verdict/Problems per JTBD. Added "Today" workflow descriptions from enrichment research. 4 new pain points (NP-1 through NP-4). JTBD-27 promoted to partial confirm. JTBD-08 quantified at 20-30 min/event. JTBD-11 tagged post-MVP. 9 JTBDs still need direct PG interview for "Today" sections.
Cosmo PG Deliver page rebuild (2026-05-21)
- Figma
cqKJIS6Gva26rGKJuMGtvanode628:943recon: full metadata pulled via subagent (1094 nodes), design_context fetched for filter pill row (628:2149), action bar (628:2185), lane header (628:1054), column titles (628:1072), playable row (628:1085), playable name cell (628:1086), detail panel header (630:3509), tab bar (630:3606), history timeline (633:3572extracted via subagent into/tmp/pg-deliver-history-spec.md). - Token mapping: every Figma var matches Cosmo lab DS tokens (
--ink,--accent,--bg-panel,--bg-raised,--bg-sunken,--cream-200,--line, plus--ink-soft,--ink-muted,--accent-wash). No new tokens needed. - Wrote spec:
vault/08-Design-specs/pg-deliver.md. - Backed up old pg-v1.html to
versions/pg-v1-2026-05-21-pre-figma-rewrite.html. - Rewrote pg-v1.html from scratch (~1000 lines). Filter pill row (Dispatch / Ready / Review / Pending / Revisions, active state), action bar (search, gamepad, list-filter, sort, columns, settings + Group by / This Month / My games dropdowns), 3 lanes (Ready to send / Waiting for review / Pending customer) with collapse, infographic with total + R/V/C chips, column titles strip (Name 428 / Age 84 / Built 84 / Tier 68 / Tags 84 / PG 137 / Auditor 133 / Partner / SLA / Cosmo / Apollo flex), playable row with name cell (avatar + stacked name/game + hover send-horizontal action), tier chips (T1/T2/T3/VIP), tag icon chips, avatars with initials, SLA cell with alarm-clock + accent text, Cosmo/Apollo link cells with external-link icon. Right detail panel (434px, slide-in): header card (title 20px + age + status pill + game + meta row with tier+effort+assignee), close button, tab bar (History/Feedback/Details), History tab with 14 timeline events (dot variants build/neutral/pg/tl/accent, event icons hammer/brush-cleaning/hourglass, status pills green/amber/red/pg/tl/blue/grey, content slots: Comment Internal text block / Play version button / Idea card). Feedback + Details = empty-state stubs.
- Interactions: row click opens panel, panel close button + tab switch, lane collapse, filter pill active swap.
- Bug fix: standalone (
?nolab=1) view rendered blank because.pg-mainlacked explicitgrid-column:2; grid-row:2and got auto-placed into the 68px rail column. Added explicit grid placement +body.in-laboverride. - Verified in Playwright at
localhost:8765/cosmo-lab/lab-shell.html?p=pg-v1. All 3 lanes render, row click opens detail panel with History timeline, no console errors.
Cosmo Lab nav cleanup (2026-05-21)
- Removed Workshop from work section (no longer relevant).
- Changed Deliver icon to
rocketper Figma. - Edits applied in BOTH
lab-shell.html(lines 393-413, ALLOWED whitelist line 459) ANDscreens/components/nav-panel.js(WORK array). - Bumped
nav-panel.js?v=2026-05-21-1cache-buster in all 3 consumers (pg-v1, weekly-v1, workshop-v1). - Memory locked:
cosmo_lab_nav_dual_source.md, lab-shell.html owns visible nav, nav-panel.js only visible standalone. Edit both on every nav change.
Cosmo (prior session work - 2026-05-19)
- Built Sergey's Cosmo V2 dev-presentation for 2026-05-20 10:00 IDT. Script at
personal/sergey-cosmo-v2-dev-presentation.md. HTML deck atcosmo-design/screens/explorations/cosmo-v2-dev-presentation.html(25 slides, keyboard-nav, Cosmo DS tokens).
Deferred
- Notion search for Elad Werber/Eynat interview notes (for SUB-012 completeness) - deferred, vault had prior sweep.
- Delete remote "daily-ingest" duplicate routine in Routines panel - user to action manually.
Decisions / rules
- sett-staleness-check.sh lives in workspace git, not global ~/.claude/hooks/. Rationale: project-specific logic belongs in project repo; portable across machines via git clone.
- SessionStart hook now auto-triggers /daily-ingest instruction if
_daily-ingest-summary.mdwasn't modified today. First session of each morning = sweep before briefing. - Same-file queue rule locked. Orchestrator checks agent-in-progress on target file before dispatching. Queues second agent with "Queued for
" message. - B/C/D story nudge locked. Each session boot surfaces 1 B/C/D item untouched 5+ days, labeled
[B-story nudge].
Cosmo DS (this session)
- Three-way token audit (Figma vs lab DS vs prod DS). 7 critical conflicts found (saturated hex overrides clobbering oklch semantic slots in lab DS). Results in
cosmo-design/screens/explorations/token-audit.html. - Created shared DS navigation sidebar:
cosmo-design/screens/explorations/ds-nav.js. Injected into token-audit.html + color-system.html. - Created color system spec page:
cosmo-design/screens/explorations/color-system.html. Three-tier architecture, all 15 chip pairs, five chip taxonomy axes, four open decisions. - Created vault doc:
vault/11-Subjects/SUB-013-color-token-system.md. Canonical spec for the three-tier color architecture, chip taxonomy, migration plan, and open decisions D1-D4. - Key finding: Figma PG Operation page has zero variables, all colors hardcoded hex. Must set up Figma variable collections before any token enforcement is possible in Figma.
Daily ingest (12:36)
Window: 2026-05-07 17:30 -> 2026-05-20 12:36 Asia/Jerusalem (13 days) Sources scanned:- Notion: 7 meeting notes fetched (2026-05-11 to 2026-05-19), 2 additional pages found via search
- Slack: 8 channels searched + 6 DMs checked, ~40 messages with project signal
- Gmail: tool failed (cloud environment, no gws CLI) - skipped
- Google Calendar: tool failed (cloud environment) - skipped
- Atlassian Confluence: 15 UX space pages in window; Jira returned 404 - skipped
- Git: 8 commits in window (sett-ux + cosmo-prod), 0 merged PRs in window
- Drive / Gemini summaries: no gws CLI, skipped
- Comms gap: stakeholder-comms.md present, 6 primary-tier stakeholders checked
- Cosmo V2 / Quota:
committed_target+assigned_countare now canonical field names for quota model (Confluence 765296641 + Notion 2026-05-11). Seevault/08-Design-specs/manage-quotas-modal.md. - Cosmo V2 / Backlog: "My team" / ownership scoping bug confirmed - backlog shows all teams' tasks. Ishai acknowledged to Daria 2026-05-20. Fix pending.
- Cosmo V2 / PG surface: Apollo-in-Cosmo cross-system status explicitly scoped out of V2 MVP per Sergey + Harel 2026-05-13.
- Cosmo V2 / Video: video workflow stays on Monday.com for now, out of V2 scope (Notion 2026-05-13, Sergey + Harel).
- Fix backlog ownership scoping bug (all teams visible, should be scoped to current user's team) - from Daria DM 2026-05-20.
- Follow up on AB-026 (Elad Werber intro meeting, target was 2026-05-10, appears missed).
- Add 3 new problems to Problem catalogue: "my-team filter breaks ownership scoping," "rollover opacity," "resource-to-quota misalignment invisible mid-week."
- Cosmo V2 quota model: rollover mechanic now documented (tasks not shipped in prior week auto-carry). PGs cannot see rollover count in current UI.
- Manage-quotas spec rev 2: all 5 Sergey inline comments resolved (Confluence 765296641). Backend contract for
assigned_countfield = AB-112 (Lior Finkelman). - Insufficient-ideas threshold confirmed:
ideas_count < 2 * quota_target= amber AlertCircle + drag block. - Cosmo V2 live since 2026-05-11 per Notion "New Quota System & Cosmo 2 Launch" meeting note.
- 2026-05-11 "New Quota System & Cosmo 2 Launch" (Harel + Sergey + PGs) - rich quota + rollover signal, captured in enrichment doc
- 2026-05-11 "Cosmo Workflow System Discussion" - daily shipping loop described, JTBD 2 + 3 confirmed
- 2026-05-12 "Product Workflow Improvements Discussion" - revision triage pain, 20-30 min/event cost quantified
- 2026-05-13 "Weekly Quota Planning Workflow Discussion" - JTBD 6 confirmed + edge case (non-standard months)
- 2026-05-13 "Product Development Sync Meeting" - Sergey + Harel scope discussion
- 2026-05-14 "Design Review Meeting" - quota dialog reactions
- 2026-05-19 (Cosmo V2 dev presentation) - architecture + V2 scope
vault/11-Subjects/SUB-012-pg-jtbd-enrichment-notes.md for extracted PG signal.
PG enrichment pass (secondary objective):
- Written:
vault/11-Subjects/SUB-012-pg-jtbd-enrichment-notes.md - 27 JTBDs mapped to new evidence
- 4 new pain points identified (NP-1 through NP-4)
- 6 JTBDs with new workflow evidence: 1, 2, 3, 4, 5, 6, 8, 10, 11, 14, 17, 19, 20, 23
- Key finds: 20-30 min revision routing cost (JTBD 8); rollover opacity (new); resource-to-quota misalignment (new); JTBD 11 explicitly scoped post-MVP
- Gmail: tool unavailable in cloud environment. No email signal captured.
- Google Calendar: tool unavailable in cloud environment. No meeting event signal captured.
- Workspace: same-file queue rule + B/C/D nudge rule added to CLAUDE.md (
ba743ef, 2 files) - Workspace: queue rule + B/C/D story framework + PG JTBD draft created (
7998717, 3 vault files) - Workspace: spec-drift-check Stop hook fix (
b5578d5, 1 file) - Workspace: WIP content snapshot 2026-05-20 (
3d7a37f, multiple files) - Workspace: workshop-quotas-list merge (
24ba63a) - Design/vault: Cosmo V2 dev-presentation built (HTML deck + script, 2 files)
- Design/vault: 3 SUB-NNN subject files created (SUB-010, SUB-011, SUB-012)
- Infrastructure: sett-staleness-check.sh hook created + wired
- Harel Pick: OVERDUE. Last Ishai DM = 2026-05-12 (8 days). Cadence = weekly. AB-016 (intro meeting) still open. Run
/comms Harel. - Tatiana Iudina: OVERDUE. Last Ishai DM = 2026-05-12 (8 days). Weekly check-in cadence since V2 launch week (2026-05-11). Run
/comms Tatiana. - Gali Pruzansky: DUE. Last Ishai DM = 2026-05-17 (3 days). Cadence 2-3x/week. Run
/comms Gali.
tue · 2026-05-19
# 2026-05-19
Done
Cosmo
- Built Sergey's Cosmo V2 dev-presentation package for 2026-05-20 10:00 IDT, 45 min, audience = Sett dev team (Leor Finkelman + team).
personal/sergey-cosmo-v2-dev-presentation.md (gitignored). 25-slide breakdown, six-question arc (What V2 is → Why → For whom → How it helps them → How it helps the business → What we're shipping). Each slide block has 2-3 subhead variants + 2-3 body variants + verbatim quote + talking-point prompts + visual suggestion + timing target. Includes appendices: full quote bank with attribution, number bank, likely-Q&A cheat sheet, Google Slides paste-translation guide.
- HTML keyboard-navigable deck at cosmo-design/screens/explorations/cosmo-v2-dev-presentation.html. 25 slides, full-viewport, arrow-key / spacebar / 1-9 / Home / End / F nav, hash routing (#slide-N), progress bar + counter, help overlay (?). Cosmo DS tokens (cream/ink/orange/green via oklch), Barlow + Red Hat Text + Rubik. Inline Sett + Cosmo SVG logos. Layouts: cover / section / player card (six) / quote / lens-table / stat-hero / two-up then-now / pipeline / vertical chain / ship-card grids / closing.
- Tone calibration per Ishai redirects: situation-first (not pain-first), respectful about V1 ("right for the era it was built for"), honest about today's friction with user voices, growth-forward not blame-forward, no prototype-praise quotes (only pain-signal and stated-need quotes).
- /impeccable skill invoked for design direction: register brand-leaning, restrained color strategy, theme light (cream surface, projection-friendly), anti-AI-slop guardrails (no side-stripes, no gradient text, no glassmorphism, no hero-metric template, no identical card grids, no em-dashes/en-dashes).
- Verified via Playwright at localhost:8765: token compliance pass (Red Hat Text + Barlow + oklch tokens compute), 25 slides indexed, slide 1 cover / slide 7 TL player card / slide 13 lens table / slide 20 stat hero all render correctly. Fixed one layout issue mid-build (slide 20 stat-unit wrap).
- No matching surface spec in vault/08-Design-specs/ since this is a one-off communication artifact (dev presentation for a specific meeting), not a product surface in the Cosmo IA. Activity log entry IS the canonical record.
Decisions / rules
- Cosmo V2 dev-presentation arc locked: six questions (What / Why / For whom / How for them / How for business / What shipping) → 25 slides → 45 min. Sergey picks variants per slide and pastes into his slide tool. HTML deck companion at
localhost:8765/screens/explorations/cosmo-v2-dev-presentation.htmlfor live presenting. - Tone rule for V2 framing in stakeholder comms going forward: honest about pain (users' voice on what's bothering them, what they need), respectful about prior work (V1 served its era), growth-forward (state the improvement, not the failure). Drop prototype-praise quotes from external-facing decks — they read as marketing, weaken signal.
mon · 2026-05-18
# 2026-05-18
Done
Cosmo
- Applied 5 fixes to
weekly-v1.htmlexploration + CSS components:
weekly-v1.html): Added dropdown-menu--right to #selected-filters-menu so Applied Filters dropdown right-aligns under chip.
- Fix 2 (topbar.css): Config menu row hover replaced with full-bleed --accent-wash orange wash; removed any outline/box-shadow on hover/focus. Focus-visible also uses same wash.
- Fix 3 (topbar.css): Switch scaled to 2/3 size. Track: 28x16px. Thumb: 12x12px. Checked offset: left: 14px. Border-radius: 999px.
- Fix 4 (weekly-v1.html): New useStatsAsFilters configState key + "Stats clicks act as filters" config toggle. When ON, stats pill clicks add to statsAsFilter Set; buildLane renders all cards but applies .card--filter-disabled (opacity 0.35, pointer-events none, grayscale 0.4) to non-matching. collapseEmptyColumns uses active-only card count. passesStatsFilter + matchesAnyStatsFilter helpers added. stats-area.css gains .card--filter-disabled rule.
- Fix 5 (stats-area.css, weekly-v1.html): Stats area typography: hero number weight 700; type/status pills wrap count in .stats-pill-num (bold) and label in .stats-pill-label (regular); last-mile .stats-pill-count already bold; prefix weight changed to 400.
- Fix 6 (weekly-v1.html): Logo resized to 107x28px (Figma spec). #topbar-center gets padding-left: 40px to enforce the 40px gap from logo right-edge to stats area left-edge (Figma: logo at x=25 width=107, stats at x=172).
- Fix 7 (weekly-v1.html): Backlog empty state (.qb-empty) now fills available flex space with flex: 1 and centers content both axes via justify-content: center. Parent .qb-body was already flex-column so the fix is purely on the empty state rule.
- Spec vault/08-Design-specs/weekly-board.md Recent decisions updated.
- Backups: versions/weekly-v1-2026-05-18-pre-4-fixes.html, versions/weekly-v1-2026-05-18-stats-typography.html, versions/stats-area-2026-05-18-stats-typography.css.
- Applied 4 more fixes to
weekly-v1.html,topbar.css,dropdown.css(bug pass 2026-05-18 morning):
weekly-v1.html): Stats-as-filter toggle now works. togglePillHighlight filter branch calls renderBacklog() in addition to renderLanes() so backlog cards also get .card--filter-disabled. Added .card--filter-disabled CSS rule (opacity 0.35, pointer-events none, grayscale 0.4) to page-level styles (was missing, class was applied in JS but had no visual effect).
- Bug 2 (topbar.css): Collapsed lane drop target now glows full-width. Added .kanban-lane.lane--collapsed .kl-body.drop-zone rule with background: var(--accent-wash) and :has() rule to glow the full lane wrapper including header.
- Fix 3 (dropdown.css, weekly-v1.html): Summary row in All Filters + Games dropdowns is now a peach-tinted pill per Figma 557:161. CSS updated (background rgba(207,63,0,0.1), 8px radius, 12px margin, no border). JS markup updated: "N Selected" (capital S), "Clear all" + lucide X icon. lucide.createIcons() added at end of both render functions.
- Fix 4 (topbar.css, weekly-v1.html): Applied Filters chip border and divider removed. Idle state is borderless peach wash. Hover darkens to 0.16 opacity. Open state uses 0.22 opacity. is-open class toggled in toggleSelectedFiltersMenu and cleared in closeOtherTopbarMenus.
- Backup: versions/weekly-v1-2026-05-18-stats-filter-collapsed-drop.html.
weekly-v1.html: moved summary pill ("X Selected / Clear all") below search bar in bothrenderGameFilterMenuandrenderAllFiltersPanel. DOM order is now: search row, summary pill, sections. Backup:versions/weekly-v1-2026-05-18-summary-below-search.html.topbar.css: open-lane drag-over now colors the ENTIRE column orange-wash. Added:has(.kl-body.drop-zone)rule on.kanban-lane:not(.lane--collapsed)for background + inset shadow, with transparent overrides on.kl-head,.kl-cap-row,.kl-bodyso the parent wash shows through. Mirrors existing collapsed-lane:has()pattern. Backup:versions/topbar-2026-05-18-full-column-drop.css.- Applied 4 fixes to
weekly-v1.html+stats-area.css(bug pass 3, stats-filter mode + config menu):
weekly-v1.html): Stats-filter pill counts now reflect the post-filter visible set. visibleForCounts = visible.filter(passesStatsFilter) when filter mode has active selections; total number, V/R counts, status counts, and last-mile sums all use this set so counts read "0 Not Started" etc. when those cards are filtered out.
- Fix 2 (weekly-v1.html, stats-area.css): Zero-count pills in filter mode now render with .stats-pill--filter-disabled (opacity 0.4, pointer-events not disabled so they remain clickable for OR-filter semantics). Added hover opacity 0.7. Pills still show their zero count so user knows they exist.
- Fix 3 (weekly-v1.html): Config menu now stays open when user clicks a switch toggle. Root cause: renderConfigMenu() rebuilds innerHTML, detaching the clicked button from DOM; e.target.closest('#config-wrap') then returns null on the detached node, triggering the click-outside close handler. Fix: event.stopPropagation() on switch onclick prevents the event reaching the document listener.
- Fix 4 (stats-area.css): Stats pill color modifiers replaced hardcoded hex with design-system tokens (--green-100/700, --amber-100/600, --blue-100/700, --purple-100/700, --indigo-100/700, --status-not-started-bg/fg). Dark mode now works automatically via existing token overrides in tokens.css.
- Backup: versions/weekly-v1-2026-05-18-stats-filter-counts.html.
- Spec vault/08-Design-specs/weekly-board.md Recent decisions updated.
weekly-v1.html: behavior unification - stats pills in filter mode now route into nativeallFiltersSets. Type/status pills equivalent to All Filters dropdown checkboxes; Applied Filters chip count updates; R pill toggles R1+R2 as a pair. TL/PG last-mile pills stay onstatsAsFilter.passesStatsFilternow lastmile-only;clearAllFiltersGlobalclearsstatsAsFiltertoo.renderStatsAreareads active state fromallFiltersfor type/status pills. Backup:versions/weekly-v1-2026-05-18-stats-into-native-filters.html. Specvault/08-Design-specs/weekly-board.mdupdated.weekly-v1.html+dropdown.css: removed disable-not-hide hybrid; fixed dropdown zero-count visibility. (1).card--filter-disabledCSS rule removed;buildLanenow pre-filtersplayablesarray in filter mode so non-matching cards never enter the DOM;renderBacklogskips non-passing cards at all 4 call sites;activePlayablesvariable eliminated (capacity/collapse use the already-filteredplayablesarray directly). Highlight mode unchanged. (2)getFilterStatusOptionsnow returns full canonical 6-status list instead of team-scoped seen-set, so all statuses always appear in All Filters dropdown. (3)getCountBasehelper added;countForFilterOptionrewritten to use cross-filter base with per-group gates so counts reflect the filtered board.countForGamesimilarly updated. (4) Zero-count unchecked rows get.is-disabledclass (opacity 0.45) in bothrenderAllFiltersPanelandrenderGameFilterMenu..is-disabledrule added todropdown.css. Backup:versions/weekly-v1-2026-05-18-remove-disable-hybrid.html.weekly-v1.html: fixed stats-as-filter card-disable regression in backlog. Root cause:buildBacklogCardnever applied.card--filter-disabled; all three backlog group modes (game/auditor/priority) appended cards with no filter check. Fixed by callingpassesStatsFilter(p)at each of the 4 call sites and adding the class when it returns false. Lane filtering was already correct. Backup:versions/weekly-v1-2026-05-18-stats-filter-regression-fix.html.- Side rail extracted to shared component. New
cosmo-design/screens/components/nav-panel.{css,js}mount-pattern component. Canonical markup lifted fromweekly-v1.html(Work + Observe sections plus bottom-anchored Theme + Settings + Avatar). Bothweekly-v1.htmlandworkshop-v1.htmlnow load the shared CSS + JS and replace their inlineblock with+mountNavPanel({ active, user }). Workshop's.nav-item.activelocal override (--accent-soft/--accent-dark) and its topbar theme-toggle + avatar removed (rail now owns them, matching Weekly). InlinetoggleRail/cycleTheme/updateRailIcon/updateThemeIcondeleted from both pages (now defined once onwindowbynav-panel.js). Anti-flicker on cross-page nav:bootstrap readslocalStorage['cosmo-rail-collapsed']intowindow.__settRailCollapsed; body-open inline script appliesbody.rail-collapsed+body.nav-no-animbefore the rail paints;mountNavPanelstripsnav-no-animafter two animation frames so user-triggered toggles still animate. Persistence keys:cosmo-rail-collapsed('1'|'0', default '1' = collapsed),cosmo-theme('light'|'dark'|'wireframe', default 'light'). Backups:versions/weekly-v1-2026-05-18-pre-nav-extract.html,versions/workshop-v1-2026-05-18-pre-nav-extract.html. Specsweekly-board.md+workshop-quotas-list.mdRecent decisions updated.