Skip to content

feat: adopt reviewed Sol security consumer policy - #3998

Merged
Patrick-Erichsen merged 7 commits into
mainfrom
patrick/security-model-policy-20261019
Oct 20, 2026
Merged

Patrick-Erichsen merged 7 commits into
mainfrom
patrick/security-model-policy-20261019

Conversation

@Patrick-Erichsen

Copy link
Copy Markdown
Collaborator

Summary

  • Apply the approved security policy: GPT-6.1 Sol/high for final review and Sol/medium for the two model-backed scanner adapters, with Standard service and explicit operator overrides retained.
  • Build merged ClawScan 5be7f8e97fa474f0aa9eb443f38d9e3d5f51226b and install its exact matching source-pinned Responses adapters, instead of using an older npm profile with incompatible dependencies.
  • Keep configured judge identity separate from model-authored output and provider-observed identity. Preserve legacy unknown provenance, Endor report-only behavior, and existing PluginInspector fixes.

Verification

  • Fresh exact-source install: clean Go revision, 18 SkillSpector + 43 AIG adapter tests, dependency compatibility and installed CLI checks passed.
  • Actual real-provider three-lane benign/malicious acceptance passed, first through the built-in provider and then through transparent telemetry instrumentation. No artifact instructions were executed.
  • Telemetry: 18 completed requests; all provider responses reported gpt-6.1-sol and default. The two scanner APIs explicitly send service_tier: default. Codex 0.160 explicitly configures Standard in CLI argv but intentionally omits that field on the wire; judge responses report default.
  • ci:static, ci:types-build, ci:unit (7,913 passed, three skipped), ci:packages, 120 targeted security tests and seven installer tests passed.
  • Exact committed branch Sol/high/Standard P0–P3 autoreview: scoped-clean, no actionable findings.

Boundaries

Two synthetic text-only fixtures prove wiring and basic acceptance, not scanner-quality benchmarks. Complete judge telemetry uses a transparent loopback custom-provider transport without modifying model/effort/tier bytes; separate built-in-provider runs also passed. Host acceptance is macOS arm64; upstream native Linux amd64/arm64 runtime-image proof is linked from ClawScan #68. No production queue processing, deployment, Endor activation, or public ClawScan package release is part of this PR.

@Patrick-Erichsen
Patrick-Erichsen requested a review from a team as a code owner October 20, 2026 03:15
@clawsweeper

clawsweeper Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

@vercel

vercel Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
clawhub Ready Ready Preview Oct 20, 2026 3:17am UTC

Request Review

@Patrick-Erichsen

Copy link
Copy Markdown
Collaborator Author

Parent-inspected proof for consumer head 6818f639b4b3bbee54f472b125db9467047240c1.

Fresh installed ClawScan source: 5be7f8e97fa474f0aa9eb443f38d9e3d5f51226b, Go metadata vcs.modified=false, binary SHA-256 1c8ae7f28ece2921ffb86342d7e489f81864cad6579d8fa1ca0d89357ecad036. Exact upstream reviewed source tree matches merged #68. Fresh patched adapters: 18 SkillSpector + 43 AIG tests, compatibility checks and entrypoint checks passed.

Fixture Real judge Consumer AIG findings
Benign greeting benign/high clean 0
Synthetic credential theft/injection malicious/high blocked 2

SkillSpector: 7 completed requests, Sol/medium, explicit wire default. AIG: 4, Sol/medium, explicit wire default. Judge: 7, Sol/high, explicit CLI default, wire field omitted by Codex 0.160, observed default response tier. All 18 completed responses identify Sol/default. This distinction is intentional, not an assertion that Codex sent an explicit API field. Original built-in-provider acceptance also passed both fixtures; full observed judge transport telemetry comes from a separate transparent loopback custom-provider rerun. No artifact instructions were executed. This is bounded synthetic/macOS-host acceptance, not statistical quality evaluation or local Linux-image certification.

