Generated 2026-10-03T01:14:03+00:00 · commit 81533498d6205c8274e47ee7b8d1204f7f59c6c4 · branch fix/risk-findings · root /Users/marshallguillory/repos/secure-code-agent · standard ISO/IEC 25010 maintainability-inspired 0-5 scale, rate-based
| Severity | Findings |
|---|---|
| Severe | 5 |
| High | 38 |
| Medium | 5 |
| Low | 0 |
| Total findings | 48 |
11 of 17 tools contributed — concerns all, depth heavy, license policy copyleft-any. Plus 8 built-in detectors.
| Source | Tier | Outcome | Version | Measurements | Findings |
|---|---|---|---|---|---|
| cohesion | analyzer | failed | — | — | — |
| eslint | analyzer | not-applicable | — | — | — |
| fortitude | analyzer | not-applicable | — | — | — |
| spotbugs | analyzer | not-applicable | — | — | — |
| interrogate | analyzer | parse-error | interrogate, version 1.7.0 | — | — |
| pylint | analyzer | parse-error | pylint 4.0.7 | — | — |
| checkstyle | analyzer | ran | Checkstyle version: 14.0.0 | 0 | 37 |
| complexipy | analyzer | ran | 7.0.1 | 1346 | 0 |
| jscpd | analyzer | ran | cpd 5.1.1 | 1 | 76 |
| lizard | analyzer | ran | 1.24.0 | 4323 | 0 |
| multimetric | analyzer | ran | usage: multimetric [-h] [--warn_compiler WARN_COMPILER] | 536 | 0 |
| mypy | analyzer | ran | mypy 2.3.1 (compiled: yes) | 0 | 0 |
| pmd | analyzer | ran | PMD 7.26.0 (8fd38edf285a33e1164f66205ebe243441db9557, 2026-06-29T08:22:36Z) | 0 | 0 |
| pydocstyle | analyzer | ran | 6.3.0 | 0 | 200 |
| radon | analyzer | ran | 6.0.1 | 126 | 0 |
| ruff | analyzer | ran | ruff 0.16.5 | 0 | 0 |
| vulture | analyzer | ran | vulture 2.16 | 0 | 0 |
| competing-libraries | built-in | ran | — | 160 | 0 |
| dead-code | built-in | ran | — | 1513 | 0 |
| declaration-size | built-in | ran | — | 1513 | 73 |
| duplicate-blocks | built-in | ran | — | 160 | 22 |
| file-size | built-in | ran | — | 160 | 24 |
| history | built-in | ran | — | 160 | 24 |
| near-duplicates | built-in | ran | — | 1513 | 1 |
| risk-patterns | built-in | ran | — | 160 | 5 |
One source only: complexity, dead-code, metrics.
A built-in detector examined these and no external tool did, so nothing corroborates them. Install a tool covering the concern to get a second opinion.
declarations measured by analyzers, completed by built-in detectors: no analyzer supplies cognitive_complexity for Go, Java, JavaScript, Ruby, so the built-in scanner supplied it for those declarations and the analyzers supplied the rest; the criterion set is complete per declaration, which is what makes the rate comparable to the rubric's.
Nothing examined: documentation, structure, style, testing, types.
These concerns are unmeasured, not clean. Install a tool that covers them, or widen analyzers.depth, to have them reported.
Analyzer children are not network-isolated. 11 external tools ran as local child processes. This agent does not transmit the audited source and opens no socket of its own, but it does not sandbox what it spawns: a third-party analyzer that reaches the network is outside what this run controls or observes. Determinism and no upload are the promise; a kernel air-gap is not.
| Recorded | Commit | Estimate | Findings |
|---|---|---|---|
| 2026-10-02T18:05:36Z | 16b46248 | 3.9 | 47 |
| 2026-10-02T21:23:10Z | 808ca7ca | 3.9 | 47 |
| 2026-10-02T21:31:16Z | 808ca7ca | 4.0 | 43 |
| 2026-10-02T21:42:02Z | bb5c9db0 | 4.0 | 43 |
| 2026-10-02T22:21:49Z | 7fb8b976 | 4.0 | 44 |
| 2026-10-02T22:35:49Z | b9f9b788 | 4.1 | 44 |
| 2026-10-02T22:45:23Z | 4603288a | 4.1 | 44 |
| 2026-10-02T23:02:22Z | 85722855 | 4.0 | 43 |
| 2026-10-02T23:52:25Z | 9b16aaba | 4.1 | 43 |
| 2026-10-03T00:45:48Z | de4a7800 | 4.1 | 43 |
| 2026-10-03T00:52:31Z | a60ee09b | 4.1 | 43 |
| 2026-10-03T01:17:03Z | 81533498 | 4.1 | 47 |
12 scans, 2026-10-02T18:05:36Z to 2026-10-03T01:17:03Z.
Every figure describes scans that happened; nothing forecasts.
3,900 – 66,000 USD over 12 months (base 19,800 USD), across 48 work-order item(s).
This is a scenario, not a prediction.
Assumptions:
TDD-shaped tests: detected beside 45 of 45 production source files (path pairing). Constructs: pytest in 77 file(s), unittest in 1 file(s), describe_it in 2 file(s), parametrize in 30 file(s), given_when_then in 2 file(s).
Chronology is not measured. Effectiveness is unscored unless the operator opted into suite execution.
The operator opted in to running the repository's test command; it passed.
Command: pytest
Program run: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/pytest
Coverage: 94.8% line coverage
Practice level 4 of 5 — CI holds a numeric quality gate.
| Pillar | Scope | Practice | Condition | Reading |
|---|---|---|---|---|
| readability | partial | 4 | 4.5 | healthy: enforced, and the code reflects it |
| maintainability | owned | 4 | 4.0 | healthy: enforced, and the code reflects it |
| efficiency | out-of-scope | — | — | not measured — see below |
| security | delegated | 5 | — | unverified: not graded — scanner coverage is failed; findings: no findings |
| testability | partial | 4 | 5.0 | healthy: enforced, and the code reflects it |
Not measured here, and why:
Enforcement found: linter-config, recorded-decisions, lint-in-ci, coverage-gate.
| Category | Score |
|---|---|
| modularity | 3.6 |
| reusability | 4.5 |
| analyzability | 4.1 |
| modifiability | 3.8 |
| testability | 4.6 |
| Aspect | Score |
|---|---|
| file size | 3.7 |
| declaration size | 3.6 |
| duplication | 4.5 |
| risk patterns | 3.9 |
| policy gates | 5.0 |
| test presence | 5.0 |
| dead code | 5.0 |
| near duplication | 4.5 |
| idiom consistency | 5.0 |
| documentation | 5.0 |
| churn hotspots | 3.0 |
| change coupling | 3.0 |
| knowledge concentration | 4.0 |
| test effectiveness | 4.7 |
| Aspect | Why |
|---|---|
| naming quality | no static proxy survives contact; a wrong-name detector needs semantics |
| comment accuracy | comments are deliberately unparsed; staleness needs meaning, not structure |
| indirection depth | call-graph construction is not implemented for the supported languages |
| architectural coherence | no measurement distinguishes a wrong boundary from an unusual one statically |
| File | Lines | Status |
|---|---|---|
docs/decisions.md | 1953 | fail |
src/secure_code_audit/cli.py | 1590 | fail |
CHANGELOG.md | 1391 | fail |
src/secure_code_audit/scoring.py | 951 | fail |
tests/unit/test_calibrate.py | 771 | warn |
src/secure_code_audit/standards.py | 705 | warn |
src/secure_code_audit/config.py | 677 | warn |
src/secure_code_audit/renderers.py | 590 | warn |
calibration/calibrate.py | 574 | warn |
README.md | 569 | warn |
src/secure_code_audit/sarif.py | 500 | warn |
tests/unit/test_cli_coverage.py | 493 | warn |
tests/unit/test_tier2_scanners.py | 484 | warn |
docs/product-intent.md | 473 | warn |
tests/unit/test_suppressions.py | 458 | warn |
src/secure_code_audit/suppressions.py | 441 | warn |
tests/unit/test_offline_ruleset.py | 430 | warn |
tests/unit/test_plan_features.py | 430 | warn |
src/secure_code_audit/remediation.py | 421 | warn |
src/secure_code_audit/verify.py | 417 | warn |
tests/unit/test_finding_builder.py | 417 | warn |
tests/unit/test_tier1_scanners.py | 415 | warn |
src/secure_code_audit/findings.py | 408 | warn |
tests/integration/test_scoring_drift.py | 407 | warn |
tests/integration/test_finding_paths_are_repository_relative.py | 392 | ok |
| File | Declaration | Line | Lines | Complexity | Cognitive | Status |
|---|---|---|---|---|---|---|
calibration/calibrate.py | summarize | 366 | 70 | 31 | 12 | fail |
src/secure_code_audit/cli.py | _do_audit | 495 | 285 | 29 | 18 | fail |
src/secure_code_audit/practice.py | assess | 207 | 94 | 28 | 35 | fail |
src/secure_code_audit/verify.py | compare | 294 | 79 | 25 | 7 | fail |
src/secure_code_audit/scanners/semgrep_scanner.py | _parse_sarif | 148 | 56 | 24 | 32 | fail |
src/secure_code_audit/config.py | _validate_gates | 641 | 32 | 21 | 21 | fail |
calibration/calibrate.py | main | 438 | 133 | 20 | 20 | fail |
src/secure_code_audit/cli.py | _print_summary | 1347 | 76 | 19 | 19 | fail |
src/secure_code_audit/suppressions.py | _narrow_keys | 194 | 41 | 18 | 18 | fail |
src/secure_code_audit/scanners/_finding_builder.py | _resolve_standards | 35 | 67 | 17 | 26 | fail |
src/secure_code_audit/config.py | _apply_scanners | 478 | 36 | 17 | 21 | fail |
src/secure_code_audit/scanners/pip_audit_scanner.py | _audit_inputs | 106 | 33 | 17 | 13 | fail |
src/secure_code_audit/scanners/bandit_scanner.py | scan | 55 | 60 | 16 | 16 | fail |
src/secure_code_audit/cli.py | _split_axes | 385 | 108 | 8 | 14 | fail |
src/secure_code_audit/suppressions.py | unused_findings | 318 | 82 | 5 | 5 | fail |
src/secure_code_audit/cli.py | _parser | 70 | 159 | 2 | 0 | fail |
src/secure_code_audit/git_tools.py | loc_under | 169 | 61 | 15 | 19 | warn |
src/secure_code_audit/pillar.py | build | 135 | 48 | 15 | 13 | warn |
src/secure_code_audit/scanners/gosec_scanner.py | _finding_for | 112 | 24 | 15 | 19 | warn |
calibration/calibrate.py | variants | 244 | 59 | 14 | 7 | warn |
src/secure_code_audit/scoring.py | score | 687 | 55 | 14 | 14 | warn |
src/secure_code_audit/renderers.py | _findings_sections | 449 | 47 | 14 | 17 | warn |
src/secure_code_audit/renderers.py | _pr_comment | 547 | 44 | 14 | 16 | warn |
src/secure_code_audit/scanners/npm_audit_scanner.py | _parse | 86 | 43 | 14 | 11 | warn |
src/secure_code_audit/sarif.py | _finding_from_result | 433 | 41 | 14 | 21 | warn |
tests/integration/test_finding_paths_are_repository_relative.py | test_no_written_output_names_the_checkout | 243 | 34 | 14 | 3 | warn |
src/secure_code_audit/scanners/njsscan_scanner.py | _findings_for_rule | 76 | 31 | 14 | 19 | warn |
src/secure_code_audit/sarif.py | ingest_with_coverage | 262 | 72 | 13 | 14 | warn |
src/secure_code_audit/scanners/pip_audit_scanner.py | scan | 45 | 60 | 13 | 17 | warn |
src/secure_code_audit/renderers.py | _summary_section | 287 | 59 | 13 | 21 | warn |
src/secure_code_audit/renderers.py | _scanners_section | 408 | 39 | 13 | 16 | warn |
src/secure_code_audit/scanners/_resolution.py | _resolve_candidate | 100 | 24 | 13 | 19 | warn |
src/secure_code_audit/renderers.py | to_json | 24 | 59 | 12 | 13 | warn |
src/secure_code_audit/cli.py | _do_preflight | 280 | 56 | 12 | 13 | warn |
src/secure_code_audit/cli.py | _measurable_categories | 895 | 48 | 12 | 11 | warn |
src/secure_code_audit/findings.py | merge_corroborating | 364 | 45 | 12 | 17 | warn |
src/secure_code_audit/scanners/rubocop_scanner.py | scan | 59 | 38 | 12 | 15 | warn |
src/secure_code_audit/history.py | read | 102 | 31 | 12 | 14 | warn |
src/secure_code_audit/renderers.py | _one_finding_md | 498 | 31 | 12 | 15 | warn |
src/secure_code_audit/suppressions.py | matches | 70 | 31 | 12 | 10 | warn |
src/secure_code_audit/scanners/gitleaks_scanner.py | _parse | 130 | 24 | 12 | 11 | warn |
src/secure_code_audit/scanners/gosec_scanner.py | _load_failure | 87 | 24 | 12 | 18 | warn |
src/secure_code_audit/sarif.py | _location_from_result | 491 | 10 | 12 | 14 | warn |
src/secure_code_audit/verify.py | measure_scope | 97 | 56 | 11 | 10 | warn |
src/secure_code_audit/scanners/trufflehog_scanner.py | scan | 36 | 54 | 11 | 15 | warn |
src/secure_code_audit/scanners/hadolint_scanner.py | scan | 50 | 29 | 11 | 7 | warn |
src/secure_code_audit/scanners/osv_scanner.py | _parse | 85 | 28 | 11 | 15 | warn |
src/secure_code_audit/cli.py | _print_preflight | 338 | 24 | 11 | 16 | warn |
src/secure_code_audit/config.py | _apply_file_and_loc | 568 | 19 | 11 | 13 | warn |
src/secure_code_audit/scanners/semgrep_scanner.py | _cwe_from_rule | 33 | 19 | 11 | 11 | warn |
| Severity | Band | Finding | Location | Do |
|---|---|---|---|---|
| High | quick-win | _do_audit in src/secure_code_audit/cli.py | src/secure_code_audit/cli.py:495 | reduce below the configured limits (currently 285 lines against 80, complexity 29 against 15, cognitive 18 against 25) |
| High | quick-win | _parser in src/secure_code_audit/cli.py | src/secure_code_audit/cli.py:70 | reduce below the configured limits (currently 159 lines against 80, complexity 2 against 15, cognitive 0 against 25) |
| High | quick-win | _print_summary in src/secure_code_audit/cli.py | src/secure_code_audit/cli.py:1347 | reduce below the configured limits (currently 76 lines against 80, complexity 19 against 15, cognitive 19 against 25) |
| High | quick-win | _split_axes in src/secure_code_audit/cli.py | src/secure_code_audit/cli.py:385 | reduce below the configured limits (currently 108 lines against 80, complexity 8 against 15, cognitive 14 against 25) |
| High | quick-win | _apply_scanners in src/secure_code_audit/config.py | src/secure_code_audit/config.py:478 | reduce below the configured limits (currently 36 lines against 80, complexity 17 against 15, cognitive 21 against 25) |
| High | quick-win | _validate_gates in src/secure_code_audit/config.py | src/secure_code_audit/config.py:641 | reduce below the configured limits (currently 32 lines against 80, complexity 21 against 15, cognitive 21 against 25) |
| High | quick-win | _narrow_keys in src/secure_code_audit/suppressions.py | src/secure_code_audit/suppressions.py:194 | reduce below the configured limits (currently 41 lines against 80, complexity 18 against 15, cognitive 18 against 25) |
| High | quick-win | unused_findings in src/secure_code_audit/suppressions.py | src/secure_code_audit/suppressions.py:318 | reduce below the configured limits (currently 82 lines against 80, complexity 5 against 15, cognitive 5 against 25) |
| High | quick-win | _parse_sarif in src/secure_code_audit/scanners/semgrep_scanner.py | src/secure_code_audit/scanners/semgrep_scanner.py:148 | reduce below the configured limits (currently 56 lines against 80, complexity 24 against 15, cognitive 32 against 25) |
| Severe | quick-win | configured risk pattern in src/secure_code_audit/findings.py | src/secure_code_audit/findings.py:181 | act on what the `silent-truncation` rule matched here, or say why it stays; deleting the matched text alone hides the finding without resolving it |
| Severe | quick-win | configured risk pattern in src/secure_code_audit/remediation.py | src/secure_code_audit/remediation.py:37 | act on what the `debt-marker` rule matched here, or say why it stays; deleting the matched text alone hides the finding without resolving it |
| High | quick-win | main in calibration/calibrate.py | calibration/calibrate.py:438 | reduce below the configured limits (currently 133 lines against 80, complexity 20 against 15, cognitive 20 against 25) |
| High | quick-win | scan in src/secure_code_audit/scanners/bandit_scanner.py | src/secure_code_audit/scanners/bandit_scanner.py:55 | reduce below the configured limits (currently 60 lines against 80, complexity 16 against 15, cognitive 16 against 25) |
| High | quick-win | summarize in calibration/calibrate.py | calibration/calibrate.py:366 | reduce below the configured limits (currently 70 lines against 80, complexity 31 against 15, cognitive 12 against 25) |
| High | quick-win | _audit_inputs in src/secure_code_audit/scanners/pip_audit_scanner.py | src/secure_code_audit/scanners/pip_audit_scanner.py:106 | reduce below the configured limits (currently 33 lines against 80, complexity 17 against 15, cognitive 13 against 25) |
| High | quick-win | compare in src/secure_code_audit/verify.py | src/secure_code_audit/verify.py:294 | reduce below the configured limits (currently 79 lines against 80, complexity 25 against 15, cognitive 7 against 25) |
| High | quick-win | _resolve_standards in src/secure_code_audit/scanners/_finding_builder.py | src/secure_code_audit/scanners/_finding_builder.py:35 | reduce below the configured limits (currently 67 lines against 80, complexity 17 against 15, cognitive 26 against 25) |
| High | quick-win | assess in src/secure_code_audit/practice.py | src/secure_code_audit/practice.py:207 | reduce below the configured limits (currently 94 lines against 80, complexity 28 against 15, cognitive 35 against 25) |
| Severe | quick-win | configured risk pattern in README.md | README.md:139 | act on what the `debt-marker` rule matched here, or say why it stays; deleting the matched text alone hides the finding without resolving it |
| Severe | quick-win | configured risk pattern in docs/remediation.md | docs/remediation.md:57 | act on what the `debt-marker` rule matched here, or say why it stays; deleting the matched text alone hides the finding without resolving it |
| Severe | quick-win | configured risk pattern in skills/secure-code-agent/references/finding-taxonomy.md | skills/secure-code-agent/references/finding-taxonomy.md:75 | act on what the `debt-marker` rule matched here, or say why it stays; deleting the matched text alone hides the finding without resolving it |
| High | major-project | duplicated block in src/secure_code_audit/cli.py | src/secure_code_audit/cli.py:162 | remove the duplicated block |
| Medium | major-project | src/secure_code_audit/cli.py is 1590 lines | src/secure_code_audit/cli.py | split below the configured file-length limit |
| Medium | major-project | near-duplicate declaration in src/secure_code_audit/scoring.py | src/secure_code_audit/scoring.py:842 | consolidate the two into one declaration, or say why they are deliberately separate; editing one alone leaves the other |
| Medium | major-project | src/secure_code_audit/scoring.py is 951 lines | src/secure_code_audit/scoring.py | split below the configured file-length limit |
| High | major-project | duplicated block in src/secure_code_audit/suppressions.py | src/secure_code_audit/suppressions.py:364 | remove the duplicated block |
| High | major-project | duplicated block in src/secure_code_audit/scanners/bandit_scanner.py | src/secure_code_audit/scanners/bandit_scanner.py:11 | extract the shared block so its 3 copies become one; editing one copy alone leaves the rest |
| High | major-project | duplicated block in src/secure_code_audit/scanners/osv_scanner.py | src/secure_code_audit/scanners/osv_scanner.py:44 | extract the shared block so its 2 copies become one; editing one copy alone leaves the rest |
| High | major-project | duplicated block in src/secure_code_audit/scanners/npm_audit_scanner.py | src/secure_code_audit/scanners/npm_audit_scanner.py:101 | extract the shared block so its 2 copies become one; editing one copy alone leaves the rest |
| Medium | major-project | CHANGELOG.md is 1391 lines | CHANGELOG.md | split below the configured file-length limit |
| Medium | major-project | docs/decisions.md is 1953 lines | docs/decisions.md | split below the configured file-length limit |
| High | major-project | duplicated block in README.md | README.md:112 | extract the shared block so its 2 copies become one; editing one copy alone leaves the rest |
| High | major-project | duplicated block in skills/secure-code-agent/SKILL.md | skills/secure-code-agent/SKILL.md:30 | extract the shared block so its 2 copies become one; editing one copy alone leaves the rest |
| High | major-project | duplicated block in tests/integration/test_gated_findings_are_reportable.py | tests/integration/test_gated_findings_are_reportable.py:99 | remove the duplicated block |
| High | major-project | duplicated block in tests/integration/test_target_shapes.py | tests/integration/test_target_shapes.py:136 | extract the shared block so its 3 copies become one; editing one copy alone leaves the rest |
| High | major-project | duplicated block in tests/unit/test_calibrate.py | tests/unit/test_calibrate.py:508 | remove the duplicated block |
| High | major-project | duplicated block in tests/unit/test_cli_coverage.py | tests/unit/test_cli_coverage.py:51 | extract the shared block so its 2 copies become one; editing one copy alone leaves the rest |
| High | major-project | duplicated block in tests/unit/test_code_scanning_sarif_raises_only_alerts.py | tests/unit/test_code_scanning_sarif_raises_only_alerts.py:57 | extract the shared block so its 2 copies become one; editing one copy alone leaves the rest |
| High | major-project | duplicated block in tests/unit/test_declared_capabilities.py | tests/unit/test_declared_capabilities.py:45 | extract the shared block so its 2 copies become one; editing one copy alone leaves the rest |
| High | major-project | duplicated block in tests/unit/test_gate_reporting.py | tests/unit/test_gate_reporting.py:105 | extract the shared block so its 3 copies become one; editing one copy alone leaves the rest |
| High | major-project | duplicated block in tests/unit/test_offline_ruleset.py | tests/unit/test_offline_ruleset.py:63 | remove the duplicated block |
| High | major-project | duplicated block in tests/unit/test_offline_ruleset.py | tests/unit/test_offline_ruleset.py:218 | remove the duplicated block |
| High | major-project | duplicated block in tests/unit/test_plan_features.py | tests/unit/test_plan_features.py:37 | remove the duplicated block |
| High | major-project | duplicated block in tests/unit/test_practice.py | tests/unit/test_practice.py:98 | remove the duplicated block |
| High | major-project | duplicated block in tests/unit/test_sarif_roundtrip.py | tests/unit/test_sarif_roundtrip.py:255 | remove the duplicated block |
| High | major-project | duplicated block in tests/unit/test_sarif_roundtrip.py | tests/unit/test_sarif_roundtrip.py:135 | remove the duplicated block |
| High | major-project | duplicated block in tests/unit/test_tier1_scanners.py | tests/unit/test_tier1_scanners.py:30 | remove the duplicated block |
| High | major-project | duplicated block in tests/unit/test_tier2_scanners.py | tests/unit/test_tier2_scanners.py:145 | remove the duplicated block |
One self-contained prompt per item — copy any block into a coding agent. A block for an item that needs a design decision asks for that decision, not a patch.
Repository: /Users/marshallguillory/repos/secure-code-agent Task: reduce below the configured limits (currently 285 lines against 80, complexity 29 against 15, cognitive 18 against 25). Location: src/secure_code_audit/cli.py:495 Why: a long, branching function is where defects concentrate and where every future change has to be understood first Make one small, reviewable change. Do not alter public behavior or refactor unrelated code. If this is a false positive, say so and leave it unchanged; add or update a test when behavior changes. Verify when done: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/python -m maintainability_audit --root . --format json
Repository: /Users/marshallguillory/repos/secure-code-agent Task: reduce below the configured limits (currently 159 lines against 80, complexity 2 against 15, cognitive 0 against 25). Location: src/secure_code_audit/cli.py:70 Why: a long function is where every future change has to be understood first Make one small, reviewable change. Do not alter public behavior or refactor unrelated code. If this is a false positive, say so and leave it unchanged; add or update a test when behavior changes. Verify when done: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/python -m maintainability_audit --root . --format json
Repository: /Users/marshallguillory/repos/secure-code-agent Task: reduce below the configured limits (currently 76 lines against 80, complexity 19 against 15, cognitive 19 against 25). Location: src/secure_code_audit/cli.py:1347 Why: a long, branching function is where defects concentrate and where every future change has to be understood first Make one small, reviewable change. Do not alter public behavior or refactor unrelated code. If this is a false positive, say so and leave it unchanged; add or update a test when behavior changes. Verify when done: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/python -m maintainability_audit --root . --format json
Repository: /Users/marshallguillory/repos/secure-code-agent Task: reduce below the configured limits (currently 108 lines against 80, complexity 8 against 15, cognitive 14 against 25). Location: src/secure_code_audit/cli.py:385 Why: a long function is where every future change has to be understood first Make one small, reviewable change. Do not alter public behavior or refactor unrelated code. If this is a false positive, say so and leave it unchanged; add or update a test when behavior changes. Verify when done: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/python -m maintainability_audit --root . --format json
Repository: /Users/marshallguillory/repos/secure-code-agent Task: reduce below the configured limits (currently 36 lines against 80, complexity 17 against 15, cognitive 21 against 25). Location: src/secure_code_audit/config.py:478 Why: a long, branching function is where defects concentrate and where every future change has to be understood first Make one small, reviewable change. Do not alter public behavior or refactor unrelated code. If this is a false positive, say so and leave it unchanged; add or update a test when behavior changes. Verify when done: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/python -m maintainability_audit --root . --format json
Repository: /Users/marshallguillory/repos/secure-code-agent Task: reduce below the configured limits (currently 32 lines against 80, complexity 21 against 15, cognitive 21 against 25). Location: src/secure_code_audit/config.py:641 Why: a long, branching function is where defects concentrate and where every future change has to be understood first Make one small, reviewable change. Do not alter public behavior or refactor unrelated code. If this is a false positive, say so and leave it unchanged; add or update a test when behavior changes. Verify when done: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/python -m maintainability_audit --root . --format json
Repository: /Users/marshallguillory/repos/secure-code-agent Task: reduce below the configured limits (currently 41 lines against 80, complexity 18 against 15, cognitive 18 against 25). Location: src/secure_code_audit/suppressions.py:194 Why: a long, branching function is where defects concentrate and where every future change has to be understood first Make one small, reviewable change. Do not alter public behavior or refactor unrelated code. If this is a false positive, say so and leave it unchanged; add or update a test when behavior changes. Verify when done: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/python -m maintainability_audit --root . --format json
Repository: /Users/marshallguillory/repos/secure-code-agent Task: reduce below the configured limits (currently 82 lines against 80, complexity 5 against 15, cognitive 5 against 25). Location: src/secure_code_audit/suppressions.py:318 Why: a long function is where every future change has to be understood first Make one small, reviewable change. Do not alter public behavior or refactor unrelated code. If this is a false positive, say so and leave it unchanged; add or update a test when behavior changes. Verify when done: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/python -m maintainability_audit --root . --format json
Repository: /Users/marshallguillory/repos/secure-code-agent Task: reduce below the configured limits (currently 56 lines against 80, complexity 24 against 15, cognitive 32 against 25). Location: src/secure_code_audit/scanners/semgrep_scanner.py:148 Why: a long, branching function is where defects concentrate and where every future change has to be understood first Make one small, reviewable change. Do not alter public behavior or refactor unrelated code. If this is a false positive, say so and leave it unchanged; add or update a test when behavior changes. Verify when done: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/python -m maintainability_audit --root . --format json
Repository: /Users/marshallguillory/repos/secure-code-agent Task: act on what the `silent-truncation` rule matched here, or say why it stays; deleting the matched text alone hides the finding without resolving it. Location: src/secure_code_audit/findings.py:181 Why: a risk pattern is a rule the active configuration enforces, and each hit is a single located line Make one small, reviewable change. Do not alter public behavior or refactor unrelated code. If this is a false positive, say so and leave it unchanged; add or update a test when behavior changes. Verify when done: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/python -m maintainability_audit --root . --format json
Repository: /Users/marshallguillory/repos/secure-code-agent Task: act on what the `debt-marker` rule matched here, or say why it stays; deleting the matched text alone hides the finding without resolving it. Location: src/secure_code_audit/remediation.py:37 Why: a risk pattern is a rule the active configuration enforces, and each hit is a single located line Make one small, reviewable change. Do not alter public behavior or refactor unrelated code. If this is a false positive, say so and leave it unchanged; add or update a test when behavior changes. Verify when done: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/python -m maintainability_audit --root . --format json
Repository: /Users/marshallguillory/repos/secure-code-agent Task: reduce below the configured limits (currently 133 lines against 80, complexity 20 against 15, cognitive 20 against 25). Location: calibration/calibrate.py:438 Why: a long, branching function is where defects concentrate and where every future change has to be understood first Make one small, reviewable change. Do not alter public behavior or refactor unrelated code. If this is a false positive, say so and leave it unchanged; add or update a test when behavior changes. Verify when done: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/python -m maintainability_audit --root . --format json
Repository: /Users/marshallguillory/repos/secure-code-agent Task: reduce below the configured limits (currently 60 lines against 80, complexity 16 against 15, cognitive 16 against 25). Location: src/secure_code_audit/scanners/bandit_scanner.py:55 Why: a long, branching function is where defects concentrate and where every future change has to be understood first Make one small, reviewable change. Do not alter public behavior or refactor unrelated code. If this is a false positive, say so and leave it unchanged; add or update a test when behavior changes. Verify when done: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/python -m maintainability_audit --root . --format json
Repository: /Users/marshallguillory/repos/secure-code-agent Task: reduce below the configured limits (currently 70 lines against 80, complexity 31 against 15, cognitive 12 against 25). Location: calibration/calibrate.py:366 Why: a long, branching function is where defects concentrate and where every future change has to be understood first Make one small, reviewable change. Do not alter public behavior or refactor unrelated code. If this is a false positive, say so and leave it unchanged; add or update a test when behavior changes. Verify when done: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/python -m maintainability_audit --root . --format json
Repository: /Users/marshallguillory/repos/secure-code-agent Task: reduce below the configured limits (currently 33 lines against 80, complexity 17 against 15, cognitive 13 against 25). Location: src/secure_code_audit/scanners/pip_audit_scanner.py:106 Why: a long, branching function is where defects concentrate and where every future change has to be understood first Make one small, reviewable change. Do not alter public behavior or refactor unrelated code. If this is a false positive, say so and leave it unchanged; add or update a test when behavior changes. Verify when done: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/python -m maintainability_audit --root . --format json
Repository: /Users/marshallguillory/repos/secure-code-agent Task: reduce below the configured limits (currently 79 lines against 80, complexity 25 against 15, cognitive 7 against 25). Location: src/secure_code_audit/verify.py:294 Why: a long, branching function is where defects concentrate and where every future change has to be understood first Make one small, reviewable change. Do not alter public behavior or refactor unrelated code. If this is a false positive, say so and leave it unchanged; add or update a test when behavior changes. Verify when done: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/python -m maintainability_audit --root . --format json
Repository: /Users/marshallguillory/repos/secure-code-agent Task: reduce below the configured limits (currently 67 lines against 80, complexity 17 against 15, cognitive 26 against 25). Location: src/secure_code_audit/scanners/_finding_builder.py:35 Why: a long, branching function is where defects concentrate and where every future change has to be understood first Make one small, reviewable change. Do not alter public behavior or refactor unrelated code. If this is a false positive, say so and leave it unchanged; add or update a test when behavior changes. Verify when done: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/python -m maintainability_audit --root . --format json
Repository: /Users/marshallguillory/repos/secure-code-agent Task: reduce below the configured limits (currently 94 lines against 80, complexity 28 against 15, cognitive 35 against 25). Location: src/secure_code_audit/practice.py:207 Why: a long, branching function is where defects concentrate and where every future change has to be understood first Make one small, reviewable change. Do not alter public behavior or refactor unrelated code. If this is a false positive, say so and leave it unchanged; add or update a test when behavior changes. Verify when done: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/python -m maintainability_audit --root . --format json
Repository: /Users/marshallguillory/repos/secure-code-agent Task: act on what the `debt-marker` rule matched here, or say why it stays; deleting the matched text alone hides the finding without resolving it. Location: README.md:139 Why: a risk pattern is a rule the active configuration enforces, and each hit is a single located line Make one small, reviewable change. Do not alter public behavior or refactor unrelated code. If this is a false positive, say so and leave it unchanged; add or update a test when behavior changes. Verify when done: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/python -m maintainability_audit --root . --format json
Repository: /Users/marshallguillory/repos/secure-code-agent Task: act on what the `debt-marker` rule matched here, or say why it stays; deleting the matched text alone hides the finding without resolving it. Location: docs/remediation.md:57 Why: a risk pattern is a rule the active configuration enforces, and each hit is a single located line Make one small, reviewable change. Do not alter public behavior or refactor unrelated code. If this is a false positive, say so and leave it unchanged; add or update a test when behavior changes. Verify when done: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/python -m maintainability_audit --root . --format json
Repository: /Users/marshallguillory/repos/secure-code-agent Task: act on what the `debt-marker` rule matched here, or say why it stays; deleting the matched text alone hides the finding without resolving it. Location: skills/secure-code-agent/references/finding-taxonomy.md:75 Why: a risk pattern is a rule the active configuration enforces, and each hit is a single located line Make one small, reviewable change. Do not alter public behavior or refactor unrelated code. If this is a false positive, say so and leave it unchanged; add or update a test when behavior changes. Verify when done: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/python -m maintainability_audit --root . --format json
Repository: /Users/marshallguillory/repos/secure-code-agent Design decision needed, not a patch: duplicated block in src/secure_code_audit/cli.py. Location: src/secure_code_audit/cli.py:162 Why: duplicated logic means a fix applied in one place and missed in the others; deduplicating across a codebase is a design change, not a tidy-up Direction once decided: remove the duplicated block. Do not change code for this item, because it is a Major Project — the change it needs is a design decision before code moves, not one reviewable patch. Lay out the options for the surrounding design — what each would change, and where — then stop for a human decision. If this is a false positive, say so.
Repository: /Users/marshallguillory/repos/secure-code-agent Design decision needed, not a patch: src/secure_code_audit/cli.py is 1590 lines. Location: src/secure_code_audit/cli.py Why: a file past the limit hides its own structure, but splitting one touches every importer and is a change worth reviewing on its own Direction once decided: split below the configured file-length limit. Do not change code for this item, because it is a Major Project — the change it needs is a design decision before code moves, not one reviewable patch. Lay out the options for the surrounding design — what each would change, and where — then stop for a human decision. If this is a false positive, say so.
Repository: /Users/marshallguillory/repos/secure-code-agent Design decision needed, not a patch: near-duplicate declaration in src/secure_code_audit/scoring.py. Location: src/secure_code_audit/scoring.py:842 Also at: src/secure_code_audit/scoring.py:858 Why: near-copies drift apart silently, which is worse than exact duplication; reconciling them requires deciding which behaviour was intended Direction once decided: consolidate the two into one declaration, or say why they are deliberately separate; editing one alone leaves the other. Do not change code for this item, because it is a Major Project — the change it needs is a design decision before code moves, not one reviewable patch. Lay out the options for the surrounding design — what each would change, and where — then stop for a human decision. If this is a false positive, say so.
Repository: /Users/marshallguillory/repos/secure-code-agent Design decision needed, not a patch: src/secure_code_audit/scoring.py is 951 lines. Location: src/secure_code_audit/scoring.py Why: a file past the limit hides its own structure, but splitting one touches every importer and is a change worth reviewing on its own Direction once decided: split below the configured file-length limit. Do not change code for this item, because it is a Major Project — the change it needs is a design decision before code moves, not one reviewable patch. Lay out the options for the surrounding design — what each would change, and where — then stop for a human decision. If this is a false positive, say so.
Repository: /Users/marshallguillory/repos/secure-code-agent Design decision needed, not a patch: duplicated block in src/secure_code_audit/suppressions.py. Location: src/secure_code_audit/suppressions.py:364 Why: duplicated logic means a fix applied in one place and missed in the others; deduplicating across a codebase is a design change, not a tidy-up Direction once decided: remove the duplicated block. Do not change code for this item, because it is a Major Project — the change it needs is a design decision before code moves, not one reviewable patch. Lay out the options for the surrounding design — what each would change, and where — then stop for a human decision. If this is a false positive, say so.
Repository: /Users/marshallguillory/repos/secure-code-agent Design decision needed, not a patch: duplicated block in src/secure_code_audit/scanners/bandit_scanner.py. Location: src/secure_code_audit/scanners/bandit_scanner.py:11 Also at: src/secure_code_audit/scanners/gosec_scanner.py:32, src/secure_code_audit/scanners/njsscan_scanner.py:26 Why: duplicated logic means a fix applied in one place and missed in the others; deduplicating across a codebase is a design change, not a tidy-up Direction once decided: extract the shared block so its 3 copies become one; editing one copy alone leaves the rest. Do not change code for this item, because it is a Major Project — the change it needs is a design decision before code moves, not one reviewable patch. Lay out the options for the surrounding design — what each would change, and where — then stop for a human decision. If this is a false positive, say so.
Repository: /Users/marshallguillory/repos/secure-code-agent Design decision needed, not a patch: duplicated block in src/secure_code_audit/scanners/osv_scanner.py. Location: src/secure_code_audit/scanners/osv_scanner.py:44 Also at: src/secure_code_audit/scanners/trufflehog_scanner.py:32 Why: duplicated logic means a fix applied in one place and missed in the others; deduplicating across a codebase is a design change, not a tidy-up Direction once decided: extract the shared block so its 2 copies become one; editing one copy alone leaves the rest. Do not change code for this item, because it is a Major Project — the change it needs is a design decision before code moves, not one reviewable patch. Lay out the options for the surrounding design — what each would change, and where — then stop for a human decision. If this is a false positive, say so.
Repository: /Users/marshallguillory/repos/secure-code-agent Design decision needed, not a patch: duplicated block in src/secure_code_audit/scanners/npm_audit_scanner.py. Location: src/secure_code_audit/scanners/npm_audit_scanner.py:101 Also at: src/secure_code_audit/scanners/osv_scanner.py:104 Why: duplicated logic means a fix applied in one place and missed in the others; deduplicating across a codebase is a design change, not a tidy-up Direction once decided: extract the shared block so its 2 copies become one; editing one copy alone leaves the rest. Do not change code for this item, because it is a Major Project — the change it needs is a design decision before code moves, not one reviewable patch. Lay out the options for the surrounding design — what each would change, and where — then stop for a human decision. If this is a false positive, say so.
Repository: /Users/marshallguillory/repos/secure-code-agent Design decision needed, not a patch: CHANGELOG.md is 1391 lines. Location: CHANGELOG.md Why: a file past the limit hides its own structure, but splitting one touches every importer and is a change worth reviewing on its own Direction once decided: split below the configured file-length limit. Do not change code for this item, because it is a Major Project — the change it needs is a design decision before code moves, not one reviewable patch. Lay out the options for the surrounding design — what each would change, and where — then stop for a human decision. If this is a false positive, say so.
Repository: /Users/marshallguillory/repos/secure-code-agent Design decision needed, not a patch: docs/decisions.md is 1953 lines. Location: docs/decisions.md Why: a file past the limit hides its own structure, but splitting one touches every importer and is a change worth reviewing on its own Direction once decided: split below the configured file-length limit. Do not change code for this item, because it is a Major Project — the change it needs is a design decision before code moves, not one reviewable patch. Lay out the options for the surrounding design — what each would change, and where — then stop for a human decision. If this is a false positive, say so.
Repository: /Users/marshallguillory/repos/secure-code-agent Design decision needed, not a patch: duplicated block in README.md. Location: README.md:112 Also at: docs/remediation.md:27 Why: duplicated logic means a fix applied in one place and missed in the others; deduplicating across a codebase is a design change, not a tidy-up Direction once decided: extract the shared block so its 2 copies become one; editing one copy alone leaves the rest. Do not change code for this item, because it is a Major Project — the change it needs is a design decision before code moves, not one reviewable patch. Lay out the options for the surrounding design — what each would change, and where — then stop for a human decision. If this is a false positive, say so.
Repository: /Users/marshallguillory/repos/secure-code-agent Design decision needed, not a patch: duplicated block in skills/secure-code-agent/SKILL.md. Location: skills/secure-code-agent/SKILL.md:30 Also at: skills/secure-code-agent/copilot/secure-code-agent.prompt.md:23 Why: duplicated logic means a fix applied in one place and missed in the others; deduplicating across a codebase is a design change, not a tidy-up Direction once decided: extract the shared block so its 2 copies become one; editing one copy alone leaves the rest. Do not change code for this item, because it is a Major Project — the change it needs is a design decision before code moves, not one reviewable patch. Lay out the options for the surrounding design — what each would change, and where — then stop for a human decision. If this is a false positive, say so.
Repository: /Users/marshallguillory/repos/secure-code-agent Design decision needed, not a patch: duplicated block in tests/integration/test_gated_findings_are_reportable.py. Location: tests/integration/test_gated_findings_are_reportable.py:99 Why: duplicated logic means a fix applied in one place and missed in the others; deduplicating across a codebase is a design change, not a tidy-up Direction once decided: remove the duplicated block. Do not change code for this item, because it is a Major Project — the change it needs is a design decision before code moves, not one reviewable patch. Lay out the options for the surrounding design — what each would change, and where — then stop for a human decision. If this is a false positive, say so.
Repository: /Users/marshallguillory/repos/secure-code-agent Design decision needed, not a patch: duplicated block in tests/integration/test_target_shapes.py. Location: tests/integration/test_target_shapes.py:136 Also at: tests/unit/test_cli_coverage.py:226, tests/unit/test_declared_capabilities.py:220 Why: duplicated logic means a fix applied in one place and missed in the others; deduplicating across a codebase is a design change, not a tidy-up Direction once decided: extract the shared block so its 3 copies become one; editing one copy alone leaves the rest. Do not change code for this item, because it is a Major Project — the change it needs is a design decision before code moves, not one reviewable patch. Lay out the options for the surrounding design — what each would change, and where — then stop for a human decision. If this is a false positive, say so.
Repository: /Users/marshallguillory/repos/secure-code-agent Design decision needed, not a patch: duplicated block in tests/unit/test_calibrate.py. Location: tests/unit/test_calibrate.py:508 Why: duplicated logic means a fix applied in one place and missed in the others; deduplicating across a codebase is a design change, not a tidy-up Direction once decided: remove the duplicated block. Do not change code for this item, because it is a Major Project — the change it needs is a design decision before code moves, not one reviewable patch. Lay out the options for the surrounding design — what each would change, and where — then stop for a human decision. If this is a false positive, say so.
Repository: /Users/marshallguillory/repos/secure-code-agent Design decision needed, not a patch: duplicated block in tests/unit/test_cli_coverage.py. Location: tests/unit/test_cli_coverage.py:51 Also at: tests/unit/test_declared_capabilities.py:235 Why: duplicated logic means a fix applied in one place and missed in the others; deduplicating across a codebase is a design change, not a tidy-up Direction once decided: extract the shared block so its 2 copies become one; editing one copy alone leaves the rest. Do not change code for this item, because it is a Major Project — the change it needs is a design decision before code moves, not one reviewable patch. Lay out the options for the surrounding design — what each would change, and where — then stop for a human decision. If this is a false positive, say so.
Repository: /Users/marshallguillory/repos/secure-code-agent Design decision needed, not a patch: duplicated block in tests/unit/test_code_scanning_sarif_raises_only_alerts.py. Location: tests/unit/test_code_scanning_sarif_raises_only_alerts.py:57 Also at: tests/unit/test_finding_path_consumers.py:49 Why: duplicated logic means a fix applied in one place and missed in the others; deduplicating across a codebase is a design change, not a tidy-up Direction once decided: extract the shared block so its 2 copies become one; editing one copy alone leaves the rest. Do not change code for this item, because it is a Major Project — the change it needs is a design decision before code moves, not one reviewable patch. Lay out the options for the surrounding design — what each would change, and where — then stop for a human decision. If this is a false positive, say so.
Repository: /Users/marshallguillory/repos/secure-code-agent Design decision needed, not a patch: duplicated block in tests/unit/test_declared_capabilities.py. Location: tests/unit/test_declared_capabilities.py:45 Also at: tests/unit/test_declared_findings_are_not_patch_targets.py:46 Why: duplicated logic means a fix applied in one place and missed in the others; deduplicating across a codebase is a design change, not a tidy-up Direction once decided: extract the shared block so its 2 copies become one; editing one copy alone leaves the rest. Do not change code for this item, because it is a Major Project — the change it needs is a design decision before code moves, not one reviewable patch. Lay out the options for the surrounding design — what each would change, and where — then stop for a human decision. If this is a false positive, say so.
Repository: /Users/marshallguillory/repos/secure-code-agent Design decision needed, not a patch: duplicated block in tests/unit/test_gate_reporting.py. Location: tests/unit/test_gate_reporting.py:105 Also at: tests/unit/test_plan_features.py:66, tests/unit/test_scan_scope.py:34 Why: duplicated logic means a fix applied in one place and missed in the others; deduplicating across a codebase is a design change, not a tidy-up Direction once decided: extract the shared block so its 3 copies become one; editing one copy alone leaves the rest. Do not change code for this item, because it is a Major Project — the change it needs is a design decision before code moves, not one reviewable patch. Lay out the options for the surrounding design — what each would change, and where — then stop for a human decision. If this is a false positive, say so.
Repository: /Users/marshallguillory/repos/secure-code-agent Design decision needed, not a patch: duplicated block in tests/unit/test_offline_ruleset.py. Location: tests/unit/test_offline_ruleset.py:63 Why: duplicated logic means a fix applied in one place and missed in the others; deduplicating across a codebase is a design change, not a tidy-up Direction once decided: remove the duplicated block. Do not change code for this item, because it is a Major Project — the change it needs is a design decision before code moves, not one reviewable patch. Lay out the options for the surrounding design — what each would change, and where — then stop for a human decision. If this is a false positive, say so.
Repository: /Users/marshallguillory/repos/secure-code-agent Design decision needed, not a patch: duplicated block in tests/unit/test_offline_ruleset.py. Location: tests/unit/test_offline_ruleset.py:218 Why: duplicated logic means a fix applied in one place and missed in the others; deduplicating across a codebase is a design change, not a tidy-up Direction once decided: remove the duplicated block. Do not change code for this item, because it is a Major Project — the change it needs is a design decision before code moves, not one reviewable patch. Lay out the options for the surrounding design — what each would change, and where — then stop for a human decision. If this is a false positive, say so.
Repository: /Users/marshallguillory/repos/secure-code-agent Design decision needed, not a patch: duplicated block in tests/unit/test_plan_features.py. Location: tests/unit/test_plan_features.py:37 Why: duplicated logic means a fix applied in one place and missed in the others; deduplicating across a codebase is a design change, not a tidy-up Direction once decided: remove the duplicated block. Do not change code for this item, because it is a Major Project — the change it needs is a design decision before code moves, not one reviewable patch. Lay out the options for the surrounding design — what each would change, and where — then stop for a human decision. If this is a false positive, say so.
Repository: /Users/marshallguillory/repos/secure-code-agent Design decision needed, not a patch: duplicated block in tests/unit/test_practice.py. Location: tests/unit/test_practice.py:98 Why: duplicated logic means a fix applied in one place and missed in the others; deduplicating across a codebase is a design change, not a tidy-up Direction once decided: remove the duplicated block. Do not change code for this item, because it is a Major Project — the change it needs is a design decision before code moves, not one reviewable patch. Lay out the options for the surrounding design — what each would change, and where — then stop for a human decision. If this is a false positive, say so.
Repository: /Users/marshallguillory/repos/secure-code-agent Design decision needed, not a patch: duplicated block in tests/unit/test_sarif_roundtrip.py. Location: tests/unit/test_sarif_roundtrip.py:255 Why: duplicated logic means a fix applied in one place and missed in the others; deduplicating across a codebase is a design change, not a tidy-up Direction once decided: remove the duplicated block. Do not change code for this item, because it is a Major Project — the change it needs is a design decision before code moves, not one reviewable patch. Lay out the options for the surrounding design — what each would change, and where — then stop for a human decision. If this is a false positive, say so.
Repository: /Users/marshallguillory/repos/secure-code-agent Design decision needed, not a patch: duplicated block in tests/unit/test_sarif_roundtrip.py. Location: tests/unit/test_sarif_roundtrip.py:135 Why: duplicated logic means a fix applied in one place and missed in the others; deduplicating across a codebase is a design change, not a tidy-up Direction once decided: remove the duplicated block. Do not change code for this item, because it is a Major Project — the change it needs is a design decision before code moves, not one reviewable patch. Lay out the options for the surrounding design — what each would change, and where — then stop for a human decision. If this is a false positive, say so.
Repository: /Users/marshallguillory/repos/secure-code-agent Design decision needed, not a patch: duplicated block in tests/unit/test_tier1_scanners.py. Location: tests/unit/test_tier1_scanners.py:30 Why: duplicated logic means a fix applied in one place and missed in the others; deduplicating across a codebase is a design change, not a tidy-up Direction once decided: remove the duplicated block. Do not change code for this item, because it is a Major Project — the change it needs is a design decision before code moves, not one reviewable patch. Lay out the options for the surrounding design — what each would change, and where — then stop for a human decision. If this is a false positive, say so.
Repository: /Users/marshallguillory/repos/secure-code-agent Design decision needed, not a patch: duplicated block in tests/unit/test_tier2_scanners.py. Location: tests/unit/test_tier2_scanners.py:145 Why: duplicated logic means a fix applied in one place and missed in the others; deduplicating across a codebase is a design change, not a tidy-up Direction once decided: remove the duplicated block. Do not change code for this item, because it is a Major Project — the change it needs is a design decision before code moves, not one reviewable patch. Lay out the options for the surrounding design — what each would change, and where — then stop for a human decision. If this is a false positive, say so.
Written by secure-code-agent 0.12.10 and reproduced as it wrote it. It is that tool's work order, not this one's: its findings are not re-ranked or merged into the maintainability work order above.
0 to fix · 0 to review · 1776 suppression candidates.
TypeScript semantic coverage: unknown — no recorded type analysis and no local type checker: semantic coverage for TypeScript is unknown. Absence of analysis is not absence of findings.