feat(plugin): Add Plugin evaluation support across all tiers - #28
chrisknvidia wants to merge 23 commits into
Conversation
Restores and rebases the plugin evaluation work from PR #17 onto the rewritten main history. Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
3a51f76 to
a4a5e63
Compare
Use boundary-aware checks for reserved names, description heuristics, API and error documentation, MCP guidance, time references, README mentions, and nested Markdown links. Add regression coverage for #30. Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
rng1995
left a comment
There was a problem hiding this comment.
The plugin evaluation implementation and its follow-up hardening are well covered, but I found one small diff-hygiene issue to clean up.
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
rng1995
left a comment
There was a problem hiding this comment.
Fresh review found two actionable security issues in the plugin evaluation staging path. The previous EOF-hygiene thread is already fixed and resolved. I will address these findings while updating the branch from current main.
…on-all-tiers Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com> # Conflicts: # docs/tier2-deduplication.mdx # src/skillevaluator/deduplication/utils/skill_collector.py # src/skillevaluator/embedding/extractor.py
…on-all-tiers Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
…on-all-tiers Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com> # Conflicts: # .github/workflows/ci.yml # CHANGELOG.md # src/skillevaluator/tier3/harbor/adapter.py # src/skillevaluator/tier3/harbor/runner.py # src/skillevaluator/utils/secure_fs.py # tests/test_harbor_input_staging.py
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
rng1995
left a comment
There was a problem hiding this comment.
Approved after fresh security review and remediation: all review threads are resolved, the branch is conflict-free against current main, the complete local suite passes (3,999 passed, 21 skipped, 3 deselected), and all 15 GitHub checks pass including Windows, packaging, DCO, and security scans.
…on-all-tiers Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com> # Conflicts: # CHANGELOG.md # src/skillevaluator/cli.py # tests/validators/test_policy.py
…on-all-tiers Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com> # Conflicts: # CHANGELOG.md # docs/tier1-validation.mdx # src/skillevaluator/models/skill.py # src/skillevaluator/validators/quality_score.py # tests/validators/test_quality_score.py
mohgupta-ship-it
left a comment
There was a problem hiding this comment.
Posted by Codex on behalf of Mohit.
Request changes: plugin provenance is persisted through a symlink-following path after the long-running evaluation. This is a medium output-integrity risk for a same-privilege actor able to modify the selected results location. The inline note describes a no-follow, atomic remediation and the regression coverage needed.
mohgupta-ship-it
left a comment
There was a problem hiding this comment.
Codex review on behalf of Mohit — REQUEST CHANGES
Critical sandbox/path-integrity blocker. Two safe reproductions show plugin-controlled Git symlinks can cause host-readable content to be staged before Docker isolation: (1) a member evals/evals.* symlink is accepted through find_eval_file(...).exists(), parsed, and copied into task inputs before any symlink validation; (2) a repo-root skills or rules symlink is resolved before containment, making the external target the trusted root.
This is a pre-sandbox host-file disclosure path, not only a race. Reject links/reparse points and mount crossings before resolution; use descriptor-anchored no-follow reads/copies for member datasets (new and legacy layouts); preserve the lexical clone-root boundary for canonical refs; and add regressions for both attack paths.
Secondary integrity issue: fail closed when the Git-origin slug is unavailable — the current fallback can mark a foreign reference as fully evaluated.
|
@chrisknvidia Gentle ping when you have a chance: there are still three unresolved review threads on this PR. Please take a look and update the branch or reply on the threads where you disagree. |
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
|
Updated in |
Restoration note
This PR replaces #17, which GitHub permanently closed after the default-branch history was consolidated and the original head branch was deleted and recreated. The original discussion and commit history remain available on #17.
This replacement contains the intended plugin-evaluation change set rebased onto the current
mainas one Narendran commit. The olderresult_display.pydelta was not reapplied because currentmainalready contains the newer, stronger hardened rendering behavior; no plugin functionality was dropped.Summary
bothsafely falls back to effectiveness and records whyPublic adaptations and exclusions
mainremain intactVerification
uv run pytest -q: 3,154 passed, 7 skipped, 3 deselecteduv run ruff check: passedtwine check --strict: passed for both distributionsA live remote Tier 3 Harbor/plugin evaluation was not run during reconstruction; the verified scope is the complete local suite, focused integration tests, packaging, and static boundary checks.
This PR is intentionally not merged.