Maintainability Report

Generated 2026-09-19T22:05:42+00:00 · commit 6c609930bbd17283882e7953c90fe97634f12bbb · branch main · root /Users/marshallguillory/repos/maintainability-agent · standard ISO/IEC 25010 maintainability-inspired 0-5 scale, rate-based

4.4 / 5 · grade B
Range: 4.0 – 4.7 · Source: Analyzer readings for declarations (completed by built-in detectors); built-in detectors for remaining dimensions
Evidence complete under profile `default-v1`.
Gate: clear.
No comparable history beyond this scan; direction needs two.
SeverityFindings
Severe0
High0
Medium0
Low0
Total findings0

Coverage

12 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———
pylintanalyzerparse-errorpylint 4.0.7——
checkstyleanalyzerranCheckstyle version: 14.0.00119
complexipyanalyzerran7.0.139670
interrogateanalyzerraninterrogate, version 1.7.010
jscpdanalyzerrancpd 5.1.11140
lizardanalyzerran1.24.0127200
multimetricanalyzerranusage: multimetric [-h] [--warn_compiler WARN_COMPILER]17760
mypyanalyzerranmypy 2.3.1 (compiled: yes)00
pmdanalyzerranPMD 7.26.0 (8fd38edf285a33e1164f66205ebe243441db9557, 2026-06-29T08:22:36Z)00
pydocstyleanalyzerran6.3.00570
radonanalyzerran6.0.14230
ruffanalyzerranruff 0.16.501
vultureanalyzerranvulture 2.1606
competing-librariesbuilt-inran—5170
dead-codebuilt-inran—42050
declaration-sizebuilt-inran—420578
duplicate-blocksbuilt-inran—5170
file-sizebuilt-inran—5174
historybuilt-inran—51674
near-duplicatesbuilt-inran—42050
risk-patternsbuilt-inran—5170

