Maintainability Report

Generated 2026-10-03T18:28:17+00:00 · commit 398ed6f2358ee535eea6cc5adc72aa7ffc398d25 · branch main · root /Users/marshallguillory/repos/secure-code-agent · standard ISO/IEC 25010 maintainability-inspired 0-5 scale, rate-based

4.1 / 5 · grade C
Range: 3.8 – 4.4 · Source: Analyzer readings for declarations (completed by built-in detectors); built-in detectors for remaining dimensions
Evidence complete under profile `default-v1`.
Gate: clear.
Improving across 13 comparable scans (3.9 to 4.1).
SeverityFindings
Severe8
High39
Medium7
Low0
Total findings54

Coverage

11 of 17 tools contributed — concerns all, depth heavy, license policy copyleft-any. Plus 8 built-in detectors.

SourceTierOutcomeVersionMeasurementsFindings
cohesionanalyzerfailed———
eslintanalyzernot-applicable———
fortitudeanalyzernot-applicable———
spotbugsanalyzernot-applicable———
interrogateanalyzerparse-errorinterrogate, version 1.7.0——
pylintanalyzerparse-errorpylint 4.0.7——
checkstyleanalyzerranCheckstyle version: 14.0.0037
complexipyanalyzerran7.0.114190
jscpdanalyzerrancpd 5.1.11142
lizardanalyzerran1.24.045510
multimetricanalyzerranusage: multimetric [-h] [--warn_compiler WARN_COMPILER]5560
mypyanalyzerranmypy 2.3.1 (compiled: yes)00
pmdanalyzerranPMD 7.26.0 (8fd38edf285a33e1164f66205ebe243441db9557, 2026-06-29T08:22:36Z)00
pydocstyleanalyzerran6.3.00207
radonanalyzerran6.0.11310
ruffanalyzerranruff 0.16.500
vultureanalyzerranvulture 2.1600
competing-librariesbuilt-inran—1950
dead-codebuilt-inran—15900
declaration-sizebuilt-inran—159072
duplicate-blocksbuilt-inran—19544
file-sizebuilt-inran—19531
historybuilt-inran—19524
near-duplicatesbuilt-inran—15901
risk-patternsbuilt-inran—1958

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 scans

RecordedCommitEstimateFindings
2026-10-02T18:05:36Z16b462483.947
2026-10-02T21:23:10Z808ca7ca3.947
2026-10-02T21:31:16Z808ca7ca4.043
2026-10-02T21:42:02Zbb5c9db04.043
2026-10-02T22:21:49Z7fb8b9764.044
2026-10-02T22:35:49Zb9f9b7884.144
2026-10-02T22:45:23Z4603288a4.144
2026-10-02T23:02:22Z857228554.043
2026-10-02T23:52:25Z9b16aaba4.143
2026-10-03T00:45:48Zde4a78004.143
2026-10-03T00:52:31Za60ee09b4.143
2026-10-03T01:17:03Z815334984.147
2026-10-03T18:30:02Z398ed6f24.153

Estimate over recorded scans

012345score (0-5)10-0210-0210-0210-0210-0310-03scan 1: 3.9scan 2: 3.9scan 3: 4.0scan 4: 4.0scan 5: 4.0scan 6: 4.1scan 7: 4.1scan 8: 4.0scan 9: 4.1scan 10: 4.1scan 11: 4.1scan 12: 4.1scan 13: 4.1

Pillars over time (condition)

012345condition (0-5)10-0210-0210-0210-0210-0310-03maintainability scan 1: 3.74maintainability scan 2: 3.74maintainability scan 3: 3.74maintainability scan 4: 3.96maintainability scan 5: 3.96maintainability scan 6: 3.96maintainability scan 7: 3.96maintainability scan 8: 3.96maintainability scan 9: 3.97maintainability scan 10: 3.97maintainability scan 11: 3.97maintainability scan 12: 3.96maintainability scan 13: 3.91readability scan 1: 4.53readability scan 2: 4.53readability scan 3: 4.53readability scan 4: 4.53readability scan 5: 4.53readability scan 6: 4.53readability scan 7: 4.53readability scan 8: 4.53readability scan 9: 4.53readability scan 10: 4.53readability scan 11: 4.53readability scan 12: 4.53readability scan 13: 4.53testability scan 1: 5.0testability scan 2: 5.0testability scan 3: 5.0testability scan 4: 5.0testability scan 5: 5.0testability scan 6: 5.0testability scan 7: 5.0testability scan 8: 5.0testability scan 9: 5.0testability scan 10: 5.0testability scan 11: 5.0testability scan 12: 5.0testability scan 13: 5.0efficiencymaintainabilityreadabilitysecuritytestability

