fix(data-integrity): reject invalid artifact revocation replay - #402
fix(data-integrity): reject invalid artifact revocation replay#402seonghobae wants to merge 2 commits into
Conversation
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Superseded by clean current-stack reconstruction #449. #449 is based on exact current status parent #448 head |
Objective
Keep durable artifact-link revocation fail-closed across restart. The append-only ledger currently accepts a persisted
REVOKEDtransition with no revocation timestamp, which reconstructs a record that is not considered revoked, and it accepts a second persisted revocation that can rewrite already-terminal revocation metadata.Test-first state
This stacked Draft starts intentionally RED at exact test-only head
20b84bfd27d56a303122a9b43f07650c63b76c4f, based on #400 exact head56cd5a261c9e3ab6c8ce81bbe708e2c6552a869f.ArtifactLinkLedgerRevocationReplayTestrequires replay to reject both aREVOKEDrecord whose timestamp is absent and a second revocation transition for an already-revoked token. The current replay path accepts both, so the focused assertions are expected to fail.Scope and dependency
This child is deliberately stacked on #400, which is itself stacked on #357's durable-ledger ordering/integrity work. The slice changes only revocation replay invariants plus focused regression evidence. It does not alter live revocation authorization, tenant lookup, token signatures, artifact delivery, read-status validation, or persistence technology.
Acceptance
Observe exact-head RED -> smallest replay-transition validation -> exact-head
mvn -B --no-transfer-progress verifywith zero failures/errors/skips, exact owned-production coverage and warning-free public Javadocs -> emitted CI/fuzz evidence. Keep Draft while #400/#357 remain open. After ancestors integrate, reconcile this unique delta onto the live protected base and regenerate all base-sensitive checks/reviews. Independent non-author approval remains a separate protected-merge gate.