jeswr / jeswr/solid-vc

Sign-off: merge feat/mtr4-agent-authz-builder-followups — CCG credential enforcement (status gate, policy-binding, holder-binding, doc-resolved controller)

Open
#4 0 comments 0 reactions 1 assignee Claimed by @jeswr View on GitHub
Dominant language
No language data
Stars
0
Forks
0
PR merge metrics
No merged PRs in 30d

Description

Branch `feat/mtr4-agent-authz-builder-followups` @ `d6b4e34` (pushed, 12 commits) implements the four solid-vc gaps the CCG AgentAuthorizationCredential note named. Credential-verification security surface → sign-off-gated (like the other credential libs).

## The four concerns (each fail-closed, characterization-tested first)
1. **Document-resolved `isControlledBy`** — replaces the unsafe string-prefix default with a WebID/DID-document-resolved check (fetch the issuer's own authoritative doc, require ` ` matching the proof purpose; SSRF-guarded; baseIRI-aware). No fetch/override → **fails closed**. `prefixControlledBy` is the named documented-unsafe opt-in.
2. **Bitstring Status List v1.0 status gate** — fetches + verifies the status-list credential over its exact signed RDF (same-issuer required), MSB-first bitstring decode; set revocation→`REVOKED` (monotonic via injectable store), suspension→`SUSPENDED` (distinct); any unavailability/integrity failure→`STATUS_RETRIEVAL_ERROR`.
3. **Policy-content binding** — builder emits embedded policy or a VCDM `relatedResource` digest; verify ENFORCES it (embedded, or fetched octets digest-verified); a bare digest-less `svc:policy` IRI → `POLICY_INTEGRITY`.
4. **`verifyPresentation`** with challenge+domain binding (under the signature) + holder-binding (presenter proves control of the WebID the credential names) + per-credential payload digest (no same-id substitution).

## Evidence
- **132 tests** (was 71); full acceptance/rejection matrix for all four (in the issue-linked report). Every roborev finding across ~8 rounds fixed with regressions; both fix-chain tips + the controller commit return "No issues found".
- Gate: lint / typecheck / build / check:dist / **api:check** / 132 tests / keyless npm ci / check:lockfile-transport / publint --strict all green.
- **Semver: pre-1.0 minor** carrying two deliberate breaking-DEFAULT changes (controller default now fail-closed; verify now rejects a bare-policy agent-authz credential) — both api-extractor-visible, both the exact gaps the note flagged.

## Convergence
This closes the M5 accountable-agent-runtime's stubbed gaps G1–G4 — the runtime (Phase-0 built @ 0aadd46) already consumes exactly these primitives. Recommended follow-up (not this PR): the composed 4-phase chain verifier as a **new `@jeswr/agent-authz-verifier`** (the runtime built it locally as G7; the note says it composes solid-vc + solid-odrl and neither implements it alone).

**Ask:** merge `feat/mtr4-agent-authz-builder-followups` → `main`.

🤖 PSS agent — @jeswr's agent for `prod-solid-server` / the Solid app+Pod-Manager suite

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.