Practice level over time (maturity — a separate series)

012345maturity (0-5)10-0210-0210-0210-0210-0310-03scan 1: 4.0scan 2: 4.0scan 3: 4.0scan 4: 4.0scan 5: 4.0scan 6: 4.0scan 7: 4.0scan 8: 4.0scan 9: 4.0scan 10: 4.0scan 11: 4.0scan 12: 4.0scan 13: 4.0

Categories, this scan

012345score (0-5)modularity: 3.53.5modularityreusability: 4.44.4reusabilityanalyzability: 4.14.1analyzabilitymodifiability: 3.73.7modifiabilitytestability: 4.64.6testability

Trend

13 scans, 2026-10-02T18:05:36Z to 2026-10-03T18:30:02Z.

Every figure describes scans that happened; nothing forecasts.

Economic Context (scenario)

3,608 – 61,050 USD over 12 months (base 18,315 USD), across 54 work-order item(s).

This is a scenario, not a prediction.

Assumptions:

TDD-shaped tests

TDD-shaped tests: detected beside 45 of 46 production source files (path pairing). Constructs: pytest in 81 file(s), unittest in 1 file(s), describe_it in 2 file(s), parametrize in 32 file(s), given_when_then in 2 file(s).

Chronology is not measured. Effectiveness is unscored unless the operator opted into suite execution.

Test Suite

The operator opted in to running the repository's test command; it did not run (exit 2).

Command: pytest

Program run: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/pytest

Coverage: no coverage reported by the run

Detail: pytest exited 2: ['==================================== ERRORS ====================================']

Pillars

Practice level 4 of 5 — CI holds a numeric quality gate.

PillarScopePracticeConditionReading
readabilitypartial44.5healthy: enforced, and the code reflects it
maintainabilityowned43.9healthy: enforced, and the code reflects it
efficiencyout-of-scope——not measured — see below
securitydelegated5—unverified: not graded — scanner coverage is failed; findings: no findings
testabilitypartial45.0healthy: enforced, and the code reflects it

Not measured here, and why:

Enforcement found: linter-config, recorded-decisions, lint-in-ci, coverage-gate.

ISO/IEC 25010 Maintainability Score

CategoryScore
modularity3.5
reusability4.4
analyzability4.1
modifiability3.7
testability4.6

Aspect Scores

AspectScore
file size3.6
declaration size3.6
duplication4.3
risk patterns3.6
policy gates5.0
test presence5.0
dead code5.0
near duplication4.5
idiom consistency5.0
documentation5.0
churn hotspots3.0
change coupling3.0
knowledge concentration4.0
test effectivenessnot measurable

Not Scored — no measurement exists

AspectWhy
naming qualityno static proxy survives contact; a wrong-name detector needs semantics
comment accuracycomments are deliberately unparsed; staleness needs meaning, not structure
indirection depthcall-graph construction is not implemented for the supported languages
architectural coherenceno measurement distinguishes a wrong boundary from an unusual one statically

Largest Files

FileLinesStatus
docs/html/docs-decisions.html2108fail
docs/decisions.md2023fail
src/secure_code_audit/cli.py1667fail
docs/html/changelog.html1464fail
CHANGELOG.md1463fail
src/secure_code_audit/scoring.py951fail
tests/unit/test_calibrate.py771warn
src/secure_code_audit/config.py699warn
docs/html/docs-calibration.html657warn
docs/html/readme.html652warn
README.md607warn
src/secure_code_audit/renderers.py590warn
calibration/calibrate.py574warn
docs/html/docs-scanners.html558warn
src/secure_code_audit/standards.py550warn
docs/html/docs-product-intent.html534warn
src/secure_code_audit/sarif.py500warn
tests/unit/test_cli_coverage.py493warn
docs/product-intent.md484warn
tests/unit/test_tier2_scanners.py484warn
tests/unit/test_suppressions.py458warn
src/secure_code_audit/suppressions.py442warn
docs/html/docs-design.html433warn
tests/unit/test_offline_ruleset.py430warn
tests/unit/test_plan_features.py430warn

