Repository Analysis

github/spec-kit

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

25.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 132,007 GitHub stars. SynthScan v2.0 examined 219,175 lines of code across 518 source files, recording 5533 pattern matches distributed across 20 syntactic categories. The overall adjusted score of 25.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).

25.5
Adjusted Score
25.5
Raw Score
100%
Time Factor
2026-08-28
Last Push
132.0K
Stars
Python
Language
219.2K
Lines of Code
518
Files
5.5K
Pattern Hits
2026-08-29
Scan Date
0.28
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 143MEDIUM 256LOW 5134

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 5533 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 Identifiers4468 hits · 3399 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.py142def test_all_variants_resolve_requested_template(CODE
LOWtests/test_check_prerequisites_python_parity.py185def test_all_variants_validate_requested_template_in_text_mode(CODE
LOWtests/test_check_prerequisites_python_parity.py231def test_python_json_output_matches_bash(prereq_repo: Path, args: tuple[str, ...]) -> None:CODE
LOWtests/test_check_prerequisites_python_parity.py251def test_python_text_output_matches_bash(prereq_repo: Path) -> None:CODE
LOWtests/test_check_prerequisites_python_parity.py266def test_python_text_output_survives_a_legacy_stdout_code_page(CODE
LOWtests/test_check_prerequisites_python_parity.py313def test_python_help_output_matches_bash(prereq_repo: Path) -> None:CODE
LOWtests/test_check_prerequisites_python_parity.py323def test_python_unknown_option_matches_bash_error_shape(prereq_repo: Path) -> None:CODE
LOWtests/test_check_prerequisites_python_parity.py351def test_python_json_output_matches_powershell(CODE
LOWtests/test_check_prerequisites_python_parity.py372def test_python_repo_copy_script_file_fallback_finds_repo_root(tmp_path: Path) -> None:CODE
LOWtests/test_check_prerequisites_python_parity.py393def test_python_paths_only_does_not_persist_feature_json(prereq_repo: Path) -> None:CODE
LOWtests/test_check_prerequisites_python_parity.py409def test_python_normal_mode_persists_feature_json(prereq_repo: Path) -> None:CODE
LOWtests/test_check_prerequisites_python_parity.py428def test_persisted_feature_json_is_lexical_when_specs_is_symlink(CODE
LOWtests/test_check_prerequisites_python_parity.py469def test_python_negative_errors_are_stderr_only(CODE
LOWtests/test_check_prerequisites_python_parity.py493def test_python_branch_falls_back_to_feature_dir_basename(prereq_repo: Path) -> None:CODE
LOWtests/test_check_prerequisites_python_parity.py550 def test_non_mapping_integration_json_falls_back(self, tmp_path: Path, body: str):CODE
LOWtests/test_check_prerequisites_python_parity.py559 def test_hyphen_separator_is_still_honoured(self, tmp_path: Path):CODE
LOWtests/test_check_prerequisites_python_parity.py572def test_powershell_text_output_lists_available_docs(prereq_repo: Path) -> None:CODE
LOWtests/test_workflows.py122 def test_get_step_type_missing(self):CODE
LOWtests/test_workflows.py127 def test_register_step_duplicate_raises(self):CODE
LOWtests/test_workflows.py134 def test_register_step_empty_key_raises(self):CODE
LOWtests/test_workflows.py216 def test_step_output_reference(self):CODE
LOWtests/test_workflows.py225 def test_string_interpolation(self):CODE
LOWtests/test_workflows.py233 def test_multi_expression_no_surrounding_text(self):CODE
LOWtests/test_workflows.py527 def test_filter_from_json_parses_object(self):CODE
LOWtests/test_workflows.py537 def test_filter_from_json_invalid_json_raises(self):CODE
LOWtests/test_workflows.py546 def test_filter_from_json_non_string_raises(self):CODE
LOWtests/test_workflows.py555 def test_filter_from_json_rejects_malformed_forms(self):CODE
LOWtests/test_workflows.py2037 def test_validate_rejects_non_positive_timeout(self):CODE
LOWtests/test_workflows.py2045 def test_validate_rejects_non_numeric_timeout(self):CODE
LOWtests/test_workflows.py2055 def test_validate_rejects_non_finite_timeout(self):CODE
LOWtests/test_workflows.py2411 def test_validate_rejects_bad_script(self):CODE
LOWtests/test_workflows.py2418 def test_validate_accepts_valid(self):CODE
LOWtests/test_workflows.py2428 def test_docstring_lists_every_on_reject_behaviour(self):CODE
LOWtests/test_workflows.py2438 def _non_tty_stdin_by_default(self, monkeypatch):CODE
LOWtests/test_workflows.py2445 def test_execute_returns_paused(self):CODE
LOWtests/test_workflows.py3487 def test_validate_missing_fields(self):CODE
LOWtests/test_workflows.py3496 def test_validate_rejects_non_string_non_bool_condition(self, bad):CODE
LOWtests/test_workflows.py3504 def test_validate_accepts_string_or_bool_condition(self, good):CODE
LOWtests/test_workflows.py3513 def test_validate_invalid_max_iterations(self):CODE
LOWtests/test_workflows.py3619 def test_validate_missing_fields(self):CODE
LOWtests/test_workflows.py3628 def test_validate_rejects_non_string_non_bool_condition(self, bad):CODE
LOWtests/test_workflows.py3636 def test_validate_accepts_string_or_bool_condition(self, good):CODE
LOWtests/test_workflows.py3645 def test_validate_steps_not_list(self):CODE
LOWtests/test_workflows.py3913 def test_validate_empty_wait_for(self):CODE
LOWtests/test_workflows.py3920 def test_validate_wait_for_not_list(self):CODE
LOWtests/test_workflows.py3928 def test_validate_rejects_non_mapping_output(self, bad_output):CODE
LOWtests/test_workflows.py3994 def test_sequential_default_preserves_order(self, tmp_path):CODE
LOWtests/test_workflows.py3998 def test_concurrent_runs_all_items_in_item_order(self, tmp_path):CODE
LOWtests/test_workflows.py4002 def test_sequential_and_concurrent_agree(self, tmp_path):CODE
LOWtests/test_workflows.py4008 def test_shuffled_completion_preserves_item_order(self, tmp_path):CODE
LOWtests/test_workflows.py4052 def test_invalid_max_concurrency_coerces_to_sequential(self, tmp_path, bad):CODE
LOWtests/test_workflows.py4059 def test_string_max_concurrency_is_honored(self, tmp_path):CODE
LOWtests/test_workflows.py4063 def test_context_item_isolation_across_threads(self, tmp_path):CODE
LOWtests/test_workflows.py4069 def test_marks_item_context_as_inside_fan_out(self, tmp_path, max_concurrency):CODE
4408 more matches not shown…
Decorative Section Separators193 hits · 684 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_workflows.py30# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_workflows.py32# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/conftest.py71# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/conftest.py73# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_self_upgrade_execution.py18# ===========================================================================COMMENT
MEDIUMtests/test_self_upgrade_execution.py20# ===========================================================================COMMENT
MEDIUMtests/test_self_upgrade_detection.py600# ===========================================================================COMMENT
MEDIUMtests/test_self_upgrade_detection.py602# ===========================================================================COMMENT
MEDIUMtests/test_setup_tasks.py181# ===========================================================================COMMENT
MEDIUMtests/test_setup_tasks.py183# ===========================================================================COMMENT
MEDIUMtests/test_setup_tasks.py703# ===========================================================================COMMENT
MEDIUMtests/test_setup_tasks.py705# ===========================================================================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.py994# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_setup_tasks.py997# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_live_transient_windows.py18# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_live_transient_windows.py20# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_live_transient_windows.py66# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_live_transient_windows.py68# ---------------------------------------------------------------------------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.py445# ── check_feature_branch Tests ───────────────────────────────────────────────COMMENT
MEDIUMtests/test_timestamp_branches.py459# ── find_feature_dir_by_prefix Tests ─────────────────────────────────────────COMMENT
MEDIUMtests/test_timestamp_branches.py470# ── get_feature_paths + single-prefix integration ───────────────────────────COMMENT
MEDIUMtests/test_timestamp_branches.py764# ── Dry-Run Tests ────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_timestamp_branches.py1210# ── 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.py513# ── get_current_branch Tests ─────────────────────────────────────────────────COMMENT
MEDIUMtests/test_timestamp_branches.py524# ── No-git Tests ─────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_timestamp_branches.py537# ── E2E Flow Tests ───────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_timestamp_branches.py604# ── Allow Existing Branch Tests ──────────────────────────────────────────────COMMENT
MEDIUMtests/test_timestamp_branches.py978# ── PowerShell Dry-Run Tests ─────────────────────────────────────────────────COMMENT
MEDIUMtests/test_timestamp_branches.py1062# ── Short-Word / Acronym Branch-Name Tests ──────────────────────────────────COMMENT
MEDIUMtests/test_timestamp_branches.py1108# ── GIT_BRANCH_NAME Override Tests ──────────────────────────────────────────COMMENT
MEDIUMtests/test_timestamp_branches.py1366# ── Description Quoting Tests (issue #2339) ──────────────────────────────────COMMENT
MEDIUMtests/test_self_upgrade_guidance.py14# ===========================================================================COMMENT
MEDIUMtests/test_self_upgrade_guidance.py16# ===========================================================================COMMENT
MEDIUMtests/test_init_dir.py115# ── Bash: positive cases ────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_init_dir.py350# ubuntu/windows runners ship pwsh, so these DO run there) ─────────────────COMMENT
MEDIUMtests/test_init_dir.py199# ── Bash: negative / contract cases ─────────────────────────────────────────COMMENT
MEDIUMtests/test_init_dir.py292# ── Bash: bundled Git extension entrypoint ──────────────────────────────────COMMENT
MEDIUMtests/test_init_dir.py480# ── Windows PowerShell 5.1 compatibility (issue #3749) ──────────────────────COMMENT
MEDIUMtests/test_authentication.py70# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_authentication.py72# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_authentication.py431# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_authentication.py433# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_authentication.py471# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_authentication.py473# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_authentication.py827# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_authentication.py829# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_authentication.py998# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_authentication.py1000# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_authentication.py1069# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_authentication.py1071# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_authentication.py1434# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_authentication.py1436# ---------------------------------------------------------------------------COMMENT
133 more matches not shown…
Cross-File Repetition80 hits · 400 pts
SeverityFileLineSnippetContext
HIGHtests/test_workflows.py0user-editable catalog name/url/description must not be parsed as rich markup.STRING
HIGHtests/test_presets.py0user-editable catalog name/url/description must not be parsed as rich markup.STRING
HIGHtests/integrations/test_integration_catalog.py0user-editable catalog name/url/description must not be parsed as rich markup.STRING
HIGHtests/workflows/conftest.py0create a mock spec-kit project with ``.specify/workflows/`` directory.STRING
HIGHtests/workflows/test_overlay_commands.py0create a mock spec-kit project with ``.specify/workflows/`` directory.STRING
HIGHtests/workflows/test_overlay_security.py0create a mock spec-kit project with ``.specify/workflows/`` directory.STRING
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_bob.py0skill.md must have name, description, compatibility, metadata.STRING
HIGHtests/integrations/test_integration_base_skills.py0skill.md must have name, description, compatibility, metadata.STRING
HIGHtests/integrations/test_integration_copilot.py0skill.md must have name, description, compatibility, metadata.STRING
HIGHtests/integrations/test_integration_cline.py0test formatting a simple name without 'speckit.' prefix.STRING
HIGHtests/integrations/test_integration_junie.py0test formatting a simple name without 'speckit.' prefix.STRING
HIGHtests/integrations/test_integration_forge.py0test formatting a simple name without 'speckit.' prefix.STRING
HIGHtests/integrations/test_integration_cline.py0test formatting a name that already has 'speckit.' prefix.STRING
HIGHtests/integrations/test_integration_junie.py0test formatting a name that already has 'speckit.' prefix.STRING
HIGHtests/integrations/test_integration_forge.py0test formatting a name that already has 'speckit.' prefix.STRING
HIGHtests/integrations/test_integration_cline.py0test that already-hyphenated names are returned unchanged (idempotent).STRING
HIGHtests/integrations/test_integration_junie.py0test that already-hyphenated names are returned unchanged (idempotent).STRING
HIGHtests/integrations/test_integration_forge.py0test that already-hyphenated names are returned unchanged (idempotent).STRING
HIGHtests/integrations/test_integration_claude.py0test rendering a skill preserves non-ascii characters.STRING
HIGHtests/integrations/test_integration_vibe.py0test rendering a skill preserves non-ascii characters.STRING
HIGHtests/integrations/test_integration_alquimia.py0test rendering a skill preserves non-ascii characters.STRING
HIGHtests/integrations/test_integration_claude.py0the cli no longer manages the agent context file — that is owned by the opt-in agent-context extension. setup must not cSTRING
HIGHtests/integrations/test_integration_vibe.py0the cli no longer manages the agent context file — that is owned by the opt-in agent-context extension. setup must not cSTRING
HIGHtests/integrations/test_integration_alquimia.py0the cli no longer manages the agent context file — that is owned by the opt-in agent-context extension. setup must not cSTRING
HIGHtests/integrations/test_integration_claude.py0a user-authored context file is left intact on teardown.STRING
HIGHtests/integrations/test_integration_vibe.py0a user-authored context file is left intact on teardown.STRING
HIGHtests/integrations/test_integration_alquimia.py0a user-authored context file is left intact on teardown.STRING
HIGHtests/integrations/test_integration_claude.py0skills that have hook sections should get the normalization note.STRING
HIGHtests/integrations/test_integration_alquimia.py0skills that have hook sections should get the normalization note.STRING
HIGHtests/integrations/test_integration_codex.py0skills that have hook sections should get the normalization note.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_alquimia.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_claude.py0already-noted hook sections should not suppress later sections.STRING
HIGHtests/integrations/test_integration_alquimia.py0already-noted hook sections should not suppress later sections.STRING
HIGHtests/integrations/test_integration_codex.py0already-noted hook sections should not suppress later sections.STRING
20 more matches not shown…
Cross-Language Confusion42 hits · 212 pts
SeverityFileLineSnippetContext
HIGHtests/test_workflows.py4390 # block (list/null) is stored raw and would crash _resolve_inputs atCOMMENT
HIGHtests/test_workflows.py2671 ``config.get(k, default)`` does not replace an explicit null).CODE
HIGHtests/test_workflows.py3874 """An explicit ``output:`` (YAML null) is valid, matching ``validate``."""STRING
HIGHtests/test_workflows.py8797 """An empty document, explicit null, or absent/empty ``catalogs:`` stays aSTRING
HIGHtests/test_workflows.py16992 (int/list instead of str-or-null) raises ValueError, which leakedSTRING
HIGHtests/test_resolve_template_python_parity.py240 '"disabled-ext":{"enabled":null,"priority":1},'CODE
HIGHtests/test_presets.py206 """Required manifest sections reject null, list, and scalar values."""STRING
HIGHtests/test_init_dir.py562 `cd && pwd` never yields one, so the two must agree.STRING
HIGHtests/test_extension_update_hardening.py155 # Write config with hooks: null; get_project_config() normalizes this to {}COMMENT
HIGHtests/test_setup_plan_python_parity.py181 '{"presets": {"alpha": {"priority": 2}, "beta": {"priority": 1}, "gamma": {"priority": null}}}',CODE
HIGHtests/test_setup_plan_python_parity.py186 ('{"presets":null}', "# alpha plan\n"),CODE
HIGHtests/test_extension_registration.py303 """Regression: hooks: {after_tasks: null} must not crash in unregister_hooks()."""STRING
HIGHtests/test_security_workflow.py100 "${{ github.event.pull_request.base.sha || github.event.before || '' }}"CODE
HIGHtests/test_security_workflow.py103 "${{ github.event.pull_request.head.sha || github.sha }}"CODE
HIGHtests/contract/test_catalog_schema.py108 default stack (must not be confused with an explicit top-level null)."""STRING
HIGHtests/contract/test_catalog_schema.py85 """A top-level non-mapping bundle-catalogs.yml (list/scalar/null) must raise,STRING
HIGHtests/extensions/test_extension_agent_context.py175 "command -v cygpath >/dev/null 2>&1 && cygpath -u \"$1\"",CODE
HIGHtests/integrations/test_events.py1049 assert "errors.push(" in contentCODE
HIGHscripts/python/common.py525 # * a non-mapping top level ([], "forge", 42, null) is valid JSON, soCOMMENT
HIGHsrc/specify_cli/events.py1940 f" try {{ if ({checks}) {{ runEvent({command_lit}, {ev_lit}, input, output, {timeout_sec}); }STRING
HIGHsrc/specify_cli/events.py1944 f" try {{ runEvent({command_lit}, {ev_lit}, input, output, {timeout_sec}); }} catch (e) {{ erSTRING
HIGHsrc/specify_cli/events.py1948 f" try {{ const ctx = runEvent({command_lit}, {ev_lit}, input, output, {timeout_sec}); if (ctx) cSTRING
HIGHsrc/specify_cli/events.py1952 f" try {{ runEvent({command_lit}, {ev_lit}, input, output, {timeout_sec}); }} catch (e) {{ errorsSTRING
HIGHsrc/specify_cli/events.py1987 f" if (ctx === undefined) {{\n"STRING
HIGHsrc/specify_cli/events.py1991 f" if (ctx) output.system.push(ctx);\n"STRING
HIGHsrc/specify_cli/events.py2011 f" output.parts.push({{ id: base + \".speckit\" + Math.random().toString(36).slice(2, 8), sessionIDSTRING
HIGHsrc/specify_cli/workflows/catalog.py362 # raises. An absent key, an explicit ``catalogs:`` null, and an emptyCOMMENT
HIGHsrc/specify_cli/workflows/expressions.py617 In every such case the membership relation is undefined, so treat it asSTRING
HIGHsrc/specify_cli/workflows/engine.py156 "'workflow.integration' must be a string or null, got "CODE
HIGHsrc/specify_cli/workflows/engine.py166 "'workflow.model' must be a string or null, got "CODE
HIGHsrc/specify_cli/workflows/engine.py173 "'workflow.options' must be a mapping or null, got "CODE
HIGHsrc/specify_cli/workflows/engine.py326 # valid, but any present-but-non-mapping value — ``requires:`` (YAML null),COMMENT
HIGHsrc/specify_cli/workflows/engine.py626 f"string or null, got {type(installed_workflow_id).__name__}"CODE
HIGHsrc/specify_cli/workflows/engine.py637 f"string or null, got {type(installed_registry_root).__name__}"CODE
HIGHsrc/specify_cli/workflows/steps/prompt/__init__.py283 # (an explicit ``integration:``/``model:`` YAML null) means "inherit theCOMMENT
HIGHsrc/specify_cli/workflows/steps/command/__init__.py240 # a non-string (null, list, int) crashes there with a rawCOMMENT
HIGHsrc/specify_cli/workflows/steps/command/__init__.py264 # (an explicit ``integration:``/``model:`` YAML null) means "inherit theCOMMENT
HIGHsrc/specify_cli/workflows/steps/fan_in/__init__.py38 # explicit ``output:`` (YAML null) stays valid, matching validate.COMMENT
HIGHsrc/specify_cli/extensions/__init__.py3749 ``{"extensions": []}`` or ``{"extensions": null}`` slip throughSTRING
HIGHsrc/specify_cli/integrations/_migrate_commands.py194 # anything else (e.g. null) leaves ownership undecidable, so failCOMMENT
HIGHsrc/specify_cli/presets/__init__.py393 # ``templates: [null]``) raises a clean PresetValidationError theCOMMENT
HIGHsrc/specify_cli/presets/__init__.py4252 ``{"presets": []}`` or ``{"presets": null}`` slip through here andSTRING
Unused Imports231 hits · 210 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_event_command.py16CODE
LOWtests/test_self_upgrade_execution.py9CODE
LOWtests/test_github_workflows.py3CODE
LOWtests/test_self_upgrade_detection.py15CODE
LOWtests/bundler_helpers.py8CODE
LOWtests/test_download_security.py3CODE
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/self_upgrade_helpers.py21CODE
LOWtests/test_live_transient_windows.py12CODE
LOWtests/test_resolve_template_python_parity.py3CODE
LOWtests/test_init_output_markup.py17CODE
LOWtests/test_extensions.py27CODE
LOWtests/test_upgrade.py29CODE
LOWtests/parity_helpers.py3CODE
LOWtests/test_setup_tasks_python_parity.py3CODE
LOWtests/test_shared_infra_gitignore.py12CODE
LOWtests/test_create_new_feature_python_parity.py3CODE
LOWtests/test_self_upgrade_guidance.py7CODE
LOWtests/test_authentication.py14CODE
LOWtests/test_setup_plan_python_parity.py3CODE
LOWtests/test_extension_add_path_traversal.py3CODE
LOWtests/test_security_workflow.py3CODE
LOWtests/auth_helpers.py3CODE
LOWtests/test_self_upgrade_verification.py10CODE
LOWtests/unit/test_bundler_resolver.py2CODE
LOWtests/unit/test_bundler_yamlio.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_bundle_download_url.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_wheel_core_pack_scripts.py9CODE
LOWtests/contract/test_manifest_schema.py6CODE
LOWtests/contract/test_catalog_schema.py6CODE
LOWtests/contract/test_wheel_bundled_presets.py12CODE
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
LOWtests/workflows/conftest.py3CODE
LOWtests/workflows/test_resolver_integration.py3CODE
171 more matches not shown…
Deep Nesting150 hits · 113 pts
SeverityFileLineSnippetContext
LOWtests/test_workflows.py12269CODE
LOWtests/test_extensions.py1657CODE
LOWtests/test_extensions.py2799CODE
LOW…s/agent-context/scripts/python/update_agent_context.py45CODE
LOW…s/agent-context/scripts/python/update_agent_context.py141CODE
LOW…s/agent-context/scripts/python/update_agent_context.py259CODE
LOW…nsions/git/scripts/python/create_new_feature_branch.py90CODE
LOW…nsions/git/scripts/python/create_new_feature_branch.py420CODE
LOWextensions/git/scripts/python/auto_commit.py49CODE
LOWscripts/python/check_prerequisites.py68CODE
LOWscripts/python/common.py383CODE
LOWscripts/python/common.py445CODE
LOWscripts/python/common.py452CODE
LOWscripts/python/create_new_feature.py110CODE
LOWscripts/python/create_new_feature.py253CODE
LOWsrc/specify_cli/_console.py150CODE
LOWsrc/specify_cli/_console.py93CODE
LOWsrc/specify_cli/_console.py220CODE
LOWsrc/specify_cli/_toml_string.py36CODE
LOWsrc/specify_cli/_version.py481CODE
LOWsrc/specify_cli/events.py493CODE
LOWsrc/specify_cli/events.py879CODE
LOWsrc/specify_cli/events.py1299CODE
LOWsrc/specify_cli/events.py1601CODE
LOWsrc/specify_cli/events.py1826CODE
LOWsrc/specify_cli/events.py1880CODE
LOWsrc/specify_cli/_assets.py104CODE
LOWsrc/specify_cli/__init__.py217CODE
LOWsrc/specify_cli/agents.py610CODE
LOWsrc/specify_cli/agents.py1052CODE
LOWsrc/specify_cli/agents.py1203CODE
LOWsrc/specify_cli/agents.py1282CODE
LOWsrc/specify_cli/integration_scaffold.py203CODE
LOWsrc/specify_cli/shared_infra.py403CODE
LOWsrc/specify_cli/_download_security.py125CODE
LOWsrc/specify_cli/_download_security.py905CODE
LOWsrc/specify_cli/_download_security.py1070CODE
LOWsrc/specify_cli/integration_status.py130CODE
LOWsrc/specify_cli/_utils.py153CODE
LOWsrc/specify_cli/_utils.py163CODE
LOWsrc/specify_cli/workflows/catalog.py140CODE
LOWsrc/specify_cli/workflows/catalog.py505CODE
LOWsrc/specify_cli/workflows/catalog.py608CODE
LOWsrc/specify_cli/workflows/catalog.py1200CODE
LOWsrc/specify_cli/workflows/catalog.py1302CODE
LOWsrc/specify_cli/workflows/expressions.py56CODE
LOWsrc/specify_cli/workflows/expressions.py190CODE
LOWsrc/specify_cli/workflows/expressions.py227CODE
LOWsrc/specify_cli/workflows/expressions.py346CODE
LOWsrc/specify_cli/workflows/expressions.py380CODE
LOWsrc/specify_cli/workflows/expressions.py916CODE
LOWsrc/specify_cli/workflows/__init__.py83CODE
LOWsrc/specify_cli/workflows/engine.py181CODE
LOWsrc/specify_cli/workflows/engine.py368CODE
LOWsrc/specify_cli/workflows/engine.py1170CODE
LOWsrc/specify_cli/workflows/engine.py1408CODE
LOWsrc/specify_cli/workflows/engine.py1597CODE
LOWsrc/specify_cli/workflows/engine.py1691CODE
LOWsrc/specify_cli/workflows/engine.py1764CODE
LOWsrc/specify_cli/workflows/_commands.py674CODE
90 more matches not shown…
Self-Referential Comments32 hits · 104 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_workflows.py9507 # Create an orphaned step directory (no registry entry)COMMENT
MEDIUMtests/test_setup_tasks.py221 # Create the overrideCOMMENT
MEDIUMtests/test_extensions.py1812 # Create a config file in the installed extension directoryCOMMENT
MEDIUMtests/test_extensions.py2809 # Create a ZIP of the extension in a temp directory (not NamedTemporaryFile,COMMENT
MEDIUMtests/test_extensions.py3151 # Create a config fileCOMMENT
MEDIUMtests/test_presets.py10608 # Create a template in the preset directoryCOMMENT
MEDIUMtests/test_presets.py11470 # Create a preset command dir with a wrap-strategy commandCOMMENT
MEDIUMtests/test_presets.py13109 # Create a gemini commands dir so reconciliation writes thereCOMMENT
MEDIUMtests/test_extension_skills.py3060 # Create the skill directory without the SKILL.md fileCOMMENT
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/workflows/test_resolver_integration.py382 # Create a real overlay directory outside the project with a malicious overlay.COMMENT
MEDIUMtests/workflows/test_overlay_security.py118 # Create a base workflow file that would be the traversal target.COMMENT
MEDIUMtests/workflows/test_overlay_security.py257 # Create a symlinked overlays directory pointing outside the projectCOMMENT
MEDIUMtests/workflows/test_overlay_security.py271 # Create a real overlay directory outside the project.COMMENT
MEDIUMtests/extensions/git/test_git_extension.py1050 # Create a file to commitCOMMENT
MEDIUMtests/integrations/test_integration_bob.py654 # Create a real legacy Bob project (renders shared templates).COMMENT
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_events.py1004 # Create a project venv so the plugin's runtime resolver prefers it.COMMENT
MEDIUMtests/integrations/test_events.py1188 # Create a mock core command md fileCOMMENT
MEDIUMtests/integrations/test_events.py1421 # Create a core command template whose script writes its payload.COMMENT
MEDIUMtests/integrations/test_events.py2064 # Create a symlinked .claude directory pointing outside the project.COMMENT
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
MEDIUMsrc/specify_cli/extensions/__init__.py2417 # Create the staging file with mode 0600 before writing soCOMMENT
Excessive Try-Catch Wrapping117 hits · 99 pts
SeverityFileLineSnippetContext
LOWtests/test_check_prerequisites_python_parity.py533 except Exception: # pragma: no cover - defensive cleanupCODE
LOWtests/unit/test_condition_expression_block.py664 except Exception:CODE
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.py83 except Exception:CODE
LOW…s/agent-context/scripts/python/update_agent_context.py96 except Exception:CODE
LOW…s/agent-context/scripts/python/update_agent_context.py152 except Exception:CODE
LOW…s/agent-context/scripts/python/update_agent_context.py325 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.sh197except Exception:CODE
LOW…ons/agent-context/scripts/bash/update-agent-context.sh270except Exception:CODE
LOWscripts/python/common.py230 except Exception:CODE
MEDIUMscripts/python/setup_plan.py68 print(f"Error: {exc}", file=sys.stderr)STRING
MEDIUMscripts/python/create_new_feature.py130 print(f"Error: {arg} requires a value", file=sys.stderr)STRING
MEDIUMscripts/python/create_new_feature.py344 print("Error: feature number is too long for a branch name", file=sys.stderr)CODE
MEDIUMscripts/python/create_new_feature.py394 print(f"Error: {exc}", file=sys.stderr)CODE
LOWscripts/bash/common.sh284except Exception:CODE
LOWscripts/bash/common.sh437 except Exception as exc:CODE
LOWscripts/bash/common.sh543except Exception:CODE
LOWscripts/bash/common.sh662except Exception:CODE
LOWscripts/bash/common.sh744except Exception as exc:CODE
LOWsrc/specify_cli/_console.py90 except Exception:STRING
LOWsrc/specify_cli/events.py120 except Exception:CODE
LOWsrc/specify_cli/events.py162 except Exception:CODE
LOWsrc/specify_cli/events.py194 except Exception:CODE
LOWsrc/specify_cli/events.py203 except Exception:CODE
LOWsrc/specify_cli/events.py301 except Exception as e:CODE
LOWsrc/specify_cli/events.py523 except Exception:STRING
LOWsrc/specify_cli/events.py625 except Exception:STRING
LOWsrc/specify_cli/events.py709 except Exception:STRING
LOWsrc/specify_cli/events.py771 except Exception as e:STRING
LOWsrc/specify_cli/events.py979 except Exception as exc:STRING
LOWsrc/specify_cli/events.py1015 except Exception:STRING
LOWsrc/specify_cli/events.py1060 except Exception:STRING
LOWsrc/specify_cli/events.py1075 except Exception:STRING
LOWsrc/specify_cli/events.py1661 except Exception:STRING
LOWsrc/specify_cli/events.py1791 except Exception as exc:STRING
LOWsrc/specify_cli/events.py1816 except Exception as exc:STRING
LOWsrc/specify_cli/_assets.py108 except Exception:CODE
LOWsrc/specify_cli/_assets.py117 except Exception:CODE
LOWsrc/specify_cli/__init__.py238 except Exception:CODE
LOWsrc/specify_cli/__init__.py255 except Exception as e:CODE
LOWsrc/specify_cli/_download_security.py520 except Exception as exc:CODE
LOWsrc/specify_cli/_download_security.py900 except Exception as exc:CODE
LOWsrc/specify_cli/_download_security.py1060 except Exception as exc:CODE
LOWsrc/specify_cli/_download_security.py1235 except Exception as exc:CODE
LOWsrc/specify_cli/_utils.py194 except Exception:CODE
LOWsrc/specify_cli/workflows/catalog.py576 except Exception as exc:CODE
LOWsrc/specify_cli/workflows/catalog.py1271 except Exception as exc:CODE
LOWsrc/specify_cli/workflows/expressions.py1025 except Exception: # noqa: BLE001 - probe values, not the author's textCODE
LOWsrc/specify_cli/workflows/__init__.py207 except Exception: # noqa: BLE001CODE
LOWsrc/specify_cli/workflows/engine.py1057 except Exception as exc:CODE
LOWsrc/specify_cli/workflows/engine.py1141 except Exception as exc:CODE
LOWsrc/specify_cli/workflows/engine.py1558 except Exception:CODE
LOWsrc/specify_cli/workflows/_commands.py439 except Exception:CODE
LOWsrc/specify_cli/workflows/_commands.py1429 except Exception as exc:CODE
LOWsrc/specify_cli/workflows/_commands.py1544 except Exception as exc:CODE
LOWsrc/specify_cli/workflows/_commands.py2060 except Exception as exc:CODE
57 more matches not shown…
Docstring Block Structure19 hits · 95 pts
SeverityFileLineSnippetContext
HIGHsrc/specify_cli/extensions/__init__.py1077Collect command and alias names declared by a manifest. Performs install-time validation for extension-specificSTRING
HIGHsrc/specify_cli/extensions/__init__.py2007Check if extension is compatible with current spec-kit version. Args: manifest: Extension manifest STRING
HIGHsrc/specify_cli/extensions/__init__.py2056Install extension from a local directory. Args: source_dir: Path to extension directory STRING
HIGHsrc/specify_cli/extensions/__init__.py2677Install an extension from a supported archive. Args: archive_path: Path to a .zip, .tar.gz, or .tgzSTRING
HIGHsrc/specify_cli/extensions/__init__.py3864Fetch a single catalog with per-URL caching. For the DEFAULT_CATALOG_URL, uses legacy cache files (self.cache_fSTRING
HIGHsrc/specify_cli/extensions/__init__.py4008Fetch and merge extensions from all active catalogs. Higher-priority (lower priority number) catalogs win on coSTRING
HIGHsrc/specify_cli/extensions/__init__.py4107Fetch extension catalog from URL or cache. Args: force_refresh: If True, bypass cache and fetch froSTRING
HIGHsrc/specify_cli/extensions/__init__.py4289Download an extension archive from a catalog. Args: extension_id: ID of the extension to download STRING
HIGHsrc/specify_cli/extensions/_commands.py295Resolve 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/integrations/junie/__init__.py21Convert command name to Junie-compatible hyphenated format. Junie does not allow dots inside of slash-commands. STRING
HIGHsrc/specify_cli/presets/__init__.py805Check if preset is compatible with current spec-kit version. Args: manifest: Preset manifest STRING
HIGHsrc/specify_cli/presets/__init__.py3559Install preset from a local directory. Args: source_dir: Path to preset directory speckSTRING
HIGHsrc/specify_cli/presets/__init__.py3741Install a preset from a supported archive. Args: archive_path: Path to a .zip, .tar.gz, or .tgz arcSTRING
HIGHsrc/specify_cli/presets/__init__.py4286Load catalog stack configuration from a YAML file. Args: config_path: Path to preset-catalogs.yml STRING
HIGHsrc/specify_cli/presets/__init__.py4477Fetch a single catalog with per-URL caching. Args: entry: PresetCatalogEntry describing the catalogSTRING
HIGHsrc/specify_cli/presets/__init__.py4647Fetch preset catalog from URL or cache. Args: force_refresh: If True, bypass cache and fetch from nSTRING
HIGHsrc/specify_cli/presets/__init__.py4832Download a preset archive from a catalog. Args: pack_id: ID of the preset to download tSTRING
Over-Commented Block105 hits · 88 pts
SeverityFileLineSnippetContext
LOWspec-driven.md121COMMENT
LOWtests/integrations/test_manifest.py461 def test_is_recovered_absolute_path_returns_false(self, tmp_path):COMMENT
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
LOWextensions/git/scripts/bash/auto-commit.sh1#!/usr/bin/env bashCOMMENT
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":"f9532e77722bfd32e8f626cbfbf6c5372ddcd9997963d965d53e8531b3eCOMMENT
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/feature-assess.lock.yml1# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"669e5f4d2956792cf5b7a2dfbbda10e7ef26f25fc8283f5b3db1cc838f0COMMENT
LOW.github/workflows/feature-assess.lock.yml21# gh aw compileCOMMENT
LOW.github/workflows/feature-assess.lock.yml41# - astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1COMMENT
LOW.github/workflows/feature-assess.lock.yml841 # --allow-tool shell(date)COMMENT
LOW.github/workflows/add-community-bundle.lock.yml1# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"c64e3dc29aca89e48108bb6d4eb877f6264b4cec9cd56dcd36827893802COMMENT
LOW.github/workflows/add-community-bundle.lock.yml21# gh aw compileCOMMENT
LOW.github/workflows/add-community-bundle.lock.yml41# - github/gh-aw-actions/setup@c0338fef4749d08c21f8f975fb0e37efa17dda47 # v0.79.8COMMENT
LOW.github/workflows/add-community-bundle.lock.yml861 # --allow-tool shell(cat)COMMENT
LOW.github/workflows/bug-test.lock.yml1# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"ec50d44af032f2f0c04073858a24d73cb1fa9036515b3bc7ee4dcfe0213COMMENT
LOW.github/workflows/bug-test.lock.yml21# gh aw compileCOMMENT
LOW.github/workflows/bug-test.lock.yml41# - astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1COMMENT
LOW.github/workflows/bug-test.lock.yml801 run: bash "${RUNNER_TEMP}/gh-aw/actions/audit_pre_agent_workspace.sh"COMMENT
LOW.github/workflows/bug-test.lock.yml821 # --allow-tool shell(make)COMMENT
LOW.github/workflows/add-community-preset.lock.yml1# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"09fb89e95c57c7beeaa0c823fb35f38d5f9db898a419e59dd0a323e7a92COMMENT
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/events.py41# are always stored in POSIX form (record_file/record_existing normalize viaCOMMENT
LOWsrc/specify_cli/events.py1261 # Always emit the timeout (4th positional arg) so the dispatcher's argvCOMMENT
LOWsrc/specify_cli/events.py1521 cursor_hooks[native] = entriesCOMMENT
LOWsrc/specify_cli/__init__.py1#!/usr/bin/env python3COMMENT
LOWsrc/specify_cli/agents.py661 # is about to write. The separator must match the *output layout* theCOMMENT
LOWsrc/specify_cli/shared_infra.py21# templates, scripts, extension config) tracked. Patterns are relative to theCOMMENT
LOWsrc/specify_cli/workflows/catalog.py341 f"Failed to read catalog config {config_path}: {exc}"COMMENT
LOWsrc/specify_cli/workflows/expressions.py421 # `from_json` is strict: it takes no arguments and tolerates no trailingCOMMENT
LOWsrc/specify_cli/workflows/expressions.py681 string for multi-expression or mixed templates).COMMENT
LOWsrc/specify_cli/workflows/expressions.py721 # Strip before matching: the string a condition resolves to is most oftenCOMMENT
LOWsrc/specify_cli/workflows/engine.py61 self.schema_version: str = data.get("schema_version", "1.0")COMMENT
LOWsrc/specify_cli/workflows/engine.py261 # strips ``enum`` before coercing; a scalar/string ``enum`` on anCOMMENT
LOWsrc/specify_cli/workflows/engine.py281 if "default" in input_def:COMMENT
LOWsrc/specify_cli/workflows/engine.py1261 "step_id": step_id,COMMENT
LOWsrc/specify_cli/workflows/engine.py1601 ) -> dict[str, Any]:COMMENT
45 more matches not shown…
Modern AI Meta-Vocabulary23 hits · 58 pts
SeverityFileLineSnippetContext
MEDIUMCONTRIBUTING.md871. **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
MEDIUMnewsletters/2026-July.md17**v0.12.3–v0.12.18** (July 1–17) was the month's longest patch run and carried two features amid heavy hardening. The **CODE
MEDIUMnewsletters/2026-July.md29The pipeline runs a staged flow — **capture → evidence → refine → design → decision** — that takes a raw idea, gathers sCODE
MEDIUMtests/test_extensions.py11393 # .specify/extensions/<id>/<name>, so that is where scaffolding mustCOMMENT
MEDIUMtests/test_presets.py4396 # it must scaffold (as a native-skill SKILL.md for claude) and beCOMMENT
MEDIUMtests/extensions/git/test_git_extension.py1283 # Baseline-commit the scaffolding (and config) so the tree isCOMMENT
MEDIUMtests/extensions/git/test_git_extension.py1285 # the untracked scaffold files would mask whether the message fileCOMMENT
MEDIUMtests/extensions/git/test_git_extension.py1629 # Baseline-commit the scaffolding (and config) so the tree isCOMMENT
MEDIUMtests/extensions/git/test_git_extension.py1631 # the untracked scaffold files would mask whether the message fileCOMMENT
MEDIUMtests/integrations/test_cli.py338 # Aborted before scaffolding: the pre-existing file is untouched.COMMENT
MEDIUMdocs/reference/integrations.md28| [IBM Bob](https://www.ibm.com/products/bob) | `bob` | Skills-basedCODE
MEDIUMpresets/ARCHITECTURE.md158│ ├── README.md # Guide for customizing the scaffoldCODE
MEDIUMsrc/specify_cli/events.py634 # uses for command scaffolding.STRING
MEDIUMsrc/specify_cli/agents.py664 # skill scaffold ("/SKILL.md") uses the skills separator; anyCOMMENT
MEDIUMsrc/specify_cli/agents.py782 # layout* this registrar writes — a "/SKILL.md" scaffold uses the skillsCOMMENT
MEDIUMsrc/specify_cli/extensions/__init__.py2831 # Only scaffold what removal actually preserves. remove(keep_config)COMMENT
MEDIUMsrc/specify_cli/extensions/__init__.py2862 # file or cannot be created, not raise out of scaffolding afterCOMMENT
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__.py164 # Mutable flag set by setup() — indicates the active scaffolding mode.COMMENT
Structural Annotation Overuse28 hits · 50 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/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.md487### Step 1: DescriptionCOMMENT
LOWextensions/EXTENSION-API-REFERENCE.md495### 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
LOW.github/workflows/add-community-bundle.md67## Step 1 - Read and Parse the IssueCOMMENT
LOW.github/workflows/add-community-bundle.md95## Step 2 - Validate the SubmissionCOMMENT
LOW.github/workflows/add-community-bundle.md186## Step 3 - Determine Add or UpdateCOMMENT
LOW.github/workflows/add-community-bundle.md197## Step 4 - Update the Community CatalogCOMMENT
LOW.github/workflows/add-community-bundle.md239## Step 5 - Update Community DocumentationCOMMENT
LOW.github/workflows/add-community-bundle.md258## Step 6 - Create a Draft Pull RequestCOMMENT
LOWsrc/specify_cli/extensions/__init__.py526 # Step 1: apply any rename from the auto-correction pass.COMMENT
LOWsrc/specify_cli/extensions/__init__.py528 # Step 2: lift alias-form '{ext_id}.cmd' to canonical 'speckit.{ext_id}.cmd'.COMMENT
Redundant / Tautological Comments27 hits · 40 pts
SeverityFileLineSnippetContext
LOWtests/test_extensions.py594 # Set ext_id to match the legacy namespace so correction is validCOMMENT
LOWextensions/git/scripts/python/auto_commit.py152 # Check if there are changes to commitCOMMENT
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.sh75# Check if git is availableCOMMENT
LOWextensions/git/scripts/bash/auto-commit.sh166 # Check if event section existed at allCOMMENT
LOWextensions/git/scripts/bash/auto-commit.sh180# 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.sh831 # Check if any layer uses a non-replace strategyCOMMENT
LOWscripts/bash/setup-plan.sh67# Output resultsCOMMENT
LOWscripts/bash/setup-tasks.sh62# Output resultsCOMMENT
LOWscripts/bash/check-prerequisites.sh181# Output resultsCOMMENT
LOWscripts/bash/create-new-feature.sh33 # Check if the next argument is another option (starts with --)COMMENT
LOWsrc/specify_cli/workflows/_commands.py3655 # Check if it's a built-inCOMMENT
LOWsrc/specify_cli/workflows/steps/prompt/__init__.py205 # Check if the CLI tool is actually installed.COMMENT
LOWsrc/specify_cli/workflows/steps/command/__init__.py211 # Check if the CLI tool is actually installed.COMMENT
LOWsrc/specify_cli/extensions/__init__.py1625 # Check if skill already exists before creating the directoryCOMMENT
LOWsrc/specify_cli/extensions/__init__.py2086 # Check if already installedCOMMENT
LOWsrc/specify_cli/extensions/__init__.py2715 # Check if manifest is in a subdirectoryCOMMENT
LOWsrc/specify_cli/extensions/_commands.py1020 # Check if extension exists in catalog (supports both ID and display name)COMMENT
LOWsrc/specify_cli/extensions/_commands.py1647 # Check if installation is allowed from this catalogCOMMENT
LOWsrc/specify_cli/presets/_commands.py472 # Check if installed locally firstCOMMENT
LOWsrc/specify_cli/presets/_commands.py569 # Check if preset is installedCOMMENT
LOWsrc/specify_cli/presets/_commands.py618 # Check if preset is installedCOMMENT
LOWsrc/specify_cli/presets/_commands.py655 # Check if preset is installedCOMMENT
AI Slop Vocabulary3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_workflows.py12745 # assertion is robust to Rich line-wrapping at narrow terminal widths.COMMENT
MEDIUMsrc/specify_cli/workflows/engine.py1467 # not the outer closure — clearer and robust if StepContext copyingCOMMENT
MEDIUMsrc/specify_cli/workflows/_commands.py3432 # ensuring the traversal check is robust even on non-canonical paths.COMMENT
Modern Structural Boilerplate9 hits · 8 pts
SeverityFileLineSnippetContext
LOW…s/extensions/test_update_agent_context_feature_json.py21def _setup_project(root: Path, context_file: str = "CLAUDE.md") -> None:CODE
LOWsrc/specify_cli/_console.py25logger = logging.getLogger(__name__)CODE
LOWsrc/specify_cli/events.py29logger = logging.getLogger(__name__)CODE
LOWsrc/specify_cli/shared_infra.py17logger = logging.getLogger(__name__)CODE
LOWsrc/specify_cli/workflows/engine.py721 def set_step_output(self, step_id: str, output: Any) -> None:CODE
LOWsrc/specify_cli/workflows/_commands.py601 def set_mode(self, mode: int) -> None:CODE
LOWsrc/specify_cli/workflows/_commands.py2788def _set_workflow_enabled(workflow_id: str, enabled: bool) -> None:CODE
LOWsrc/specify_cli/integrations/_helpers.py354def _set_default_integration_or_exit(*args: Any, **kwargs: Any) -> None:CODE
LOWsrc/specify_cli/bundler/__init__.py10__all__ = ["BundlerError"]CODE
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
Verbosity Indicators2 hits · 4 pts
SeverityFileLineSnippetContext
LOWsrc/specify_cli/extensions/__init__.py526 # Step 1: apply any rename from the auto-correction pass.COMMENT
LOWsrc/specify_cli/extensions/__init__.py528 # 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.py151CODE
AI Structural Patterns1 hit · 1 pts
SeverityFileLineSnippetContext
LOWsrc/specify_cli/commands/init.py257CODE