Maintainability Report

Generated 2026-10-02T23:49:37+00:00 · commit 9b16aaba343436cbbc64b01d046bf11d0a310be8 · branch fix/risk-findings · 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 9 comparable scans (3.9 to 4.1).
SeverityFindings
Severe5
High34
Medium5
Low0
Total findings44

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.113210
jscpdanalyzerrancpd 5.1.1175
lizardanalyzerran1.24.042480
multimetricanalyzerranusage: multimetric [-h] [--warn_compiler WARN_COMPILER]5360
mypyanalyzerranmypy 2.3.1 (compiled: yes)00
pmdanalyzerranPMD 7.26.0 (8fd38edf285a33e1164f66205ebe243441db9557, 2026-06-29T08:22:36Z)00
pydocstyleanalyzerran6.3.00198
radonanalyzerran6.0.11260
ruffanalyzerranruff 0.16.500
vultureanalyzerranvulture 2.1600
competing-librariesbuilt-inran—1600
dead-codebuilt-inran—14860
declaration-sizebuilt-inran—148671
duplicate-blocksbuilt-inran—16020
file-sizebuilt-inran—16019
historybuilt-inran—16023
near-duplicatesbuilt-inran—14861
risk-patternsbuilt-inran—1605

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

Estimate over recorded scans

012345score (0-5)10-0210-0210-0210-0210-0210-02scan 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.1

Pillars over time (condition)

012345condition (0-5)10-0210-0210-0210-0210-0210-02maintainability 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.97readability 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.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.0efficiencymaintainabilityreadabilitysecuritytestability

Practice level over time (maturity — a separate series)

012345maturity (0-5)10-0210-0210-0210-0210-0210-02scan 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.0

Categories, this scan

012345score (0-5)modularity: 3.63.6modularityreusability: 4.54.5reusabilityanalyzability: 4.14.1analyzabilitymodifiability: 3.83.8modifiabilitytestability: 4.64.6testability

Trend

9 scans, 2026-10-02T18:05:36Z to 2026-10-02T23:52:25Z.

Every figure describes scans that happened; nothing forecasts.

Economic Context (scenario)

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

This is a scenario, not a prediction.

Assumptions:

TDD-shaped tests

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

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

Test Suite

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

Pillars

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

PillarScopePracticeConditionReading
readabilitypartial44.5healthy: enforced, and the code reflects it
maintainabilityowned44.0healthy: 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.6
reusability4.5
analyzability4.1
modifiability3.8
testability4.6

Aspect Scores

AspectScore
file size3.7
declaration size3.6
duplication4.6
risk patterns3.9
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/decisions.md1857fail
src/secure_code_audit/cli.py1577fail
CHANGELOG.md1391fail
src/secure_code_audit/scoring.py951fail
src/secure_code_audit/standards.py705warn
tests/unit/test_calibrate.py698warn
src/secure_code_audit/config.py677warn
src/secure_code_audit/renderers.py590warn
README.md569warn
calibration/calibrate.py557warn
src/secure_code_audit/sarif.py500warn
tests/unit/test_cli_coverage.py493warn
tests/unit/test_tier2_scanners.py488warn
tests/unit/test_offline_ruleset.py430warn
tests/unit/test_plan_features.py430warn
src/secure_code_audit/remediation.py421warn
src/secure_code_audit/verify.py417warn
src/secure_code_audit/findings.py408warn
tests/integration/test_scoring_drift.py407warn
tests/integration/test_finding_paths_are_repository_relative.py392ok
tests/unit/test_command_resolution.py381ok
tests/unit/test_finding_builder.py379ok
docs/calibration.md372ok
tests/unit/test_language_scanners.py368ok
docs/architecture.md362ok

Function Hotspots