Function Hotspots

FileDeclarationLineLinesComplexityCognitiveStatus
calibration/calibrate.pysummarize366703112fail
src/secure_code_audit/cli.py_do_audit4962893019fail
src/secure_code_audit/practice.pyassess207942835fail
src/secure_code_audit/verify.pycompare29479257fail
src/secure_code_audit/scanners/semgrep_scanner.py_parse_sarif148562432fail
src/secure_code_audit/config.py_validate_gates663322121fail
calibration/calibrate.pymain4381332020fail
src/secure_code_audit/cli.py_print_summary1424761919fail
src/secure_code_audit/config.py_apply_scanners484361721fail
src/secure_code_audit/scanners/pip_audit_scanner.py_audit_inputs106331713fail
src/secure_code_audit/scanners/bandit_scanner.pyscan55601616fail
src/secure_code_audit/scanners/_finding_builder.py_resolve_standards41821214fail
src/secure_code_audit/cli.py_split_axes386108814fail
src/secure_code_audit/cli.py_parser7115920fail
src/secure_code_audit/git_tools.pyloc_under169611519warn
src/secure_code_audit/pillar.pybuild135481513warn
src/secure_code_audit/scanners/gosec_scanner.py_finding_for112241519warn
calibration/calibrate.pyvariants24459147warn
src/secure_code_audit/scoring.pyscore687551414warn
src/secure_code_audit/renderers.py_findings_sections449471417warn
src/secure_code_audit/renderers.py_pr_comment547441416warn
src/secure_code_audit/scanners/npm_audit_scanner.py_parse86431411warn
src/secure_code_audit/sarif.py_finding_from_result433411421warn
tests/integration/test_finding_paths_are_repository_relative.pytest_no_written_output_names_the_checkout24334143warn
src/secure_code_audit/scanners/njsscan_scanner.py_findings_for_rule76311419warn
src/secure_code_audit/sarif.pyingest_with_coverage262721314warn
src/secure_code_audit/scanners/pip_audit_scanner.pyscan45601317warn
src/secure_code_audit/renderers.py_summary_section287591321warn
src/secure_code_audit/renderers.py_scanners_section408391316warn
src/secure_code_audit/scanners/_resolution.py_resolve_candidate100241319warn
src/secure_code_audit/renderers.pyto_json24591213warn
src/secure_code_audit/cli.py_do_preflight281561213warn
src/secure_code_audit/cli.py_measurable_categories900481211warn
src/secure_code_audit/findings.pymerge_corroborating364451217warn
src/secure_code_audit/scanners/rubocop_scanner.pyscan59381215warn
src/secure_code_audit/suppressions.py_narrow_keys219351213warn
src/secure_code_audit/history.pyread102311214warn
src/secure_code_audit/renderers.py_one_finding_md498311215warn
src/secure_code_audit/suppressions.pymatches70311210warn
src/secure_code_audit/scanners/gitleaks_scanner.py_parse130241211warn
src/secure_code_audit/scanners/gosec_scanner.py_load_failure87241218warn
src/secure_code_audit/sarif.py_location_from_result491101214warn
src/secure_code_audit/verify.pymeasure_scope97561110warn
src/secure_code_audit/scanners/trufflehog_scanner.pyscan36541115warn
src/secure_code_audit/scanners/hadolint_scanner.pyscan5029117warn
src/secure_code_audit/scanners/osv_scanner.py_parse85281115warn
src/secure_code_audit/cli.py_print_preflight339241116warn
src/secure_code_audit/scanners/semgrep_scanner.py_cwe_from_rule33191111warn
src/secure_code_audit/cli.py_do_verify1555621018warn
src/secure_code_audit/cli.py_write_outputs109353109warn

Work order

