fix: omit AWS's empty-object placeholders from the cloned PDF policy
Build and deploy / build-and-deploy (push) Failing after 4s
Build and deploy / build-and-deploy (push) Failing after 4s
`configure.mjs --apply` failed on its first write, 2026-09-04, and nothing
reached the distribution. `get-response-headers-policy` returns
`"ContentSecurityPolicy": {}` for a member the source does not define, and
sending that back fails `create-response-headers-policy` on ParamValidation
before the call leaves the machine — a config AWS hands back is not
necessarily a config AWS will accept.
Of the 16 structures reachable from `ResponseHeadersPolicyConfig` in the CLI's
service model, 15 declare a required field, so `{}` is illegal there and can
only be the placeholder; the one exception is `SecurityHeadersConfig` itself,
which section 4 already skips on when empty. The strip is therefore recursive.
The dry run now asserts the generated config carries no empty object, and does
so as a section-4 SKIP rather than a throw — section 4 must never block
sections 1-3 from re-applying `router.js`.
The two functions move to `policy-shapes.mjs` with a 23-case test (7 of 7
mutations killed), because `configure.mjs` reads argv and calls AWS at import
time and the runbook was otherwise claiming a proof nobody could re-run.
Also: the handler was redeployed 2026-09-04 via docs/09 §5.5. Re-read against
production — the two bundled SDK clients moved 3.1125.0 -> 3.1126.0 with no
file in this repository changing, which is what §7's own row predicted. §12
gains R22, because that row named itself as the reminder covering them while
no such reminder existed. docs/05, docs/06 and docs/09 §5.5 each held their
own stale copy of the deployed commit; all three now cite §7.
Reviewed twice by adversarial-reviewer: 7 findings, then 8, of which five were
defects in the first round's repairs. All 15 fixed.
Nothing was applied to the distribution and nothing was deployed.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Md3GndFqWPzK78xAoebsg5
This commit is contained in:
co-authored by
Claude Opus 5
parent
3c3ba5dc6e
commit
bbe535d158
@@ -31,9 +31,12 @@ behaviour the form posts to does not exist"* — true when written under D11, fa
|
||||
from the moment `docs/09` Parts 3, 5 and 6 ran at cutover, and two days stale in
|
||||
the document an implementer reads before touching the handler. **Measured
|
||||
2026-09-04:** the function carries `handler.handler` with six environment
|
||||
variables and its two source entries are byte-identical to commit `02739ad`; the API has
|
||||
variables and its deployed source entries match a commit **§7 names**; the API has
|
||||
exactly one route, `POST /api/intake`; §7 holds the full state and this spec does
|
||||
not restate it. `/contact/` still publishes the email address beside the form,
|
||||
not restate it. ⚠️ **THIS SENTENCE NAMED THE COMMIT — `02739ad` — IN THE SAME
|
||||
BREATH AS DISCLAIMING RESTATEMENT, AND THE 2026-09-04 REDEPLOY MADE IT FALSE**
|
||||
(three source entries now, matching a later commit). The count is gone with it:
|
||||
both were facts §7 owns. `/contact/` still publishes the email address beside the form,
|
||||
which is now a courtesy rather than a fallback.
|
||||
|
||||
### The form is a plain HTML POST, and it answers 303
|
||||
|
||||
Reference in New Issue
Block a user