Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
491 commits
Select commit Hold shift + click to select a range
1e30bd8
refactor(tier3): import plugin_native once and type the native plugin…
rng1995 Oct 5, 2026
793f777
refactor(plugin-schema): ask Severity.is_error() whether a finding bl…
rng1995 Oct 5, 2026
4462c81
refactor(plugin-components): resolve declared component paths in one …
rng1995 Oct 5, 2026
673120c
refactor(endpoints): mark loopback hosts with EndpointClass.is_loopback
rng1995 Oct 5, 2026
295443e
refactor(tier3): name the fields of a native arm's staging
rng1995 Oct 5, 2026
34dcb07
refactor(plugin-components): define the coverage state ranks with the…
rng1995 Oct 5, 2026
7523a83
refactor(evidence): name the fields of history entries and file changes
rng1995 Oct 5, 2026
8531985
refactor(mcp): delete the test-only validate_contained_mcp_servers
rng1995 Oct 5, 2026
fe41a58
refactor(plugin-components): share the additional-manifest parse
rng1995 Oct 5, 2026
777e4e8
refactor(evidence): fit entries in explicit shrink and drop passes
rng1995 Oct 5, 2026
4daacaa
fix(tier1): build the fail-closed plugin results and their schema che…
rng1995 Oct 5, 2026
e9f3a5d
refactor(tier1): read the plugin schema validator name from a constant
rng1995 Oct 5, 2026
31b67d6
refactor(tier3): build the plugin coverage rows in per-type helpers
rng1995 Oct 5, 2026
a1bdcaa
test(structured-data): use real \u escapes in the JSON escape-count test
rng1995 Oct 5, 2026
65adb72
refactor(evidence): assemble bundle sections with a plain fit-or-drop…
rng1995 Oct 5, 2026
fcccd40
perf(plugin-signals): index the declared MCP server names once per tr…
rng1995 Oct 5, 2026
7bc47dc
fix(tier1): extract the plugin preflight and recount component findin…
rng1995 Oct 5, 2026
15a2c57
perf(plugin-signals): grade activation coverage in one pass over the …
rng1995 Oct 5, 2026
f7a28ef
refactor(tier3): record which agents stage a coverage row natively
rng1995 Oct 5, 2026
f3b9d92
perf(plugin-components): drop the builder's quadratic bookkeeping
rng1995 Oct 5, 2026
4cc0123
perf(tier3): read each Harbor trial's findings once per collection
rng1995 Oct 5, 2026
50450cc
perf(plugin-signals): parse refs once per probe and attribute handoff…
rng1995 Oct 5, 2026
d5b71f0
refactor(endpoints): parse host allowlists once with HostAllowlist
rng1995 Oct 5, 2026
0b41813
refactor(tier3): split prepare_plugin_eval_package into named phases
rng1995 Oct 5, 2026
9e6d460
fix(mcp): stop reading runner options at the package the runner runs
rng1995 Oct 5, 2026
ab8b074
perf(plugin-dependencies): establish repository identity with two git…
rng1995 Oct 5, 2026
9123dc1
perf(plugin-signals): match refs against precomputed, casefolded names
rng1995 Oct 5, 2026
cc5ac38
fix(mcp): recognize a package runner named by a path with spaces
rng1995 Oct 5, 2026
9c184c2
refactor(tier3): drop the unused trajectory summary from saved trials
rng1995 Oct 5, 2026
11791d3
perf(plugin-dependencies): resolve the plugin root and normalize each…
rng1995 Oct 5, 2026
013adb6
fix(sarif): locate bundled-skill findings once and attribute them to …
rng1995 Oct 5, 2026
fec1bc0
refactor(embedding): pick the preferred skill manifest with one helper
rng1995 Oct 5, 2026
45241b9
refactor(plugin-components): keep the inventory builder's methods foc…
rng1995 Oct 5, 2026
43295af
refactor(tier3): split ClaudeCodeAdapter.build by component type
rng1995 Oct 5, 2026
5abc353
docs(tier3): say how native rule channels read a rule's scope
rng1995 Oct 5, 2026
06d42da
test(plugin-signals): check pattern deadlines and redaction windows w…
rng1995 Oct 5, 2026
134f0d5
refactor(helpers): pick the preferred skill manifest per folder in on…
rng1995 Oct 5, 2026
ba146a5
fix(dedup): count every bundled skill read against the plugin profile…
rng1995 Oct 5, 2026
44ae2e7
refactor(tier2): discover a plugin's bundled skills once per Tier 2 run
rng1995 Oct 5, 2026
4b86754
docs(plugin-evaluation): name the origin remotes that establish repos…
rng1995 Oct 5, 2026
bd8f7a2
refactor(endpoints): one classify_host for endpoints, redirects, and …
rng1995 Oct 5, 2026
59c7729
refactor(plugin-signals): drop small redundant checks
rng1995 Oct 5, 2026
2c8ece8
fix(reporting): use one rule for which unsupported component types we…
rng1995 Oct 5, 2026
e7743f0
fix(mcp): treat every PEP 440 spelling of an exact version as pinned
rng1995 Oct 5, 2026
786d4cc
docs(plugin-evaluation): say what the dependency audit does not cover
rng1995 Oct 5, 2026
f488ac8
perf(tier3): rewrite only reward.json after security attribution
rng1995 Oct 5, 2026
c222a23
fix(reporting): state plugin coverage once and render every exclusion…
rng1995 Oct 5, 2026
8519346
refactor(plugin-mcp): split MCP declaration collection into its phases
rng1995 Oct 5, 2026
3f93d6c
refactor(dedup): split context deduplication into named phases
rng1995 Oct 5, 2026
a3163c7
refactor(mcp): report mcpServers findings through one reporter
rng1995 Oct 5, 2026
acfa319
refactor(reporting): build the Tier 1 plugin view once and read prove…
rng1995 Oct 5, 2026
d007c94
perf(dedup): normalize each chunk embedding once when clustering
rng1995 Oct 5, 2026
027a826
refactor(endpoints): build endpoint findings with the MCP and hook fi…
rng1995 Oct 5, 2026
c36c57c
fix(secure-fs): define the Windows ctypes structures and prototypes once
rng1995 Oct 5, 2026
4d7b573
Merge fix2/tier3plugin: plugin Tier 3 flow and CLI review fixes
rng1995 Oct 5, 2026
f48a04d
refactor(agents): look up subagent permission-mode risks in one table
rng1995 Oct 5, 2026
b9bdf76
Merge fix2/model: manifest, formats and schema consolidation
rng1995 Oct 5, 2026
39fad65
refactor(reporting): decide plugin display classes and texts in the v…
rng1995 Oct 5, 2026
f755002
Merge fix2/components: plugin_components restructuring
rng1995 Oct 5, 2026
29fac45
Merge fix2/deps: one MCP runner parser for pinning, images and the de…
rng1995 Oct 5, 2026
5e692ea
refactor(hooks): parse each hook matcher regex once
rng1995 Oct 5, 2026
df264e8
Merge fix2/harbor: one arm-collection pipeline and Harbor results cle…
rng1995 Oct 5, 2026
1be888b
Merge fix2/signals: plugin signals and runtime evidence review fixes
rng1995 Oct 5, 2026
6b9222d
refactor(reporting): drop plugin view keys that nothing reads
rng1995 Oct 5, 2026
f87ced9
refactor(hooks): document remote-code detection on _shell_facts, not …
rng1995 Oct 5, 2026
6b6fb58
refactor(reporting): take activation types and the canary leak rate f…
rng1995 Oct 5, 2026
02cb97d
refactor(secure-fs): share discovery admission between the POSIX and …
rng1995 Oct 5, 2026
997aac1
refactor(reporting): share the humanize rule and the plugin-arm set
rng1995 Oct 5, 2026
92cf3f7
refactor(validators): fold small duplicates in the MCP, hook, and end…
rng1995 Oct 5, 2026
427d6d9
docs(plugins): describe token redaction in hook targets and MCP findings
rng1995 Oct 5, 2026
b874b51
refactor(url-policy): let report_text redact tokens in URL paths
rng1995 Oct 5, 2026
4a02e15
refactor(reporting): let the similarity views carry their title, colu…
rng1995 Oct 5, 2026
a325117
refactor(secure-fs): name the Windows attribute checks and native values
rng1995 Oct 5, 2026
54730fa
refactor(mcp): keep the env and fish option tables beside their parsers
rng1995 Oct 5, 2026
e163954
perf(reporting): index the plugin inventory once per SARIF report
rng1995 Oct 5, 2026
70add8f
refactor(evidence): report behavior evidence truncation without a sec…
rng1995 Oct 5, 2026
e153669
fix(benchmark): treat an overflowing score as missing instead of cras…
rng1995 Oct 5, 2026
1c0f56a
fix(plugin-schema): give the reporting-cap finding the worst hidden s…
rng1995 Oct 5, 2026
2d600f4
Merge fix2/url: one URL policy module, hook risk reporter and host al…
rng1995 Oct 5, 2026
1051c2b
refactor(plugin-manifest): parse the additional manifests in one place
rng1995 Oct 5, 2026
fbf3368
feat(secure-fs): add shared bounded-read, prefix-read and lstat-walk …
rng1995 Oct 5, 2026
7645423
refactor(tier3-report): compute each arm's overall score one way and …
rng1995 Oct 5, 2026
6927447
refactor(reporting): name the repeated plugin display bounds
rng1995 Oct 5, 2026
ba57985
refactor(plugin-eval): name the selected manifest by location.manifes…
rng1995 Oct 5, 2026
1dddea8
fix(mcp): keep ${VAR} userinfo references allowed in MCP server URLs
rng1995 Oct 5, 2026
14ac828
refactor(registry): use the shared secure_fs checks for catalog files
rng1995 Oct 5, 2026
c2e163a
refactor(plugin-eval): parse the selected manifest with parse_manifes…
rng1995 Oct 5, 2026
2a52316
refactor(registry): share the scoring setup and the embedding batch loop
rng1995 Oct 5, 2026
ffb1601
refactor(markdown): render each plugin subsection in its own function
rng1995 Oct 5, 2026
3e97218
refactor(cli-report): print each Tier 3 plugin subsection in its own …
rng1995 Oct 5, 2026
120e692
test(reporting): pin the re-declared state vocabularies to their prod…
rng1995 Oct 5, 2026
86f6a1a
chore(tier2): remove the unused alias check and collector exclusion o…
rng1995 Oct 5, 2026
daf9174
refactor(dedup): share the catalog content fingerprint with Check C-i…
rng1995 Oct 5, 2026
46a0798
chore(secure-fs): drop unused None pre-declarations in the POSIX atom…
rng1995 Oct 5, 2026
4bb992b
fix(plugin-eval): read a bundle manifest's mcpServers paths as the in…
rng1995 Oct 5, 2026
02a065e
fix(checks): bound shell variable expansion in the deterministic checks
rng1995 Oct 5, 2026
37b950a
docs(tier3): point moved-helper cross-references at their modules
rng1995 Oct 5, 2026
d7dde13
docs(sarif): keep the reason a finding's skill label is dropped from …
rng1995 Oct 5, 2026
d913e57
refactor(plugin-components): parse the selected manifest with parse_m…
rng1995 Oct 5, 2026
f7f2b5b
refactor(verifier): cap behavior evidence instead of re-compacting it
rng1995 Oct 5, 2026
477c7a7
test(secure-fs): make the tree-backed Windows handles refuse reparse …
rng1995 Oct 5, 2026
3813f02
refactor(plugin-components): name the default skills folder DEFAULT_S…
rng1995 Oct 5, 2026
8585e7d
refactor(plugin-components): name the declared-path, .env-walk and qu…
rng1995 Oct 5, 2026
0a60b2a
refactor(verifier): mark an exhausted judge budget by type, not by me…
rng1995 Oct 5, 2026
c377670
refactor(verifier): drive main()'s judged metrics from one table
rng1995 Oct 5, 2026
321d554
refactor(tier3): import the coverage-state sets from plugin_components
rng1995 Oct 5, 2026
0d981c5
docs(tier3): say which secrets judge evidence redacts
rng1995 Oct 5, 2026
d49ae8f
Merge fix2/reporting: one Tier 3 context and single sources of truth …
rng1995 Oct 5, 2026
9d36247
Merge fix2/tier2fs: secure_fs discovery, Windows handles and Tier 2 d…
rng1995 Oct 5, 2026
c694182
refactor(harbor): refuse or fall back through the plugin_native helpers
rng1995 Oct 5, 2026
37e66ac
refactor(tier3): spell the plugin package suffix once
rng1995 Oct 5, 2026
853acbb
fix(plugin-signals): do not count deleting the handoff artifact as wr…
rng1995 Oct 5, 2026
5e655e2
Merge fix2/verifier: verifier template and eval_core review fixes
rng1995 Oct 5, 2026
263fae3
test(tier3): pin one hook census read per trial
rng1995 Oct 5, 2026
a074147
fix(tier3): keep TimeoutError in a judge's time-budget error reason
rng1995 Oct 5, 2026
80835ab
Merge fix2/wave2a: cross-area follow-ups
rng1995 Oct 5, 2026
9479dbf
refactor(mcp): import the URL helpers and MCP command checks by their…
rng1995 Oct 5, 2026
9bf673b
refactor(plugin): scan each component config for permission flags in …
rng1995 Oct 5, 2026
dac72f8
refactor(plugin): drop plugin_components re-exports that nothing imports
rng1995 Oct 5, 2026
3554634
refactor(policy): import safe_url from url_policy
rng1995 Oct 5, 2026
254a872
refactor(dependencies): classify image registries with endpoint_resol…
rng1995 Oct 5, 2026
fb6e762
refactor(mcp-proof): parse the private-host allowlist once per probe run
rng1995 Oct 5, 2026
53b8567
fix(redaction): redact GitHub, GitLab and Slack tokens in logs and ar…
rng1995 Oct 5, 2026
e096d75
refactor(hooks): read hook package runners with mcp_static.parse_mcp_…
rng1995 Oct 5, 2026
a779dfe
refactor(plugin): name the quoted-entry limit of component findings once
rng1995 Oct 5, 2026
39fbd66
refactor(plugin): define the PLUGIN_SCHEMA finding category once
rng1995 Oct 5, 2026
7a7d20b
fix(dedup): point skill-level Tier 2 findings at the skill root
rng1995 Oct 5, 2026
fb96cd4
fix(canary): read the converter fallback keys of a write body
rng1995 Oct 5, 2026
a03b1ee
refactor(fs): walk plugin paths with secure_fs.lstat_walk
rng1995 Oct 5, 2026
a7793a6
refactor(tier3): read the harness log prefix with secure_fs.read_bounded
rng1995 Oct 5, 2026
b185023
refactor(secure-fs): delete the descriptor-only SecureRoot open wrappers
rng1995 Oct 5, 2026
3732800
fix(checks): unquote quoted assignment values in the network check
rng1995 Oct 5, 2026
5f6e78c
refactor(structured-data): parse npm lockfiles with load_bounded_json
rng1995 Oct 5, 2026
52c3bef
refactor(tier3): drop the unused get_read_calls, get_bash_commands an…
rng1995 Oct 5, 2026
b6d3f1c
fix(helpers): record one normalized root for every bundled skill mani…
rng1995 Oct 5, 2026
d7783a7
Merge fix2/wave2b-sec: redaction and verifier gaps
rng1995 Oct 5, 2026
b60f325
refactor(embedding): pick skill manifests with utils.helpers.preferre…
rng1995 Oct 5, 2026
b3be263
refactor(dedup): parse the plugin profile manifest with plugin_format…
rng1995 Oct 5, 2026
a59fae0
docs(tier2): excluded directories do not count toward the discovery p…
rng1995 Oct 5, 2026
1674c87
refactor(tier3): build the run summary's Integration block with integ…
rng1995 Oct 5, 2026
5abd6ec
refactor(cli): call tier3_report.incomplete_reason by its public name
rng1995 Oct 5, 2026
15a04b7
refactor(cli): split the bundled-skill label with plugin_sections.spl…
rng1995 Oct 5, 2026
8785c05
refactor(tier3-report): score dimensions and read N/A lists with the …
rng1995 Oct 5, 2026
586baaf
refactor(reporting): read the statistics blocks from stats.STATISTICS…
rng1995 Oct 5, 2026
367db54
refactor(plugin): keep the plugin state vocabularies in one dependenc…
rng1995 Oct 5, 2026
0483adb
fix(dependencies): read an image registry's port only from decimal di…
rng1995 Oct 5, 2026
5660015
test(helpers): compare bundled skill roots with the working directory…
rng1995 Oct 5, 2026
02c3c22
Merge fix2/wave2b-cons: adopt the shared helpers everywhere
rng1995 Oct 5, 2026
d1de089
fix(validators): recognise every GitHub token prefix as an inline secret
rng1995 Oct 5, 2026
66b0cd6
refactor(dedup): drop the unused CONTENT_DEDUP_MAX_PAIR_COMPARISONS c…
rng1995 Oct 5, 2026
dfffc06
build(tier3): move plugin evaluation to Harbor 0.24.0
chrisknvidia Oct 5, 2026
9b80ca4
fix(plugin): check manifests and component paths the way clients load…
chrisknvidia Oct 5, 2026
99489ae
fix(plugin): grade hooks, privileges, LSP and overrides like the clients
chrisknvidia Oct 5, 2026
738d22e
fix(mcp): read MCP declarations, endpoints and pins by what they mean
chrisknvidia Oct 5, 2026
1ce3849
fix(deps): keep the dependency gate and audits honest at Tier 1 and T…
chrisknvidia Oct 5, 2026
888fb4e
fix(tier3): score runtime security and canary leaks on real actions
chrisknvidia Oct 5, 2026
b7099bb
fix(tier3): grade routing, order, handoff and conflict signals on rea…
chrisknvidia Oct 5, 2026
cef1c46
fix(tier3): prove MCP servers and grade their calls on what the agent…
chrisknvidia Oct 5, 2026
02f80a5
fix(tier3): compute lift on a shared basis and keep it through partia…
chrisknvidia Oct 5, 2026
6407060
fix(reports): attribute SARIF findings and keep coverage and BENCHMAR…
chrisknvidia Oct 5, 2026
0a68334
test(plugin): cover the static and measured context-cost fixes
chrisknvidia Oct 5, 2026
3eda61d
fix(gate): make the Tier 3 gate, exit code, footer and reports agree
chrisknvidia Oct 5, 2026
88b9693
docs: describe the plugin-evaluation fixes and record them in CHANGELOG
chrisknvidia Oct 5, 2026
f80a1cf
fix(tier3): do not treat flag values of credential-named variables as…
chrisknvidia Oct 6, 2026
576d85c
fix(mcp): remove exponential backtracking from the version tag pattern
chrisknvidia Oct 6, 2026
90993ae
fix(security): remove exponential backtracking from the version label…
chrisknvidia Oct 6, 2026
d07be2b
fix(cli): always write content-relative finding paths with "/"
chrisknvidia Oct 6, 2026
12993a7
fix(plugin-deps): name a case-only typo on case-sensitive filesystems
chrisknvidia Oct 6, 2026
79e24ea
test(tier3): check that the exfiltration scan scales, not a fixed time
chrisknvidia Oct 6, 2026
d2d4950
fix(plugin-schema): cap findings by the severity the policy gives them
rng1995 Oct 6, 2026
cc03585
fix(utils): keep the JSON preflight's memory linear in a string of es…
rng1995 Oct 6, 2026
bf80d34
fix(detection): treat a linked or special root plugin.json as a plugin
rng1995 Oct 6, 2026
66aa833
fix(tier2): rediscover bundled skills right before the catalog checks…
rng1995 Oct 6, 2026
4515481
fix(collector): score only rewards in Harbor's verifier layouts
rng1995 Oct 6, 2026
d4d8ea1
fix(verifier): read only the over-long expansion as unsettled
rng1995 Oct 6, 2026
da99865
fix(plugin-signals): count MCP write tools that name the artifact und…
rng1995 Oct 6, 2026
dab4383
fix(tier3): read plugin.json component paths with the Tier 1 placehol…
rng1995 Oct 6, 2026
f7f8b8a
fix(reporting): place a labelled finding in the bundled skill that co…
rng1995 Oct 6, 2026
96abd41
fix(plugin-signals): report a dataset pattern the regex engine cannot…
rng1995 Oct 6, 2026
4d8e9ad
fix(reporting): read finding paths in SARIF as the inventory counts them
rng1995 Oct 6, 2026
3dbe82c
fix(plugin-paths): read hook scripts through SecureRoot.read_bytes
rng1995 Oct 6, 2026
e1d9b98
refactor(reporting): drop the per-call ComponentIndex wrappers
rng1995 Oct 6, 2026
d5e7039
fix(plugin-signals): read apply_patch bodies under value and skip mov…
rng1995 Oct 6, 2026
01f34db
fix(verifier): read the rest of a network payload past an over-long v…
rng1995 Oct 6, 2026
2c5afed
fix(validators): redact whole private keys and JWTs in report text
rng1995 Oct 6, 2026
60cdb96
fix(reporting): name each not-staged component BENCHMARK.md's table l…
rng1995 Oct 6, 2026
50e6116
fix(reporting): list every staged component no plugin trial exercised…
rng1995 Oct 6, 2026
2c75c77
fix(secure-fs): build the Windows ctypes structures and API under one…
rng1995 Oct 6, 2026
79a8fc2
fix(validators): never show userinfo that a backslash turns into the …
rng1995 Oct 6, 2026
d07d219
perf(plugin-signals): index the declared MCP servers once per lookup …
rng1995 Oct 6, 2026
a4275e8
fix(verifier): flag subagent logs a listing bound or a deep line leav…
rng1995 Oct 6, 2026
d82dc8a
fix(validators): start 'sk-' keys at a word, and add the canonical to…
rng1995 Oct 6, 2026
6e3e2a3
perf(reporting): import the Tier 3 helpers only in the views that use…
rng1995 Oct 6, 2026
b99a00e
fix(validators): read URL query credentials up to the fragment, and f…
rng1995 Oct 6, 2026
9a0fccd
fix(validators): read an MCP command line by its first word
rng1995 Oct 6, 2026
044c018
perf(reporting): decide statically checked types from the raw static-…
rng1995 Oct 6, 2026
8d0cd19
fix(helpers): parse https origins with credentials and a port correctly
rng1995 Oct 6, 2026
f158da0
fix(dependencies): say when an unsupported origin is why identity is …
rng1995 Oct 6, 2026
79bd011
fix(reporting): credit a monitor's Hook risk row to monitors, not hooks
rng1995 Oct 6, 2026
47ef900
fix(validators): look through command wrappers when reading MCP runne…
rng1995 Oct 6, 2026
fccb135
refactor(reporting): require the merged plugin block in _plugin_child…
rng1995 Oct 6, 2026
e0a9177
fix(validators): read npm runner options the way npx does, fail-closed
rng1995 Oct 6, 2026
09cca7f
perf(reporting): resolve the SARIF roots once and each finding path once
rng1995 Oct 6, 2026
7d92214
fix(validators): read every package uvx installs, including -w and --…
rng1995 Oct 6, 2026
b894153
fix(verifier): show the judges real shell writes, not quoted comparisons
rng1995 Oct 6, 2026
996216d
fix(collector): end the Codex session walk at a directory larger than…
rng1995 Oct 6, 2026
cfdd2a6
perf(collector): project each judge sidecar as soon as it is read
rng1995 Oct 6, 2026
a86679b
fix(validators): read a deno module's version only from its URL path
rng1995 Oct 6, 2026
a42d280
fix(plugin-paths): count every folder the scans prune as unscanned
rng1995 Oct 6, 2026
92bf4a4
test(collector): check that the saved with-skill rewards carry the se…
rng1995 Oct 6, 2026
2e49f09
fix(plugin-components): list nested component folders the scans skip
rng1995 Oct 6, 2026
c698fd8
fix(redaction): keep the token patterns where eval_core loads them wi…
rng1995 Oct 6, 2026
d045570
fix(plugin-paths): reject a drive letter or colon in any declared pat…
rng1995 Oct 6, 2026
1648d27
fix(validators): never echo a credential in command findings, pin det…
rng1995 Oct 6, 2026
5465369
fix(redaction): redact Slack refresh, Hugging Face and npm tokens and…
rng1995 Oct 6, 2026
c577e62
perf(redaction): redact every prefixed token shape in one pass
rng1995 Oct 6, 2026
42054ed
fix(dedup): find catalog plugins whose client manifest is a case variant
rng1995 Oct 6, 2026
024259b
fix(collector): count a canary leak from a trial whose judge failed
rng1995 Oct 6, 2026
d947090
fix(dependencies): report pins that pip-audit skips as unverified, no…
rng1995 Oct 6, 2026
83e3adc
fix(verifier): show the judges placeholder tokens of every redacted s…
rng1995 Oct 6, 2026
7827b27
refactor(plugin-components): drop the parsed_additional_manifests and…
rng1995 Oct 6, 2026
306aa03
docs(plugin-paths): reflow the normalize_declared_path docstring
rng1995 Oct 6, 2026
11f4d85
fix(validators): match Unicode '*.' host patterns against punycode hosts
rng1995 Oct 6, 2026
c9a120a
fix(plugin-eval): list the native Claude Code arm on the skill-dir an…
rng1995 Oct 6, 2026
27808c3
refactor(plugin): use mcp_static's _split_words for hook commands
rng1995 Oct 6, 2026
6dab46f
fix(runtime-evidence): redact hook census labels whole before cutting…
rng1995 Oct 6, 2026
d65f7c1
refactor(validators): drop the unused host_is_allowlisted wrapper
rng1995 Oct 6, 2026
8bb9ae0
fix(cli): end a failed evaluate-plugin run with the INCOMPLETE reason…
rng1995 Oct 6, 2026
96d9474
docs(collector): say what projecting each judge sidecar bounds
rng1995 Oct 6, 2026
2803ee8
refactor(validators): spell out report_text's truncation and the comm…
rng1995 Oct 6, 2026
a7da3f4
test(collector): drop a type-ignore comment from the canary test helper
rng1995 Oct 6, 2026
8bcb029
refactor(dependencies): report skipped pip-audit pins through one cap…
rng1995 Oct 6, 2026
d1c4f93
fix(validators): read a command string as one program path only when …
rng1995 Oct 6, 2026
5818092
fix(canary): charge an apply_patch token only to the file whose secti…
rng1995 Oct 6, 2026
27ddeb0
fix(canary): read an apply_patch patch piped in on standard input
rng1995 Oct 6, 2026
0c7fa0a
Merge fix181/reporting: address the #181 review (reporting)
rng1995 Oct 6, 2026
d896b19
Merge fix181/model: address the #181 review (model)
rng1995 Oct 6, 2026
e1453e9
Merge fix181/tier3: address the #181 review (tier3)
rng1995 Oct 6, 2026
9162391
Merge fix181/validators: address the #181 review (validators)
rng1995 Oct 6, 2026
c661cd1
fix(verifier): follow declared, env and variable-named commands in th…
rng1995 Oct 6, 2026
7ee7dc2
Merge fix181/verifier: address the #181 review (verifier)
rng1995 Oct 6, 2026
d5099ba
Merge #28 head 79e24ea45 into review fixes batch 2
rng1995 Oct 6, 2026
b3cfd6d
test(harbor): give two process-timing tests load-safe budgets
rng1995 Oct 6, 2026
e10e417
fix(ci): keep synthetic test credentials out of Gitleaks findings
rng1995 Oct 6, 2026
3da55da
fix(security): redact secrets in linear time
rng1995 Oct 6, 2026
044c914
style(tests): format the private-key redaction fixture
rng1995 Oct 6, 2026
76755e3
test(dedup): read the bundled-skill reports as UTF-8
rng1995 Oct 6, 2026
43f0a5b
Merge review fixes batch 2 for plugin evaluation (#181)
rng1995 Oct 6, 2026
d0dcbcc
Merge main (v0.5.0) into plugin evaluation
rng1995 Oct 6, 2026
068c545
Merge main (#186 v0.5.0 docs refresh) into plugin evaluation
chrisknvidia Oct 7, 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
  •  
  •  
  •  
22 changes: 22 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,27 @@ jobs:
- name: Lint
if: ${{ needs.classify-changes.outputs.docs_only != 'true' }}
run: uv run ruff check .
# The Harbor verifier runs these files with the task image's python3, which
# can be older than the Python SkillEvaluator itself needs. Compiling catches
# syntax; the smoke script also runs code that needs newer runtime features.
- name: Compile Harbor verifier files on Python 3.9 and 3.11
if: ${{ needs.classify-changes.outputs.docs_only != 'true' }}
shell: bash
run: |
set -euo pipefail
files=(
src/skillevaluator/tier3/harbor/templates/*.py
src/skillevaluator/tier3/eval_core/log_converters.py
src/skillevaluator/tier3/eval_core/codex_tool_call_normalizer.py
src/skillevaluator/evidence.py
)
for version in 3.9 3.11; do
uv run --no-project --python "$version" -- python -I -c \
"import sys; [compile(open(p, encoding='utf-8').read(), p, 'exec') for p in sys.argv[1:]]" \
"${files[@]}"
uv run --no-project --python "$version" --with "idna>=3.10,<4" -- python -I \
scripts/ci/smoke_harbor_verifier.py
done
- name: Run tests with coverage
if: ${{ needs.classify-changes.outputs.docs_only != 'true' }}
run: >-
Expand Down Expand Up @@ -319,6 +340,7 @@ jobs:
tests/test_results_location_legacy_compatibility.py
tests/test_tier3_compare.py
tests/test_tier3_progress.py
tests/utils/test_secure_fs_platform.py
tests/utils/test_secure_fs_selected_reads.py
tests/test_oss_packaging.py

Expand Down
41 changes: 41 additions & 0 deletions .gitleaks.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,26 @@ targetRules = ["generic-api-key"]
regexes = ['''^sk-AbCdEf1234567890$''']
paths = ['''^tests/test_tier3_(progress|result_display)\.py$''']

[[allowlists]]
description = "Synthetic API key used by plugin hook inline-secret tests"
condition = "AND"
targetRules = ["generic-api-key"]
regexes = ['''^abcd1234secret$''']
paths = ['''^tests/validators/test_plugin_component_risk\.py$''']

[[allowlists]]
description = "Synthetic Docker registry login (base64 of a fake user:password) used by the scanner-credential tests"
condition = "AND"
targetRules = ["generic-api-key"]
regexes = ['''^dXNlcjpodW50ZXIy$''']
paths = ['''^tests/validators/test_audits_endpoints_review_fixes\.py$''']

[[allowlists]]
description = "Synthetic basic-auth, cloud-key and URL-token fixtures in the first revisions of the security-evidence and MCP-hardening tests; both files now assemble them from split literals"
condition = "AND"
commits = ["66ae1d4c1188e2a8d9f0586abe0a895e04b78758", "727826808a2d4c3c2b7c393d67f5339efde28532"]
paths = ['''^tests/tier3/test_security_finding_evidence\.py$''', '''^tests/validators/test_mcp_hardening\.py$''']

[[allowlists]]
description = "Synthetic NVIDIA Build token used by streaming redaction tests"
condition = "AND"
Expand All @@ -30,3 +50,24 @@ condition = "AND"
targetRules = ["generic-api-key"]
regexes = ['''^cw-key-123456$''']
paths = ['''^tests/test_harbor_environment_contract\.py$''']

[[allowlists]]
description = "Synthetic JWT in the first revision of the hook-census label-window test; the test now assembles it from its parts"
condition = "AND"
targetRules = ["jwt"]
commits = ["6dab46f91eb7323b27d0e90ecb7c90f5c38e7da4"]
paths = ['''^tests/tier3/test_hook_census\.py$''']

[[allowlists]]
description = "Synthetic deploy token in the first revision of the MCP bundle userinfo test; the test now splits it"
condition = "AND"
targetRules = ["generic-api-key"]
commits = ["79a8fc2eb731bb155bb6b725e3655790eae2fa02"]
paths = ['''^tests/validators/test_plugin_components\.py$''']

[[allowlists]]
description = "Synthetic OpenSSH private-key fixtures in the first revision of the report-text redaction tests; the tests now assemble the PEM label"
condition = "AND"
targetRules = ["private-key"]
commits = ["2c5afed9274221fb8a408eeee0601ad53bad9090"]
paths = ['''^tests/validators/test_url_policy\.py$''']
460 changes: 460 additions & 0 deletions CHANGELOG.md

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,8 +150,8 @@ skillevaluator validate ./my-skill
`--full` remains supported but is unnecessary.
Use `--tiers 1,2` or `--no-tier3` to skip live evaluation; `--tiers 1` runs
only the static suite. `--no-autopilot` requires an existing evaluation source.
Rules, workflows, and plugins retain their applicable validation stages without
automatically enabling skill evaluation.
Rules, workflows, and plugins skip automatic Tier 3; see
[Plugin Evaluation](https://docs.nvidia.com/skills/skillevaluator/plugin-evaluation) for plugins.

Generate and review broader coverage; templates omit negatives unless authored in `EVAL.md`:

Expand Down
35 changes: 31 additions & 4 deletions THIRD_PARTY_NOTICES.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,39 @@
# Third-Party Notices

This file lists the direct third-party Python dependencies declared by this
distribution. `pyproject.toml` defines the dependency groups, and `uv.lock`
records the exact resolved dependency set used for this release.
This file lists direct third-party Python dependencies and vendored test
fixtures in this distribution. `pyproject.toml` defines the dependency groups,
and `uv.lock` records the exact resolved dependency set used for this release.

| Dependency group | Packages and licenses |
| --- | --- |
| Base | Click (BSD-3-Clause), IDNA (BSD-3-Clause), Jinja2 (BSD-3-Clause), Markdown-It-Py (MIT), Pydantic (MIT), PyYAML (MIT), Rich (MIT) |
| Base | Click (BSD-3-Clause), IDNA (BSD-3-Clause), Jinja2 (BSD-3-Clause), Markdown-It-Py (MIT), Pydantic (MIT), PyYAML (MIT), regex (Apache-2.0 AND CNRI-Python), Rich (MIT) |
| LLM | Anthropic (MIT), Boto3 (Apache-2.0), LiteLLM (MIT), OpenAI (Apache-2.0) |
| Tier 3 | Harbor (Apache-2.0), MCP (MIT), PyJWT (MIT), python-dotenv (BSD-3-Clause) |
| Security | Bandit (Apache-2.0), pip-audit (Apache-2.0) |

## OpenClaw agent-skills test fixture

`tests/fixtures/openclaw-autoreview/` contains pinned files from
`openclaw/agent-skills`, commit `2a409d348a4bcf6f15e41e9a20efd0b298a32528`,
path `skills/autoreview`. The source repository is licensed under the MIT
License:

Copyright (c) 2026 openclaw

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
5 changes: 3 additions & 2 deletions docs/benchmark-rollout.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,9 @@ Efficiency=`skill_efficiency`. A format-only rollout must not silently accept a
different dataset or agent/model.

A dimension passes at 50%. The overall verdict passes only when every configured
dimension passes for at least one supported agent; lift is diagnostic evidence
and does not override that gate.
dimension passes for at least one supported agent; lift never overrides that
verdict, but a confirmed regression (a FAIL-band lift whose whole interval is
below zero) makes the card FAIL.

## 5. Run the publication gate

Expand Down
Loading
Loading