SeverityBandFindingLocationDo
Highquick-win_do_audit in src/secure_code_audit/cli.pysrc/secure_code_audit/cli.py:496reduce below the configured limits (currently 289 lines against 80, complexity 30 against 15, cognitive 19 against 25)
Highquick-win_parser in src/secure_code_audit/cli.pysrc/secure_code_audit/cli.py:71reduce below the configured limits (currently 159 lines against 80, complexity 2 against 15, cognitive 0 against 25)
Highquick-win_print_summary in src/secure_code_audit/cli.pysrc/secure_code_audit/cli.py:1424reduce below the configured limits (currently 76 lines against 80, complexity 19 against 15, cognitive 19 against 25)
Highquick-win_split_axes in src/secure_code_audit/cli.pysrc/secure_code_audit/cli.py:386reduce below the configured limits (currently 108 lines against 80, complexity 8 against 15, cognitive 14 against 25)
Highquick-win_apply_scanners in src/secure_code_audit/config.pysrc/secure_code_audit/config.py:484reduce below the configured limits (currently 36 lines against 80, complexity 17 against 15, cognitive 21 against 25)
Highquick-win_validate_gates in src/secure_code_audit/config.pysrc/secure_code_audit/config.py:663reduce below the configured limits (currently 32 lines against 80, complexity 21 against 15, cognitive 21 against 25)
Highquick-win_parse_sarif in src/secure_code_audit/scanners/semgrep_scanner.pysrc/secure_code_audit/scanners/semgrep_scanner.py:148reduce below the configured limits (currently 56 lines against 80, complexity 24 against 15, cognitive 32 against 25)
Severequick-winconfigured risk pattern in src/secure_code_audit/findings.pysrc/secure_code_audit/findings.py:181act on what the `silent-truncation` rule matched here, or say why it stays; deleting the matched text alone hides the finding without resolving it
Severequick-winconfigured risk pattern in src/secure_code_audit/remediation.pysrc/secure_code_audit/remediation.py:37act on what the `debt-marker` rule matched here, or say why it stays; deleting the matched text alone hides the finding without resolving it
Highquick-winscan in src/secure_code_audit/scanners/bandit_scanner.pysrc/secure_code_audit/scanners/bandit_scanner.py:55reduce below the configured limits (currently 60 lines against 80, complexity 16 against 15, cognitive 16 against 25)
Highquick-win_audit_inputs in src/secure_code_audit/scanners/pip_audit_scanner.pysrc/secure_code_audit/scanners/pip_audit_scanner.py:106reduce below the configured limits (currently 33 lines against 80, complexity 17 against 15, cognitive 13 against 25)
Highquick-winmain in calibration/calibrate.pycalibration/calibrate.py:438reduce below the configured limits (currently 133 lines against 80, complexity 20 against 15, cognitive 20 against 25)
Highquick-winsummarize in calibration/calibrate.pycalibration/calibrate.py:366reduce below the configured limits (currently 70 lines against 80, complexity 31 against 15, cognitive 12 against 25)
Highquick-wincompare in src/secure_code_audit/verify.pysrc/secure_code_audit/verify.py:294reduce below the configured limits (currently 79 lines against 80, complexity 25 against 15, cognitive 7 against 25)
Highquick-win_resolve_standards in src/secure_code_audit/scanners/_finding_builder.pysrc/secure_code_audit/scanners/_finding_builder.py:41reduce below the configured limits (currently 82 lines against 80, complexity 12 against 15, cognitive 14 against 25)
Highquick-winassess in src/secure_code_audit/practice.pysrc/secure_code_audit/practice.py:207reduce below the configured limits (currently 94 lines against 80, complexity 28 against 15, cognitive 35 against 25)
Severequick-winconfigured risk pattern in README.mdREADME.md:139act on what the `debt-marker` rule matched here, or say why it stays; deleting the matched text alone hides the finding without resolving it
Severequick-winconfigured risk pattern in docs/html/docs-remediation.htmldocs/html/docs-remediation.html:65act on what the `debt-marker` rule matched here, or say why it stays; deleting the matched text alone hides the finding without resolving it
Severequick-winconfigured risk pattern in docs/html/readme.htmldocs/html/readme.html:171act on what the `debt-marker` rule matched here, or say why it stays; deleting the matched text alone hides the finding without resolving it
Severequick-winconfigured risk pattern in docs/html/skills-secure-code-agent-references-finding-taxonomy.htmldocs/html/skills-secure-code-agent-references-finding-taxonomy.html:153act on what the `debt-marker` rule matched here, or say why it stays; deleting the matched text alone hides the finding without resolving it
Severequick-winconfigured risk pattern in docs/remediation.mddocs/remediation.md:57act on what the `debt-marker` rule matched here, or say why it stays; deleting the matched text alone hides the finding without resolving it
Severequick-winconfigured risk pattern in skills/secure-code-agent/references/finding-taxonomy.mdskills/secure-code-agent/references/finding-taxonomy.md:75act on what the `debt-marker` rule matched here, or say why it stays; deleting the matched text alone hides the finding without resolving it
Highmajor-projectduplicated block in src/secure_code_audit/cli.pysrc/secure_code_audit/cli.py:163remove the duplicated block
Mediummajor-projectsrc/secure_code_audit/cli.py is 1667 linessrc/secure_code_audit/cli.pysplit below the configured file-length limit
Mediummajor-projectnear-duplicate declaration in src/secure_code_audit/scoring.pysrc/secure_code_audit/scoring.py:842consolidate the two into one declaration, or say why they are deliberately separate; editing one alone leaves the other
Mediummajor-projectsrc/secure_code_audit/scoring.py is 951 linessrc/secure_code_audit/scoring.pysplit below the configured file-length limit
Highmajor-projectduplicated block in src/secure_code_audit/suppressions.pysrc/secure_code_audit/suppressions.py:365remove the duplicated block
Highmajor-projectduplicated block in src/secure_code_audit/scanners/bandit_scanner.pysrc/secure_code_audit/scanners/bandit_scanner.py:11extract the shared block so its 3 copies become one; editing one copy alone leaves the rest
Highmajor-projectduplicated block in src/secure_code_audit/scanners/npm_audit_scanner.pysrc/secure_code_audit/scanners/npm_audit_scanner.py:101extract the shared block so its 2 copies become one; editing one copy alone leaves the rest
Mediummajor-projectCHANGELOG.md is 1463 linesCHANGELOG.mdsplit below the configured file-length limit
Mediummajor-projectdocs/decisions.md is 2023 linesdocs/decisions.mdsplit below the configured file-length limit
Mediummajor-projectdocs/html/changelog.html is 1464 linesdocs/html/changelog.htmlsplit below the configured file-length limit
Mediummajor-projectdocs/html/docs-decisions.html is 2108 linesdocs/html/docs-decisions.htmlsplit below the configured file-length limit
Highmajor-projectduplicated block in README.mdREADME.md:252extract the shared block so its 2 copies become one; editing one copy alone leaves the rest
Highmajor-projectduplicated block in README.mdREADME.md:112extract the shared block so its 4 copies become one; editing one copy alone leaves the rest
Highmajor-projectduplicated block in docs/design.mddocs/design.md:36extract the shared block so its 2 copies become one; editing one copy alone leaves the rest
Highmajor-projectduplicated block in docs/html/calibration-readme.htmldocs/html/calibration-readme.html:144extract the shared block so its 4 copies become one; editing one copy alone leaves the rest
Highmajor-projectduplicated block in docs/html/calibration-readme.htmldocs/html/calibration-readme.html:110extract the shared block so its 3 copies become one; editing one copy alone leaves the rest
Highmajor-projectduplicated block in docs/html/docs-calibration.htmldocs/html/docs-calibration.html:307remove the duplicated block
Highmajor-projectduplicated block in docs/html/docs-design.htmldocs/html/docs-design.html:208extract the shared block so its 2 copies become one; editing one copy alone leaves the rest
Highmajor-projectduplicated block in docs/html/docs-remediation.htmldocs/html/docs-remediation.html:66extract the shared block so its 2 copies become one; editing one copy alone leaves the rest
Highmajor-projectduplicated block in docs/html/docs-scanners.htmldocs/html/docs-scanners.html:174remove the duplicated block
Highmajor-projectduplicated block in docs/html/style.cssdocs/html/style.css:2extract the shared block so its 2 copies become one; editing one copy alone leaves the rest
Highmajor-projectduplicated block in tests/integration/test_gated_findings_are_reportable.pytests/integration/test_gated_findings_are_reportable.py:99remove the duplicated block
Highmajor-projectduplicated block in tests/integration/test_target_shapes.pytests/integration/test_target_shapes.py:136extract the shared block so its 3 copies become one; editing one copy alone leaves the rest
Highmajor-projectduplicated block in tests/unit/test_calibrate.pytests/unit/test_calibrate.py:508remove the duplicated block
Highmajor-projectduplicated block in tests/unit/test_offline_ruleset.pytests/unit/test_offline_ruleset.py:63remove the duplicated block
Highmajor-projectduplicated block in tests/unit/test_offline_ruleset.pytests/unit/test_offline_ruleset.py:218remove the duplicated block
Highmajor-projectduplicated block in tests/unit/test_plan_features.pytests/unit/test_plan_features.py:37remove the duplicated block
Highmajor-projectduplicated block in tests/unit/test_sarif_roundtrip.pytests/unit/test_sarif_roundtrip.py:255remove the duplicated block
Highmajor-projectduplicated block in tests/unit/test_sarif_roundtrip.pytests/unit/test_sarif_roundtrip.py:135remove the duplicated block
Highmajor-projectduplicated block in tests/unit/test_standards_overlay.pytests/unit/test_standards_overlay.py:163remove the duplicated block
Highmajor-projectduplicated block in tests/unit/test_tier1_scanners.pytests/unit/test_tier1_scanners.py:30remove the duplicated block
Highmajor-projectduplicated block in tests/unit/test_tier2_scanners.pytests/unit/test_tier2_scanners.py:145remove the duplicated block

