Repository Analysis

github/spec-kit

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

26.5 Moderate AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of github/spec-kit, a Python project with 120,771 GitHub stars. SynthScan v2.0 examined 138,925 lines of code across 436 source files, recording 3399 pattern matches distributed across 20 syntactic categories. The overall adjusted score of 26.5 places this repository in the Moderate AI signal 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).

26.5
Adjusted Score
26.5
Raw Score
100%
Time Factor
2026-07-13
Last Push
120.8K
Stars
Python
Language
138.9K
Lines of Code
436
Files
3.4K
Pattern Hits
2026-07-14
Scan Date
0.14
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

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.

Severity Breakdown

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.

CRITICAL 0HIGH 61MEDIUM 218LOW 3120

Directory Score Breakdown

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.

Pattern Findings

The scanner identified 3399 distinct pattern matches across 20 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.

Hyper-Verbose Identifiers2649 hits · 2152 pts
SeverityFileLineSnippetContext
LOWtests/test_shared_infra_integrity.py23def test_matching_digest_passes():CODE
LOWtests/test_shared_infra_integrity.py30def test_mismatch_raises_error_cls():CODE
LOWtests/test_shared_infra_integrity.py43def test_comparison_is_case_insensitive():CODE
LOWtests/test_shared_infra_integrity.py50def test_malformed_digest_is_rejected():CODE
LOWtests/test_shared_infra_integrity.py75def test_absent_digest_skips_and_logs_debug(caplog):CODE
LOWtests/test_shared_infra_integrity.py90def test_blank_declared_digest_is_rejected():CODE
LOWtests/test_check_prerequisites_python_parity.py149def test_python_json_output_matches_bash(prereq_repo: Path, args: tuple[str, ...]) -> None:CODE
LOWtests/test_check_prerequisites_python_parity.py169def test_python_text_output_matches_bash(prereq_repo: Path) -> None:CODE
LOWtests/test_check_prerequisites_python_parity.py185def test_python_help_output_matches_bash(prereq_repo: Path) -> None:CODE
LOWtests/test_check_prerequisites_python_parity.py195def test_python_unknown_option_matches_bash_error_shape(prereq_repo: Path) -> None:CODE
LOWtests/test_check_prerequisites_python_parity.py223def test_python_json_output_matches_powershell(CODE
LOWtests/test_check_prerequisites_python_parity.py244def test_python_repo_copy_script_file_fallback_finds_repo_root(tmp_path: Path) -> None:CODE
LOWtests/test_check_prerequisites_python_parity.py265def test_python_paths_only_does_not_persist_feature_json(prereq_repo: Path) -> None:CODE
LOWtests/test_check_prerequisites_python_parity.py281def test_python_normal_mode_persists_feature_json(prereq_repo: Path) -> None:CODE
LOWtests/test_check_prerequisites_python_parity.py308def test_python_negative_errors_are_stderr_only(CODE
LOWtests/test_check_prerequisites_python_parity.py332def test_python_branch_falls_back_to_feature_dir_basename(prereq_repo: Path) -> None:CODE
LOWtests/test_workflows.py118 def test_get_step_type_missing(self):CODE
LOWtests/test_workflows.py123 def test_register_step_duplicate_raises(self):CODE
LOWtests/test_workflows.py130 def test_register_step_empty_key_raises(self):CODE
LOWtests/test_workflows.py212 def test_step_output_reference(self):CODE
LOWtests/test_workflows.py221 def test_string_interpolation(self):CODE
LOWtests/test_workflows.py229 def test_multi_expression_no_surrounding_text(self):CODE
LOWtests/test_workflows.py512 def test_filter_from_json_parses_object(self):CODE
LOWtests/test_workflows.py522 def test_filter_from_json_invalid_json_raises(self):CODE
LOWtests/test_workflows.py531 def test_filter_from_json_non_string_raises(self):CODE
LOWtests/test_workflows.py540 def test_filter_from_json_rejects_malformed_forms(self):CODE
LOWtests/test_workflows.py1554 def test_validate_rejects_non_positive_timeout(self):CODE
LOWtests/test_workflows.py1562 def test_validate_rejects_non_numeric_timeout(self):CODE
LOWtests/test_workflows.py1572 def test_validate_rejects_non_finite_timeout(self):CODE
LOWtests/test_workflows.py2528 def test_validate_empty_wait_for(self):CODE
LOWtests/test_workflows.py2535 def test_validate_wait_for_not_list(self):CODE
LOWtests/test_workflows.py2543 def test_validate_rejects_non_mapping_output(self, bad_output):CODE
LOWtests/test_workflows.py2609 def test_sequential_default_preserves_order(self, tmp_path):CODE
LOWtests/test_workflows.py2613 def test_concurrent_runs_all_items_in_item_order(self, tmp_path):CODE
LOWtests/test_workflows.py2617 def test_sequential_and_concurrent_agree(self, tmp_path):CODE
LOWtests/test_workflows.py2623 def test_shuffled_completion_preserves_item_order(self, tmp_path):CODE
LOWtests/test_workflows.py2665 def test_invalid_max_concurrency_coerces_to_sequential(self, tmp_path, bad):CODE
LOWtests/test_workflows.py2669 def test_string_max_concurrency_is_honored(self, tmp_path):CODE
LOWtests/test_workflows.py2673 def test_context_item_isolation_across_threads(self, tmp_path):CODE
LOWtests/test_workflows.py2682 def test_concurrent_halt_status_not_clobbered_by_later_item(self, tmp_path):CODE
LOWtests/test_workflows.py5571 def test_remove_catalog_invalid_index(self, project_dir):CODE
LOWtests/test_workflows.py5580 def test_remove_catalog_no_config(self, project_dir):CODE
LOWtests/test_workflows.py5587 def test_add_catalog_wraps_write_oserror(self, project_dir, monkeypatch):CODE
LOWtests/test_workflows.py102 def test_all_step_types_registered(self):CODE
LOWtests/test_workflows.py148 def test_step_context_defaults(self):CODE
LOWtests/test_workflows.py158 def test_step_context_with_data(self):CODE
LOWtests/test_workflows.py170 def test_step_result_defaults(self):CODE
LOWtests/test_workflows.py241 def test_multi_expression_adjacent_no_separator(self):CODE
LOWtests/test_workflows.py250 def test_single_expression_with_literal_braces_preserves_type(self):CODE
LOWtests/test_workflows.py263 def test_multi_expression_with_literal_close_brace_in_argument(self):CODE
LOWtests/test_workflows.py285 def test_multi_expression_with_literal_open_brace_in_argument(self):CODE
LOWtests/test_workflows.py297 def test_multi_expression_unbalanced_quote_still_raises(self):CODE
LOWtests/test_workflows.py325 def test_comparison_not_equals(self):CODE
LOWtests/test_workflows.py345 def test_ordering_comparison_of_non_numeric_strings(self):CODE
LOWtests/test_workflows.py388 def test_list_literal_preserves_quoted_commas(self):CODE
LOWtests/test_workflows.py406 def test_operator_splitting_is_quote_aware(self):CODE
LOWtests/test_workflows.py442 def test_pipe_detection_is_quote_aware(self):CODE
LOWtests/test_workflows.py463 def test_membership_against_non_iterable_is_false_not_error(self):CODE
LOWtests/test_workflows.py565 def test_filter_unknown_name_raises(self):CODE
LOWtests/test_workflows.py577 def test_filter_unknown_name_with_args_raises(self):CODE
2589 more matches not shown…
Decorative Section Separators183 hits · 645 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_workflows.py26# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_workflows.py28# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/conftest.py71# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/conftest.py73# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_self_upgrade_execution.py17# ===========================================================================COMMENT
MEDIUMtests/test_self_upgrade_execution.py19# ===========================================================================COMMENT
MEDIUMtests/test_self_upgrade_detection.py599# ===========================================================================COMMENT
MEDIUMtests/test_self_upgrade_detection.py601# ===========================================================================COMMENT
MEDIUMtests/test_setup_tasks.py181# ===========================================================================COMMENT
MEDIUMtests/test_setup_tasks.py183# ===========================================================================COMMENT
MEDIUMtests/test_setup_tasks.py667# ===========================================================================COMMENT
MEDIUMtests/test_setup_tasks.py669# ===========================================================================COMMENT
MEDIUMtests/test_setup_tasks.py26# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_setup_tasks.py28# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_setup_tasks.py150# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_setup_tasks.py152# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_setup_tasks.py907# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_setup_tasks.py910# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_live_transient_windows.py18# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_live_transient_windows.py20# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_live_transient_windows.py63# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_live_transient_windows.py65# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_setup_plan_no_overwrite.py90# ── Bash tests ────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_setup_plan_no_overwrite.py178# ── PowerShell tests ──────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_timestamp_branches.py357# ── check_feature_branch Tests ───────────────────────────────────────────────COMMENT
MEDIUMtests/test_timestamp_branches.py371# ── find_feature_dir_by_prefix Tests ─────────────────────────────────────────COMMENT
MEDIUMtests/test_timestamp_branches.py382# ── get_feature_paths + single-prefix integration ───────────────────────────COMMENT
MEDIUMtests/test_timestamp_branches.py655# ── Dry-Run Tests ────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_timestamp_branches.py1101# ── Feature Directory Resolution Tests ───────────────────────────────────────COMMENT
MEDIUMtests/test_timestamp_branches.py179# ── Timestamp Branch Tests ───────────────────────────────────────────────────COMMENT
MEDIUMtests/test_timestamp_branches.py225# ── Sequential Branch Tests ──────────────────────────────────────────────────COMMENT
MEDIUMtests/test_timestamp_branches.py425# ── get_current_branch Tests ─────────────────────────────────────────────────COMMENT
MEDIUMtests/test_timestamp_branches.py436# ── No-git Tests ─────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_timestamp_branches.py449# ── E2E Flow Tests ───────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_timestamp_branches.py516# ── Allow Existing Branch Tests ──────────────────────────────────────────────COMMENT
MEDIUMtests/test_timestamp_branches.py869# ── PowerShell Dry-Run Tests ─────────────────────────────────────────────────COMMENT
MEDIUMtests/test_timestamp_branches.py953# ── Short-Word / Acronym Branch-Name Tests ──────────────────────────────────COMMENT
MEDIUMtests/test_timestamp_branches.py999# ── GIT_BRANCH_NAME Override Tests ──────────────────────────────────────────COMMENT
MEDIUMtests/test_timestamp_branches.py1257# ── Description Quoting Tests (issue #2339) ──────────────────────────────────COMMENT
MEDIUMtests/test_self_upgrade_guidance.py13# ===========================================================================COMMENT
MEDIUMtests/test_self_upgrade_guidance.py15# ===========================================================================COMMENT
MEDIUMtests/test_init_dir.py105# ── Bash: positive cases ────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_init_dir.py340# ubuntu/windows runners ship pwsh, so these DO run there) ─────────────────COMMENT
MEDIUMtests/test_init_dir.py189# ── Bash: negative / contract cases ─────────────────────────────────────────COMMENT
MEDIUMtests/test_init_dir.py282# ── Bash: bundled Git extension entrypoint ──────────────────────────────────COMMENT
MEDIUMtests/test_authentication.py69# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_authentication.py71# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_authentication.py342# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_authentication.py344# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_authentication.py382# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_authentication.py384# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_authentication.py543# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_authentication.py545# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_authentication.py709# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_authentication.py711# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_authentication.py780# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_authentication.py782# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_authentication.py935# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_authentication.py937# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_authentication.py33# ---------------------------------------------------------------------------COMMENT
123 more matches not shown…
Cross-File Repetition34 hits · 170 pts
SeverityFileLineSnippetContext
HIGHtests/integrations/test_integration_base_markdown.py0the generated plan skill must not carry a context-file placeholder. agent context files are owned entirely by the opt-inSTRING
HIGHtests/integrations/test_integration_base_toml.py0the generated plan skill must not carry a context-file placeholder. agent context files are owned entirely by the opt-inSTRING
HIGHtests/integrations/test_integration_base_yaml.py0the generated plan skill must not carry a context-file placeholder. agent context files are owned entirely by the opt-inSTRING
HIGHtests/integrations/test_integration_base_skills.py0the generated plan skill must not carry a context-file placeholder. agent context files are owned entirely by the opt-inSTRING
HIGHtests/integrations/test_integration_base_markdown.py0setup must not create or manage any agent context file — that is owned entirely by the opt-in agent-context extension.STRING
HIGHtests/integrations/test_integration_base_skills.py0setup must not create or manage any agent context file — that is owned entirely by the opt-in agent-context extension.STRING
HIGHtests/integrations/test_integration_base_toml.py0setup must not create or manage any agent context file — that is owned entirely by the opt-in agent-context extension.STRING
HIGHtests/integrations/test_integration_base_yaml.py0setup must not create or manage any agent context file — that is owned entirely by the opt-in agent-context extension.STRING
HIGHtests/integrations/test_integration_base_markdown.py0a user-authored context file must survive setup + teardown untouched.STRING
HIGHtests/integrations/test_integration_base_skills.py0a user-authored context file must survive setup + teardown untouched.STRING
HIGHtests/integrations/test_integration_base_toml.py0a user-authored context file must survive setup + teardown untouched.STRING
HIGHtests/integrations/test_integration_base_yaml.py0a user-authored context file must survive setup + teardown untouched.STRING
HIGHtests/integrations/test_integration_base_markdown.py0build the expected file list for this integration + script variant.STRING
HIGHtests/integrations/test_integration_base_toml.py0build the expected file list for this integration + script variant.STRING
HIGHtests/integrations/test_integration_base_yaml.py0build the expected file list for this integration + script variant.STRING
HIGHtests/integrations/test_integration_base_markdown.py0every file produced by specify init --integration <key> --script sh.STRING
HIGHtests/integrations/test_integration_base_skills.py0every file produced by specify init --integration <key> --script sh.STRING
HIGHtests/integrations/test_integration_base_toml.py0every file produced by specify init --integration <key> --script sh.STRING
HIGHtests/integrations/test_integration_base_yaml.py0every file produced by specify init --integration <key> --script sh.STRING
HIGHtests/integrations/test_integration_base_markdown.py0every file produced by specify init --integration <key> --script ps.STRING
HIGHtests/integrations/test_integration_base_skills.py0every file produced by specify init --integration <key> --script ps.STRING
HIGHtests/integrations/test_integration_base_toml.py0every file produced by specify init --integration <key> --script ps.STRING
HIGHtests/integrations/test_integration_base_yaml.py0every file produced by specify init --integration <key> --script ps.STRING
HIGHtests/integrations/test_integration_claude.py0skills without hook sections should not get the note.STRING
HIGHtests/integrations/test_integration_agy.py0skills without hook sections should not get the note.STRING
HIGHtests/integrations/test_integration_codex.py0skills without hook sections should not get the note.STRING
HIGHtests/integrations/test_integration_hermes.py0the core plan command must not carry a context-file placeholder — agent context files are owned by the opt-in agent-contSTRING
HIGHtests/integrations/test_integration_copilot.py0the core plan command must not carry a context-file placeholder — agent context files are owned by the opt-in agent-contSTRING
HIGHtests/integrations/test_integration_codex.py0the core plan command must not carry a context-file placeholder — agent context files are owned by the opt-in agent-contSTRING
HIGHtests/integrations/test_integration_forge.py0the core plan command must not carry a context-file placeholder — agent context files are owned by the opt-in agent-contSTRING
HIGHtests/integrations/test_integration_generic.py0the core plan command must not carry a context-file placeholder — agent context files are owned by the opt-in agent-contSTRING
HIGHsrc/specify_cli/catalogs.py0represents a single step catalog source in the catalog stack.STRING
HIGHsrc/specify_cli/workflows/catalog.py0represents a single step catalog source in the catalog stack.STRING
HIGHsrc/specify_cli/integrations/catalog.py0represents a single step catalog source in the catalog stack.STRING
Unused Imports173 hits · 162 pts
SeverityFileLineSnippetContext
LOWtests/test_shared_infra_integrity.py9CODE
LOWtests/test_check_prerequisites_python_parity.py3CODE
LOWtests/test_workflows.py13CODE
LOWtests/test_utils.py3CODE
LOWtests/test_github_workflows.py3CODE
LOWtests/bundler_helpers.py8CODE
LOWtests/test_post_process.py10CODE
LOWtests/self_upgrade_helpers.py13CODE
LOWtests/self_upgrade_helpers.py13CODE
LOWtests/self_upgrade_helpers.py13CODE
LOWtests/self_upgrade_helpers.py13CODE
LOWtests/self_upgrade_helpers.py13CODE
LOWtests/self_upgrade_helpers.py20CODE
LOWtests/self_upgrade_helpers.py21CODE
LOWtests/test_live_transient_windows.py12CODE
LOWtests/test_authentication.py14CODE
LOWtests/auth_helpers.py3CODE
LOWtests/unit/test_bundler_resolver.py2CODE
LOWtests/unit/test_bundler_records.py2CODE
LOWtests/unit/test_bundler_adapters.py2CODE
LOWtests/unit/test_bundler_versioning.py2CODE
LOWtests/unit/test_bundler_validator.py2CODE
LOWtests/unit/test_bundler_primitives.py7CODE
LOWtests/unit/test_bundler_references.py6CODE
LOWtests/unit/test_bundler_catalog_config.py2CODE
LOWtests/unit/test_bundler_conflict.py2CODE
LOWtests/unit/test_bundler_packager.py2CODE
LOWtests/contract/test_bundle_cli.py7CODE
LOWtests/contract/test_manifest_schema.py6CODE
LOWtests/contract/test_catalog_schema.py6CODE
LOWtests/integration/test_bundler_offline.py7CODE
LOWtests/integration/test_bundler_catalog_stack.py2CODE
LOWtests/integration/test_bundler_init_install.py8CODE
LOWtests/integration/test_bundler_local_install.py7CODE
LOWtests/integration/test_bundler_install_flow.py6CODE
LOWtests/integration/test_bundler_security_paths.py6CODE
LOW…/extensions/test_update_agent_context_python_parity.py10CODE
LOWtests/extensions/test_agent_context_cli_free.py11CODE
LOWtests/extensions/test_extension_agent_context.py3CODE
LOW…s/extensions/test_update_agent_context_feature_json.py3CODE
LOW…s/extensions/test_update_agent_context_feature_json.py13CODE
LOWtests/extensions/bug/test_bug_extension.py12CODE
LOWtests/integrations/test_home_isolation.py3CODE
LOWtests/integrations/test_integration_rovodev.py3CODE
LOW…s/agent-context/scripts/python/update_agent_context.py18CODE
LOWscripts/python/check_prerequisites.py4CODE
LOWscripts/python/common.py3CODE
LOWsrc/specify_cli/_console.py8CODE
LOWsrc/specify_cli/_toml_string.py10CODE
LOWsrc/specify_cli/_version.py10CODE
LOWsrc/specify_cli/catalogs.py9CODE
LOWsrc/specify_cli/_assets.py6CODE
LOWsrc/specify_cli/_invocation_style.py9CODE
LOWsrc/specify_cli/__init__.py43CODE
LOWsrc/specify_cli/__init__.py43CODE
LOWsrc/specify_cli/__init__.py43CODE
LOWsrc/specify_cli/__init__.py43CODE
LOWsrc/specify_cli/__init__.py54CODE
LOWsrc/specify_cli/__init__.py54CODE
LOWsrc/specify_cli/__init__.py54CODE
113 more matches not shown…
Docstring Block Structure18 hits · 90 pts
SeverityFileLineSnippetContext
HIGHsrc/specify_cli/extensions/__init__.py704Collect command and alias names declared by a manifest. Performs install-time validation for extension-specificSTRING
HIGHsrc/specify_cli/extensions/__init__.py1291Check if extension is compatible with current spec-kit version. Args: manifest: Extension manifest STRING
HIGHsrc/specify_cli/extensions/__init__.py1329Install extension from a local directory. Args: source_dir: Path to extension directory STRING
HIGHsrc/specify_cli/extensions/__init__.py1482Install extension from ZIP file. Args: zip_path: Path to extension ZIP file speckit_verSTRING
HIGHsrc/specify_cli/extensions/__init__.py2204Fetch a single catalog with per-URL caching. For the DEFAULT_CATALOG_URL, uses legacy cache files (self.cache_fSTRING
HIGHsrc/specify_cli/extensions/__init__.py2324Fetch and merge extensions from all active catalogs. Higher-priority (lower priority number) catalogs win on coSTRING
HIGHsrc/specify_cli/extensions/__init__.py2423Fetch extension catalog from URL or cache. Args: force_refresh: If True, bypass cache and fetch froSTRING
HIGHsrc/specify_cli/extensions/__init__.py2574Download extension ZIP from catalog. Args: extension_id: ID of the extension to download STRING
HIGHsrc/specify_cli/extensions/_commands.py90Resolve an extension argument (ID or display name) to an installed extension. Args: argument: Extension ID STRING
HIGHsrc/specify_cli/integrations/cline/__init__.py23Convert command name to Cline-compatible hyphenated format. Cline handles slash-commands optimally when they use hySTRING
HIGHsrc/specify_cli/integrations/forge/__init__.py20Convert command name to Forge-compatible hyphenated format. Forge requires command names to use hyphens instead of STRING
HIGHsrc/specify_cli/presets/__init__.py562Check if preset is compatible with current spec-kit version. Args: manifest: Preset manifest STRING
HIGHsrc/specify_cli/presets/__init__.py1521Install preset from a local directory. Args: source_dir: Path to preset directory speckSTRING
HIGHsrc/specify_cli/presets/__init__.py1640Install preset from ZIP file. Args: zip_path: Path to preset ZIP file speckit_version: STRING
HIGHsrc/specify_cli/presets/__init__.py1967Load catalog stack configuration from a YAML file. Args: config_path: Path to preset-catalogs.yml STRING
HIGHsrc/specify_cli/presets/__init__.py2155Fetch a single catalog with per-URL caching. Args: entry: PresetCatalogEntry describing the catalogSTRING
HIGHsrc/specify_cli/presets/__init__.py2304Fetch preset catalog from URL or cache. Args: force_refresh: If True, bypass cache and fetch from nSTRING
HIGHsrc/specify_cli/presets/__init__.py2460Download preset ZIP from catalog. Args: pack_id: ID of the preset to download target_diSTRING
Deep Nesting97 hits · 80 pts
SeverityFileLineSnippetContext
LOWtests/test_extensions.py1290CODE
LOW…s/agent-context/scripts/python/update_agent_context.py44CODE
LOW…s/agent-context/scripts/python/update_agent_context.py140CODE
LOW…s/agent-context/scripts/python/update_agent_context.py243CODE
LOWscripts/python/check_prerequisites.py54CODE
LOWsrc/specify_cli/_console.py147CODE
LOWsrc/specify_cli/_console.py90CODE
LOWsrc/specify_cli/_console.py198CODE
LOWsrc/specify_cli/_toml_string.py36CODE
LOWsrc/specify_cli/_version.py473CODE
LOWsrc/specify_cli/_assets.py104CODE
LOWsrc/specify_cli/__init__.py210CODE
LOWsrc/specify_cli/agents.py590CODE
LOWsrc/specify_cli/agents.py974CODE
LOWsrc/specify_cli/agents.py1120CODE
LOWsrc/specify_cli/agents.py1181CODE
LOWsrc/specify_cli/integration_scaffold.py203CODE
LOWsrc/specify_cli/shared_infra.py356CODE
LOWsrc/specify_cli/integration_status.py130CODE
LOWsrc/specify_cli/_utils.py147CODE
LOWsrc/specify_cli/_utils.py157CODE
LOWsrc/specify_cli/workflows/catalog.py324CODE
LOWsrc/specify_cli/workflows/catalog.py392CODE
LOWsrc/specify_cli/workflows/catalog.py939CODE
LOWsrc/specify_cli/workflows/catalog.py1010CODE
LOWsrc/specify_cli/workflows/expressions.py44CODE
LOWsrc/specify_cli/workflows/expressions.py149CODE
LOWsrc/specify_cli/workflows/expressions.py186CODE
LOWsrc/specify_cli/workflows/expressions.py265CODE
LOWsrc/specify_cli/workflows/expressions.py299CODE
LOWsrc/specify_cli/workflows/__init__.py75CODE
LOWsrc/specify_cli/workflows/engine.py124CODE
LOWsrc/specify_cli/workflows/engine.py268CODE
LOWsrc/specify_cli/workflows/engine.py825CODE
LOWsrc/specify_cli/workflows/engine.py1059CODE
LOWsrc/specify_cli/workflows/engine.py1222CODE
LOWsrc/specify_cli/workflows/engine.py1301CODE
LOWsrc/specify_cli/workflows/_commands.py581CODE
LOWsrc/specify_cli/workflows/_commands.py941CODE
LOWsrc/specify_cli/workflows/_commands.py1473CODE
LOWsrc/specify_cli/workflows/steps/init/__init__.py74CODE
LOWsrc/specify_cli/workflows/steps/gate/__init__.py150CODE
LOWsrc/specify_cli/extensions/__init__.py199CODE
LOWsrc/specify_cli/extensions/__init__.py703CODE
LOWsrc/specify_cli/extensions/__init__.py778CODE
LOWsrc/specify_cli/extensions/__init__.py978CODE
LOWsrc/specify_cli/extensions/__init__.py1152CODE
LOWsrc/specify_cli/extensions/__init__.py1320CODE
LOWsrc/specify_cli/extensions/__init__.py1475CODE
LOWsrc/specify_cli/extensions/__init__.py1540CODE
LOWsrc/specify_cli/extensions/__init__.py1625CODE
LOWsrc/specify_cli/extensions/__init__.py1705CODE
LOWsrc/specify_cli/extensions/__init__.py2201CODE
LOWsrc/specify_cli/extensions/__init__.py3117CODE
LOWsrc/specify_cli/extensions/_commands.py143CODE
LOWsrc/specify_cli/extensions/_commands.py398CODE
LOWsrc/specify_cli/extensions/_commands.py730CODE
LOWsrc/specify_cli/extensions/_commands.py810CODE
LOWsrc/specify_cli/extensions/_commands.py1005CODE
LOWsrc/specify_cli/extensions/_commands.py1451CODE
37 more matches not shown…
Excessive Try-Catch Wrapping80 hits · 76 pts
SeverityFileLineSnippetContext
LOWtests/integrations/test_integration_base_toml.py316 except Exception as exc:CODE
LOWtests/integrations/test_integration_base_yaml.py152 except Exception as exc:CODE
LOW…s/agent-context/scripts/python/update_agent_context.py82 except Exception:CODE
LOW…s/agent-context/scripts/python/update_agent_context.py95 except Exception:CODE
LOW…s/agent-context/scripts/python/update_agent_context.py151 except Exception:CODE
LOW…s/agent-context/scripts/python/update_agent_context.py309 except Exception as exc:CODE
LOW…ons/agent-context/scripts/bash/update-agent-context.sh86except Exception as exc:CODE
LOW…ons/agent-context/scripts/bash/update-agent-context.sh138 except Exception:CODE
LOW…ons/agent-context/scripts/bash/update-agent-context.sh151 except Exception:CODE
LOW…ons/agent-context/scripts/bash/update-agent-context.sh192except Exception:CODE
LOW…ons/agent-context/scripts/bash/update-agent-context.sh265except Exception:CODE
LOWscripts/bash/common.sh284except Exception:CODE
LOWscripts/bash/common.sh433except Exception:CODE
LOWscripts/bash/common.sh521except Exception:CODE
LOWscripts/bash/common.sh552except Exception:CODE
LOWsrc/specify_cli/_console.py87 except Exception:STRING
LOWsrc/specify_cli/_assets.py108 except Exception:CODE
LOWsrc/specify_cli/_assets.py117 except Exception:CODE
LOWsrc/specify_cli/__init__.py231 except Exception:CODE
LOWsrc/specify_cli/__init__.py248 except Exception as e:CODE
LOWsrc/specify_cli/_utils.py188 except Exception:CODE
LOWsrc/specify_cli/_utils.py210 except Exception as e:CODE
LOWsrc/specify_cli/_utils.py246 except Exception as e:CODE
LOWsrc/specify_cli/workflows/catalog.py362 except Exception as exc:CODE
LOWsrc/specify_cli/workflows/catalog.py979 except Exception as exc:CODE
LOWsrc/specify_cli/workflows/__init__.py199 except Exception: # noqa: BLE001CODE
LOWsrc/specify_cli/workflows/engine.py720 except Exception as exc:CODE
LOWsrc/specify_cli/workflows/engine.py797 except Exception as exc:CODE
LOWsrc/specify_cli/workflows/engine.py1193 except Exception:CODE
LOWsrc/specify_cli/workflows/_commands.py381 except Exception as exc:CODE
LOWsrc/specify_cli/workflows/_commands.py439 except Exception as exc:CODE
LOWsrc/specify_cli/workflows/_commands.py691 except Exception as exc:CODE
LOWsrc/specify_cli/workflows/_commands.py798 except Exception as exc:CODE
LOWsrc/specify_cli/workflows/_commands.py1318 except Exception as exc:CODE
LOWsrc/specify_cli/workflows/_commands.py1327 except Exception as exc:CODE
LOWsrc/specify_cli/workflows/_commands.py1411 except Exception as exc:CODE
LOWsrc/specify_cli/workflows/_commands.py1547 except Exception as restore_exc: # noqa: BLE001CODE
LOWsrc/specify_cli/extensions/__init__.py1785 except Exception as skills_err:CODE
LOWsrc/specify_cli/extensions/__init__.py1813 except Exception as ext_err:CODE
LOWsrc/specify_cli/extensions/__init__.py3298 except Exception:CODE
LOWsrc/specify_cli/extensions/_commands.py67 except Exception as e:CODE
LOWsrc/specify_cli/extensions/_commands.py1314 except Exception as e:CODE
LOWsrc/specify_cli/extensions/_commands.py1428 except Exception as rollback_error:CODE
LOWsrc/specify_cli/integrations/_migrate_commands.py275 except Exception as exc:CODE
LOWsrc/specify_cli/integrations/_migrate_commands.py279 except Exception as rollback_err:CODE
LOWsrc/specify_cli/integrations/_migrate_commands.py469 except Exception as exc:CODE
LOWsrc/specify_cli/integrations/_install_commands.py165 except Exception as exc:CODE
LOWsrc/specify_cli/integrations/_install_commands.py169 except Exception as rollback_err:CODE
LOWsrc/specify_cli/integrations/_helpers.py372 except Exception as ext_err:CODE
LOWsrc/specify_cli/integrations/kimi/__init__.py335 except Exception:CODE
LOWsrc/specify_cli/commands/init.py62 except Exception as e:CODE
LOWsrc/specify_cli/commands/init.py516 except Exception as wf_err:CODE
LOWsrc/specify_cli/commands/init.py599 except Exception as preset_err:CODE
LOWsrc/specify_cli/commands/init.py611 except Exception as e:CODE
LOWsrc/specify_cli/commands/bundle/__init__.py867 except Exception as exc: # noqa: BLE001CODE
LOWsrc/specify_cli/commands/bundle/__init__.py893 except Exception as exc: # noqa: BLE001CODE
LOWsrc/specify_cli/commands/bundle/__init__.py918 except Exception as exc: # noqa: BLE001CODE
LOWsrc/specify_cli/presets/__init__.py784 except Exception:CODE
LOWsrc/specify_cli/presets/__init__.py909 except Exception:CODE
LOWsrc/specify_cli/presets/__init__.py1084 except Exception:CODE
20 more matches not shown…
Self-Referential Comments22 hits · 70 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_workflows.py5962 # Create an orphaned step directory (no registry entry)COMMENT
MEDIUMtests/test_setup_tasks.py221 # Create the overrideCOMMENT
MEDIUMtests/test_extensions.py1214 # Create a config file in the installed extension directoryCOMMENT
MEDIUMtests/test_extensions.py1300 # Create a ZIP of the extension in a temp directory (not NamedTemporaryFile,COMMENT
MEDIUMtests/test_extensions.py1546 # Create a config fileCOMMENT
MEDIUMtests/test_presets.py4602 # Create a template in the preset directoryCOMMENT
MEDIUMtests/test_presets.py5236 # Create a preset command dir with a wrap-strategy commandCOMMENT
MEDIUMtests/test_presets.py6575 # Create a gemini commands dir so reconciliation writes thereCOMMENT
MEDIUMtests/test_extension_registration.py69 # Create a mock manifestCOMMENT
MEDIUMtests/test_extension_registration.py117 # Create a manifest with hooksCOMMENT
MEDIUMtests/test_extension_registration.py175 # Create a corrupted config (root is a list)COMMENT
MEDIUMtests/test_extension_registration.py330 # Create a manifest with a hook for the same eventCOMMENT
MEDIUMtests/test_workflow_run_without_project.py19 # Create a minimal workflow YAML with a shell stepCOMMENT
MEDIUMtests/extensions/git/test_git_extension.py1006 # Create a file to commitCOMMENT
MEDIUMtests/integrations/test_integration_hermes.py179 # Create a foreign skill in the global dir firstCOMMENT
MEDIUMtests/integrations/test_integration_forge.py292 # Create a mock extension command fileCOMMENT
MEDIUMtests/integrations/test_integration_forge.py298 # Create a test command with dot notation nameCOMMENT
MEDIUMtests/integrations/test_integration_forge.py343 # Create a mock extension command fileCOMMENT
MEDIUMtests/integrations/test_integration_forge.py391 # Create a mock extension command fileCOMMENT
MEDIUMtests/integrations/test_integration_opencode.py75 # Create a source command file for the registrarCOMMENT
MEDIUMtests/integrations/test_integration_opencode.py162 # Create a source command file for the registrarCOMMENT
MEDIUMscripts/bash/setup-plan.sh60 # Create a basic plan file if template doesn't existCOMMENT
Structural Annotation Overuse36 hits · 68 pts
SeverityFileLineSnippetContext
LOWspec-driven.md123# Step 1: Create the feature specification (5 minutes)COMMENT
LOWspec-driven.md131# Step 2: Generate implementation plan (5 minutes)COMMENT
LOWspec-driven.md134# Step 3: Generate executable tasks (5 minutes)COMMENT
LOWdocs/quickstart.md21### Step 1: Install SpecifyCOMMENT
LOWdocs/quickstart.md54### Step 2: Define Your ConstitutionCOMMENT
LOWdocs/quickstart.md62### Step 3: Create the SpecCOMMENT
LOWdocs/quickstart.md70### Step 4: Refine and Validate the SpecCOMMENT
LOWdocs/quickstart.md78### Step 5: Create a Technical Implementation PlanCOMMENT
LOWdocs/quickstart.md92### Step 6: Break Down, Analyze, and ImplementCOMMENT
LOWdocs/quickstart.md119### Step 1: Define ConstitutionCOMMENT
LOWdocs/quickstart.md127### Step 2: Define Requirements with `/speckit.specify`COMMENT
LOWdocs/quickstart.md139### Step 3: Refine the SpecificationCOMMENT
LOWdocs/quickstart.md153### Step 4: Generate Technical Plan with `/speckit.plan`COMMENT
LOWdocs/quickstart.md161### Step 5: Validate the SpecCOMMENT
LOWdocs/quickstart.md169### Step 6: Define TasksCOMMENT
LOWdocs/quickstart.md177### Step 7: Validate and ImplementCOMMENT
LOWdocs/quickstart.md191### Step 8: ConvergeCOMMENT
LOWdocs/install/air-gapped.md5## Step 1: Build the wheel on a connected machineCOMMENT
LOWdocs/install/air-gapped.md22## Step 2: Transfer the `dist/` directoryCOMMENT
LOWdocs/install/air-gapped.md26## Step 3: Install on the air-gapped machineCOMMENT
LOWdocs/install/air-gapped.md32## Step 4: Initialize a projectCOMMENT
LOWextensions/EXTENSION-API-REFERENCE.md449### Step 1: DescriptionCOMMENT
LOWextensions/EXTENSION-API-REFERENCE.md457### Step 2: Another StepCOMMENT
LOWextensions/selftest/commands/selftest.md16### Step 1: Catalog Discovery ValidationCOMMENT
LOWextensions/selftest/commands/selftest.md25### Step 2: Simulate InstallationCOMMENT
LOWextensions/selftest/commands/selftest.md40### Step 3: Registration VerificationCOMMENT
LOWextensions/selftest/commands/selftest.md49### Step 4: Verification ReportCOMMENT
LOWextensions/template/EXAMPLE-README.md116# Step 1: Create specificationCOMMENT
LOWextensions/template/EXAMPLE-README.md119# Step 2: Generate tasksCOMMENT
LOWextensions/template/EXAMPLE-README.md122# Step 3: Use extensionCOMMENT
LOWextensions/template/commands/example.md32### Step 1: Load ConfigurationCOMMENT
LOWextensions/template/commands/example.md66### Step 2: Perform Main ActionCOMMENT
LOWextensions/template/commands/example.md81### Step 3: Process ResultsCOMMENT
LOWextensions/template/commands/example.md97### Step 4: Save Output (Optional)COMMENT
LOWsrc/specify_cli/extensions/__init__.py368 # Step 1: apply any rename from the auto-correction pass.COMMENT
LOWsrc/specify_cli/extensions/__init__.py370 # Step 2: lift alias-form '{ext_id}.cmd' to canonical 'speckit.{ext_id}.cmd'.COMMENT
Over-Commented Block50 hits · 46 pts
SeverityFileLineSnippetContext
LOWspec-driven.md121COMMENT
LOWtests/test_workflows.py4381COMMENT
LOWtests/integrations/test_extra_args.py481# SPECKIT_INTEGRATION_<KEY>_EXECUTABLE testsCOMMENT
LOWextensions/template/extension.yml81 description: "Demonstrates hook functionality"COMMENT
LOWextensions/template/config-template.yml61COMMENT
LOWextensions/agent-context/agent-context-config.yml1# Coding Agent Context Extension ConfigurationCOMMENT
LOW…ons/agent-context/scripts/bash/update-agent-context.sh1#!/usr/bin/env bashCOMMENT
LOWextensions/git/git-config.yml1# Git Branching Workflow Extension ConfigurationCOMMENT
LOWextensions/git/config-template.yml1# Git Branching Workflow Extension ConfigurationCOMMENT
LOWscripts/bash/common.sh21 prev_dir="$dir"COMMENT
LOWscripts/bash/check-prerequisites.sh1#!/usr/bin/env bashCOMMENT
LOW.github/workflows/add-community-extension.lock.yml1# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"687ea37b376b3b918331c13fce6cdbf5b9898bab8e514ca57b662b92b6dCOMMENT
LOW.github/workflows/add-community-extension.lock.yml21# gh aw compileCOMMENT
LOW.github/workflows/add-community-extension.lock.yml41# - github/gh-aw-actions/setup@c0338fef4749d08c21f8f975fb0e37efa17dda47 # v0.79.8COMMENT
LOW.github/workflows/add-community-extension.lock.yml841 # --allow-tool shell(cat)COMMENT
LOW.github/workflows/bug-test.lock.yml1# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"ed734f6b123dcce3257c147be573cae4eaa6383018b65759a0e8d74049aCOMMENT
LOW.github/workflows/bug-test.lock.yml21# gh aw compileCOMMENT
LOW.github/workflows/bug-test.lock.yml41#COMMENT
LOW.github/workflows/bug-test.lock.yml801 # --allow-tool shell(echo)COMMENT
LOW.github/workflows/bug-test.lock.yml821 # --allow-tool shell(safeoutputs:*)COMMENT
LOW.github/workflows/add-community-preset.lock.yml1# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"b4ba1db5fdec754fa825cc3160879924118bc454a781eed70ef6c90beabCOMMENT
LOW.github/workflows/add-community-preset.lock.yml21# gh aw compileCOMMENT
LOW.github/workflows/add-community-preset.lock.yml41# - github/gh-aw-actions/setup@c0338fef4749d08c21f8f975fb0e37efa17dda47 # v0.79.8COMMENT
LOW.github/workflows/add-community-preset.lock.yml841 # --allow-tool shell(cat)COMMENT
LOW.github/workflows/bug-fix.lock.yml1# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"aafdb01f262d603577971994522575829802b93d9042d62446313955485COMMENT
LOW.github/workflows/bug-fix.lock.yml21# gh aw compileCOMMENT
LOW.github/workflows/bug-fix.lock.yml41# - github/gh-aw-actions/setup@c0338fef4749d08c21f8f975fb0e37efa17dda47 # v0.79.8COMMENT
LOW.github/workflows/bug-fix.lock.yml841 # --allow-tool shell(cargo:*)COMMENT
LOW.github/workflows/bug-fix.lock.yml861 # --allow-tool shell(printf)COMMENT
LOW.github/workflows/bug-assess.lock.yml1# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"00c226f69fb7ec2b63755304328cee6ecddbcedbe4a9840310e5f430bd3COMMENT
LOW.github/workflows/bug-assess.lock.yml21# gh aw compileCOMMENT
LOW.github/workflows/bug-assess.lock.yml41#COMMENT
LOW.github/workflows/bug-assess.lock.yml801 # --allow-tool shell(jq)COMMENT
LOWpresets/scaffold/preset.yml21COMMENT
LOWpresets/scaffold/preset.yml41 # $CORE_SCRIPT placeholder (scripts), replaced with lower-priority contentCOMMENT
LOWpresets/scaffold/preset.yml61 #COMMENT
LOWsrc/specify_cli/__init__.py1#!/usr/bin/env python3COMMENT
LOWsrc/specify_cli/workflows/expressions.py401 expr = expr.strip()COMMENT
LOWsrc/specify_cli/workflows/engine.py61 # see ``_RECOGNIZED_REQUIRES_KEYS``) but NOT enforced at run time — theyCOMMENT
LOWsrc/specify_cli/workflows/engine.py221 errors.append(COMMENT
LOWsrc/specify_cli/workflows/engine.py921 # result (including exit_code, stderr, status) isCOMMENT
LOWsrc/specify_cli/workflows/steps/gate/__init__.py61 "choice": None,COMMENT
LOWsrc/specify_cli/extensions/__init__.py1761 else:COMMENT
LOWsrc/specify_cli/extensions/__init__.py2261 # poisoned cache (older spec-kit version, manual edit, upstreamCOMMENT
LOWsrc/specify_cli/extensions/__init__.py2461 # Validate catalog structure. Reuses the same helper asCOMMENT
LOWsrc/specify_cli/extensions/__init__.py2761 continueCOMMENT
LOWsrc/specify_cli/integrations/claude/__init__.py21 "taskstoissues": "Optional filter or label for GitHub issues",COMMENT
LOWsrc/specify_cli/presets/__init__.py61 # Derive the short name (strip "speckit." prefix) used by core command templates.COMMENT
LOWsrc/specify_cli/presets/__init__.py2181 # Cache is best-effort: a JSON-decode failure, an OS-levelCOMMENT
LOWsrc/specify_cli/presets/__init__.py2341 catalog_data = json.loads(response.read())COMMENT
Redundant / Tautological Comments27 hits · 40 pts
SeverityFileLineSnippetContext
LOWtests/test_extensions.py509 # Set ext_id to match the legacy namespace so correction is validCOMMENT
LOW…tensions/git/scripts/bash/create-new-feature-branch.sh278# Check if git is available at this repo rootCOMMENT
LOWextensions/git/scripts/bash/git-common.sh6# Check if we have git available at the repo rootCOMMENT
LOWextensions/git/scripts/bash/auto-commit.sh34# Check if git is availableCOMMENT
LOWextensions/git/scripts/bash/auto-commit.sh106 # Check if event section existed at allCOMMENT
LOWextensions/git/scripts/bash/auto-commit.sh120# Check if there are changes to commitCOMMENT
LOWextensions/git/scripts/bash/initialize-repo.sh37# Check if git is availableCOMMENT
LOWextensions/git/scripts/bash/initialize-repo.sh43# Check if already a git repoCOMMENT
LOWscripts/bash/common.sh233# Check if jq is available for safe JSON constructionCOMMENT
LOWscripts/bash/common.sh636 # Check if any layer uses a non-replace strategyCOMMENT
LOWscripts/bash/setup-plan.sh65# Output resultsCOMMENT
LOWscripts/bash/setup-tasks.sh60# Output resultsCOMMENT
LOWscripts/bash/check-prerequisites.sh159# Output resultsCOMMENT
LOWscripts/bash/create-new-feature.sh32 # Check if the next argument is another option (starts with --)COMMENT
LOWsrc/specify_cli/workflows/_commands.py1611 # Check if it's a built-inCOMMENT
LOWsrc/specify_cli/workflows/steps/prompt/__init__.py119 # Check if the CLI tool is actually installed.COMMENT
LOWsrc/specify_cli/workflows/steps/command/__init__.py156 # Check if the CLI tool is actually installed.COMMENT
LOWsrc/specify_cli/extensions/__init__.py1045 # Check if skill already exists before creating the directoryCOMMENT
LOWsrc/specify_cli/extensions/__init__.py1359 # Check if already installedCOMMENT
LOWsrc/specify_cli/extensions/__init__.py1525 # Check if manifest is in a subdirectoryCOMMENT
LOWsrc/specify_cli/extensions/_commands.py559 # Check if extension exists in catalog (supports both ID and display name)COMMENT
LOWsrc/specify_cli/extensions/_commands.py1065 # Check if installation is allowed from this catalogCOMMENT
LOWsrc/specify_cli/presets/__init__.py996 # Check if any preset previously registered this skillCOMMENT
LOWsrc/specify_cli/presets/_commands.py382 # Check if installed locally firstCOMMENT
LOWsrc/specify_cli/presets/_commands.py457 # Check if preset is installedCOMMENT
LOWsrc/specify_cli/presets/_commands.py503 # Check if preset is installedCOMMENT
LOWsrc/specify_cli/presets/_commands.py537 # Check if preset is installedCOMMENT
Cross-Language Confusion7 hits · 30 pts
SeverityFileLineSnippetContext
HIGHtests/test_extension_update_hardening.py80 # Write config with hooks: null; get_project_config() normalizes this to {}COMMENT
HIGHtests/test_extension_registration.py303 """Regression: hooks: {after_tasks: null} must not crash in unregister_hooks()."""STRING
HIGHtests/extensions/test_extension_agent_context.py175 "command -v cygpath >/dev/null 2>&1 && cygpath -u \"$1\"",CODE
HIGHsrc/specify_cli/workflows/expressions.py520 In every such case the membership relation is undefined, so treat it asSTRING
HIGHsrc/specify_cli/workflows/engine.py235 # valid, but any present-but-non-mapping value — ``requires:`` (YAML null),COMMENT
HIGHsrc/specify_cli/extensions/__init__.py2089 ``{"extensions": []}`` or ``{"extensions": null}`` slip throughSTRING
HIGHsrc/specify_cli/presets/__init__.py1933 ``{"presets": []}`` or ``{"presets": null}`` slip through here andSTRING
Modern AI Meta-Vocabulary10 hits · 23 pts
SeverityFileLineSnippetContext
MEDIUMCONTRIBUTING.md851. **Run focused automated checks first** — use the quick verification commands [below](#automated-checks) to catch scafCODE
MEDIUMnewsletters/2026-March.md75- **End-to-end workflow automation** -- an open issue (#1966) proposes a built-in pipeline command. The community-built CODE
MEDIUMnewsletters/2026-May.md135- **Multi-agent workflows** — multi-install support (#2389) was the most-requested feature. The next frontier is orchestCODE
MEDIUMnewsletters/2026-June.md21**v0.11.0–v0.11.10** (June 16–29) was the largest release cluster of the month and centered on **workflows** and the newCODE
MEDIUMnewsletters/2026-June.md47Beyond converge and bundles, June was the month the **workflow engine grew up**. The **step catalog** (#2394) made stepsCODE
MEDIUMtests/integrations/test_cli.py141 # Aborted before scaffolding: the pre-existing file is untouched.COMMENT
MEDIUMdocs/reference/integrations.md21| [GitHub Copilot](https://code.visualstudio.com/) | `copilot` | Defaults to CODE
MEDIUMpresets/ARCHITECTURE.md145│ ├── README.md # Guide for customizing the scaffoldCODE
MEDIUMsrc/specify_cli/integrations/_scaffold_commands.py35 # scaffold targets the Spec Kit *source* repo layout (_is_spec_kit_repo_root),COMMENT
MEDIUMsrc/specify_cli/integrations/copilot/__init__.py121 # Mutable flag set by setup() — indicates the active scaffolding mode.COMMENT
AI Slop Vocabulary2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMsrc/specify_cli/workflows/engine.py1116 # not the outer closure — clearer and robust if StepContext copyingCOMMENT
MEDIUMsrc/specify_cli/workflows/_commands.py1398 # ensuring the traversal check is robust even on non-canonical paths.COMMENT
Magic Placeholder Names1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHextensions/template/EXAMPLE-README.md52 api_key: "your-api-key"CODE
Synthetic Comment Markers1 hit · 5 pts
SeverityFileLineSnippetContext
HIGH.github/PULL_REQUEST_TEMPLATE.md21<!-- If you used AI, briefly describe how (e.g., "Code generated by Copilot", "Consulted ChatGPT for approach"): -->CODE
Modern Structural Boilerplate5 hits · 5 pts
SeverityFileLineSnippetContext
LOW…s/extensions/test_update_agent_context_feature_json.py22def _setup_project(root: Path, context_file: str = "CLAUDE.md") -> None:CODE
LOWsrc/specify_cli/shared_infra.py17logger = logging.getLogger(__name__)CODE
LOWsrc/specify_cli/workflows/engine.py476 def set_step_output(self, step_id: str, output: Any) -> None:CODE
LOWsrc/specify_cli/integrations/_helpers.py340def _set_default_integration_or_exit(*args: Any, **kwargs: Any) -> None:CODE
LOWsrc/specify_cli/bundler/__init__.py10__all__ = ["BundlerError"]CODE
Verbosity Indicators2 hits · 4 pts
SeverityFileLineSnippetContext
LOWsrc/specify_cli/extensions/__init__.py368 # Step 1: apply any rename from the auto-correction pass.COMMENT
LOWsrc/specify_cli/extensions/__init__.py370 # Step 2: lift alias-form '{ext_id}.cmd' to canonical 'speckit.{ext_id}.cmd'.COMMENT
Dead Code1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_github_http.py147CODE
AI Structural Patterns1 hit · 1 pts
SeverityFileLineSnippetContext
LOWsrc/specify_cli/commands/init.py74CODE