Lean, fine tuned Opencode multi agent suite · Mix any models · Auto delegate tasks
This report summarizes scanner evidence for alvinunreal/oh-my-opencode-slim, a TypeScript project with 10,035 GitHub stars. SynthScan examined 333,360 lines of code across 767 source files, recording 540 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 2.1 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 449 finding(s).
Are imports declared and package/API names verified? 4 finding(s).
Are wrappers, guards, and repeated structures necessary? 458 finding(s).
Which changes need focused human review? 540 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 540 distinct pattern matches across 9 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/verify-release-artifact.ts | 111 | function verifyDistHasNoLeakedPaths() { | CODE |
| LOW | scripts/package-imports.ts | 36 | export function verifyPackagedImportClosure( | CODE |
| LOW | src/index.test.ts | 3769 | async function assertAdmissionUsesFinalModel( | CODE |
| LOW | src/index.test.ts | 4866 | async function loadPluginWithOrchestratorSession( | CODE |
| LOW | src/tui.ts | 537 | export function getActiveSidebarAgentNames( | CODE |
| LOW | src/tui.ts | 660 | function annotateSiblingAttribution( | CODE |
| LOW | src/tui.ts | 722 | function disambiguateDuplicateAliases( | CODE |
| LOW | src/tui.ts | 758 | export function getSidebarReusableTargets( | CODE |
| LOW | src/tui.ts | 936 | export function getSidebarActivityIndicator(now = Date.now()): string { | CODE |
| LOW | src/tui.ts | 1460 | function projectSidebarSessionModels( | CODE |
| LOW | src/tui.ts | 1916 | function warningsMakeConfigInvalid( | CODE |
| LOW | src/tui.ts | 2018 | export function retainLastGoodConfigState( | CODE |
| LOW | src/admission-runtime.ts | 104 | export function resetAdmissionRuntimeForTests(): void { | CODE |
| LOW | src/admission-runtime.ts | 120 | export function getBackgroundTaskConcurrency( | CODE |
| LOW | src/admission-runtime.ts | 137 | export function resetBackgroundTaskConcurrencyForTests(): void { | CODE |
| LOW | src/preset-editor-domain.ts | 331 | export function describeBasePresetCandidate( | CODE |
| LOW | src/tui-state.ts | 853 | export function recordTuiAgentDisplayNames( | CODE |
| LOW | src/index.ts | 2010 | function resolveTuiVariantForModel( | CODE |
| LOW | src/health-check.ts | 47 | export function minimumExpectedAgentCount( | CODE |
| LOW | src/tools/cancel-task.ts | 420 | async function verifyQuiescentViaHostInfo( | CODE |
| LOW | src/tools/cancel-task.ts | 495 | async function confirmCancelAfterIdleWait( | CODE |
| LOW | src/tools/task-activity.ts | 48 | export function isCompletedAssistantMessageEvent( | CODE |
| LOW | src/tools/marketplace.ts | 31 | export function resolveFinalizedOrchestratorIdentities(input: { | CODE |
| LOW | src/tools/task-revive.test.ts | 172 | function controlledAdmissionDeadline() { | CODE |
| LOW | src/tools/task-status.ts | 924 | async function reportUntrackedTaskStatus( | CODE |
| LOW | src/tools/task-status.ts | 996 | function describeUntrackedEvidence( | CODE |
| LOW | src/tools/interview-submit-state.ts | 38 | export function createInterviewSubmitStateTool( | CODE |
| LOW | src/tools/task-revive.ts | 665 | async function resolveOrAdoptUntrackedTask( | CODE |
| LOW | src/tools/task-revive.ts | 714 | function supportsQueuedContinuation(options: TaskReviveToolOptions): boolean { | CODE |
| LOW | src/tools/acp-run.ts | 42 | export function createAcpInitializeParams() { | CODE |
| LOW | src/tools/task-message.ts | 295 | function assertSuccessfulMessageResponse(response: unknown): void { | CODE |
| LOW | src/tools/preset-switch.ts | 35 | function interpolateConfigEnvironment(raw: string): string { | CODE |
| LOW | src/tools/smartfetch/network.ts | 398 | function parseFilenameFromContentDisposition(value: string | null) { | CODE |
| LOW | src/tools/smartfetch/utils.ts | 218 | export function buildRedirectResultMessage( | CODE |
| LOW | src/tools/smartfetch/utils.ts | 336 | export function inferCanonicalUrlFromText(content: string, finalUrl: string) { | CODE |
| LOW | src/tools/smartfetch/utils.ts | 344 | export function extractHeadingsFromMarkdown(content: string) { | CODE |
| LOW | src/multiplexer/shared.ts | 65 | export function buildOpencodeAttachCommand( | CODE |
| LOW | src/multiplexer/shared.ts | 259 | export function resolveOpencodeExecutable(): string { | CODE |
| LOW | src/multiplexer/shared.ts | 328 | export function shellSupportsHashComments( | CODE |
| LOW | src/multiplexer/shared.ts | 334 | export function resolveHostOpencodeBinary( | CODE |
| LOW | src/multiplexer/wezterm/index.ts | 96 | function logViewerSecretGateFailure(reason: string, shell: string): void { | CODE |
| LOW | src/multiplexer/zellij/index.ts | 63 | function logViewerSecretGateFailure(reason: string): void { | CODE |
| LOW | src/multiplexer/cmux/index.ts | 182 | function logViewerSecretGateFailure(reason: string, shell: string): void { | CODE |
| LOW | src/multiplexer/client/tui-wiring.ts | 1007 | export function createReusingAdapterFactory( | CODE |
| LOW | src/multiplexer/client/tui-wiring.ts | 1096 | export function reflectServerAuthorization( | CODE |
| LOW | src/multiplexer/client/tui-wiring.ts | 1150 | function createSessionStatusReader( | CODE |
| LOW | src/multiplexer/client/tui-wiring.ts | 1265 | function createSessionTerminalProbe( | CODE |
| LOW | src/config/schema.ts | 196 | export function resetMultiplexerDiagnostics(): void { | CODE |
| LOW | src/config/schema.ts | 200 | function emitMultiplexerDiagnostic( | CODE |
| LOW | src/config/schema.ts | 269 | export function sanitizeMultiplexerConfig(value: unknown): unknown { | CODE |
| LOW | src/config/schema.ts | 417 | export function hasMarketplaceActivationDirectives( | CODE |
| LOW | src/config/schema.ts | 718 | export function resetBackgroundJobsDiagnostics(): void { | CODE |
| LOW | src/config/schema.ts | 722 | function emitBackgroundJobsDiagnostic(message: string): void { | CODE |
| LOW | src/config/schema.ts | 801 | export function sanitizeBackgroundJobsConfig(value: unknown): unknown { | CODE |
| LOW | src/config/schema.ts | 964 | function rejectOrchestratorPromptOnOrchestrator( | CODE |
| LOW | src/config/effective-agent-overrides.ts | 5 | export function resolveEffectiveAgentOverrides( | CODE |
| LOW | src/config/removed-keys.ts | 105 | export function stripRemovedDisabledValues( | CODE |
| LOW | src/config/loader.ts | 148 | export function interpolateEnvironmentVariables(value: string): string { | CODE |
| LOW | src/config/loader.ts | 173 | export function normalizeDisabledArrayKeys( | CODE |
| LOW | src/config/loader.ts | 241 | function retainExplicitInterviewFields( | CODE |
| 311 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/index.test.ts | 2162 | // ── Terminal publication push (issue #1647) ───────────────────────────── | COMMENT |
| MEDIUM | src/index.test.ts | 2162 | // ── Terminal publication push (issue #1647) ───────────────────────────── | COMMENT |
| MEDIUM | src/index.test.ts | 2283 | // ── C3 host-attributed double-delivery gate ───────────────────────────── | COMMENT |
| MEDIUM | src/index.test.ts | 2467 | // ── C2 writer-lane predicate wiring ──────────────────────────────────── | COMMENT |
| MEDIUM | src/terminal-gate.integration.test.ts | 2746 | // ── I1 pin: the launch-lineage discriminator ────────────────────────────── | COMMENT |
| MEDIUM | src/terminal-gate.integration.test.ts | 2883 | // ── M4+M1 pin: honest stop reason + pull-only stops ───────────────────── | COMMENT |
| MEDIUM | src/index.ts | 1965 | // ── Probe jsdom (async, non-blocking) ─────────────────────────────── | COMMENT |
| MEDIUM | src/evals/judge.ts | 13 | // ── Types ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/evals/judge.ts | 37 | // ── Judge execution ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/evals/polling-session.ts | 16 | // ── Types ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/evals/polling-session.ts | 45 | // ── Polling engine ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/evals/polling-session.ts | 219 | // ── Message parsing ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/evals/suite-runner.ts | 21 | // ── Options ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/evals/suite-runner.ts | 31 | // ── Execution ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/evals/suite-runner.ts | 236 | // ── Helpers ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/evals/run-case.ts | 11 | // ── Types ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/evals/run-case.ts | 51 | // ── Execution ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/evals/run-case.ts | 91 | // ── Helpers ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/utils/background-job-board.test.ts | 3258 | // ── Contract pins from the issue #1717 mutation sweep ────────────── | COMMENT |
| MEDIUM | src/utils/background-job-board.test.ts | 3258 | // ── Contract pins from the issue #1717 mutation sweep ────────────── | COMMENT |
| MEDIUM | src/utils/redact.ts | 103 | // ── Structure-preserving value masking (parse-miss previews) ────────── | COMMENT |
| MEDIUM | src/utils/background-job-board.ts | 495 | // ── Launch identity projection (best-effort, sidebar details) ───── | COMMENT |
| MEDIUM | src/utils/background-job-board.ts | 1394 | // ── Mutation notification (sidebar projection) ─────────────────── | COMMENT |
| MEDIUM | src/cli/eval.ts | 46 | // ── --precheck: validate all suites ────────────────────────────────── | COMMENT |
| MEDIUM | src/cli/eval.ts | 129 | // ── --diff: compare latest results ────────────────────────────────── | COMMENT |
| MEDIUM | src/cli/eval.ts | 167 | // ── --collect: interactive prompt collection ──────────────────────── | COMMENT |
| MEDIUM | src/cli/auto-collect.ts | 17 | // ── Library entry point ───────────────────────────────────────────── | COMMENT |
| MEDIUM | src/interview/manager.ts | 54 | // ─── Per-session mode (upstream behavior) ─────────────────────── | COMMENT |
| MEDIUM | src/interview/manager.ts | 59 | // ─── Dashboard mode ───────────────────────────────────────────── | COMMENT |
| MEDIUM | src/interview/document.ts | 15 | // ─── Path Utilities ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/interview/document.ts | 334 | // ─── String Utilities ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/interview/document.ts | 344 | // ─── Markdown Document Operations ──────────────────────────────────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 35 | // ─── Auth Token File ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 100 | // ─── Helpers ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 140 | // ─── Types ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 157 | // ─── Config ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 170 | // ─── Dashboard Server ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 393 | // ─── Auth ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 420 | // ─── Session Discovery ─────────────────────────────────────────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 480 | // ─── File Scanning ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 532 | // ─── Failover: rebuild state from .md frontmatter ────────────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 616 | // ─── Request Handler ───────────────────────────────────────────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 633 | // ── Health check (no auth required) ──────────────────────────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 649 | // ── API: settings (scan days, folders, discovery) ────────────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 705 | // ── Dashboard UI ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 750 | // ── API: list sessions (auth required) ────────────────────────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 770 | // ── API: list files (auth required) ───────────────────────────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 781 | // ── Auth gate for mutation endpoints ─────────────────────────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 787 | // ── API: register session ────────────────────────────────────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 822 | // ── API: unregister session ──────────────────────────────────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 845 | // ── API: create interview ────────────────────────────────────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 893 | // ── API: SSE stream (browser → dashboard, real-time push) ──────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 949 | // ── API: push state (session → dashboard) ────────────────────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 1093 | // ── API: acknowledge or roll back a claimed delivery ──────────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 1134 | // ── API: submit answers (browser → dashboard) ────────────────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 1196 | // ── API: submit block comment (browser → dashboard) ──────────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 1285 | // ── API: submit chat message (browser → dashboard) ────────────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 1405 | // ── API: nudge agent (browser → dashboard) ──────────────────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 1461 | // ── API: get nudge action (session polls, auth required) ────── | COMMENT |
| MEDIUM | src/interview/dashboard.ts | 1496 | // ── Interview page ───────────────────────────────────────────── | COMMENT |
| 27 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | server.js | 1 | // v2 server entry forwarder for directory-form plugin loading, e.g. | COMMENT |
| LOW | tui.js | 1 | // v2 TUI entry forwarder for directory-form plugin loading, e.g. | COMMENT |
| LOW | src/index.test.ts | 2281 | }); | COMMENT |
| LOW | src/terminal-gate.integration.test.ts | 1101 | // had already committed `Session.Info.idle_outcome='succeeded'` at idle | COMMENT |
| LOW | src/terminal-gate.integration.test.ts | 1441 | [], | COMMENT |
| LOW | src/terminal-gate.integration.test.ts | 1821 | // (`maxEvidenceRetries` = 3). Before #1561 the gate consulted `session.get` | COMMENT |
| LOW | src/terminal-gate.integration.test.ts | 2741 | } finally { | COMMENT |
| LOW | src/terminal-gate.integration.test.ts | 3201 | capture.restore(); | COMMENT |
| LOW | src/terminal-gate.integration.test.ts | 3481 | } | COMMENT |
| LOW | src/index.ts | 1401 | clearChildInputWaitsForSession(record.taskID); | COMMENT |
| LOW | src/index.ts | 1421 | taskID: record.taskID, | COMMENT |
| LOW | src/index.ts | 1481 | }); | COMMENT |
| LOW | src/index.ts | 1521 | // background notifier — a relaunch re-arms it with a fresh | COMMENT |
| LOW | src/index.ts | 1661 | } | COMMENT |
| LOW | src/index.ts | 1681 | // to observe, so the manager stays honest about the absent surface. | COMMENT |
| LOW | src/index.ts | 2561 | profiles, | COMMENT |
| LOW | src/index.ts | 3261 | // survive until process exit. Idempotent (registerActiveManager's | COMMENT |
| LOW | src/index.ts | 3441 | // #1079: internal admissions (lifecycle wakes, terminal | COMMENT |
| LOW | src/index.ts | 3861 | for (const part of message.parts) { | COMMENT |
| LOW | src/tools/task-reply.ts | 141 | // client exposes session.form.reply (POST | COMMENT |
| LOW | src/tools/task-reply.ts | 301 | // v2 gate (C4): question asks fail honestly BEFORE any transport | COMMENT |
| LOW | src/agents/registry.ts | 641 | return effect === 'deny' ? [] : [{ ...grant, effect }]; | COMMENT |
| LOW | src/agents/registry.ts | 1801 | // denies stored earlier in the payload. One mechanism, two verified | COMMENT |
| LOW | src/agents/registry.ts | 1821 | // is a capability grant: appended last it would silently outrank a | COMMENT |
| LOW | src/agents/index.ts | 181 | const primaryModel = agent._modelArray[0]; | COMMENT |
| LOW | src/agents/index.ts | 1281 | // Static pointer = roster only. The seat list lives here because v2's | COMMENT |
| LOW | src/utils/background-job-terminal-gate.ts | 721 | if (value.timer) clearTimer(value.timer); | COMMENT |
| LOW | src/utils/background-job-terminal-gate.ts | 1201 | // rejected outcome read is expected — polling that is busy-spinning, so | COMMENT |
| LOW | src/v2/setup.ts | 1741 | // Internal-initiator admissions (v2 orchestrator-wake queue prompts) | COMMENT |
| LOW | src/v2/setup.ts | 3001 | COMMENT | |
| LOW | src/v2/setup.ts | 3061 | }, | COMMENT |
| LOW | src/v2/setup.ts | 3381 | captures.delete(captureKey(event.sessionID, event.id)); | COMMENT |
| LOW | src/v2/setup.ts | 3401 | // delegation still fails closed when execute wrapping is unavailable; | COMMENT |
| LOW | src/v2/setup.ts | 3521 | // installed as ordered session-scoped rules at creation | COMMENT |
| LOW | src/v2/event-adapter.ts | 321 | ) { | COMMENT |
| LOW | src/v2/event-adapter.ts | 401 | id: props.sessionID, | COMMENT |
| LOW | src/v2/event-adapter.ts | 461 | out.push({ | COMMENT |
| LOW | src/v2/client-shim.ts | 641 | // the default stays 'steer' because the foreground-fallback replay | COMMENT |
| LOW | src/v2/client-shim.ts | 661 | ) => { | COMMENT |
| LOW | src/hooks/foreground-fallback/index.ts | 121 | // signals, but they are equally transient and should trigger fallback. | COMMENT |
| LOW | src/hooks/foreground-fallback/index.ts | 221 | // model may exist on a later entry in the configured chain. | COMMENT |
| LOW | src/hooks/foreground-fallback/index.ts | 3101 | // Fence captured BEFORE any await in the preparation: a board | COMMENT |
| LOW | …hooks/task-session-manager/revived-run-tracker.test.ts | 321 | COMMENT | |
| LOW | src/hooks/task-session-manager/pending-call-tracker.ts | 241 | // stain the pending for its owning generation). | COMMENT |
| LOW | src/hooks/task-session-manager/board-injection.ts | 1241 | } | COMMENT |
| LOW | src/hooks/task-session-manager/tool-execute-hooks.ts | 221 | // default, so an omitted `background` silently blocks the parent turn — | COMMENT |
| LOW | src/hooks/task-session-manager/tool-execute-hooks.ts | 981 | if (!taskId) { | COMMENT |
| LOW | src/hooks/task-session-manager/index.ts | 441 | // in condition order: | COMMENT |
| LOW | src/hooks/task-session-manager/index.ts | 541 | * NotFoundError rejection must not surface as unhandled). | COMMENT |
| LOW | src/hooks/task-session-manager/event-router.ts | 561 | } | COMMENT |
| LOW | src/hooks/task-session-manager/event-router.ts | 621 | // Unmanaged child sessions have no orchestrator mapping, so the block | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/installation.md | 129 | ### Step 1: Check OpenCode Installation | COMMENT |
| LOW | docs/installation.md | 137 | ### Step 2: Run the Installer | COMMENT |
| LOW | docs/installation.md | 169 | ### Step 3: Authenticate with Providers | COMMENT |
| LOW | docs/installation.md | 178 | ### Step 4: Verify Installation | COMMENT |
| LOW | src/v2/client-shim.test.ts | 1758 | // Step 2: the replay body foreground-fallback sends — only the internal | COMMENT |
| LOW | src/v2/client-shim.test.ts | 1798 | // Step 3: abort maps to interrupt with resume:false. | COMMENT |
| LOW | src/skills/codemap/SKILL.md | 18 | ### Step 1: Check for Existing State | COMMENT |
| LOW | src/skills/codemap/SKILL.md | 30 | ### Step 2: Initialize (Only if no state exists) | COMMENT |
| LOW | src/skills/codemap/SKILL.md | 55 | ### Step 3: Detect Changes (If state already exists) | COMMENT |
| LOW | src/skills/codemap/SKILL.md | 78 | ### Step 4: Finalize Repository Atlas (Root Codemap) | COMMENT |
| LOW | src/skills/codemap/SKILL.md | 86 | ### Step 5: Register Codemap in AGENTS.md | COMMENT |
| LOW | src/skills/clonedeps/SKILL.md | 18 | ### Step 1: Check Existing State | COMMENT |
| LOW | src/skills/clonedeps/SKILL.md | 32 | ### Step 2: Ask Explorer for the Clone Plan | COMMENT |
| LOW | src/skills/clonedeps/SKILL.md | 88 | ### Step 3: Verify and Confirm the Plan | COMMENT |
| LOW | src/skills/clonedeps/SKILL.md | 103 | ### Step 4: Update Ignore Files | COMMENT |
| LOW | src/skills/clonedeps/SKILL.md | 133 | ### Step 5: Clone Sources Manually | COMMENT |
| LOW | src/skills/clonedeps/SKILL.md | 168 | ### Step 6: Write Local State | COMMENT |
| LOW | src/skills/clonedeps/SKILL.md | 206 | ### Step 7: Register Dependency Source in AGENTS.md | COMMENT |
| LOW | src/skills/simplify/SKILL.md | 76 | ### Step 1: Understand Before Touching | COMMENT |
| LOW | src/skills/simplify/SKILL.md | 90 | ### Step 2: Look for Simplification Opportunities | COMMENT |
| LOW | src/skills/simplify/SKILL.md | 104 | ### Step 3: Apply Changes Incrementally | COMMENT |
| LOW | src/skills/simplify/SKILL.md | 116 | ### Step 4: Verify the Result | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | src/tools/smartfetch/utils.test.ts | 42 | const html = `<html><body><nav>NAVTOKENR3</nav><article><h1>Main heading</h1><p><b>line break</b> <script>1</script> | CODE |
| LOW⚡ | src/tools/smartfetch/utils.test.ts | 42 | const html = `<html><body><nav>NAVTOKENR3</nav><article><h1>Main heading</h1><p><b>line break</b> <script>1</script> | CODE |
| LOW⚡ | src/tools/smartfetch/utils.test.ts | 51 | expect(content).toContain('Lorem ipsum'); | CODE |
| LOW | src/cli/system.test.ts | 23 | writeFileSync(opencodePath, 'placeholder'); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/v2/client-shim.test.ts | 1758 | // Step 2: the replay body foreground-fallback sends — only the internal | COMMENT |
| LOW | src/v2/client-shim.test.ts | 1798 | // Step 3: abort maps to interrupt with resume:false. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …task-session-manager/running-task-cache-safety.test.ts | 95 | // runtime it is static, but the transform must be robust to a runtime that | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/hooks/task-session-manager/event-router.ts | 659 | // updateStatus is a CAS operation; the store API cannot provide that. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/interview/dashboard.ts | 618 | async function handleRequest( | CODE |