Copy-paste prompts

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.

_do_audit in src/secure_code_audit/cli.py

Repository: /Users/marshallguillory/repos/secure-code-agent
Task: reduce below the configured limits (currently 289 lines against 80, complexity 30 against 15, cognitive 19 against 25).
Location: src/secure_code_audit/cli.py:496
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

_parser in src/secure_code_audit/cli.py

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:71
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

_print_summary in src/secure_code_audit/cli.py

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:1424
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

_split_axes in src/secure_code_audit/cli.py

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:386
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

_apply_scanners in src/secure_code_audit/config.py

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:484
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

_validate_gates in src/secure_code_audit/config.py

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:663
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

_parse_sarif in src/secure_code_audit/scanners/semgrep_scanner.py

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

configured risk pattern in src/secure_code_audit/findings.py

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

configured risk pattern in src/secure_code_audit/remediation.py

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

scan in src/secure_code_audit/scanners/bandit_scanner.py

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

_audit_inputs in src/secure_code_audit/scanners/pip_audit_scanner.py

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

main in calibration/calibrate.py

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

summarize in calibration/calibrate.py

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

compare in src/secure_code_audit/verify.py

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

_resolve_standards in src/secure_code_audit/scanners/_finding_builder.py

Repository: /Users/marshallguillory/repos/secure-code-agent
Task: reduce below the configured limits (currently 82 lines against 80, complexity 12 against 15, cognitive 14 against 25).
Location: src/secure_code_audit/scanners/_finding_builder.py:41
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

