Report offline analysis provenance
ober
a22cd53a4f133e86cb4720af9c2fb7c16eec5e2b
--- a/README.md +++ b/README.md @@ -80,6 +80,8 @@ JSON output includes: - `detector_version` - `config_hash` +- analysis provenance fields: `analysis_provider`, `llm_used`, and + `network_used` - repository path - commit and parent IDs - author/committer-facing metadata --- a/main-binary.ss +++ b/main-binary.ss @@ -638,6 +638,7 @@ (cons 'evidence (signal-evidence s)) (cons 'limitations (signal-limitations s)))) (def (finding-json repo f) (list (cons 'detector_version detector-version) (cons 'config_hash (scan-config-hash current-config)) + (cons 'analysis_provider "offline-heuristics") (cons 'llm_used #f) (cons 'network_used #f) (cons 'repository repo) (cons 'commit (finding-commit f)) (cons 'parent (finding-parent f)) (cons 'author_name (finding-author-name f)) (cons 'author_email (finding-author-email f)) (cons 'time (finding-time f)) (cons 'subject (finding-subject f)) (cons 'files (finding-files f)) @@ -649,6 +650,7 @@ (cons 'score (finding-score f)) (cons 'verdict (finding-verdict f)) (cons 'warnings (finding-warnings f)))) (def (report-json repo findings) (list (cons 'detector_version detector-version) (cons 'config_hash (scan-config-hash current-config)) + (cons 'analysis_provider "offline-heuristics") (cons 'llm_used #f) (cons 'network_used #f) (cons 'repository repo) (cons 'count (length findings)) (cons 'findings (map (lambda (f) (finding-json repo f)) findings)))) --- a/tests/fixture-smoke.sh +++ b/tests/fixture-smoke.sh @@ -41,6 +41,9 @@ git -C "$fixture" notes --ref=ai add -m '{"tool":"codex","model":"gpt-5","lines" json=$("$root/bin/jerboa-aigit" scan "$fixture" --format json --count 2) printf '%s\n' "$json" | grep -q '"count":2' printf '%s\n' "$json" | grep -q '"config_hash":"[0-9]' +printf '%s\n' "$json" | grep -q '"analysis_provider":"offline-heuristics"' +printf '%s\n' "$json" | grep -q '"llm_used":false' +printf '%s\n' "$json" | grep -q '"network_used":false' printf '%s\n' "$json" | grep -q '"verdict":"recorded-ai-authorship"' printf '%s\n' "$json" | grep -q '"recorded_ai_note_present":true' printf '%s\n' "$json" | grep -q '"recorded_attribution":\[{"source":"refs/notes/ai","tool":"codex","model":"gpt-5","session":"","path":"src/generated.py","start":1,"end":360}\]' @@ -72,8 +75,10 @@ stats=$("$root/bin/jerboa-aigit" stats "$fixture" --count 2) printf '%s\n' "$stats" | grep -q 'commits: 2' printf '%s\n' "$stats" | grep -q 'recorded AI notes: 1' -jsonl_lines=$("$root/bin/jerboa-aigit" scan "$fixture" --format jsonl --count 2 | wc -l | tr -d ' ') +jsonl=$("$root/bin/jerboa-aigit" scan "$fixture" --format jsonl --count 2) +jsonl_lines=$(printf '%s\n' "$jsonl" | wc -l | tr -d ' ') test "$jsonl_lines" = 2 +printf '%s\n' "$jsonl" | grep -q '"analysis_provider":"offline-heuristics"' head_rev=$(git -C "$fixture" rev-parse HEAD) base_rev=$(git -C "$fixture" rev-parse HEAD~1)