Repository Analysis

github/spec-kit

💫 Toolkit to help you get started with Spec-Driven Development

24.6 Moderate AI signal View on GitHub
24.6
Adjusted Score
24.6
Raw Score
100%
Time Factor
2026-05-30
Last Push
107,069
Stars
Python
Language
86,620
Lines of Code
309
Files
1919
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 0HIGH 42MEDIUM 138LOW 1739

Pattern Findings

1919 matches across 14 categories. Click a row to expand file-level details.

Hyper-Verbose Identifiers1486 hits · 1219 pts
SeverityFileLineSnippet
LOWtests/test_workflows.py114 def test_get_step_type_missing(self):
LOWtests/test_workflows.py119 def test_register_step_duplicate_raises(self):
LOWtests/test_workflows.py126 def test_register_step_empty_key_raises(self):
LOWtests/test_workflows.py98 def test_all_step_types_registered(self):
LOWtests/test_workflows.py144 def test_step_context_defaults(self):
LOWtests/test_workflows.py154 def test_step_context_with_data(self):
LOWtests/test_workflows.py166 def test_step_result_defaults(self):
LOWtests/test_workflows.py208 def test_step_output_reference(self):
LOWtests/test_workflows.py217 def test_string_interpolation(self):
LOWtests/test_workflows.py233 def test_comparison_not_equals(self):
LOWtests/test_workflows.py288 def test_condition_evaluation(self):
LOWtests/test_workflows.py296 def test_non_string_passthrough(self):
LOWtests/test_workflows.py336 def test_context_run_id_resolves(self):
LOWtests/test_workflows.py349 def test_context_run_id_defaults_to_empty_when_unset(self):
LOWtests/test_workflows.py362 def test_context_run_id_string_interpolation(self):
LOWtests/test_workflows.py421 def test_copilot_new_env_var_disables_yolo(self, monkeypatch):
LOWtests/test_workflows.py429 def test_copilot_deprecated_env_var_still_honoured(self, monkeypatch):
LOWtests/test_workflows.py445 def test_copilot_new_env_var_takes_precedence(self, monkeypatch):
LOWtests/test_workflows.py453 def test_ide_only_returns_none(self):
LOWtests/test_workflows.py498 def test_validate_missing_command(self):
LOWtests/test_workflows.py505 def test_step_override_integration(self):
LOWtests/test_workflows.py553 def test_dispatch_not_attempted_without_cli(self):
LOWtests/test_workflows.py576 def test_dispatch_with_mock_cli(self, tmp_path, monkeypatch):
LOWtests/test_workflows.py613 def test_dispatch_failure_returns_failed_status(self, tmp_path):
LOWtests/test_workflows.py670 def test_execute_with_step_integration(self):
LOWtests/test_workflows.py704 def test_dispatch_with_mock_cli(self, tmp_path):
LOWtests/test_workflows.py733 def test_validate_missing_prompt(self):
LOWtests/test_workflows.py775 def test_validate_missing_run(self):
LOWtests/test_workflows.py786 def test_execute_returns_paused(self):
LOWtests/test_workflows.py803 def test_validate_missing_message(self):
LOWtests/test_workflows.py810 def test_validate_invalid_on_reject(self):
LOWtests/test_workflows.py858 def test_validate_missing_condition(self):
LOWtests/test_workflows.py869 def test_execute_matches_case(self):
LOWtests/test_workflows.py890 def test_execute_falls_to_default(self):
LOWtests/test_workflows.py910 def test_execute_no_default_no_match(self):
LOWtests/test_workflows.py929 def test_validate_missing_expression(self):
LOWtests/test_workflows.py936 def test_validate_invalid_cases_and_default(self):
LOWtests/test_workflows.py953 def test_execute_condition_true(self):
LOWtests/test_workflows.py971 def test_execute_condition_false(self):
LOWtests/test_workflows.py989 def test_validate_missing_fields(self):
LOWtests/test_workflows.py997 def test_validate_invalid_max_iterations(self):
LOWtests/test_workflows.py1008 def test_execute_always_runs_once(self):
LOWtests/test_workflows.py1025 def test_execute_with_true_condition(self):
LOWtests/test_workflows.py1058 def test_validate_missing_fields(self):
LOWtests/test_workflows.py1066 def test_validate_steps_not_list(self):
LOWtests/test_workflows.py1103 def test_execute_non_list_items_resolves_empty(self):
LOWtests/test_workflows.py1118 def test_validate_missing_fields(self):
LOWtests/test_workflows.py1126 def test_validate_step_not_mapping(self):
LOWtests/test_workflows.py1141 def test_execute_collects_results(self):
LOWtests/test_workflows.py1160 def test_execute_multiple_wait_for(self):
LOWtests/test_workflows.py1181 def test_execute_missing_wait_for_step(self):
LOWtests/test_workflows.py1195 def test_validate_empty_wait_for(self):
LOWtests/test_workflows.py1202 def test_validate_wait_for_not_list(self):
LOWtests/test_workflows.py1385 def test_load_from_installed_id(self, sample_workflow_file, project_dir):
LOWtests/test_workflows.py1399 def test_execute_simple_workflow(self, project_dir):
LOWtests/test_workflows.py2207 def test_shell_run_resolves_run_id(self, project_dir):
LOWtests/test_workflows.py2442 def test_list_after_execution(self, project_dir):
LOWtests/test_workflows.py2546 def test_project_level_config(self, project_dir):
LOWtests/test_workflows.py2564 def test_validate_url_http_rejected(self, project_dir):
LOWtests/test_workflows.py2571 def test_validate_url_localhost_http_allowed(self, project_dir):
1426 more matches not shown…
Decorative Section Separators120 hits · 416 pts
SeverityFileLineSnippet
MEDIUMtests/test_workflows.py25# ---------------------------------------------------------------------------
MEDIUMtests/test_workflows.py27# ---------------------------------------------------------------------------
MEDIUMtests/conftest.py71# ---------------------------------------------------------------------------
MEDIUMtests/conftest.py73# ---------------------------------------------------------------------------
MEDIUMtests/test_setup_tasks.py115# ===========================================================================
MEDIUMtests/test_setup_tasks.py117# ===========================================================================
MEDIUMtests/test_setup_tasks.py421# ===========================================================================
MEDIUMtests/test_setup_tasks.py423# ===========================================================================
MEDIUMtests/test_setup_tasks.py24# ---------------------------------------------------------------------------
MEDIUMtests/test_setup_tasks.py26# ---------------------------------------------------------------------------
MEDIUMtests/test_setup_tasks.py85# ---------------------------------------------------------------------------
MEDIUMtests/test_setup_tasks.py87# ---------------------------------------------------------------------------
MEDIUMtests/test_setup_plan_no_overwrite.py80# ── Bash tests ────────────────────────────────────────────────────────────
MEDIUMtests/test_setup_plan_no_overwrite.py168# ── PowerShell tests ──────────────────────────────────────────────────────
MEDIUMtests/test_timestamp_branches.py278# ── check_feature_branch Tests ───────────────────────────────────────────────
MEDIUMtests/test_timestamp_branches.py343# ── find_feature_dir_by_prefix Tests ─────────────────────────────────────────
MEDIUMtests/test_timestamp_branches.py393# ── get_feature_paths + single-prefix integration ───────────────────────────
MEDIUMtests/test_timestamp_branches.py738# ── Dry-Run Tests ────────────────────────────────────────────────────────────
MEDIUMtests/test_timestamp_branches.py1146# ── Feature Directory Resolution Tests ───────────────────────────────────────
MEDIUMtests/test_timestamp_branches.py181# ── Timestamp Branch Tests ───────────────────────────────────────────────────
MEDIUMtests/test_timestamp_branches.py227# ── Sequential Branch Tests ──────────────────────────────────────────────────
MEDIUMtests/test_timestamp_branches.py439# ── get_current_branch Tests ─────────────────────────────────────────────────
MEDIUMtests/test_timestamp_branches.py450# ── No-git Tests ─────────────────────────────────────────────────────────────
MEDIUMtests/test_timestamp_branches.py464# ── E2E Flow Tests ───────────────────────────────────────────────────────────
MEDIUMtests/test_timestamp_branches.py498# ── Allow Existing Branch Tests ──────────────────────────────────────────────
MEDIUMtests/test_timestamp_branches.py967# ── PowerShell Dry-Run Tests ─────────────────────────────────────────────────
MEDIUMtests/test_timestamp_branches.py1044# ── GIT_BRANCH_NAME Override Tests ──────────────────────────────────────────
MEDIUMtests/test_timestamp_branches.py1309# ── Description Quoting Tests (issue #2339) ──────────────────────────────────
MEDIUMtests/test_authentication.py69# ---------------------------------------------------------------------------
MEDIUMtests/test_authentication.py71# ---------------------------------------------------------------------------
MEDIUMtests/test_authentication.py328# ---------------------------------------------------------------------------
MEDIUMtests/test_authentication.py330# ---------------------------------------------------------------------------
MEDIUMtests/test_authentication.py368# ---------------------------------------------------------------------------
MEDIUMtests/test_authentication.py370# ---------------------------------------------------------------------------
MEDIUMtests/test_authentication.py529# ---------------------------------------------------------------------------
MEDIUMtests/test_authentication.py531# ---------------------------------------------------------------------------
MEDIUMtests/test_authentication.py685# ---------------------------------------------------------------------------
MEDIUMtests/test_authentication.py687# ---------------------------------------------------------------------------
MEDIUMtests/test_authentication.py757# ---------------------------------------------------------------------------
MEDIUMtests/test_authentication.py759# ---------------------------------------------------------------------------
MEDIUMtests/test_authentication.py33# ---------------------------------------------------------------------------
MEDIUMtests/test_authentication.py35# ---------------------------------------------------------------------------
MEDIUMtests/test_authentication.py284# ---------------------------------------------------------------------------
MEDIUMtests/test_authentication.py286# ---------------------------------------------------------------------------
MEDIUMtests/test_authentication.py407# ---------------------------------------------------------------------------
MEDIUMtests/test_authentication.py409# ---------------------------------------------------------------------------
MEDIUMtests/test_authentication.py630# ---------------------------------------------------------------------------
MEDIUMtests/test_authentication.py632# ---------------------------------------------------------------------------
MEDIUMtests/test_authentication.py811# ---------------------------------------------------------------------------
MEDIUMtests/test_authentication.py813# ---------------------------------------------------------------------------
MEDIUMtests/test_check_prerequisites_paths_only.py67# ── Bash tests ────────────────────────────────────────────────────────────
MEDIUMtests/test_check_prerequisites_paths_only.py145# ── PowerShell tests ──────────────────────────────────────────────────────
MEDIUMtests/extensions/git/test_git_extension.py173# ── Install Tests ────────────────────────────────────────────────────────────
MEDIUMtests/extensions/git/test_git_extension.py214# ── initialize-repo.sh Tests ─────────────────────────────────────────────────
MEDIUMtests/extensions/git/test_git_extension.py273# ── create-new-feature.sh Tests ──────────────────────────────────────────────
MEDIUMtests/extensions/git/test_git_extension.py34# ── Helpers ──────────────────────────────────────────────────────────────────
MEDIUMtests/extensions/git/test_git_extension.py127# ── Manifest Tests ───────────────────────────────────────────────────────────
MEDIUMtests/extensions/git/test_git_extension.py381# ── auto-commit.sh Tests ─────────────────────────────────────────────────────
MEDIUMtests/extensions/git/test_git_extension.py589# ── auto-commit.ps1 CRLF warning tests (issue #2253) ────────────────────────
MEDIUMtests/extensions/git/test_git_extension.py739# ── git-common.sh Tests ──────────────────────────────────────────────────────
60 more matches not shown…
Cross-File Repetition21 hits · 105 pts
SeverityFileLineSnippet
HIGHtests/integrations/test_integration_base_markdown.py0the generated plan command must reference this integration's context file.
HIGHtests/integrations/test_integration_base_toml.py0the generated plan command must reference this integration's context file.
HIGHtests/integrations/test_integration_base_yaml.py0the generated plan command must reference this integration's context file.
HIGHtests/integrations/test_integration_base_markdown.py0init-options.json must include context_file for the active integration.
HIGHtests/integrations/test_integration_base_skills.py0init-options.json must include context_file for the active integration.
HIGHtests/integrations/test_integration_base_toml.py0init-options.json must include context_file for the active integration.
HIGHtests/integrations/test_integration_base_yaml.py0init-options.json must include context_file for the active integration.
HIGHtests/integrations/test_integration_base_markdown.py0build the expected file list for this integration + script variant.
HIGHtests/integrations/test_integration_base_toml.py0build the expected file list for this integration + script variant.
HIGHtests/integrations/test_integration_base_yaml.py0build the expected file list for this integration + script variant.
HIGHtests/integrations/test_integration_base_markdown.py0every file produced by specify init --integration <key> --script sh.
HIGHtests/integrations/test_integration_base_skills.py0every file produced by specify init --integration <key> --script sh.
HIGHtests/integrations/test_integration_base_toml.py0every file produced by specify init --integration <key> --script sh.
HIGHtests/integrations/test_integration_base_yaml.py0every file produced by specify init --integration <key> --script sh.
HIGHtests/integrations/test_integration_base_markdown.py0every file produced by specify init --integration <key> --script ps.
HIGHtests/integrations/test_integration_base_skills.py0every file produced by specify init --integration <key> --script ps.
HIGHtests/integrations/test_integration_base_toml.py0every file produced by specify init --integration <key> --script ps.
HIGHtests/integrations/test_integration_base_yaml.py0every file produced by specify init --integration <key> --script ps.
HIGHtests/integrations/test_integration_claude.py0skills without hook sections should not get the note.
HIGHtests/integrations/test_integration_agy.py0skills without hook sections should not get the note.
HIGHtests/integrations/test_integration_codex.py0skills without hook sections should not get the note.
Docstring Block Structure17 hits · 85 pts
SeverityFileLineSnippet
HIGHsrc/specify_cli/presets.py559Check if preset is compatible with current spec-kit version. Args: manifest: Preset manifest
HIGHsrc/specify_cli/presets.py1503Install preset from a local directory. Args: source_dir: Path to preset directory speck
HIGHsrc/specify_cli/presets.py1622Install preset from ZIP file. Args: zip_path: Path to preset ZIP file speckit_version:
HIGHsrc/specify_cli/presets.py1879Load catalog stack configuration from a YAML file. Args: config_path: Path to preset-catalogs.yml
HIGHsrc/specify_cli/presets.py2051Fetch a single catalog with per-URL caching. Args: entry: PresetCatalogEntry describing the catalog
HIGHsrc/specify_cli/presets.py2142Fetch preset catalog from URL or cache. Args: force_refresh: If True, bypass cache and fetch from n
HIGHsrc/specify_cli/presets.py2272Download preset ZIP from catalog. Args: pack_id: ID of the preset to download target_di
HIGHsrc/specify_cli/__init__.py2643Resolve an extension argument (ID or display name) to an installed extension. Args: argument: Extension ID
HIGHsrc/specify_cli/extensions.py615Collect command and alias names declared by a manifest. Performs install-time validation for extension-specific
HIGHsrc/specify_cli/extensions.py1119Check if extension is compatible with current spec-kit version. Args: manifest: Extension manifest
HIGHsrc/specify_cli/extensions.py1156Install extension from a local directory. Args: source_dir: Path to extension directory
HIGHsrc/specify_cli/extensions.py1240Install extension from ZIP file. Args: zip_path: Path to extension ZIP file speckit_ver
HIGHsrc/specify_cli/extensions.py1824Fetch a single catalog with per-URL caching. For the DEFAULT_CATALOG_URL, uses legacy cache files (self.cache_f
HIGHsrc/specify_cli/extensions.py1895Fetch and merge extensions from all active catalogs. Higher-priority (lower priority number) catalogs win on co
HIGHsrc/specify_cli/extensions.py1965Fetch extension catalog from URL or cache. Args: force_refresh: If True, bypass cache and fetch fro
HIGHsrc/specify_cli/extensions.py2088Download extension ZIP from catalog. Args: extension_id: ID of the extension to download
HIGHsrc/specify_cli/integrations/forge/__init__.py20Convert command name to Forge-compatible hyphenated format. Forge requires command names to use hyphens instead
Unused Imports84 hits · 73 pts
SeverityFileLineSnippet
LOWtests/test_workflows.py13
LOWtests/test_utils_assets_imports.py2
LOWtests/test_utils_assets_imports.py2
LOWtests/test_utils_assets_imports.py2
LOWtests/test_authentication.py14
LOWtests/test_extension_skills.py21
LOWtests/test_console_imports.py2
LOWtests/test_console_imports.py2
LOWtests/test_console_imports.py2
LOWtests/test_console_imports.py2
LOWtests/test_console_imports.py2
LOWtests/auth_helpers.py3
LOWtests/integrations/test_integration_subcommand.py6
LOWsrc/specify_cli/_console.py8
LOWsrc/specify_cli/_version.py10
LOWsrc/specify_cli/catalogs.py9
LOWsrc/specify_cli/_assets.py6
LOWsrc/specify_cli/__init__.py63
LOWsrc/specify_cli/__init__.py63
LOWsrc/specify_cli/__init__.py63
LOWsrc/specify_cli/__init__.py63
LOWsrc/specify_cli/__init__.py73
LOWsrc/specify_cli/__init__.py81
LOWsrc/specify_cli/__init__.py81
LOWsrc/specify_cli/__init__.py81
LOWsrc/specify_cli/__init__.py81
LOWsrc/specify_cli/__init__.py81
LOWsrc/specify_cli/__init__.py81
LOWsrc/specify_cli/__init__.py81
LOWsrc/specify_cli/__init__.py92
LOWsrc/specify_cli/__init__.py92
LOWsrc/specify_cli/__init__.py92
LOWsrc/specify_cli/__init__.py98
LOWsrc/specify_cli/__init__.py98
LOWsrc/specify_cli/__init__.py98
LOWsrc/specify_cli/shared_infra.py3
LOWsrc/specify_cli/integration_runtime.py3
LOWsrc/specify_cli/integration_state.py3
LOWsrc/specify_cli/_agent_config.py2
LOWsrc/specify_cli/_utils.py2
LOWsrc/specify_cli/workflows/catalog.py10
LOWsrc/specify_cli/workflows/expressions.py7
LOWsrc/specify_cli/workflows/__init__.py12
LOWsrc/specify_cli/workflows/engine.py11
LOWsrc/specify_cli/workflows/base.py9
LOWsrc/specify_cli/workflows/steps/shell/__init__.py3
LOWsrc/specify_cli/workflows/steps/prompt/__init__.py3
LOWsrc/specify_cli/workflows/steps/switch/__init__.py3
LOWsrc/specify_cli/workflows/steps/gate/__init__.py3
LOWsrc/specify_cli/workflows/steps/fan_out/__init__.py3
LOWsrc/specify_cli/workflows/steps/command/__init__.py3
LOWsrc/specify_cli/workflows/steps/if_then/__init__.py3
LOWsrc/specify_cli/workflows/steps/fan_in/__init__.py3
LOWsrc/specify_cli/workflows/steps/while_loop/__init__.py3
LOWsrc/specify_cli/workflows/steps/do_while/__init__.py3
LOWsrc/specify_cli/integrations/catalog.py10
LOWsrc/specify_cli/integrations/manifest.py9
LOWsrc/specify_cli/integrations/__init__.py7
LOWsrc/specify_cli/integrations/base.py14
LOWsrc/specify_cli/integrations/devin/__init__.py11
24 more matches not shown…
Self-Referential Comments18 hits · 58 pts
SeverityFileLineSnippet
MEDIUMtests/test_setup_tasks.py155 # Create the override
MEDIUMtests/test_extensions.py1014 # Create a config file
MEDIUMtests/test_presets.py3426 # Create a template in the preset directory
MEDIUMtests/test_presets.py3728 # Create a preset command dir with a wrap-strategy command
MEDIUMtests/test_presets.py4821 # Create a gemini commands dir so reconciliation writes there
MEDIUMtests/test_extension_registration.py69 # Create a mock manifest
MEDIUMtests/test_extension_registration.py117 # Create a manifest with hooks
MEDIUMtests/test_extension_registration.py175 # Create a corrupted config (root is a list)
MEDIUMtests/test_extension_registration.py330 # Create a manifest with a hook for the same event
MEDIUMtests/extensions/git/test_git_extension.py409 # Create a file to commit
MEDIUMtests/integrations/test_integration_hermes.py184 # Create a foreign skill in the global dir first
MEDIUMtests/integrations/test_integration_forge.py296 # Create a mock extension command file
MEDIUMtests/integrations/test_integration_forge.py302 # Create a test command with dot notation name
MEDIUMtests/integrations/test_integration_forge.py347 # Create a mock extension command file
MEDIUMtests/integrations/test_integration_forge.py395 # Create a mock extension command file
MEDIUMtests/integrations/test_integration_opencode.py76 # Create a source command file for the registrar
MEDIUMtests/integrations/test_integration_opencode.py163 # Create a source command file for the registrar
MEDIUMscripts/bash/setup-plan.sh65 # Create a basic plan file if template doesn't exist
Deep Nesting70 hits · 51 pts
SeverityFileLineSnippet
LOWsrc/specify_cli/_console.py142
LOWsrc/specify_cli/_console.py85
LOWsrc/specify_cli/_console.py193
LOWsrc/specify_cli/presets.py589
LOWsrc/specify_cli/presets.py701
LOWsrc/specify_cli/presets.py865
LOWsrc/specify_cli/presets.py959
LOWsrc/specify_cli/presets.py1209
LOWsrc/specify_cli/presets.py1616
LOWsrc/specify_cli/presets.py1672
LOWsrc/specify_cli/presets.py2448
LOWsrc/specify_cli/presets.py2701
LOWsrc/specify_cli/presets.py2899
LOWsrc/specify_cli/presets.py2949
LOWsrc/specify_cli/_assets.py104
LOWsrc/specify_cli/__init__.py226
LOWsrc/specify_cli/__init__.py592
LOWsrc/specify_cli/__init__.py797
LOWsrc/specify_cli/__init__.py1049
LOWsrc/specify_cli/__init__.py1276
LOWsrc/specify_cli/__init__.py1736
LOWsrc/specify_cli/__init__.py2054
LOWsrc/specify_cli/__init__.py2232
LOWsrc/specify_cli/__init__.py2694
LOWsrc/specify_cli/__init__.py2953
LOWsrc/specify_cli/__init__.py3216
LOWsrc/specify_cli/__init__.py3295
LOWsrc/specify_cli/__init__.py3479
LOWsrc/specify_cli/__init__.py3907
LOWsrc/specify_cli/__init__.py3946
LOWsrc/specify_cli/__init__.py4232
LOWsrc/specify_cli/__init__.py4521
LOWsrc/specify_cli/agents.py433
LOWsrc/specify_cli/agents.py751
LOWsrc/specify_cli/agents.py810
LOWsrc/specify_cli/agents.py868
LOWsrc/specify_cli/extensions.py614
LOWsrc/specify_cli/extensions.py689
LOWsrc/specify_cli/extensions.py822
LOWsrc/specify_cli/extensions.py984
LOWsrc/specify_cli/extensions.py1234
LOWsrc/specify_cli/extensions.py1294
LOWsrc/specify_cli/extensions.py1377
LOWsrc/specify_cli/extensions.py1823
LOWsrc/specify_cli/extensions.py2581
LOWsrc/specify_cli/shared_infra.py250
LOWsrc/specify_cli/_utils.py123
LOWsrc/specify_cli/_utils.py133
LOWsrc/specify_cli/workflows/catalog.py310
LOWsrc/specify_cli/workflows/catalog.py369
LOWsrc/specify_cli/workflows/expressions.py29
LOWsrc/specify_cli/workflows/engine.py102
LOWsrc/specify_cli/workflows/engine.py193
LOWsrc/specify_cli/workflows/engine.py554
LOWsrc/specify_cli/workflows/engine.py750
LOWsrc/specify_cli/workflows/engine.py829
LOWsrc/specify_cli/integrations/base.py552
LOWsrc/specify_cli/integrations/base.py713
LOWsrc/specify_cli/integrations/base.py1512
LOWsrc/specify_cli/integrations/copilot/__init__.py285
10 more matches not shown…
Redundant / Tautological Comments30 hits · 45 pts
SeverityFileLineSnippet
LOWtests/test_extensions.py330 # Set ext_id to match the legacy namespace so correction is valid
LOWextensions/git/scripts/bash/git-common.sh6# Check if we have git available at the repo root
LOWextensions/git/scripts/bash/auto-commit.sh34# Check if git is available
LOWextensions/git/scripts/bash/auto-commit.sh106 # Check if event section existed at all
LOWextensions/git/scripts/bash/auto-commit.sh120# Check if there are changes to commit
LOWextensions/git/scripts/bash/initialize-repo.sh37# Check if git is available
LOWextensions/git/scripts/bash/initialize-repo.sh43# Check if already a git repo
LOWextensions/git/scripts/bash/create-new-feature.sh249# Check if git is available at this repo root
LOWscripts/bash/common.sh104# Check if we have git available at the spec-kit root level
LOWscripts/bash/common.sh111 # Check if .git exists (directory or file for worktrees/submodules)
LOWscripts/bash/common.sh305# Check if jq is available for safe JSON construction
LOWscripts/bash/common.sh576 # Check if any layer uses a non-replace strategy
LOWscripts/bash/setup-plan.sh70# Output results
LOWscripts/bash/setup-tasks.sh65# Output results
LOWscripts/bash/check-prerequisites.sh156# Output results
LOWscripts/bash/create-new-feature.sh32 # Check if the next argument is another option (starts with --)
LOWscripts/bash/create-new-feature.sh197# Check if git is available at this repo root (not a parent)
LOWscripts/bash/create-new-feature.sh333 # Check if branch already exists
LOWsrc/specify_cli/presets.py995 # Check if any preset previously registered this skill
LOWsrc/specify_cli/__init__.py2303 # Check if installed locally first
LOWsrc/specify_cli/__init__.py2377 # Check if preset is installed
LOWsrc/specify_cli/__init__.py2415 # Check if preset is installed
LOWsrc/specify_cli/__init__.py2448 # Check if preset is installed
LOWsrc/specify_cli/__init__.py3056 # Check if extension exists in catalog (supports both ID and display name)
LOWsrc/specify_cli/__init__.py3539 # Check if installation is allowed from this catalog
LOWsrc/specify_cli/extensions.py889 # Check if skill already exists before creating the directory
LOWsrc/specify_cli/extensions.py1184 # Check if already installed
LOWsrc/specify_cli/extensions.py1281 # Check if manifest is in a subdirectory
LOWsrc/specify_cli/workflows/steps/command/__init__.py129 # Check if the integration supports CLI dispatch
LOWsrc/specify_cli/workflows/steps/command/__init__.py133 # Check if the CLI tool is actually installed
Excessive Try-Catch Wrapping46 hits · 38 pts
SeverityFileLineSnippet
LOWtests/integrations/test_integration_base_toml.py310 except Exception as exc:
LOWtests/integrations/test_integration_base_yaml.py158 except Exception as exc:
LOWscripts/bash/common.sh373except Exception:
LOWscripts/bash/common.sh461except Exception:
LOWscripts/bash/common.sh492except Exception:
LOWsrc/specify_cli/_console.py82 except Exception:
LOWsrc/specify_cli/presets.py783 except Exception:
LOWsrc/specify_cli/presets.py908 except Exception:
LOWsrc/specify_cli/presets.py1082 except Exception:
LOWsrc/specify_cli/presets.py1567 except Exception:
LOWsrc/specify_cli/presets.py1606 except Exception as exc:
LOWsrc/specify_cli/presets.py1739 except Exception as exc:
LOWsrc/specify_cli/_assets.py108 except Exception:
LOWsrc/specify_cli/_assets.py117 except Exception:
LOWsrc/specify_cli/__init__.py1512 except Exception as ext_err:
LOWsrc/specify_cli/__init__.py1521 except Exception as exc:
LOWsrc/specify_cli/__init__.py1525 except Exception as rollback_err:
LOWsrc/specify_cli/__init__.py247 except Exception:
LOWsrc/specify_cli/__init__.py264 except Exception as e:
LOWsrc/specify_cli/__init__.py1018 except Exception as exc:
LOWsrc/specify_cli/__init__.py1022 except Exception as rollback_err:
LOWsrc/specify_cli/__init__.py1412 except Exception as ext_err:
LOWsrc/specify_cli/__init__.py1701 except Exception as exc:
LOWsrc/specify_cli/__init__.py2257 except Exception as exc:
LOWsrc/specify_cli/__init__.py2559 except Exception as e:
LOWsrc/specify_cli/__init__.py2611 except Exception:
LOWsrc/specify_cli/__init__.py2877 except Exception as e:
LOWsrc/specify_cli/__init__.py2929 except Exception:
LOWsrc/specify_cli/__init__.py3770 except Exception as e:
LOWsrc/specify_cli/__init__.py3884 except Exception as rollback_error:
LOWsrc/specify_cli/__init__.py4095 except Exception as exc:
LOWsrc/specify_cli/__init__.py4132 except Exception as exc:
LOWsrc/specify_cli/__init__.py4314 except Exception as exc:
LOWsrc/specify_cli/__init__.py4415 except Exception as exc:
LOWsrc/specify_cli/extensions.py2725 except Exception:
LOWsrc/specify_cli/_utils.py164 except Exception:
LOWsrc/specify_cli/_utils.py186 except Exception as e:
LOWsrc/specify_cli/_utils.py222 except Exception as e:
LOWsrc/specify_cli/workflows/catalog.py343 except Exception as exc:
LOWsrc/specify_cli/workflows/engine.py482 except Exception as exc:
LOWsrc/specify_cli/workflows/engine.py542 except Exception as exc:
LOWsrc/specify_cli/commands/init.py88 except Exception as e:
LOWsrc/specify_cli/commands/init.py494 except Exception as ext_err:
LOWsrc/specify_cli/commands/init.py534 except Exception as wf_err:
LOWsrc/specify_cli/commands/init.py601 except Exception as preset_err:
LOWsrc/specify_cli/commands/init.py613 except Exception as e:
Over-Commented Block21 hits · 19 pts
SeverityFileLineSnippet
LOWspec-driven.md121
LOWtests/integrations/test_extra_args.py401 ]
LOWtests/integrations/test_extra_args.py481 assert "--sandbox" in capture.captured_args
LOWextensions/template/config-template.yml61
LOWscripts/bash/check-prerequisites.sh1#!/usr/bin/env bash
LOW.github/workflows/add-community-extension.lock.yml1# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"f1073a236eb41f9fc2b5b8c1e58c25e02b5a6d18d242887636acc9007dd
LOW.github/workflows/add-community-extension.lock.yml21# Not all edits will cause changes to this file.
LOW.github/workflows/add-community-extension.lock.yml41# - github/gh-aw-actions/setup@b11be78086764c43fa463398aed7ffdcf40549c1 # v0.77.0
LOW.github/workflows/add-community-extension.lock.yml781 - name: Clean credentials
LOW.github/workflows/add-community-extension.lock.yml801 # --allow-tool shell(git rm:*)
LOW.github/workflows/add-community-preset.lock.yml1# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"f6cbeb7bc3ee4de1c2b3963fbf21525d0add0425a6807a8335f8f9d93e0
LOW.github/workflows/add-community-preset.lock.yml21# Not all edits will cause changes to this file.
LOW.github/workflows/add-community-preset.lock.yml41# - github/gh-aw-actions/setup@b11be78086764c43fa463398aed7ffdcf40549c1 # v0.77.0
LOW.github/workflows/add-community-preset.lock.yml781 - name: Clean credentials
LOW.github/workflows/add-community-preset.lock.yml801 # --allow-tool shell(git rm:*)
LOWpresets/scaffold/preset.yml21
LOWpresets/scaffold/preset.yml41 # $CORE_SCRIPT placeholder (scripts), replaced with lower-priority content
LOWpresets/scaffold/preset.yml61 #
LOWsrc/specify_cli/presets.py61 short_name = short_name[len("speckit."):]
LOWsrc/specify_cli/__init__.py1#!/usr/bin/env python3
LOWsrc/specify_cli/workflows/engine.py761 # Resolve sentinels for explicitly-provided values too: a
Cross-Language Confusion2 hits · 10 pts
SeverityFileLineSnippet
HIGHtests/test_extension_update_hardening.py80 # Write config with hooks: null; get_project_config() normalizes this to {}
HIGHtests/test_extension_registration.py303 """Regression: hooks: {after_tasks: null} must not crash in unregister_hooks()."""
Magic Placeholder Names1 hit · 5 pts
SeverityFileLineSnippet
HIGHextensions/template/EXAMPLE-README.md52 api_key: "your-api-key"
Synthetic Comment Markers1 hit · 5 pts
SeverityFileLineSnippet
HIGH.github/PULL_REQUEST_TEMPLATE.md21<!-- If you used AI, briefly describe how (e.g., "Code generated by Copilot", "Consulted ChatGPT for approach"): -->
Verbosity Indicators2 hits · 3 pts
SeverityFileLineSnippet
LOWsrc/specify_cli/extensions.py284 # Step 1: apply any rename from the auto-correction pass.
LOWsrc/specify_cli/extensions.py286 # Step 2: lift alias-form '{ext_id}.cmd' to canonical 'speckit.{ext_id}.cmd'.