{"slug":"phx-challenge","title":"phx-challenge","summary":"Challenge mode reviews - rigorous questioning before approving changes.","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-10-04T15:14:24.046744Z","repo":{"url":"https://github.com/oliver-kriska/claude-elixir-phoenix","stars":560,"forks":44,"license":"MIT","updatedAt":"2026-10-02T04:11:38Z"},"bodyHtml":"<hr>\n<h2>name: phx-challenge\ndescription: Challenge mode reviews - rigorous questioning before approving changes.\nUse when you want thorough scrutiny of Ecto changes, LiveView events, OTP designs,\nor PR readiness.</h2>\n<h1>Challenge Mode Reviews</h1>\n<p>Rigorous, critical review patterns inspired by Boris Cherny's \"Grill me\" approach. Push beyond first solutions to ensure quality.</p>\n<h2>Iron Laws - Never Violate These</h2>\n<ol>\n<li><strong>No approval without verification</strong> - Don't approve until all concerns addressed</li>\n<li><strong>Assume bugs exist</strong> - Look for edge cases, race conditions, missing handlers</li>\n<li><strong>Question everything</strong> - Even \"obvious\" code can hide issues</li>\n<li><strong>Demand proof</strong> - Ask for tests, show state transitions, verify behavior</li>\n</ol>\n<h2>Adversarial Lenses (Apply to ALL Modes)</h2>\n<ol>\n<li><strong>\"What Would Break This?\"</strong> — Production failure modes under load, during deploys, with unexpected data</li>\n<li><strong>\"Assumption Stress Test\"</strong> — List every assumption; which are most fragile?</li>\n<li><strong>\"Contradictions Finder\"</strong> — Find contradictions between tests/implementation, docs/behavior, or within the changeset</li>\n</ol>\n<h2>Challenge Modes</h2>\n<h3>Ecto Challenge (<code>phx-challenge ecto</code>)</h3>\n<p>Grill the developer on database changes:</p>\n<p><strong>Migration Safety</strong></p>\n<ul>\n<li>Will this migration lock the table in production?</li>\n<li>What happens to existing records without the new field?</li>\n<li>Is the migration reversible?</li>\n<li>Are there any unsafe operations (column removal, type change)?</li>\n</ul>\n<p><strong>Query Performance</strong></p>\n<ul>\n<li>Have you introduced any N+1 queries?</li>\n<li>Are there missing indexes for new WHERE clauses?</li>\n<li>Will this query scale with data growth?</li>\n</ul>\n<p><strong>Schema Integrity</strong></p>\n<ul>\n<li>Are all constraints enforced at database level?</li>\n<li>What happens during rolling deployment (old code, new schema)?</li>\n<li>Are foreign key cascades correct?</li>\n</ul>\n<p><strong>Backward Compatibility</strong></p>\n<ul>\n<li>Will old code work during deployment?</li>\n<li>Are there any breaking changes to the context API?</li>\n</ul>\n<h3>LiveView Challenge (<code>phx-challenge liveview</code>)</h3>\n<p>Prove the LiveView handles all cases:</p>\n<p><strong>Event Coverage</strong></p>\n<ul>\n<li>List every <code>handle_event</code> clause and expected socket state</li>\n<li>What happens if socket assigns are missing when event fires?</li>\n<li>Are there race conditions between user events and server pushes?</li>\n</ul>\n<p><strong>PubSub Handling</strong></p>\n<ul>\n<li>List every <code>handle_info</code> clause and when it's triggered</li>\n<li>Do all PubSub subscriptions have corresponding handlers?</li>\n<li>What happens if a message arrives before mount completes?</li>\n</ul>\n<p><strong>State Transitions</strong></p>\n<ul>\n<li>Show the event → handler → state transition table</li>\n<li>Are all error states handled gracefully?</li>\n<li>What's the recovery path from each error state?</li>\n</ul>\n<p><strong>Memory &amp; Performance</strong></p>\n<ul>\n<li>Are large lists using streams?</li>\n<li>Is transient data using temporary_assigns?</li>\n<li>What's the memory footprint per connected user?</li>\n</ul>\n<h3>PR Challenge (<code>phx-challenge pr</code>)</h3>\n<p>Senior engineer review checklist:</p>\n<p><strong>Must Pass</strong></p>\n<ul>\n<li><input disabled=\"disabled\" type=\"checkbox\"> No direct Repo calls in controllers/LiveViews</li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> All Ecto queries use explicit preloads</li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> Changesets validate all user input</li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> No atoms created from params</li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> Error cases handled (not just happy path)</li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> Tests cover new functionality</li>\n</ul>\n<p><strong>Performance</strong></p>\n<ul>\n<li><input disabled=\"disabled\" type=\"checkbox\"> No queries in Enum.map loops</li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> LiveView streams for lists &gt; 100 items</li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> Indexes exist for WHERE clause columns</li>\n</ul>\n<p><strong>OTP</strong></p>\n<ul>\n<li><input disabled=\"disabled\" type=\"checkbox\"> GenServers have supervision</li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> Timeouts set for GenServer.call</li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> No unbounded process spawning</li>\n</ul>\n<p><strong>Security</strong></p>\n<ul>\n<li><input disabled=\"disabled\" type=\"checkbox\"> No SQL injection via raw queries</li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> No path traversal in file handling</li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> Authorization checks present</li>\n</ul>\n<h2>Prior Findings Deduplication (MANDATORY)</h2>\n<p>Run this before analysis so consecutive runs don't re-report identical issues.</p>\n<ol>\n<li><strong>Search</strong> <code>.claude/plans/*/reviews/</code> and <code>.claude/reviews/</code> for prior findings</li>\n<li><strong>Read ALL</strong> prior findings before analyzing code</li>\n<li><strong>Check each finding</strong> against priors:\n<ul>\n<li>Fixed → <strong>SKIP</strong> | Still present → <strong>PERSISTENT</strong> (one line) | New → <strong>NEW</strong> (full analysis) | Reintroduced → <strong>REGRESSION</strong></li>\n</ul>\n</li>\n<li><strong>Present</strong>: NEW first (full), then PERSISTENT (one-line), then REGRESSION</li>\n</ol>\n<h2>Example Challenge Output</h2>\n<pre><code>## Challenge: Ecto — Orders Migration\n\n### FINDING 1: Table lock risk (HIGH)\nAddColumn on `orders` (2.1M rows) will lock table during deploy.\n**Proof needed**: Run `SELECT count(*) FROM orders` — if &gt;1M, use\n`ALTER TABLE ... ADD COLUMN ... DEFAULT NULL` (no lock).\n\n### FINDING 2: Missing index (MEDIUM)\nNew `WHERE status = ?` query on line 45 has no index.\n**Action**: Add `create index(:orders, [:status])` to migration.\n\n### Status: BLOCKED — 2 unresolved findings\n</code></pre>\n<h2>Usage</h2>\n<p>Run <code>phx-challenge [mode]</code> to initiate a rigorous review. The reviewer will not approve until all concerns are addressed with evidence.</p>\n<p>Example workflow:</p>\n<ol>\n<li>Run <code>phx-challenge ecto</code> after migration changes</li>\n<li>Answer each question with code references or test results</li>\n<li>Address all concerns before proceeding to PR</li>\n</ol>\n","files":[{"path":"SKILL.md","sizeBytes":4803,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-10-04T15:16:30.094715Z","sha256":"8C66BBBA6E7AADBC9ACDC5F801653166B3AA7A814610F41F9EC326DCEE94DC5A","sizeBytes":2452},"review":null,"source":{"repositoryUrl":"https://github.com/oliver-kriska/claude-elixir-phoenix","path":"targets/amp/skills/phx-challenge","license":"MIT","commit":"9767a82d24ddddad553e85f88efc2869a7fd7d88","subtreeSha":"8BDB866E9C0869D0EDFB6F9D93B8493FD11FC192CFE1034810FEBAB89A0445D9","lastSyncedAt":"2026-10-04T15:14:09.139242Z"},"reviewedAt":"2026-10-04T15:20:17.642329Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/oliver-kriska/claude-elixir-phoenix/tree/main/targets/amp/skills/phx-challenge"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install oliver-kriska-claude-elixir-phoenix@llmmart"},{"target":"git","command":"git clone https://github.com/oliver-kriska/claude-elixir-phoenix.git"}]}