Exact acceptance receipt
{
  "consumerCommit": "6818f639b4b3bbee54f472b125db9467047240c1",
  "upstreamCommit": "5be7f8e97fa474f0aa9eb443f38d9e3d5f51226b",
  "binarySha256": "1c8ae7f28ece2921ffb86342d7e489f81864cad6579d8fa1ca0d89357ecad036",
  "host": "macOS arm64",
  "sourceClean": true,
  "fixtures": [
    {
      "fixture": "benign",
      "sha256": "d81d8fd54a49ecca0e64b1dcb0b8640855ca2b76f6b5e34661e3035e8e1a696a",
      "seconds": 41.384,
      "verdict": "benign",
      "confidence": "high",
      "consumerCheck": "clean",
      "aigFindings": 0,
      "scanners": {
        "aig": "completed",
        "clawscan-static": "completed",
        "skillspector": "completed"
      },
      "configuredJudgeModel": "gpt-6.1-sol"
    },
    {
      "fixture": "malicious",
      "sha256": "3bc2ea37dd5014a70d35dd29e1cff72c4f42e64389c459468167d024c63d71c5",
      "seconds": 86.051,
      "verdict": "malicious",
      "confidence": "high",
      "consumerCheck": "blocked",
      "aigFindings": 2,
      "scanners": {
        "aig": "completed",
        "clawscan-static": "completed",
        "skillspector": "completed"
      },
      "configuredJudgeModel": "gpt-6.1-sol"
    }
  ],
  "lanes": [
    {
      "fixture": "benign",
      "lane": "skillspector",
      "requests": 3,
      "completed": 3,
      "requestedModel": "gpt-6.1-sol",
      "requestedEffort": "medium",
      "configuredTier": "default",
      "wireTier": "default",
      "observedModels": [
        "gpt-6.1-sol"
      ],
      "observedTiers": [
        "default"
      ]
    },
    {
      "fixture": "benign",
      "lane": "aig",
      "requests": 2,
      "completed": 2,
      "requestedModel": "gpt-6.1-sol",
      "requestedEffort": "medium",
      "configuredTier": "default",
      "wireTier": "default",
      "observedModels": [
        "gpt-6.1-sol"
      ],
      "observedTiers": [
        "default"
      ]
    },
    {
      "fixture": "benign",
      "lane": "judge",
      "requests": 3,
      "completed": 3,
      "requestedModel": "gpt-6.1-sol",
      "requestedEffort": "high",
      "configuredTier": "default",
      "wireTier": null,
      "observedModels": [
        "gpt-6.1-sol"
      ],
      "observedTiers": [
        "default"
      ]
    },
    {
      "fixture": "malicious",
      "lane": "skillspector",
      "requests": 4,
      "completed": 4,
      "requestedModel": "gpt-6.1-sol",
      "requestedEffort": "medium",
      "configuredTier": "default",
      "wireTier": "default",
      "observedModels": [
        "gpt-6.1-sol"
      ],
      "observedTiers": [
        "default"
      ]
    },
    {
      "fixture": "malicious",
      "lane": "aig",
      "requests": 2,
      "completed": 2,
      "requestedModel": "gpt-6.1-sol",
      "requestedEffort": "medium",
      "configuredTier": "default",
      "wireTier": "default",
      "observedModels": [
        "gpt-6.1-sol"
      ],
      "observedTiers": [
        "default"
      ]
    },
    {
      "fixture": "malicious",
      "lane": "judge",
      "requests": 4,
      "completed": 4,
      "requestedModel": "gpt-6.1-sol",
      "requestedEffort": "high",
      "configuredTier": "default",
      "wireTier": null,
      "observedModels": [
        "gpt-6.1-sol"
      ],
      "observedTiers": [
        "default"
      ]
    }
  ],
  "safety": {
    "syntheticTextOnly": true,
    "artifactCodeExecuted": false,
    "credentialsPersisted": false,
    "credentialAbsenceCheckedFiles": 78
  },
  "limitations": [
    "Two tiny fixtures are acceptance smoke, not an accuracy benchmark.",
    "Original built-in OpenAI Codex runs passed both fixtures; complete observed judge telemetry is a separate full rerun using a loopback-only transparent custom provider and HTTPS transport. Request bytes are forwarded without model, reasoning, or service tier edits.",
    "Codex 0.160 intentionally omits explicit default service_tier on the wire. Original CLI flags request default; provider responses report default. This is not an explicit judge API tier field.",
    "No production deployment or public push; macOS host dependencies, not a local Linux image run."
  ]
}
Redacted request/response transport metadata
{"lane": "skillspector", "fixture": "benign", "pid": 35699, "kind": "request", "path": "/v1/responses", "model": "gpt-6.1-sol", "reasoning": {"effort": "medium"}, "serviceTier": "default", "maxOutputTokens": 128000}
{"lane": "skillspector", "fixture": "benign", "pid": 35699, "kind": "request", "path": "/v1/responses", "model": "gpt-6.1-sol", "reasoning": {"effort": "medium"}, "serviceTier": "default", "maxOutputTokens": 128000}
{"lane": "skillspector", "fixture": "benign", "pid": 35699, "kind": "request", "path": "/v1/responses", "model": "gpt-6.1-sol", "reasoning": {"effort": "medium"}, "serviceTier": "default", "maxOutputTokens": 128000}
{"lane": "skillspector", "fixture": "benign", "pid": 35699, "kind": "http", "status": 200}
{"lane": "skillspector", "fixture": "benign", "pid": 35699, "kind": "response", "model": "gpt-6.1-sol", "status": "completed", "serviceTier": "default", "usage": {"input_tokens": 1347, "input_tokens_details": {"cache_write_tokens": 0, "cached_tokens": 1344}, "output_tokens": 16, "output_tokens_details": {"reasoning_tokens": 0}, "total_tokens": 1363}}
{"lane": "skillspector", "fixture": "benign", "pid": 35699, "kind": "http", "status": 200}
{"lane": "skillspector", "fixture": "benign", "pid": 35699, "kind": "response", "model": "gpt-6.1-sol", "status": "completed", "serviceTier": "default", "usage": {"input_tokens": 962, "input_tokens_details": {"cache_write_tokens": 0, "cached_tokens": 0}, "output_tokens": 16, "output_tokens_details": {"reasoning_tokens": 0}, "total_tokens": 978}}
{"lane": "skillspector", "fixture": "benign", "pid": 35699, "kind": "http", "status": 200}
{"lane": "skillspector", "fixture": "benign", "pid": 35699, "kind": "response", "model": "gpt-6.1-sol", "status": "completed", "serviceTier": "default", "usage": {"input_tokens": 1718, "input_tokens_details": {"cache_write_tokens": 0, "cached_tokens": 1715}, "output_tokens": 86, "output_tokens_details": {"reasoning_tokens": 68}, "total_tokens": 1804}}
{"lane": "aig", "fixture": "benign", "pid": 35821, "kind": "request", "path": "/v1/responses", "model": "gpt-6.1-sol", "reasoning": {"effort": "medium"}, "serviceTier": "default", "maxOutputTokens": null}
{"lane": "aig", "fixture": "benign", "pid": 35821, "kind": "http", "status": 200}
{"lane": "aig", "fixture": "benign", "pid": 35821, "kind": "response", "model": "gpt-6.1-sol", "status": "in_progress", "serviceTier": "default", "usage": null}
{"lane": "aig", "fixture": "benign", "pid": 35821, "kind": "response", "model": "gpt-6.1-sol", "status": "in_progress", "serviceTier": "default", "usage": null}
{"lane": "aig", "fixture": "benign", "pid": 35821, "kind": "response", "model": "gpt-6.1-sol", "status": "completed", "serviceTier": "default", "usage": {"input_tokens": 8931, "input_tokens_details": {"cache_write_tokens": 136, "cached_tokens": 8792}, "output_tokens": 260, "output_tokens_details": {"reasoning_tokens": 104}, "total_tokens": 9191}}
{"lane": "aig", "fixture": "benign", "pid": 35821, "kind": "request", "path": "/v1/responses", "model": "gpt-6.1-sol", "reasoning": {"effort": "medium"}, "serviceTier": "default", "maxOutputTokens": null}
{"lane": "aig", "fixture": "benign", "pid": 35821, "kind": "http", "status": 200}
{"lane": "aig", "fixture": "benign", "pid": 35821, "kind": "response", "model": "gpt-6.1-sol", "status": "in_progress", "serviceTier": "default", "usage": null}
{"lane": "aig", "fixture": "benign", "pid": 35821, "kind": "response", "model": "gpt-6.1-sol", "status": "in_progress", "serviceTier": "default", "usage": null}
{"lane": "aig", "fixture": "benign", "pid": 35821, "kind": "response", "model": "gpt-6.1-sol", "status": "completed", "serviceTier": "default", "usage": {"input_tokens": 9541, "input_tokens_details": {"cache_write_tokens": 610, "cached_tokens": 8928}, "output_tokens": 141, "output_tokens_details": {"reasoning_tokens": 48}, "total_tokens": 9682}}
{"fixture":"benign","lane":"judge","kind":"request","path":"/v1/responses","model":"gpt-6.1-sol","reasoning":{"effort":"high","context":"all_turns"},"serviceTier":null}
{"fixture":"benign","lane":"judge","kind":"http","status":200}
{"fixture":"benign","lane":"judge","kind":"response","model":"gpt-6.1-sol","status":"completed","serviceTier":"default","usage":{"input_tokens":23767,"input_tokens_details":{"cache_write_tokens":23764,"cached_tokens":0},"output_tokens":147,"output_tokens_details":{"reasoning_tokens":0},"total_tokens":23914}}
{"fixture":"benign","lane":"judge","kind":"request","path":"/v1/responses","model":"gpt-6.1-sol","reasoning":{"effort":"high","context":"all_turns"},"serviceTier":null}
{"fixture":"benign","lane":"judge","kind":"http","status":200}
{"fixture":"benign","lane":"judge","kind":"response","model":"gpt-6.1-sol","status":"completed","serviceTier":"default","usage":{"input_tokens":24194,"input_tokens_details":{"cache_write_tokens":427,"cached_tokens":23764},"output_tokens":127,"output_tokens_details":{"reasoning_tokens":0},"total_tokens":24321}}
{"fixture":"benign","lane":"judge","kind":"request","path":"/v1/responses","model":"gpt-6.1-sol","reasoning":{"effort":"high","context":"all_turns"},"serviceTier":null}
{"fixture":"benign","lane":"judge","kind":"http","status":200}
{"fixture":"benign","lane":"judge","kind":"response","model":"gpt-6.1-sol","status":"completed","serviceTier":"default","usage":{"input_tokens":28831,"input_tokens_details":{"cache_write_tokens":4637,"cached_tokens":24191},"output_tokens":507,"output_tokens_details":{"reasoning_tokens":79},"total_tokens":29338}}
{"lane": "skillspector", "fixture": "malicious", "pid": 39524, "kind": "request", "path": "/v1/responses", "model": "gpt-6.1-sol", "reasoning": {"effort": "medium"}, "serviceTier": "default", "maxOutputTokens": 128000}
{"lane": "skillspector", "fixture": "malicious", "pid": 39524, "kind": "request", "path": "/v1/responses", "model": "gpt-6.1-sol", "reasoning": {"effort": "medium"}, "serviceTier": "default", "maxOutputTokens": 128000}
{"lane": "skillspector", "fixture": "malicious", "pid": 39524, "kind": "request", "path": "/v1/responses", "model": "gpt-6.1-sol", "reasoning": {"effort": "medium"}, "serviceTier": "default", "maxOutputTokens": 128000}
{"lane": "skillspector", "fixture": "malicious", "pid": 39524, "kind": "http", "status": 200}
{"lane": "skillspector", "fixture": "malicious", "pid": 39524, "kind": "response", "model": "gpt-6.1-sol", "status": "completed", "serviceTier": "default", "usage": {"input_tokens": 1033, "input_tokens_details": {"cache_write_tokens": 0, "cached_tokens": 1030}, "output_tokens": 100, "output_tokens_details": {"reasoning_tokens": 82}, "total_tokens": 1133}}
{"lane": "skillspector", "fixture": "malicious", "pid": 39524, "kind": "http", "status": 200}
{"lane": "skillspector", "fixture": "malicious", "pid": 39524, "kind": "response", "model": "gpt-6.1-sol", "status": "completed", "serviceTier": "default", "usage": {"input_tokens": 1417, "input_tokens_details": {"cache_write_tokens": 0, "cached_tokens": 1414}, "output_tokens": 457, "output_tokens_details": {"reasoning_tokens": 115}, "total_tokens": 1874}}
{"lane": "skillspector", "fixture": "malicious", "pid": 39524, "kind": "http", "status": 200}
{"lane": "skillspector", "fixture": "malicious", "pid": 39524, "kind": "response", "model": "gpt-6.1-sol", "status": "completed", "serviceTier": "default", "usage": {"input_tokens": 1789, "input_tokens_details": {"cache_write_tokens": 0, "cached_tokens": 1786}, "output_tokens": 350, "output_tokens_details": {"reasoning_tokens": 182}, "total_tokens": 2139}}
{"lane": "skillspector", "fixture": "malicious", "pid": 39524, "kind": "request", "path": "/v1/responses", "model": "gpt-6.1-sol", "reasoning": {"effort": "medium"}, "serviceTier": "default", "maxOutputTokens": 128000}
{"lane": "skillspector", "fixture": "malicious", "pid": 39524, "kind": "http", "status": 200}
{"lane": "skillspector", "fixture": "malicious", "pid": 39524, "kind": "response", "model": "gpt-6.1-sol", "status": "completed", "serviceTier": "default", "usage": {"input_tokens": 1421, "input_tokens_details": {"cache_write_tokens": 1418, "cached_tokens": 0}, "output_tokens": 909, "output_tokens_details": {"reasoning_tokens": 0}, "total_tokens": 2330}}
{"lane": "aig", "fixture": "malicious", "pid": 42135, "kind": "request", "path": "/v1/responses", "model": "gpt-6.1-sol", "reasoning": {"effort": "medium"}, "serviceTier": "default", "maxOutputTokens": null}
{"lane": "aig", "fixture": "malicious", "pid": 42135, "kind": "http", "status": 200}
{"lane": "aig", "fixture": "malicious", "pid": 42135, "kind": "response", "model": "gpt-6.1-sol", "status": "in_progress", "serviceTier": "default", "usage": null}
{"lane": "aig", "fixture": "malicious", "pid": 42135, "kind": "response", "model": "gpt-6.1-sol", "status": "in_progress", "serviceTier": "default", "usage": null}
{"lane": "aig", "fixture": "malicious", "pid": 42135, "kind": "response", "model": "gpt-6.1-sol", "status": "completed", "serviceTier": "default", "usage": {"input_tokens": 9065, "input_tokens_details": {"cache_write_tokens": 270, "cached_tokens": 8792}, "output_tokens": 258, "output_tokens_details": {"reasoning_tokens": 84}, "total_tokens": 9323}}
{"lane": "aig", "fixture": "malicious", "pid": 42135, "kind": "request", "path": "/v1/responses", "model": "gpt-6.1-sol", "reasoning": {"effort": "medium"}, "serviceTier": "default", "maxOutputTokens": null}
{"lane": "aig", "fixture": "malicious", "pid": 42135, "kind": "http", "status": 200}
{"lane": "aig", "fixture": "malicious", "pid": 42135, "kind": "response", "model": "gpt-6.1-sol", "status": "in_progress", "serviceTier": "default", "usage": null}
{"lane": "aig", "fixture": "malicious", "pid": 42135, "kind": "response", "model": "gpt-6.1-sol", "status": "in_progress", "serviceTier": "default", "usage": null}
{"lane": "aig", "fixture": "malicious", "pid": 42135, "kind": "response", "model": "gpt-6.1-sol", "status": "completed", "serviceTier": "default", "usage": {"input_tokens": 9835, "input_tokens_details": {"cache_write_tokens": 770, "cached_tokens": 9062}, "output_tokens": 662, "output_tokens_details": {"reasoning_tokens": 81}, "total_tokens": 10497}}
{"fixture":"malicious","lane":"judge","kind":"request","path":"/v1/responses","model":"gpt-6.1-sol","reasoning":{"effort":"high","context":"all_turns"},"serviceTier":null}
{"fixture":"malicious","lane":"judge","kind":"http","status":200}
{"fixture":"malicious","lane":"judge","kind":"response","model":"gpt-6.1-sol","status":"completed","serviceTier":"default","usage":{"input_tokens":25136,"input_tokens_details":{"cache_write_tokens":25133,"cached_tokens":0},"output_tokens":75,"output_tokens_details":{"reasoning_tokens":0},"total_tokens":25211}}
{"fixture":"malicious","lane":"judge","kind":"request","path":"/v1/responses","model":"gpt-6.1-sol","reasoning":{"effort":"high","context":"all_turns"},"serviceTier":null}
{"fixture":"malicious","lane":"judge","kind":"http","status":200}
{"fixture":"malicious","lane":"judge","kind":"response","model":"gpt-6.1-sol","status":"completed","serviceTier":"default","usage":{"input_tokens":25307,"input_tokens_details":{"cache_write_tokens":171,"cached_tokens":25133},"output_tokens":134,"output_tokens_details":{"reasoning_tokens":0},"total_tokens":25441}}
{"fixture":"malicious","lane":"judge","kind":"request","path":"/v1/responses","model":"gpt-6.1-sol","reasoning":{"effort":"high","context":"all_turns"},"serviceTier":null}
{"fixture":"malicious","lane":"judge","kind":"http","status":200}
{"fixture":"malicious","lane":"judge","kind":"response","model":"gpt-6.1-sol","status":"completed","serviceTier":"default","usage":{"input_tokens":32657,"input_tokens_details":{"cache_write_tokens":7350,"cached_tokens":25304},"output_tokens":153,"output_tokens_details":{"reasoning_tokens":100},"total_tokens":32810}}
{"fixture":"malicious","lane":"judge","kind":"request","path":"/v1/responses","model":"gpt-6.1-sol","reasoning":{"effort":"high","context":"all_turns"},"serviceTier":null}
{"fixture":"malicious","lane":"judge","kind":"http","status":200}
{"fixture":"malicious","lane":"judge","kind":"response","model":"gpt-6.1-sol","status":"completed","serviceTier":"default","usage":{"input_tokens":33017,"input_tokens_details":{"cache_write_tokens":360,"cached_tokens":32654},"output_tokens":749,"output_tokens_details":{"reasoning_tokens":111},"total_tokens":33766}}