declarations measured by analyzers, completed by built-in detectors: no analyzer supplies cognitive_complexity for C, C#, C++, Fortran, Go, Java, JavaScript, PHP, Ruby, Rust, Swift, TypeScript, 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: testing.

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. 12 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-08-15T20:46:31Z008e87014.20
2026-08-15T20:46:33Z008e87014.20
2026-08-15T20:46:44Z008e87014.20
2026-08-16T01:18:28Z8fa548b24.20
2026-08-16T01:19:29Z8fa548b24.20
2026-08-16T01:19:50Z8fa548b24.20
2026-08-16T06:01:10Z2abf51124.20
2026-08-17T15:38:29Zc8b267e34.21
2026-08-17T15:38:46Zc8b267e34.21
2026-08-17T15:39:05Zc8b267e34.21
2026-08-17T15:39:21Zc8b267e34.21
2026-08-17T15:39:38Zc8b267e34.21
2026-08-17T15:40:13Zc8b267e34.20
2026-08-17T20:07:23Z413c76174.218
2026-08-17T20:07:39Z413c76174.218
2026-08-17T20:07:55Z413c76174.218
2026-08-17T20:18:57Z413c76174.20
2026-08-17T21:55:55Z6b2fb7644.21
2026-08-17T21:56:12Z6b2fb7644.21
2026-08-17T21:56:29Z6b2fb7644.21
2026-08-17T22:00:26Z6b2fb7644.20
2026-08-17T22:04:12Z6b2fb7644.20
2026-08-17T22:58:36Z92f6270b4.20
2026-08-17T23:32:19Ze6783b754.20
2026-08-17T23:52:26Zfc5e93514.20
2026-08-18T01:23:51Z1af28aa64.20
2026-08-18T05:25:24Z3518bdc34.20
2026-08-18T17:46:36Zeb8c73914.20
2026-08-18T18:00:16Zc6fce1ff4.20
2026-08-18T22:41:24Z549fcad04.21
2026-08-18T22:41:41Z549fcad04.21
2026-08-18T22:41:53Z549fcad04.21
2026-08-18T22:45:39Z549fcad04.20
2026-08-19T01:18:32Z7ef71c164.113
2026-08-19T01:18:51Z7ef71c164.113
2026-08-19T01:19:13Z7ef71c164.113
2026-08-19T01:20:04Z7ef71c164.20
2026-08-19T02:28:12Z340ec98c4.20
2026-08-19T14:53:41Z6367c55b4.20
2026-08-19T15:03:23Z2e395c354.20
2026-08-19T17:17:40Z0be65cba4.20
2026-08-19T18:20:31Z742a49f54.20
2026-08-19T19:09:44Z9510c0954.13
2026-08-19T19:10:06Z9510c0954.13
2026-08-19T19:10:18Z9510c0954.13
2026-08-19T19:10:57Z9510c0954.13
2026-08-19T19:19:45Z9510c0954.20
2026-08-19T20:19:25Z6a69d7284.20
2026-08-19T22:00:41Z48293d3f4.12
2026-08-19T22:01:05Z48293d3f4.12
2026-08-19T22:01:18Z48293d3f4.12
2026-08-19T22:05:30Z48293d3f4.11
2026-08-19T22:05:52Z48293d3f4.11
2026-08-19T22:06:05Z48293d3f4.11
2026-08-19T22:06:38Z48293d3f4.20
2026-08-19T22:59:02Zcc71cd174.12
2026-08-19T22:59:23Zcc71cd174.12
2026-08-19T22:59:37Zcc71cd174.12
2026-08-19T23:00:26Zcc71cd174.11
2026-08-19T23:04:01Zcc71cd174.20
2026-08-19T23:50:01Z8ab2c88a4.20
2026-08-20T16:20:52Z0f62cac74.026
2026-08-20T16:21:13Z0f62cac74.026
2026-08-20T16:21:40Z0f62cac74.026
2026-08-20T16:25:15Z0f62cac74.20
2026-08-21T03:30:32Zd5b1c5024.11
2026-08-21T03:30:53Zd5b1c5024.11
2026-08-21T03:31:07Zd5b1c5024.11
2026-08-21T03:31:30Zd5b1c5024.20
2026-08-21T06:12:28Z43c0d13c4.11
2026-08-21T06:12:48Z43c0d13c4.11
2026-08-21T06:13:03Z43c0d13c4.11
2026-08-21T06:17:05Z43c0d13c4.20
2026-08-21T14:50:36Z05bdb5734.12
2026-08-21T14:50:56Z05bdb5734.12
2026-08-21T14:51:10Z05bdb5734.12
2026-08-21T14:53:03Z05bdb5734.20
2026-08-21T15:03:47Z05bdb5734.20
2026-08-21T15:18:51Z8025b4f94.21
2026-08-21T15:19:11Z8025b4f94.21
2026-08-21T15:19:25Z8025b4f94.21
2026-08-21T15:20:11Z8025b4f94.20
2026-08-21T17:10:09Z5a7857cd4.20
2026-08-21T17:14:10Z5a7857cd4.20
2026-08-21T18:17:10Z2f20acda4.11
2026-08-21T18:17:31Z2f20acda4.11
2026-08-21T18:17:45Z2f20acda4.11
2026-08-21T18:18:13Z2f20acda4.20
2026-08-21T18:32:29Z81c05d064.20
2026-08-28T13:05:26Z367adf9a—1
2026-08-28T13:05:37Z367adf9a—1
2026-08-28T13:07:10Z367adf9a—0
2026-09-01T22:50:04Zc76e7d104.13
2026-09-01T22:54:04Zc76e7d104.13
2026-09-01T23:16:01Zc76e7d104.10
2026-09-01T23:57:58Zfc2024d84.10
2026-09-02T00:13:53Zfc2024d84.10
2026-09-02T02:21:34Z950ccd084.10
2026-09-02T02:37:15Z8d31a9194.10
2026-09-02T02:55:46Z8b3996554.10
2026-09-02T03:10:30Z5a25a7854.10
2026-09-02T04:13:12Z083dcfe74.11
2026-09-02T04:16:57Z083dcfe74.11
2026-09-02T04:20:42Z083dcfe74.11
2026-09-02T04:24:53Z083dcfe74.10
2026-09-02T04:32:59Z083dcfe74.10
2026-09-02T05:07:33Zcebf47c64.10
2026-09-02T05:21:56Zcebf47c64.10
2026-09-02T15:53:44Z82212f7c4.11
2026-09-02T15:57:42Z82212f7c4.11
2026-09-02T16:01:50Z82212f7c4.11
2026-09-02T16:09:57Z82212f7c4.10
2026-09-02T16:49:38Zdd2e26e64.12
2026-09-02T16:53:22Zdd2e26e64.12
2026-09-02T17:01:35Zdd2e26e64.10
2026-09-02T17:16:02Z590a69864.10
2026-09-02T18:17:31Z9d3b5f1c4.10
2026-09-02T19:09:34Z1b87e7dd4.10
2026-09-02T19:48:51Z1b87e7dd4.11
2026-09-02T19:59:16Z1b87e7dd4.11
2026-09-02T20:03:02Z1b87e7dd4.11
2026-09-02T20:10:01Z1b87e7dd4.10
2026-09-02T20:57:23Z962f3e8c4.10
2026-09-02T21:22:31Z064b14ba4.10
2026-09-03T01:50:55Z064b14ba4.10
2026-09-03T03:14:36Zeda313a74.11
2026-09-03T03:19:37Zeda313a74.11
2026-09-03T03:26:28Zeda313a74.10
2026-09-03T04:32:13Z5b76ed8e4.11
2026-09-03T04:37:32Z5b76ed8e4.11
2026-09-03T04:42:55Z5b76ed8e4.11
2026-09-03T04:48:08Z5b76ed8e4.11
2026-09-03T04:53:21Z5b76ed8e4.11
2026-09-03T04:59:23Z5b76ed8e4.10
2026-09-03T13:47:23Z1f6f9bbb4.10
2026-09-03T13:52:57Z1f6f9bbb4.10
2026-09-03T13:58:21Z1f6f9bbb4.10
2026-09-03T14:04:41Z1f6f9bbb4.10
2026-09-03T14:19:51Z1f6f9bbb4.11
2026-09-03T14:29:04Z1f6f9bbb4.11
2026-09-03T14:36:15Z1f6f9bbb4.11
2026-09-03T14:52:35Z1f6f9bbb4.10
2026-09-03T15:38:52Zeaa6f67b4.10
2026-09-03T16:43:03Z65830eef4.11
2026-09-03T16:52:36Z65830eef4.11
2026-09-03T17:01:53Z65830eef4.11
2026-09-03T17:07:37Z65830eef4.10
2026-09-03T17:14:34Z65830eef4.10
2026-09-03T18:31:22Z08b59cae4.12
2026-09-03T18:36:27Z08b59cae4.12
2026-09-03T18:41:30Z08b59cae4.11
2026-09-03T18:46:23Z08b59cae4.11
2026-09-03T18:51:28Z08b59cae4.10
2026-09-03T19:10:28Z08b59cae4.11
2026-09-03T19:15:49Z08b59cae4.10
2026-09-03T19:47:08Z08b59cae4.11
2026-09-03T19:52:28Z08b59cae4.11
2026-09-03T19:57:41Z08b59cae4.10
2026-09-03T22:26:06Z08b59cae4.21
2026-09-03T22:34:50Z08b59cae4.21
2026-09-03T22:40:10Z08b59cae4.21
2026-09-03T22:45:44Z08b59cae4.20
2026-09-03T23:00:18Z08b59cae4.20
2026-09-04T02:59:22Z406d73474.20
2026-09-04T03:09:38Z406d73474.20
2026-09-04T03:36:55Zdba2fade4.22
2026-09-04T03:48:53Zdba2fade4.22
2026-09-04T03:58:42Zdba2fade4.20
2026-09-04T04:12:38Z8d65e5624.20
2026-09-04T04:25:28Z8d65e5624.20
2026-09-04T04:53:43Ze93bfa594.20
2026-09-04T05:23:22Z2b2de1ff4.21
2026-09-04T05:28:31Z2b2de1ff4.21
2026-09-04T05:34:39Z2b2de1ff4.20
2026-09-04T05:44:00Z2b2de1ff4.20
2026-09-04T05:56:43Z2b2de1ff4.20
2026-09-04T06:10:08Z81be3d124.20
2026-09-04T06:30:41Z1f6a669d4.20
2026-09-04T06:58:47Z0c2a399e4.20
2026-09-04T07:11:36Z0c2a399e4.20
2026-09-04T07:40:48Zf521f37e4.20
2026-09-04T07:53:46Zf521f37e4.20
2026-09-04T16:40:06Z2c6adbfa4.20
2026-09-04T17:56:04Z3077aa1c4.20
2026-09-04T19:08:33Zf4c557944.20
2026-09-04T19:52:42Zb3e050d24.23
2026-09-04T19:56:54Zb3e050d24.23
2026-09-04T20:01:02Zb3e050d24.23
2026-09-04T20:05:13Zb3e050d24.23
2026-09-04T20:09:26Zb3e050d24.23
2026-09-04T20:14:56Zb3e050d24.22
2026-09-04T20:19:03Zb3e050d24.22
2026-09-04T20:24:43Zb3e050d24.21
2026-09-04T20:28:57Zb3e050d24.20
2026-09-04T20:50:00Zfb3cf0ba4.20
2026-09-04T21:24:29Ze0d9144b4.20
2026-09-04T21:48:12Z016a5db14.21
2026-09-04T21:52:47Z016a5db14.21
2026-09-04T21:57:17Z016a5db14.21
2026-09-04T22:01:42Z016a5db14.20
2026-09-04T22:33:54Z9c91c3d14.20
2026-09-04T22:42:23Z9c91c3d14.20
2026-09-05T00:28:01Zf51fbbc34.23
2026-09-05T00:32:12Zf51fbbc34.23
2026-09-05T00:39:15Zf51fbbc34.21
2026-09-05T00:43:18Zf51fbbc34.21
2026-09-05T00:47:24Zf51fbbc34.20
2026-09-05T00:59:02Z2379a7ce4.20
2026-09-05T01:34:47Z2b6913674.21
2026-09-05T01:38:51Z2b6913674.21
2026-09-05T01:42:53Z2b6913674.21
2026-09-05T01:47:31Z2b6913674.20
2026-09-05T02:30:32Zfb6d2d5d4.20
2026-09-05T02:41:27Zfb6d2d5d4.20
2026-09-05T03:18:17Z4d578d6d4.20
2026-09-05T05:12:56Z687c012b4.21
2026-09-05T05:17:04Z687c012b4.21
2026-09-05T05:21:10Z687c012b4.21
2026-09-05T05:28:40Z687c012b4.21
2026-09-05T05:32:42Z687c012b4.21
2026-09-05T05:36:49Z687c012b4.21
2026-09-05T05:43:54Z687c012b4.20
2026-09-05T06:06:22Zb00770eb4.20
2026-09-05T14:51:23Z99aacf954.20
2026-09-05T15:09:49Z3b0ad5cc4.20
2026-09-05T16:25:16Za1ff4ac34.20
2026-09-05T16:43:43Zae7ff2314.20
2026-09-05T17:03:59Z27c608f44.20
2026-09-05T17:49:27Z76200a004.20
2026-09-05T18:15:54Z18f061ab4.20
2026-09-05T19:52:45Z50d4d5ae4.20
2026-09-05T20:44:46Ze9a7e2f4—0
2026-09-05T20:49:08Ze9a7e2f4—0
2026-09-05T20:53:53Ze9a7e2f4—0
2026-09-05T21:35:57Ze9a7e2f44.21
2026-09-05T21:42:25Ze9a7e2f44.20
2026-09-06T01:22:18Zb4981e214.20
2026-09-06T03:28:11Zb02dd5a94.20
2026-09-06T03:54:55Za569c8334.24
2026-09-06T04:02:48Za569c8334.23
2026-09-06T14:42:34Z2f5f0de94.21
2026-09-06T14:55:35Z5a70d53d4.20
2026-09-06T15:06:06Z3cfe463b4.20
2026-09-06T15:20:50Z92b9173a4.20
2026-09-06T15:43:18Z41c2093e4.20
2026-09-06T16:11:26Z41c2093e4.25
2026-09-06T18:17:55Z59bb61114.22
2026-09-06T18:22:46Z59bb61114.22
2026-09-06T18:28:54Z59bb61114.20
2026-09-06T18:48:06Zaed000034.20
2026-09-06T18:55:57Zaf96de134.20
2026-09-07T18:48:35Z4ebdeb354.20
2026-09-07T20:46:27Zf5b64d644.21
2026-09-07T20:58:48Zf5b64d644.20
2026-09-07T23:54:18Z616af9274.22
2026-09-07T23:58:45Z616af9274.22
2026-09-08T00:03:26Z616af9274.22
2026-09-08T00:14:00Z616af9274.20
2026-09-08T07:43:59Zef9832b84.11
2026-09-08T07:52:12Zef9832b84.10
2026-09-08T15:51:51Zdc8dc76c4.10
2026-09-08T16:52:49Zdc8dc76c4.10
2026-09-08T17:45:09Zef76e1cd4.10
2026-09-08T19:04:32Z32a6a6784.10
2026-09-09T15:28:08Za34c924d4.10
2026-09-09T15:45:03Za34c924d4.10
2026-09-09T15:51:34Za34c924d4.10
2026-09-09T15:57:18Za34c924d4.10
2026-09-09T16:03:21Za34c924d4.10
2026-09-09T16:26:16Za34c924d4.10
2026-09-10T22:48:20Z2c2dfdac4.40
2026-09-10T22:57:13Z2c2dfdac4.40
2026-09-10T22:59:13Z2c2dfdac4.40
2026-09-10T23:08:06Z34eeef964.40
2026-09-10T23:13:37Z34eeef964.40
2026-09-10T23:22:21Z34eeef964.40
2026-09-10T23:35:05Z08dbbebd4.40
2026-09-11T01:08:13Z075bda924.40
2026-09-11T01:13:43Z075bda924.40
2026-09-11T01:24:28Z64c2b4544.40
2026-09-11T01:32:09Z64c2b4544.50
2026-09-11T01:39:08Z64c2b4544.50
2026-09-11T01:45:22Z64c2b4544.50
2026-09-11T01:53:21Z64c2b4544.50
2026-09-11T01:59:08Z64c2b4544.50
2026-09-11T02:04:20Z64c2b4544.50
2026-09-11T02:14:11Z7c1d81734.50
2026-09-11T02:21:15Z7c1d81734.50
2026-09-11T02:26:10Z7c1d81734.50
2026-09-11T05:11:47Z533e7b1c4.50
2026-09-11T17:41:40Z673e66734.50
2026-09-11T18:06:02Z673e66734.50
2026-09-11T18:29:17Z9b49baf34.50
2026-09-11T18:41:02Z4769dc364.50
2026-09-11T18:41:29Z4769dc364.50
2026-09-11T18:46:10Z4769dc364.50
2026-09-11T19:12:49Z0d7230dc4.41
2026-09-11T19:13:19Z0d7230dc4.41
2026-09-11T19:22:22Z0d7230dc4.41
2026-09-11T19:22:53Z0d7230dc4.41
2026-09-11T19:23:27Z0d7230dc4.41
2026-09-11T19:24:09Z0d7230dc4.50
2026-09-11T21:08:33Z51eb31a24.50
2026-09-11T21:29:07Ze2fe23384.50
2026-09-11T22:43:02Z663585194.50
2026-09-11T22:47:45Z663585194.50
2026-09-11T22:52:49Zd4a45cee4.50
2026-09-11T23:05:25Zd4a45cee4.50
2026-09-11T23:21:19Ze8f27dd14.50
2026-09-11T23:43:19Z55ce9cad4.50
2026-09-12T00:03:02Z7d1964594.50
2026-09-12T00:17:35Z7d1964594.50
2026-09-12T00:31:22Z136b7e3d4.50
2026-09-12T00:39:39Z136b7e3d4.50
2026-09-12T00:52:35Z934f77394.50
2026-09-12T00:53:48Z934f77394.50
2026-09-12T00:54:59Z934f77394.50
2026-09-12T01:04:36Z014e5b9d4.50
2026-09-12T01:10:32Z092065804.50
2026-09-12T01:33:28Z10059fb44.50
2026-09-12T01:55:40Za103c3ce4.50
2026-09-12T02:12:33Z7fc800a34.50
2026-09-18T19:59:49Z365717864.31
2026-09-18T20:03:00Z365717864.40
2026-09-18T20:50:09Z24a65e9c4.40
2026-09-18T21:32:18Zae2754044.40
2026-09-19T01:11:44Ze973a0cb4.31
2026-09-19T01:21:41Ze973a0cb4.40
2026-09-19T22:09:11Z6c6099304.40

Estimate over recorded scans

