feat(highcharts): implement swarm-basic#5696
Conversation
…5727) ## Summary Knocks out 8 of the 10 Quick Wins surfaced by `/audit` on 2026-05-05 — every change is small-effort, low-risk, and either fixes a verified CI break or addresses a high-importance finding. - **Critical (CI red)**: `yarn install` restored the missing `react-force-graph-2d` install; `yarn type-check` now passes (was 7 errors). Lint failure (32 errors) is intentionally not fixed in this PR — those need human triage of `react-hooks/set-state-in-effect` violations. - **High**: fire-and-forget `asyncio.create_task` in `api/analytics.py` could be GC'd mid-flight; now held in module-level `_BACKGROUND_TASKS` set with a discard callback. - **Codemod**: added `UP007`/`UP045` to ruff lint, ran `--fix` → 64 `Optional[X]` → `X | None` modernizations across `api/`, `core/`, `automation/`, `agentic/`, `alembic/versions/`, `tests/`. Both `ruff check .` and `ruff format --check .` are green. - **Docs/hygiene**: `CLAUDE.md` Serena tools now use canonical `mcp__serena__*` prefix; `agentic-auditor.md` no longer references nonexistent `agentic/scripts/`; `docs/development.md` Node 18+ → 20+; deleted `temp/tac/` (foreign CLAUDE.md from unrelated repo, gitignored). - **Audit artifacts**: persisted `agentic/audits/2026-05-05-all.md` + refreshed `latest.md` (full Phase-3 synthesis from 15 specialist auditors). CodeQL alert #101 (clear-text storage of sensitive data, false-positive on `plots/radar-basic/implementations/python/highcharts.py:126`) is dismissed separately via `gh api PATCH` — not part of this code diff. The remaining Quick Wins from the audit (Cloud SQL auth-network purge, Secret Manager rotation policies, Stuck PR #5696 re-trigger) are GCP/GitHub admin actions and don't belong in a code PR. ## Test plan - [x] `uv run ruff check .` → All checks passed - [x] `uv run ruff format --check .` → 134 files already formatted - [x] `cd app && yarn type-check` → no errors (was 7) - [ ] CI: Run Linting / Run Tests / Run Frontend Tests (waiting on PR pipeline) - [ ] Verify Plausible og:image events still fire after analytics.py refactor (manual check on a deployed revision) 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
AI Review - Attempt 1/3Image Description
Score: 86/100
Visual Quality (28/30)
Design Excellence (12/20)
Spec Compliance (15/15)
Data Quality (15/15)
Code Quality (10/10)
Library Mastery (6/10)
Score Caps Applied
Strengths
Weaknesses
Issues Found
AI Feedback for Next Attempt
Verdict: REJECTED |
🔧 Repair Attempt 1/4Applied fixes based on AI review feedback. Status: Repair completed, re-triggering review... |
AI Review - Attempt 2/3Image Description
Score: 88/100
Visual Quality (28/30)
Design Excellence (15/20)
Spec Compliance (15/15)
Data Quality (15/15)
Code Quality (9/10)
Library Mastery (7/10)
Score Caps Applied
Strengths
Weaknesses
Issues Found
AI Feedback for Next Attempt
Verdict: APPROVED |
…view (#5819) ## Summary Two minimal resilience patches for the dominant transient failures observed in the daily-regen audit (2026-05-06): 1. **`impl-review.yml` — \"Extract PR info\" step** (5 failures in 24h). Wrap `gh pr view` in a 3-attempt retry with exponential backoff. When the GitHub API blips, the entire review job aborts and the PR ends up unlabeled — blocking the review → repair → merge cascade. Concretely caused 4 of the 14 stuck PRs we recovered today (#5696, #5789, #5796, #5801 had no labels at all because review never made it past step 1). 2. **`impl-generate.yml` — \"Create library metadata file\" step** (6 failures in 24h). Wrap the final `git push origin \"\$BRANCH\"` in a 3-attempt retry that does `fetch + rebase` between attempts. The dominant failure mode is racing against Claude's earlier push to the same branch — when the metadata commit hits a non-fast-forward, the whole generation aborts and the PR never opens. Both fixes are inline bash retries — no new action dependency. Each step still hard-fails after 3 attempts so persistent issues still surface (we don't want to mask real bugs). ## Out of scope (deferred) - **`daily-regen.yml` \"pick\" job clean exit**: the existing logic already writes `count=0` when no specs are eligible, and downstream is gated on `if: needs.pick.outputs.count != '0'`. The 2 reported \"cancellations\" in the audit period look unrelated to the pick step itself (likely scheduler-level events). - **Auto-retry on `ai-review-failed`**: would require a more invasive `if: failure()` job-level step. Holding until we see whether the Extract-PR-info retry alone reduces the rate enough. ## Context This branch is the Stage 5 follow-up to today's recovery work, which manually shepherded 13 of 14 stuck PRs through the review/repair/merge pipeline. The full investigation + recovery plan lives at \`/home/tirao/.claude/plans/bitte-schaue-dir-alle-peppy-bunny.md\` (local). ## Test plan - [x] YAML-validate both edited workflows (passes) - [x] No-op for the happy path: first attempt of each retry preserves existing behavior exactly - [ ] CI green on this PR - [ ] Post-merge: watch the next 24h of impl-generate / impl-review run conclusions; expect failure rate to drop from ~10% to near 0% on these two steps 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Implementation:
swarm-basic- python/highchartsImplements the python/highcharts version of
swarm-basic.File:
plots/swarm-basic/implementations/python/highcharts.pyParent Issue: #974
🤖 impl-generate workflow