fix(uat): batch — timeline overshoot, name-sync, reset-password, dashboard cleanup, queue/seed hygiene + alpha UAT findings doc
UAT findings landed across the last few Playwright + React Grab passes; single grouped commit so the index doesn't fragment into 30 one-liners. User & auth: - `user-settings`: name now updates the avatar + topbar menu after save (was reading stale session). - `me/password-reset`: 3 bugs (token validation, error response shape, redirect chain). - Admin user permission-overrides route honours the same envelope as the rest of the admin surface. Dashboard: - Removed obsolete `revenue-breakdown-chart` + `dashboard-widgets-card` (replaced by the customisable widget grid). - Strip `revenue_breakdown` from analytics route + use-analytics + service + integration test so nothing renders an empty card. - Activity log timeline overshoot fix (`interest-timeline` + `entity-activity-feed`). - Tightened tiles: active-deals, berth-heat-widget, pipeline-value, kpi-tile. - `dev-mode-banner`: derive dismissed state synchronously instead of via an effect (set-state-in-effect lint rule). Forms & lists (assorted polish): - client / company / yacht / interest / reminder forms — validation + empty-state copy + tab transitions. - companies/yachts list tweaks; berth recommender panel; qualification checklist; supplemental info request button. Infra & misc: - Queue workers (ai / email / notifications) — log shape + per-job timeout consistency. - Auth / brochures / users schema small adjustments; seeds reflect permissions matrix changes. - Scan shell + scanner manifest + AI admin page small fixes. - `next.config.transpilePackages` adds `echarts`/`zrender`/`echarts-for-react` (recommended config from echarts-for-react inside Next). Docs: - `docs/superpowers/audits/alpha-uat-master.md` — single rolling cross-cutting UAT findings doc (per CLAUDE.md convention). - `docs/BACKLOG.md`: dashboard stats cards (§I) + activity-log normalization (§J). - 2026-05-18 audit log updated with this batch. - `CLAUDE.md` — small manual UAT scaffold notes. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -21,6 +21,9 @@ interface QualificationRow {
|
||||
confirmedBy: string | null;
|
||||
notes: string | null;
|
||||
autoSatisfied: boolean;
|
||||
/** Human-readable explanation of what data drove auto-satisfaction
|
||||
* (e.g. "Desired: 60 × 25 × 6 ft"). Empty when not auto-satisfied. */
|
||||
evidence: string;
|
||||
}
|
||||
|
||||
interface QualificationResponse {
|
||||
@@ -104,9 +107,20 @@ export function QualificationChecklist({
|
||||
)}
|
||||
</div>
|
||||
|
||||
<ul className="space-y-2">
|
||||
<ul className="space-y-1.5">
|
||||
{criteria.map((c) => (
|
||||
<li key={c.key} className="flex items-start gap-2.5">
|
||||
<li
|
||||
key={c.key}
|
||||
className={cn(
|
||||
'flex items-start gap-2.5 rounded-md px-2 py-1.5 transition-colors',
|
||||
// Unconfirmed rows get a subtle amber accent (left border +
|
||||
// tinted background) so reps can scan the checklist and
|
||||
// immediately see what's outstanding. Confirmed rows stay
|
||||
// muted with line-through; auto-satisfied rows are functionally
|
||||
// confirmed and follow the confirmed styling.
|
||||
!c.confirmed && 'border-l-2 border-warning bg-warning-bg/40',
|
||||
)}
|
||||
>
|
||||
<Checkbox
|
||||
id={`qual-${c.key}`}
|
||||
checked={c.confirmed}
|
||||
@@ -125,7 +139,7 @@ export function QualificationChecklist({
|
||||
className={cn(
|
||||
'flex-1 text-sm',
|
||||
c.autoSatisfied ? 'cursor-default' : 'cursor-pointer',
|
||||
c.confirmed ? 'text-foreground' : 'text-foreground/90',
|
||||
c.confirmed ? 'text-muted-foreground' : 'text-foreground',
|
||||
)}
|
||||
>
|
||||
<span className="flex flex-wrap items-center gap-1.5">
|
||||
@@ -146,6 +160,11 @@ export function QualificationChecklist({
|
||||
{c.description ? (
|
||||
<p className="mt-0.5 text-xs text-muted-foreground">{c.description}</p>
|
||||
) : null}
|
||||
{c.autoSatisfied && c.evidence ? (
|
||||
<p className="mt-0.5 text-xs font-medium text-emerald-700 dark:text-emerald-300">
|
||||
{c.evidence}
|
||||
</p>
|
||||
) : null}
|
||||
</label>
|
||||
</li>
|
||||
))}
|
||||
|
||||
Reference in New Issue
Block a user