ISSUE
Charts render empty on the production dashboard
A FeedbackFAB report from the live deploy. The issue body was pre-filled by the FAB's diagnostic bundler — stack trace, URL, user agent, and the reproduction steps all arrived in one click.
Dashboard charts render empty in production
URL: https://artemiop.com/inceptor/demos/dashboard/
Browser: Chrome 124, macOS 14.4
Reproduction: Load /demos/dashboard/ — the "Issues by label" bar chart shows axes and category ticks but zero bars. The "Open vs closed" donut shows its legend but no segments. KPI cards load correctly. Reproduction rate: 100%.
Console: No errors. Recharts receives the data (verified via React DevTools) but the entry animation never fires inside an Astro island, leaving all shapes at opacity 0.
PLAN
prometeo decomposes the fix
The orchestrator dispatched prometeo, which read the audit
finding (docs/AUDIT-2026-06.md §3.3),
located the root cause, and produced a dependency-aware plan.
Behavior contracts
- After mounting DashboardIsland, the bar chart must render at least one bar (visible fill) without any scroll or interaction.
- After mounting DashboardIsland, the donut chart must render at least one colored segment.
- No existing chart test may regress.
Root cause
Recharts 3.8 entry animations run via a CSS transition that requires a layout pass. Inside Astro's client:visible islands, the animation never triggers — shapes stay at their initial transform/opacity. Fix: isAnimationActive={false} on every Recharts wrapper.
tdd-tier: strict
Red commit (failing test) must land before the implementation commit. centinela will grep for the Tdd-Red: trailer.
COMMITS
forja implements — red then green
forja branched from main,
wrote the failing test first (red), then the fix. The
Tdd-Red:
trailer in the green commit is machine-readable — centinela greps for it.
test(charts): red for isAnimationActive on all six wrappers (#136)
SHA: 4a9f1c2 · vitest --run → FAIL (isAnimationActive not set)
fix(charts): disable Recharts entry animation in Astro islands (#136)
Add isAnimationActive={false} to bar-chart, donut-chart, area-chart,
line-chart, gauge, sparkline. Sparkline already had the flag — no change.
Tdd-Red: 4a9f1c2
fix(dashboard): Skeleton while loading, friendly empty state (#136)
SHA: 7e3d88a · replaces bare "…" placeholders with Skeleton; no-data state
VERDICT
centinela approves — PR #136 merges
centinela ran npm run build,
npm run check,
npm run test,
and the forbidden-import scan. All passed. The green commit carried
the required Tdd-Red: trailer — TDD gate satisfied.
✓ build: 0 errors, 0 warnings
✓ check: astro check 0 diagnostics
✓ test: 532 passed, 0 failed
✓ forbidden imports: none found
✓ TDD gate: Tdd-Red: 4a9f1c2 → green commit 7e3d88a
Run it yourself
Your repo. Your loop.
Every fork ships the same three sub-agents, the same governance substrate, and the same FeedbackFAB. File an issue — the loop starts itself.
npm create inceptor-app