@clawsweeper clawsweeper Bot added clawsweeper:intake:feature Preliminary submission classification; full source review pending. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 auth-provider 🚨 Merging this PR could break OAuth, tokens, provider routing, model choice, or credentials. merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. proof: sufficient Contributor real behavior proof is sufficient. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed clawsweeper:intake:feature Preliminary submission classification; full source review pending. labels Oct 20, 2026
@clawsweeper

clawsweeper Bot commented Oct 20, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge.

What this changes

This PR adopts Sol scanner and judge defaults with matching source-pinned Responses adapters and accurate configured-model provenance.

Example: A newly uploaded skill receives its security scan.

  • Before: Main installs older scanner dependencies and uses the existing GPT-5.x settings.
  • After: SkillSpector and AIG use gpt-6.1-sol with medium reasoning, and the final judge uses high reasoning with Standard service.

Review scores

Measure Result What it means
Overall readiness 🐚 platinum hermit (4/6) Useful, coherent policy adoption with real entrypoint evidence and no actionable defect; acceptance is deliberately bounded to wiring and basic verdict behavior.
Proof confidence 🐚 platinum hermit (4/6) Sufficient (logs): The exact consumer head and fresh pinned CLI exercised real scanner and judge calls on macOS arm64: benign input mapped to clean and synthetic credential theft/injection mapped to blocked, with redacted transport logs covering all three lanes; upstream evidence separately covers Linux installed entrypoints and CLI upgrade routing, without claiming production rollout or broad scanner quality.
Patch quality 🐚 platinum hermit (4/6) No actionable review findings were identified.