012345score (0-5)08-1508-2109-0309-0409-0809-19scan 1: 4.2scan 2: 4.2scan 3: 4.2scan 4: 4.2scan 5: 4.2scan 6: 4.2scan 7: 4.2scan 8: 4.2scan 9: 4.2scan 10: 4.2scan 11: 4.2scan 12: 4.2scan 13: 4.2scan 14: 4.2scan 15: 4.2scan 16: 4.2scan 17: 4.2scan 18: 4.2scan 19: 4.2scan 20: 4.2scan 21: 4.2scan 22: 4.2scan 23: 4.2scan 24: 4.2scan 25: 4.2scan 26: 4.2scan 27: 4.2scan 28: 4.2scan 29: 4.2scan 30: 4.2scan 31: 4.2scan 32: 4.2scan 33: 4.2scan 34: 4.1scan 35: 4.1scan 36: 4.1scan 37: 4.2scan 38: 4.2scan 39: 4.2scan 40: 4.2scan 41: 4.2scan 42: 4.2scan 43: 4.1scan 44: 4.1scan 45: 4.1scan 46: 4.1scan 47: 4.2scan 48: 4.2scan 49: 4.1scan 50: 4.1scan 51: 4.1scan 52: 4.1scan 53: 4.1scan 54: 4.1scan 55: 4.2scan 56: 4.1scan 57: 4.1scan 58: 4.1scan 59: 4.1scan 60: 4.2scan 61: 4.2scan 62: 4.0scan 63: 4.0scan 64: 4.0scan 65: 4.2scan 66: 4.1scan 67: 4.1scan 68: 4.1scan 69: 4.2scan 70: 4.1scan 71: 4.1scan 72: 4.1scan 73: 4.2scan 74: 4.1scan 75: 4.1scan 76: 4.1scan 77: 4.2scan 78: 4.2scan 79: 4.2scan 80: 4.2scan 81: 4.2scan 82: 4.2scan 83: 4.2scan 84: 4.2scan 85: 4.1scan 86: 4.1scan 87: 4.1scan 88: 4.2scan 89: 4.2scan 93: 4.1scan 94: 4.1scan 95: 4.1scan 96: 4.1scan 97: 4.1scan 98: 4.1scan 99: 4.1scan 100: 4.1scan 101: 4.1scan 102: 4.1scan 103: 4.1scan 104: 4.1scan 105: 4.1scan 106: 4.1scan 107: 4.1scan 108: 4.1scan 109: 4.1scan 110: 4.1scan 111: 4.1scan 112: 4.1scan 113: 4.1scan 114: 4.1scan 115: 4.1scan 116: 4.1scan 117: 4.1scan 118: 4.1scan 119: 4.1scan 120: 4.1scan 121: 4.1scan 122: 4.1scan 123: 4.1scan 124: 4.1scan 125: 4.1scan 126: 4.1scan 127: 4.1scan 128: 4.1scan 129: 4.1scan 130: 4.1scan 131: 4.1scan 132: 4.1scan 133: 4.1scan 134: 4.1scan 135: 4.1scan 136: 4.1scan 137: 4.1scan 138: 4.1scan 139: 4.1scan 140: 4.1scan 141: 4.1scan 142: 4.1scan 143: 4.1scan 144: 4.1scan 145: 4.1scan 146: 4.1scan 147: 4.1scan 148: 4.1scan 149: 4.1scan 150: 4.1scan 151: 4.1scan 152: 4.1scan 153: 4.1scan 154: 4.1scan 155: 4.1scan 156: 4.1scan 157: 4.1scan 158: 4.1scan 159: 4.2scan 160: 4.2scan 161: 4.2scan 162: 4.2scan 163: 4.2scan 164: 4.2scan 165: 4.2scan 166: 4.2scan 167: 4.2scan 168: 4.2scan 169: 4.2scan 170: 4.2scan 171: 4.2scan 172: 4.2scan 173: 4.2scan 174: 4.2scan 175: 4.2scan 176: 4.2scan 177: 4.2scan 178: 4.2scan 179: 4.2scan 180: 4.2scan 181: 4.2scan 182: 4.2scan 183: 4.2scan 184: 4.2scan 185: 4.2scan 186: 4.2scan 187: 4.2scan 188: 4.2scan 189: 4.2scan 190: 4.2scan 191: 4.2scan 192: 4.2scan 193: 4.2scan 194: 4.2scan 195: 4.2scan 196: 4.2scan 197: 4.2scan 198: 4.2scan 199: 4.2scan 200: 4.2scan 201: 4.2scan 202: 4.2scan 203: 4.2scan 204: 4.2scan 205: 4.2scan 206: 4.2scan 207: 4.2scan 208: 4.2scan 209: 4.2scan 210: 4.2scan 211: 4.2scan 212: 4.2scan 213: 4.2scan 214: 4.2scan 215: 4.2scan 216: 4.2scan 217: 4.2scan 218: 4.2scan 219: 4.2scan 220: 4.2scan 221: 4.2scan 222: 4.2scan 223: 4.2scan 224: 4.2scan 225: 4.2scan 226: 4.2scan 227: 4.2scan 228: 4.2scan 229: 4.2scan 230: 4.2scan 231: 4.2scan 235: 4.2scan 236: 4.2scan 237: 4.2scan 238: 4.2scan 239: 4.2scan 240: 4.2scan 241: 4.2scan 242: 4.2scan 243: 4.2scan 244: 4.2scan 245: 4.2scan 246: 4.2scan 247: 4.2scan 248: 4.2scan 249: 4.2scan 250: 4.2scan 251: 4.2scan 252: 4.2scan 253: 4.2scan 254: 4.2scan 255: 4.2scan 256: 4.2scan 257: 4.2scan 258: 4.2scan 259: 4.1scan 260: 4.1scan 261: 4.1scan 262: 4.1scan 263: 4.1scan 264: 4.1scan 265: 4.1scan 266: 4.1scan 267: 4.1scan 268: 4.1scan 269: 4.1scan 270: 4.1scan 271: 4.4scan 272: 4.4scan 273: 4.4scan 274: 4.4scan 275: 4.4scan 276: 4.4scan 277: 4.4scan 278: 4.4scan 279: 4.4scan 280: 4.4scan 281: 4.5scan 282: 4.5scan 283: 4.5scan 284: 4.5scan 285: 4.5scan 286: 4.5scan 287: 4.5scan 288: 4.5scan 289: 4.5scan 290: 4.5scan 291: 4.5scan 292: 4.5scan 293: 4.5scan 294: 4.5scan 295: 4.5scan 296: 4.5scan 297: 4.4scan 298: 4.4scan 299: 4.4scan 300: 4.4scan 301: 4.4scan 302: 4.5scan 303: 4.5scan 304: 4.5scan 305: 4.5scan 306: 4.5scan 307: 4.5scan 308: 4.5scan 309: 4.5scan 310: 4.5scan 311: 4.5scan 312: 4.5scan 313: 4.5scan 314: 4.5scan 315: 4.5scan 316: 4.5scan 317: 4.5scan 318: 4.5scan 319: 4.5scan 320: 4.5scan 321: 4.5scan 322: 4.5scan 323: 4.3scan 324: 4.4scan 325: 4.4scan 326: 4.4scan 327: 4.3scan 328: 4.4scan 329: 4.4

Pillars over time (condition)

012345condition (0-5)08-1508-2109-0309-0409-0809-19maintainability scan 1: 3.77maintainability scan 2: 3.77maintainability scan 3: 3.77maintainability scan 4: 3.77maintainability scan 5: 3.77maintainability scan 6: 3.77maintainability scan 7: 3.77maintainability scan 8: 3.77maintainability scan 9: 3.77maintainability scan 10: 3.77maintainability scan 11: 3.77maintainability scan 12: 3.77maintainability scan 13: 3.77maintainability scan 14: 3.77maintainability scan 15: 3.77maintainability scan 16: 3.77maintainability scan 17: 3.77maintainability scan 18: 3.77maintainability scan 19: 3.77maintainability scan 20: 3.77maintainability scan 21: 3.77maintainability scan 22: 3.77maintainability scan 23: 3.77maintainability scan 24: 3.77maintainability scan 25: 3.77maintainability scan 26: 3.77maintainability scan 27: 3.77maintainability scan 28: 3.77maintainability scan 29: 3.77maintainability scan 30: 3.77maintainability scan 31: 3.77maintainability scan 32: 3.77maintainability scan 33: 3.77maintainability scan 34: 3.63maintainability scan 35: 3.63maintainability scan 36: 3.63maintainability scan 37: 3.63maintainability scan 38: 3.77maintainability scan 39: 3.63maintainability scan 40: 3.63maintainability scan 41: 3.63maintainability scan 42: 3.63maintainability scan 43: 3.63maintainability scan 44: 3.63maintainability scan 45: 3.63maintainability scan 46: 3.63maintainability scan 47: 3.63maintainability scan 48: 3.77maintainability scan 49: 3.63maintainability scan 50: 3.63maintainability scan 51: 3.63maintainability scan 52: 3.63maintainability scan 53: 3.63maintainability scan 54: 3.63maintainability scan 55: 3.63maintainability scan 56: 3.63maintainability scan 57: 3.63maintainability scan 58: 3.63maintainability scan 59: 3.63maintainability scan 60: 3.63maintainability scan 61: 3.63maintainability scan 62: 3.6maintainability scan 63: 3.6maintainability scan 64: 3.6maintainability scan 65: 3.63maintainability scan 66: 3.63maintainability scan 67: 3.63maintainability scan 68: 3.63maintainability scan 69: 3.63maintainability scan 70: 3.63maintainability scan 71: 3.63maintainability scan 72: 3.63maintainability scan 73: 3.63maintainability scan 74: 3.63maintainability scan 75: 3.63maintainability scan 76: 3.63maintainability scan 77: 3.63maintainability scan 78: 3.63maintainability scan 79: 3.77maintainability scan 80: 3.77maintainability scan 81: 3.77maintainability scan 82: 3.77maintainability scan 83: 3.63maintainability scan 84: 3.63maintainability scan 85: 3.63maintainability scan 86: 3.63maintainability scan 87: 3.63maintainability scan 88: 3.63maintainability scan 89: 3.63maintainability scan 90: 2.67maintainability scan 91: 2.67maintainability scan 92: 3.0maintainability scan 93: 3.64maintainability scan 94: 3.64maintainability scan 95: 3.64maintainability scan 96: 3.64maintainability scan 97: 3.64maintainability scan 98: 3.64maintainability scan 99: 3.64maintainability scan 100: 3.64maintainability scan 101: 3.64maintainability scan 102: 3.64maintainability scan 103: 3.64maintainability scan 104: 3.64maintainability scan 105: 3.64maintainability scan 106: 3.64maintainability scan 107: 3.64maintainability scan 108: 3.64maintainability scan 109: 3.64maintainability scan 110: 3.64maintainability scan 111: 3.64maintainability scan 112: 3.64maintainability scan 113: 3.64maintainability scan 114: 3.64maintainability scan 115: 3.64maintainability scan 116: 3.64maintainability scan 117: 3.64maintainability scan 118: 3.64maintainability scan 119: 3.64maintainability scan 120: 3.64maintainability scan 121: 3.64maintainability scan 122: 3.64maintainability scan 123: 3.64maintainability scan 124: 3.64maintainability scan 125: 3.64maintainability scan 126: 3.64maintainability scan 127: 3.64maintainability scan 128: 3.64maintainability scan 129: 3.64maintainability scan 130: 3.64maintainability scan 131: 3.64maintainability scan 132: 3.64maintainability scan 133: 3.64maintainability scan 134: 3.64maintainability scan 135: 3.64maintainability scan 136: 3.64maintainability scan 137: 3.64maintainability scan 138: 3.64maintainability scan 139: 3.64maintainability scan 140: 3.64maintainability scan 141: 3.64maintainability scan 142: 3.64maintainability scan 143: 3.64maintainability scan 144: 3.64maintainability scan 145: 3.64maintainability scan 146: 3.64maintainability scan 147: 3.64maintainability scan 148: 3.64maintainability scan 149: 3.64maintainability scan 150: 3.64maintainability scan 151: 3.64maintainability scan 152: 3.64maintainability scan 153: 3.64maintainability scan 154: 3.64maintainability scan 155: 3.64maintainability scan 156: 3.64maintainability scan 157: 3.64maintainability scan 158: 3.64maintainability scan 159: 3.7maintainability scan 160: 3.7maintainability scan 161: 3.7maintainability scan 162: 3.7maintainability scan 163: 3.7maintainability scan 164: 3.7maintainability scan 165: 3.7maintainability scan 166: 3.71maintainability scan 167: 3.71maintainability scan 168: 3.71maintainability scan 169: 3.7maintainability scan 170: 3.7maintainability scan 171: 3.7maintainability scan 172: 3.7maintainability scan 173: 3.7maintainability scan 174: 3.7maintainability scan 175: 3.7maintainability scan 176: 3.7maintainability scan 177: 3.7maintainability scan 178: 3.7maintainability scan 179: 3.7maintainability scan 180: 3.7maintainability scan 181: 3.7maintainability scan 182: 3.7maintainability scan 183: 3.7maintainability scan 184: 3.7maintainability scan 185: 3.7maintainability scan 186: 3.7maintainability scan 187: 3.7maintainability scan 188: 3.7maintainability scan 189: 3.7maintainability scan 190: 3.7maintainability scan 191: 3.7maintainability scan 192: 3.7maintainability scan 193: 3.7maintainability scan 194: 3.7maintainability scan 195: 3.7maintainability scan 196: 3.7maintainability scan 197: 3.7maintainability scan 198: 3.7maintainability scan 199: 3.7maintainability scan 200: 3.7maintainability scan 201: 3.7maintainability scan 202: 3.7maintainability scan 203: 3.7maintainability scan 204: 3.7maintainability scan 205: 3.7maintainability scan 206: 3.7maintainability scan 207: 3.7maintainability scan 208: 3.7maintainability scan 209: 3.7maintainability scan 210: 3.7maintainability scan 211: 3.7maintainability scan 212: 3.7maintainability scan 213: 3.7maintainability scan 214: 3.7maintainability scan 215: 3.7maintainability scan 216: 3.7maintainability scan 217: 3.7maintainability scan 218: 3.7maintainability scan 219: 3.7maintainability scan 220: 3.7maintainability scan 221: 3.7maintainability scan 222: 3.7maintainability scan 223: 3.7maintainability scan 224: 3.7maintainability scan 225: 3.7maintainability scan 226: 3.7maintainability scan 227: 3.7maintainability scan 228: 3.7maintainability scan 229: 3.7maintainability scan 230: 3.7maintainability scan 231: 3.7maintainability scan 232: 2.33maintainability scan 233: 2.33maintainability scan 234: 2.33maintainability scan 235: 3.7maintainability scan 236: 3.7maintainability scan 237: 3.7maintainability scan 238: 3.7maintainability scan 239: 3.7maintainability scan 240: 3.7maintainability scan 241: 3.7maintainability scan 242: 3.71maintainability scan 243: 3.71maintainability scan 244: 3.71maintainability scan 245: 3.71maintainability scan 246: 3.71maintainability scan 247: 3.71maintainability scan 248: 3.71maintainability scan 249: 3.71maintainability scan 250: 3.71maintainability scan 251: 3.71maintainability scan 252: 3.7maintainability scan 253: 3.7maintainability scan 254: 3.7maintainability scan 255: 3.7maintainability scan 256: 3.7maintainability scan 257: 3.7maintainability scan 258: 3.7maintainability scan 259: 3.6maintainability scan 260: 3.6maintainability scan 261: 3.6maintainability scan 262: 3.6maintainability scan 263: 3.6maintainability scan 264: 3.6maintainability scan 265: 3.6maintainability scan 266: 3.6maintainability scan 267: 3.6maintainability scan 268: 3.6maintainability scan 269: 3.6maintainability scan 270: 3.6maintainability scan 271: 4.01maintainability scan 272: 4.01maintainability scan 273: 4.01maintainability scan 274: 4.01maintainability scan 275: 4.01maintainability scan 276: 4.01maintainability scan 277: 4.01maintainability scan 278: 4.01maintainability scan 279: 4.01maintainability scan 280: 4.01maintainability scan 281: 4.09maintainability scan 282: 4.09maintainability scan 283: 4.09maintainability scan 284: 4.09maintainability scan 285: 4.09maintainability scan 286: 4.09maintainability scan 287: 4.09maintainability scan 288: 4.09maintainability scan 289: 4.09maintainability scan 290: 4.09maintainability scan 291: 4.09maintainability scan 292: 4.09maintainability scan 293: 4.09maintainability scan 294: 4.09maintainability scan 295: 4.09maintainability scan 296: 4.09maintainability scan 297: 4.09maintainability scan 298: 4.09maintainability scan 299: 4.09maintainability scan 300: 4.09maintainability scan 301: 4.09maintainability scan 302: 4.09maintainability scan 303: 4.09maintainability scan 304: 4.09maintainability scan 305: 4.09maintainability scan 306: 4.09maintainability scan 307: 4.09maintainability scan 308: 4.09maintainability scan 309: 4.09maintainability scan 310: 4.09maintainability scan 311: 4.09maintainability scan 312: 4.09maintainability scan 313: 4.09maintainability scan 314: 4.09maintainability scan 315: 4.09maintainability scan 316: 4.09maintainability scan 317: 4.09maintainability scan 318: 4.09maintainability scan 319: 4.09maintainability scan 320: 4.09maintainability scan 321: 4.09maintainability scan 322: 4.09maintainability scan 323: 3.93maintainability scan 324: 3.93maintainability scan 325: 3.93maintainability scan 326: 3.93maintainability scan 327: 3.93maintainability scan 328: 3.93maintainability scan 329: 3.93readability scan 1: 4.6readability scan 2: 4.6readability scan 3: 4.6readability scan 4: 4.6readability scan 5: 4.6readability scan 6: 4.6readability scan 7: 4.6readability scan 8: 4.63readability scan 9: 4.63readability scan 10: 4.63readability scan 11: 4.63readability scan 12: 4.63readability scan 13: 4.63readability scan 14: 4.63readability scan 15: 4.63readability scan 16: 4.63readability scan 17: 4.63readability scan 18: 4.63readability scan 19: 4.63readability scan 20: 4.63readability scan 21: 4.63readability scan 22: 4.63readability scan 23: 4.63readability scan 24: 4.63readability scan 25: 4.63readability scan 26: 4.63readability scan 27: 4.63readability scan 28: 4.63readability scan 29: 4.63readability scan 30: 4.63readability scan 31: 4.63readability scan 32: 4.63readability scan 33: 4.63readability scan 34: 4.63readability scan 35: 4.63readability scan 36: 4.63readability scan 37: 4.63readability scan 38: 4.63readability scan 39: 4.63readability scan 40: 4.63readability scan 41: 4.63readability scan 42: 4.63readability scan 43: 4.63readability scan 44: 4.63readability scan 45: 4.63readability scan 46: 4.63readability scan 47: 4.63readability scan 48: 4.67readability scan 49: 4.63readability scan 50: 4.63readability scan 51: 4.63readability scan 52: 4.63readability scan 53: 4.63readability scan 54: 4.63readability scan 55: 4.63readability scan 56: 4.63readability scan 57: 4.63readability scan 58: 4.63readability scan 59: 4.63readability scan 60: 4.63readability scan 61: 4.63readability scan 62: 4.63readability scan 63: 4.63readability scan 64: 4.63readability scan 65: 4.63readability scan 66: 4.63readability scan 67: 4.63readability scan 68: 4.63readability scan 69: 4.63readability scan 70: 4.63readability scan 71: 4.63readability scan 72: 4.63readability scan 73: 4.63readability scan 74: 4.63readability scan 75: 4.63readability scan 76: 4.63readability scan 77: 4.63readability scan 78: 4.63readability scan 79: 4.63readability scan 80: 4.63readability scan 81: 4.63readability scan 82: 4.63readability scan 83: 4.63readability scan 84: 4.63readability scan 85: 4.63readability scan 86: 4.63readability scan 87: 4.63readability scan 88: 4.63readability scan 89: 4.63readability scan 90: 5.0readability scan 91: 5.0readability scan 92: 5.0readability scan 93: 4.83readability scan 94: 4.83readability scan 95: 4.83readability scan 96: 4.83readability scan 97: 4.83readability scan 98: 4.83readability scan 99: 4.83readability scan 100: 4.83readability scan 101: 4.83readability scan 102: 4.83readability scan 103: 4.83readability scan 104: 4.83readability scan 105: 4.83readability scan 106: 4.83readability scan 107: 4.83readability scan 108: 4.83readability scan 109: 4.83readability scan 110: 4.83readability scan 111: 4.83readability scan 112: 4.83readability scan 113: 4.83readability scan 114: 4.83readability scan 115: 4.83readability scan 116: 4.83readability scan 117: 4.83readability scan 118: 4.83readability scan 119: 4.83readability scan 120: 4.83readability scan 121: 4.83readability scan 122: 4.83readability scan 123: 4.83readability scan 124: 4.83readability scan 125: 4.87readability scan 126: 4.87readability scan 127: 4.87readability scan 128: 4.87readability scan 129: 4.87readability scan 130: 4.87readability scan 131: 4.87readability scan 132: 4.87readability scan 133: 4.87readability scan 134: 4.87readability scan 135: 4.87readability scan 136: 4.87readability scan 137: 4.87readability scan 138: 4.87readability scan 139: 4.87readability scan 140: 4.87readability scan 141: 4.87readability scan 142: 4.87readability scan 143: 4.87readability scan 144: 4.87readability scan 145: 4.87readability scan 146: 4.87readability scan 147: 4.87readability scan 148: 4.87readability scan 149: 4.87readability scan 150: 4.87readability scan 151: 4.87readability scan 152: 4.87readability scan 153: 4.87readability scan 154: 4.87readability scan 155: 4.87readability scan 156: 4.87readability scan 157: 4.87readability scan 158: 4.87readability scan 159: 4.9readability scan 160: 4.9readability scan 161: 4.9readability scan 162: 4.9readability scan 163: 4.9readability scan 164: 4.9readability scan 165: 4.9readability scan 166: 4.9readability scan 167: 4.9readability scan 168: 4.9readability scan 169: 4.9readability scan 170: 4.9readability scan 171: 4.9readability scan 172: 4.9readability scan 173: 4.9readability scan 174: 4.9readability scan 175: 4.9readability scan 176: 4.9readability scan 177: 4.9readability scan 178: 4.9readability scan 179: 4.9readability scan 180: 4.9readability scan 181: 4.9readability scan 182: 4.9readability scan 183: 4.87readability scan 184: 4.87readability scan 185: 4.87readability scan 186: 4.87readability scan 187: 4.87readability scan 188: 4.87readability scan 189: 4.87readability scan 190: 4.87readability scan 191: 4.87readability scan 192: 4.87readability scan 193: 4.87readability scan 194: 4.87readability scan 195: 4.87readability scan 196: 4.87readability scan 197: 4.87readability scan 198: 4.87readability scan 199: 4.87readability scan 200: 4.87readability scan 201: 4.87readability scan 202: 4.87readability scan 203: 4.87readability scan 204: 4.87readability scan 205: 4.87readability scan 206: 4.87readability scan 207: 4.87readability scan 208: 4.87readability scan 209: 4.87readability scan 210: 4.87readability scan 211: 4.87readability scan 212: 4.87readability scan 213: 4.87readability scan 214: 4.87readability scan 215: 4.87readability scan 216: 4.87readability scan 217: 4.87readability scan 218: 4.87readability scan 219: 4.87readability scan 220: 4.87readability scan 221: 4.87readability scan 222: 4.87readability scan 223: 4.87readability scan 224: 4.87readability scan 225: 4.87readability scan 226: 4.87readability scan 227: 4.87readability scan 228: 4.87readability scan 229: 4.87readability scan 230: 4.87readability scan 231: 4.87readability scan 232: 5.0readability scan 233: 5.0readability scan 234: 5.0readability scan 235: 4.87readability scan 236: 4.87readability scan 237: 4.87readability scan 238: 4.87readability scan 239: 4.87readability scan 240: 4.87readability scan 241: 4.87readability scan 242: 4.87readability scan 243: 4.87readability scan 244: 4.87readability scan 245: 4.87readability scan 246: 4.87readability scan 247: 4.87readability scan 248: 4.87readability scan 249: 4.87readability scan 250: 4.87readability scan 251: 4.87readability scan 252: 4.9readability scan 253: 4.9readability scan 254: 4.9readability scan 255: 4.9readability scan 256: 4.9readability scan 257: 4.9readability scan 258: 4.9readability scan 259: 4.77readability scan 260: 4.77readability scan 261: 4.77readability scan 262: 4.77readability scan 263: 4.77readability scan 264: 4.77readability scan 265: 4.77readability scan 266: 4.77readability scan 267: 4.77readability scan 268: 4.77readability scan 269: 4.77readability scan 270: 4.77readability scan 271: 4.77readability scan 272: 4.77readability scan 273: 4.77readability scan 274: 4.77readability scan 275: 4.77readability scan 276: 4.77readability scan 277: 4.77readability scan 278: 4.77readability scan 279: 4.77readability scan 280: 4.77readability scan 281: 4.77readability scan 282: 4.77readability scan 283: 4.77readability scan 284: 4.77readability scan 285: 4.77readability scan 286: 4.77readability scan 287: 4.77readability scan 288: 4.77readability scan 289: 4.77readability scan 290: 4.77readability scan 291: 4.77readability scan 292: 4.77readability scan 293: 4.77readability scan 294: 4.77readability scan 295: 4.77readability scan 296: 4.77readability scan 297: 4.77readability scan 298: 4.77readability scan 299: 4.77readability scan 300: 4.77readability scan 301: 4.77readability scan 302: 4.77readability scan 303: 4.77readability scan 304: 4.77readability scan 305: 4.77readability scan 306: 4.77readability scan 307: 4.77readability scan 308: 4.77readability scan 309: 4.77readability scan 310: 4.77readability scan 311: 4.77readability scan 312: 4.77readability scan 313: 4.77readability scan 314: 4.77readability scan 315: 4.77readability scan 316: 4.77readability scan 317: 4.77readability scan 318: 4.77readability scan 319: 4.77readability scan 320: 4.77readability scan 321: 4.77readability scan 322: 4.77readability scan 323: 4.77readability scan 324: 4.77readability scan 325: 4.77readability scan 326: 4.77readability scan 327: 4.77readability scan 328: 4.77readability scan 329: 4.77security scan 323: 5.0security scan 324: 5.0security scan 325: 5.0security scan 326: 5.0security scan 327: 5.0security scan 328: 5.0security scan 329: 5.0testability 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: 4.25testability scan 9: 4.25testability scan 10: 4.25testability scan 11: 4.25testability scan 12: 4.25testability scan 13: 5.0testability scan 14: 4.25testability scan 15: 4.25testability scan 16: 4.25testability scan 17: 5.0testability scan 18: 4.25testability scan 19: 4.25testability scan 20: 4.25testability scan 21: 5.0testability scan 22: 5.0testability scan 23: 5.0testability scan 24: 5.0testability scan 25: 5.0testability scan 26: 5.0testability scan 27: 5.0testability scan 28: 5.0testability scan 29: 5.0testability scan 30: 4.25testability scan 31: 4.25testability scan 32: 4.25testability scan 33: 5.0testability scan 34: 4.25testability scan 35: 4.25testability scan 36: 4.25testability scan 37: 5.0testability scan 38: 5.0testability scan 39: 5.0testability scan 40: 5.0testability scan 41: 5.0testability scan 42: 5.0testability scan 43: 3.85testability scan 44: 3.85testability scan 45: 3.85testability scan 46: 3.85testability scan 47: 5.0testability scan 48: 5.0testability scan 49: 3.85testability scan 50: 3.85testability scan 51: 3.85testability scan 52: 4.25testability scan 53: 4.25testability scan 54: 4.25testability scan 55: 5.0testability scan 56: 3.85testability scan 57: 3.85testability scan 58: 3.85testability scan 59: 4.25testability scan 60: 5.0testability scan 61: 5.0testability scan 62: 3.85testability scan 63: 3.85testability scan 64: 3.85testability scan 65: 5.0testability scan 66: 4.25testability scan 67: 4.25testability scan 68: 4.25testability scan 69: 5.0testability scan 70: 4.25testability scan 71: 4.25testability scan 72: 4.25testability scan 73: 5.0testability scan 74: 3.85testability scan 75: 3.85testability scan 76: 3.85testability scan 77: 5.0testability scan 78: 5.0testability scan 79: 4.25testability scan 80: 4.25testability scan 81: 4.25testability scan 82: 5.0testability scan 83: 5.0testability scan 84: 5.0testability scan 85: 4.25testability scan 86: 4.25testability scan 87: 4.25testability scan 88: 5.0testability scan 89: 5.0testability scan 90: 3.5testability scan 91: 3.5testability scan 92: 5.0testability scan 93: 4.65testability scan 94: 4.65testability scan 95: 5.0testability scan 96: 5.0testability scan 97: 5.0testability scan 98: 5.0testability scan 99: 5.0testability scan 100: 5.0testability scan 101: 5.0testability scan 102: 4.65testability scan 103: 4.65testability scan 104: 4.65testability scan 105: 5.0testability scan 106: 5.0testability scan 107: 5.0testability scan 108: 5.0testability scan 109: 4.65testability scan 110: 4.65testability scan 111: 4.65testability scan 112: 5.0testability scan 113: 4.35testability scan 114: 4.35testability scan 115: 5.0testability scan 116: 5.0testability scan 117: 5.0testability scan 118: 5.0testability scan 119: 4.65testability scan 120: 4.65testability scan 121: 4.65testability scan 122: 5.0testability scan 123: 5.0testability scan 124: 5.0testability scan 125: 5.0testability scan 126: 4.65testability scan 127: 4.65testability scan 128: 5.0testability scan 129: 4.65testability scan 130: 4.65testability scan 131: 4.65testability scan 132: 4.65testability scan 133: 4.65testability scan 134: 5.0testability scan 135: 5.0testability scan 136: 5.0testability scan 137: 5.0testability scan 138: 5.0testability scan 139: 4.65testability scan 140: 4.65testability scan 141: 4.65testability scan 142: 5.0testability scan 143: 5.0testability scan 144: 4.65testability scan 145: 4.65testability scan 146: 4.65testability scan 147: 5.0testability scan 148: 5.0testability scan 149: 4.35testability scan 150: 4.35testability scan 151: 4.65testability scan 152: 4.65testability scan 153: 5.0testability scan 154: 4.65testability scan 155: 5.0testability scan 156: 4.65testability scan 157: 4.65testability scan 158: 5.0testability scan 159: 4.75testability scan 160: 4.75testability scan 161: 4.75testability scan 162: 5.0testability scan 163: 5.0testability scan 164: 5.0testability scan 165: 5.0testability scan 166: 4.75testability scan 167: 4.75testability scan 168: 5.0testability scan 169: 5.0testability scan 170: 5.0testability scan 171: 5.0testability scan 172: 4.75testability scan 173: 4.75testability scan 174: 5.0testability scan 175: 5.0testability scan 176: 5.0testability scan 177: 5.0testability scan 178: 5.0testability scan 179: 5.0testability scan 180: 5.0testability scan 181: 5.0testability scan 182: 5.0testability scan 183: 5.0testability scan 184: 5.0testability scan 185: 5.0testability scan 186: 4.55testability scan 187: 4.55testability scan 188: 4.55testability scan 189: 4.55testability scan 190: 4.55testability scan 191: 4.75testability scan 192: 4.75testability scan 193: 4.75testability scan 194: 5.0testability scan 195: 5.0testability scan 196: 5.0testability scan 197: 4.75testability scan 198: 4.75testability scan 199: 4.75testability scan 200: 5.0testability scan 201: 5.0testability scan 202: 5.0testability scan 203: 4.55testability scan 204: 4.55testability scan 205: 4.75testability scan 206: 4.75testability scan 207: 5.0testability scan 208: 5.0testability scan 209: 4.75testability scan 210: 4.75testability scan 211: 4.75testability scan 212: 5.0testability scan 213: 5.0testability scan 214: 5.0testability scan 215: 5.0testability scan 216: 4.75testability scan 217: 4.75testability scan 218: 4.75testability scan 219: 4.75testability scan 220: 4.75testability scan 221: 4.75testability scan 222: 5.0testability scan 223: 5.0testability scan 224: 5.0testability scan 225: 5.0testability scan 226: 5.0testability scan 227: 5.0testability scan 228: 5.0testability scan 229: 5.0testability scan 230: 5.0testability scan 231: 5.0testability scan 232: 5.0testability scan 233: 5.0testability scan 234: 5.0testability scan 235: 4.75testability scan 236: 5.0testability scan 237: 5.0testability scan 238: 5.0testability scan 239: 4.75testability scan 240: 5.0testability scan 241: 4.75testability scan 242: 5.0testability scan 243: 5.0testability scan 244: 5.0testability scan 245: 5.0testability scan 246: 4.75testability scan 247: 4.55testability scan 248: 4.55testability scan 249: 5.0testability scan 250: 5.0testability scan 251: 5.0testability scan 252: 5.0testability scan 253: 4.75testability scan 254: 5.0testability scan 255: 4.55testability scan 256: 4.55testability scan 257: 4.55testability scan 258: 5.0testability scan 259: 4.5testability scan 260: 5.0testability scan 261: 5.0testability scan 262: 5.0testability scan 263: 5.0testability scan 264: 5.0testability scan 265: 5.0testability scan 266: 5.0testability scan 267: 5.0testability scan 268: 5.0testability scan 269: 5.0testability scan 270: 5.0testability scan 271: 5.0testability scan 272: 5.0testability scan 273: 5.0testability scan 274: 5.0testability scan 275: 5.0testability scan 276: 5.0testability scan 277: 5.0testability scan 278: 5.0testability scan 279: 5.0testability scan 280: 5.0testability scan 281: 5.0testability scan 282: 5.0testability scan 283: 5.0testability scan 284: 5.0testability scan 285: 5.0testability scan 286: 5.0testability scan 287: 5.0testability scan 288: 5.0testability scan 289: 5.0testability scan 290: 5.0testability scan 291: 5.0testability scan 292: 5.0testability scan 293: 5.0testability scan 294: 5.0testability scan 295: 5.0testability scan 296: 5.0testability scan 297: 4.5testability scan 298: 4.5testability scan 299: 4.5testability scan 300: 4.5testability scan 301: 4.5testability scan 302: 5.0testability scan 303: 5.0testability scan 304: 5.0testability scan 305: 5.0testability scan 306: 5.0testability scan 307: 5.0testability scan 308: 5.0testability scan 309: 5.0testability scan 310: 5.0testability scan 311: 5.0testability scan 312: 5.0testability scan 313: 5.0testability scan 314: 5.0testability scan 315: 5.0testability scan 316: 5.0testability scan 317: 5.0testability scan 318: 5.0testability scan 319: 5.0testability scan 320: 5.0testability scan 321: 5.0testability scan 322: 5.0testability scan 323: 4.5testability scan 324: 5.0testability scan 325: 5.0testability scan 326: 5.0testability scan 327: 4.5testability scan 328: 5.0testability scan 329: 5.0efficiencymaintainabilityreadabilitysecuritytestability

