AI enabled pair programmer for Claude, GPT, O Series, Grok, Deepseek, Gemini and 300+ models
This report presents the forensic synthetic code analysis of tailcallhq/forgecode, a Rust project with 7,460 GitHub stars. SynthScan v2.0 examined 168,814 lines of code across 699 source files, recording 440 pattern matches distributed across 13 syntactic categories. The overall adjusted score of 4.4 places this repository in the Likely human-written band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 440 distinct pattern matches across 13 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| 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 | COMMENT | |
| LOW | crates/forge_app/src/template_engine.rs | 1 | use std::sync::LazyLock; | COMMENT |
| LOW | crates/forge_app/src/template_engine.rs | 101 | // Register all embedded templates from the templates directory | COMMENT |
| LOW | crates/forge_app/src/operation.rs | 801 | message: message.to_string(), | COMMENT |
| LOW | crates/forge_app/src/tool_registry.rs | 381 | IMAGE_EXTENSIONS.iter().any(|ext| path_lower.ends_with(ext)) | 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 | /// - **Integer/number enums are rejected**: Gemini requires all enum values to | COMMENT |
| LOW | crates/forge_app/src/utils.rs | 861 | } | 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 |
| 193 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/forge_services/src/mcp/service.rs | 297 | // ── Mock MCP client ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/forge_services/src/mcp/service.rs | 317 | // ── Mock config manager ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/forge_services/src/mcp/service.rs | 346 | // ── Mock infrastructure ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/forge_services/src/mcp/service.rs | 412 | // ── Fixture ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/forge_services/src/mcp/service.rs | 461 | // ── 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 | 381 | // Step 1: Read the file (insert via Metrics::insert like production) | COMMENT |
| LOW⚡ | crates/forge_app/src/file_tracking.rs | 386 | // Step 2: Write the file (overwrites the Read entry) | COMMENT |
| LOW | crates/forge_app/src/file_tracking.rs | 412 | // Step 1: Read, Step 2: Write | COMMENT |
| LOW | crates/forge_app/src/file_tracking.rs | 444 | // Step 1: Write, Step 2: Read back (overwrites Write entry) | COMMENT |
| LOW⚡ | crates/forge_app/src/utils.rs | 1591 | // Step 1: Convert to Schema (like MCP client does) | COMMENT |
| LOW⚡ | crates/forge_app/src/utils.rs | 1595 | // Step 2: Normalize for OpenAI/Codex strict mode | COMMENT |
| LOW⚡ | crates/forge_app/src/utils.rs | 1598 | // 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 | 1827 | // Step 1: output_item.added with empty arguments (Spark sends "" initially) | COMMENT |
| LOW⚡ | …s/forge_repo/src/provider/openai_responses/response.rs | 1830 | // Step 2: function_call_arguments.done with full arguments (no deltas) | COMMENT |
| LOW⚡ | …s/forge_repo/src/provider/openai_responses/response.rs | 1839 | // 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 | 3281 | // Step 2: Complete authentication (polls if needed for OAuth flows) | COMMENT |
| LOW | crates/forge_infra/src/auth/strategy.rs | 651 | // 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 | 381 | // Step 1: Read the file (insert via Metrics::insert like production) | COMMENT |
| LOW⚡ | crates/forge_app/src/file_tracking.rs | 386 | // Step 2: Write the file (overwrites the Read entry) | COMMENT |
| LOW | crates/forge_app/src/file_tracking.rs | 412 | // Step 1: Read, Step 2: Write | COMMENT |
| LOW | crates/forge_app/src/file_tracking.rs | 444 | // Step 1: Write, Step 2: Read back (overwrites Write entry) | COMMENT |
| LOW⚡ | crates/forge_app/src/utils.rs | 1591 | // Step 1: Convert to Schema (like MCP client does) | COMMENT |
| LOW⚡ | crates/forge_app/src/utils.rs | 1595 | // Step 2: Normalize for OpenAI/Codex strict mode | COMMENT |
| LOW⚡ | crates/forge_app/src/utils.rs | 1598 | // Step 3: Serialize for API request | COMMENT |
| LOW⚡ | crates/forge_app/src/hooks/doom_loop.rs | 742 | // Step 1: [1] - no loop | COMMENT |
| LOW⚡ | crates/forge_app/src/hooks/doom_loop.rs | 747 | // Step 2: [1,2] - no loop | COMMENT |
| LOW⚡ | crates/forge_app/src/hooks/doom_loop.rs | 752 | // Step 3: [1,2,3] - no loop | COMMENT |
| LOW⚡ | crates/forge_app/src/hooks/doom_loop.rs | 757 | // Step 4: [1,2,3,4] - no loop | COMMENT |
| LOW⚡ | crates/forge_app/src/hooks/doom_loop.rs | 762 | // Step 5: [1,2,3,4,5] - no loop | COMMENT |
| LOW⚡ | crates/forge_app/src/hooks/doom_loop.rs | 767 | // Step 6: [1,2,3,4,5,4] - no loop yet | COMMENT |
| LOW⚡ | crates/forge_app/src/hooks/doom_loop.rs | 772 | // Step 7: [1,2,3,4,5,4,6] - no loop | COMMENT |
| LOW⚡ | crates/forge_app/src/hooks/doom_loop.rs | 777 | // Step 8: [1,2,3,4,5,4,6,4] - no loop yet | COMMENT |
| LOW⚡ | crates/forge_app/src/hooks/doom_loop.rs | 782 | // Step 9: [1,2,3,4,5,4,6,4,5] - no loop yet (only 1.5 repetitions of [4,5]) | COMMENT |
| LOW⚡ | crates/forge_app/src/hooks/doom_loop.rs | 787 | // 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 | 792 | // 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 | 797 | // 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 | 802 | // Step 13: [1,2,3,4,5,4,6,4,5,4,5,4,5] - [4,5] pattern now repeats 3 times at | 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 | 88 | // For ApiKey responses, we need to check if it's Google ADC or regular API key | COMMENT |
| LOW⚡ | …s/forge_repo/src/provider/openai_responses/response.rs | 1827 | // Step 1: output_item.added with empty arguments (Spark sends "" initially) | COMMENT |
| LOW⚡ | …s/forge_repo/src/provider/openai_responses/response.rs | 1830 | // Step 2: function_call_arguments.done with full arguments (no deltas) | COMMENT |
| LOW⚡ | …s/forge_repo/src/provider/openai_responses/response.rs | 1839 | // Step 3: response.completed with usage | COMMENT |
| LOW | crates/forge_main/src/ui.rs | 3281 | // Step 2: Complete authentication (polls if needed for OAuth flows) | COMMENT |
| LOW | crates/forge_infra/src/auth/strategy.rs | 651 | // 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 | 474 | /// Preview the AI-generated commit message without committing. | COMMENT |
| HIGH | crates/forge_main/src/model.rs | 476 | #[strum(props(usage = "Preview AI-generated commit message"))] | COMMENT |
| HIGH | crates/forge_main/src/model.rs | 681 | /// 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 |