Repository navigation
feat!: judge ClawHub skills and plugins from scanner evidence only - #152
Conversation
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
The clawhub and clawhub-aig profiles now decide with an evidence-only
Codex run instead of the Decisions API judge, and their overview is
evidence-only too. A new judge/overview evidenceOnly setting keeps the
artifact copy, its manifest and host path out of the workspace and
refuses {{ target.files }} and the artifact-reading parity prompt; new
{{ scanner_results }} and {{ run_context }} placeholders carry every
scanner's status, error and unchanged report. The profile disables
Codex's file, shell, image, web and code-execution tools, verified
against codex-cli 0.164.0 requests. The Decisions harness stays
available through --judge.
…o verified context Evidence-only metadata.json now carries only the target kind and id; the target input (often an absolute host path) was still present. The evidence judge prompt grants @openclaw default trust only to a publisher verified by ClawHub in the job context, never to a name or a publisher claim quoted in scanner results. Regressions cover both.
9163076 to
f720ac4
Compare
|
Codex review: needs maintainer review before merge. What this changesThis PR makes the bundled ClawHub judge and overview consume scanner evidence without receiving a copy of the scanned artifact. Example: Scan a plugin named probe-plugin with the clawhub profile.
Review scores
ProductKind: Feature · Worth it: Yes · Fix scope: Complete Merge readiness✅ Ready for maintainer review Keep open: this maintainer-authored PR adds behavior absent from main, resolves both prior findings, and has no remaining actionable code findings. Priority: P2 Before mergeNone. FindingsNone. Tests
Agent review detailsHow this fits togetherProfiles configure scanner adapters and external judge commands; the shared runner prepares their workspaces, renders evidence, and records the verdict and optional advisory overview. flowchart TD
A[Skill or plugin] --> B[Scanner adapters]
B --> C[Raw scanner reports]
C --> D[Evidence only workspace]
D --> E[Codex judge]
E --> F[Recorded verdict]
F --> G[Advisory overview]
C --> G
Technical reviewBest possible solution: Land the scoped evidence-only profile change with the documented result-contract break and general judge overrides preserved. Do we have a high-confidence way to reproduce the issue? This is an intentional capability change: current-main source copies the artifact into judge workspaces, while the proposed mode omits it. Is this the best way to solve the issue? The implementation uses the existing shared harness and profile boundary, preserves raw evidence, and keeps artifact-capable overrides available. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against bc69d8fb4aa0. Provenance checked
TestingProof path: in-process harness. SecurityNone. EvidenceWhat I checked:
Likely related people:
Preflight sourceSource unknown. Source comparison at the observed PR snapshot only. Completion is self-reported; body, policy, tests, execution, and report bytes are not verified. LabelsLabel changes:
Label justifications:
Rank-up movesOptional improvements that raise the rating; they are not merge blockers.
Rating scale6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior. WorkflowClawSweeper edits this one comment on every review. Comment HistoryReview history (1 earlier review cycle)
Reviewed November 6, 2026, 3:27 PM ET / 20:27 UTC (Revision 2). |
…ions actionable
The partial SkillSpector contract and AGENTS.md now distinguish an
artifact-capable judge, which investigates gaps in the artifact, from
an evidence-only judge, which treats them as uncertainty. Both
evidence-only rejection errors name the fix: use {{ scanner_results }}
or set evidenceOnly: false.
|
@clawsweeper re-review |
|
🦞👀 Re-review progress:
|
Why
ClawHub's final verdict should come from the scanners' evidence alone. The current
clawhubjudge (Decisions API) and its overview read the artifact itself. That lets the judge reach its own conclusions about code the scanners already examined, and it puts untrusted artifact text directly into the judge's prompt.What changes
clawhub(skills and plugins) andclawhub-aignow judge with native Codexgpt-6.1-sol(high reasoning) from scanner results only. The overview (gpt-6-luna) also works from evidence only.aig-mcpreports only.evidenceOnlysetting: new optionaljudge.evidenceOnly/overview.evidenceOnlyprofile setting, off by default. When on:artifact/copy.metadata.jsonkeeps only the targetkindandid; there is no file manifest, target input or host path.{{ target.files }}and the artifact-reading ClawHub parity prompt fail before the command starts.--judge/--overviewoverride keeps the general workspace.{{ scanner_results }}carries every scanner's status, error and unchanged raw report, so failed or partial coverage stays visible.{{ run_context }}carries the target kind and id plus the--contextJSON.--judge; its tests pass that harness explicitly.Breaking:
judge.resultkeeps its typed fields but no longer carries the Decisionsdecisionrecord.Codex tools: verified status and known limitation
Checked against codex-cli 0.164.0's real Responses requests, using a loopback stub:
exec_command,shellorlocal_shellcall is rejected asunsupported calland runs nothing.functions.exec(code mode). Withcode_mode_hostdisabled it returnscode-mode host is disabled. Even when enabled,apply_patchis rejected by the read-only sandbox, no MCP server is configured, and the JavaScript isolate has norequire,Denoorprocess.collaboration.*(spawning other agents),waitandrequest_user_input. No supported 0.164 setting removes them:agents.max_threads=0is rejected at startup ("must be at least 1").agents.max_depth=0is accepted, but a forcedspawn_agentcall still starts an agent.--jsonevent stream does not showspawn_agentcalls, so "no tool calls in events" does not prove no agent was spawned.Before / after
maine2d64e1TestClawHubProfilesJudgeSkillsFromScannerEvidenceOnly(clawhub, clawhub-aig)TestClawHubProfileJudgesPluginsFromAIGMCPEvidenceOnlyTestClawHubEvidenceJudgeNeverStartsOnScannerFailureTestEvidenceOnlyWorkspaceHoldsNoArtifact(absolute target input omitted)9163076)The new tests check:
artifact/directory and no artifact text;aig-mcpreport.Real CLI against the stub, with real Codex 0.164 (each request's
tools/additional_toolslist was captured; the stub records requests only, so it has no attachable artifact beyond these fixtures):artifact/.Validation
bc69d8f(feat: give plugin scanner commands a 30-minute budget #151, plugin scanner 30-minute budget); the only conflict was the CHANGELOG, andgit range-diffshows no other change.go vet ./...passes.go test -p 1 -count=1 ./...passes all 10 packages.make docs-sitepasses.--engine codex --model gpt-6.1-sol --thinking high --mode branch --base origin/main) on9163076: scoped-clean, "patch is correct (0.86)". The rebased headf720ac4has the same patch apart from CHANGELOG context.f720ac4raised two P3 items, fixed in7349f04: the partial-report docs andAGENTS.mdnow separate artifact-capable judges from evidence-only judges, and both evidence-only rejection errors name the fix. Autoreview on7349f04: scoped-clean, "patch is correct (0.83)". The full suite with-p 1,go vetandmake docs-sitepass.go test ./...run under heavy host load failedTestDefaultCommandCancellationIsNotSuccessandTestBenchmarkCLIEmitsCanceledPriorCaseEvidence. Both pass alone, and the benchmark test fails the same way onmain.