Add Claude Code GitHub Workflow#3
Conversation
Pull Request ReviewSummaryThis PR appears to contain empty commits with no actual code changes. The two commits in this PR ( and ) have commit messages suggesting workflow updates, but they don't modify any files. Key Findings🔴 Critical Issues
Recommendations
Questions for the Author
Verdict: This PR contains no changes and should likely be closed. If there were intended changes, please create a new PR with the actual modifications. |
#1089) Fixes #967 ## Summary - Update quality threshold documentation from 85 to 90 - Add CLI retry logic for intermittent failures - Change issue lifecycle: spec-ready issues stay open until all implementations complete ## Changes ### Documentation (Issue Finding #4) Updates quality threshold from 85 to 90 in documentation to match actual workflow configuration in `impl-review.yml`. **Files:** - CLAUDE.md - README.md - docs/workflow.md - docs/concepts/claude-skill-plot-generation.md - prompts/quality-evaluator.md ### CLI Retry Logic (Issue Finding #3) Adds retry mechanism for Claude CLI steps to handle intermittent "Executable not found in $PATH" errors. Each Claude step now has `continue-on-error: true` and a retry step that runs if the first attempt fails. **Files:** - .github/workflows/spec-create.yml - .github/workflows/spec-update.yml - .github/workflows/impl-generate.yml - .github/workflows/impl-repair.yml - .github/workflows/util-claude.yml ### Issue Lifecycle (Bonus) - `spec-ready` issues now stay open until all 9 library implementations are merged - Changed `Closes #...` to `Related to #...` in spec PR body - Added auto-close logic in `impl-merge.yml` when all `impl:{library}:done` labels are present **Files:** - .github/workflows/spec-create.yml - .github/workflows/impl-merge.yml ## Test Plan - [ ] Verify documentation shows correct 90 threshold - [ ] Trigger a workflow and verify retry works on CLI failure - [ ] Create a test spec and verify issue stays open after merge - [ ] Verify issue closes when all 9 libraries have `impl:{library}:done`
- Fix #1: Handle missing remote branches in impl-generate.yml - Check if branch exists before checkout to avoid 'not a commit' errors - Fall back to creating fresh branch from main if remote doesn't exist - Fix #2: Clean up duplicate labels on failure - Remove both 'generate:X' and 'impl:X:pending' when marking as failed - Prevents label accumulation (e.g., both pending and failed) - Fix #3: Auto-close issues when done + failed = 9 - Previously only closed when all 9 were 'done' - Now closes when total (done + failed) reaches 9 - Shows which libraries failed in closing comment - Fix #4: Track generation failures and auto-mark as failed - Count previous failed runs for same spec/library - After 3 failures, mark as 'impl:X:failed' automatically - Posts failure comment explaining the library may not support this plot type
…1308) ## Summary Fixes several workflow issues discovered during batch processing of spec-ready issues. ### Fix #1: Branch-Not-Found Errors **Problem:** `fatal: 'origin/implementation/{spec}/{library}' is not a commit` errors when workflow tries to checkout a non-existent remote branch. **Solution:** Check if remote branch exists before checkout, fall back to creating fresh branch from main. ### Fix #2: Duplicate Labels **Problem:** Issues accumulate both `impl:X:pending` and `impl:X:failed` labels when generation fails. **Solution:** Failure handler removes both `generate:X` and `impl:X:pending` when marking as failed. ### Fix #3: Auto-Close with Failures **Problem:** Issues with 8 done + 1 failed stay OPEN because auto-close only triggers on 9 done. **Solution:** Close when `done + failed = 9`, with appropriate summary (shows which libraries failed). ### Fix #4: Generation Failure Tracking **Problem:** When `impl-generate` fails (no plot.png), no PR is created → no review → no repair → library stays `pending` forever. **Solution:** Track generation failures and mark as `impl:X:failed` after 3 consecutive failures. Posts comment explaining the library may not support this plot type. ## Files Changed - `.github/workflows/impl-generate.yml` - Fixes #1, #2, #4 - `.github/workflows/impl-merge.yml` - Fix #3 ## Testing - YAML syntax validated - Logic reviewed against observed failure patterns
Critical fixes: - Fix TypeError: flatten tag dict to list for repository call (#6) Changed search_by_tags to receive list[str] instead of dict[str, list[str]] Repository expects flat list of tag values, not nested dict - Add missing dataprep and styling parameters (#1, #7) Added to search_specs_by_tags function signature and docstring These categories were documented but not implemented - Add filter logic for dataprep and styling (#2) Implemented filtering checks similar to other impl-level tags Ensures new parameters actually filter results - Update condition to include dataprep and styling (#3) Modified impl-level filtering condition on line 117 Now checks all 6 impl-level tag categories Improvements: - Add database error handling with helpful messages (#8) Check is_db_configured() before all database operations Provides clear error message if DATABASE_URL not set - Update test mocks to match fixed interface (#5) Tests now verify flattened tag list instead of dict Added new test for dataprep/styling filter parameters Mock is_db_configured to return True in test fixture Verification: - All 16 unit tests passing - Ruff linting and formatting applied - No routing conflicts (#4 verified - no /mcp routes in routers) Related: PR #4132, Issue #4129
…5818) ## Summary Five quick-win items from `agentic/audits/latest.md` (2026-05-05): 1. **Frontend lint CI repair** — 32 errors → 0 (audit Critical #1). 2. **`/seo-proxy/map`** — bot prerender for the network map (audit Critical #5 partial). 3. **evaluate-plot.py** — switch to canonical 6-category rubric + bump model default (audit High #2). 4. **plausible.md** — document FCP/TTFB Web-Vitals events (audit High #3). 5. **CodeQL #101** — already user-dismissed 2026-05-05; called out in PR body, no code change. ## Detail ### 1. Lint repair (`yarn lint` 32→0 errors) - `app/eslint.config.js`: added `IdleRequestCallback`, `IdleDeadline`, `IdleCallbackHandle`, `IdleRequestOptions`, `requestIdleCallback`, `cancelIdleCallback`, `FrameRequestCallback`, `IntersectionObserverCallback`, `IntersectionObserverInit`, `IntersectionObserverEntry` to production globals; added Node `global` to test-entry globals. - 5× `react-hooks/set-state-in-effect`: refactored to React 19's "adjust state on prop change" pattern (`if (prev !== current) { setPrev(current); ... }` during render — no cascading re-render): - `RelatedSpecs.tsx` — combined `setExpanded(false)` + `setLoading(true)` resets into a single `prevDeps` guard. - `SpecDetailView.tsx` — interactive size reset on `selectedLibrary` change. - `DebugPage.tsx` — `setLoading(true)/setError(null)` reset on `[adminToken, reloadCounter]` change. - `SpecsListPage.tsx` — random rotation init driven by `Object.keys(rotationIndex).length === 0` guard (reference-compare on `specList` was attempted first but trips an infinite re-render in the test mock, which returns a fresh `specsData` array each call). - 1× `react-hooks/purity`: `Math.random` in `useFeaturedSpecs.ts` extracted into a module-level `pickRandom<T>(items)` helper. - 3× `no-empty`: sessionStorage swallows in `DebugPage.tsx` annotated with a comment. - 1× unused var `implNoPreview` (`SpecOverview.test.tsx`): now used in the test (was a copy-paste oversight). - 1× unused eslint-disable (`MapPage.test.tsx:413`) removed. ### 2. SEO `/map` handler Mirrors the about/palette pattern in `api/routers/seo.py`. Bots now get a real `<title>` (`Network Map | anyplot.ai`) and a meta description. ### 3. evaluate-plot.py modernization - Replace inline 5-category JSON template (Visual Quality 40 / Spec Compliance 25 / Data Quality 20 / Code Quality 10 / Library Features 5) with the canonical 6-category rubric driven by `prompts/quality-evaluator.md` + `prompts/quality-criteria.md` (Visual Quality 30 / Design Excellence 20 / Spec Compliance 15 / Data Quality 15 / Code Quality 10 / Library Mastery 10 = 100). - `print_quality_result` and the `--verbose` loop updated to the new keys + denominators (was reading `library_features` / `vq…/40` etc., now reads `library_mastery` / `vq…/30`). - `core/config.py`: `claude_model` default bumped from `claude-3-5-sonnet-20240620` (18 months old) to `claude-sonnet-4-6`. ### 4. Plausible docs (FCP/TTFB) `docs/reference/plausible.md`: added FCP and TTFB rows to Custom Events table + Implementation Checklist; bumped total client-side events from 28 → 30. >⚠️ **Follow-up needed**: FCP/TTFB are already emitted from `reportWebVitals.ts` but must also be **registered in the Plausible dashboard** as custom events, otherwise they're silently dropped server-side. Documenting them here doesn't make them appear; that's a separate manual step. ### 5. CodeQL #101 — already dismissed `gh api repos/.../code-scanning/alerts/101` shows `state: dismissed` since `2026-05-05T21:38:46Z` (dismissed by @MarkusNeusinger as "false positive — 'private' is a literal field name in a demo radar-chart axis dataset"). Audit was generated on the same day and listed it as still open. **No code change in this PR for this item.** The audit's broader recommendation — "exclude `plots/` from CodeQL scan" — would require switching from default to advanced code-scanning setup (workflow file + `.github/codeql/codeql-config.yml`). Not done here; left as a future hygiene task. ## Test plan - [x] `yarn lint` → 0 errors (2 pre-existing react-refresh warnings unchanged) - [x] `yarn tsc --noEmit` → clean - [x] `yarn test --run` → 466/466 pass - [x] `uv run ruff check api/ core/` → clean - [x] `uv run ruff format --check api/ core/` → clean - [ ] CI green on this PR (will watch) - [ ] Post-merge: register FCP/TTFB in Plausible dashboard 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
🤖 Installing Claude Code GitHub App
This PR adds a GitHub Actions workflow that enables Claude Code integration in our repository.
What is Claude Code?
Claude Code is an AI coding agent that can help with:
How it works
Once this PR is merged, we'll be able to interact with Claude by mentioning @claude in a pull request or issue comment.
Once the workflow is triggered, Claude will analyze the comment and surrounding context, and execute on the request in a GitHub action.
Important Notes
Security
There's more information in the Claude Code action repo.
After merging this PR, let's try mentioning @claude in a comment on any PR to get started!