diff --git a/CHANGELOG.md b/CHANGELOG.md index ca0970c..7a148ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ ## Unreleased +## 0.3.7 - 2026-05-03 + +### Changed + +- Downgrade `registration-capture-gap` to advisory severity so missing capture evidence no longer reports as a P1 plugin contract risk. + ## 0.3.6 - 2026-05-03 ### Changed diff --git a/package.json b/package.json index 07db657..1f1828e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/plugin-inspector", - "version": "0.3.6", + "version": "0.3.7", "private": false, "description": "Offline compatibility inspector for OpenClaw plugins.", "type": "module", diff --git a/src/contract-probes.js b/src/contract-probes.js index f54c3ce..4258152 100644 --- a/src/contract-probes.js +++ b/src/contract-probes.js @@ -175,7 +175,6 @@ export function probePriority(code, fixturePriority) { "before-tool-call-probe", "conversation-access-hook", "missing-compat-record", - "registration-capture-gap", "sdk-export-missing", ].includes(code) ) { diff --git a/src/issues.js b/src/issues.js index f2ff1ac..291bdaf 100644 --- a/src/issues.js +++ b/src/issues.js @@ -220,10 +220,10 @@ export const issueMetadataByCode = { title: "providerAuthEnvVars legacy manifest metadata must stay covered", }, "registration-capture-gap": { - severity: "P1", + severity: "P2", owner: "inspector", decision: "inspector-follow-up", - title: "runtime registrations need capture before contract judgment", + title: "runtime registrations need capture evidence before final contract judgment", }, "runtime-tool-capture": { severity: "P2", diff --git a/test/ci-policy.test.js b/test/ci-policy.test.js index d0d7b0f..bdb40aa 100644 --- a/test/ci-policy.test.js +++ b/test/ci-policy.test.js @@ -162,7 +162,7 @@ test("ci policy surfaces P0 live issues without blocking default lanes", () => { code: "legacy-before-agent-start", }, { - severity: "P1", + severity: "P2", issueClass: "inspector-gap", fixture: "wecom", code: "registration-capture-gap", @@ -260,7 +260,7 @@ test("ci policy writer emits JSON and Markdown artifacts", async () => { function compatibilityReport(overrides = {}) { const issues = overrides.issues ?? [ { - severity: "P1", + severity: "P2", issueClass: "inspector-gap", fixture: "fixture", code: "registration-capture-gap", diff --git a/test/ci-summary.test.js b/test/ci-summary.test.js index d673522..304cfb4 100644 --- a/test/ci-summary.test.js +++ b/test/ci-summary.test.js @@ -18,17 +18,17 @@ test("ci summary rolls up compatibility, policy, ref diff, and profile findings" suggestionCount: 3, issueCount: 4, p0IssueCount: 1, - p1IssueCount: 1, + p1IssueCount: 0, liveIssueCount: 1, compatGapCount: 1, }, issues: [ { - severity: "P1", + severity: "P2", issueClass: "inspector-gap", fixture: "fixture", code: "registration-capture-gap", - title: "runtime registrations need capture", + title: "runtime registrations need capture evidence", decision: "inspector-follow-up", }, ], diff --git a/test/contract-coverage.test.js b/test/contract-coverage.test.js index f818853..d83b598 100644 --- a/test/contract-coverage.test.js +++ b/test/contract-coverage.test.js @@ -26,7 +26,7 @@ test("contract coverage fails missing evidence and P1 probe gaps", () => { fixture: "fixture", severity: "P1", issueClass: "inspector-gap", - code: "registration-capture-gap", + code: "conversation-access-hook", evidence: [], }, ], diff --git a/test/contract-probes.test.js b/test/contract-probes.test.js index dabef25..f6fb234 100644 --- a/test/contract-probes.test.js +++ b/test/contract-probes.test.js @@ -46,8 +46,8 @@ test("contract probes map issue findings to executable backlog rows", () => { assert.deepEqual( probes.map((probe) => [probe.id, probe.priority, probe.target]), [ - ["api.capture.runtime-registrars:wecom", "P1", "inspector-capture-api"], ["sdk.import.package-export-cold-import:codex-app-server", "P1", "sdk-alias"], + ["api.capture.runtime-registrars:wecom", "P2", "inspector-capture-api"], ["manifest.schema.top-level-fields:agentchat", "P3", "manifest-loader"], ], ); @@ -55,6 +55,7 @@ test("contract probes map issue findings to executable backlog rows", () => { test("contract probe priority escalates critical codes and high-priority fixtures", () => { assert.equal(probePriority("sdk-export-missing", "medium"), "P1"); + assert.equal(probePriority("registration-capture-gap", "high"), "P2"); assert.equal(probePriority("manifest-unknown-fields", "high"), "P2"); assert.equal(probePriority("manifest-unknown-fields", "medium"), "P3"); }); diff --git a/test/issues.test.js b/test/issues.test.js index 9ffc171..50438fc 100644 --- a/test/issues.test.js +++ b/test/issues.test.js @@ -113,8 +113,8 @@ test("issue builder applies metadata and class summaries", () => { issues.map((issue) => [issue.fixture, issue.code, issue.severity, issue.issueClass, issue.status]), [ ["codex-app-server", "sdk-export-missing", "P0", "live-issue", "blocking"], - ["wecom", "registration-capture-gap", "P1", "inspector-gap", "open"], ["agentchat", "manifest-unknown-fields", "P2", "upstream-metadata", "open"], + ["wecom", "registration-capture-gap", "P2", "inspector-gap", "open"], ], ); assert.deepEqual(summarizeIssueClasses(issues), {