assess in src/secure_code_audit/practice.py

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

configured risk pattern in README.md

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

configured risk pattern in docs/html/docs-remediation.html

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/html/docs-remediation.html:65
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

configured risk pattern in docs/html/readme.html

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/html/readme.html:171
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

configured risk pattern in docs/html/skills-secure-code-agent-references-finding-taxonomy.html

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/html/skills-secure-code-agent-references-finding-taxonomy.html:153
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

configured risk pattern in docs/remediation.md

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

configured risk pattern in skills/secure-code-agent/references/finding-taxonomy.md

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

duplicated block in src/secure_code_audit/cli.py

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:163
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.

src/secure_code_audit/cli.py is 1667 lines

Repository: /Users/marshallguillory/repos/secure-code-agent
Design decision needed, not a patch: src/secure_code_audit/cli.py is 1667 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.

near-duplicate declaration in src/secure_code_audit/scoring.py

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.

src/secure_code_audit/scoring.py is 951 lines

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.

duplicated block in src/secure_code_audit/suppressions.py

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:365
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.

duplicated block in src/secure_code_audit/scanners/bandit_scanner.py

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.

duplicated block in src/secure_code_audit/scanners/npm_audit_scanner.py

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.

CHANGELOG.md is 1463 lines

Repository: /Users/marshallguillory/repos/secure-code-agent
Design decision needed, not a patch: CHANGELOG.md is 1463 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.

docs/decisions.md is 2023 lines

Repository: /Users/marshallguillory/repos/secure-code-agent
Design decision needed, not a patch: docs/decisions.md is 2023 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.

