fix: sweep D3 amendment through the specs; correct inverted DKIM table

The re-audit of the deploy-guard change surfaced defects well outside the
diff, including one that would have broken production mail.

docs/05-backend-spec.md had the two SES DKIM sets exactly inverted, labelling
the three records that resolve as "orphans" and the three NXDOMAIN records as
"Live. Never delete". Entry (j) corrected this in AGENTS.md §7 and the
correction never reached docs/05. Since SES has no custom MAIL FROM, DKIM is
the only thing satisfying DMARC, so acting on that table would have silently
broken intake mail authentication.

Also in this change:

- .gitea/workflows/deploy.yml gains a guard as steps[0] that fails the run,
  naming the variable, if AWS_REGION, S3_BUCKET or CLOUDFRONT_DISTRIBUTION_ID
  is empty — how a Gitea too old for the vars context manifests. Verified
  fail-closed under bash -e, sh -e and bash -euo pipefail.
- AGENTS.md Current Truth: SPF and DMARC recorded as present (Q20), the
  matching §10 High risk row retired, three duplicate Q rows removed.
- docs/reference/AWS-Hosting-Guide.md tracked and given a do-not-execute
  banner; it was an executable procedure for the architecture D1/D3 replace.
- Copy decks: "a working litigator" and "an active litigation practice"
  replaced with the register's own wording; LegalService JSON-LD replaced with
  ProfessionalService; tribunal-secretary offers removed per D14; nine stale
  question blockers swept.
- astro.config.mjs: prefetchAll disabled — it injected JS into every page
  against the zero-JS convention with no decision recorded.
- src/data/site.ts: unregistered response-time commitment nulled (Q27);
  OBA section names downgraded to [assumed] (Q28).
- s3:AbortMultipartUpload reasoning corrected to measure ./dist, not the repo.

Opens Q27, Q28, Q29. AGENTS.md entry (q) records the full resolution,
including the findings declined and why.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012XquaEq4BgWMCwUqLEyNkF
This commit is contained in:
Pouya Lajevardi
2026-08-26 11:28:42 -04:00
co-authored by Claude Opus 5
parent e6abdf42e8
commit 6bf1167624
22 changed files with 1951 additions and 183 deletions
+7 -3
View File
@@ -14,8 +14,9 @@ const insights = defineCollection({
type: 'content',
schema: ({ image }) =>
z.object({
title: z.string().max(70),
description: z.string().min(70).max(160), // doubles as the meta description
// Bounds match docs/04-seo-spec.md: titles 50-60, descriptions 140-160.
title: z.string().min(50).max(60),
description: z.string().min(140).max(160), // doubles as the meta description
publishDate: z.date(),
updatedDate: z.date().optional(),
topic: z.enum([
@@ -29,7 +30,10 @@ const insights = defineCollection({
practiceAreas: z.array(z.enum(practiceSlugs)).min(1),
image: image().optional(),
imageAlt: z.string().optional(),
/** Drafts are excluded from the build, the index, and the sitemap. */
/** INTENT, not yet enforced: drafts must be excluded from the build, the
* index, and the sitemap. Nothing implements that today — the sitemap
* filter in astro.config.mjs covers /legal/ only. Implement before the
* first article ships (docs/04-seo-spec.md). */
draft: z.boolean().default(true),
/**
* Every article is reviewed by Pouya before publication (AGENTS.md D9).
+8 -2
View File
@@ -32,11 +32,14 @@ export const CREDENTIALS = {
'Stitt Feld Handy — negotiation and ADR workshop series',
],
languages: ['English', 'Farsi'],
/** [verified 2026-08-26]. NOT OCNI (lapsed) and NOT the Law Society —
/** The three bodies are [verified 2026-08-26]; **which** OBA sections is
* [assumed] — §4 marks it so, the names come from the strategy brief and
* Pouya has not confirmed them. NOT OCNI (lapsed) and NOT the Law Society —
* listing the LSO implies licensure, which D13 bars. Do not add either. */
memberships: [
'ADR Institute of Canada (ADRIC)',
'ADR Institute of Ontario (ADRIO)',
// TODO(pouya): AGENTS.md Q28 — confirm the section list before publishing it.
'Ontario Bar Association — Construction & Infrastructure, ADR, and Civil Litigation sections',
],
} as const;
@@ -67,7 +70,10 @@ export const CONTACT = {
phone: null as string | null, // [verified 2026-08-26]
phoneFallback: 'By scheduled call',
location: 'Toronto · Ontario · By appointment',
responseTime: 'Inquiries are answered within one business day.',
/** TODO(pouya): AGENTS.md Q27 — is a one-business-day response time a
* commitment you want published? It is not in the §4 register, and it is a
* service level a reader can hold you to. Left null until confirmed. */
responseTime: null as string | null,
linkedin: 'https://www.linkedin.com/in/pouyalajevardi/', // [verified 2026-08-26]
/** Booking parked 2026-08-26 (AGENTS.md R6). Build /contact/ with the intake
* form and a reserved slot so an embed drops in later without a rebuild. */
+1 -1
View File
@@ -29,7 +29,7 @@
Both are fine on --ink (8.00) and --maroon (5.84). See docs/02. */
--gold: #c9a876; /* rules, dividers, icon strokes, on-dark text */
--gold-d: #a88858; /* large decorative display text on cream only */
--gold-l: #e2c89a; /* text on ink or maroon 11.09:1 */
--gold-l: #e2c89a; /* text: 11.09:1 on ink, 8.11:1 on maroon */
--line: rgb(26 22 20 / 0.10);
--line-2: rgb(26 22 20 / 0.06);