docs(24): cite D-02/D-05/D-08/D-09 in plan must_haves
This commit is contained in:
parent
15e52280b5
commit
52affe348c
3 changed files with 4 additions and 2 deletions
|
|
@ -34,7 +34,8 @@ must_haves:
|
|||
truths:
|
||||
- "SC-5: AWS credentials reach the Node process only as env vars injected by `bws run` at the docker entrypoint; no AWS_ACCESS_KEY_ID or AWS_SECRET_ACCESS_KEY value is added to the committed .env file"
|
||||
- "SC-5: isRoute53Configured() returns false when AWS credential env vars are absent, and getRoute53Client() throws rather than constructing an unauthenticated client"
|
||||
- "SC-3/SC-4: The dedicated Route 53 schema (zones, records, record history, audit log) exists in Postgres with a source tag column distinguishing pulse_crud from sync_detected_drift (D-06) and a status column supporting pending/committed/failed (D-07)"
|
||||
- "SC-3/SC-4: The dedicated Route 53 schema — route53_zones / route53_records / route53_record_history / route53_audit_log (D-05: dedicated tables, not the phishing pipeline's shared audit_events) — exists in Postgres with a source tag column distinguishing pulse_crud from sync_detected_drift (D-06) and a status column supporting pending/committed/failed (D-07)"
|
||||
- "D-08: Retention is unbounded by design — no purge job, no TTL, and no DELETE statement against route53_record_history or route53_audit_log anywhere in this phase, matching existing Pulse convention"
|
||||
- "D-10: An integration_settings row with key='route53' exists so the /admin/integrations toggle is display-only, with no sync/CRUD-blocking behavior anywhere"
|
||||
- "D-03 ACCEPTED TRADEOFF: destructive record operations execute immediately with no staged approval gate. Malicious or malformed record values (dangling-CNAME / subdomain-takeover, SPF/DKIM TXT tampering) are NOT blocked pre-write. Mitigation is post-hoc traceability only — route53_audit_log captures actor, timestamp, and before/after for every attempt. This is an intentional, documented acceptance, not an oversight."
|
||||
artifacts:
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ must_haves:
|
|||
- "D-01: A request with record type NS or SOA is rejected with HTTP 400 before any AWS command is constructed"
|
||||
- "D-04: Every write route is gated by requireAdmin(); every read route is gated by at least requireAuth()"
|
||||
- "A DELETE submits the exact current recordset (name, type, TTL, full value set) read from the mirror, because Route 53 rejects or mis-targets a DELETE that does not match exactly"
|
||||
- "D-02: No zone create/delete route exists anywhere under app/api/route53/ — this is an intentional, verified omission. app/api/route53/zones/route.ts is GET-only; hosted zones are read-only from Pulse and only records within existing zones are writable. Zone lifecycle stays in the AWS console / infra-as-code."
|
||||
artifacts:
|
||||
- path: "lib/services/route53-change-submit.ts"
|
||||
provides: "ChangeResourceRecordSets construction + bounded GetChange poll, testable without a route"
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ requirements: [SC-1, SC-6]
|
|||
must_haves:
|
||||
truths:
|
||||
- "SC-1/D-11: Two cron schedules exist — route53-incremental (every 15 minutes) and route53-full (daily) — both seeded into sync_schedules and editable from /admin, matching how every other integration's schedules are managed"
|
||||
- "SC-6: A Route 53 tile appears in the /admin/sync integration list with the same shape as the Veeam / Datto RMM / PAX8 tiles, linking to /admin/sync/route53"
|
||||
- "SC-6/D-09: A Route 53 tile appears in the /admin/sync integration list with the same shape as the Veeam / Datto RMM / PAX8 tiles, linking to the dedicated /admin/sync/route53 detail page built in plan 24-07 — the existing per-integration pattern, not folded into an existing page"
|
||||
- "D-10: The scheduler dispatch branch for Route 53 checks isRoute53Configured() only — it does NOT consult integration_settings.disabled, so disabling Route 53 in /admin/integrations suppresses health display without stopping sync (PAX8 remains the sole blocking exception)"
|
||||
- "New schedules are seeded is_enabled: false, matching every other newly-introduced integration in this file, so nothing starts hitting AWS before an operator enables it"
|
||||
artifacts:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue