You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Split out of the #156 roadmap spike (Tier 4: provider epic). Largest of the three — do not start before its dependencies land.
Why it's the biggest lift
AWS WAF is the best long-term fit (it's where a lot of serious WAF config lives) and simultaneously the worst fit for doorman's current model. Four independent structural mismatches:
Mandatory optimistic concurrency. Every write requires a LockToken fetched from the current state. syncRules has no concept of this; a stale token means the write is rejected and must be retried against refreshed state.
Also worth noting: WAFv2 statement types are richer than doorman's condition model in kind, not just structure — SqliMatchStatement, XssMatchStatement, LabelMatchStatement, RateBasedStatement with its own nested scope-down statement. Several have no unified equivalent at all and need either new UnifiedCondition field types or an explicit unsupported-feature path.
That's effectively the entire groundwork backlog. Recommend landing Fastly (#186) first to validate the interface generalizes at all before committing to this.
Additional scope beyond a normal adapter
LockToken handling threaded through the sync path (fetch-then-write with retry-on-stale)
IAM permission preflight — the CloudflareSetupVerifier pattern is a good precedent; AWS failure modes are notoriously opaque without it
Deciding whether doorman manages WebACL creation or only rules within an existing WebACL (strongly recommend the latter initially — WebACL creation drags in scope/region/association concerns)
Acceptance criteria
All 8 commands work with no command-layer changes
Nested statement trees round-trip losslessly
A rule using a WAFv2 statement type doorman can't represent fails explicitly rather than syncing something subtly different
Concurrent-modification (stale LockToken) is handled with a clear retry or a clear error, never a silent lost update
Split out of the #156 roadmap spike (Tier 4: provider epic). Largest of the three — do not start before its dependencies land.
Why it's the biggest lift
AWS WAF is the best long-term fit (it's where a lot of serious WAF config lives) and simultaneously the worst fit for doorman's current model. Four independent structural mismatches:
AndStatement/OrStatement/NotStatementwrapping leaf matchers, nestable to arbitrary depth.UnifiedRule.conditions[]+ one-levelgroupcannot represent this. → Model: recursive condition trees (UnifiedRule.conditions cannot express nested boolean logic) #184CLOUDFRONTorREGIONALscope, is region-bound, and attaches to N resource ARNs. → Model: multi-resource / multi-region targeting (UnifiedConfig assumes one provider = one target) #185LockTokenfetched from the current state.syncRuleshas no concept of this; a stale token means the write is rejected and must be retried against refreshed state.Also worth noting: WAFv2 statement types are richer than doorman's condition model in kind, not just structure —
SqliMatchStatement,XssMatchStatement,LabelMatchStatement,RateBasedStatementwith its own nested scope-down statement. Several have no unified equivalent at all and need either newUnifiedConditionfield types or an explicit unsupported-feature path.Dependencies — all required
ProviderTypeaccessKeyId/secretAccessKey/sessionToken/region/scope/webAclArn; the flat-field approach breaks down completely here)Priority)That's effectively the entire groundwork backlog. Recommend landing Fastly (#186) first to validate the interface generalizes at all before committing to this.
Additional scope beyond a normal adapter
LockTokenhandling threaded through the sync path (fetch-then-write with retry-on-stale)CloudflareSetupVerifierpattern is a good precedent; AWS failure modes are notoriously opaque without itAcceptance criteria
LockToken) is handled with a clear retry or a clear error, never a silent lost update