Practice level over time (maturity — a separate series)

012345maturity (0-5)08-1508-2109-0309-0409-0809-19scan 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.0scan 14: 4.0scan 15: 4.0scan 16: 4.0scan 17: 4.0scan 18: 4.0scan 19: 4.0scan 20: 4.0scan 21: 4.0scan 22: 4.0scan 23: 4.0scan 24: 4.0scan 25: 4.0scan 26: 4.0scan 27: 4.0scan 28: 4.0scan 29: 4.0scan 30: 4.0scan 31: 4.0scan 32: 4.0scan 33: 4.0scan 34: 4.0scan 35: 4.0scan 36: 4.0scan 37: 4.0scan 38: 4.0scan 39: 4.0scan 40: 4.0scan 41: 4.0scan 42: 4.0scan 43: 4.0scan 44: 4.0scan 45: 4.0scan 46: 4.0scan 47: 4.0scan 48: 4.0scan 49: 4.0scan 50: 4.0scan 51: 4.0scan 52: 4.0scan 53: 4.0scan 54: 4.0scan 55: 4.0scan 56: 4.0scan 57: 4.0scan 58: 4.0scan 59: 4.0scan 60: 4.0scan 61: 4.0scan 62: 4.0scan 63: 4.0scan 64: 4.0scan 65: 4.0scan 66: 4.0scan 67: 4.0scan 68: 4.0scan 69: 4.0scan 70: 4.0scan 71: 4.0scan 72: 4.0scan 73: 4.0scan 74: 4.0scan 75: 4.0scan 76: 4.0scan 77: 4.0scan 78: 4.0scan 79: 4.0scan 80: 4.0scan 81: 4.0scan 82: 4.0scan 83: 4.0scan 84: 4.0scan 85: 4.0scan 86: 4.0scan 87: 4.0scan 88: 4.0scan 89: 4.0scan 90: 4.0scan 91: 4.0scan 92: 4.0scan 93: 4.0scan 94: 4.0scan 95: 4.0scan 96: 4.0scan 97: 4.0scan 98: 4.0scan 99: 4.0scan 100: 4.0scan 101: 4.0scan 102: 4.0scan 103: 4.0scan 104: 4.0scan 105: 4.0scan 106: 4.0scan 107: 4.0scan 108: 4.0scan 109: 4.0scan 110: 4.0scan 111: 4.0scan 112: 4.0scan 113: 4.0scan 114: 4.0scan 115: 4.0scan 116: 4.0scan 117: 4.0scan 118: 4.0scan 119: 4.0scan 120: 4.0scan 121: 4.0scan 122: 4.0scan 123: 4.0scan 124: 4.0scan 125: 4.0scan 126: 4.0scan 127: 4.0scan 128: 4.0scan 129: 4.0scan 130: 4.0scan 131: 4.0scan 132: 4.0scan 133: 4.0scan 134: 4.0scan 135: 4.0scan 136: 4.0scan 137: 4.0scan 138: 4.0scan 139: 4.0scan 140: 4.0scan 141: 4.0scan 142: 4.0scan 143: 4.0scan 144: 4.0scan 145: 4.0scan 146: 4.0scan 147: 4.0scan 148: 4.0scan 149: 4.0scan 150: 4.0scan 151: 4.0scan 152: 4.0scan 153: 4.0scan 154: 4.0scan 155: 4.0scan 156: 4.0scan 157: 4.0scan 158: 4.0scan 159: 4.0scan 160: 4.0scan 161: 4.0scan 162: 4.0scan 163: 4.0scan 164: 4.0scan 165: 4.0scan 166: 4.0scan 167: 4.0scan 168: 4.0scan 169: 4.0scan 170: 4.0scan 171: 4.0scan 172: 4.0scan 173: 4.0scan 174: 4.0scan 175: 4.0scan 176: 4.0scan 177: 4.0scan 178: 4.0scan 179: 4.0scan 180: 4.0scan 181: 4.0scan 182: 4.0scan 183: 4.0scan 184: 4.0scan 185: 4.0scan 186: 4.0scan 187: 4.0scan 188: 4.0scan 189: 4.0scan 190: 4.0scan 191: 4.0scan 192: 4.0scan 193: 4.0scan 194: 4.0scan 195: 4.0scan 196: 4.0scan 197: 4.0scan 198: 4.0scan 199: 4.0scan 200: 4.0scan 201: 4.0scan 202: 4.0scan 203: 4.0scan 204: 4.0scan 205: 4.0scan 206: 4.0scan 207: 4.0scan 208: 4.0scan 209: 4.0scan 210: 4.0scan 211: 4.0scan 212: 4.0scan 213: 4.0scan 214: 4.0scan 215: 4.0scan 216: 4.0scan 217: 4.0scan 218: 4.0scan 219: 4.0scan 220: 4.0scan 221: 4.0scan 222: 4.0scan 223: 4.0scan 224: 4.0scan 225: 4.0scan 226: 4.0scan 227: 4.0scan 228: 4.0scan 229: 4.0scan 230: 4.0scan 231: 4.0scan 232: 4.0scan 233: 4.0scan 234: 4.0scan 235: 4.0scan 236: 4.0scan 237: 4.0scan 238: 4.0scan 239: 4.0scan 240: 4.0scan 241: 4.0scan 242: 4.0scan 243: 4.0scan 244: 4.0scan 245: 4.0scan 246: 4.0scan 247: 4.0scan 248: 4.0scan 249: 4.0scan 250: 4.0scan 251: 4.0scan 252: 4.0scan 253: 4.0scan 254: 4.0scan 255: 4.0scan 256: 4.0scan 257: 4.0scan 258: 4.0scan 259: 4.0scan 260: 4.0scan 261: 4.0scan 262: 4.0scan 263: 4.0scan 264: 4.0scan 265: 4.0scan 266: 4.0scan 267: 4.0scan 268: 4.0scan 269: 4.0scan 270: 4.0scan 271: 4.0scan 272: 4.0scan 273: 4.0scan 274: 4.0scan 275: 4.0scan 276: 4.0scan 277: 4.0scan 278: 4.0scan 279: 4.0scan 280: 4.0scan 281: 4.0scan 282: 4.0scan 283: 4.0scan 284: 4.0scan 285: 4.0scan 286: 4.0scan 287: 4.0scan 288: 4.0scan 289: 4.0scan 290: 4.0scan 291: 4.0scan 292: 4.0scan 293: 4.0scan 294: 4.0scan 295: 4.0scan 296: 4.0scan 297: 4.0scan 298: 4.0scan 299: 4.0scan 300: 4.0scan 301: 4.0scan 302: 4.0scan 303: 4.0scan 304: 4.0scan 305: 4.0scan 306: 4.0scan 307: 4.0scan 308: 4.0scan 309: 4.0scan 310: 4.0scan 311: 4.0scan 312: 4.0scan 313: 4.0scan 314: 4.0scan 315: 4.0scan 316: 4.0scan 317: 4.0scan 318: 4.0scan 319: 4.0scan 320: 4.0scan 321: 4.0scan 322: 4.0scan 323: 4.0scan 324: 4.0scan 325: 4.0scan 326: 4.0scan 327: 4.0scan 328: 4.0scan 329: 4.0

