💫 Toolkit to help you get started with Spec-Driven Development
1919 matches across 14 categories. Click a row to expand file-level details.
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tests/test_workflows.py | 114 | def test_get_step_type_missing(self): |
| LOW | tests/test_workflows.py | 119 | def test_register_step_duplicate_raises(self): |
| LOW | tests/test_workflows.py | 126 | def test_register_step_empty_key_raises(self): |
| LOW | tests/test_workflows.py | 98 | def test_all_step_types_registered(self): |
| LOW | tests/test_workflows.py | 144 | def test_step_context_defaults(self): |
| LOW | tests/test_workflows.py | 154 | def test_step_context_with_data(self): |
| LOW | tests/test_workflows.py | 166 | def test_step_result_defaults(self): |
| LOW | tests/test_workflows.py | 208 | def test_step_output_reference(self): |
| LOW | tests/test_workflows.py | 217 | def test_string_interpolation(self): |
| LOW | tests/test_workflows.py | 233 | def test_comparison_not_equals(self): |
| LOW | tests/test_workflows.py | 288 | def test_condition_evaluation(self): |
| LOW | tests/test_workflows.py | 296 | def test_non_string_passthrough(self): |
| LOW | tests/test_workflows.py | 336 | def test_context_run_id_resolves(self): |
| LOW | tests/test_workflows.py | 349 | def test_context_run_id_defaults_to_empty_when_unset(self): |
| LOW | tests/test_workflows.py | 362 | def test_context_run_id_string_interpolation(self): |
| LOW | tests/test_workflows.py | 421 | def test_copilot_new_env_var_disables_yolo(self, monkeypatch): |
| LOW | tests/test_workflows.py | 429 | def test_copilot_deprecated_env_var_still_honoured(self, monkeypatch): |
| LOW | tests/test_workflows.py | 445 | def test_copilot_new_env_var_takes_precedence(self, monkeypatch): |
| LOW | tests/test_workflows.py | 453 | def test_ide_only_returns_none(self): |
| LOW | tests/test_workflows.py | 498 | def test_validate_missing_command(self): |
| LOW | tests/test_workflows.py | 505 | def test_step_override_integration(self): |
| LOW | tests/test_workflows.py | 553 | def test_dispatch_not_attempted_without_cli(self): |
| LOW | tests/test_workflows.py | 576 | def test_dispatch_with_mock_cli(self, tmp_path, monkeypatch): |
| LOW | tests/test_workflows.py | 613 | def test_dispatch_failure_returns_failed_status(self, tmp_path): |
| LOW | tests/test_workflows.py | 670 | def test_execute_with_step_integration(self): |
| LOW | tests/test_workflows.py | 704 | def test_dispatch_with_mock_cli(self, tmp_path): |
| LOW | tests/test_workflows.py | 733 | def test_validate_missing_prompt(self): |
| LOW | tests/test_workflows.py | 775 | def test_validate_missing_run(self): |
| LOW | tests/test_workflows.py | 786 | def test_execute_returns_paused(self): |
| LOW | tests/test_workflows.py | 803 | def test_validate_missing_message(self): |
| LOW | tests/test_workflows.py | 810 | def test_validate_invalid_on_reject(self): |
| LOW | tests/test_workflows.py | 858 | def test_validate_missing_condition(self): |
| LOW | tests/test_workflows.py | 869 | def test_execute_matches_case(self): |
| LOW | tests/test_workflows.py | 890 | def test_execute_falls_to_default(self): |
| LOW | tests/test_workflows.py | 910 | def test_execute_no_default_no_match(self): |
| LOW | tests/test_workflows.py | 929 | def test_validate_missing_expression(self): |
| LOW | tests/test_workflows.py | 936 | def test_validate_invalid_cases_and_default(self): |
| LOW | tests/test_workflows.py | 953 | def test_execute_condition_true(self): |
| LOW | tests/test_workflows.py | 971 | def test_execute_condition_false(self): |
| LOW | tests/test_workflows.py | 989 | def test_validate_missing_fields(self): |
| LOW | tests/test_workflows.py | 997 | def test_validate_invalid_max_iterations(self): |
| LOW | tests/test_workflows.py | 1008 | def test_execute_always_runs_once(self): |
| LOW | tests/test_workflows.py | 1025 | def test_execute_with_true_condition(self): |
| LOW | tests/test_workflows.py | 1058 | def test_validate_missing_fields(self): |
| LOW | tests/test_workflows.py | 1066 | def test_validate_steps_not_list(self): |
| LOW | tests/test_workflows.py | 1103 | def test_execute_non_list_items_resolves_empty(self): |
| LOW | tests/test_workflows.py | 1118 | def test_validate_missing_fields(self): |
| LOW | tests/test_workflows.py | 1126 | def test_validate_step_not_mapping(self): |
| LOW | tests/test_workflows.py | 1141 | def test_execute_collects_results(self): |
| LOW | tests/test_workflows.py | 1160 | def test_execute_multiple_wait_for(self): |
| LOW | tests/test_workflows.py | 1181 | def test_execute_missing_wait_for_step(self): |
| LOW | tests/test_workflows.py | 1195 | def test_validate_empty_wait_for(self): |
| LOW | tests/test_workflows.py | 1202 | def test_validate_wait_for_not_list(self): |
| LOW | tests/test_workflows.py | 1385 | def test_load_from_installed_id(self, sample_workflow_file, project_dir): |
| LOW | tests/test_workflows.py | 1399 | def test_execute_simple_workflow(self, project_dir): |
| LOW | tests/test_workflows.py | 2207 | def test_shell_run_resolves_run_id(self, project_dir): |
| LOW | tests/test_workflows.py | 2442 | def test_list_after_execution(self, project_dir): |
| LOW | tests/test_workflows.py | 2546 | def test_project_level_config(self, project_dir): |
| LOW | tests/test_workflows.py | 2564 | def test_validate_url_http_rejected(self, project_dir): |
| LOW | tests/test_workflows.py | 2571 | def test_validate_url_localhost_http_allowed(self, project_dir): |
| 1426 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | tests/test_workflows.py | 25 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_workflows.py | 27 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/conftest.py | 71 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/conftest.py | 73 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_setup_tasks.py | 115 | # =========================================================================== |
| MEDIUM | tests/test_setup_tasks.py | 117 | # =========================================================================== |
| MEDIUM | tests/test_setup_tasks.py | 421 | # =========================================================================== |
| MEDIUM | tests/test_setup_tasks.py | 423 | # =========================================================================== |
| MEDIUM | tests/test_setup_tasks.py | 24 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_setup_tasks.py | 26 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_setup_tasks.py | 85 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_setup_tasks.py | 87 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_setup_plan_no_overwrite.py | 80 | # ── Bash tests ──────────────────────────────────────────────────────────── |
| MEDIUM | tests/test_setup_plan_no_overwrite.py | 168 | # ── PowerShell tests ────────────────────────────────────────────────────── |
| MEDIUM | tests/test_timestamp_branches.py | 278 | # ── check_feature_branch Tests ─────────────────────────────────────────────── |
| MEDIUM | tests/test_timestamp_branches.py | 343 | # ── find_feature_dir_by_prefix Tests ───────────────────────────────────────── |
| MEDIUM | tests/test_timestamp_branches.py | 393 | # ── get_feature_paths + single-prefix integration ─────────────────────────── |
| MEDIUM | tests/test_timestamp_branches.py | 738 | # ── Dry-Run Tests ──────────────────────────────────────────────────────────── |
| MEDIUM | tests/test_timestamp_branches.py | 1146 | # ── Feature Directory Resolution Tests ─────────────────────────────────────── |
| MEDIUM | tests/test_timestamp_branches.py | 181 | # ── Timestamp Branch Tests ─────────────────────────────────────────────────── |
| MEDIUM | tests/test_timestamp_branches.py | 227 | # ── Sequential Branch Tests ────────────────────────────────────────────────── |
| MEDIUM | tests/test_timestamp_branches.py | 439 | # ── get_current_branch Tests ───────────────────────────────────────────────── |
| MEDIUM | tests/test_timestamp_branches.py | 450 | # ── No-git Tests ───────────────────────────────────────────────────────────── |
| MEDIUM | tests/test_timestamp_branches.py | 464 | # ── E2E Flow Tests ─────────────────────────────────────────────────────────── |
| MEDIUM | tests/test_timestamp_branches.py | 498 | # ── Allow Existing Branch Tests ────────────────────────────────────────────── |
| MEDIUM | tests/test_timestamp_branches.py | 967 | # ── PowerShell Dry-Run Tests ───────────────────────────────────────────────── |
| MEDIUM | tests/test_timestamp_branches.py | 1044 | # ── GIT_BRANCH_NAME Override Tests ────────────────────────────────────────── |
| MEDIUM | tests/test_timestamp_branches.py | 1309 | # ── Description Quoting Tests (issue #2339) ────────────────────────────────── |
| MEDIUM | tests/test_authentication.py | 69 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_authentication.py | 71 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_authentication.py | 328 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_authentication.py | 330 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_authentication.py | 368 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_authentication.py | 370 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_authentication.py | 529 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_authentication.py | 531 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_authentication.py | 685 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_authentication.py | 687 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_authentication.py | 757 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_authentication.py | 759 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_authentication.py | 33 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_authentication.py | 35 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_authentication.py | 284 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_authentication.py | 286 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_authentication.py | 407 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_authentication.py | 409 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_authentication.py | 630 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_authentication.py | 632 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_authentication.py | 811 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_authentication.py | 813 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/test_check_prerequisites_paths_only.py | 67 | # ── Bash tests ──────────────────────────────────────────────────────────── |
| MEDIUM | tests/test_check_prerequisites_paths_only.py | 145 | # ── PowerShell tests ────────────────────────────────────────────────────── |
| MEDIUM | tests/extensions/git/test_git_extension.py | 173 | # ── Install Tests ──────────────────────────────────────────────────────────── |
| MEDIUM | tests/extensions/git/test_git_extension.py | 214 | # ── initialize-repo.sh Tests ───────────────────────────────────────────────── |
| MEDIUM | tests/extensions/git/test_git_extension.py | 273 | # ── create-new-feature.sh Tests ────────────────────────────────────────────── |
| MEDIUM | tests/extensions/git/test_git_extension.py | 34 | # ── Helpers ────────────────────────────────────────────────────────────────── |
| MEDIUM | tests/extensions/git/test_git_extension.py | 127 | # ── Manifest Tests ─────────────────────────────────────────────────────────── |
| MEDIUM | tests/extensions/git/test_git_extension.py | 381 | # ── auto-commit.sh Tests ───────────────────────────────────────────────────── |
| MEDIUM | tests/extensions/git/test_git_extension.py | 589 | # ── auto-commit.ps1 CRLF warning tests (issue #2253) ──────────────────────── |
| MEDIUM | tests/extensions/git/test_git_extension.py | 739 | # ── git-common.sh Tests ────────────────────────────────────────────────────── |
| 60 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | tests/integrations/test_integration_base_markdown.py | 0 | the generated plan command must reference this integration's context file. |
| HIGH | tests/integrations/test_integration_base_toml.py | 0 | the generated plan command must reference this integration's context file. |
| HIGH | tests/integrations/test_integration_base_yaml.py | 0 | the generated plan command must reference this integration's context file. |
| HIGH | tests/integrations/test_integration_base_markdown.py | 0 | init-options.json must include context_file for the active integration. |
| HIGH | tests/integrations/test_integration_base_skills.py | 0 | init-options.json must include context_file for the active integration. |
| HIGH | tests/integrations/test_integration_base_toml.py | 0 | init-options.json must include context_file for the active integration. |
| HIGH | tests/integrations/test_integration_base_yaml.py | 0 | init-options.json must include context_file for the active integration. |
| HIGH | tests/integrations/test_integration_base_markdown.py | 0 | build the expected file list for this integration + script variant. |
| HIGH | tests/integrations/test_integration_base_toml.py | 0 | build the expected file list for this integration + script variant. |
| HIGH | tests/integrations/test_integration_base_yaml.py | 0 | build the expected file list for this integration + script variant. |
| HIGH | tests/integrations/test_integration_base_markdown.py | 0 | every file produced by specify init --integration <key> --script sh. |
| HIGH | tests/integrations/test_integration_base_skills.py | 0 | every file produced by specify init --integration <key> --script sh. |
| HIGH | tests/integrations/test_integration_base_toml.py | 0 | every file produced by specify init --integration <key> --script sh. |
| HIGH | tests/integrations/test_integration_base_yaml.py | 0 | every file produced by specify init --integration <key> --script sh. |
| HIGH | tests/integrations/test_integration_base_markdown.py | 0 | every file produced by specify init --integration <key> --script ps. |
| HIGH | tests/integrations/test_integration_base_skills.py | 0 | every file produced by specify init --integration <key> --script ps. |
| HIGH | tests/integrations/test_integration_base_toml.py | 0 | every file produced by specify init --integration <key> --script ps. |
| HIGH | tests/integrations/test_integration_base_yaml.py | 0 | every file produced by specify init --integration <key> --script ps. |
| HIGH | tests/integrations/test_integration_claude.py | 0 | skills without hook sections should not get the note. |
| HIGH | tests/integrations/test_integration_agy.py | 0 | skills without hook sections should not get the note. |
| HIGH | tests/integrations/test_integration_codex.py | 0 | skills without hook sections should not get the note. |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | src/specify_cli/presets.py | 559 | Check if preset is compatible with current spec-kit version. Args: manifest: Preset manifest |
| HIGH | src/specify_cli/presets.py | 1503 | Install preset from a local directory. Args: source_dir: Path to preset directory speck |
| HIGH | src/specify_cli/presets.py | 1622 | Install preset from ZIP file. Args: zip_path: Path to preset ZIP file speckit_version: |
| HIGH | src/specify_cli/presets.py | 1879 | Load catalog stack configuration from a YAML file. Args: config_path: Path to preset-catalogs.yml |
| HIGH | src/specify_cli/presets.py | 2051 | Fetch a single catalog with per-URL caching. Args: entry: PresetCatalogEntry describing the catalog |
| HIGH | src/specify_cli/presets.py | 2142 | Fetch preset catalog from URL or cache. Args: force_refresh: If True, bypass cache and fetch from n |
| HIGH | src/specify_cli/presets.py | 2272 | Download preset ZIP from catalog. Args: pack_id: ID of the preset to download target_di |
| HIGH | src/specify_cli/__init__.py | 2643 | Resolve an extension argument (ID or display name) to an installed extension. Args: argument: Extension ID |
| HIGH | src/specify_cli/extensions.py | 615 | Collect command and alias names declared by a manifest. Performs install-time validation for extension-specific |
| HIGH | src/specify_cli/extensions.py | 1119 | Check if extension is compatible with current spec-kit version. Args: manifest: Extension manifest |
| HIGH | src/specify_cli/extensions.py | 1156 | Install extension from a local directory. Args: source_dir: Path to extension directory |
| HIGH | src/specify_cli/extensions.py | 1240 | Install extension from ZIP file. Args: zip_path: Path to extension ZIP file speckit_ver |
| HIGH | src/specify_cli/extensions.py | 1824 | Fetch a single catalog with per-URL caching. For the DEFAULT_CATALOG_URL, uses legacy cache files (self.cache_f |
| HIGH | src/specify_cli/extensions.py | 1895 | Fetch and merge extensions from all active catalogs. Higher-priority (lower priority number) catalogs win on co |
| HIGH | src/specify_cli/extensions.py | 1965 | Fetch extension catalog from URL or cache. Args: force_refresh: If True, bypass cache and fetch fro |
| HIGH | src/specify_cli/extensions.py | 2088 | Download extension ZIP from catalog. Args: extension_id: ID of the extension to download |
| HIGH | src/specify_cli/integrations/forge/__init__.py | 20 | Convert command name to Forge-compatible hyphenated format. Forge requires command names to use hyphens instead |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tests/test_workflows.py | 13 | |
| LOW | tests/test_utils_assets_imports.py | 2 | |
| LOW | tests/test_utils_assets_imports.py | 2 | |
| LOW | tests/test_utils_assets_imports.py | 2 | |
| LOW | tests/test_authentication.py | 14 | |
| LOW | tests/test_extension_skills.py | 21 | |
| LOW | tests/test_console_imports.py | 2 | |
| LOW | tests/test_console_imports.py | 2 | |
| LOW | tests/test_console_imports.py | 2 | |
| LOW | tests/test_console_imports.py | 2 | |
| LOW | tests/test_console_imports.py | 2 | |
| LOW | tests/auth_helpers.py | 3 | |
| LOW | tests/integrations/test_integration_subcommand.py | 6 | |
| LOW | src/specify_cli/_console.py | 8 | |
| LOW | src/specify_cli/_version.py | 10 | |
| LOW | src/specify_cli/catalogs.py | 9 | |
| LOW | src/specify_cli/_assets.py | 6 | |
| LOW | src/specify_cli/__init__.py | 63 | |
| LOW | src/specify_cli/__init__.py | 63 | |
| LOW | src/specify_cli/__init__.py | 63 | |
| LOW | src/specify_cli/__init__.py | 63 | |
| LOW | src/specify_cli/__init__.py | 73 | |
| LOW | src/specify_cli/__init__.py | 81 | |
| LOW | src/specify_cli/__init__.py | 81 | |
| LOW | src/specify_cli/__init__.py | 81 | |
| LOW | src/specify_cli/__init__.py | 81 | |
| LOW | src/specify_cli/__init__.py | 81 | |
| LOW | src/specify_cli/__init__.py | 81 | |
| LOW | src/specify_cli/__init__.py | 81 | |
| LOW | src/specify_cli/__init__.py | 92 | |
| LOW | src/specify_cli/__init__.py | 92 | |
| LOW | src/specify_cli/__init__.py | 92 | |
| LOW | src/specify_cli/__init__.py | 98 | |
| LOW | src/specify_cli/__init__.py | 98 | |
| LOW | src/specify_cli/__init__.py | 98 | |
| LOW | src/specify_cli/shared_infra.py | 3 | |
| LOW | src/specify_cli/integration_runtime.py | 3 | |
| LOW | src/specify_cli/integration_state.py | 3 | |
| LOW | src/specify_cli/_agent_config.py | 2 | |
| LOW | src/specify_cli/_utils.py | 2 | |
| LOW | src/specify_cli/workflows/catalog.py | 10 | |
| LOW | src/specify_cli/workflows/expressions.py | 7 | |
| LOW | src/specify_cli/workflows/__init__.py | 12 | |
| LOW | src/specify_cli/workflows/engine.py | 11 | |
| LOW | src/specify_cli/workflows/base.py | 9 | |
| LOW | src/specify_cli/workflows/steps/shell/__init__.py | 3 | |
| LOW | src/specify_cli/workflows/steps/prompt/__init__.py | 3 | |
| LOW | src/specify_cli/workflows/steps/switch/__init__.py | 3 | |
| LOW | src/specify_cli/workflows/steps/gate/__init__.py | 3 | |
| LOW | src/specify_cli/workflows/steps/fan_out/__init__.py | 3 | |
| LOW | src/specify_cli/workflows/steps/command/__init__.py | 3 | |
| LOW | src/specify_cli/workflows/steps/if_then/__init__.py | 3 | |
| LOW | src/specify_cli/workflows/steps/fan_in/__init__.py | 3 | |
| LOW | src/specify_cli/workflows/steps/while_loop/__init__.py | 3 | |
| LOW | src/specify_cli/workflows/steps/do_while/__init__.py | 3 | |
| LOW | src/specify_cli/integrations/catalog.py | 10 | |
| LOW | src/specify_cli/integrations/manifest.py | 9 | |
| LOW | src/specify_cli/integrations/__init__.py | 7 | |
| LOW | src/specify_cli/integrations/base.py | 14 | |
| LOW | src/specify_cli/integrations/devin/__init__.py | 11 | |
| 24 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | tests/test_setup_tasks.py | 155 | # Create the override |
| MEDIUM | tests/test_extensions.py | 1014 | # Create a config file |
| MEDIUM | tests/test_presets.py | 3426 | # Create a template in the preset directory |
| MEDIUM | tests/test_presets.py | 3728 | # Create a preset command dir with a wrap-strategy command |
| MEDIUM | tests/test_presets.py | 4821 | # Create a gemini commands dir so reconciliation writes there |
| MEDIUM | tests/test_extension_registration.py | 69 | # Create a mock manifest |
| MEDIUM | tests/test_extension_registration.py | 117 | # Create a manifest with hooks |
| MEDIUM | tests/test_extension_registration.py | 175 | # Create a corrupted config (root is a list) |
| MEDIUM | tests/test_extension_registration.py | 330 | # Create a manifest with a hook for the same event |
| MEDIUM | tests/extensions/git/test_git_extension.py | 409 | # Create a file to commit |
| MEDIUM | tests/integrations/test_integration_hermes.py | 184 | # Create a foreign skill in the global dir first |
| MEDIUM | tests/integrations/test_integration_forge.py | 296 | # Create a mock extension command file |
| MEDIUM | tests/integrations/test_integration_forge.py | 302 | # Create a test command with dot notation name |
| MEDIUM | tests/integrations/test_integration_forge.py | 347 | # Create a mock extension command file |
| MEDIUM | tests/integrations/test_integration_forge.py | 395 | # Create a mock extension command file |
| MEDIUM | tests/integrations/test_integration_opencode.py | 76 | # Create a source command file for the registrar |
| MEDIUM | tests/integrations/test_integration_opencode.py | 163 | # Create a source command file for the registrar |
| MEDIUM | scripts/bash/setup-plan.sh | 65 | # Create a basic plan file if template doesn't exist |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | src/specify_cli/_console.py | 142 | |
| LOW | src/specify_cli/_console.py | 85 | |
| LOW | src/specify_cli/_console.py | 193 | |
| LOW | src/specify_cli/presets.py | 589 | |
| LOW | src/specify_cli/presets.py | 701 | |
| LOW | src/specify_cli/presets.py | 865 | |
| LOW | src/specify_cli/presets.py | 959 | |
| LOW | src/specify_cli/presets.py | 1209 | |
| LOW | src/specify_cli/presets.py | 1616 | |
| LOW | src/specify_cli/presets.py | 1672 | |
| LOW | src/specify_cli/presets.py | 2448 | |
| LOW | src/specify_cli/presets.py | 2701 | |
| LOW | src/specify_cli/presets.py | 2899 | |
| LOW | src/specify_cli/presets.py | 2949 | |
| LOW | src/specify_cli/_assets.py | 104 | |
| LOW | src/specify_cli/__init__.py | 226 | |
| LOW | src/specify_cli/__init__.py | 592 | |
| LOW | src/specify_cli/__init__.py | 797 | |
| LOW | src/specify_cli/__init__.py | 1049 | |
| LOW | src/specify_cli/__init__.py | 1276 | |
| LOW | src/specify_cli/__init__.py | 1736 | |
| LOW | src/specify_cli/__init__.py | 2054 | |
| LOW | src/specify_cli/__init__.py | 2232 | |
| LOW | src/specify_cli/__init__.py | 2694 | |
| LOW | src/specify_cli/__init__.py | 2953 | |
| LOW | src/specify_cli/__init__.py | 3216 | |
| LOW | src/specify_cli/__init__.py | 3295 | |
| LOW | src/specify_cli/__init__.py | 3479 | |
| LOW | src/specify_cli/__init__.py | 3907 | |
| LOW | src/specify_cli/__init__.py | 3946 | |
| LOW | src/specify_cli/__init__.py | 4232 | |
| LOW | src/specify_cli/__init__.py | 4521 | |
| LOW | src/specify_cli/agents.py | 433 | |
| LOW | src/specify_cli/agents.py | 751 | |
| LOW | src/specify_cli/agents.py | 810 | |
| LOW | src/specify_cli/agents.py | 868 | |
| LOW | src/specify_cli/extensions.py | 614 | |
| LOW | src/specify_cli/extensions.py | 689 | |
| LOW | src/specify_cli/extensions.py | 822 | |
| LOW | src/specify_cli/extensions.py | 984 | |
| LOW | src/specify_cli/extensions.py | 1234 | |
| LOW | src/specify_cli/extensions.py | 1294 | |
| LOW | src/specify_cli/extensions.py | 1377 | |
| LOW | src/specify_cli/extensions.py | 1823 | |
| LOW | src/specify_cli/extensions.py | 2581 | |
| LOW | src/specify_cli/shared_infra.py | 250 | |
| LOW | src/specify_cli/_utils.py | 123 | |
| LOW | src/specify_cli/_utils.py | 133 | |
| LOW | src/specify_cli/workflows/catalog.py | 310 | |
| LOW | src/specify_cli/workflows/catalog.py | 369 | |
| LOW | src/specify_cli/workflows/expressions.py | 29 | |
| LOW | src/specify_cli/workflows/engine.py | 102 | |
| LOW | src/specify_cli/workflows/engine.py | 193 | |
| LOW | src/specify_cli/workflows/engine.py | 554 | |
| LOW | src/specify_cli/workflows/engine.py | 750 | |
| LOW | src/specify_cli/workflows/engine.py | 829 | |
| LOW | src/specify_cli/integrations/base.py | 552 | |
| LOW | src/specify_cli/integrations/base.py | 713 | |
| LOW | src/specify_cli/integrations/base.py | 1512 | |
| LOW | src/specify_cli/integrations/copilot/__init__.py | 285 | |
| 10 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tests/test_extensions.py | 330 | # Set ext_id to match the legacy namespace so correction is valid |
| LOW | extensions/git/scripts/bash/git-common.sh | 6 | # Check if we have git available at the repo root |
| LOW | extensions/git/scripts/bash/auto-commit.sh | 34 | # Check if git is available |
| LOW | extensions/git/scripts/bash/auto-commit.sh | 106 | # Check if event section existed at all |
| LOW | extensions/git/scripts/bash/auto-commit.sh | 120 | # Check if there are changes to commit |
| LOW | extensions/git/scripts/bash/initialize-repo.sh | 37 | # Check if git is available |
| LOW | extensions/git/scripts/bash/initialize-repo.sh | 43 | # Check if already a git repo |
| LOW | extensions/git/scripts/bash/create-new-feature.sh | 249 | # Check if git is available at this repo root |
| LOW | scripts/bash/common.sh | 104 | # Check if we have git available at the spec-kit root level |
| LOW | scripts/bash/common.sh | 111 | # Check if .git exists (directory or file for worktrees/submodules) |
| LOW | scripts/bash/common.sh | 305 | # Check if jq is available for safe JSON construction |
| LOW | scripts/bash/common.sh | 576 | # Check if any layer uses a non-replace strategy |
| LOW | scripts/bash/setup-plan.sh | 70 | # Output results |
| LOW | scripts/bash/setup-tasks.sh | 65 | # Output results |
| LOW | scripts/bash/check-prerequisites.sh | 156 | # Output results |
| LOW | scripts/bash/create-new-feature.sh | 32 | # Check if the next argument is another option (starts with --) |
| LOW | scripts/bash/create-new-feature.sh | 197 | # Check if git is available at this repo root (not a parent) |
| LOW | scripts/bash/create-new-feature.sh | 333 | # Check if branch already exists |
| LOW | src/specify_cli/presets.py | 995 | # Check if any preset previously registered this skill |
| LOW | src/specify_cli/__init__.py | 2303 | # Check if installed locally first |
| LOW | src/specify_cli/__init__.py | 2377 | # Check if preset is installed |
| LOW | src/specify_cli/__init__.py | 2415 | # Check if preset is installed |
| LOW | src/specify_cli/__init__.py | 2448 | # Check if preset is installed |
| LOW | src/specify_cli/__init__.py | 3056 | # Check if extension exists in catalog (supports both ID and display name) |
| LOW | src/specify_cli/__init__.py | 3539 | # Check if installation is allowed from this catalog |
| LOW | src/specify_cli/extensions.py | 889 | # Check if skill already exists before creating the directory |
| LOW | src/specify_cli/extensions.py | 1184 | # Check if already installed |
| LOW | src/specify_cli/extensions.py | 1281 | # Check if manifest is in a subdirectory |
| LOW | src/specify_cli/workflows/steps/command/__init__.py | 129 | # Check if the integration supports CLI dispatch |
| LOW | src/specify_cli/workflows/steps/command/__init__.py | 133 | # Check if the CLI tool is actually installed |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tests/integrations/test_integration_base_toml.py | 310 | except Exception as exc: |
| LOW | tests/integrations/test_integration_base_yaml.py | 158 | except Exception as exc: |
| LOW | scripts/bash/common.sh | 373 | except Exception: |
| LOW | scripts/bash/common.sh | 461 | except Exception: |
| LOW | scripts/bash/common.sh | 492 | except Exception: |
| LOW | src/specify_cli/_console.py | 82 | except Exception: |
| LOW | src/specify_cli/presets.py | 783 | except Exception: |
| LOW | src/specify_cli/presets.py | 908 | except Exception: |
| LOW | src/specify_cli/presets.py | 1082 | except Exception: |
| LOW | src/specify_cli/presets.py | 1567 | except Exception: |
| LOW | src/specify_cli/presets.py | 1606 | except Exception as exc: |
| LOW | src/specify_cli/presets.py | 1739 | except Exception as exc: |
| LOW | src/specify_cli/_assets.py | 108 | except Exception: |
| LOW | src/specify_cli/_assets.py | 117 | except Exception: |
| LOW | src/specify_cli/__init__.py | 1512 | except Exception as ext_err: |
| LOW | src/specify_cli/__init__.py | 1521 | except Exception as exc: |
| LOW | src/specify_cli/__init__.py | 1525 | except Exception as rollback_err: |
| LOW | src/specify_cli/__init__.py | 247 | except Exception: |
| LOW | src/specify_cli/__init__.py | 264 | except Exception as e: |
| LOW | src/specify_cli/__init__.py | 1018 | except Exception as exc: |
| LOW | src/specify_cli/__init__.py | 1022 | except Exception as rollback_err: |
| LOW | src/specify_cli/__init__.py | 1412 | except Exception as ext_err: |
| LOW | src/specify_cli/__init__.py | 1701 | except Exception as exc: |
| LOW | src/specify_cli/__init__.py | 2257 | except Exception as exc: |
| LOW | src/specify_cli/__init__.py | 2559 | except Exception as e: |
| LOW | src/specify_cli/__init__.py | 2611 | except Exception: |
| LOW | src/specify_cli/__init__.py | 2877 | except Exception as e: |
| LOW | src/specify_cli/__init__.py | 2929 | except Exception: |
| LOW | src/specify_cli/__init__.py | 3770 | except Exception as e: |
| LOW | src/specify_cli/__init__.py | 3884 | except Exception as rollback_error: |
| LOW | src/specify_cli/__init__.py | 4095 | except Exception as exc: |
| LOW | src/specify_cli/__init__.py | 4132 | except Exception as exc: |
| LOW | src/specify_cli/__init__.py | 4314 | except Exception as exc: |
| LOW | src/specify_cli/__init__.py | 4415 | except Exception as exc: |
| LOW | src/specify_cli/extensions.py | 2725 | except Exception: |
| LOW | src/specify_cli/_utils.py | 164 | except Exception: |
| LOW | src/specify_cli/_utils.py | 186 | except Exception as e: |
| LOW | src/specify_cli/_utils.py | 222 | except Exception as e: |
| LOW | src/specify_cli/workflows/catalog.py | 343 | except Exception as exc: |
| LOW | src/specify_cli/workflows/engine.py | 482 | except Exception as exc: |
| LOW | src/specify_cli/workflows/engine.py | 542 | except Exception as exc: |
| LOW | src/specify_cli/commands/init.py | 88 | except Exception as e: |
| LOW | src/specify_cli/commands/init.py | 494 | except Exception as ext_err: |
| LOW | src/specify_cli/commands/init.py | 534 | except Exception as wf_err: |
| LOW | src/specify_cli/commands/init.py | 601 | except Exception as preset_err: |
| LOW | src/specify_cli/commands/init.py | 613 | except Exception as e: |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | spec-driven.md | 121 | |
| LOW | tests/integrations/test_extra_args.py | 401 | ] |
| LOW | tests/integrations/test_extra_args.py | 481 | assert "--sandbox" in capture.captured_args |
| LOW | extensions/template/config-template.yml | 61 | |
| LOW | scripts/bash/check-prerequisites.sh | 1 | #!/usr/bin/env bash |
| LOW | .github/workflows/add-community-extension.lock.yml | 1 | # gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"f1073a236eb41f9fc2b5b8c1e58c25e02b5a6d18d242887636acc9007dd |
| LOW | .github/workflows/add-community-extension.lock.yml | 21 | # Not all edits will cause changes to this file. |
| LOW | .github/workflows/add-community-extension.lock.yml | 41 | # - github/gh-aw-actions/setup@b11be78086764c43fa463398aed7ffdcf40549c1 # v0.77.0 |
| LOW | .github/workflows/add-community-extension.lock.yml | 781 | - name: Clean credentials |
| LOW | .github/workflows/add-community-extension.lock.yml | 801 | # --allow-tool shell(git rm:*) |
| LOW | .github/workflows/add-community-preset.lock.yml | 1 | # gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"f6cbeb7bc3ee4de1c2b3963fbf21525d0add0425a6807a8335f8f9d93e0 |
| LOW | .github/workflows/add-community-preset.lock.yml | 21 | # Not all edits will cause changes to this file. |
| LOW | .github/workflows/add-community-preset.lock.yml | 41 | # - github/gh-aw-actions/setup@b11be78086764c43fa463398aed7ffdcf40549c1 # v0.77.0 |
| LOW | .github/workflows/add-community-preset.lock.yml | 781 | - name: Clean credentials |
| LOW | .github/workflows/add-community-preset.lock.yml | 801 | # --allow-tool shell(git rm:*) |
| LOW | presets/scaffold/preset.yml | 21 | |
| LOW | presets/scaffold/preset.yml | 41 | # $CORE_SCRIPT placeholder (scripts), replaced with lower-priority content |
| LOW | presets/scaffold/preset.yml | 61 | # |
| LOW | src/specify_cli/presets.py | 61 | short_name = short_name[len("speckit."):] |
| LOW | src/specify_cli/__init__.py | 1 | #!/usr/bin/env python3 |
| LOW | src/specify_cli/workflows/engine.py | 761 | # Resolve sentinels for explicitly-provided values too: a |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | tests/test_extension_update_hardening.py | 80 | # Write config with hooks: null; get_project_config() normalizes this to {} |
| HIGH | tests/test_extension_registration.py | 303 | """Regression: hooks: {after_tasks: null} must not crash in unregister_hooks().""" |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | extensions/template/EXAMPLE-README.md | 52 | api_key: "your-api-key" |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | .github/PULL_REQUEST_TEMPLATE.md | 21 | <!-- If you used AI, briefly describe how (e.g., "Code generated by Copilot", "Consulted ChatGPT for approach"): --> |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | src/specify_cli/extensions.py | 284 | # Step 1: apply any rename from the auto-correction pass. |
| LOW | src/specify_cli/extensions.py | 286 | # Step 2: lift alias-form '{ext_id}.cmd' to canonical 'speckit.{ext_id}.cmd'. |