Generated 2026-10-02T18:02:32+00:00 · commit 16b46248f9bbb503b850228a913d846eb4b4fbeb · branch codex/hermetic-tests-and-coverage · root /Users/marshallguillory/repos/secure-code-agent · standard ISO/IEC 25010 maintainability-inspired 0-5 scale, rate-based
| Severity | Findings |
|---|---|
| Severe | 9 |
| High | 36 |
| Medium | 5 |
| Low | 1 |
| Total findings | 51 |
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 | 1154 | 0 |
| jscpd | analyzer | ran | cpd 5.1.1 | 1 | 74 |
| lizard | analyzer | ran | 1.24.0 | 3729 | 0 |
| multimetric | analyzer | ran | usage: multimetric [-h] [--warn_compiler WARN_COMPILER] | 480 | 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 | 198 |
| radon | analyzer | ran | 6.0.1 | 112 | 0 |
| ruff | analyzer | ran | ruff 0.16.5 | 0 | 0 |
| vulture | analyzer | ran | vulture 2.16 | 0 | 0 |
| competing-libraries | built-in | ran | — | 144 | 0 |
| dead-code | built-in | ran | — | 1300 | 1 |
| declaration-size | built-in | ran | — | 1300 | 66 |
| duplicate-blocks | built-in | ran | — | 144 | 20 |
| file-size | built-in | ran | — | 144 | 19 |
| history | built-in | ran | — | 144 | 23 |
| near-duplicates | built-in | ran | — | 1300 | 1 |
| risk-patterns | built-in | ran | — | 144 | 9 |
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 |
1 scan, 2026-10-02T18:05:36Z to 2026-10-02T18:05:36Z.
Every figure describes scans that happened; nothing forecasts.
4,322 – 73,150 USD over 12 months (base 21,945 USD), across 51 work-order item(s).
This is a scenario, not a prediction.
Assumptions:
TDD-shaped tests: detected beside 41 of 42 production source files (path pairing). Constructs: pytest in 66 file(s), unittest in 1 file(s), describe_it in 2 file(s), parametrize in 26 file(s), given_when_then in 1 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: no coverage reported by the run
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 | 3.7 | 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 | 3.8 |
| modifiability | 3.7 |
| testability | 4.0 |
| Aspect | Score |
|---|---|
| file size | 3.7 |
| declaration size | 3.6 |
| duplication | 4.5 |
| risk patterns | 3.2 |
| policy gates | 5.0 |
| test presence | 5.0 |
| dead code | 3.5 |
| 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 | not measurable |
| 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 | 1857 | fail |
src/secure_code_audit/cli.py | 1520 | fail |
CHANGELOG.md | 1391 | fail |
src/secure_code_audit/scoring.py | 940 | fail |
src/secure_code_audit/standards.py | 705 | warn |
src/secure_code_audit/config.py | 642 | warn |
src/secure_code_audit/renderers.py | 588 | warn |
README.md | 569 | warn |
calibration/calibrate.py | 532 | warn |
src/secure_code_audit/sarif.py | 500 | warn |
tests/unit/test_cli_coverage.py | 493 | warn |
tests/unit/test_tier2_scanners.py | 488 | warn |
src/secure_code_audit/scanners/base.py | 459 | warn |
tests/unit/test_offline_ruleset.py | 430 | warn |
tests/unit/test_plan_features.py | 430 | warn |
src/secure_code_audit/findings.py | 427 | warn |
src/secure_code_audit/remediation.py | 421 | warn |
src/secure_code_audit/verify.py | 417 | warn |
tests/integration/test_scoring_drift.py | 407 | warn |
tests/integration/test_finding_paths_are_repository_relative.py | 392 | ok |
docs/calibration.md | 372 | ok |
tests/unit/test_language_scanners.py | 368 | ok |
docs/architecture.md | 362 | ok |
docs/design.md | 358 | ok |
tests/unit/test_calibration_harness.py | 354 | ok |
| File | Declaration | Line | Lines | Complexity | Cognitive | Status |
|---|---|---|---|---|---|---|
src/secure_code_audit/scanners/base.py | Scanner (class) | 33 | 423 | - | - | fail |
src/secure_code_audit/config.py | _from_dict | 431 | 158 | 51 | 63 | fail |
src/secure_code_audit/cli.py | _do_audit | 364 | 346 | 36 | 32 | fail |
calibration/calibrate.py | summarize | 343 | 70 | 31 | 12 | fail |
src/secure_code_audit/suppressions.py | load | 113 | 97 | 30 | 44 | 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 | 150 | 56 | 24 | 32 | fail |
src/secure_code_audit/config.py | _validate_gates | 606 | 32 | 21 | 21 | fail |
src/secure_code_audit/cli.py | _print_summary | 1277 | 76 | 19 | 19 | fail |
src/secure_code_audit/scanners/base.py | _make_finding | 236 | 85 | 17 | 24 | fail |
src/secure_code_audit/scanners/pip_audit_scanner.py | _audit_inputs | 107 | 33 | 17 | 13 | fail |
calibration/calibrate.py | main | 415 | 114 | 16 | 17 | 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/scanners/bandit_scanner.py | scan | 47 | 57 | 15 | 15 | warn |
src/secure_code_audit/pillar.py | build | 135 | 48 | 15 | 13 | warn |
src/secure_code_audit/scanners/gosec_scanner.py | _finding_for | 114 | 24 | 15 | 19 | warn |
src/secure_code_audit/scoring.py | score | 677 | 55 | 14 | 14 | warn |
src/secure_code_audit/renderers.py | _findings_sections | 449 | 47 | 14 | 17 | warn |
src/secure_code_audit/scanners/npm_audit_scanner.py | _parse | 88 | 43 | 14 | 11 | warn |
src/secure_code_audit/renderers.py | _pr_comment | 547 | 42 | 14 | 16 | 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 | 78 | 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 | 61 | 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/base.py | _resolve_candidate | 104 | 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 | 825 | 48 | 12 | 11 | warn |
src/secure_code_audit/findings.py | merge_corroborating | 383 | 45 | 12 | 17 | warn |
src/secure_code_audit/scanners/rubocop_scanner.py | scan | 59 | 40 | 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 | 132 | 24 | 12 | 11 | warn |
src/secure_code_audit/scanners/gosec_scanner.py | _load_failure | 89 | 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 | 87 | 28 | 11 | 15 | warn |
src/secure_code_audit/cli.py | _print_preflight | 338 | 24 | 11 | 16 | warn |
src/secure_code_audit/scanners/semgrep_scanner.py | _cwe_from_rule | 33 | 19 | 11 | 11 | warn |
src/secure_code_audit/cli.py | _do_verify | 1408 | 62 | 10 | 18 | warn |
src/secure_code_audit/cli.py | _write_outputs | 1018 | 53 | 10 | 9 | warn |
src/secure_code_audit/remediation.py | generate | 173 | 74 | 9 | 10 | warn |
| Severity | Band | Finding | Location | Do |
|---|---|---|---|---|
| High | quick-win | _do_audit in src/secure_code_audit/cli.py | src/secure_code_audit/cli.py:364 | reduce below the configured limits (currently 346 lines against 80, complexity 36 against 15, cognitive 32 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:1277 | reduce below the configured limits (currently 76 lines against 80, complexity 19 against 15, cognitive 19 against 25) |
| High | quick-win | _from_dict in src/secure_code_audit/config.py | src/secure_code_audit/config.py:431 | reduce below the configured limits (currently 158 lines against 80, complexity 51 against 15, cognitive 63 against 25) |
| High | quick-win | _validate_gates in src/secure_code_audit/config.py | src/secure_code_audit/config.py:606 | reduce below the configured limits (currently 32 lines against 80, complexity 21 against 15, cognitive 21 against 25) |
| Severe | quick-win | configured risk pattern in src/secure_code_audit/renderers.py | src/secure_code_audit/renderers.py:555 | act on what the `absence-as-zero` 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/renderers.py | src/secure_code_audit/renderers.py:556 | act on what the `absence-as-zero` 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/scoring.py | src/secure_code_audit/scoring.py:437 | act on what the `absence-as-zero` 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/scoring.py | src/secure_code_audit/scoring.py:937 | act on what the `absence-as-zero` rule matched here, or say why it stays; deleting the matched text alone hides the finding without resolving it |
| High | quick-win | Scanner in src/secure_code_audit/scanners/base.py | src/secure_code_audit/scanners/base.py:33 | reduce below the configured limits (currently 423 lines against the 300-line class limit) |
| High | quick-win | _make_finding in src/secure_code_audit/scanners/base.py | src/secure_code_audit/scanners/base.py:236 | reduce below the configured limits (currently 85 lines against 80, complexity 17 against 15, cognitive 24 against 25) |
| High | quick-win | _parse_sarif in src/secure_code_audit/scanners/semgrep_scanner.py | src/secure_code_audit/scanners/semgrep_scanner.py:150 | 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 | load in src/secure_code_audit/suppressions.py | src/secure_code_audit/suppressions.py:113 | reduce below the configured limits (currently 97 lines against 80, complexity 30 against 15, cognitive 44 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:107 | reduce below the configured limits (currently 33 lines against 80, complexity 17 against 15, cognitive 13 against 25) |
| High | quick-win | main in calibration/calibrate.py | calibration/calibrate.py:415 | reduce below the configured limits (currently 114 lines against 80, complexity 16 against 15, cognitive 17 against 25) |
| High | quick-win | summarize in calibration/calibrate.py | calibration/calibrate.py:343 | reduce below the configured limits (currently 70 lines against 80, complexity 31 against 15, cognitive 12 against 25) |
| High | quick-win | unpaired declaration in calibration/calibrate.py | calibration/calibrate.py:415 | add a paired test for `main` |
| High | quick-win | unpaired declaration in calibration/calibrate.py | calibration/calibrate.py:343 | add a paired test for `summarize` |
| 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 | 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 1520 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:832 | 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 940 lines | src/secure_code_audit/scoring.py | split below the configured file-length limit |
| High | major-project | duplicated block in src/secure_code_audit/scanners/semgrep_scanner.py | src/secure_code_audit/scanners/semgrep_scanner.py:128 | 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/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:103 | 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 1857 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_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_tier2_scanners.py | tests/unit/test_tier2_scanners.py:145 | remove the duplicated block |
| Low | fill-in | unreferenced declaration in src/secure_code_audit/findings.py | src/secure_code_audit/findings.py:353 | remove the unreferenced declaration |
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 346 lines against 80, complexity 36 against 15, cognitive 32 against 25). Location: src/secure_code_audit/cli.py:364 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:1277 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 158 lines against 80, complexity 51 against 15, cognitive 63 against 25). Location: src/secure_code_audit/config.py:431 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:606 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 `absence-as-zero` rule matched here, or say why it stays; deleting the matched text alone hides the finding without resolving it. Location: src/secure_code_audit/renderers.py:555 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 `absence-as-zero` rule matched here, or say why it stays; deleting the matched text alone hides the finding without resolving it. Location: src/secure_code_audit/renderers.py:556 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 `absence-as-zero` rule matched here, or say why it stays; deleting the matched text alone hides the finding without resolving it. Location: src/secure_code_audit/scoring.py:437 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 `absence-as-zero` rule matched here, or say why it stays; deleting the matched text alone hides the finding without resolving it. Location: src/secure_code_audit/scoring.py:937 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 423 lines against the 300-line class limit). Location: src/secure_code_audit/scanners/base.py:33 Why: an oversized class hides its own structure, and every change to it is read against all of it 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 85 lines against 80, complexity 17 against 15, cognitive 24 against 25). Location: src/secure_code_audit/scanners/base.py:236 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 56 lines against 80, complexity 24 against 15, cognitive 32 against 25). Location: src/secure_code_audit/scanners/semgrep_scanner.py:150 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 97 lines against 80, complexity 30 against 15, cognitive 44 against 25). Location: src/secure_code_audit/suppressions.py:113 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:107 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 114 lines against 80, complexity 16 against 15, cognitive 17 against 25). Location: calibration/calibrate.py:415 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:343 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: add a paired test for `main`. Location: calibration/calibrate.py:415 Why: an oversized production unit with no paired test is where changes land unguarded 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: add a paired test for `summarize`. Location: calibration/calibrate.py:343 Why: an oversized production unit with no paired test is where changes land unguarded 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 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 1520 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:832 Also at: src/secure_code_audit/scoring.py:848 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 940 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/scanners/semgrep_scanner.py. Location: src/secure_code_audit/scanners/semgrep_scanner.py:128 Also at: src/secure_code_audit/scanners/trivy_scanner.py:54 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/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:103 Also at: src/secure_code_audit/scanners/osv_scanner.py:106 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 1857 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_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_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.
Repository: /Users/marshallguillory/repos/secure-code-agent Task: remove the unreferenced declaration. Location: src/secure_code_audit/findings.py:353 Why: unreachable code costs reading time and misleads a search, but deleting it is the cheapest change there is 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
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 · 1455 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.