Categories, this scan

012345score (0-5)modularity: 3.93.9modularityreusability: 4.94.9reusabilityanalyzability: 4.44.4analyzabilitymodifiability: 3.83.8modifiabilitytestability: 4.84.8testability

Trend

61 separate series; scans either side of a break were produced by different instruments and are reported apart. The current series is given in full, the earlier ones summarized.

This series begins at a break: the tool version changed, so scans before this point were produced by a different instrument and cannot be joined to those after it.

Current series — 1 scan, 2026-09-19T22:09:11Z to 2026-09-19T22:09:11Z.

Earlier series (60 series)

WindowScansDirectionChangeBegan at a break in
2026-09-19T01:11:44Z to 2026-09-19T01:21:41Z2indistinguishable+0.10the tool version changed
2026-09-18T21:32:18Z to 2026-09-18T21:32:18Z1unknown—the tool version changed
2026-09-18T20:50:09Z to 2026-09-18T20:50:09Z1unknown—the tool version, which analyzers contributed changed
2026-09-18T19:59:49Z to 2026-09-18T20:03:00Z2indistinguishable+0.10the tool version changed
2026-09-12T00:17:35Z to 2026-09-12T02:12:33Z11indistinguishable+0.00the tool version, a delegated pillar's producer or its scoring model changed
2026-09-12T00:03:02Z to 2026-09-12T00:03:02Z1unknown—the tool version, a delegated pillar's producer or its scoring model changed
2026-09-11T23:21:19Z to 2026-09-11T23:43:19Z2indistinguishable+0.00the tool version changed
2026-09-11T22:43:02Z to 2026-09-11T23:05:25Z4indistinguishable+0.00a delegated pillar's producer or its scoring model changed
2026-09-11T21:08:33Z to 2026-09-11T21:29:07Z2indistinguishable+0.00the tool version, a delegated pillar's producer or its scoring model changed
2026-09-10T23:35:05Z to 2026-09-11T19:24:09Z26indistinguishable+0.10the tool version changed
2026-09-10T22:48:20Z to 2026-09-10T23:22:21Z6indistinguishable+0.00the tool version, the configured thresholds changed
2026-09-09T16:26:16Z to 2026-09-09T16:26:16Z1unknown—the tool version, which analyzers contributed changed
2026-09-09T16:03:21Z to 2026-09-09T16:03:21Z1unknown—which analyzers contributed changed
2026-09-09T15:57:18Z to 2026-09-09T15:57:18Z1unknown—which analyzers contributed changed
2026-09-09T15:51:34Z to 2026-09-09T15:51:34Z1unknown—which analyzers contributed changed
2026-09-09T15:45:03Z to 2026-09-09T15:45:03Z1unknown—which analyzers contributed changed
2026-09-09T15:28:08Z to 2026-09-09T15:28:08Z1unknown—which analyzers contributed changed
2026-09-08T19:04:32Z to 2026-09-08T19:04:32Z1unknown—the tool version changed
2026-09-08T07:43:59Z to 2026-09-08T17:45:09Z5indistinguishable+0.00the tool version, the calibration constant changed
2026-09-07T18:48:35Z to 2026-09-08T00:14:00Z7indistinguishable+0.00the tool version, which analyzers contributed changed
2026-09-06T18:48:06Z to 2026-09-06T18:55:57Z2indistinguishable+0.00the tool version changed
2026-09-06T14:42:34Z to 2026-09-06T18:28:54Z9indistinguishable+0.00the tool version changed
2026-09-05T21:35:57Z to 2026-09-06T04:02:48Z6indistinguishable+0.00the tool version, which analyzers contributed, the scored languages, the scan scope changed
2026-09-05T20:49:08Z to 2026-09-05T20:53:53Z2unknown—which analyzers contributed, the scored languages changed
2026-09-05T20:44:46Z to 2026-09-05T20:44:46Z1unknown—the scan scope changed
2026-09-05T19:52:45Z to 2026-09-05T19:52:45Z1unknown—the tool version changed
2026-09-05T00:59:02Z to 2026-09-05T18:15:54Z23indistinguishable+0.00the tool version changed
2026-09-04T22:42:23Z to 2026-09-05T00:47:24Z6indistinguishable+0.00the tool version changed
2026-09-04T19:52:42Z to 2026-09-04T22:33:54Z16indistinguishable+0.00the tool version changed
2026-09-04T19:08:33Z to 2026-09-04T19:08:33Z1unknown—the tool version changed
2026-09-04T16:40:06Z to 2026-09-04T17:56:04Z2indistinguishable+0.00the tool version, which analyzers contributed changed
2026-09-04T07:53:46Z to 2026-09-04T07:53:46Z1unknown—the tool version changed
2026-09-04T07:11:36Z to 2026-09-04T07:40:48Z2indistinguishable+0.00the tool version changed
2026-09-04T05:56:43Z to 2026-09-04T06:58:47Z4indistinguishable+0.00the tool version changed
2026-09-04T04:25:28Z to 2026-09-04T05:44:00Z6indistinguishable+0.00the tool version changed
2026-09-03T22:26:06Z to 2026-09-04T04:12:38Z11indistinguishable+0.00the tool version, the calibration constant changed
2026-09-03T16:43:03Z to 2026-09-03T19:57:41Z15indistinguishable+0.00the tool version changed
2026-09-03T14:19:51Z to 2026-09-03T15:38:52Z5indistinguishable+0.00the tool version changed
2026-09-03T04:32:13Z to 2026-09-03T14:04:41Z10indistinguishable+0.00the tool version changed
2026-09-03T03:14:36Z to 2026-09-03T03:26:28Z3indistinguishable+0.00the tool version changed
2026-09-03T01:50:55Z to 2026-09-03T01:50:55Z1unknown—the tool version, which analyzers contributed changed
2026-09-02T21:22:31Z to 2026-09-02T21:22:31Z1unknown—the tool version, which analyzers contributed changed
2026-09-02T20:57:23Z to 2026-09-02T20:57:23Z1unknown—the tool version changed
2026-09-02T19:48:51Z to 2026-09-02T20:10:01Z4indistinguishable+0.00which analyzers contributed changed
2026-09-02T19:09:34Z to 2026-09-02T19:09:34Z1unknown—the tool version, which analyzers contributed changed
2026-09-02T16:49:38Z to 2026-09-02T18:17:31Z5indistinguishable+0.00the tool version changed
2026-09-02T15:53:44Z to 2026-09-02T16:09:57Z4indistinguishable+0.00the tool version changed
2026-09-02T05:07:33Z to 2026-09-02T05:21:56Z2indistinguishable+0.00the tool version changed
2026-09-02T04:13:12Z to 2026-09-02T04:32:59Z5indistinguishable+0.00the tool version changed
2026-09-02T03:10:30Z to 2026-09-02T03:10:30Z1unknown—the tool version changed
2026-09-02T02:55:46Z to 2026-09-02T02:55:46Z1unknown—the tool version changed
2026-09-02T02:37:15Z to 2026-09-02T02:37:15Z1unknown—the tool version changed
2026-09-02T00:13:53Z to 2026-09-02T02:21:34Z2indistinguishable+0.00the tool version changed
2026-09-01T22:50:04Z to 2026-09-01T23:57:58Z4indistinguishable+0.00the tool version, the calibration constant, which analyzers contributed, the scan scope changed
2026-08-28T13:05:26Z to 2026-08-28T13:07:10Z3unknown—which analyzers contributed, the scan scope changed
2026-08-21T18:32:29Z to 2026-08-21T18:32:29Z1unknown—the tool version changed
2026-08-20T16:20:52Z to 2026-08-21T18:18:13Z27indistinguishable+0.20the tool version changed
2026-08-19T22:59:02Z to 2026-08-19T23:50:01Z6indistinguishable+0.10which analyzers contributed changed
2026-08-17T15:38:29Z to 2026-08-19T22:06:38Z48indistinguishable+0.00the tool version, which analyzers contributed, the scored languages changed
2026-08-15T20:46:31Z to 2026-08-16T06:01:10Z7indistinguishable+0.00the first recorded scan

