AICharts is live at https://aicharts.yolopreneur.lol/ (health and schema pass), but the real model's specs failed validation on agg. This adds normalizeSpec (case + aliases like mean→avg, aggregate→agg, groupBy→by; never invents fields or ops), returns model_said on a 422 so failures are diagnosable, and makes the smoke step fail on a bad spec.
AICharts is live at https://aicharts.yolopreneur.lol/ (health and schema pass), but the real model's specs failed validation on agg. This adds `normalizeSpec` (case + aliases like mean→avg, aggregate→agg, groupBy→by; never invents fields or ops), returns `model_said` on a 422 so failures are diagnosable, and makes the smoke step fail on a bad spec.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01VDkN7ukK1kXkqov8FaZxva
---
_Generated by [Claude Code](https://claude.ai/code/session_01VDkN7ukK1kXkqov8FaZxva)_
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
AICharts is live at https://aicharts.yolopreneur.lol/ (health and schema pass), but the real model's specs failed validation on agg. This adds
normalizeSpec(case + aliases like mean→avg, aggregate→agg, groupBy→by; never invents fields or ops), returnsmodel_saidon a 422 so failures are diagnosable, and makes the smoke step fail on a bad spec.🤖 Generated with Claude Code
https://claude.ai/code/session_01VDkN7ukK1kXkqov8FaZxva
Generated by Claude Code