docs/html/changelog.html is 1464 lines

Repository: /Users/marshallguillory/repos/secure-code-agent
Design decision needed, not a patch: docs/html/changelog.html is 1464 lines.
Location: docs/html/changelog.html
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.

docs/html/docs-decisions.html is 2108 lines

Repository: /Users/marshallguillory/repos/secure-code-agent
Design decision needed, not a patch: docs/html/docs-decisions.html is 2108 lines.
Location: docs/html/docs-decisions.html
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.

duplicated block in README.md

Repository: /Users/marshallguillory/repos/secure-code-agent
Design decision needed, not a patch: duplicated block in README.md.
Location: README.md:252
Also at: docs/html/readme.html:302
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.

duplicated block in README.md

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/html/docs-remediation.html:35, docs/html/readme.html:144, 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 4 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.

duplicated block in docs/design.md

Repository: /Users/marshallguillory/repos/secure-code-agent
Design decision needed, not a patch: duplicated block in docs/design.md.
Location: docs/design.md:36
Also at: docs/html/docs-design.html:62
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.

duplicated block in docs/html/calibration-readme.html

Repository: /Users/marshallguillory/repos/secure-code-agent
Design decision needed, not a patch: duplicated block in docs/html/calibration-readme.html.
Location: docs/html/calibration-readme.html:144
Also at: docs/html/changelog.html:715, docs/html/docs-calibration.html:613, docs/html/docs-decisions.html:1257
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 4 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.

duplicated block in docs/html/calibration-readme.html

Repository: /Users/marshallguillory/repos/secure-code-agent
Design decision needed, not a patch: duplicated block in docs/html/calibration-readme.html.
Location: docs/html/calibration-readme.html:110
Also at: docs/html/docs-calibration.html:495, docs/html/docs-decisions.html:463
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.

duplicated block in docs/html/docs-calibration.html

Repository: /Users/marshallguillory/repos/secure-code-agent
Design decision needed, not a patch: duplicated block in docs/html/docs-calibration.html.
Location: docs/html/docs-calibration.html:307
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.

duplicated block in docs/html/docs-design.html

Repository: /Users/marshallguillory/repos/secure-code-agent
Design decision needed, not a patch: duplicated block in docs/html/docs-design.html.
Location: docs/html/docs-design.html:208
Also at: docs/html/skills-secure-code-agent-references-finding-taxonomy.html:84
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.

duplicated block in docs/html/docs-remediation.html

Repository: /Users/marshallguillory/repos/secure-code-agent
Design decision needed, not a patch: duplicated block in docs/html/docs-remediation.html.
Location: docs/html/docs-remediation.html:66
Also at: docs/remediation.md:58
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.

duplicated block in docs/html/docs-scanners.html

Repository: /Users/marshallguillory/repos/secure-code-agent
Design decision needed, not a patch: duplicated block in docs/html/docs-scanners.html.
Location: docs/html/docs-scanners.html:174
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.

duplicated block in docs/html/style.css

Repository: /Users/marshallguillory/repos/secure-code-agent
Design decision needed, not a patch: duplicated block in docs/html/style.css.
Location: docs/html/style.css:2
Also at: tools/render_docs.css:2
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.

duplicated block in tests/integration/test_gated_findings_are_reportable.py

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.

duplicated block in tests/integration/test_target_shapes.py

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.

duplicated block in tests/unit/test_calibrate.py

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.

duplicated block in tests/unit/test_offline_ruleset.py

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.

duplicated block in tests/unit/test_offline_ruleset.py

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.

duplicated block in tests/unit/test_plan_features.py

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.

duplicated block in tests/unit/test_sarif_roundtrip.py

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.

duplicated block in tests/unit/test_sarif_roundtrip.py

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.

duplicated block in tests/unit/test_standards_overlay.py

Repository: /Users/marshallguillory/repos/secure-code-agent
Design decision needed, not a patch: duplicated block in tests/unit/test_standards_overlay.py.
Location: tests/unit/test_standards_overlay.py:163
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.

duplicated block in tests/unit/test_tier1_scanners.py

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.

duplicated block in tests/unit/test_tier2_scanners.py

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.

Security Work Order

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 · 1875 suppression candidates.

Semantic findings

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.