Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 26 additions & 3 deletions .claude/review-state.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"last_run": "2026-05-26T00:55:00Z",
"last_commit": "5083c52b64190381eadbb9f0c13b42e52c358a5a",
"last_run": "2026-05-26T05:00:00Z",
"last_commit": "81f8735d167b597ed7a7a88cc7f89ba0b440b07d",
"filed": [
{
"issue": 8,
Expand All @@ -14,6 +14,19 @@
"evidence_quality": 10
},
"timestamp": "2026-05-26T00:55:00Z"
},
{
"issue": 22,
"title": "[REVIEW] Permissions-Policy: `recommendations` always populated — spurious \"Fix:\" output when status is `good`",
"finding": "checkPermissionsPolicy in src/rules.ts:141 returns a non-empty recommendations array even when isGood===true (status: 'good'), causing the CLI to show a 'Fix:' line for correctly-configured headers. All other check functions return recommendations:[] for the good path.",
"score": 6.50,
"score_breakdown": {
"user_impact": 7,
"security_severity": 3,
"implementation_effort": 10,
"evidence_quality": 10
},
"timestamp": "2026-05-26T05:00:00Z"
}
],
"runner_ups": [
Expand Down Expand Up @@ -52,13 +65,23 @@
"score": 7.9,
"reason_not_filed": "duplicate of open issue #5",
"timestamp": "2026-05-26T00:55:00Z"
},
{
"finding": "checkCSP does not detect 'unsafe-hashes' keyword — event-handler attribute injection is not penalized.",
"score": 6.05,
"reason_not_filed": "lower score than filed issue #22",
"timestamp": "2026-05-26T05:00:00Z"
}
],
"clean_areas": [
"package.json exports/main/types/bin fields are correctly configured",
"tsconfig.json strict mode is enabled",
"CI workflows (ci.yml, publish.yml, auto-tag.yml) are sound",
"X-Content-Type-Options check (rules.ts:93-104) — values correctly validated",
"X-Frame-Options check (rules.ts:73-91) — accepts DENY/SAMEORIGIN and CSP frame-ancestors fallback as expected"
"X-Frame-Options check (rules.ts:73-91) — accepts DENY/SAMEORIGIN and CSP frame-ancestors fallback as expected",
"fetch.ts: AbortController timeout implementation is correct (timer cleared in finally block)",
"analyzer.ts: grade calculation and percentage rounding are correct",
"index.ts: analyze() dispatches correctly between URL-fetch and header-object paths",
"cli.ts: exit code gate (D or F → exit 1) matches documented CI-gate behavior"
]
}