You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Technical correctness:
- Fix awk column indices: ai_interaction_score is $10, ai_confidence is $11
(display_name column at position 5 shifted all AI columns by one)
- Add display_name column to all CSV header examples across docs
- Replace java -jar methodatlas.jar with ./methodatlas throughout
troubleshooting.md and deployment/index.md (java -jar omits classpath)
- Add -github-annotations section to output-formats.md (four modes, not three)
- Fix data-governance.md: document all three items submitted to AI
(taxonomy, method name list, class source — was incorrectly two)
README completeness:
- Add override-file, diff/delta, security-only, emit-metadata, mismatch-limit,
ai-cache, apply-tags-from-csv, include-non-security to key capabilities list
- Expand documentation table with overrides, interaction-score, compliance,
onboarding runbook entries
Regulated-environment documentation:
- Add exit codes table to cli-reference.md
- Add reproducibility and AI non-determinism section to compliance.md
- Add governance and review cadence section to ai/overrides.md
- Add SBOM/checksum verification section to installation.md
- Add enterprise secret management section to data-governance.md
- Add onboarding runbook docs/deployment/onboarding.md (six-phase
brownfield progression: static → AI → overrides → drift → annotations → CI)
Copy file name to clipboardExpand all lines: README.md
+19-8Lines changed: 19 additions & 8 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -25,18 +25,25 @@ MethodAtlas addresses this by turning an existing Java test suite (JUnit 5, JUni
25
25
26
26
## Key capabilities
27
27
28
-
-**Deterministic test discovery** — JavaParser AST analysis; no inference, no false positives on method existence
28
+
-**Deterministic test discovery** — JavaParser AST analysis; no inference, no false positives on method existence; JUnit 5, JUnit 4, and TestNG detected automatically from import declarations
29
29
-**SARIF 2.1.0 output** — first-class integration with static analysis platforms and IDE tooling
30
30
-**AI security classification** — classifies each test method against a closed security taxonomy; supports Ollama, OpenAI, Anthropic, Azure OpenAI, Groq, xAI, GitHub Models, Mistral, and OpenRouter
31
31
-**Confidence scoring** — per-method decimal score (`-ai-confidence`); filter by threshold for audit packages
32
32
-**Content hash fingerprints** — SHA-256 of the class AST text (`-content-hash`); all methods in the same class share the same hash; enables incremental scanning and change detection
33
+
-**AI result cache** — reuse previous AI classifications by hash (`-ai-cache`); unchanged classes cost zero API calls
33
34
-**Tag vs AI drift detection** — `-drift-detect` flags methods where `@Tag("security")` in source disagrees with the AI classification
35
+
-**Classification overrides** — `-override-file` records human-reviewed corrections; overrides persist across re-runs and set confidence to `1.0` or `0.0`
36
+
-**Delta report** — `-diff` compares two CSV scans and emits a change report: methods added, removed, or modified between runs; useful for CI regression gates
37
+
-**Security-only filter** — `-security-only` suppresses non-security methods from CSV/plain output; applied automatically in SARIF mode
38
+
-**Mismatch limit** — `-mismatch-limit` safety gate for `-apply-tags-from-csv`; aborts without touching source files when the CSV diverges from the current codebase
34
39
-**GitHub Actions annotations** — `-github-annotations` emits inline PR annotations for security-relevant methods without requiring a GitHub Advanced Security licence
35
40
-**Apply-tags** — writes AI-suggested `@DisplayName` and `@Tag` annotations back into source files; idempotent
41
+
-**Apply-tags-from-csv** — applies human-reviewed annotation decisions from a CSV back to source; separates the review step from the write-back
36
42
-**Manual AI workflow** — two-phase prepare/consume workflow for environments where API access is blocked
37
43
-**Local inference** — Ollama support keeps source code entirely within your network
38
44
-**YAML configuration** — share scan settings across a team or CI pipeline without repeating CLI flags
39
45
-**Custom taxonomy** — supply an external taxonomy file aligned to ISO 27001, NIST SP 800-53, PCI DSS, or your own controls framework
46
+
-**Scan provenance** — `-emit-metadata` prepends tool version and timestamp to CSV; embed in evidence packages
|[docs/concepts/data-governance.md](docs/concepts/data-governance.md)| What data is submitted to AI providers and data residency options |
323
+
|[docs/deployment/onboarding.md](docs/deployment/onboarding.md)| Onboarding a brownfield codebase: six-phase progression from static scan to CI gate |
324
+
|[docs/concepts/data-governance.md](docs/concepts/data-governance.md)| What data is submitted to AI providers, data residency options, enterprise secret management |
com.acme.crypto.AesGcmTest,roundTrip_encryptDecrypt,18,,true,SECURITY: crypto - AES-GCM round-trip,security;crypto,Verifies ciphertext and plaintext integrity under AES-GCM.,1.0
39
-
com.acme.auth.SessionTest,sessionToken_isRotatedAfterLogin,12,,true,SECURITY: auth - session token rotation after login,security;auth,Session token is replaced on successful login to prevent fixation.,0.7
40
-
com.acme.util.DateFormatterTest,format_returnsIso8601,5,,false,,,Test verifies date formatting output only.,0.0
com.acme.crypto.AesGcmTest,roundTrip_encryptDecrypt,18,,,true,SECURITY: crypto - AES-GCM round-trip,security;crypto,Verifies ciphertext and plaintext integrity under AES-GCM.,0.0,1.0
39
+
com.acme.auth.SessionTest,sessionToken_isRotatedAfterLogin,12,,,true,SECURITY: auth - session token rotation after login,security;auth,Session token is replaced on successful login to prevent fixation.,0.0,0.7
40
+
com.acme.util.DateFormatterTest,format_returnsIso8601,5,,,false,,,Test verifies date formatting output only.,0.0,0.0
41
41
```
42
42
43
43
## Filtering high-confidence findings
@@ -47,5 +47,5 @@ Because the output is plain CSV, standard shell tools work:
Copy file name to clipboardExpand all lines: docs/ai/overrides.md
+17Lines changed: 17 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -218,3 +218,20 @@ applied on top.
218
218
219
219
See [CLI reference — `-override-file`](../cli-reference.md#-override-file) for
220
220
the full flag description.
221
+
222
+
## Governance and review cadence
223
+
224
+
The override file is a living document that records human classification decisions. Without a defined review cadence, entries can become stale — referencing methods that were renamed, removed, or whose security relevance changed as the codebase evolved.
225
+
226
+
Recommended practices:
227
+
228
+
**Trigger-based review (minimum):** review the override file whenever:
229
+
- A class named in an override entry is renamed or moved
230
+
- A sprint introduces new test methods in a class that has class-level overrides
231
+
- A security review flags a method that is currently overridden to `securityRelevant: false`
232
+
233
+
**Time-based review (regulated environments):** review the entire file at each release candidate or at a fixed calendar interval (e.g. quarterly). The review should confirm that each entry's `note` field describes a rationale that still applies.
234
+
235
+
**Process:** store the override file in version control alongside the source. Each change to the file constitutes a PR; the PR description and approval record serve as the audit trail. In regulated environments, require a minimum of one security team reviewer on override file PRs separate from the developer who made the change.
236
+
237
+
For organisations where the override file is owned by a dedicated security team and delivered from a separate repository, see [Remote Override Sources](remote-overrides.md).
zeroecho.core.alg.aes.AesLargeDataTest,aesGcmLargeData_ctxOnly,27,,true,SECURITY: crypto - AES-GCM round-trip with context-only parameters,security;crypto,Tests encryption and decryption correctness for large data using AES-GCM.
134
-
zeroecho.core.alg.mldsa.MldsaLargeDataTest,mldsa_complete_suite_streaming_sign_verify_large_data,24,,true,SECURITY: crypto - ML-DSA streaming signature and verification for large data,security;crypto;owasp,Validates ML-DSA signature creation and verification including tamper detection.
zeroecho.core.alg.aes.AesLargeDataTest,aesGcmLargeData_ctxOnly,27,,,true,SECURITY: crypto - AES-GCM round-trip with context-only parameters,security;crypto,Tests encryption and decryption correctness for large data using AES-GCM.,0.0
134
+
zeroecho.core.alg.mldsa.MldsaLargeDataTest,mldsa_complete_suite_streaming_sign_verify_large_data,24,,,true,SECURITY: crypto - ML-DSA streaming signature and verification for large data,security;crypto;owasp,Validates ML-DSA signature creation and verification including tamper detection.,0.0
In plain-text output, a `HASH=<value>` token is appended to each line. In SARIF output, the hash is stored as `properties.contentHash`.
@@ -499,3 +499,14 @@ Runs the prepare phase of the manual AI workflow. For each test class MethodAtla
499
499
Runs the consume phase. MethodAtlas reads operator-filled response files and merges the AI JSON into the output CSV. Missing or empty response files are treated as absent AI data; the scan continues.
500
500
501
501
For practical examples grouped by use case, see [CLI Examples](cli-examples.md).
| `1` | `-apply-tags-from-csv` aborted because the mismatch count reached or exceeded `-mismatch-limit` |
509
+
| `1` | A source file could not be read or written during `-apply-tags-from-csv` |
510
+
| `1` | A required argument value is missing or malformed (printed to stderr before exit) |
511
+
512
+
Note: AI classification failures for individual classes (provider timeout, parse error in the AI response) do not cause a non-zero exit. The affected rows are emitted with blank AI columns and the scan continues. Only structural errors — bad arguments, mismatch-limit violations, and I/O failures during source write-back — produce exit code `1`.
Copy file name to clipboardExpand all lines: docs/compliance.md
+16Lines changed: 16 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -94,6 +94,22 @@ security test coverage is maintained and repeated across development cycles.
94
94
The SARIF output integrates with code scanning dashboards that provide the
95
95
timestamped, per-commit audit trail supervisors may request.
96
96
97
+
## Reproducibility and AI non-determinism
98
+
99
+
MethodAtlas separates two distinct layers with different reproducibility properties.
100
+
101
+
**The structural layer is fully deterministic.** Method discovery (FQCN, method name, LOC, source-level `@Tag` values, content hash) is driven entirely by JavaParser AST analysis of the source files. Given the same source revision, this layer always produces identical output, regardless of provider, model, or time.
102
+
103
+
**The AI layer is non-deterministic by nature.** Language models use probabilistic sampling. Even with the same model, same source, and same prompt, a different run may produce a slightly different `ai_reason`, a different `ai_confidence` value, or — rarely — a different `securityRelevant` verdict. This is a fundamental property of all language model inference, not a defect in MethodAtlas.
104
+
105
+
Two mechanisms mitigate AI non-determinism for compliance purposes:
106
+
107
+
1.**`-ai-cache`** — once a class has been classified, its result is stored in a CSV indexed by SHA-256 content hash. Subsequent runs reuse the stored result without calling the provider. The scan output is therefore reproducible for all unchanged classes.
108
+
109
+
2.**`-override-file`** — human-reviewed corrections are applied deterministically on every run and take precedence over AI output. An override entry sets confidence to `1.0` or `0.0`, reflecting the higher certainty of a human decision.
110
+
111
+
For evidence packages submitted to assessors, the recommended practice is to treat the classified CSV (produced with `-ai -content-hash`) as the authoritative record after human review. Re-running the scan on the same commit using the same cache produces output identical to the reviewed artefact for all unchanged classes; any new or changed classes are the only source of variance.
0 commit comments