Every figure describes scans that happened; nothing forecasts.

Economic Context (scenario)

0 – 0 USD over 12 months (base 0 USD), across 0 work-order item(s).

This is a scenario, not a prediction.

Assumptions:

TDD-shaped tests

TDD-shaped tests: detected beside 128 of 154 production source files (path pairing). Constructs: pytest in 260 file(s), unittest in 1 file(s), describe_it in 18 file(s), parametrize in 90 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 failed (exit 1).

Command: pytest -n auto --cov=maintainability_audit --cov-report=xml:coverage.xml -q

Coverage: 96.0% line coverage

Pillars

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

PillarScopePracticeConditionReading
readabilitypartial44.8healthy: enforced, and the code reflects it
maintainabilityowned43.9healthy: enforced, and the code reflects it
efficiencyout-of-scope4—not measured — see below
securitydelegated55.0healthy: enforced, and the code reflects it; 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, types-in-ci, duplication-in-ci, coverage-gate.

ISO/IEC 25010 Maintainability Score

CategoryScore
modularity3.9
reusability4.9
analyzability4.4
modifiability3.8
testability4.8

Aspect Scores

AspectScore
file size4.5
declaration size4.3
duplication5.0
risk patterns5.0
policy gates5.0
test presence5.0
dead code5.0
near duplication5.0
idiom consistency5.0
documentation5.0
churn hotspots4.0
change coupling2.0
knowledge concentration2.0
test effectiveness4.8

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
src/maintainability_audit/_work_order.py666warn
src/maintainability_audit/_scan_history.py624warn
.github/workflows/quality-gates.yml615warn
tests/test_operator_named_reads.py613warn
src/maintainability_audit/_prompt_sections.py569ok
src/maintainability_audit/cli.py556ok
src/maintainability_audit/_discovery.py553ok
src/maintainability_audit/report.py540ok
src/maintainability_audit/mcp_server.py535ok
src/maintainability_audit/_mcp_audit.py526ok
tests/test_docs_links.py524ok
tests/test_mcp_server.py520ok
README.md506ok
tools/prove_falsifiers.py500ok
src/maintainability_audit/scoring.py499ok
tests/test_calibration_corpus.py499ok
tests/test_evidence_properties.py496ok
src/maintainability_audit/_adapters.py492ok
tests/test_adapters.py491ok
tests/test_mcp_history.py486ok
src/maintainability_audit/_analysis.py485ok
src/maintainability_audit/_mcp_setup.py481ok
src/maintainability_audit/_masking.py476ok
tests/test_grant_only_user_tier.py475ok
src/maintainability_audit/_metrics_types.py472ok

Function Hotspots

