v4.8.0 Crystal · Four C Framework lands + Formation Board drag-drop perfected
Two tracks converged this cycle. The Formation Board — the primary game mechanic — got ten visible and invisible fixes that make drag-and-drop feel as snappy as a native app. And the Four C Framework (Community, Career, Cause, Compensation) moved from heuristic-only to fully persistent, with self-report APIs and Sheets mirrors.
Shipped · Game Loop Improvements- Drag-leave flicker fixed.
SlotZonenow uses adragCounterref; child-boundary crossings inside the slot are ignored, eliminating the strobe effect when the cursor moved over text or empty cells. - Custom drag image.
handleDragStartrenders a dark 160×40 canvas chip with the hero's name and archetype, replacing the browser's low-contrast parchment ghost. - Opacity 0.3 → 0.5 + scale(0.97). Source cards remain visible during drag so users can reference them while aiming.
- Cursor semantics. All draggable wrappers use
cursor: grab;:activeswitches tograbbing. Drawer rows fixed frompointertograb. - Preemptive "Slot full" warning. When
filled.length >= needed, the slot border turns dashed red, the empty cell reads "Slot full / Remove someone first", and the fit tone switches tovar(--rpg-red). - Return-to-Pool strip. A persistent docked strip appears under the project board whenever
dragging !== null, so users never hunt for the pool to unassign. - ARIA drag attributes.
aria-grabbedon pool cards and assigned cards;aria-labelon every drop zone describing fill state. - Dead CSS removed. The unused
.drop-zonerules inglobals.csswere deleted — SlotZone uses inline styles exclusively.
- Migration 032 —
four_pillar_responses,credo_scores,house_score_historytables, plustarget_pillarcolumn onsupport_actions. - POST /api/four-pillars/respond — upserts self-reported Community, Career, Cause, Compensation scores per employee per cycle.
- POST /api/credo/respond — upserts Belonging, Purpose, Transcendence, Story pulse readings.
- Four new Sheets tabs —
FourPillarResponses,CredoScores,HouseScoreHistory,SupportActions— all wired throughsheets-mirror.ts. - GET /api/four-pillars already reads from
four_pillar_responseswhen present; the new POST route makes that code path actually reachable.
- Formation Tab step legend. A 4-step visual indicator sits above the board: 1 Select quest → 2 Drag heroes → 3 Check gates → 4 Lock squad. New users know immediately "this is where you drop people into the group."
- Insights/Signals tab — Four C radar chart for org-wide health.
- Weekly review button — "Raise the bar" summary of what changed this week.
- Touch-device drag support — native HTML5 D&D doesn't fire on iPad; explicit touch handlers or
@dnd-kit/coremigration needed if tablet demo is required.