FileDeclarationLineLinesComplexityCognitiveStatus
calibration/calibrate.pysummarize366703112fail
src/secure_code_audit/suppressions.pyload1131113044fail
src/secure_code_audit/cli.py_do_audit4952722918fail
src/secure_code_audit/practice.pyassess207942835fail
src/secure_code_audit/verify.pycompare29479257fail
src/secure_code_audit/scanners/semgrep_scanner.py_parse_sarif150562432fail
src/secure_code_audit/config.py_validate_gates641322121fail
src/secure_code_audit/cli.py_print_summary1334761919fail
calibration/calibrate.pymain4381161817fail
src/secure_code_audit/config.py_apply_scanners478361721fail
src/secure_code_audit/scanners/pip_audit_scanner.py_audit_inputs107331713fail
src/secure_code_audit/scanners/_finding_builder.py_resolve_standards35511623fail
src/secure_code_audit/cli.py_split_axes385108814fail
src/secure_code_audit/cli.py_parser7015920fail
src/secure_code_audit/git_tools.pyloc_under169611519warn
src/secure_code_audit/scanners/bandit_scanner.pyscan47571515warn
src/secure_code_audit/pillar.pybuild135481513warn
src/secure_code_audit/scanners/gosec_scanner.py_finding_for114241519warn
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_parse88431411warn
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_rule78311419warn
src/secure_code_audit/sarif.pyingest_with_coverage262721314warn
src/secure_code_audit/scanners/pip_audit_scanner.pyscan45611317warn
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_preflight280561213warn
src/secure_code_audit/cli.py_measurable_categories882481211warn
src/secure_code_audit/findings.pymerge_corroborating364451217warn
src/secure_code_audit/scanners/rubocop_scanner.pyscan59401215warn
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_parse132241211warn
src/secure_code_audit/scanners/gosec_scanner.py_load_failure89241218warn
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_parse87281115warn
src/secure_code_audit/cli.py_print_preflight338241116warn
src/secure_code_audit/config.py_apply_file_and_loc568191113warn
src/secure_code_audit/scanners/semgrep_scanner.py_cwe_from_rule33191111warn
src/secure_code_audit/cli.py_do_verify1465621018warn

Work order

