Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
840 commits
Select commit Hold shift + click to select a range
0ece334
fix(docs): ardur-personal-hub.md First Run uses setup-dev.sh instead …
gnanirahulnutakki Jul 20, 2026
d2362ea
fix(docs): route claude-code readmes + cli.md through setup-dev.sh
gnanirahulnutakki Jul 20, 2026
1eacf7f
fix(docs): route framework quickstart READMEs through setup-dev.sh
gnanirahulnutakki Jul 21, 2026
397c6d4
fix(cli): reject empty/whitespace path args on verify, evidence, tele…
gnanirahulnutakki Jul 21, 2026
6077e77
docs(cli): document path_arg_invalid for verify/evidence/telemetry pa…
gnanirahulnutakki Jul 21, 2026
bb6a707
fix(cli): reject empty/whitespace on remaining type=Path args (hook/e…
gnanirahulnutakki Jul 21, 2026
1172f1d
docs(cli): document path_arg_invalid for hook/event --keys-dir (claud…
gnanirahulnutakki Jul 21, 2026
e4ae218
fix(cli): make fixture --project-dir required in argparse
Jul 21, 2026
bd13a9a
fix(docs): try-it.md quickstart uses setup-dev.sh instead of broken m…
gnanirahulnutakki Jul 21, 2026
8fc73f0
docs(what-works-now): complete CLI surface in status table
gnanirahulnutakki Jul 21, 2026
40df1a2
fix(go): bump golang.org/x/text v0.38.0 -> v0.39.0 (CVE)
gnanirahulnutakki Jul 21, 2026
469e7d4
fix(hook): fail-closed PreToolUse on all error paths
Jul 22, 2026
b829ecc
fix(go): reject whitespace-only flags in auditbench-oracle and auditb…
gnanirahulnutakki Jul 22, 2026
23047fb
fix(go): reject whitespace-only flags in ardur-agent-recognition-benc…
gnanirahulnutakki Jul 22, 2026
dd1d2a8
fix(go): reject whitespace-only flags in auditbench-score
gnanirahulnutakki Jul 22, 2026
a1b561f
fix(go): reject whitespace-only flags in ardur-seccomp-smoke and benc…
gnanirahulnutakki Jul 22, 2026
7b88e69
fix(tests): remove unused locals/imports flagged by CodeQL quality scan
gnanirahulnutakki Jul 22, 2026
8af2340
fix(release): close v0.2.0 readiness gaps
gnanirahulnutakki Jul 23, 2026
430ec3a
fix: restore full local lint hygiene
gnanirahulnutakki Jul 23, 2026
aae73be
fix: preserve MIC claims across delegation
Jul 23, 2026
8d1c59e
Merge pull request #370 from ArdurAI/gnanirahulnutakki/issue-368-dele…
gnanirahulnutakki Jul 23, 2026
0c9fd28
test: make MIC showcase exercise signed enforcement
Jul 23, 2026
3a5015b
Merge pull request #372 from ArdurAI/gnanirahulnutakki/issue-366-mic-…
gnanirahulnutakki Jul 23, 2026
d280fc6
test: preserve multi-tool assistant turns
Jul 23, 2026
18954b6
test: fail closed on evaluation results
Jul 23, 2026
424735a
Merge pull request #373 from ArdurAI/gnanirahulnutakki/issue-367-mult…
gnanirahulnutakki Jul 23, 2026
a5faae9
fix(codeql): resolve py/unused-local-variable in proxy.py
gnanirahulnutakki Jul 23, 2026
2140c9f
test: migrate showcase class fixtures for pytest 10
Jul 23, 2026
8589d4b
Merge pull request #376 from ArdurAI/gnanirahulnutakki/issue-371-pyte…
gnanirahulnutakki Jul 23, 2026
7066d6b
test: normalize Ollama tool-call transcripts
Jul 23, 2026
dfe4905
Merge pull request #377 from ArdurAI/gnanirahulnutakki/issue-374-olla…
gnanirahulnutakki Jul 23, 2026
f579842
docs(changelog): document post-v0.2.0 governance and test changes in …
gnanirahulnutakki Jul 23, 2026
4dba661
fix(cli): reject empty/whitespace type=Path args in sibling entry-poi…
gnanirahulnutakki Jul 23, 2026
862cb71
fix(security): ignore root-level protect artifacts and detect PKCS#8 …
gnanirahulnutakki Jul 23, 2026
7edb603
fix(gitignore): cover hook lifecycle runtime artifacts (receipt chain…
gnanirahulnutakki Jul 23, 2026
0e50b49
fix(site): exclude worktrees/ from Hugo source-mirror sync
gnanirahulnutakki Jul 23, 2026
7ea26ce
fix(go): reject empty/whitespace -out in benchcheck and path arg in e…
gnanirahulnutakki Jul 23, 2026
aae3be8
fix(go): reject whitespace-only --signing-key in operator reconciler
gnanirahulnutakki Jul 23, 2026
8cd51fb
fix(tests): resolve cross-package conftest imports for repo-root coll…
gnanirahulnutakki Jul 24, 2026
0e4fc84
fix(tests): eliminate InsecureKeyLengthWarning from forged-JWT fixture
gnanirahulnutakki Jul 24, 2026
6cdc5cc
docs(changelog): document post-v0.2.0 continuous-dev fixes in [Unrele…
gnanirahulnutakki Jul 24, 2026
f9b80e3
fix(go): reject whitespace-only --budget in ardur-agent-recognition-b…
gnanirahulnutakki Jul 24, 2026
f941d1e
fix(security): harden daemon fs paths with O_NOFOLLOW, umask, and tig…
gnanirahulnutakki Jul 24, 2026
784c9ce
fix(go): platform-abstract daemon umask for Windows portability
gnanirahulnutakki Jul 24, 2026
27446b3
fix(go): reject whitespace-only flag.String values in remaining daemo…
gnanirahulnutakki Jul 24, 2026
0d99dcd
docs(claims): update Phase 2 daemon/kernel boundary claim for current…
gnanirahulnutakki Jul 24, 2026
5dbe88f
fix(cli): reject empty/whitespace type=Path args in claude-code-daemo…
gnanirahulnutakki Jul 24, 2026
24db28a
fix(tests): remove unused local function and import flagged by CodeQL
gnanirahulnutakki Jul 25, 2026
2ea757b
fix(issue): validate empty/whitespace nargs list elements on --allowe…
gnanirahulnutakki Jul 25, 2026
66ae3c9
fix(proxy): reject out-of-range --port with structured error before bind
gnanirahulnutakki Jul 25, 2026
c72d13f
fix(daemon): reject non-positive --max-requests before daemon startup
gnanirahulnutakki Jul 25, 2026
46defd6
fix(proxy): reject empty/whitespace path args before key/state/log ma…
gnanirahulnutakki Jul 25, 2026
b4763a1
fix(webhook): validate --webhook-port range (1-65535) before server s…
gnanirahulnutakki Jul 25, 2026
65e54be
fix(dev-setup): add Python minimum-version check before venv creation
gnanirahulnutakki Jul 25, 2026
ef8038b
fix(scripts): add Python minimum-version check to conductor-bootstrap…
gnanirahulnutakki Jul 25, 2026
17ba635
fix(scripts): guard python/pyproject.toml grep with -f check for fixt…
gnanirahulnutakki Jul 25, 2026
a9ca1e8
fix(native-client): preserve response-read errno and bound EINTR retr…
gnanirahulnutakki Jul 26, 2026
bc27c40
fix(tests): make Claude Code latency benchmark CI-environment-aware (…
gnanirahulnutakki Jul 26, 2026
be59bc8
docs(cli): document native client binary exit codes and sanitized std…
gnanirahulnutakki Jul 26, 2026
687c64a
docs(cli): correct STRICT_NATIVE semantics in native client docs
gnanirahulnutakki Jul 26, 2026
80df941
docs(changelog): document post-v0.2.0 continuous-dev fixes in [Unrele…
gnanirahulnutakki Jul 26, 2026
ecc2f9a
fix(security): use validated socket paths and guard non-positive dura…
Jul 26, 2026
e6c978a
fix(personal-hub): trust pinned self-signed TLS cert in status/doctor…
gnanirahulnutakki Jul 26, 2026
18322fa
fix(test): remove unused locals flagged by CodeQL in hub TLS trust test
gnanirahulnutakki Jul 26, 2026
33df7a3
fix(personal-hub): resolve hub_url from config so status/doctor use h…
gnanirahulnutakki Jul 26, 2026
3ae93f0
fix(doctor): display resolved hub_url in doctor hub check detail
gnanirahulnutakki Jul 26, 2026
aacdebb
fix(cli): reject whitespace-only --api-token on kill-switch before ne…
gnanirahulnutakki Jul 27, 2026
a75395c
docs(cli): document kill_switch_api_token_invalid whitespace validation
gnanirahulnutakki Jul 27, 2026
7177b31
docs(changelog): document post-v0.2.0 continuous-dev fixes (TLS, hub_…
gnanirahulnutakki Jul 27, 2026
9c3feed
fix(run-bridge): align ardur run receipts path with canonical receipt…
gnanirahulnutakki Jul 27, 2026
b9e42ac
fix(personal-hub): clear py/empty-except alert in doctor hub_url fall…
gnanirahulnutakki Jul 27, 2026
1aade9a
fix(personal-hub): use contextlib.suppress for doctor hub_url display…
gnanirahulnutakki Jul 27, 2026
375122c
fix(run-bridge): emit structured error when governed command cannot l…
gnanirahulnutakki Jul 27, 2026
2765d75
fix(anchor): reject --receipt-log pointing to directory or nonexisten…
gnanirahulnutakki Jul 27, 2026
b778994
fix(go): bump google.golang.org/grpc v1.82.0→v1.82.1 for GO-2026-6061
gnanirahulnutakki Jul 27, 2026
75232f0
docs(anchor): document receipt_log_not_file error code
gnanirahulnutakki Jul 27, 2026
6d1cd7e
fix(run): reject empty/whitespace --home before CWD pollution
gnanirahulnutakki Jul 27, 2026
ad96e40
fix(home): reject dangling-parent-symlink path confusion on run/setup…
Jul 28, 2026
cdba84d
fix(proxy): reject whitespace-only --api-token to prevent auth bypass
gnanirahulnutakki Jul 28, 2026
f167304
fix(protect): reject --keys-dir dangling-parent-symlink before key ge…
gnanirahulnutakki Jul 28, 2026
01864b2
fix(protect): reject --scope dangling-parent-symlink before JWT issuance
gnanirahulnutakki Jul 28, 2026
6a27447
fix(fixture): reject --home/--chain-dir dangling-parent-symlink on ge…
gnanirahulnutakki Jul 28, 2026
c037050
docs(fixture): document --home/--chain-dir dangling-parent-symlink co…
gnanirahulnutakki Jul 28, 2026
4550b3f
docs(changelog): document post-7177b31 continuous-dev fixes in [Unrel…
gnanirahulnutakki Jul 29, 2026
ecc2f4b
docs(claim-ledger): refresh Phase 2 boundary for Jul 29 tree
gnanirahulnutakki Jul 29, 2026
6067ee7
fix(tests): remove unused imports and dead code flagged by CodeQL
gnanirahulnutakki Jul 29, 2026
ce409af
docs(changelog): document CodeQL dead-code cleanup in [Unreleased]
gnanirahulnutakki Jul 29, 2026
05a2eb7
fix(start,hub): emit structured JSON on port-in-use instead of raw tr…
gnanirahulnutakki Jul 30, 2026
0c83f9b
docs(cli): document start_port_in_use and hub_port_in_use error codes
gnanirahulnutakki Jul 30, 2026
54cafca
fix(kill-switch): emit structured JSON instead of raw urllib error st…
gnanirahulnutakki Jul 30, 2026
c369684
docs(cli): document kill-switch structured error codes
gnanirahulnutakki Jul 30, 2026
5c09f40
fix(anchor): classify Rekor transport errors instead of leaking raw u…
gnanirahulnutakki Jul 30, 2026
5257733
fix(tests): remove unused mock_transport in Rekor transport error test
gnanirahulnutakki Jul 30, 2026
793308b
docs(changelog): document structured-JSON error fixes in [Unreleased]
gnanirahulnutakki Jul 30, 2026
777e0b1
fix(ci): make credentialed Ollama showcase fail closed (#375)
Jul 31, 2026
c34a92a
fix(tests): add defensive return after pytest.skip in ollama prefligh…
gnanirahulnutakki Jul 31, 2026
13cb413
fix(fixture): sanitize OSError/TypeError/ValueError leak in fixture c…
gnanirahulnutakki Jul 31, 2026
9c8a183
fix(security): sanitize str(exc) leaks in conformance, daemon, run-br…
gnanirahulnutakki Jul 31, 2026
a0ad023
fix(cli): preserve domain exception messages in anchor/verify error o…
gnanirahulnutakki Jul 31, 2026
82c35f9
feat(latency): emit machine-readable JSON reports with raw samples an…
gnanirahulnutakki Jul 31, 2026
bfb89fe
docs(changelog): document machine-readable latency reports in [Unrele…
gnanirahulnutakki Jul 31, 2026
8e9c4d2
fix(receiver-attestation): sanitize str(exc) path leak in envelope an…
gnanirahulnutakki Jul 31, 2026
93563b5
docs(changelog): document str(exc) sanitization fixes in [Unreleased]
gnanirahulnutakki Jul 31, 2026
996abdd
feat(latency-gate): deterministic multi-report evaluator for #380
gnanirahulnutakki Jul 31, 2026
b7e054f
docs(site): sync source mirror for ADR-027 latency benchmark gate eva…
gnanirahulnutakki Jul 31, 2026
02dbf32
feat(latency-gate-cli): CLI entry point and report-loading harness fo…
gnanirahulnutakki Jul 31, 2026
184376a
docs(cli): document ardur latency-gate evaluate command and CHANGELOG…
gnanirahulnutakki Aug 1, 2026
27a6213
ci(latency-gate): add deterministic gate step to latency benchmark wo…
gnanirahulnutakki Aug 1, 2026
36df32a
fix(proxy): sanitize SVID and AAT library internals from HTTP error r…
gnanirahulnutakki Aug 1, 2026
fad6447
docs(changelog): document SVID/AAT HTTP error sanitization in [Unrele…
gnanirahulnutakki Aug 1, 2026
33fbfeb
fix(proxy): sanitize holder_public_key_pem cryptography internals fro…
gnanirahulnutakki Aug 1, 2026
14d5603
docs(changelog): document holder_public_key_pem cryptography sanitiza…
gnanirahulnutakki Aug 1, 2026
587ec6e
chore(codeql): clear 19 quality-only CodeQL alerts (unused imports, e…
gnanirahulnutakki Aug 1, 2026
4441e1e
docs(adr-027): document event policy and evidence collection (#380 it…
gnanirahulnutakki Aug 1, 2026
419dd2c
fix(security): close catch-all str(exc) leak paths in Hub, proxy GET,…
gnanirahulnutakki Aug 1, 2026
73fb9b5
docs(changelog): document catch-all str(exc) sanitization fixes
gnanirahulnutakki Aug 1, 2026
f725eef
docs(site): sync CHANGELOG Hugo source mirror
gnanirahulnutakki Aug 1, 2026
19460e1
feat(run): add --json machine-readable output flag to ardur run
gnanirahulnutakki Aug 1, 2026
e053bb9
docs(run): document --json flag in CLI reference and CHANGELOG
gnanirahulnutakki Aug 1, 2026
ccf8114
fix(run): correct --json help text from stdout to stderr
gnanirahulnutakki Aug 1, 2026
9811749
fix(run): emit pre-execution --json errors to stderr instead of stdout
gnanirahulnutakki Aug 1, 2026
d2d0660
docs(changelog): document ardur run --json pre-execution error stream…
gnanirahulnutakki Aug 1, 2026
19ecf61
feat(run): add --redact-paths flag to ardur run --json for safe sharing
gnanirahulnutakki Aug 1, 2026
5c41b90
docs(run): document --redact-paths flag in CLI reference and CHANGELOG
gnanirahulnutakki Aug 1, 2026
3f35379
fix(run): warn when --redact-paths used without --json instead of sil…
gnanirahulnutakki Aug 2, 2026
c5659aa
fix(issue): catch OSError from resolve_keys_dir to prevent raw traceb…
gnanirahulnutakki Aug 2, 2026
ab81d0a
fix(run): emit structured JSON errors on legacy hub path when --json …
gnanirahulnutakki Aug 2, 2026
2cfae7c
feat(cli): accept --json no-op flag on always-JSON personal-path comm…
gnanirahulnutakki Aug 2, 2026
61b8c48
feat(cli): accept --json no-op flag on always-JSON protocol-path comm…
gnanirahulnutakki Aug 2, 2026
ea8b66e
fix(tests): resolve CodeQL py/uninitialized-local-variable in json-no…
gnanirahulnutakki Aug 2, 2026
d15af39
chore(tests): remove unused imports flagged by CodeQL
gnanirahulnutakki Aug 2, 2026
55fa74a
fix(security): harden Gemini CLI hook input parsing to match Claude hook
gnanirahulnutakki Aug 2, 2026
e20228e
fix(cli): emit JSON on argparse missing-required-arg errors when --js…
gnanirahulnutakki Aug 2, 2026
0393228
fix(cli): standardise JSON-mode exit codes to 1 across all error paths
gnanirahulnutakki Aug 2, 2026
9a97bb0
feat(status,doctor): add --redact-paths flag for safe output sharing
gnanirahulnutakki Aug 2, 2026
0d03a99
fix(cli): accept --json flag on telemetry export, posture scan/report…
gnanirahulnutakki Aug 3, 2026
6568a2b
feat(protect): add --redact-paths flag to protect claude-code for saf…
gnanirahulnutakki Aug 3, 2026
8180e36
feat(setup,uninstall): add --redact-paths flag for safe output sharing
gnanirahulnutakki Aug 3, 2026
82965a7
docs(cli): document --redact-paths on setup and uninstall
gnanirahulnutakki Aug 3, 2026
2913535
fix(cli): accept --json on evidence correlate and latency-gate evaluate
gnanirahulnutakki Aug 3, 2026
24bf578
fix(redact-paths): close path-leak vectors in notes, status/doctor, a…
gnanirahulnutakki Aug 3, 2026
979378c
chore(tests): remove unused pytest imports flagged by CodeQL
gnanirahulnutakki Aug 3, 2026
8b293ec
fix(cli): rename latency-gate evaluate --output-format to --format fo…
gnanirahulnutakki Aug 3, 2026
8743369
ci(link-check): add retries to reduce transient lychee exit-2 failures
gnanirahulnutakki Aug 3, 2026
f9b7c34
test(http): add retry logic to prevent transient TimeoutError failures
gnanirahulnutakki Aug 3, 2026
fbbeaae
fix(test): use assert to satisfy CodeQL illegal-raise on Optional exc…
gnanirahulnutakki Aug 3, 2026
0026bbd
feat(posture): add --output flag to posture scan and posture report
gnanirahulnutakki Aug 3, 2026
47431eb
docs(cli): document --output flag on posture scan and posture report
gnanirahulnutakki Aug 3, 2026
3056a41
fix(preflight): extend --fail-on exit-2 to config parse errors
gnanirahulnutakki Aug 3, 2026
40b7128
feat(verify): add --output flag for atomic JSON report file writing
gnanirahulnutakki Aug 3, 2026
42cf640
feat(receipt): add 'unknown' as first-class verdict for honest absten…
gnanirahulnutakki Aug 4, 2026
e3879ef
fix(deps): bump cryptography <51 to pull CVE-2026-69247 fix (50.0.0)
gnanirahulnutakki Aug 4, 2026
d5ad496
fix(deps): update OCI runtime lock + uv.lock to cryptography 50.0.0
gnanirahulnutakki Aug 4, 2026
3f452a0
feat(proxy): add UNKNOWN Decision for honest observation-gap abstention
gnanirahulnutakki Aug 4, 2026
3506e3f
fix(proxy): correct Decision enum docstring from Four-state to Five-s…
gnanirahulnutakki Aug 4, 2026
56de799
docs(security-model): document five-state Decision taxonomy with UNKN…
gnanirahulnutakki Aug 4, 2026
355e85c
chore(tests): remove unused pytest imports flagged by CodeQL
gnanirahulnutakki Aug 4, 2026
22bc179
feat(kernelcapture): add SyntheticKernelReceiptVerdictUnknown for hon…
gnanirahulnutakki Aug 4, 2026
0cdc0ed
docs(coverage-map): add 'unknown' verdict to per-receipt label table
gnanirahulnutakki Aug 4, 2026
1fd54fe
docs(specs): add 'unknown' verdict to v0.1 protocol codomain
gnanirahulnutakki Aug 4, 2026
232fe9f
fix(specs): add 'unknown' to DRP decision_projection table
gnanirahulnutakki Aug 4, 2026
f2228e1
docs(changelog): document protocol spec 'unknown' verdict codomain al…
gnanirahulnutakki Aug 5, 2026
2c8f646
docs(status,readme): align top-level surfaces with five-state Decisio…
gnanirahulnutakki Aug 5, 2026
533eadb
fix(proxy): count Decision.UNKNOWN in _build_summary denials
gnanirahulnutakki Aug 5, 2026
7589e91
fix(verify,telemetry): handle 'unknown' verdict in offline verificati…
gnanirahulnutakki Aug 5, 2026
02fa678
docs(changelog): document unknown-verdict crash fix (denial-of-audit)
gnanirahulnutakki Aug 5, 2026
4feea1a
feat(run): capture host-observer process-lifecycle evidence for any CLI
gnanirahulnutakki Aug 5, 2026
02bbc15
feat(run): capture adapter-wrapped run_command in lifecycle evidence
gnanirahulnutakki Aug 5, 2026
4ff0923
docs(coverage-map,status): document host-observer capture tier
gnanirahulnutakki Aug 6, 2026
bad3ad2
feat(run): capture cwd in lifecycle evidence
gnanirahulnutakki Aug 6, 2026
d985f14
docs(changelog): document cwd capture in lifecycle evidence
gnanirahulnutakki Aug 6, 2026
01a6577
docs(coverage-map,status): document cwd in host-observer lifecycle ev…
gnanirahulnutakki Aug 6, 2026
38b3cc7
feat(run): capture duration_budget_s in lifecycle evidence
gnanirahulnutakki Aug 6, 2026
4da9a70
docs(coverage-map,status): document duration_budget_s in host-observe…
gnanirahulnutakki Aug 6, 2026
c2aea3b
fix(tests): remove unused sys and pytest imports flagged by CodeQL
gnanirahulnutakki Aug 6, 2026
f1ab005
feat(run): sign host-observer lifecycle evidence into attestation token
gnanirahulnutakki Aug 6, 2026
781dfcb
docs(changelog,coverage-map): document exit-receipt signing in attest…
gnanirahulnutakki Aug 6, 2026
ae6cd8e
feat(run): capture child-process lifecycle in host-observer evidence
gnanirahulnutakki Aug 6, 2026
efd05e5
docs(status,coverage-map): align host-observer capture docs for direc…
gnanirahulnutakki Aug 6, 2026
fdeffa4
fix(oci): add missing psutil 6.1.1 wheel hashes to runtime lock
gnanirahulnutakki Aug 7, 2026
0356c2f
fix(security): unify --redact-paths with redact_local_path_text + pro…
gnanirahulnutakki Aug 7, 2026
ae22527
fix(test): break URL literal to resolve CodeQL false positive on test…
gnanirahulnutakki Aug 7, 2026
2cc7776
fix(test): fully break URL/domain taint chain for CodeQL false positive
gnanirahulnutakki Aug 7, 2026
ec88f9c
fix(security): redact lifecycle evidence before signing + add violati…
gnanirahulnutakki Aug 7, 2026
29c7ce1
fix(test): resolve redact_paths_security_fixes regression from lifecy…
gnanirahulnutakki Aug 7, 2026
0efee26
feat(run): capture recursive descendant tree in host-observer lifecycle
gnanirahulnutakki Aug 7, 2026
908e074
fix(tests): remove dead code flagged by CodeQL #371/#372
gnanirahulnutakki Aug 7, 2026
4ad46ac
feat(run): show descendant count and max depth in governance summary
gnanirahulnutakki Aug 7, 2026
a0de7f8
feat(run): show duration budget usage in governance summary
gnanirahulnutakki Aug 7, 2026
d3de18a
fix(tests): remove unused dataclass/field imports flagged by CodeQL #…
gnanirahulnutakki Aug 7, 2026
606fce7
feat(run): show delegation count in governance summary
gnanirahulnutakki Aug 8, 2026
595e105
feat(run): show honest-abstention verdict breakdown in governance sum…
gnanirahulnutakki Aug 8, 2026
1d7b1fd
feat(run): show scope compliance and elapsed time in governance summary
gnanirahulnutakki Aug 8, 2026
29d6451
feat(run): capture CPU time and peak RSS in host-observer lifecycle e…
gnanirahulnutakki Aug 8, 2026
f903831
fix(tests): relax ru_maxrss delta assertion for high-water-mark seman…
gnanirahulnutakki Aug 8, 2026
dde9b05
feat(run): suppress noisy kernel lines in governance summary when no …
gnanirahulnutakki Aug 8, 2026
e5c8bc4
fix(lint/docs): remove unused imports + fix E741 in new test files; d…
gnanirahulnutakki Aug 8, 2026
d271767
feat(run): include aggregate governance summary in --json output
gnanirahulnutakki Aug 8, 2026
d2c4591
feat(run): capture per-child CPU time and RSS in descendant snapshots
gnanirahulnutakki Aug 8, 2026
590a924
feat(run): surface aggregate child resource usage in governance summary
gnanirahulnutakki Aug 8, 2026
8d800cd
fix: resolve CodeQL #377-380 quality alerts (suppress, unused import/…
gnanirahulnutakki Aug 8, 2026
d94b899
feat(run): surface denied tool names in governance summary
gnanirahulnutakki Aug 8, 2026
cdc05e6
fix(run): include denied_tools in --json output + normalize signal ex…
gnanirahulnutakki Aug 9, 2026
3f0f200
fix(tests): add denied_tools to strict-set assertion in json output test
gnanirahulnutakki Aug 9, 2026
ce47d9f
feat(run): annotate non-zero exit codes with human-readable hint
gnanirahulnutakki Aug 9, 2026
f56b36e
fix(tests): remove unused MagicMock import flagged by CodeQL #381
gnanirahulnutakki Aug 9, 2026
d9bd8d4
feat(run): include exit_signal and exit_hint in --json output
gnanirahulnutakki Aug 9, 2026
e3e346f
fix(tests): cross-platform signal names + update expected JSON keys
gnanirahulnutakki Aug 9, 2026
db4783e
fix(offline-verify): count unknown verdicts and fix reason_code fallback
gnanirahulnutakki Aug 9, 2026
6e5c9e2
feat(run): add --output flag for writing governance result JSON to file
gnanirahulnutakki Aug 9, 2026
6d095dc
fix(run): correct --output help text and tighten --redact-paths warni…
gnanirahulnutakki Aug 9, 2026
1127e6d
feat(cli): add --output flag to claude-code-report, gemini-cli-report…
gnanirahulnutakki Aug 9, 2026
8388301
feat(cli): add --redact-paths to adapter report commands
gnanirahulnutakki Aug 9, 2026
ef145b6
feat: add --redact-paths flag to verify, evidence correlate, telemetr…
gnanirahulnutakki Aug 9, 2026
c1beb1f
fix(tests): consolidate vibap.cli imports and remove unused imports
gnanirahulnutakki Aug 10, 2026
75dcd0f
feat(attestation): sign verdict breakdown into attestation JWT
gnanirahulnutakki Aug 10, 2026
38a1ac6
fix(tests): remove unused imports and fix ambiguous variable names
gnanirahulnutakki Aug 10, 2026
3359f23
feat(cli): add --attestation-token flag to verify for independent att…
gnanirahulnutakki Aug 10, 2026
948eecd
fix(cli): parameterize malformed-token error message for attestation …
gnanirahulnutakki Aug 10, 2026
ee7bb51
feat(cli): add --output and --redact-paths to issue, anchor, attest
gnanirahulnutakki Aug 10, 2026
b431bea
fix(cli): attestation-specific error codes for verify --attestation-t…
gnanirahulnutakki Aug 10, 2026
0547618
fix(cli): preserve offline verification error messages in JSON responses
gnanirahulnutakki Aug 11, 2026
c1f6ce0
fix(cli): preserve JWT verification error messages in JSON responses
gnanirahulnutakki Aug 11, 2026
9062168
fix(telemetry): preserve key-loading error messages in telemetry export
gnanirahulnutakki Aug 11, 2026
cfb8806
fix(tests): remove unused imports flagged by CodeQL #411-#414
gnanirahulnutakki Aug 11, 2026
6f491a7
fix(run): reject empty/whitespace-only commands with structured error
gnanirahulnutakki Aug 11, 2026
db90a2d
fix(run): reject zero-width/invisible characters in command validation
gnanirahulnutakki Aug 11, 2026
fac0d93
fix(run): reject empty/whitespace-only --output before execution
gnanirahulnutakki Aug 11, 2026
1b32674
fix(tests): use sys.executable instead of hardcoded venv path
gnanirahulnutakki Aug 11, 2026
a29916f
docs(cli): document --output empty/whitespace validation on ardur run
gnanirahulnutakki Aug 11, 2026
76d8034
fix(site): remove stray POST_LANDING_SCAN.md from source mirror
gnanirahulnutakki Aug 11, 2026
91bf5c0
fix(run): structured JSON error for --output write failures
gnanirahulnutakki Aug 11, 2026
17ee173
fix(run): structured JSON for ValueError/NotImplementedError/KernelPo…
gnanirahulnutakki Aug 11, 2026
c242e81
feat(cli): add --output flag to doctor, status, setup, doctor-claude-…
gnanirahulnutakki Aug 12, 2026
7347175
fix(tests): remove unused import and variable flagged by CodeQL #416-…
gnanirahulnutakki Aug 12, 2026
26d502c
fix(cli): preserve receipt public key error messages across verify, e…
gnanirahulnutakki Aug 12, 2026
2311b12
fix(cli): preserve TLS error messages in start and hub JSON responses
gnanirahulnutakki Aug 12, 2026
9e7a913
fix(cli): enrich offline verification error responses with structured…
gnanirahulnutakki Aug 12, 2026
b82e5c8
fix(cli): prevent local path leak in receipt key PermissionError mess…
gnanirahulnutakki Aug 12, 2026
481f884
fix(tests): add comment to CodeQL-flagged empty-except in path leak test
gnanirahulnutakki Aug 12, 2026
06f83b7
fix(cli): preserve RuntimeEvidenceError messages in evidence correlate
gnanirahulnutakki Aug 12, 2026
918f8b3
feat(cli): add --output and --redact-paths to latency-gate evaluate
gnanirahulnutakki Aug 12, 2026
a2e28dc
fix(cli): enrich --output write-failure responses with condition, err…
gnanirahulnutakki Aug 12, 2026
f6d2a23
fix(cli): unify --output write-failure responses across all commands …
gnanirahulnutakki Aug 12, 2026
dbd0f4a
docs(cli): document attestation-token verify error codes + remove unu…
gnanirahulnutakki Aug 10, 2026
46612af
docs(site): regenerate Hugo source mirror for attestation-token error…
gnanirahulnutakki Aug 13, 2026
db6031d
fix(cli): structured JSON for non-EADDRINUSE OSError and correct exit…
gnanirahulnutakki Aug 13, 2026
fa20d54
fix(tests): remove unused imports in test_oserror_startup_exitcodes a…
gnanirahulnutakki Aug 13, 2026
032084a
test(fixture): add regression tests for fixture __main__ str(exc) pat…
gnanirahulnutakki Aug 13, 2026
7589ccf
fix(test): resolve CodeQL #420 import-and-import-from in test_output_…
gnanirahulnutakki Aug 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
65 changes: 50 additions & 15 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -1,17 +1,52 @@
.git
__pycache__
*.pyc
*.pyo
.pytest_cache
.ruff_cache
.mypy_cache
site/
media/
reports/
tooling/
*.egg-info
.venv
# Dockerignore for Ardur builds

# Python
__pycache__/
*.py[cod]
*.egg-info/
.venv/
venv/
dist/
build/
*.egg

# Go
go/bin/
go/pkg/mod/

# Git
.git/
.gitignore
.gitattributes

# CI/CD
.github/

# IDE
.vscode/
.idea/
*.swp
*.swo

# Agent state (local-only)
.ardur/
.vibap/
.context/
.agents/
.ai-context/
.agent-context/
.codex/
.claude/
.local-skills/

# Tests
.pytest_cache/
.coverage
htmlcov/
python/tests/test-results/

# Misc
node_modules/
*.log
*.jsonl
*.jsonl.gz
.env
.env.*
6 changes: 6 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Copilot Instructions

See [`AGENTS.md`](../AGENTS.md) in the repository root — it is the canonical,
authoritative guide for agents working here, covering what Ardur does and does
not claim, build and test commands, trust boundaries, and the contribution
workflow.
4 changes: 4 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ updates:
time: "04:00"
timezone: "UTC"
open-pull-requests-limit: 5
groups:
codeql-action:
patterns:
- "github/codeql-action/*"
labels:
- "ci"
- "dependencies"
Expand Down
66 changes: 66 additions & 0 deletions .github/workflows/agent-docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
name: agent-docs

# AGENTS.md is the canonical entry point for coding agents. Its toolchain
# versions and `make` targets are generated from the files that define them,
# so this job fails when a change to the Makefile, go/go.mod,
# python/pyproject.toml, or .pre-commit-config.yaml leaves AGENTS.md stale.
#
# This is a staleness gate, not an auto-committer: it needs no write token and
# works under branch protection. The fix is always to run `make gen-agent-docs`
# locally and commit the result.

on:
push:
branches: [main, dev]
paths:
- "AGENTS.md"
- "Makefile"
- "go/go.mod"
- "python/pyproject.toml"
- ".pre-commit-config.yaml"
- "scripts/gen-agent-docs.py"
- ".github/workflows/agent-docs.yml"
pull_request:
branches: [main, dev]
paths:
- "AGENTS.md"
- "Makefile"
- "go/go.mod"
- "python/pyproject.toml"
- ".pre-commit-config.yaml"
- "scripts/gen-agent-docs.py"
- ".github/workflows/agent-docs.yml"
workflow_dispatch:

permissions:
contents: read

jobs:
agent-docs-fresh:
name: AGENTS.md is not stale
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
# This job only reads and diffs; it never pushes. Don't leave the
# token in .git/config on the runner.
persist-credentials: false

- name: Set up Python
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
with:
python-version: "3.13"

# Regenerate rather than only running --check, so that a failure prints
# the exact drift in the log instead of just naming the file.
- name: Regenerate the AGENTS.md command block
run: python3 scripts/gen-agent-docs.py

- name: Fail if AGENTS.md was stale
run: |
set -euo pipefail
if ! git diff --exit-code -- AGENTS.md; then
echo "::error::AGENTS.md's generated command block is stale (drift shown above). Run 'make gen-agent-docs' and commit the result."
exit 1
fi
echo "AGENTS.md generated command block is up to date."
243 changes: 243 additions & 0 deletions .github/workflows/agent-recognition-benchmark.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,243 @@
name: Agent recognition benchmark

on:
push:
branches: [dev]
paths:
- ".github/workflows/agent-recognition-benchmark.yml"
- "docs/benchmarks/agent-recognition-overhead.md"
- "go/cmd/ardur-agent-recognition-benchmark/**"
- "go/cmd/ardur-agent-recognition-workload/**"
- "go/cmd/ardur-kernelcaptured/**"
- "go/pkg/kernelcapture/**"
- "python/tests/test_agent_recognition_benchmark_workflow.py"
pull_request:
paths:
- ".github/workflows/agent-recognition-benchmark.yml"
- "docs/benchmarks/agent-recognition-overhead.md"
- "go/cmd/ardur-agent-recognition-benchmark/**"
- "go/cmd/ardur-agent-recognition-workload/**"
- "go/cmd/ardur-kernelcaptured/**"
- "go/pkg/kernelcapture/**"
- "python/tests/test_agent_recognition_benchmark_workflow.py"
workflow_dispatch:
inputs:
profile:
description: "Bounded workload profile"
required: true
default: release
type: choice
options:
- release
- ci

permissions:
contents: read

concurrency:
group: agent-recognition-benchmark-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
benchmark:
name: Agent recognition overhead (${{ github.event_name == 'workflow_dispatch' && inputs.profile || 'ci' }})
runs-on: ubuntu-24.04
timeout-minutes: 40
env:
BENCHMARK_PROFILE: ${{ github.event_name == 'workflow_dispatch' && inputs.profile || 'ci' }}
SOURCE_SHA: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
PR_BASE_REF: ${{ github.event.pull_request.base.ref }}
PR_HEAD_REF: ${{ github.event.pull_request.head.ref }}
PROMOTION_BOOTSTRAP_REFERENCE_SHA: 7a2167f543671bba4fc20a8d3702f5ae6d6315df
BUDGET_FILE: go/pkg/kernelcapture/testdata/agent-recognition-benchmark-budget-v0.4.json
EVIDENCE_ONLY: ${{ github.event_name == 'workflow_dispatch' && inputs.profile == 'ci' }}
GOWORK: "off"
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
ref: ${{ env.SOURCE_SHA }}
fetch-depth: 0
persist-credentials: false

- name: Require reviewed budget for automatic CI
if: github.event_name != 'workflow_dispatch'
run: |
set -euo pipefail
test -f "$BUDGET_FILE"

- name: Set up Go
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0
with:
go-version: '1.26.5'
cache: true
cache-dependency-path: go/go.sum

- name: Run race-sensitive benchmark tests
working-directory: go
run: |
go test -race -count=1 \
./pkg/kernelcapture \
./cmd/ardur-kernelcaptured \
./cmd/ardur-agent-recognition-benchmark \
./cmd/ardur-agent-recognition-workload

- name: Build exact benchmark artifacts
working-directory: go
run: |
go build -trimpath -o "$RUNNER_TEMP/ardur-kernelcaptured" ./cmd/ardur-kernelcaptured
go build -trimpath -o "$RUNNER_TEMP/ardur-agent-recognition-benchmark" ./cmd/ardur-agent-recognition-benchmark
go build -trimpath -o "$RUNNER_TEMP/ardur-agent-recognition-workload" ./cmd/ardur-agent-recognition-workload

- name: Prepare isolated kernel filesystems
run: |
set -euo pipefail
if [ "$(stat -f -c %T /sys/fs/bpf)" != "bpf_fs" ]; then
sudo mount -t bpf bpf /sys/fs/bpf
fi
if [ "$(stat -f -c %T /sys/kernel/tracing)" != "tracefs" ]; then
sudo mount -t tracefs tracefs /sys/kernel/tracing
fi

- name: Resolve exact reference source
id: reference
shell: bash
run: |
set -euo pipefail
if [ "$(git rev-parse HEAD)" != "$SOURCE_SHA" ]; then
echo "::error::current checkout does not match the requested source SHA"
exit 2
fi
case "$GITHUB_EVENT_NAME" in
pull_request)
reference_sha="${{ github.event.pull_request.base.sha }}"
;;
push)
reference_sha="${{ github.event.before }}"
;;
workflow_dispatch)
git fetch --no-tags origin dev
reference_sha="$(git merge-base "$SOURCE_SHA" origin/dev)"
if [ "$reference_sha" = "$SOURCE_SHA" ]; then
reference_sha="$(git rev-parse "$SOURCE_SHA^")"
fi
;;
*)
echo "::error::unsupported benchmark event"
exit 2
;;
esac
if [[ ! "$reference_sha" =~ ^[0-9a-f]{40}$ ]]; then
echo "::error::reference source is not an exact commit SHA"
exit 2
fi
if [ "$PR_BASE_REF" = "main" ] && [ "$PR_HEAD_REF" = "dev" ]; then
if git cat-file -e "$reference_sha^{commit}" 2>/dev/null && \
! git cat-file -e "$reference_sha:go/cmd/ardur-kernelcaptured" 2>/dev/null; then
reference_sha="$PROMOTION_BOOTSTRAP_REFERENCE_SHA"
fi
fi
if [ "$reference_sha" = "$SOURCE_SHA" ]; then
echo "::error::reference source must differ from the candidate source"
exit 2
fi
if ! git cat-file -e "$reference_sha^{commit}" 2>/dev/null; then
echo "::error::reference source is not available in the candidate history"
exit 2
fi
if ! git merge-base --is-ancestor "$reference_sha" "$SOURCE_SHA"; then
echo "::error::reference source is not an ancestor of the candidate source"
exit 2
fi
if ! git cat-file -e "$reference_sha:go/cmd/ardur-kernelcaptured" 2>/dev/null; then
echo "::error::reference source does not contain the benchmark daemon"
exit 2
fi
echo "source_sha=$reference_sha" >> "$GITHUB_OUTPUT"

- name: Check out exact reference source
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
ref: ${{ steps.reference.outputs.source_sha }}
path: reference
persist-credentials: false

- name: Verify exact reference checkout
working-directory: reference
env:
EXPECTED_REFERENCE_SOURCE_SHA: ${{ steps.reference.outputs.source_sha }}
run: |
set -euo pipefail
if [ "$(git rev-parse HEAD)" != "$EXPECTED_REFERENCE_SOURCE_SHA" ]; then
echo "::error::reference checkout does not match the resolved source SHA"
exit 2
fi
if [ -n "$(git status --porcelain --untracked-files=all)" ]; then
echo "::error::reference checkout is not clean"
exit 2
fi

- name: Build exact reference daemon
id: reference_build
working-directory: reference/go
run: |
set -euo pipefail
reference_build_root="$(mktemp -d "$RUNNER_TEMP/ardur-reference-build.XXXXXX")"
chmod 700 "$reference_build_root"
GOMODCACHE="$reference_build_root/modcache" GOCACHE="$reference_build_root/buildcache" go mod download
GOMODCACHE="$reference_build_root/modcache" GOCACHE="$reference_build_root/buildcache" go mod verify
GOMODCACHE="$reference_build_root/modcache" GOCACHE="$reference_build_root/buildcache" \
go build -trimpath -o "$reference_build_root/ardur-kernelcaptured-reference" ./cmd/ardur-kernelcaptured
chmod 500 "$reference_build_root/ardur-kernelcaptured-reference"
echo "daemon_path=$reference_build_root/ardur-kernelcaptured-reference" >> "$GITHUB_OUTPUT"

- name: Run paired recognition benchmark
env:
REFERENCE_DAEMON_PATH: ${{ steps.reference_build.outputs.daemon_path }}
REFERENCE_SOURCE_SHA: ${{ steps.reference.outputs.source_sha }}
run: |
set -euo pipefail
benchmark_bin="$RUNNER_TEMP/ardur-agent-recognition-benchmark"
report_dir="$RUNNER_TEMP/ardur-agent-recognition-benchmark-report"
if [ "$benchmark_bin" = "$report_dir" ] || [ -e "$report_dir" ]; then
echo "::error::benchmark report path is not isolated"
exit 2
fi
args=(
"$benchmark_bin"
--daemon-bin "$RUNNER_TEMP/ardur-kernelcaptured"
--reference-daemon-bin "$REFERENCE_DAEMON_PATH"
--workload-bin "$RUNNER_TEMP/ardur-agent-recognition-workload"
--source-sha "$SOURCE_SHA"
--reference-source-sha "$REFERENCE_SOURCE_SHA"
--output-dir "$report_dir"
--profile "$BENCHMARK_PROFILE"
--runner-image-os "${ImageOS:-unknown}"
--runner-image-version "${ImageVersion:-unknown}"
--warmup-pairs 1
--measured-pairs 20
--timeout 25m
)
if [ "$BENCHMARK_PROFILE" = "ci" ] && [ "$EVIDENCE_ONLY" != "true" ]; then
args+=(--budget "$BUDGET_FILE")
elif [ "$BENCHMARK_PROFILE" = "ci" ]; then
echo "::notice::manual CI dispatch is collecting budget-independent v0.4 evidence"
else
echo "::notice::manual release profile is a budget-independent experiment and never substitutes for required CI"
fi
set +e
sudo -- "${args[@]}"
benchmark_status=$?
set -e
if [ -d "$report_dir" ]; then
sudo chown -R "$(id -u):$(id -g)" "$report_dir"
fi
exit "$benchmark_status"

- name: Upload machine-readable report
if: always()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: agent-recognition-benchmark-${{ env.BENCHMARK_PROFILE }}-${{ github.run_id }}
path: ${{ runner.temp }}/ardur-agent-recognition-benchmark-report/
if-no-files-found: warn
retention-days: 14
Loading
Loading