Files
Claude-Code-Workflow/ccw/docs-site/build/assets/js/1e3006f3.9dddfb7c.js
catlog22 c6093ef741 feat: add CLI Command Node and Prompt Node components for orchestrator
- Implemented CliCommandNode component for executing CLI tools with AI models.
- Implemented PromptNode component for constructing AI prompts with context.
- Added styling for mode and tool badges in both components.
- Enhanced user experience with command and argument previews, execution status, and error handling.

test: add comprehensive tests for ask_question tool

- Created direct test for ask_question tool execution.
- Developed end-to-end tests to validate ask_question tool integration with WebSocket and A2UI surfaces.
- Implemented simple and integrated WebSocket tests to ensure proper message handling and surface reception.
- Added tool registration test to verify ask_question tool is correctly registered.

chore: add WebSocket listener and simulation tests

- Added WebSocket listener for A2UI surfaces to facilitate testing.
- Implemented frontend simulation test to validate complete flow from backend to frontend.
- Created various test scripts to ensure robust testing of ask_question tool functionality.
2026-02-03 23:10:36 +08:00

1 line
20 KiB
JavaScript

"use strict";(globalThis.webpackChunkccw_docs=globalThis.webpackChunkccw_docs||[]).push([[975],{171(e,s,i){i.r(s),i.d(s,{assets:()=>d,contentTitle:()=>l,default:()=>h,frontMatter:()=>c,metadata:()=>n,toc:()=>a});const n=JSON.parse('{"id":"commands/issue/issue-discover","title":"issue:discover","description":"Discover potential issues from multiple code analysis perspectives","source":"@site/docs/commands/issue/issue-discover.md","sourceDirName":"commands/issue","slug":"/commands/issue/issue-discover","permalink":"/docs/docs/commands/issue/issue-discover","draft":false,"unlisted":false,"editUrl":"https://github.com/ccw/docs/tree/main/docs/commands/issue/issue-discover.md","tags":[],"version":"current","sidebarPosition":2,"frontMatter":{"title":"issue:discover","sidebar_label":"issue:discover","sidebar_position":2,"description":"Discover potential issues from multiple code analysis perspectives"},"sidebar":"docs","previous":{"title":"issue:new","permalink":"/docs/docs/commands/issue/issue-new"},"next":{"title":"issue:plan","permalink":"/docs/docs/commands/issue/issue-plan"}}');var r=i(2540),t=i(1184);const c={title:"issue:discover",sidebar_label:"issue:discover",sidebar_position:2,description:"Discover potential issues from multiple code analysis perspectives"},l="issue",d={},a=[{value:"Description",id:"description",level:2},{value:"Key Features",id:"key-features",level:3},{value:"Usage",id:"usage",level:2},{value:"Arguments",id:"arguments",level:3},{value:"Perspectives",id:"perspectives",level:2},{value:"Available Analysis Types",id:"available-analysis-types",level:3},{value:"Examples",id:"examples",level:2},{value:"Quick Scan (Recommended)",id:"quick-scan-recommended",level:3},{value:"Security Audit with External Research",id:"security-audit-with-external-research",level:3},{value:"Full Analysis with Auto Mode",id:"full-analysis-with-auto-mode",level:3},{value:"Issue Lifecycle Flow",id:"issue-lifecycle-flow",level:2},{value:"Discovery Output Structure",id:"discovery-output-structure",level:2},{value:"Directory Layout",id:"directory-layout",level:3},{value:"Finding Schema",id:"finding-schema",level:3},{value:"Priority Categories",id:"priority-categories",level:2},{value:"Critical (Automatic Export)",id:"critical-automatic-export",level:3},{value:"High (Recommended Export)",id:"high-recommended-export",level:3},{value:"Medium (Dashboard Review)",id:"medium-dashboard-review",level:3},{value:"Low (Informational)",id:"low-informational",level:3},{value:"Dashboard Integration",id:"dashboard-integration",level:2},{value:"Viewing Discoveries",id:"viewing-discoveries",level:3},{value:"Exporting to Issues",id:"exporting-to-issues",level:3},{value:"Exa External Research",id:"exa-external-research",level:2},{value:"Security Perspective",id:"security-perspective",level:3},{value:"Best-Practices Perspective",id:"best-practices-perspective",level:3},{value:"Related Commands",id:"related-commands",level:2},{value:"Best Practices",id:"best-practices",level:2},{value:"Comparison: Discovery vs Code Review",id:"comparison-discovery-vs-code-review",level:2}];function o(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",mermaid:"mermaid",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsxs)(s.h1,{id:"issue",children:["issue",":discover"]})}),"\n",(0,r.jsx)(s.p,{children:"Multi-perspective issue discovery orchestrator that explores code from different angles to identify potential bugs, UX improvements, test gaps, and other actionable items."}),"\n",(0,r.jsx)(s.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(s.p,{children:["The ",(0,r.jsx)(s.code,{children:"issue:discover"})," command analyzes code from 8 specialized perspectives (bug, UX, test, quality, security, performance, maintainability, best-practices) using parallel CLI agents. It aggregates findings and can export high-priority discoveries as issues."]}),"\n",(0,r.jsx)(s.h3,{id:"key-features",children:"Key Features"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"8 analysis perspectives"}),": Specialized analysis for different concern areas"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Parallel execution"}),": Multiple agents run simultaneously for speed"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"External research"}),": Exa integration for security and best-practices benchmarking"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Dashboard integration"}),": View and filter findings via CCW dashboard"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Smart prioritization"}),": Automated severity scoring and deduplication"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Direct export"}),": Convert findings to issues with one click"]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"usage",children:"Usage"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"# Interactive perspective selection\r\n/issue:discover src/auth/**\r\n\r\n# Specific perspectives\r\n/issue:discover src/payment/** --perspectives=bug,security,test\r\n\r\n# With external research\r\n/issue:discover src/api/** --external\r\n\r\n# Auto mode - all perspectives\r\n/issue:discover src/** --yes\r\n\r\n# Multiple modules\r\n/issue:discover src/auth/**,src/payment/**\n"})}),"\n",(0,r.jsx)(s.h3,{id:"arguments",children:"Arguments"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Argument"}),(0,r.jsx)(s.th,{children:"Required"}),(0,r.jsx)(s.th,{children:"Description"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"path-pattern"})}),(0,r.jsx)(s.td,{children:"Yes"}),(0,r.jsx)(s.td,{children:"Glob pattern for files to analyze"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"--perspectives"})}),(0,r.jsx)(s.td,{children:"No"}),(0,r.jsx)(s.td,{children:"Comma-separated list (default: interactive)"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"--external"})}),(0,r.jsx)(s.td,{children:"No"}),(0,r.jsx)(s.td,{children:"Enable Exa external research"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"-y, --yes"})}),(0,r.jsx)(s.td,{children:"No"}),(0,r.jsx)(s.td,{children:"Auto-select all perspectives"})]})]})]}),"\n",(0,r.jsx)(s.h2,{id:"perspectives",children:"Perspectives"}),"\n",(0,r.jsx)(s.h3,{id:"available-analysis-types",children:"Available Analysis Types"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Perspective"}),(0,r.jsx)(s.th,{children:"Focus Areas"}),(0,r.jsx)(s.th,{children:"Categories"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"bug"})}),(0,r.jsx)(s.td,{children:"Edge cases, null checks, resource leaks"}),(0,r.jsx)(s.td,{children:"edge-case, null-check, race-condition, boundary"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"ux"})}),(0,r.jsx)(s.td,{children:"User experience issues"}),(0,r.jsx)(s.td,{children:"error-message, loading-state, accessibility, feedback"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"test"})}),(0,r.jsx)(s.td,{children:"Test coverage gaps"}),(0,r.jsx)(s.td,{children:"missing-test, edge-case-test, integration-gap"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"quality"})}),(0,r.jsx)(s.td,{children:"Code quality issues"}),(0,r.jsx)(s.td,{children:"complexity, duplication, naming, code-smell"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"security"})}),(0,r.jsx)(s.td,{children:"Security vulnerabilities"}),(0,r.jsx)(s.td,{children:"injection, auth, encryption, input-validation"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"performance"})}),(0,r.jsx)(s.td,{children:"Performance bottlenecks"}),(0,r.jsx)(s.td,{children:"n-plus-one, memory-usage, caching, algorithm"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"maintainability"})}),(0,r.jsx)(s.td,{children:"Code maintainability"}),(0,r.jsx)(s.td,{children:"coupling, cohesion, tech-debt, module-boundary"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"best-practices"})}),(0,r.jsx)(s.td,{children:"Industry best practices"}),(0,r.jsx)(s.td,{children:"convention, pattern, framework-usage"})]})]})]}),"\n",(0,r.jsx)(s.h2,{id:"examples",children:"Examples"}),"\n",(0,r.jsx)(s.h3,{id:"quick-scan-recommended",children:"Quick Scan (Recommended)"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"/issue:discover src/auth/**\r\n# Interactive prompt:\r\n# Select primary discovery focus:\r\n# [1] Bug + Test + Quality (Recommended)\r\n# [2] Security + Performance\r\n# [3] Maintainability + Best-practices\r\n# [4] Full analysis\n"})}),"\n",(0,r.jsx)(s.h3,{id:"security-audit-with-external-research",children:"Security Audit with External Research"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"/issue:discover src/payment/** --perspectives=security --external\r\n# Uses Exa to research OWASP payment security standards\r\n# Compares implementation against industry benchmarks\n"})}),"\n",(0,r.jsx)(s.h3,{id:"full-analysis-with-auto-mode",children:"Full Analysis with Auto Mode"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"/issue:discover src/api/** --yes\r\n# Runs all 8 perspectives in parallel\r\n# No confirmations, processes all findings\n"})}),"\n",(0,r.jsx)(s.h2,{id:"issue-lifecycle-flow",children:"Issue Lifecycle Flow"}),"\n",(0,r.jsx)(s.mermaid,{value:"graph TB\r\n A[Target Files] --\x3e B[Select Perspectives]\r\n B --\x3e C[Launch N Agents Parallel]\r\n C --\x3e D1[Bug Agent]\r\n C --\x3e D2[UX Agent]\r\n C --\x3e D3[Test Agent]\r\n C --\x3e D4[Security Agent + Exa]\r\n C --\x3e D5[Performance Agent]\r\n C --\x3e D6[Quality Agent]\r\n C --\x3e D7[Maintainability Agent]\r\n C --\x3e D8[Best-Practices Agent + Exa]\r\n D1 --\x3e E[Aggregate Findings]\r\n D2 --\x3e E\r\n D3 --\x3e E\r\n D4 --\x3e E\r\n D5 --\x3e E\r\n D6 --\x3e E\r\n D7 --\x3e E\r\n D8 --\x3e E\r\n E --\x3e F{Priority Score}\r\n F --\x3e|Critical/High| G[Export to Issues]\r\n F --\x3e|Medium| H[Dashboard Review]\r\n F --\x3e|Low| I[Archive]\r\n G --\x3e J[issue:plan]\r\n H --\x3e J"}),"\n",(0,r.jsx)(s.h2,{id:"discovery-output-structure",children:"Discovery Output Structure"}),"\n",(0,r.jsx)(s.h3,{id:"directory-layout",children:"Directory Layout"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{children:".workflow/issues/discoveries/\r\n\u251c\u2500\u2500 {discovery-id}/\r\n\u2502 \u251c\u2500\u2500 discovery-state.json # Session state machine\r\n\u2502 \u251c\u2500\u2500 perspectives/\r\n\u2502 \u2502 \u251c\u2500\u2500 bug.json # Bug findings\r\n\u2502 \u2502 \u251c\u2500\u2500 ux.json # UX findings\r\n\u2502 \u2502 \u251c\u2500\u2500 security.json # Security findings\r\n\u2502 \u2502 \u2514\u2500\u2500 ...\r\n\u2502 \u251c\u2500\u2500 external-research.json # Exa results (if enabled)\r\n\u2502 \u251c\u2500\u2500 discovery-issues.jsonl # Exported candidate issues\r\n\u2502 \u2514\u2500\u2500 summary.md # Consolidated report\n"})}),"\n",(0,r.jsx)(s.h3,{id:"finding-schema",children:"Finding Schema"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-typescript",children:"interface DiscoveryFinding {\r\n id: string;\r\n perspective: string;\r\n title: string;\r\n priority: 'critical' | 'high' | 'medium' | 'low';\r\n category: string;\r\n description: string;\r\n file: string;\r\n line: number;\r\n snippet: string;\r\n suggested_issue: string;\r\n confidence: number;\r\n priority_score: number;\r\n}\n"})}),"\n",(0,r.jsx)(s.h2,{id:"priority-categories",children:"Priority Categories"}),"\n",(0,r.jsx)(s.h3,{id:"critical-automatic-export",children:"Critical (Automatic Export)"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"Data corruption risks"}),"\n",(0,r.jsx)(s.li,{children:"Security vulnerabilities (auth bypass, injection)"}),"\n",(0,r.jsx)(s.li,{children:"Memory leaks"}),"\n",(0,r.jsx)(s.li,{children:"Race conditions"}),"\n",(0,r.jsx)(s.li,{children:"Critical accessibility issues"}),"\n"]}),"\n",(0,r.jsx)(s.h3,{id:"high-recommended-export",children:"High (Recommended Export)"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"Missing core functionality tests"}),"\n",(0,r.jsx)(s.li,{children:"Significant UX confusion"}),"\n",(0,r.jsx)(s.li,{children:"N+1 query problems"}),"\n",(0,r.jsx)(s.li,{children:"Clear security gaps"}),"\n",(0,r.jsx)(s.li,{children:"Major code smells"}),"\n"]}),"\n",(0,r.jsx)(s.h3,{id:"medium-dashboard-review",children:"Medium (Dashboard Review)"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"Edge case gaps"}),"\n",(0,r.jsx)(s.li,{children:"Inconsistent patterns"}),"\n",(0,r.jsx)(s.li,{children:"Minor performance issues"}),"\n",(0,r.jsx)(s.li,{children:"Documentation gaps"}),"\n",(0,r.jsx)(s.li,{children:"Style violations"}),"\n"]}),"\n",(0,r.jsx)(s.h3,{id:"low-informational",children:"Low (Informational)"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"Cosmetic issues"}),"\n",(0,r.jsx)(s.li,{children:"Minor naming inconsistencies"}),"\n",(0,r.jsx)(s.li,{children:"Optimization opportunities"}),"\n",(0,r.jsx)(s.li,{children:"Nice-to-have improvements"}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"dashboard-integration",children:"Dashboard Integration"}),"\n",(0,r.jsx)(s.h3,{id:"viewing-discoveries",children:"Viewing Discoveries"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"# Open CCW dashboard\r\nccw view\r\n\r\n# Navigate to: Issues > Discovery\n"})}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.strong,{children:"Features"}),":"]}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"View all discovery sessions"}),"\n",(0,r.jsx)(s.li,{children:"Filter by perspective and priority"}),"\n",(0,r.jsx)(s.li,{children:"Preview finding details with code snippets"}),"\n",(0,r.jsx)(s.li,{children:"Bulk select findings for export"}),"\n",(0,r.jsx)(s.li,{children:"Compare findings across sessions"}),"\n"]}),"\n",(0,r.jsx)(s.h3,{id:"exporting-to-issues",children:"Exporting to Issues"}),"\n",(0,r.jsx)(s.p,{children:"From the dashboard:"}),"\n",(0,r.jsxs)(s.ol,{children:["\n",(0,r.jsx)(s.li,{children:"Select findings to export"}),"\n",(0,r.jsx)(s.li,{children:'Click "Export as Issues"'}),"\n",(0,r.jsx)(s.li,{children:"Findings are converted to standard issue format"}),"\n",(0,r.jsxs)(s.li,{children:["Appended to ",(0,r.jsx)(s.code,{children:".workflow/issues/issues.jsonl"})]}),"\n",(0,r.jsxs)(s.li,{children:["Status set to ",(0,r.jsx)(s.code,{children:"registered"})]}),"\n",(0,r.jsxs)(s.li,{children:["Continue with ",(0,r.jsx)(s.code,{children:"/issue:plan"})," workflow"]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"exa-external-research",children:"Exa External Research"}),"\n",(0,r.jsx)(s.h3,{id:"security-perspective",children:"Security Perspective"}),"\n",(0,r.jsx)(s.p,{children:"Researches:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"OWASP Top 10 for your technology stack"}),"\n",(0,r.jsx)(s.li,{children:"Industry-standard security patterns"}),"\n",(0,r.jsx)(s.li,{children:"Common vulnerabilities in your framework"}),"\n",(0,r.jsx)(s.li,{children:"Best practices for your specific use case"}),"\n"]}),"\n",(0,r.jsx)(s.h3,{id:"best-practices-perspective",children:"Best-Practices Perspective"}),"\n",(0,r.jsx)(s.p,{children:"Researches:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"Framework-specific conventions"}),"\n",(0,r.jsx)(s.li,{children:"Language idioms and patterns"}),"\n",(0,r.jsx)(s.li,{children:"Deprecated API warnings"}),"\n",(0,r.jsx)(s.li,{children:"Community-recommended approaches"}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"related-commands",children:"Related Commands"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:(0,r.jsxs)(s.a,{href:"/docs/docs/commands/issue/issue-new",children:["issue",":new"]})})," - Create issues from discoveries"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:(0,r.jsxs)(s.a,{href:"/docs/docs/commands/issue/issue-plan",children:["issue",":plan"]})})," - Plan solutions for discovered issues"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:(0,r.jsxs)(s.a,{href:"#",children:["issue",":manage"]})})," - Interactive issue management dashboard"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:(0,r.jsx)(s.a,{href:"#",children:"review-code"})})," - Code review for quality assessment"]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"best-practices",children:"Best Practices"}),"\n",(0,r.jsxs)(s.ol,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Start focused"}),": Begin with specific modules, not entire codebase"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Quick scan first"}),": Use bug+test+quality for fast results"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Review before export"}),": Not all findings warrant issues"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Enable Exa strategically"}),": For unfamiliar tech or security audits"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Combine perspectives"}),": Run related perspectives together (e.g., security+bug)"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Iterate"}),": Run discovery on changed modules after each sprint"]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"comparison-discovery-vs-code-review",children:"Comparison: Discovery vs Code Review"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Aspect"}),(0,r.jsxs)(s.th,{children:["issue",":discover"]}),(0,r.jsx)(s.th,{children:"review-code"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"Purpose"})}),(0,r.jsx)(s.td,{children:"Find actionable issues"}),(0,r.jsx)(s.td,{children:"Assess code quality"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"Output"})}),(0,r.jsx)(s.td,{children:"Exportable issues"}),(0,r.jsx)(s.td,{children:"Quality report"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"Perspectives"})}),(0,r.jsx)(s.td,{children:"8 specialized angles"}),(0,r.jsx)(s.td,{children:"7 quality dimensions"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"External Research"})}),(0,r.jsx)(s.td,{children:"Yes (Exa)"}),(0,r.jsx)(s.td,{children:"No"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"Dashboard Integration"})}),(0,r.jsx)(s.td,{children:"Yes"}),(0,r.jsx)(s.td,{children:"No"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"Use When"})}),(0,r.jsx)(s.td,{children:"Proactive issue hunting"}),(0,r.jsx)(s.td,{children:"Post-commit review"})]})]})]})]})}function h(e={}){const{wrapper:s}={...(0,t.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},1184(e,s,i){i.d(s,{R:()=>c,x:()=>l});var n=i(3696);const r={},t=n.createContext(r);function c(e){const s=n.useContext(t);return n.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),n.createElement(t.Provider,{value:s},e.children)}}}]);