Coucou - #43
Closed
mariuspruvot wants to merge 14 commits into
Closed
Conversation
* fix(infra): build claude-runner image out-of-band instead of via compose profile
The `claude-runner` image is a runtime dependency (the API spawns containers
from it per session), not a Compose service. A previous attempt shipped it as
a `profiles: [build-only]` service, but Compose excludes profiled services
from both build and run unless the profile is explicitly activated — which
Coolify does not do, causing `404 No such image: claude-runner:latest` when
the API tries to start a session.
Changes:
- Remove `claude-runner` service from infra/coolify/docker-compose.prod.yml
- Fix the Makefile `build-runner` tag (`claude-runner:latest`, no namespace)
- Make `make build` also build the runner
- Document the per-host one-time build in Quick Start, self-hosting guide,
and Coolify guide (with pre-deployment command)
- Update CLAUDE.md decisions and troubleshooting
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* refactor(infra): use build-only service pattern for claude-runner
Switches from "out-of-band make build-runner" (previous commit) to a proper
Compose build-only service:
claude-runner:
build: { context: ./infra/docker/claude-runner }
image: claude-runner:latest
entrypoint: ["/bin/true"]
restart: "no"
The container exits immediately on `docker compose up` (entrypoint is
overridden to `/bin/true`) and is not restarted, so it produces no runtime
overhead — but Compose still builds the image and leaves it tagged
`claude-runner:latest` on the host, ready for the API to spawn session
containers from via the Docker socket.
Benefits over the previous commit:
- `docker compose up --build` is the single command on every host (Coolify,
VPS, local dev, ECS EC2)
- No Coolify pre-deployment command to configure in the UI
- No `make build-runner` step for users
- Rebuilds automatically whenever `infra/docker/claude-runner/` changes
Applied to both the dev `docker-compose.yml` and the prod
`infra/coolify/docker-compose.prod.yml`. `make build-runner` stays as a
convenience shortcut for quick iteration. Docs reverted to the simpler
"just run compose" narrative.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…41) SUPPORTED_LANGS advertised `tsx` and `jsx` as highlightable, but only the `typescript` and `javascript` grammars were loaded into the shiki highlighter. In shiki, `tsx` and `jsx` are separate grammars — not aliases — so `highlighter.codeToHtml(code, { lang: 'tsx' })` threw `ShikiError: Language 'tsx' not found`, which bubbled up through React and blanked the whole conversation renderer on any PR that contained a TSX fenced block (reproduced on prod). Changes: - Import and register `@shikijs/langs/tsx` and `@shikijs/langs/jsx` so the highlighter matches what SUPPORTED_LANGS claims. - Wrap `codeToHtml` in a `safeHighlight` helper that falls back to an escaped `<pre><code>` block on any shiki error, so future drift between SUPPORTED_LANGS and loaded grammars degrades to plaintext instead of crashing the session page. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…#42) * feat: add production smoke test script Verifies health, TLS, frontend, API routes, admin panel, CORS headers, and claude-runner image in a single pass. Exit code = number of failures. * feat(web): implement Direction E design system tokens Replace the existing color palette with the warm dark Direction E theme (#14110e bg, #e2a039 amber accent, #f2ede4 bone text). Swap primary mono font to JetBrains Mono, add grain overlay utility, and overline class. Old token names kept as deprecated aliases for backward compat. * feat(web): add shared component library Reusable UI primitives matching Direction E design spec: Button (primary/secondary/ghost/danger), Card, Chip (status variants), StatCard, TerminalBlock (macOS chrome), GrainOverlay, Overline, Dot. All components use the new design tokens and Tailwind classes. * feat(web): add AppShell layout with topbar and grain overlay Shared layout wrapping all protected routes: 56px sticky topbar (logo, live dot, user avatar, sign out) + max-width centered content + warm grain overlay. Landing and auth callback remain full-bleed. * feat(web): rebuild landing page with Direction E design Complete rewrite using shared components (Card, StatCard, TerminalBlock, GrainOverlay, Overline, Button). New hero headline, example session card, stats strip, and updated copy positioning helPRs as a learning companion. * feat(web): rebuild skill selector with new skills lineup Replace code-review/security-audit (passive, removed from product) with interactive skills: eli5, pair-debug, hot-seat, test-me (all coming soon). Uses shared Card/Chip/Button components with Direction E styling. * feat(api): add scorecard extraction and persistence Add helprs-scorecard JSON block extraction from Claude session output. New scorecard.py module parses the fenced code block, validates structure (3 dimensions, 0-10 range). Scorecard is persisted to container_sessions table after mark_completed. New GET /sessions/{id}/scorecard endpoint. * feat(web): rebuild dashboard with Direction E design Replace inline styles with shared components (Card, Chip, Dot, StatCard, Overline). Add greeting header, stat strip, dashed add-installation card. Remove duplicate topbar (now provided by AppShell). * feat(web): rebuild installation detail and StatusBadge Restyle session history table with Direction E tokens. StatusBadge now uses shared Chip component with semantic variants. Add breadcrumb nav, overline copy, pagination with Button component. * feat(web): restyle setup wizard and settings with Direction E design Apply shared components (Card, Button, Chip, Overline, Dot) and Direction E design tokens to SetupView and SettingsView. Add step indicator, repository access link, and danger zone section. * feat(web): redesign session UI with split layout and scorecard rail Split the session view into a two-column layout: transcript left, right rail (260px) with progress tracker, scorecard display, session meta, and privacy note. Apply Direction E styling to all message blocks (amber border for assistant, ruleStr border for user, // comment ornament for system). Add post-session CTAs and scorecard fetch on completion. * feat: add dashboard activity chart and user stats endpoint Add GET /api/v1/auth/me/stats endpoint returning daily session counts (last 30 days) and status totals across all accessible installations. Add SVG-based ActivityChart component (no external deps). Wire stats into dashboard stat strip and display chart above installation cards. * feat: update challenge-me scoring and add 4 new skills Update challenge-me CLAUDE.md to emit helprs-scorecard JSON block alongside the existing markdown results. Align dimensions to depth/clarity/rigor per the redesign spec. Add 4 new interactive skills: eli5 (explain your code simply), pair-debug (find the injected bug), hot-seat (defend your design), test-me (predict test outcomes). Each skill has config.yaml, CLAUDE.md, and prompt.md per SKILL_SPEC.md. * fix(web): fix QA bugs and align dashboard/detail with R2 mockup Fixes: - Session replay crash: extract nested scorecard from API wrapper - Topbar logo: use React Router Link instead of <a href> - Sign-out: navigate to / before logout to avoid OAuth redirect - SkillSelector: remove nested <button> (use <span> for Run) - Add ErrorBoundary wrapping the entire app Design alignment: - ActivityChart: div-based flex bars matching mockup (3px gap, 120px height, accent color with active highlight, 30-day fill, axis labels) - InstallationList: avatar + 2-column status grid + action buttons - InstallationDetail: completion bar with stacked segments + legend, grid-based session table with proper columns, filter buttons * fix(web): dark background on html/body, full-page session, sticky detail header - Set html/body/#root background to #14110e (no more white on scroll) - Remove AppShell from session replay and live session routes (full page) - Make installation detail header/completion bar sticky with scrollable table * fix(web): only table rows scroll, header and pagination stay fixed Restructure installation detail so the table header row stays sticky at the top, only the data rows scroll, and pagination stays at the bottom outside the scroll area. * feat: add session delete endpoint and UI button Add DELETE /api/v1/containers/sessions/{id} endpoint with access control. CASCADE deletes associated session events. Add delete button (x) on each session row in installation detail, visible on hover. Optimistic removal from the list on click. * fix(web): add delete confirmation modal and fit table to viewport - Add modal with danger styling for session deletion confirmation - Reduce per_page to 10, tighten row/header padding - Fix height calc to account for AppShell padding (120px total) - Smaller filter buttons and completion bar * fix: fix CI failures — lint, test mocks, and updated assertions - test_scorecard.py: fix import block formatting (I001) - test_byok_router.py: rename validate_anthropic_api_key mock to validate_claude_key (function was renamed, test mock wasn't) - ContainerSession: wrap Chip in span for data-testid forwarding - ConversationOutput.test: update text assertions for new // prefix on system messages and empty state
|
helPRs session created for this PR. Skill: |
fix: QA fixes, delete sessions, ARG_MAX runner fix
feat: [PR] branding, rail reorder, full-height table, scorecard parsing
fix: chip sizes, AppShell flex, favicon cache
- AppShell: scrollbar hugs viewport edge (full-width main, centered inner) - InstallationDetail: per-page scales with viewport height (10-40 rows) - Favicon: bold "P" glyph at readable size, cache-bust via ?v=2 - ContainerSession: running uses live dot+label, stop is a real button Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- SettingsView: toggle for post_results_to_pr (calls PUT /post-results) - SkillSelector: back link to installation detail in top-left - ActivityChart: custom styled hover tooltip replacing native title Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- InstallationDetail: top breadcrumb (installations · history) + Settings button - SettingsView: symmetric breadcrumb (installations · history · settings) Makes installation sub-pages navigable without round-tripping through the list. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Button elements default to text-align: center, which was centering the PR title and chips inside their grid cells. Add text-left so content aligns with the header labels and the DURATION/RAN right-aligned columns keep their explicit text-right. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Wrap the bordered table in a flex-1 filler so the box shrinks to its actual row count instead of stretching to fill the viewport. For many rows, max-h-full caps the table at the available space and the inner list scrolls as before. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The self-hosted, OSS nature of the app makes a full marketing landing redundant — the README already covers discovery, and instance visitors just need a way to sign in. Drops ~460 lines of SaaS-style content in favor of a terse mono/accent login screen. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…49) Clarifies the product pitch: "Interactive skills for your pull requests — review, challenge, quiz, powered by Claude Code", so visitors see it as a skills platform, not just a Claude Code wrapper. Adds a blinking terminal cursor after the wordmark, the GitHub logo inside the primary CTA, and an Enter keybind with a keycap hint for keyboard-first users. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.