AI enabled pair programmer for Claude, GPT, O Series, Grok, Deepseek, Gemini and 300+ models
This report summarizes scanner evidence for tailcallhq/forgecode, a Rust project with 7,637 GitHub stars. SynthScan examined 169,601 lines of code across 699 source files, recording 443 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 4.4 (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.
Can maintainers explain intent, assumptions, and trade-offs? 370 finding(s).
Are imports declared and package/API names verified? 1 finding(s).
Are wrappers, guards, and repeated structures necessary? 73 finding(s).
Which changes need focused human review? 443 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 443 distinct pattern matches across 13 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 | crates/forge_app/src/compact.rs | 21 | /// Applies the standard compaction transformer pipeline to a context | COMMENT |
| LOW | crates/forge_app/src/compact.rs | 101 | "Created context compaction summary" | COMMENT |
| LOW | crates/forge_app/src/compact.rs | 781 | assert_eq!(compact.model, None); | COMMENT |
| LOW | crates/forge_app/src/compact.rs | 881 | // But with safe threshold, compaction would have triggered earlier | COMMENT |
| LOW | crates/forge_app/src/template_engine.rs | 1 | use std::sync::LazyLock; | COMMENT |
| LOW | crates/forge_app/src/template_engine.rs | 101 | COMMENT | |
| LOW | crates/forge_app/src/git_app.rs | 121 | Ok(CommitResult { | COMMENT |
| LOW | crates/forge_app/src/services.rs | 181 | /// Manages user preferences for default providers and models. | COMMENT |
| LOW | crates/forge_app/src/services.rs | 201 | /// | COMMENT |
| LOW | crates/forge_app/src/services.rs | 401 | /// Searches for files and content based on the provided parameters. | COMMENT |
| LOW | crates/forge_app/src/services.rs | 501 | pub trait SkillFetchService: Send + Sync { | COMMENT |
| LOW | crates/forge_app/src/file_tracking.rs | 21 | } | COMMENT |
| LOW | crates/forge_app/src/search_dedup.rs | 1 | //! Deduplication logic for code search results across multiple queries. | COMMENT |
| LOW | crates/forge_app/src/search_dedup.rs | 61 | } | COMMENT |
| LOW | crates/forge_app/src/infra.rs | 41 | /// order, and persist the result atomically. | COMMENT |
| LOW | crates/forge_app/src/infra.rs | 61 | async fn read_utf8(&self, path: &Path) -> anyhow::Result<String>; | COMMENT |
| LOW | crates/forge_app/src/infra.rs | 81 | COMMENT | |
| LOW | crates/forge_app/src/infra.rs | 261 | COMMENT | |
| LOW | crates/forge_app/src/infra.rs | 281 | #[async_trait::async_trait] | COMMENT |
| LOW | crates/forge_app/src/infra.rs | 301 | /// * `key` - The key to store the value under | COMMENT |
| LOW | crates/forge_app/src/infra.rs | 381 | /// 2. Global custom agents (from ~/.forge/agents/ directory) | COMMENT |
| LOW | crates/forge_app/src/terminal_context.rs | 21 | /// ASCII Unit Separator (`\x1F`) is chosen because it cannot appear in | COMMENT |
| LOW | crates/forge_app/src/utils.rs | 1 | use std::path::Path; | COMMENT |
| LOW | crates/forge_app/src/utils.rs | 421 | "additionalProperties".to_string(), | COMMENT |
| LOW | crates/forge_app/src/utils.rs | 441 | /// values | COMMENT |
| LOW | crates/forge_app/src/utils.rs | 601 | /// JSON Schema, and has several restrictions that differ from standard JSON | COMMENT |
| LOW | crates/forge_app/src/utils.rs | 881 | /// # Arguments | COMMENT |
| LOW | crates/forge_app/src/workspace_status.rs | 41 | /// | COMMENT |
| LOW | crates/forge_app/src/dto/anthropic/response.rs | 61 | /// Returns the context window size for a given Claude model ID. | COMMENT |
| LOW | …_app/src/dto/anthropic/transforms/sanitize_tool_ids.rs | 1 | use forge_domain::Transformer; | COMMENT |
| LOW | …rge_app/src/dto/anthropic/transforms/enforce_schema.rs | 1 | use forge_domain::Transformer; | COMMENT |
| LOW | …rge_app/src/dto/anthropic/transforms/enforce_schema.rs | 21 | /// ``` | COMMENT |
| LOW | …p/src/dto/anthropic/transforms/remove_output_format.rs | 1 | use forge_domain::Transformer; | COMMENT |
| LOW | crates/forge_app/src/dto/openai/response.rs | 141 | /// | COMMENT |
| LOW | crates/forge_app/src/dto/openai/request.rs | 201 | /// | COMMENT |
| LOW | crates/forge_app/src/dto/openai/request.rs | 261 | #[serde(skip_serializing_if = "Option::is_none")] | COMMENT |
| LOW | crates/forge_app/src/dto/openai/copilot_model.rs | 1 | use forge_domain::ModelId; | COMMENT |
| LOW | …forge_app/src/dto/openai/transformers/zai_reasoning.rs | 1 | use forge_domain::Transformer; | COMMENT |
| LOW | …es/forge_app/src/dto/openai/transformers/when_model.rs | 1 | use regex::Regex; | COMMENT |
| LOW | crates/forge_app/src/dto/openai/transformers/minimax.rs | 1 | use forge_domain::Transformer; | COMMENT |
| LOW | …pp/src/dto/openai/transformers/set_reasoning_effort.rs | 1 | use forge_domain::{Effort, Transformer}; | COMMENT |
| LOW | crates/forge_app/src/transformers/drop_role.rs | 1 | use forge_domain::{ContextSummary, Role, Transformer}; | COMMENT |
| LOW | …tes/forge_app/src/transformers/trim_context_summary.rs | 1 | use forge_domain::{ContextSummary, Role, SummaryMessage, SummaryTool, Transformer}; | COMMENT |
| LOW | crates/forge_app/src/transformers/strip_working_dir.rs | 1 | use std::path::{Path, PathBuf}; | COMMENT |
| LOW | crates/forge_app/src/transformers/strip_working_dir.rs | 21 | /// | COMMENT |
| LOW | crates/forge_app/src/transformers/compaction.rs | 1 | use std::path::PathBuf; | COMMENT |
| LOW | crates/forge_app/src/hooks/tracing.rs | 1 | use async_trait::async_trait; | COMMENT |
| LOW | crates/forge_select/src/confirm.rs | 21 | COMMENT | |
| LOW | crates/forge_select/src/select.rs | 61 | self | COMMENT |
| LOW | crates/forge_select/src/input.rs | 41 | self.default_display = Some(default.to_string()); | COMMENT |
| LOW | …ates/forge_domain/tests/test_stringified_tool_calls.rs | 1 | //! Integration test for stringified tool call arguments fix | COMMENT |
| LOW | crates/forge_domain/src/xml.rs | 1 | /// Extracts content between the specified XML-style tags | COMMENT |
| LOW | crates/forge_domain/src/hook.rs | 121 | /// | COMMENT |
| LOW | crates/forge_domain/src/hook.rs | 301 | /// Combines this hook with another hook, creating a new hook that runs both | COMMENT |
| LOW | crates/forge_domain/src/mcp_servers.rs | 1 | use std::collections::{HashMap, hash_map}; | COMMENT |
| LOW | crates/forge_domain/src/temperature.rs | 1 | use std::fmt; | COMMENT |
| LOW | crates/forge_domain/src/top_k.rs | 1 | use std::fmt; | COMMENT |
| LOW | crates/forge_domain/src/message_pattern.rs | 1 | use serde_json::json; | COMMENT |
| LOW | crates/forge_domain/src/message_pattern.rs | 21 | /// # Examples | COMMENT |
| LOW | crates/forge_domain/src/message_pattern.rs | 41 | /// # Arguments | COMMENT |
| 196 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/forge_services/src/mcp/service.rs | 303 | // ── Mock MCP client ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/forge_services/src/mcp/service.rs | 323 | // ── Mock config manager ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/forge_services/src/mcp/service.rs | 352 | // ── Mock infrastructure ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/forge_services/src/mcp/service.rs | 418 | // ── Fixture ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/forge_services/src/mcp/service.rs | 467 | // ── Concurrent initialisation test ────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | .forge/skills/github-pr-comments/scripts/pr-comments.sh | 13 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | .forge/skills/github-pr-comments/scripts/pr-comments.sh | 15 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | .forge/skills/github-pr-comments/scripts/pr-comments.sh | 25 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | .forge/skills/github-pr-comments/scripts/pr-comments.sh | 27 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | .forge/skills/github-pr-comments/scripts/pr-comments.sh | 31 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | .forge/skills/github-pr-comments/scripts/pr-comments.sh | 38 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .forge/skills/github-pr-comments/scripts/pr-comments.sh | 84 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .forge/skills/github-pr-comments/scripts/pr-comments.sh | 88 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | .forge/skills/resolve-fixme/scripts/find-fixme.sh | 16 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | .forge/skills/resolve-fixme/scripts/find-fixme.sh | 18 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | .forge/skills/resolve-fixme/scripts/find-fixme.sh | 29 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | .forge/skills/resolve-fixme/scripts/find-fixme.sh | 33 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .forge/skills/test-reasoning/scripts/test-reasoning.sh | 11 | # ─── colors ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | .forge/skills/test-reasoning/scripts/test-reasoning.sh | 21 | # ─── state ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | .forge/skills/test-reasoning/scripts/test-reasoning.sh | 35 | # ─── output helpers ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | .forge/skills/test-reasoning/scripts/test-reasoning.sh | 45 | # ─── json helpers ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | .forge/skills/test-reasoning/scripts/test-reasoning.sh | 83 | # ─── test runner ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | .forge/skills/test-reasoning/scripts/test-reasoning.sh | 121 | # ─── parallel job launcher ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | .forge/skills/test-reasoning/scripts/test-reasoning.sh | 133 | # ─── build ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | .forge/skills/test-reasoning/scripts/test-reasoning.sh | 142 | # ─── OpenRouter · openai/o4-mini — effort levels ───────────────────────────── | COMMENT |
| MEDIUM | .forge/skills/test-reasoning/scripts/test-reasoning.sh | 164 | # ─── OpenRouter · openai/o4-mini — max_tokens ──────────────────────────────── | COMMENT |
| MEDIUM | .forge/skills/test-reasoning/scripts/test-reasoning.sh | 180 | # ─── OpenRouter · openai/o4-mini — exclude ─────────────────────────────────── | COMMENT |
| MEDIUM | .forge/skills/test-reasoning/scripts/test-reasoning.sh | 196 | # ─── OpenRouter · openai/o4-mini — enabled ─────────────────────────────────── | COMMENT |
| MEDIUM | .forge/skills/test-reasoning/scripts/test-reasoning.sh | 212 | # ─── OpenRouter · anthropic/claude-opus-4-5 — max_tokens ───────────────────── | COMMENT |
| MEDIUM | .forge/skills/test-reasoning/scripts/test-reasoning.sh | 228 | # ─── OpenRouter · moonshotai/kimi-k2 — max_tokens ──────────────────────────── | COMMENT |
| MEDIUM | .forge/skills/test-reasoning/scripts/test-reasoning.sh | 254 | # ─── OpenRouter · minimax/minimax-m2 — max_tokens ──────────────────────────── | COMMENT |
| MEDIUM | .forge/skills/test-reasoning/scripts/test-reasoning.sh | 280 | # ─── Anthropic · claude-opus-4-6 — effort levels ───────────────────────────── | COMMENT |
| MEDIUM | .forge/skills/test-reasoning/scripts/test-reasoning.sh | 299 | # ─── Anthropic · claude-3-7-sonnet-20250219 — thinking object ──────────────── | COMMENT |
| MEDIUM | .forge/skills/test-reasoning/scripts/test-reasoning.sh | 318 | # ─── GitHub Copilot · o4-mini — effort levels ──────────────────────────────── | COMMENT |
| MEDIUM | .forge/skills/test-reasoning/scripts/test-reasoning.sh | 337 | # ─── Codex · gpt-5.1-codex — effort levels ─────────────────────────────────── | COMMENT |
| MEDIUM | .forge/skills/test-reasoning/scripts/test-reasoning.sh | 357 | # ─── Codex · gpt-5.1-codex — exclude ──────────────────────────────────────── | COMMENT |
| MEDIUM | .forge/skills/test-reasoning/scripts/test-reasoning.sh | 373 | # ─── Invalid effort — config parse error (one per provider) ────────────────── | COMMENT |
| MEDIUM | .forge/skills/test-reasoning/scripts/test-reasoning.sh | 398 | # ─── collect results ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | .forge/skills/test-reasoning/scripts/test-reasoning.sh | 414 | # ─── summary ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | shell-plugin/lib/context.zsh | 14 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | shell-plugin/lib/context.zsh | 16 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | shell-plugin/lib/context.zsh | 57 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | shell-plugin/lib/context.zsh | 59 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/autofix.yml | 1 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/autofix.yml | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/autofix.yml | 14 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/autofix.yml | 16 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/labels.yml | 1 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/labels.yml | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/labels.yml | 14 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/labels.yml | 16 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/release.yml | 1 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/release.yml | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/release.yml | 14 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/release.yml | 16 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/stale.yml | 1 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/stale.yml | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/stale.yml | 14 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/stale.yml | 16 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/release-drafter.yml | 1 | # ------------------------------------------------------------------- | COMMENT |
| 11 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | crates/forge_app/src/file_tracking.rs | 383 | // Step 1: Read the file (insert via Metrics::insert like production) | COMMENT |
| LOW⚡ | crates/forge_app/src/file_tracking.rs | 388 | // Step 2: Write the file (overwrites the Read entry) | COMMENT |
| LOW | crates/forge_app/src/file_tracking.rs | 414 | // Step 1: Read, Step 2: Write | COMMENT |
| LOW | crates/forge_app/src/file_tracking.rs | 446 | // Step 1: Write, Step 2: Read back (overwrites Write entry) | COMMENT |
| LOW⚡ | crates/forge_app/src/utils.rs | 1603 | // Step 1: Convert to Schema (like MCP client does) | COMMENT |
| LOW⚡ | crates/forge_app/src/utils.rs | 1607 | // Step 2: Normalize for OpenAI/Codex strict mode | COMMENT |
| LOW⚡ | crates/forge_app/src/utils.rs | 1610 | // Step 3: Serialize for API request | COMMENT |
| LOW | crates/forge_domain/src/transformer/image_handling.rs | 27 | // Step 1: Replace the image value with a text message | COMMENT |
| LOW | crates/forge_domain/src/transformer/image_handling.rs | 53 | // Step 2: Insert all images at the end | COMMENT |
| LOW⚡ | …s/forge_repo/src/provider/openai_responses/response.rs | 1847 | // Step 1: output_item.added with empty arguments (Spark sends "" | COMMENT |
| LOW⚡ | …s/forge_repo/src/provider/openai_responses/response.rs | 1851 | // Step 2: function_call_arguments.done with full arguments (no deltas) | COMMENT |
| LOW⚡ | …s/forge_repo/src/provider/openai_responses/response.rs | 1860 | // Step 3: response.completed with usage | COMMENT |
| LOW | crates/forge_repo/src/skills/create-skill/SKILL.md | 213 | ### Step 1: Understanding the Skill with Concrete Examples | COMMENT |
| LOW | crates/forge_repo/src/skills/create-skill/SKILL.md | 230 | ### Step 2: Planning the Reusable Skill Contents | COMMENT |
| LOW | crates/forge_repo/src/skills/create-skill/SKILL.md | 254 | ### Step 3: Initializing the Skill | COMMENT |
| LOW | crates/forge_repo/src/skills/create-skill/SKILL.md | 335 | ### Step 4: Edit the Skill | COMMENT |
| LOW | crates/forge_repo/src/skills/create-skill/SKILL.md | 380 | ### Step 5: Iterate | COMMENT |
| LOW | crates/forge_main/src/ui.rs | 3292 | // Step 2: Complete authentication (polls if needed for OAuth flows) | COMMENT |
| LOW | crates/forge_infra/src/auth/strategy.rs | 654 | // Step 1: Request device authorization from OpenAI's custom endpoint | COMMENT |
| LOW | .forge/skills/resolve-conflicts/SKILL.md | 23 | ### Step 1: Assess the Conflict Situation | COMMENT |
| LOW | .forge/skills/resolve-conflicts/SKILL.md | 47 | ### Step 2: Create Merge Resolution Plan | COMMENT |
| LOW | .forge/skills/resolve-conflicts/SKILL.md | 102 | ### Step 3: Handle Deleted-Modified Files | COMMENT |
| LOW | .forge/skills/resolve-conflicts/SKILL.md | 121 | ### Step 4: Execute Resolution Plan | COMMENT |
| LOW | .forge/skills/resolve-conflicts/SKILL.md | 303 | ### Step 5: Validate Resolution | COMMENT |
| LOW | .forge/skills/resolve-conflicts/SKILL.md | 318 | ### Step 6: Compile and Test | COMMENT |
| LOW | .forge/skills/resolve-conflicts/SKILL.md | 339 | ### Step 7: Finalize | COMMENT |
| LOW⚡ | .forge/skills/create-command/SKILL.md | 70 | ### Step 1: Determine Command Purpose | COMMENT |
| LOW⚡ | .forge/skills/create-command/SKILL.md | 79 | ### Step 2: Choose Command Name | COMMENT |
| LOW⚡ | .forge/skills/create-command/SKILL.md | 86 | ### Step 3: Write the Command File | COMMENT |
| LOW⚡ | .forge/skills/create-agent/SKILL.md | 116 | ### Step 1: First Step | COMMENT |
| LOW⚡ | .forge/skills/create-agent/SKILL.md | 120 | ### Step 2: Second Step | COMMENT |
| LOW⚡ | .forge/skills/create-agent/SKILL.md | 124 | ### Step 3: Third Step | COMMENT |
| LOW⚡ | .forge/skills/create-agent/SKILL.md | 141 | ### Step 1: Determine Agent Purpose | COMMENT |
| LOW⚡ | .forge/skills/create-agent/SKILL.md | 150 | ### Step 2: Choose Agent ID and Title | COMMENT |
| LOW⚡ | .forge/skills/create-agent/SKILL.md | 156 | ### Step 3: Write the Agent File | COMMENT |
| LOW⚡ | benchmarks/evals/semantic_search_quality/run_eval.sh | 16 | # Step 1: Check if sem_search was used | COMMENT |
| LOW⚡ | benchmarks/evals/semantic_search_quality/run_eval.sh | 25 | # Step 2: Extract intent and queries | COMMENT |
| LOW | benchmarks/evals/semantic_search_quality/run_eval.sh | 39 | # Step 3: Check authentication | COMMENT |
| LOW | benchmarks/evals/semantic_search_quality/run_eval.sh | 55 | # Step 4: Run LLM judge (conditional) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | crates/forge_app/src/file_tracking.rs | 383 | // Step 1: Read the file (insert via Metrics::insert like production) | COMMENT |
| LOW⚡ | crates/forge_app/src/file_tracking.rs | 388 | // Step 2: Write the file (overwrites the Read entry) | COMMENT |
| LOW | crates/forge_app/src/file_tracking.rs | 414 | // Step 1: Read, Step 2: Write | COMMENT |
| LOW | crates/forge_app/src/file_tracking.rs | 446 | // Step 1: Write, Step 2: Read back (overwrites Write entry) | COMMENT |
| LOW⚡ | crates/forge_app/src/utils.rs | 1603 | // Step 1: Convert to Schema (like MCP client does) | COMMENT |
| LOW⚡ | crates/forge_app/src/utils.rs | 1607 | // Step 2: Normalize for OpenAI/Codex strict mode | COMMENT |
| LOW⚡ | crates/forge_app/src/utils.rs | 1610 | // Step 3: Serialize for API request | COMMENT |
| LOW⚡ | crates/forge_app/src/hooks/doom_loop.rs | 744 | // Step 1: [1] - no loop | COMMENT |
| LOW⚡ | crates/forge_app/src/hooks/doom_loop.rs | 749 | // Step 2: [1,2] - no loop | COMMENT |
| LOW⚡ | crates/forge_app/src/hooks/doom_loop.rs | 754 | // Step 3: [1,2,3] - no loop | COMMENT |
| LOW⚡ | crates/forge_app/src/hooks/doom_loop.rs | 759 | // Step 4: [1,2,3,4] - no loop | COMMENT |
| LOW⚡ | crates/forge_app/src/hooks/doom_loop.rs | 764 | // Step 5: [1,2,3,4,5] - no loop | COMMENT |
| LOW⚡ | crates/forge_app/src/hooks/doom_loop.rs | 769 | // Step 6: [1,2,3,4,5,4] - no loop yet | COMMENT |
| LOW⚡ | crates/forge_app/src/hooks/doom_loop.rs | 774 | // Step 7: [1,2,3,4,5,4,6] - no loop | COMMENT |
| LOW⚡ | crates/forge_app/src/hooks/doom_loop.rs | 779 | // Step 8: [1,2,3,4,5,4,6,4] - no loop yet | COMMENT |
| LOW⚡ | crates/forge_app/src/hooks/doom_loop.rs | 784 | // Step 9: [1,2,3,4,5,4,6,4,5] - no loop yet (only 1.5 repetitions of | COMMENT |
| LOW⚡ | crates/forge_app/src/hooks/doom_loop.rs | 790 | // Step 10: [1,2,3,4,5,4,6,4,5,4] - no loop yet (2 repetitions of [4,5]) | COMMENT |
| LOW⚡ | crates/forge_app/src/hooks/doom_loop.rs | 795 | // Step 11: [1,2,3,4,5,4,6,4,5,4,5] - still no loop (2.5 repetitions) | COMMENT |
| LOW⚡ | crates/forge_app/src/hooks/doom_loop.rs | 800 | // Step 12: [1,2,3,4,5,4,6,4,5,4,5,4] - still no loop (almost 3) | COMMENT |
| LOW⚡ | crates/forge_app/src/hooks/doom_loop.rs | 805 | // Step 13: [1,2,3,4,5,4,6,4,5,4,5,4,5] - [4,5] pattern now repeats 3 | COMMENT |
| LOW | crates/forge_domain/src/transformer/image_handling.rs | 27 | // Step 1: Replace the image value with a text message | COMMENT |
| LOW | crates/forge_domain/src/transformer/image_handling.rs | 53 | // Step 2: Insert all images at the end | COMMENT |
| LOW | crates/forge_services/src/provider_auth.rs | 89 | // For ApiKey responses, we need to check if it's Google ADC or regular | COMMENT |
| LOW⚡ | …s/forge_repo/src/provider/openai_responses/response.rs | 1847 | // Step 1: output_item.added with empty arguments (Spark sends "" | COMMENT |
| LOW⚡ | …s/forge_repo/src/provider/openai_responses/response.rs | 1851 | // Step 2: function_call_arguments.done with full arguments (no deltas) | COMMENT |
| LOW⚡ | …s/forge_repo/src/provider/openai_responses/response.rs | 1860 | // Step 3: response.completed with usage | COMMENT |
| LOW | crates/forge_main/src/ui.rs | 3292 | // Step 2: Complete authentication (polls if needed for OAuth flows) | COMMENT |
| LOW | crates/forge_infra/src/auth/strategy.rs | 654 | // Step 1: Request device authorization from OpenAI's custom endpoint | COMMENT |
| LOW⚡ | benchmarks/evals/semantic_search_quality/run_eval.sh | 16 | # Step 1: Check if sem_search was used | COMMENT |
| LOW⚡ | benchmarks/evals/semantic_search_quality/run_eval.sh | 25 | # Step 2: Extract intent and queries | COMMENT |
| LOW | benchmarks/evals/semantic_search_quality/run_eval.sh | 39 | # Step 3: Check authentication | COMMENT |
| LOW | benchmarks/evals/semantic_search_quality/run_eval.sh | 55 | # Step 4: Run LLM judge (conditional) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | crates/forge_api/src/api.rs | 49 | /// Commits changes with an AI-generated commit message | COMMENT |
| HIGH | crates/forge_main/src/model.rs | 479 | /// Preview the AI-generated commit message without committing. | COMMENT |
| HIGH | crates/forge_main/src/model.rs | 481 | #[strum(props(usage = "Preview AI-generated commit message"))] | COMMENT |
| HIGH | crates/forge_main/src/model.rs | 686 | /// Generate and optionally commit changes with AI-generated message | COMMENT |
| HIGH | crates/forge_main/src/cli.rs | 113 | /// Generate and optionally commit changes with AI-generated message | COMMENT |
| HIGH | shell-plugin/lib/actions/git.zsh | 5 | # Action handler: Directly commit changes with AI-generated message | COMMENT |
| HIGH | shell-plugin/lib/actions/git.zsh | 27 | # Action handler: Previews AI-generated commit message | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .forge/skills/create-plan/validate-all-plans.sh | 18 | # Check if validator exists | COMMENT |
| LOW | .forge/skills/create-plan/validate-plan.sh | 35 | # Check if file path is provided | COMMENT |
| LOW | .forge/skills/create-plan/validate-plan.sh | 43 | # Check if file exists | COMMENT |
| LOW | .forge/skills/create-plan/validate-plan.sh | 288 | # Check if tasks are very similar (same first 30 chars) | COMMENT |
| LOW | …s/resolve-conflicts/scripts/handle-deleted-modified.sh | 16 | # Check if we're in a git repository | COMMENT |
| LOW | …skills/resolve-conflicts/scripts/validate-conflicts.sh | 13 | # Check if we're in a git repository | COMMENT |
| LOW | shell-plugin/keyboard.zsh | 61 | # Check if main keymap is bound to viins or vicmd | COMMENT |
| LOW | shell-plugin/doctor.zsh | 108 | # Check if Oh My Zsh is installed | COMMENT |
| LOW | shell-plugin/doctor.zsh | 129 | # Check if forge is in PATH | COMMENT |
| LOW | shell-plugin/doctor.zsh | 149 | # Check if forge plugin is loaded by checking environment variable | COMMENT |
| LOW | shell-plugin/doctor.zsh | 193 | # Check if forge theme is loaded by checking environment variable | COMMENT |
| LOW | shell-plugin/doctor.zsh | 372 | # Check if either Left or Right Option key is set to Esc+ (value 2) | COMMENT |
| LOW | shell-plugin/doctor.zsh | 516 | # Check if Nerd Font is enabled via environment variables | COMMENT |
| LOW | shell-plugin/lib/helpers.zsh | 207 | # Check if sync is enabled (default to true if not set) | COMMENT |
| LOW | shell-plugin/lib/helpers.zsh | 216 | # Check if workspace is indexed before attempting sync | COMMENT |
| LOW | shell-plugin/lib/dispatcher.zsh | 19 | # Check if the user_action is in the list of valid commands and extract the row | COMMENT |
| LOW | shell-plugin/lib/dispatcher.zsh | 98 | # Check if the line starts with any of the supported patterns | COMMENT |
| LOW | shell-plugin/lib/actions/conversation.zsh | 54 | # Check if there's a previous conversation | COMMENT |
| LOW | shell-plugin/lib/actions/core.zsh | 77 | # Check if FORGE_CONVERSATION_ID is set | COMMENT |
| LOW | shell-plugin/lib/actions/git.zsh | 47 | # Check if there are staged changes to determine commit strategy | COMMENT |
| LOW | benchmarks/evals/redundant_cd_with_cwd/task.yml | 10 | # Check if any shell tool call contains "cd" command when cwd is also provided | COMMENT |
| LOW | benchmarks/evals/parallel_tool_calls/task.yml | 13 | # Check if there's at least one message with 2 or more tool calls executed in parallel | COMMENT |
| LOW | benchmarks/evals/todo_write_usage/task.yml | 12 | # Check if todo_write was called at least once | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …s/resolve-conflicts/scripts/handle-deleted-modified.sh | 98 | # Create an analysis file | COMMENT |
| MEDIUM | …s/resolve-conflicts/scripts/handle-deleted-modified.sh | 139 | # Create a summary file | COMMENT |
| MEDIUM | shell-plugin/lib/actions/config.zsh | 217 | # Create the config file if it does not yet exist | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | .forge/skills/resolve-fixme/scripts/find-fixme.sh | 31 | # Using rg --json + python for robust parsing that handles colons in paths | COMMENT |
| LOW | shell-plugin/lib/dispatcher.zsh | 51 | # If input_text is empty, just set the active agent (only for AGENT type commands) | COMMENT |
| MEDIUM | scripts/test-zsh-utils.sh | 44 | # --- Test harness ----------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | .forge/skills/github-pr-comments/scripts/pr-comments.sh | 6 | # Usage: | COMMENT |
| LOW | …/write-release-notes/scripts/validate-release-notes.sh | 3 | # Usage: | COMMENT |
| LOW⚡ | .forge/skills/resolve-fixme/scripts/find-fixme.sh | 6 | # Usage: | COMMENT |
| LOW | scripts/test-400-error-message.sh | 4 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | .github/contribution.md | 58 | OPENROUTER_API_KEY="your-api-key" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | README.md | 46 | - [Usage in Multi-Agent Workflows](#usage-in-multi-agent-workflows) | CODE |
| MEDIUM | …ge/skills/post-forge-feature/references/style-guide.md | 43 | - `#Agents` - agent orchestration features | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .forge/skills/resolve-fixme/scripts/find-fixme.sh | 53 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | benchmarks/evals/semantic_search_quality/llm_judge.ts | 155 | function extractSemanticSearchCalls(contextData: ContextData): Array<{ | CODE |