kaos-citations v0.1.7

License: Apache-2.0 Runtime: Python 3.13+ Released: 2026-09-29 Repository

Changes since last sweep

No signal changes detected since 2026-11-06.

Trust scorecard

Composite: 7/9 green
Build passing
Latest CI conclusion: success
Tests: PR + compat + min-deps
PR lanes: success; compat: success; min-deps: success
Security scans + dependency advisories
security-light: success; security-full: failure; 20 open advisories (OSV.dev): 2 critical, 6 high, 12 moderate
Updates merged promptly
5 open PR(s), 5 from Dependabot; oldest 36 day(s) old
Signed release artifacts
PEP 740 attestation verified for 2/2 artifacts
License clean
Wheel license: Apache-2.0
SBOM published
SBOM published — 61 components
Branch protection
GitHub reports main as protected; admin-only rule details were not available to the sweep token
SECURITY.md + CODEOWNERS
SECURITY.md + CODEOWNERS present

CI matrix

Environment pytestruff tybandit pip-audit
linux-x64 / py3.14
linux-x64 / py3.14t
linux-x64 / py3.15
macos-arm64 / py3.13
windows-x64 / py3.13

Security

Open advisories
20 across 61 locked dependencies (OSV.dev)
Maintenance notices
0
Fixed in 90d
not tracked
Open Dependabot PRs
5
Suppressions (total)
not inspected (sibling clone absent)
AdvisoryPackageSeveritySummary
GHSA-6q48-6c7w-9gw2 certifi 2026.5.20 critical certifi bundles emSign root CAs with compromised intermediate CA keys
GHSA-ffc3-869f-jxw9 pyjwt 2.13.0 critical PyJWT: Asymmetric-PEM detection bypass: whitespace/line-ending-mutated public keys skip the HS/asymmetric confusion guard
GHSA-9j54-fg26-wv3r pyjwt 2.13.0 high PyJWT: PyJWK accepts empty HMAC keys, bypassing PyJWT's empty-key validation
GHSA-9v7f-9g4p-ffgj pyjwt 2.13.0 high PyJWT: PyJWKClient follows redirects when fetching JWKS
GHSA-p4g4-x82p-q773 pyjwt 2.13.0 high PyJWT: Public keys in DER form are accepted as HMAC secrets, bypassing the CVE-2022-29217 guard
GHSA-pxh4-856f-4h89 pyjwt 2.13.0 high PyJWT: HS256/384/512 verify accepts empty HMAC key via oct JWK (PyJWK/PyJWKClient) enabling token forgery
GHSA-r6x4-923q-g947 pyjwt 2.13.0 high PyJWT BOM Bypass
GHSA-w2cx-738m-mc7w pyjwt 2.13.0 high PyJWT accepts public JWK containers as HMAC secrets
GHSA-2gx3-rcp4-g85q pyjwt 2.13.0 moderate PyJWT: PyJWKClient still amplifies unauthenticated JWKS fetches on unknown kid values (incomplete fix of CVE-2026-48524)
GHSA-42vr-xj54-vc7v pyjwt 2.13.0 moderate PyJWT: Unauthenticated RecursionError DoS in pre-verification payload parse (PyJWKClient.get_signing_key_from_jwt / verify_signature=False)
GHSA-5h93-6whr-6q8j mcp 1.28.1 moderate Model Context Protocol Python SDK: HTTP client transports followed cross-origin redirects carrying custom headers and bodies
GHSA-84m7-p3x7-pcfv mcp 1.28.1 moderate MCP Python SDK: Unbounded Session Accumulation in StreamableHTTP Transport Enables Resource Exhaustion
GHSA-8wjv-2p76-3863 pyjwt 2.13.0 moderate PyJWT: Uncaught RecursionError in jwt.decode() on deeply nested token header
GHSA-gvp8-978c-rx2q pyjwt 2.13.0 moderate PyJWT.decode() reintroduces options-dict mutation, enabling silent claim-verification bypass on dict reuse
GHSA-hxm8-2xgr-2p9m pyjwt 2.13.0 moderate PyJWT: Non-canonical signature segments enable raw-token revocation bypass
GHSA-jwrc-g2q2-pq5p pyjwt 2.13.0 moderate PyJWT: ReDoS vulnerability when calling the `is_pem_format` function.
GHSA-rwrf-2pqf-9j8j mcp 1.28.1 moderate Model Context Protocol Python SDK: Client fetched server-chosen $ref URLs while validating tool results against output schemas
GHSA-w4fh-qvv9-3v23 mcp 1.28.1 moderate Model Context Protocol Python SDK: Server bearer-token authentication accepts tokens issued for a different resource server
GHSA-w6j9-cwv2-h6wq pyjwt 2.13.0 moderate PyJWT: Malformed RSA JWK aborts parsing of an entire JWK Set
GHSA-x33g-cr3x-6449 pyjwt 2.13.0 moderate PyJWT accepts inconsistent OKP x/d JWKs, causing public/private key identity confusion

Suppressions are markers that silence a linter, type-checker, or security scanner. See security.html for the full ledger across the org.

Supply chain

Direct deps
—
Transitive deps
—
SBOM
CycloneDX (mirror) · CycloneDX (GitHub Release)

Governance + velocity

Maintainers
2
Commits 90d
9
Releases 90d
5

Code surface area

Python source (LoC)
7,875 across 31 files
Python tests (LoC)
2,612 across 23 files
Rust source (LoC)
—
Rust tests (LoC)
—
Source lines of code
10,487 LoC

Counts non-blank, non-comment lines (sloc). Excludes .venv, target, dist, build, __pycache__, _site, and lockfiles (uv.lock, Cargo.lock). Tests are paths whose ancestors contain tests, test, or benches. Authorship: this codebase is AI-assisted — lines were generated with Claude (Anthropic) and human-reviewed before commit. We count what's in git; we do not claim humans typed every character.

Evidence

Download JSON

Methodology

How these eight checks are scored Each check is collected by an automated workflow against public sources only (GitHub API, OSV, Sigstore transparency log, package registry metadata). No self-attestation is accepted. A check is green when the underlying signal is present and meets a documented threshold, yellow when partial, red when failing, and gray when the collector has not yet implemented the probe. See methodology.html for thresholds and source URLs.