calm-due-state-and-status

Enforces single-point resolution of six due-state colours, marks, and uncertainty copy in Flutter widgets.

Updated Sep 2, 2026
One-click install
npx skills add https://github.com/zakariaf/Odova --skill calm-due-state-and-status-zakariaf
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: calm-due-state-and-status
Source: https://github.com/zakariaf/Odova/tree/main/.claude/skills/calm-due-state-and-status
Command: npx skills add https://github.com/zakariaf/Odova --skill calm-due-state-and-status-zakariaf

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes scripts (resource) and references (resource) components.

What problem does it solve? Flutter widgets that each switch on a due-state enum to pick their own colour drift out of sync, and uncertainty states end up wearing red or green that the data cannot support. This Skill centralizes all six DueState members behind one CalmStatusStyle resolver so colour, mark, label, and copy stay consistent across both themes. ## Core Features & Use Cases - Single resolution point: All state-to-colour mapping happens in calm_status.dart via CalmStatusStyle.of(context, state); a shell gate fails any widget that switches on DueState or reads a colour slot directly. - Redundant encoding: Every state carries a distinct dot geometry, label, and copy pattern so meaning survives grayscale, since the palette's six hues differ by at most 1.51:1. - Uncertainty handling: The unknown and needsOdometer states use their own warm-grey ramps, fuzzy dates, a tilde-prefixed odometer, and one ICU message instead of borrowing overdue or ok colours. - Use Case: When adding a status badge to a Flutter reminders list, resolve the style through CalmStatusStyle and run scripts/check_status_encoding.sh before the PR to prove no widget bypassed the resolver. ## Quick Start Ask the AI to render a due-status card for a given DueState using CalmStatusStyle and then run the status encoding check script to verify compliance.

Frequently Asked Questions about calm-due-state-and-status

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I render a due-state colour in a Flutter widget?

Call CalmStatusStyle.of(context, state) and read its base, ink, tint, edge, and mark properties. Never switch on DueState or read CalmColors status slots directly in a widget; the check_status_encoding.sh gate fails both patterns.

How should a Flutter app show uncertain or estimated dates?

Render measured dates as fuzzy strings like 'around 22 October' and prefix estimated odometers with a visible tilde inside the number's bidi isolate. At default confidence show no figure at all, only the ICU message 'Odova needs a reading to say when'.

Why does the gate fail when a widget switches on an enum?

Six states times four colours times two themes is 48 values, so two widgets owning separate switches inevitably drift. The gate restricts state-to-colour switches to calm_status.dart, while pure domain code under lib/core may switch without reading colour slots.

Can colour alone distinguish status states for accessibility?

No. In this palette the six state hues differ by at most 1.51:1 in light theme, far below WCAG's 3:1 non-text floor. Each state must also carry a distinct dot shape, a text label, and a copy pattern so meaning survives grayscale.

What is the difference between unknown and needsOdometer states?

Unknown means no anchor ever existed, while needsOdometer means a reading went stale beyond 60 days on the distance axis. They use separate warm-grey colour sets, distinct copy, and neither may borrow the overdue or ok colours.