SeverityBandFindingLocationDo
Highquick-win_do_audit in src/secure_code_audit/cli.pysrc/secure_code_audit/cli.py:495reduce below the configured limits (currently 272 lines against 80, complexity 29 against 15, cognitive 18 against 25)
Highquick-win_parser in src/secure_code_audit/cli.pysrc/secure_code_audit/cli.py:70reduce 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:1334reduce 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:385reduce 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:478reduce 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:641reduce below the configured limits (currently 32 lines against 80, complexity 21 against 15, cognitive 21 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
Highquick-win_parse_sarif in src/secure_code_audit/scanners/semgrep_scanner.pysrc/secure_code_audit/scanners/semgrep_scanner.py:150reduce 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/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-winload in src/secure_code_audit/suppressions.pysrc/secure_code_audit/suppressions.py:113reduce below the configured limits (currently 111 lines against 80, complexity 30 against 15, cognitive 44 against 25)
Highquick-winmain in calibration/calibrate.pycalibration/calibrate.py:438reduce below the configured limits (currently 116 lines against 80, complexity 18 against 15, cognitive 17 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-win_audit_inputs in src/secure_code_audit/scanners/pip_audit_scanner.pysrc/secure_code_audit/scanners/pip_audit_scanner.py:107reduce below the configured limits (currently 33 lines against 80, complexity 17 against 15, cognitive 13 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:35reduce below the configured limits (currently 51 lines against 80, complexity 16 against 15, cognitive 23 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/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:162remove the duplicated block
Mediummajor-projectsrc/secure_code_audit/cli.py is 1577 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/scanners/semgrep_scanner.pysrc/secure_code_audit/scanners/semgrep_scanner.py:128extract the shared block so its 2 copies become one; editing one copy alone leaves the rest
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/osv_scanner.pysrc/secure_code_audit/scanners/osv_scanner.py:44extract the shared block so its 2 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:103extract the shared block so its 2 copies become one; editing one copy alone leaves the rest
Mediummajor-projectCHANGELOG.md is 1391 linesCHANGELOG.mdsplit below the configured file-length limit
Mediummajor-projectdocs/decisions.md is 1857 linesdocs/decisions.mdsplit below the configured file-length limit
Highmajor-projectduplicated block in README.mdREADME.md:112extract the shared block so its 2 copies become one; editing one copy alone leaves the rest
Highmajor-projectduplicated block in skills/secure-code-agent/SKILL.mdskills/secure-code-agent/SKILL.md:30extract 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_cli_coverage.pytests/unit/test_cli_coverage.py:51extract the shared block so its 2 copies become one; editing one copy alone leaves the rest
Highmajor-projectduplicated block in tests/unit/test_code_scanning_sarif_raises_only_alerts.pytests/unit/test_code_scanning_sarif_raises_only_alerts.py:57extract the shared block so its 2 copies become one; editing one copy alone leaves the rest
Highmajor-projectduplicated block in tests/unit/test_declared_capabilities.pytests/unit/test_declared_capabilities.py:45extract the shared block so its 2 copies become one; editing one copy alone leaves the rest
Highmajor-projectduplicated block in tests/unit/test_gate_reporting.pytests/unit/test_gate_reporting.py:105extract the shared block so its 3 copies become one; editing one copy alone leaves the rest
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_practice.pytests/unit/test_practice.py:98remove 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_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 272 lines against 80, complexity 29 against 15, cognitive 18 against 25).
Location: src/secure_code_audit/cli.py:495
Why: a long, branching function is where defects concentrate and where every future change has to be understood first

Make one small, reviewable change. Do not alter public behavior or refactor unrelated code. If this is a false positive, say so and leave it unchanged; add or update a test when behavior changes.
Verify when done: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/python -m maintainability_audit --root . --format json

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

_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:1334
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:385
Why: a long function is where every future change has to be understood first

Make one small, reviewable change. Do not alter public behavior or refactor unrelated code. If this is a false positive, say so and leave it unchanged; add or update a test when behavior changes.
Verify when done: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/python -m maintainability_audit --root . --format json

_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:478
Why: a long, branching function is where defects concentrate and where every future change has to be understood first

Make one small, reviewable change. Do not alter public behavior or refactor unrelated code. If this is a false positive, say so and leave it unchanged; add or update a test when behavior changes.
Verify when done: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/python -m maintainability_audit --root . --format json

_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:641
Why: a long, branching function is where defects concentrate and where every future change has to be understood first

Make one small, reviewable change. Do not alter public behavior or refactor unrelated code. If this is a false positive, say so and leave it unchanged; add or update a test when behavior changes.
Verify when done: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/python -m maintainability_audit --root . --format json

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

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

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

load in src/secure_code_audit/suppressions.py

Repository: /Users/marshallguillory/repos/secure-code-agent
Task: reduce below the configured limits (currently 111 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

main in calibration/calibrate.py

Repository: /Users/marshallguillory/repos/secure-code-agent
Task: reduce below the configured limits (currently 116 lines against 80, complexity 18 against 15, cognitive 17 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

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

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 51 lines against 80, complexity 16 against 15, cognitive 23 against 25).
Location: src/secure_code_audit/scanners/_finding_builder.py:35
Why: a long, branching function is where defects concentrate and where every future change has to be understood first

Make one small, reviewable change. Do not alter public behavior or refactor unrelated code. If this is a false positive, say so and leave it unchanged; add or update a test when behavior changes.
Verify when done: /Users/marshallguillory/.local/share/maintainability-agent/venv/bin/python -m maintainability_audit --root . --format json

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

src/secure_code_audit/cli.py is 1577 lines

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

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.

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/osv_scanner.py

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.

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

CHANGELOG.md is 1391 lines

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.

docs/decisions.md is 1857 lines

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.

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/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.

duplicated block in skills/secure-code-agent/SKILL.md

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.

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_cli_coverage.py

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.

duplicated block in tests/unit/test_code_scanning_sarif_raises_only_alerts.py

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.

duplicated block in tests/unit/test_declared_capabilities.py

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.

duplicated block in tests/unit/test_gate_reporting.py

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.

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_practice.py

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.

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_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 · 1733 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.