d0a8c363b2
---ci--- project: acdl phase: 5 milestone: v1.28 status: execute persona: security-engineer --- Add tests/test_e2e_idp.py — the J1+J2 happy-path E2E flow. Uses moto for DynamoDB (4 IdP tables) + mock KMS (test ECC keypair). Asserts: (a) sign_up succeeds, (b) sign_in returns a session, (c) token-vend returns a KMS-signed OIDC token, (d) the OIDC token verifies with the JWKS key (pyjwt), (e) nova apply --local produces a JWS attestation (HS256), (f) the JWS verifies with the PAT-derived key (+ tamper detection), (g) the audit chain is complete + linked (auth.sign_up, auth.sign_in, auth.session_created, pat.issued, token.vend.allowed — all present, linked by user_id/jti, no raw password/PAT leaked INV-16). Also: the credentials file stores the OIDC token not the raw PAT (C-7.3), the DDB user item has a password_hash not the raw password, the DDB PAT row has a pat_hash not the raw PAT. Negative path: revocation breaks the chain (403 pat_revoked, D-229 strong-read SLO, token.vend.denied audit event).