FileDeclarationLineLinesComplexityCognitiveStatus
tools/build_catalog.pybuild32736150warn
tests/test_docs_links.pytest_no_markdown_table_is_split_by_prose198351520warn
src/maintainability_audit/history.pyhistory_section29851143warn
tools/build_catalog.py_entry257461415warn
tests/_ast_reading.pyreachable_names203441417warn
src/maintainability_audit/_html_view.py_chart_sections19639144warn
tests/test_identity_resolution.pytest_fail_on_new_uses_structured_matching_not_a_label_set_difference278331413warn
src/maintainability_audit/_ranges_core.pyscan_bounded207781319warn
src/maintainability_audit/_skill_install.pyinstall_skill48671313warn
tests/test_git_argv.pytest_every_git_command_disables_gits_own_housekeeping396661320warn
tests/test_language_coverage.pytest_every_parsed_language_can_reach_a_complexity_analyzer21258133warn
tools/calibration/sampling_error.pymain88541310warn
src/maintainability_audit/_metric_adapters.pyexpand_files4647136warn
tools/resolve_pool.pymain65461312warn
tests/test_authorship_gates.py_step_scripts41431323warn
src/maintainability_audit/_discovery.pydiscover466421312warn
tests/test_analysis_coverage.pytest_no_built_in_claims_to_be_unique_when_an_adapter_exists30236132warn
src/maintainability_audit/duplication.pyduplicate_blocks50351310warn
tests/test_ci_installs_the_analyzer_pool.py_pip_installed_by_ci73351315warn
src/maintainability_audit/_documents.pycoverage_document26234134warn
src/maintainability_audit/_semantic_view.pysemantic_markdown36331312warn
src/maintainability_audit/_jvm_adapters.py_finding_of367271312warn
tests/test_promises.py_paths_the_audit_produced129251320warn
tests/test_first_run_elicitation.py_preferred_for255181314warn
src/maintainability_audit/_analysis.pyanalyze27479125warn
src/maintainability_audit/_pressures.pydeclined_dimensions24479126warn
tools/calibration/measure_cohorts.pymain25167128warn
tests/test_platform_claim.pytest_the_macos_runner_actually_runs_the_suite17461128warn
src/maintainability_audit/_masking.py_mask_code68471220warn
src/maintainability_audit/_ranges_js.pyjs_declaration_ranges202381224warn
src/maintainability_audit/_test_execution.pyrun_test_suite152801111warn
tools/calibration/measure_fix_breadth.pymain22566116warn
src/maintainability_audit/cli.pymain446641112warn
src/maintainability_audit/_prompt_sections.pyprompt_work_order237551120warn
tests/test_finding_identity.pytest_no_module_hardcodes_an_ordinal301471119warn
src/maintainability_audit/_masking.py_blank_fstring_literals353441118warn
src/maintainability_audit/_ranges_fortran.py_fortran_end163381116warn
tests/test_network_disclosure.pytest_no_module_imports_an_http_client69241116warn
src/maintainability_audit/_analysis.py_attempt398801012warn
tests/test_verified_grade.pytest_not_applicable_rollup_is_the_only_change_to_the_pre_stage_five_anchor25580100warn
src/maintainability_audit/scoring.py_score_document433671013warn
tests/test_written_record.pytest_no_document_says_a_register_entry_is_open_that_the_register_closed343451016warn
tests/test_anticipated_refusals.py_named_exceptions95261016warn
src/maintainability_audit/report.pybuild_report4618093warn
src/maintainability_audit/_prompt_sections.pyprompt_pressure_section3186695warn
tests/test_docs_links.pytest_every_internal_link_resolves_to_a_file_and_an_anchor8216917warn
src/maintainability_audit/_mcp_audit.pyaudit_repository1807389warn
tests/test_release_plan.pytest_the_release_plan_table_is_measured_not_remembered276882warn
tools/calibration/verify_corpus.pymain1007477warn
tests/test_determinism.pytest_the_history_window_is_disclosed_as_clock_relative2307174warn

Security Work Order

Written by secure-code-agent 0.12.8 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.

68 to fix · 0 to review · 5226 suppression candidates.

Fix

Defects the scanner is confident about.

1. B314 — Using xml.etree.ElementTree.fromstring to parse untrusted XML data is known to be vulnerable to XML attacks. Replace xml.etree.ElementTree.fromstring with its defusedxml equivalent function or make sure defusedxml.defuse_stdlib() is called

src/maintainability_audit/_xml.py:70

69             )
70     return ElementTree.fromstring(payload)  # noqa: S314 - declarations refused above

Using xml.etree.ElementTree.fromstring to parse untrusted XML data is known to be vulnerable to XML attacks. Replace xml.etree.ElementTree.fromstring with its defusedxml equivalent function or make sure defusedxml.defuse_stdlib() is called

CWE-20 · medium/high via bandit

2. B310 — Audit url open for permitted schemes. Allowing use of file:/ or custom schemes is often unexpected.

tools/sonar_resolve.py:56

55     request.add_header("Authorization", f"Basic {basic}")
56     with urllib.request.urlopen(request, timeout=30) as response:  # noqa: S310 - fixed host
57         body = response.read().decode()

Audit url open for permitted schemes. Allowing use of file:/ or custom schemes is often unexpected.

CWE-22 · A01 · medium/high via bandit

3. B310 — Audit url open for permitted schemes. Allowing use of file:/ or custom schemes is often unexpected.

tools/sonar_resolve.py:109

108     request.add_header("Authorization", f"Basic {basic}")
109     with urllib.request.urlopen(request, timeout=30) as response:  # noqa: S310 - fixed host
110         found = json.loads(response.read().decode()).get("issues") or []

Audit url open for permitted schemes. Allowing use of file:/ or custom schemes is often unexpected.

CWE-22 · A01 · medium/high via bandit

4. B404 — Consider possible security implications associated with the subprocess module.

src/maintainability_audit/_backfill.py:29

28 
29 import subprocess
30 from pathlib import Path

Consider possible security implications associated with the subprocess module.

CWE-78 · A03 · low/high via bandit

5. B607 — Starting a process with a partial executable path

src/maintainability_audit/_backfill.py:51-69

50     try:
51         result = subprocess.run(  # noqa: S603 - argv list, never a shell
52             # D71: this spawn is not `run_git`, and the sweep that was
53             # meant to hold that rule only read `git_tools.py` -- so
54             # the one git command in this package that lives
55             # somewhere else went uncovered. `commits_in_range` runs
56             # `rev-list` here before any worktree exists, which is
57             # exactly the read that can schedule housekeeping.
58             # `_attr_tree_config` as well as `READ_ONLY_GIT_CONFIG`. The
59             # fixed `-c` list cannot name the per-driver filter/textconv
60             # keys a tree selects in `.gitattributes`, so attribute-driven
61             # code execution is cut off by reading attributes from an empty
62             # tree instead -- and backfill's `worktree add` re-hashes
63             # content, which is exactly what runs a `clean` filter. `run_git`
64             # got this; this spawner, living outside `git_tools`, did not
65             # (audit of `e88b429`; the D92 sweep only read `git_tools.py`).
66             ["git", *READ_ONLY_GIT_CONFIG, *_attr_tree_config(root),
67              "-C", str(root), *args],
68             capture_output=True, text=True, check=False,
69             timeout=GIT_TIMEOUT_SECONDS, env=git_env())
70     except subprocess.TimeoutExpired as expired:

Starting a process with a partial executable path

CWE-78 · A03 · low/high via bandit

6. B603 — subprocess call - check for execution of untrusted input.

src/maintainability_audit/_backfill.py:51-69

50     try:
51         result = subprocess.run(  # noqa: S603 - argv list, never a shell
52             # D71: this spawn is not `run_git`, and the sweep that was
53             # meant to hold that rule only read `git_tools.py` -- so
54             # the one git command in this package that lives
55             # somewhere else went uncovered. `commits_in_range` runs
56             # `rev-list` here before any worktree exists, which is
57             # exactly the read that can schedule housekeeping.
58             # `_attr_tree_config` as well as `READ_ONLY_GIT_CONFIG`. The
59             # fixed `-c` list cannot name the per-driver filter/textconv
60             # keys a tree selects in `.gitattributes`, so attribute-driven
61             # code execution is cut off by reading attributes from an empty
62             # tree instead -- and backfill's `worktree add` re-hashes
63             # content, which is exactly what runs a `clean` filter. `run_git`
64             # got this; this spawner, living outside `git_tools`, did not
65             # (audit of `e88b429`; the D92 sweep only read `git_tools.py`).
66             ["git", *READ_ONLY_GIT_CONFIG, *_attr_tree_config(root),
67              "-C", str(root), *args],
68             capture_output=True, text=True, check=False,
69             timeout=GIT_TIMEOUT_SECONDS, env=git_env())
70     except subprocess.TimeoutExpired as expired:

subprocess call - check for execution of untrusted input.

CWE-78 · A03 · low/high via bandit

7. B405 — Using ElementTree to parse untrusted XML data is known to be vulnerable to XML attacks. Replace ElementTree with the equivalent defusedxml package, or make sure defusedxml.defuse_stdlib() is called.

src/maintainability_audit/_jvm_adapters.py:21

20 from typing import Any
21 from xml.etree import ElementTree
22

Using ElementTree to parse untrusted XML data is known to be vulnerable to XML attacks. Replace ElementTree with the equivalent defusedxml package, or make sure defusedxml.defuse_stdlib() is called.

CWE-20 · low/high via bandit

8. B404 — Consider possible security implications associated with the subprocess module.

src/maintainability_audit/_runner.py:33

32 import shutil
33 import subprocess
34 import sys

Consider possible security implications associated with the subprocess module.

CWE-78 · A03 · low/high via bandit

9. B603 — subprocess call - check for execution of untrusted input.

src/maintainability_audit/_runner.py:255-260

254     try:
255         completed = subprocess.run(  # noqa: S603 - argv list, never a shell
256             [npm, "config", "get", "registry"],
257             cwd=neutral, capture_output=True, text=True, timeout=30,
258             env={k: v for k, v in os.environ.items() if k not in _CODE_LOADING_VARS},
259             check=False,
260         )
261     except (OSError, subprocess.SubprocessError):

subprocess call - check for execution of untrusted input.

CWE-78 · A03 · low/high via bandit

10. B603 — subprocess call - check for execution of untrusted input.

src/maintainability_audit/_runner.py:431-439

430     try:
431         completed = subprocess.run(  # noqa: S603 - argv is built by adapters, never a shell string
432             argv,
433             cwd=str(cwd or invocation.cwd) if (cwd or invocation.cwd) else None,
434             capture_output=True,
435             text=True,
436             timeout=timeout_seconds,
437             env={**analyzer_env(), **(invocation.env or {})},
438             check=False,
439         )
440     except subprocess.TimeoutExpired:

subprocess call - check for execution of untrusted input.

CWE-78 · A03 · low/high via bandit

11. B405 — Using ElementTree to parse untrusted XML data is known to be vulnerable to XML attacks. Replace ElementTree with the equivalent defusedxml package, or make sure defusedxml.defuse_stdlib() is called.

src/maintainability_audit/_xml.py:30

29 from typing import Any
30 from xml.etree import ElementTree
31

Using ElementTree to parse untrusted XML data is known to be vulnerable to XML attacks. Replace ElementTree with the equivalent defusedxml package, or make sure defusedxml.defuse_stdlib() is called.

CWE-20 · low/high via bandit

12. B404 — Consider possible security implications associated with the subprocess module.

src/maintainability_audit/git_tools.py:21

20 import re
21 import subprocess
22 from pathlib import Path

Consider possible security implications associated with the subprocess module.

CWE-78 · A03 · low/high via bandit

56 more not shown.

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.