Product

Kind: Feature · Worth it: Yes · Fix scope: Complete
User problem: Security scans need the approved model settings to work across the judge and both scanner adapters without discarding operator choices.
Reason: The collaborator-authored direction is an owner decision, and the change includes the dependency compatibility needed to make that policy operational.

Merge readiness

✅ Ready for maintainer review

Keep open: this maintainer-authored PR delivers authorized scanner-policy work absent from main, with no blocking findings identified.

Priority: P2
Reviewed head: 6818f639b4b3bbee54f472b125db9467047240c1

Before merge

None.

Findings

None.

Agent review details

How this fits together

Security workers receive claimed skill or plugin artifacts, run scanners and a final judge, and submit validated evidence and verdicts to the existing publication and moderation owners.

flowchart LR
  A[Claimed artifact] --> B[Security worker]
  B --> C[Matched scanner adapters]
  C --> D[Scanner evidence]
  D --> E[ClawScan judge]
  E --> F[Validated verdict and provenance]
  F --> G[Publication and moderation]
Loading

Technical review

Best possible solution:

Adopt the matched upstream implementation while retaining independent operator controls, honest provenance, and existing moderation boundaries.

Do we have a high-confidence way to reproduce the issue?

This is policy adoption rather than a bug report; source comparison establishes the old defaults, and exact-head provider traces exercise the proposed behavior.

