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
One zone, one project. That's correct for Cloudflare and Vercel. It does not fit:
AWS WAF — a WebACL exists in a scope (CLOUDFRONT or REGIONAL), is region-bound for REGIONAL, and attaches to N resource ARNs (ALBs, API Gateway stages, AppSync APIs). Managing "the same ruleset across 3 regions and 6 load balancers" is the normal case, not an edge case.
GCP Cloud Armor — a security policy attaches to N backend services.
Every command also assumes one target implicitly: sync writes to one place, diff compares against one place, status reports one version.
Open design questions (resolve before implementing)
One config, N targets — or N configs? Does a single .doorman.json describe a ruleset applied to many resources, or does doorman stay one-config-one-target and leave fan-out to the user/CI? The former is much more useful and much more work.
Drift across targets. If targets diverge (someone hand-edited one), what do diff/status show? Per-target output, or a merged view with divergence called out?
Does version still mean anything?SyncResult.version / metadata.version assume one authoritative remote version.
Recommendation
Do not build this speculatively. It's the single largest interface change in the #156 roadmap and its right shape depends heavily on which provider lands first. Sequence it with the AWS WAF or GCP epic — whichever is prioritized — rather than ahead of both. Filed now so the constraint is visible when scoping those.
If Fastly is chosen as the first third adapter (recommended in the roadmap — it's structured-JSON and roughly Vercel-sized), this issue is not on the critical path.
Acceptance criteria
To be defined once question 1 is settled. At minimum: a config can target multiple resources, and sync/diff/status report per-target outcomes without pretending partial success is total success.
Split out of the #156 roadmap spike (Tier 3: model extension). Blocks AWS WAF and GCP Cloud Armor.
Problem
UnifiedConfigassumes a single provider instance targets a single resource:One zone, one project. That's correct for Cloudflare and Vercel. It does not fit:
CLOUDFRONTorREGIONAL), is region-bound forREGIONAL, and attaches to N resource ARNs (ALBs, API Gateway stages, AppSync APIs). Managing "the same ruleset across 3 regions and 6 load balancers" is the normal case, not an edge case.Every command also assumes one target implicitly:
syncwrites to one place,diffcompares against one place,statusreports one version.Open design questions (resolve before implementing)
.doorman.jsondescribe a ruleset applied to many resources, or does doorman stay one-config-one-target and leave fan-out to the user/CI? The former is much more useful and much more work.SyncResultreport? The existingerrors[]/successshape (from fix: stop Vercel sync from corrupting rules and discarding real errors #166) is a reasonable starting point but was designed for per-rule failures, not per-target.diff/statusshow? Per-target output, or a merged view with divergence called out?versionstill mean anything?SyncResult.version/metadata.versionassume one authoritative remote version.Recommendation
Do not build this speculatively. It's the single largest interface change in the #156 roadmap and its right shape depends heavily on which provider lands first. Sequence it with the AWS WAF or GCP epic — whichever is prioritized — rather than ahead of both. Filed now so the constraint is visible when scoping those.
If Fastly is chosen as the first third adapter (recommended in the roadmap — it's structured-JSON and roughly Vercel-sized), this issue is not on the critical path.
Acceptance criteria
To be defined once question 1 is settled. At minimum: a config can target multiple resources, and
sync/diff/statusreport per-target outcomes without pretending partial success is total success.