Files
adr-sml/docs/01-architecture.md
T
Pouya LajevardiandClaude Opus 5 3c3ba5dc6e
Build and deploy / build-and-deploy (push) Failing after 4s
feat: price med-arb by phase, attest the conflicts undertaking, and answer the first real spam
Pouya's rulings of 2026-09-03 (the last two D20 findings) and 2026-09-04 (the
spam observation and four mitigations), in one change set.

D20 finding 10 — med-arb is billed BY PHASE, each phase at the rates already
published, so /fees/'s "Every figure is on this page" is true as written rather
than narrowed. FEES.medArb is the single source; docs/07 §Med-arb carries the
rule INTERIM against R5, and R5 now carries it back, because a derived price
moves silently when a rate moves.

D20 finding 13 — conduct undertaking (g), attested 2026-09-03, published as his
wording verbatim on /legal/privacy/ and /contact/. The clause that raised the
finding promised to DISCLOSE a conflicts check's outcome, which the attestation
does not cover; it is struck. D20 now partitions 17 fixed / 2 refuted / 1 owed.

Spam, 2026-09-04 — recorded in docs/05 §Observed abuse with the date and
signature. A second honeypot (a decoy checkbox, own class, `hidden`, a label
that tells a human not to tick it) and scoring that LABELS and never rejects:
nothing is dropped, nothing new is stored, and only the operator notification
changes. Q65 opens the WAF cost call.

The timing floor could not be built: there is no timing check and never has
been. docs/05 carries it struck, and every mechanism that would give a real
per-visitor clock breaks zero-JS, handler-and-form-only, or D1. Q66.

configure.mjs gains section 5 — a custom origin request policy forwarding
CloudFront-Viewer-Address on /api/*. Written, dry-run against the live
distribution, NOT applied. It reads the handler's own header reads and refuses
to run if the whitelist omits one.

And reading the live account to do it found four AGENTS.md §7 rows saying the
intake backend was undeployed, two days after it went live — corrected against
get-function-configuration, get-routes, get-stage, get-policy and the deployed
zip, which was downloaded and read.

Review: adversarial-reviewer only (claims-auditor is D20's cutover pass and has
run). Round 1 five lenses, 56 findings, 7 blocking, 4 refuted by an independent
refuter; round 2 four lenses, 36 findings, 33 of them defects in round 1's own
repairs. Stopped at two per D19.

Gates, exit status read for each: check 0 · build 0 (23 pages) · check:claims 0
· check:intake 0 · og:proof 0 · lint 0 · spam-score.test 39/39 with 6/6 mutations
killed · router.test 30/30 · minifier grep 1 (clean) · lighthouse 0, no category
below 95 · configure.mjs dry run 0, nothing written.

Nothing deployed and nothing applied.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Md3GndFqWPzK78xAoebsg5
2026-09-04 10:06:37 -04:00

739 lines
41 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 01 — Information architecture
Authority: `AGENTS.md` §3 D5 (full multi-page), §6, §5 (audience model).
Every claim in the copy outlines below must clear `AGENTS.md` §4.
---
## Why multi-page at all
The site being replaced is one scrolling page. One page can hold one title, one
meta description, one canonical URL, and one primary topic. It therefore gets
one shot at a search result.
The practice's target searches are not "Toronto mediator" — that term is owned by
retired judges with twenty years of name recognition, and the strategy brief is
explicit that competing there is the wrong game (§II). The winnable searches are
specific: *construction lien mediation Ontario*, *SaaS contract arbitration
Canada*, *SABS mediation Toronto*, *technology dispute neutral*, *Farsi-speaking
mediator*. Each of those wants its own page, its own title, its own copy, and its
own structured data.
That is the entire argument for the structure below. It is a discoverability
decision, not an aesthetic one.
---
## Sitemap
```
/ Home
/about/ Biography, credentials, the professional record
/mediation/ Mediation — the process, formats, rules
/arbitration/ Arbitration — the process, tracks, rules
/med-arb/ Med-Arb and hybrid processes
/practice/ Practice areas index
/practice/construction/ Construction and infrastructure disputes
/practice/technology/ Technology, AI, and data disputes
/practice/energy/ Energy, grid, and regulatory disputes
/practice/insurance/ Insurance, SABS, and accident benefits
/practice/shareholder/ Shareholder, partnership, and family business
/practice/cross-cultural/ Cross-border and diaspora disputes
/process/ What an engagement looks like, step by step
/fees/ Fee schedule and engagement terms
/for-parties/ Plain language: what mediation actually is
/insights/ Article index
/insights/[slug]/ Individual articles
/contact/ Intake form and booking
/legal/privacy/ Privacy policy — PIPEDA
/legal/terms/ Terms of use
```
Nineteen fixed URLs plus one per article — **and four more, all `noindex` and all
excluded from the sitemap in `astro.config.mjs`.** They are utilities rather than
pages in the IA above, which is why they are listed here rather than in it:
```
/contact/received/ The intake form's success landing page
/contact/could-not-send/ Its failure landing page
/bio/ Source of the one-page PDF (R16)
/404/ Emitted as dist/404.html — see below
```
The two `/contact/` pages exist because the site ships **zero JavaScript**, so
the form is a plain POST and the handler answers `303 See Other` to a real URL —
`docs/05` §Build step 8 has the reasoning. `/bio/` exists so the PDF circulated
with an appointment proposal is a *rendering of a reviewed page* rather than a
document outside this project's review apparatus.
⚠️ **`/404/` IS THE ONE ROUTE THAT BREAKS THIS DOCUMENT'S OWN URL RULES, AND IT
HAS TO.** The rules above are lower-case, hyphenated, trailing slash, no file
extensions. Astro emits `src/pages/404.astro` as **`dist/404.html`** — a file at
the root, outside `build.format: 'directory'` — because that is the object name a
CDN custom error response can point at. `SEO.astro` still sees the path as
`/404/`, which is why its `OG_CARDS` key is `/404/` while the URL a tool fetches
is `/404.html`. Added 2026-09-01; `docs/04` had asked for the page since before
build step 1 and it did not exist.
**So: 23 built pages plus one per published article.**
⚠️ **AND THIS SENTENCE USED TO END WITH A REASSURANCE THAT WAS DISPROVEN THE DAY
THE 404 PAGE WAS ADDED.** It read: *"`npm run lighthouse` enumerates them from
`dist/` rather than from this list, which is why this count being stale could never
make the gate miss a page."* Both `scripts/lighthouse.mjs` and
`scripts/og-proof.mjs` enumerated **`index.html` under `dist/`**, not every page —
so both missed `/404/`, and `og:proof` reported it backwards, as an orphaned card
rather than an unchecked page. The count being stale was not the failure mode; the
**definition of "a page"** was. Both now take any `.html` at the root as well, and
`check:claims` always did, which is why the new page's copy was inside the claim
register from its first build.
**The rule that replaces the reassurance:** a route that does not live at
`<dir>/index.html` is invisible to anything that looks for `index.html`. If a
future page is emitted outside the directory convention, grep the three scripts
for `index.html` before trusting any of them.
### URL rules
- Lowercase, hyphenated, trailing slash, no file extensions.
- `/practice/<area>/` is a stable namespace — new practice areas slot in without
touching anything else.
- `/insights/<slug>/` — no dates in the path. A dated URL makes a piece look
stale at 18 months, and this content is mostly evergreen.
- Never change a published URL. If one must move, ship a CloudFront Function
301 and record it in the Change Log.
### Navigation
**Primary (header).** About · Mediation · Arbitration · Practice · Fees ·
Insights · Contact
"Practice" is a dropdown to the six areas, with `/practice/` itself reachable.
Build it as a `<details>` element or a CSS-only disclosure — no JavaScript.
**Footer.** Full sitemap in three columns, plus contact block, professional
designations, LinkedIn, privacy, terms, and the SML Company Ltd. entity line.
**Deliberately not in primary nav:** `/process/`, `/for-parties/`, `/med-arb/`.
These are linked contextually from the pages that lead to them. Seven items is
the ceiling before a nav stops being scannable.
---
## Deliberate omission: Indigenous engagement
The strategy brief (§III.4) rates Indigenous engagement, IBA, and consultation-
breakdown mediation as *"strategically the most valuable single niche"*.
⚠️ **THAT SENTENCE USED TO CONTINUE "for a Q.Med on the C.Med-Arb pathway", AND
BOTH HALVES WERE DEFECTIVE.** *"pathway"* is a struck stage form (§4, 2026-08-29),
and the clause sat **outside** the quotation marks in `docs/01`'s own voice while
a parenthetical called the whole thing *"the brief's framing, quoted"* — a
quotation boundary the marks do not draw, which is the gloss defect inverted.
Only the four quoted words come from the brief, and the brief is not in this
repository (R14). The reasoning below never turned on either half.
There is no page for it at launch, on the following reasoning:
The brief itself says the niche *"requires deliberate relationship work with
First Nations advisors, federal and provincial engagement staff, and corporate
proponents over a multi-year horizon."* A practice page is a claim of present
capability. Publishing one before that relationship work exists would be read as
exactly what it is by the audience best positioned to notice — and that audience
is small, well-connected, and unforgiving of practitioners who arrive claiming a
seat. The cost of getting this wrong is much higher than the cost of waiting.
Revisit at month 1218, once there is relationship history to point to.
**This reasoning is Claude's, recorded for Pouya's decision — not yet his call.**
## Not a practice area yet: tax-adjacent disputes
**Canadian Tax Foundation membership is verified** (`AGENTS.md` §4 — read the stamp there; a second copy of a currency stamp goes stale where nobody re-reads it, and this one had)
and it is the one credential none of the six areas above touch. Tax-adjacent
disputes are genuinely ADR territory — valuation and purchase-price disputes on
a share sale, indemnity and earn-out fights that turn on a tax position,
shareholder splits where the assessment is the thing actually in dispute.
**There is no seventh practice page at launch,** for the same reason as the
section above and not a weaker one: a practice page is a claim of present
capability, and there is no track record to point at. A membership is a
credential, not a caseload.
It belongs on `/about/` with the other memberships. Revisit at the **month
1218 review, alongside the Indigenous engagement decision** — one review, two
candidates. Tracked as `AGENTS.md` R3.
---
## Page specifications
Each page below gives its job, its primary audience, its target search intent,
and its section outline. Copy itself is in `03-content-spec.md`.
### `/` — Home
**Job:** establish the unusual stack in under ten seconds, and route each of the
four audiences to its surface.
**Audience:** all four; leans in-house counsel.
**Search intent:** brand and name searches; "Toronto ADR practice".
1. **Hero.** Eyebrow (`Mediation · Arbitration · Toronto`), display headline,
two-sentence positioning paragraph, two CTAs (*Request a consultation* /
*How I work*), portrait.
2. **Credential row.** Three slots: `Q.Med` · `JD + ML` · `EN · FA`. Never
matter counts — `AGENTS.md` §4.
3. **The approach.** The "two directions at once" argument — law and engineering
converging on the same dispute. ⚠️ **The noun pair "law and engineering" is
the construction Q37 struck and Q41(a) extended to prose. The argument
stands; do not lift the phrase into copy** — it reached `/` once already.
State the asymmetry instead: `docs/03` §The credential row. Infinity mark as the visual anchor.
4. **Two practices.** Mediation and Arbitration cards → `/mediation/`, `/arbitration/`.
Med-Arb named here, linking to `/med-arb/`. ⚠️ **This item read "named here as
the long-term arc" until 2026-08-29.** There is no arc — C.Med-Arb is struck
(§4) — and Med-Arb has had its own §4 Offerings row since 2026-08-27 (Q35),
so it is named as a **present offering**. `index.astro` cited this item as
amended before it was; both are correct now.
5. **Practice areas.** Six-card grid → `/practice/*`. This is the most important
block on the page for search, because it distributes authority to the pages
that can actually rank.
6. **Process preview.** Compressed five-step strip → `/process/`.
7. **Latest insights.** Three most recent → `/insights/`. **NOT BUILT AT STEP
2, and it arrives at STEP 7 with the collection it lists.** `ArticleCard` and
the drafted slate (D9) land in the same step; rendering the section against an
empty collection means shipping a component's scoped CSS to every visitor for
a block with nothing in it, plus a props surface with no call site.
`SiteHeader` already gates the Insights **nav** item on the same collection,
so the page section and the nav item appear together. Recorded here as well
as in the page source, because "eight sections specified, seven built" should
not be discoverable only by reading the file that deviates.
8. **Contact band.** Intake CTA and booking link.
### `/about/` — Biography and credentials
**Job:** be the page an appointing body or opposing counsel reads before agreeing
to an appointment. This page carries the verifiable record.
**Audience:** appointing bodies, ADR institutions, opposing counsel.
**Search intent:** `"Pouya Lajevardi"`, `Pouya Lajevardi mediator`.
1. Portrait, name, designation line.
2. **Narrative biography**, 400600 words. The three-track story — law,
engineering, operating a company — told as one arc rather than three lists.
3. **Credentials**, structured and scannable: designations, education,
certifications, memberships. Every line from `AGENTS.md` §4 Verified.
4. ~~**The credentialing arc.**~~ ⚠️ **STRUCK 2026-08-29 — Pouya, and the
section is deleted from the page, not rewritten.** *"Two held designations,
no journey… An arc invites 'where are you on it'; two designations don't."*
Q.Arb is held and C.Med-Arb is off the site entirely, so the item had no
subject. **Do not restore it from this outline or from the brief (§V), which
treated the arc as part of the story.** What it carried belongs in item 3,
which is a list of held things.
5. **Languages and cross-cultural practice.**
6. **Speaking and publications.** Omit the section entirely until there is
something in it. An empty "Speaking" heading is worse than no heading.
7. `Person` JSON-LD. Downloadable one-page PDF bio — brief §VIII lists this as
an asset for circulation with appointment proposals.
> ✅ **SHIPPED AT BUILD STEP 9, 2026-08-31. R16 / Q45 DISCHARGED.**
> `public/pouya-lajevardi-bio.pdf` exists, is committed, and this page links it
> between the biography and the credentials.
>
> **The two decisions R16 left open are both taken, and the second makes the
> first safe.** *(a)* Neither "generated at build" nor "authored once": the bio
> is a **page**, `src/pages/bio.astro`, so every line is reviewed by the same
> apparatus as every other page — and `npm run bio:pdf` renders the PDF from the
> built page through the Chrome that Lighthouse already requires, so it adds no
> dependency. It is **not** part of `astro build`, because CI has no Chrome.
> *(b)* It carries **nothing the site does not** — every line renders from
> `CREDENTIALS`, `ROLE`, `BOUTIQUE`, `PRACTICE_AREAS`, `FEES` and `CONTACT`. No
> matter list (which R16 correctly said would collide with §4 Forbidden), no
> referees, no figure that is not on `/fees/`.
>
> ⚠️ **`npm run bio:pdf` asserts ONE PAGE and writes nothing if the count is
> wrong.** And reading the rendered PDF caught a breach the source review had
> not: its opening clause scoped **mediation** commercial, which Q56 leaves
> unscoped deliberately. Nothing in the build regenerates the PDF — `docs/06`'s
> cutover checklist carries the re-render.
> *Original deferral note, kept because its reasoning is why this is R16 rather
> than a to-do.* **The PDF bio ships at BUILD STEP 9, alongside `/fees/` —
> deferred by Pouya 2026-08-28 (Q45), tracked as `AGENTS.md` §12 **R16**.** His reasoning: it is a
> derived artefact, so building it before `/about/` and `/fees/` are final means
> building it twice, and an appointment proposal needs the fee card as much as
> the bio. The two decisions below are **not** settled by the deferral and travel
> with R16. Original note follows, and its reasoning is why this is R16 rather
> than a to-do. **The PDF bio does NOT ship with build step 3, and the omission
> is stated rather than silent** — `AGENTS.md` Q45, opened 2026-08-28. No such file exists
> in the repo, and a link to one that does not exist is a broken link on the
> page an appointing body reads. It is also not a formatting job: a one-page bio
> is a **credential document** whose every line has to trace to §4 exactly as a
> web page does, and it will be circulated detached from the site, where no
> reviewer sees it again. Two decisions are Pouya's — whether it is generated at
> build (a dependency, against R11) or authored once as a designed artefact, and
> whether it carries anything the site does not. Everything else on this page
> ships.
### `/mediation/`
**Job:** convert counsel who have already decided on mediation and are choosing a
neutral.
**Search intent:** `commercial mediator Toronto`, `ADRIC mediation rules`,
`what happens at mediation Ontario`. **These are queries, not the page's scope —
Q56, 2026-08-30.** The mediation offering is **not** scoped commercial (§4's row
is unscoped; the arbitration scope is a legal gate and does not transfer). Do not
read the first query back into the `<title>` or the copy, which is where
*"Commercial Mediation"* came from in the first place.
1. What the service is; the neutral's role stated plainly.
2. **Formats:** full-day, half-day, shuttle, remote, hybrid.
3. **Rules:** the **ADRIC National Mediation Rules**, or a bespoke protocol
agreed by the parties.
⚠️ *This item read "ADRIC Model Mediation Rules" until 2026-08-28 and that is
not the name of anything ADRIC publishes* — **0 occurrences** across all four
of its rules pages, against **10** of "National Mediation Rules" on the
document's own page. "Model" belongs to the **Model Dispute Resolution
Clause**, a contract clause inside the rules. Sourced and reproducible:
`docs/reference/adric-rules.md` Finding 1. The spec would have put a wrong
institutional name on a public page, which is the `Chartered
Mediator-Arbitrator` shape a second time — caught here only because R14 sent
the fetch out before the copy was written.
4. **What parties should bring** — briefs, documents, authority to settle.
5. **Confidentiality and without-prejudice framing.**
6. Practice areas → `/practice/*`.
7. Fees → `/fees/`. Booking → `/contact/`.
⚠️ **This page carries no first-person conduct commitment, and that is
deliberate.** How Pouya handles caucus material, and what he undertakes about a
bespoke protocol, are claims about his practice with no §4 row. Two of them
shipped here for one pass and were removed. Drafted for his ruling as **Q54(d)**
and **(e)**; until he rules, the Confidentiality and Rules sections describe what
an *agreement* settles, not what he promises.
### `/arbitration/`
**Job:** the same, for arbitration. *(This read "and to state the Q.Arb
position honestly" until 2026-08-29; Q.Arb is held and there is no position to
state.)*
**Search intent:** `sole arbitrator Ontario`, `expedited arbitration Canada`,
`documents-only arbitration`.
1. What the service is; sole-arbitrator and party-appointed
appointments.
2. **Tracks:** documents-only, expedited, full hearing.
3. **Rules:** ADRIC, ad hoc. ✅ **Both are named on the page.**
⚠️ **ADR CHAMBERS WAS STRUCK FROM THIS ITEM AND FROM THE PAGE ON 2026-08-30
— Pouya's ruling, and do not reinstate it from an earlier reading of this
spec.** This item listed it as a third rule option for most of the project.
`docs/reference/adr-institution-names.md` sources what the firm *publishes*;
it does not source that an outside neutral can be appointed under those
rules, and the firm's own model clause reads *"at ADR Chambers"* — so naming
it here implied a relationship the repository does not establish. The ADRIC
edition date (1 March 2025) is published on the page because ADRIC publishes
one.
4. Awards — form, reasoning, timing.
5. ~~**Credentialing status, stated plainly.**~~ ⚠️ **STRUCK 2026-08-29 —
Pouya. Q.Arb is HELD, and §4's paired-disclosure condition dissolved with the
stage it required.** *"It existed only because Q.Arb was in progress. There
is no stage left to disclose."* The page's whole credentialing-stage section
is deleted, its `<h1>` no longer reads *"Available now, and open about the
stage"*, and **no residue of the condition may be reintroduced** — a page
that offers arbitration and then reaches for something qualifying to say is
reproducing it from memory. **What survives:** all three forms — sole,
party-appointed and co-arbitration — are offered now, with an `AGENTS.md` §4
Offerings row for each `[verified 2026-08-26 — Pouya]`, and the scope is
**commercial** (Q39, Pouya's own choice, never part of this condition).
*(This paragraph read "(co-arbitration, co-arbitration)" until 2026-08-26 —
edited without being re-read — and then carried a caveat against Q36 for
several hours after Q36 closed. Both are recorded because the pattern is the
same one: an edit that was not re-read against the register.)*
6. Fees, booking.
⚠️ **No first-person conduct commitment on this page either.** The Rules and
Awards sections say what a process and an award *should* settle and contain, not
what Pouya undertakes to do — **Q54(e)** and **(f)** are drafted and unruled, and
both shipped here in the first person for one pass. The `<title>` names a
**service**, never "Sole Arbitrator": §4 grants exactly one practised role and it
is "Mediator".
### `/med-arb/`
**Job:** own a term few Canadian neutrals explain well. *(This read "and frame
the C.Med-Arb endpoint" until 2026-08-29; C.Med-Arb is off the site.)*
**Search intent:** `med-arb Canada`, `what is med-arb`, `arb-med`.
1. What Med-Arb is; how it differs from Arb-Med.
⚠️ *As built, the page flags the confusion and does **not define arb-med***.
No source for a definition of arb-med is committed, and this repository does
not publish a definition of a third party's process from recall (R14). The
page says only that the two are one syllable apart, that the processes are
not interchangeable, and that a reader should check which one their contract
names — against the rule set the contract adopts, not against this page. **It
states no differentia at all**, because on a page that defines med-arb as
mediation→arbitration, "the phases run in a different order" *is* a
definition of arb-med by inversion. That wording shipped for one pass and
`claims-auditor` caught it. Define arb-med when a source is committed, or add
an **Arb-Med** row to `AGENTS.md` §11 — not before.
2. The procedural fairness objection, addressed head-on rather than elided.
⚠️ *The page answers it at the level of **process design** — what a med-arb
agreement has to settle before the mediation phase begins. It does **not**
carry Pouya's own protocol commitments, which are claims about his practice
with no §4 row.* Three are drafted for his approval in **Q54**; the section is
incomplete until he rules.
3. When it fits and when it does not.
4. ~~The C.Med-Arb designation and why it is the practice's stated endpoint.~~
⚠️ **STRUCK 2026-08-29 — Pouya. C.Med-Arb is out entirely, and this is a
deliberate deviation from the strategy brief**, which made it *"the explicit
long-term professional narrative"*. His reasoning: *"Pouya holds Q.Med and
Q.Arb, which is what med-arb requires. The page says he conducts med-arb and
stops."* The section is **rewritten, not edited** — it earned its credibility
from an incomplete credential and now says what med-arb demands of one
neutral. ⚠️ **AND IT NO LONGER RESTATES THE DESIGNATIONS EITHER —
2026-09-02, `claims-auditor` D20 pass, finding F.** §Why this practice held a
bare `DESIGNATIONS_HELD_LINE` sentence sitting directly beneath §Rules'
quotation of ADRIC requiring *"a high level of practitioner competence"*, so
the designations read as meeting a bar ADRIC answers with the Chartered
Med-Arb — struck from this site entirely. The section now makes **no
credential claim at all**; `/about/` publishes them and the JSON-LD carries
them. Do not reinstate one here.
5. **The ADRIC Med-Arb Rules**, which this spec did not mention and which exist:
~~a published rule set, presented to ADRIC's membership~~ — **CORRECTED
2026-09-02, `claims-auditor` D20 pass, finding 6.** The source says a
**discussion draft** was presented, not the rules; `adric-rules.md` Finding 2
records no adoption and no effective date, in deliberate contrast to the
Arbitration Rules ("effective March 1, 2025") and the Mediation Rules ("the
existing rules remain in effect"). The page was corrected on 2026-09-01 and
**this line still instructed the struck form for a day** — the Q.Arb lesson
exactly: page fixed, spec still telling the next implementer to write the
false version. Write it as **presented to the membership as a discussion
draft at ADRIC's 2019 annual conference** — drafted for domestic commercial
disputes and designed to work with its Mediation and Arbitration Rules.
Sourced: `docs/reference/adric-rules.md` Finding 2. Quote ADRIC's own
framing rather than paraphrasing it, and **keep its superlatives inside the
quotation marks** — Finding 5 lists the two not to lift.
This page is a strong candidate for the best-performing page on the site.
Search demand exists and competition is thin. *(This closed "and it maps exactly
to the brand's long-term narrative" — the C.Med-Arb narrative struck thirteen
lines above on 2026-08-29. The two reasons that survive are the two that were
ever measurable.)*
### `/practice/` — index
Six cards, one paragraph each, linking onward. Also the natural home for the
"also offered" strip: **early neutral evaluation, dispute-system design, and
pre-dispute technical advisory** — three, and each has an `AGENTS.md` §4
Offerings row.
> ✅ **THE STRIP MAY SHIP — Q46(a) closed 2026-08-28, on Pouya's second
> ruling.** All three §4 Offerings rows now read **PUBLISHABLE**. Read the ENE
> row before writing the strip: gate 1 (*is the activity gated?*) is closed as
> **`[Pouya's stated basis 2026-08-28]`** and **not** as `[verified]`, because no
> source for any of the three exists in `docs/reference/`. That is a deliberate,
> attributed position of the architect's, not a sourced fact — do not describe it
> on the page or in a comment as settled law.
>
> **Two framing constraints survive the ruling and are not discretionary:**
>
> 1. **ENE is an assessment delivered to BOTH parties**, never advice to one. It
> is the offering nearest §4's NOT-NEGOTIABLE boundary — a neutral assessment
> of the *merits* sits closest to *"providing legal services"*.
> 2. **Pre-dispute advisory carries a conflict caution**, and it is practice
> management rather than a publication gate: advisory work for one
> organisation can conflict against a later appointment in the same matter.
> **No copy may imply the offering is free of that tension** — this strip is
> where the temptation to imply it will arise.
> **`settlement counsel` IS STRUCK FROM THIS STRIP AND MUST NOT BE RESTORED.**
> `AGENTS.md` Q42, 2026-08-27. Pouya struck it as his own error in this document:
>
> > "Settlement counsel acts **FOR a party** in negotiation. That is a partisan
> > role, and putting it on a site that (a) sells neutrality and (b) asserts no
> > licensure under D13 is **wrong twice over**: it undercuts the brand's
> > central claim and it edges into acting for a client."
>
> Note which objection comes first. This is not primarily a compliance problem —
> it is a **positioning** problem, and it would have been wrong on a site with
> no licensure question at all. The compliance half is the aggravation, not the
> reason. Never priced, never offered, never listed: it is a struck row in §4
> Offerings so that a later reader finds the decision rather than the gap.
### `/practice/construction/`
**Search intent:** `construction lien mediation Ontario`, `delay claim mediation`,
`subcontract dispute arbitration Toronto`.
Dispute types (lien, delay, change orders, scheduling, subcontract, deficiency);
what active litigation exposure in the same matters brings to the room; the
Ontario megaproject pipeline as context — Darlington SMR, Bruce C, data centres,
transit; typical process shape. Strongest immediate fit per brief §III.1.
### `/practice/technology/`
**Search intent:** `SaaS dispute arbitration Canada`, `AI vendor dispute`,
`data residency dispute resolution`, `software contract mediator`.
The differentiator page. Dispute types: software contracts, SLA and MSA
breakdowns, data residency and processing, AI vendor diligence, cloud
sub-processor disputes, IP and licensing.
**Write this page in the register the brief demands:** a neutral who can read an
API trace, a model card, or a System Impact Assessment on the same page as the
contract. The brief warns explicitly against softening this to "technologically
literate" — the claim is engineering practice, so the copy says engineering
practice.
### `/practice/energy/`
**Search intent:** `Bill 40 dispute`, `IESO dispute resolution`,
`OEB leave to construct dispute`, `grid connection dispute Ontario`.
Connection assessment and approval, leave to construct, proponentmunicipality
disputes, IESO market participation, and the large-load / data-centre connection
regime. Brief §III.2 frames this as a 2436 month build. **Write it as a genuine
position, not a claim of existing volume.**
> ⚠️ **"CONNECTION ALLOCATION" WAS THIS SECTION'S WORDING AND IT IS NOT AN
> ONTARIO TERM. Corrected 2026-08-29**, against the IESO's own pages
> (`docs/reference/ontario-energy-regulatory.md`), which contain **zero**
> occurrences of "allocation" of any kind across the connection process. It also
> reached `src/data/site.ts` and shipped in the six-card grid on three pages.
>
> **Use the terms these bodies use:** the IESO's own words are *"the IESO's and
> transmitter's connection assessment and approval (CAA) process"*, within which
> the IESO performs a *System Impact Assessment (SIA)* and the transmitter a
> *Customer Impact Assessment (CIA)*. ⚠️ **This read "CAA is the umbrella" until
> 2026-09-03** — which is the extract's own COMMENTARY, not the IESO's, and
> `CLAUDE.md` is explicit that commentary around a quotation is this
> repository's voice. The pages took the attribution from here and gave the
> process to the IESO alone. **And it is the CONNECTION PROCESS that runs to
> *up to* six stages, not the CAA** — the source scopes the count by connection
> type, and CAA is stage 2 of that process rather than a name for it. Naming the
> wrong subject here is how the conflation reaches a page. **Ontario has no
> interconnection queue** — the IESO says so in terms and works from "committed
> projects" instead, so "our place in the queue" describes nothing. The
> genuinely adjacent term, the OEB's *Capacity Allocation Model* in the
> Distribution System Code, is about housing-development connections and is a
> different thing.
>
> **Bill 40 is identified**, and the identification was not safe to assume: it
> is Bill 40 of the **44th Parliament, 1st Session — the Protect Ontario by
> Securing Affordable Energy for Generations Act, 2025**, Royal Assent
> 11 December 2025. Bill numbers are reused every parliament and most Ontario
> Bill 40s are unrelated to energy (43-1 is a highway-traffic bill). Cite the
> parliament and session, never the bare number.
### `/practice/insurance/`
**Search intent:** `SABS mediation`, `LAT pre-hearing mediation`,
`accident benefits mediator Ontario`, `MIG dispute`.
> ⚠️ **`LAT pre-hearing mediation` IS A SEARCH INTENT AND NOTHING ELSE. It must
> never be published as an offering** — `AGENTS.md` Q41(c), closed 2026-08-27,
> verified 2026-08-28 against the Tribunal's own materials and extracted into
> **`docs/reference/lat-case-conference.md`**. It reached `src/data/site.ts` as a
> service blurb once already; this note exists because a search-intent list is
> where that lift starts.
>
> What the verification found, in one line each:
>
> - **LAT Rule 2.4:** *"'Case Conference' has the same meaning as 'Pre-Hearing
> Conference' as defined in the SPPA."* **"Pre-hearing" is the Tribunal's own
> label**, and what it labels is a case conference.
> - **Rule 14.3:** a **Member** presides and does not then sit on the hearing
> panel except with the consent of the parties; **Rule 14.6:** parties must
> attend. The neutral is the Tribunal's. A privately retained one is not
> appointed to it and cannot be.
> - The LAT Rules contain **zero** occurrences of `mediat` or `arbitrat` —
> 0 in 66,593 characters. The concept is not in them.
> - The LAT-AABS page itself, though, says: *"Before you apply to the LAT-AABS,
> you may want to consider negotiation or mediation services."*
> **That is the affirmative basis for the offering, in the Tribunal's words** —
> and it is the whole of it.
>
> ⚠️ **THE QUOTATION ABOVE WAS ELLIPSED, AND THE ELLIPSIS REMOVED THE WORD THAT
> SCOPED IT. Corrected 2026-08-29.** It read *"…consider negotiation or
> mediation services… including before filing at the LAT-AABS, and continuing…
> after a claim has been filed."* The Tribunal's second sentence is
> *"Parties are encouraged to attempt to **negotiate** the claim at all times,
> including before filing at the LAT-AABS, and continuing **negotiation**
> discussions after a claim has been filed."* — **negotiation, twice.** The
> second ellipsis deleted the second "negotiation" and made a sentence about
> negotiation read as one about mediation. The full passage is quoted verbatim
> in `docs/reference/lat-case-conference.md`, which now carries the correction
> and the reason it survived three checks.
>
> **The page must state that the mediation offered is PRIVATE, retained by the
> parties, and is not the Tribunal's case conference.** Published blurb:
> *"Accident benefits and SABS entitlement, MIG disputes, and private mediation
> retained by the parties, not the Tribunal's case conference."* **Do not
> restore the "before filing or after" form** — it rested on the elided half.
> The page may quote the Tribunal's actual sentence, which supports mediation
> **before an application**; it may not attribute the after-filing frame to the
> Tribunal. If Pouya holds a roster position that makes more than that true, it
> is a §4 addition — absent a row, it is not.
Highest realistic near-term volume — it flows directly from the existing
personal-injury and SABS work, and brief §IV.7 notes the segment is
underserved by senior mediators. Unglamorous and worth doing well.
### `/practice/shareholder/`
**Search intent:** `shareholder dispute mediation Ontario`,
`partnership dissolution mediator`, `family business succession dispute`.
Shareholder and partnership disputes, co-founder breakdowns, family-business
succession, SME exits. The operator angle — running SML Company Ltd. alongside
the practice — is the differentiator here.
**"Family Business" means COMMERCIAL disputes among family shareholders, and the
page must say so.** Pouya's ruling of 2026-08-27 (`AGENTS.md` Q39): the label
covers shareholder and partnership disputes, co-founder breakdowns and business
succession — **not** family law. **Family arbitration under the *Family Law Act*
is not offered**, and that activity is separately gated by prescribed training
(`docs/reference/ontario-family-arbitration-training.md`), so the exclusion has
to be legible rather than left to be inferred from the surrounding nouns.
**One sentence, not a section.** His instruction, and the reason is also the test
for whether it belongs at all: *"The page should say plainly that family law
matters are not accepted. One sentence, not a section: it saves a wasted intake
call, which is the only reason it earns its place."* A disclaimer that grows into
a paragraph reads as defensive, which is the opposite of the point.
### `/practice/cross-cultural/`
**Search intent:** `Farsi speaking mediator Toronto`,
`Iranian Canadian business dispute`, `diaspora shareholder dispute`.
Note that D4 makes the site English-only. This page describes Farsi-language
capability in English; it is not a Farsi page. Diaspora family-business
succession, dual-jurisdiction shareholder disputes, partnership disputes among
diaspora entrepreneurs, cross-cultural commercial matters.
### `/process/`
Five steps, from intake to conclusion: confidential intake (day 0) · engagement
and framing (17) · pre-session exchange (721) · the session (2130) · binding
conclusion (30+). Also: conflicts checking, confidentiality, and what happens if
a matter does not settle.
**The timings are published as the TYPICAL shape of an engagement, explicitly
not a guarantee** — `AGENTS.md` Q43, Pouya 2026-08-27. Render `PROCESS_FRAMING`
(`src/data/site.ts`) **adjacent to the steps**, on this page and on `/`. The
numbers above are unchanged; what is required is that they never appear
unframed. *"Published as typical, they are honest and useful; published as
commitments, the first matter that slips makes the page false."*
### `/fees/`
**Unblocked — `AGENTS.md` Q4/Q14 answered (D14). Build from the confirmed card
in `docs/07-fees.md`; still do not invent numbers.**
Hourly rate; half-day and full-day mediation; **med-arb, billed by phase and
carrying no figure of its own** (added 2026-09-03, `docs/07` §Med-arb, INTERIM
against R5 — the page shipped it and this outline did not name it); preparation
time policy; cancellation terms; administrative fee; HST treatment; who pays and
how costs are shared between parties; payment terms. A real page with real numbers, or a
`TODO(pouya)` — nothing in between.
### `/for-parties/`
**Job:** serve the self-represented tier without diluting the counsel-facing
pages. Plain language, short sentences, no jargon.
What mediation is · what it is not · who the mediator is and is not —
**render `NEUTRAL_ROLE_LINE`, and read `docs/03` §For parties before writing a
word of it.** ⚠️ **THIS LINE READ *"(not your lawyer, not a judge)"* UNTIL
2026-08-30 AND IT INSTRUCTED A FORM STRUCK ON 2026-08-28.** *"Not your lawyer"*
**presupposes lawyer status**, which §4 Forbidden bars and D13 treats as hard as
assertion — a negation still carries the presupposition. `docs/03` struck it
with that reasoning two days earlier and the sweep never reached this file;
build step 6 is the step that consumes this line, and it was found here by
`adversarial-reviewer` while the page itself avoided the trap · what happens on the day · what it costs · what happens if
you do not settle · how to prepare.
### `/insights/` and `/insights/[slug]/`
Astro content collection, MDX. Index reverse-chronological with topic filtering
by practice area.
Article frontmatter: `title`, `seoTitle` (optional), `description`,
`publishDate`, `updatedDate`, `topics[]`, `practiceAreas[]`, `readingTime`,
`image` and `imageAlt` (both optional, but `imageAlt` is **required whenever
`image` is set**), `draft`, `reviewedByPouya`.
`title` is the headline and, for articles, the `<title>` — they carry no
` · Pouya Lajevardi` suffix; see `04-seo-spec.md` for why. `seoTitle` replaces
it when a headline that reads well falls outside 5060. `src/content.config.ts`
enforces the rendered length and names the offending string in the error.
Dates are date-only ISO (`2026-08-01`), parsed as UTC and round-tripped, so a
typo fails the build rather than shipping as 1970 or as the wrong day.
`reviewedByPouya` carries D9: the schema refuses to build an entry with
`draft: false` and `reviewedByPouya: false`.
Content territories, from brief §VII: process explainers · regulatory commentary ·
industry-specific dispute commentary · anonymised reflections · technical
explainers for lawyers · credentialing and career-arc content.
`Article` JSON-LD with `author` pointing at the `Person` entity. Each article
links to the relevant practice-area page — this is what turns the blog into
ranking power for the pages that convert.
**The section stays out of primary navigation until at least two pieces are
live.** An empty blog signals abandonment more loudly than no blog signals
anything.
### `/contact/`
Intake form (`05-backend-spec.md`), booking embed, direct email
(Q3 — **there is no public phone number**; render `CONTACT.phoneFallback`,
"By scheduled call", wherever a number would go), Toronto by-appointment line, response-time expectation, and an explicit
note that submitting the form does not create a retainer or a mediatorparty
relationship and does not itself create a conflict check.
### `/legal/privacy/` and `/legal/terms/`
Required, not optional — the intake form collects personal information about
identifiable third parties in live legal disputes. What is collected, why, where
it is stored (DynamoDB, region), retention period, who can access it, how to
request deletion, and the contact for privacy inquiries. Must match what the
backend actually does.
---
## Build order
Dependency-ordered, so nothing is blocked mid-stream:
1. Scaffold, tokens, base layout, header, footer, SEO component
2. `/` — proves the design system end to end
3. `/about/` — the credential spine everything else references
4. `/mediation/`, `/arbitration/`, `/med-arb/`
5. `/practice/` and the six area pages
6. `/process/`, `/for-parties/`
7.`/insights/` plumbing, then the drafted articles — **built 2026-08-31.**
Step 7a returned Lighthouse (`AGENTS.md` §7, R11); 7b built the OG card
generator (R15) and the Insights routes; 7c drafted the five launch articles.
**The section is not live and cannot be**: D9 and `src/content.config.ts`
between them mean an article publishes only when Pouya sets both flags, and
`SiteHeader` keeps Insights out of the nav until two are live
8.`/contact/` — **the page is built and the pipe behind it is LIVE as of
2026-09-02.** The handler is deployed and the CloudFront `/api/*` behaviour is
in place; `AGENTS.md` §7 holds the state and this list does not restate it.
`docs/05` §Build step 8 records three deliberate deviations from that spec, and
§Observed abuse records the first real spam and what was added for it.
⚠️ **This item read *"the pipe behind it is not"* until 2026-09-04** — written
under D11, true then, and left asserting an undeployed backend for two days
after cutover
9.`/fees/`**built 2026-08-31 on Q59's ruling**, which settled where the
overtime hour starts (the session cap) and supplied the reservation point that
answers the rate card's arithmetic anomaly. The PDF bio shipped with it (R16)
10.`/legal/privacy/` and `/legal/terms/` — **built 2026-08-31, written to the
backend as actually built.** Three of the privacy policy's statements are
DERIVED — the collected-data list from `INTAKE_FIELDS`, the retention period
from the handler's own figure, the analytics paragraph from
`ANALYTICS.installed` — so they cannot drift from the implementation
11. Audit and cutover (`06-deployment.md`) — **not started. Nothing is deployed.**
`claims-auditor`'s single pass over the whole finished site (D20) is a blocking
item there and has not run