Is this the best way to solve the issue?

Best-fix verdict: best for the approved scope, because matched adapters remain upstream and both workers share their environment policy; changing environment values alone would leave incompatible transports, while copying adapters into ClawHub would create another owner.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning medium; reviewed against ec1016ae8b2b.

Provenance checked

Testing

Proof path: shipped entry point.

Security

None.

Evidence

What I checked:

Labels

Label changes:

  • add P2: Authorized scanner-policy improvement without evidence of an urgent current user outage.
  • add merge-risk: 🚨 compatibility: The workflow switch requires matching patched scanner dependencies; that coupling is explicitly accepted and implemented together in the maintainer-authored PR.
  • add merge-risk: 🚨 auth-provider: Active model and transport settings change; independent override coverage and real-provider traces support the accepted direction.
  • add proof: sufficient: Contributor real behavior proof is sufficient.
  • add rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🐚 platinum hermit and patch quality is 🐚 platinum hermit.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR.

Label justifications:

  • P2: Authorized scanner-policy improvement without evidence of an urgent current user outage.
  • merge-risk: 🚨 compatibility: The workflow switch requires matching patched scanner dependencies; that coupling is explicitly accepted and implemented together in the maintainer-authored PR.
  • merge-risk: 🚨 auth-provider: Active model and transport settings change; independent override coverage and real-provider traces support the accepted direction.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🐚 platinum hermit and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR.
  • proof: sufficient: Contributor real behavior proof is sufficient.

Rating scale

6/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.

Workflow

ClawSweeper edits this one comment on every review. Comment @clawsweeper re-review for a fresh review only. Repair and merge execution lanes are retired.

Reviewed October 19, 2026, 11:29 PM ET / October 20, 2026, 03:29 UTC.

@Patrick-Erichsen
Patrick-Erichsen merged commit 21841f0 into main Oct 20, 2026
69 of 71 checks passed
@Patrick-Erichsen
Patrick-Erichsen deleted the patrick/security-model-policy-20261019 branch October 20, 2026 03:33

This branch was successfully deployed

1 active deployment
Preview – clawhub — 6818f639 Deployed Oct 20, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merge-risk: 🚨 auth-provider 🚨 Merging this PR could break OAuth, tokens, provider routing, model choice, or credentials. merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. P2 Normal backlog priority with limited blast radius. proof: sufficient Contributor real behavior proof is sufficient. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant