{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-faccb9061e9b52a0", "name": "No README detected", "shortDescription": {"text": "No README detected"}, "fullDescription": {"text": "No README file was found. Generated repos without README context are hard to operate, validate, or safely hand off."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: ci, operator-readme. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ceba77862ea05c2f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/a2a.ts:64", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/a2a.ts:64"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-303c19f4c67587ba", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/client.ts:265", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/client.ts:265"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a76d524b118bc3f3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/streaming.ts:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/streaming.ts:17"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-80470acb0d2e416a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/oauth-pkce.ts:73", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/oauth-pkce.ts:73"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/23841"}, "properties": {"repository": "aartiq/nowaikit-sdk", "repoUrl": "https://github.com/aartiq/nowaikit-sdk", "branch": "main"}, "results": [{"ruleId": "scanner-faccb9061e9b52a0", "level": "note", "message": {"text": "No README detected"}, "properties": {"repobilityId": "a660ac7550ab1b21", "scanner": "scanner-primary", "fingerprint": "faccb9061e9b52a0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["docs", "readme", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "84d1b22487a1f187", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ceba77862ea05c2f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/a2a.ts:64"}, "properties": {"repobilityId": "accbd521db30993a", "scanner": "scanner-primary", "fingerprint": "ceba77862ea05c2f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-303c19f4c67587ba", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/client.ts:265"}, "properties": {"repobilityId": "6ea24504c48c1885", "scanner": "scanner-primary", "fingerprint": "303c19f4c67587ba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a76d524b118bc3f3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/streaming.ts:17"}, "properties": {"repobilityId": "70350e4079734168", "scanner": "scanner-primary", "fingerprint": "a76d524b118bc3f3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-80470acb0d2e416a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/oauth-pkce.ts:73"}, "properties": {"repobilityId": "e9e1e5d5b6b1577e", "scanner": "scanner-primary", "fingerprint": "80470acb0d2e416a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}]}]}