feat: Q.Arb is held; strike C.Med-Arb entirely; dissolve the paired disclosure
Build and deploy / build-and-deploy (push) Failing after 4s

Pouya's ruling, 2026-08-29. Treated as D3-class and swept accordingly.

§4
  Q.Arb becomes a HELD designation. Obtained July 2026 — recorded in the
  register, deliberately not published. Public copy carries "Q.Arb (ADRIC /
  ADRIO)" beside Q.Med and nothing more. Every stage form is struck:
  "commenced", "in progress", "pathway", "not yet".

  C.Med-Arb as a stated goal is struck. This DEVIATES FROM THE STRATEGY BRIEF,
  which made it "the explicit long-term professional narrative"; the brief is
  not in this repository, so the deviation is recorded in four places so nobody
  reinstates it from a document no reader can open. The designation stays in
  §11 as a definition — what is struck is its status as a goal of his.

  The paired-disclosure condition dissolves. It existed only because Q.Arb was
  in progress; there is no stage left to disclose, and a condition with no
  subject cannot be half-kept.

Pages
  /about/'s credentialing arc is DELETED, not rewritten — two held designations
  are not a journey. /arbitration/ loses its stage section and its "Available
  now, and open about the stage" h1. /med-arb/'s endpoint section is rewritten.
  Deleting CREDENTIALS.goal/goalName rather than emptying them turned every
  consumer into a build error, which is how the last two surfaced.

  hasCredential now maps CREDENTIALS.designations instead of indexing [0];
  _DesignationRowParity pins the visible credential row to the same constant.

check:claims
  q-arb-as-a-stage (inverted from the predecessor, which barred Q.Arb reading
  as HELD) and c-med-arb-struck. Each page is now scanned twice — as published,
  and with inline tags collapsed — because [^<] cannot cross <strong>, which
  this site sets in prose.

Two open questions for Pouya, neither blocking:
  Q55 — the acquisition date. §4 says obtained July 2026; the Change Log of
  2026-08-26 records "commenced August 2026", both stamped [verified — Pouya].
  They cannot both be true. Nothing published turns on it.
  Q56 — is the mediation offering scoped commercial? §4 leaves it unscoped;
  four surfaces say "commercial mediation"; /practice/insurance/ offers
  mediation in insured-versus-insurer SABS matters.

Two review rounds, all findings applied or declined with a stated reason.
Round 2 found ten lines in docs/03 still instructing the struck form — the
2026-08-29 sweep missed them because `git grep 'Q.Arb'` is line-anchored and
the block never names it. Sweep the vocabulary, not only the subject.

Gates, exit statuses read directly, never through a pipe:
  npm run check        exit=0  (0 errors, 0 warnings, 0 hints)
  npm run lint         exit=0
  npm run build        exit=0  (12 pages)
  npm run check:claims exit=0  (11 patterns, 26 approved strings)
  npm audit            exit=0

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Md3GndFqWPzK78xAoebsg5
This commit is contained in:
Pouya Lajevardi
2026-08-30 10:37:19 -04:00
co-authored by Claude Opus 5
parent 79b19a7bd0
commit 610edc24fd
20 changed files with 1063 additions and 606 deletions
+406 -17
View File
@@ -173,8 +173,8 @@ since May.
| Q.Med designation through ADRIC / ADRIO | `[verified 2026-08-25 — strategy brief §I]` | | Q.Med designation through ADRIC / ADRIO | `[verified 2026-08-25 — strategy brief §I]` |
| Has completed multiple sole mediations | `[verified 2026-08-25 — strategy brief §I]` — count deliberately not published, see below | | Has completed multiple sole mediations | `[verified 2026-08-25 — strategy brief §I]` — count deliberately not published, see below |
| **Practised role — "Mediator"** | `[verified 2026-08-28 — Pouya, Q49]`. **The row `Person.jobTitle` stands on, and the ruling grants exactly one.** Pouya: *"one row: 'Mediator', supported by Q.Med plus completed sole mediations."* Both supports are rows immediately above. **"Arbitrator" as a practised role is still NOT a row** — §4 Offerings verifies that appointments are *accepted* and records no completed arbitration, which is why `claims-auditor` struck *"Mediator and Commercial Arbitrator"* from the same node's `description` on 2026-08-27. The arbitration **offering** is unaffected: `description` and `serviceType` both carry it. **Q49(b) is declined by the same ruling** — one row was granted and the corporate relation *"the entity the practice operates through"* was not it, so `worksFor` stays out of the graph. The row that does exist is *"Operator of SML Company Ltd. **alongside** the practice"*, a different structural relation | | **Practised role — "Mediator"** | `[verified 2026-08-28 — Pouya, Q49]`. **The row `Person.jobTitle` stands on, and the ruling grants exactly one.** Pouya: *"one row: 'Mediator', supported by Q.Med plus completed sole mediations."* Both supports are rows immediately above. **"Arbitrator" as a practised role is still NOT a row** — §4 Offerings verifies that appointments are *accepted* and records no completed arbitration, which is why `claims-auditor` struck *"Mediator and Commercial Arbitrator"* from the same node's `description` on 2026-08-27. The arbitration **offering** is unaffected: `description` and `serviceType` both carry it. **Q49(b) is declined by the same ruling** — one row was granted and the corporate relation *"the entity the practice operates through"* was not it, so `worksFor` stays out of the graph. The row that does exist is *"Operator of SML Company Ltd. **alongside** the practice"*, a different structural relation |
| Q.Arb credentialing pathway — **commenced August 2026** | `[verified 2026-08-26 — Pouya]`. Describe as newly commenced, never as held or nearing completion | | **Q.Arb — HELD** | `[verified 2026-08-29 — Pouya]`. **Obtained July 2026 — RECORDED HERE, NOT PUBLISHED.** His instruction: public copy carries **`Q.Arb (ADRIC / ADRIO)`** beside Q.Med and **nothing more** — no date, no acquisition story. ⚠️ **EVERY STAGE FORM IS STRUCK: "commenced", "in progress", "pathway", "not yet", and the "once/when I hold it" constructions.** This row read *"credentialing pathway — commenced August 2026"* `[verified 2026-08-26 — Pouya]` from 2026-08-26 until 2026-08-29, and every one of those words is now false in the **opposite** direction from the one this register normally guards — the site would be **understating** a held credential. Both directions are misdescription. ⚠️ **THE TWO DATES CANNOT BOTH BE TRUE, AND THIS ROW DOES NOT RECONCILE THEM — OPEN AS Q55.** The Change Log of **2026-08-26 (a)** records *"Q.Arb dated. Old → new: `[assumed]`, stage unknown → **commenced August 2026** `[verified 2026-08-26]`"* — Pouya's own report, three days before this one. **A designation cannot have been obtained in July from a pathway that commenced in August.** One of the two self-reports is wrong and the register cannot say which. **NOTHING PUBLISHED TURNS ON IT:** the site says *held*, which is his ruling either way, and the date is not published — so this does not block. It is flagged because §4's whole function is that a stamped claim is checkable, and this one is contradicted on the face of the record. Found by `claims-auditor` 2026-08-30. **The Forbidden row against "held, imminent, nearly complete" is struck with it** |
| C.Med-Arb stated as long-term designation goal | `[verified 2026-08-25 — strategy brief §I, §IV]` | | ~~C.Med-Arb stated as long-term designation goal~~ | **STRUCK 2026-08-29 — Pouya. `C.MED-ARB IS OUT ENTIRELY`, and it must not be reinstated from the strategy brief**, which made it *"the explicit long-term professional narrative"*. **This is a deliberate deviation from the brief and it is recorded as one** — see the Change Log entry of 2026-08-30 (ad). 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 designation is still real and stays in §11 as a DEFINITION** — what is struck is its status as a published goal *of his*. Superseded `[verified 2026-08-25 — strategy brief §I, §IV]` |
| Kompass Arbitration Certificate Program — completed | `[verified 2026-08-25 — strategy brief §I]` | | Kompass Arbitration Certificate Program — completed | `[verified 2026-08-25 — strategy brief §I]` |
| Stitt Feld Handy negotiation and ADR workshop sequence — completed | `[verified 2026-08-25 — strategy brief §I]` | | Stitt Feld Handy negotiation and ADR workshop sequence — completed | `[verified 2026-08-25 — strategy brief §I]` |
| Practising machine-learning and DevOps / infrastructure engineer | `[verified 2026-08-25 — strategy brief §I, §V]` | | Practising machine-learning and DevOps / infrastructure engineer | `[verified 2026-08-25 — strategy brief §I, §V]` |
@@ -201,8 +201,10 @@ an offering produced a wrong answer twice in one session.
**What went wrong, because it explains the rule — stated correctly on the second **What went wrong, because it explains the rule — stated correctly on the second
attempt.** `co-arbitration available now` was flagged across three specs on the attempt.** `co-arbitration available now` was flagged across three specs on the
reasoning that §4 records the Q.Arb pathway as merely *commenced* and therefore reasoning that §4 **then recorded** the Q.Arb pathway as merely *commenced* and
could not support an arbitration offering. **That** reasoning was wrong at the therefore could not support an arbitration offering. *(Past tense throughout this
paragraph: Q.Arb has been HELD in §4 since 2026-08-29. The error described here
is a 2026-08-26 one, and it did not depend on the credential's state.)* **That** reasoning was wrong at the
root: it silently treated a **designation** as though it were a **licence**. root: it silently treated a **designation** as though it were a **licence**.
*The masthead objection was a different one, and this paragraph originally *The masthead objection was a different one, and this paragraph originally
@@ -385,10 +387,12 @@ never be read as one:
**Licence status — NOT ESTABLISHED** row above), and **D13 bars the claim **Licence status — NOT ESTABLISHED** row above), and **D13 bars the claim
outright.** "I offer legal representation — that is competence, not outright.** "I offer legal representation — that is competence, not
permission" is exactly the misreading this paragraph exists to foreclose. permission" is exactly the misreading this paragraph exists to foreclose.
- **The test never converts a credential into an offering.** Q.Arb is still - **The test never converts a credential into an offering.** Offering
*commenced August 2026* and must still never read as held. Offering arbitration and holding Q.Arb remain two different statements, and the site
arbitration and holding Q.Arb are two different statements, and the site makes makes both. *This bullet read "Q.Arb is still commenced August 2026 and must
the first while stating the second plainly. still never read as held" until 2026-08-29; the designation is now held and
the ruling that made the offering publishable never depended on it — the
reasoning above is unchanged by the change in the credential.*
### Offered now — may be published ### Offered now — may be published
@@ -406,12 +410,33 @@ never be read as one:
| ~~**Settlement counsel**~~ | **NOT OFFERED, AND IT IS STRUCK RATHER THAN UNROWED** `[verified 2026-08-27 — Pouya, Q42]`. Pouya removed it as **his own error in `docs/01`**: *"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 the ordering — the positioning objection comes first.** It would still be wrong on a site with no licensure question at all, which is why this row does not read as a D13 consequence. Struck from `docs/01` §`/practice/`, from `docs/07-fees.md`'s hourly list, and from the §4 scope enumeration above. Never priced, never listed, never restored | | ~~**Settlement counsel**~~ | **NOT OFFERED, AND IT IS STRUCK RATHER THAN UNROWED** `[verified 2026-08-27 — Pouya, Q42]`. Pouya removed it as **his own error in `docs/01`**: *"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 the ordering — the positioning objection comes first.** It would still be wrong on a site with no licensure question at all, which is why this row does not read as a D13 consequence. Struck from `docs/01` §`/practice/`, from `docs/07-fees.md`'s hourly list, and from the §4 scope enumeration above. Never priced, never listed, never restored |
| ~~Tribunal secretary~~ | **Not offered.** D14 removed the rate and bars offering it | | ~~Tribunal secretary~~ | **Not offered.** D14 removed the rate and bars offering it |
**How the arbitration page must read** (`docs/01` §`/arbitration/`, step 4): **~~How the arbitration page must read~~ — THE PAIRED-DISCLOSURE CONDITION IS
it offers all three today **and states plainly that the Q.Arb pathway commenced DISSOLVED, 2026-08-29, Pouya.** His words: *"It existed only because Q.Arb was in
August 2026, with C.Med-Arb as the endpoint.** Pouya's instruction: *being open progress. There is no stage left to disclose."*
about the stage is the differentiator — do not hedge it into vagueness.* So
neither half may be dropped. Naming the stage is not a disclaimer bolted onto an > **What it required, so the dissolution is legible.** From 2026-08-26 it bound
offering; it is the reason a sophisticated reader believes the offering. > every surface that offered arbitration to state the **stage** of the Q.Arb
> pathway in the same breath — `/`, `/arbitration/`, `/about/`, `/med-arb/`, the
> footer designation strip, and the `Person` and `ProfessionalService` graphs.
> The reasoning was sound while it held: the objection it answered was
> **placement** (Q33-orig — arbitration promoted to a masthead under Pouya's
> name, where nothing qualified it), and naming the stage was what made the
> offering credible rather than what made it permissible.
>
> **Why it does not survive.** The condition's subject was a stage. Q.Arb is
> **held**, so there is no stage — and a condition with no subject cannot be
> half-kept. **Do not leave a residue of it**: a page that offers arbitration and
> then reaches for something qualifying to say is reproducing the condition from
> memory. `Q.Arb (ADRIC / ADRIO)` beside `Q.Med` is the whole of it.
>
> **What is NOT dissolved with it.** The Q39 commercial scoping is untouched —
> family arbitration remains **not offered**, on Pouya's choice, and that
> exclusion never depended on the Q.Arb stage. Nor is the offering test, nor D13,
> nor D16.
**How the arbitration page must read, as amended:** it offers all three forms —
sole, party-appointed, co-arbitration — in **commercial** matters, and it names
the designations held. There is nothing further to disclose.
### Subject-matter areas — the publication gate (Q35, 2026-08-27) ### Subject-matter areas — the publication gate (Q35, 2026-08-27)
@@ -625,7 +650,8 @@ cannot vouch for.
| Guarantees of outcome, or superlatives ("best", "leading", "top-rated") | Unverifiable as written, and they read as insecure to the audience this site is for. Marketing rules for regulated professions also treat them as suspect. *(Reason restated 2026-08-26: this row previously read "LSO marketing rules", which asserts the regulatory status the row above marks NOT ESTABLISHED. It was the last surviving instance, flagged in entries (o) and (q) and answered in Q26 as already fixed — it was not. **Restated by Claude Code; the rule itself is unchanged and the restatement needs Pouya's ratification.**)* | | Guarantees of outcome, or superlatives ("best", "leading", "top-rated") | Unverifiable as written, and they read as insecure to the audience this site is for. Marketing rules for regulated professions also treat them as suspect. *(Reason restated 2026-08-26: this row previously read "LSO marketing rules", which asserts the regulatory status the row above marks NOT ESTABLISHED. It was the last surviving instance, flagged in entries (o) and (q) and answered in Q26 as already fixed — it was not. **Restated by Claude Code; the rule itself is unchanged and the restatement needs Pouya's ratification.**)* |
| The word **"lawyer"** used of Pouya; "called to the bar"; "licensed"; "my law practice"; "my litigation practice"; any post-nominal implying a licence | D13. The site asserts the JD and nothing further | | The word **"lawyer"** used of Pouya; "called to the bar"; "licensed"; "my law practice"; "my litigation practice"; any post-nominal implying a licence | D13. The site asserts the JD and nothing further |
| Any phrasing that *implies* entitlement to practise law without saying so — "acts for clients", "represents parties", "my clients", "legal advice" | Same rule. Implication is the risk, not just the word. Describe the role factually instead: *Director of Firm Operations at a Toronto litigation and ADR boutique*, and the matter types worked on | | Any phrasing that *implies* entitlement to practise law without saying so — "acts for clients", "represents parties", "my clients", "legal advice" | Same rule. Implication is the risk, not just the word. Describe the role factually instead: *Director of Firm Operations at a Toronto litigation and ADR boutique*, and the matter types worked on |
| Q.Arb described as held, imminent, or "nearly complete" | It commenced August 2026 | | **Q.Arb described as commenced, in progress, a pathway, or not yet held** | **It is HELD** `[verified 2026-08-29 — Pouya]`. Publish `Q.Arb (ADRIC / ADRIO)`. **The acquisition date is recorded in §4 and is NOT published** — and it is itself open (Q55). `npm run check:claims` `q-arb-as-a-stage` enforces the stage words and a date near the designation, on `dist/` |
| ~~Q.Arb described as held, imminent, or "nearly complete"~~ | **STRUCK 2026-08-29 — Q.ARB IS HELD.** This row was correct from 2026-08-26 to 2026-08-29 and is now exactly backwards. **What replaces it is the opposite bar:** Q.Arb described as *commenced*, *in progress*, *a pathway*, or *not yet held* — see the Verified row. The publishable form is `Q.Arb (ADRIC / ADRIO)`; the acquisition date is recorded in §4 and is **not** published |
### The substitution principle ### The substitution principle
@@ -635,6 +661,12 @@ does not grow by closing files. The approved stat set is `Q.Med` /
`JD + ML` / `EN · FA`, with `Q.Arb` as a fourth slot where one exists. `JD + ML` / `EN · FA`, with `Q.Arb` as a fourth slot where one exists.
`[verified 2026-08-25 — content brief]` `[verified 2026-08-25 — content brief]`
⚠️ **THE FOURTH SLOT IS UNCHANGED IN PLACEMENT AND CHANGED IN CONTENT (2026-08-29).**
It carried `Q.Arb — commenced August 2026`, a **stage**; it now carries `Q.Arb`, a
**designation**, on the same footing as `Q.Med`. The slot was never a disclaimer —
it existed because the substitution principle wanted a fourth credential — so
nothing about its placement follows from Q.Arb becoming held.
## 5. Audience model ## 5. Audience model
All four tiers matter, but they are served by different surfaces rather than by All four tiers matter, but they are served by different surfaces rather than by
@@ -738,8 +770,10 @@ Nothing below can be invented. Each needs an answer from Pouya.
| # | Question | Blocks | | # | Question | Blocks |
|---|---|---| |---|---|---|
| **Q56** | ⚠️ **IS THE MEDIATION OFFERING SCOPED COMMERCIAL, OR NOT? THE SITE SAYS BOTH.** §4 Offerings rows arbitration three times, each **scoped commercial**; the mediation row is `**Mediation** — sole mediator`, **unscoped**. Shipped output scopes it anyway: `/mediation/`'s `<title>` is *"Commercial Mediation"*, its `Service` node is `name: "Commercial mediation"`, and `/` and `/about/` both say *"I mediate commercial disputes"*. Meanwhile **`/practice/insurance/` offers mediation in matters that are not commercial on any ordinary reading** — *"Disputes between an insured person and an insurer under the Statutory Accident Benefits Schedule"*, with *"What I offer is private mediation"*. An individual claimant against their own insurer is not a commercial dispute. **Nothing here is a false claim** — scoping a page to commercial mediation asserts *less* than the unscoped §4 row grants, and narrower than the row is always safe. **The problem is that the two halves cannot both be the whole picture**: either the practice takes non-commercial mediations (and the site-wide "commercial" framing under-describes it, including on the page an appointing body reads), or it does not (and `/practice/insurance/` is offering something outside the offering). **What is needed:** either a §4 Offerings row scoping mediation, with `/practice/insurance/`'s SABS framing reconciled to it — or a decision that mediation is deliberately unscoped, in which case the site-wide "commercial" wording is a positioning choice and should be recorded as one rather than read as a limit. **Pre-existing, not created 2026-08-30** — but this change set newly wrote the claim onto `/med-arb/` and it has been removed again pending this answer. Raised by `adversarial-reviewer`, 2026-08-30 | **Nothing at present.** No page is wrong; the register is silent where the site is specific |
| **Q55** | ⚠️ **WHEN WAS Q.Arb ACTUALLY OBTAINED? THE REGISTER HOLDS TWO DATES FROM THE SAME SOURCE AND THEY CANNOT BOTH BE TRUE.** (a) **2026-08-26 (a)**, Change Log, `[verified 2026-08-26]`: *"Q.Arb dated. Old → new: `[assumed]`, stage unknown → **commenced August 2026**"*. (b) **2026-08-29**, Pouya's amendment, now the §4 Verified row: *"Obtained July 2026"*. A designation cannot have been obtained in July from a pathway reported as commencing in August, and (a) was reported three days before (b). One self-report is wrong; the register cannot say which, and **inferring it would be exactly the guessed-explanation failure `CLAUDE.md` bars**. **THIS DOES NOT BLOCK, and that is the whole reason it is a question rather than a hold.** The published claim is *held***which is faithful to his most recent instruction, and that is a different thing from correct.** §4's premise is that `[verified — Pouya]` establishes *what he reported*, never the fact, and this is the one row where the register holds documented evidence that a self-report about this credential is wrong. The date is deliberately unpublished, so no page turns on the answer. What turns on it is whether §4 can vouch for its own highest-stakes new row. **What is needed:** one line from Pouya giving the correct date, and whether (a) was a misreport, a different milestone, or something else. Then re-stamp the §4 row and correct or annotate (a) — the Change Log is append-only, so (a) gets a pointer, never an edit. Raised by `claims-auditor`, 2026-08-30 | **Nothing.** The site states what Pouya most recently instructed; what is affected is §4's ability to vouch for its own row |
| ~~Q1~~ | **ANSWERED 2026-08-26.** Licensure is left out entirely; the site asserts the JD only. See D13 | — | | ~~Q1~~ | **ANSWERED 2026-08-26.** Licensure is left out entirely; the site asserts the JD only. See D13 | — |
| ~~Q2~~ | **ANSWERED 2026-08-26.** Q.Arb commenced August 2026 | — | | ~~Q2~~ | **ANSWERED 2026-08-26, AND SUPERSEDED 2026-08-29.** The answer then was *"Q.Arb commenced August 2026"*. **Q.Arb is now HELD** — see the §4 Verified row. ⚠️ Corrected in place because §9 is Current Truth; the superseded answer is preserved above rather than deleted, and **the conflict between the two dates is open as Q55** | — |
| ~~Q3~~ | **ANSWERED 2026-08-26.** Email `info@smlcompany.ca`. No public phone — "By scheduled call". Location: Toronto · Ontario · By appointment | — | | ~~Q3~~ | **ANSWERED 2026-08-26.** Email `info@smlcompany.ca`. No public phone — "By scheduled call". Location: Toronto · Ontario · By appointment | — |
| ~~Q4 / Q14~~ | **ANSWERED 2026-08-26.** Rate card confirmed by Pouya — see D14 and `docs/07-fees.md` | — | | ~~Q4 / Q14~~ | **ANSWERED 2026-08-26.** Rate card confirmed by Pouya — see D14 and `docs/07-fees.md` | — |
| ~~Q13~~ | **ANSWERED 2026-08-26.** Self-hosted Gitea with Gitea Actions | — | | ~~Q13~~ | **ANSWERED 2026-08-26.** Self-hosted Gitea with Gitea Actions | — |
@@ -850,7 +884,7 @@ Nothing below can be invented. Each needs an answer from Pouya.
| Q.Arb | **Qualified Arbitrator** — ADRIC / ADRIO designation | | Q.Arb | **Qualified Arbitrator** — ADRIC / ADRIO designation |
| C.Med | **Chartered Mediator** — ADRIC / ADRIO designation | | C.Med | **Chartered Mediator** — ADRIC / ADRIO designation |
| C.Arb | **Chartered Arbitrator** — ADRIC / ADRIO designation | | C.Arb | **Chartered Arbitrator** — ADRIC / ADRIO designation |
| C.Med-Arb | **Chartered Med-Arbitrator** — ADRIC / ADRIO designation. *Do not write "Mediator-Arbitrator", and do not call it "senior" or "the senior hybrid designation": this row said that until 2026-08-28, and it is a ranking claim about a third party's credential structure with no source. ADRIO applies "most senior" to **C.Med**, not to this one — and §4 Forbidden bars superlatives on the site regardless of who said them first. That it is Pouya's long-term goal is a §4 row; that it ranks above anything is not.* | | C.Med-Arb | **Chartered Med-Arbitrator** — ADRIC / ADRIO designation. *Do not write "Mediator-Arbitrator", and do not call it "senior" or "the senior hybrid designation": this row said that until 2026-08-28, and it is a ranking claim about a third party's credential structure with no source. ADRIO applies "most senior" to **C.Med**, not to this one — and §4 Forbidden bars superlatives on the site regardless of who said them first.* ⚠️ **THIS ROW IS A DEFINITION AND NOTHING ELSE (2026-08-29).** It used to close *"that it is Pouya's long-term goal is a §4 row"*; that §4 row is struck and C.Med-Arb is off the site entirely. The designation exists; this project makes no claim about it and names it on no page. |
| CTF | Canadian Tax Foundation | | CTF | Canadian Tax Foundation |
| Med-Arb | Hybrid process: mediation that converts to binding arbitration if unresolved | | Med-Arb | Hybrid process: mediation that converts to binding arbitration if unresolved |
| SABS | Statutory Accident Benefits Schedule — Ontario auto insurance benefits | | SABS | Statutory Accident Benefits Schedule — Ontario auto insurance benefits |
@@ -896,6 +930,361 @@ never being raised again.
# Change Log # Change Log
## 2026-08-30 (ad) — Q.Arb is HELD; C.Med-Arb is struck entirely; the paired-disclosure condition dissolves with the stage it required — and this deviates from the strategy brief deliberately
**Type:** ruling + D3-class sweep. **20 files, +1064 / 607.** `src/` alone is
net **196** (+291 / 487), which is the shape of a credential becoming simpler rather than
more qualified; the additions are concentrated in this record, the specs, and
`check:claims`.
### Pouya's ruling, recorded verbatim because two files quote it
> "Q.ARB IS HELD. C.MED-ARB IS OUT ENTIRELY. Treat this as D3-class."
>
> "§4 — Q.Arb becomes a held designation, `[verified 2026-08-29 — Pouya]`.
> Obtained July 2026; record internally, **DO NOT publish the date**. Public copy
> carries `Q.Arb (ADRIC / ADRIO)` beside Q.Med and nothing more. Delete every
> 'commenced', 'in progress', 'pathway', 'not yet' form."
>
> "**THE PAIRED-DISCLOSURE CONDITION DISSOLVES.** It existed only because Q.Arb
> was in progress. There is no stage left to disclose… Do not leave half
> standing."
>
> "**C.MED-ARB COMES OUT EVERYWHERE.** Pouya holds Q.Med and Q.Arb, which is
> what med-arb requires. The page says he conducts med-arb and stops."
>
> "**`/about/`'s ARC SECTION LOSES ITS SUBJECT.** Two held designations, no
> journey. Rewrite it as a plain credentials statement or delete it — do not
> edit phrase by phrase. An arc invites 'where are you on it'; two designations
> don't."
>
> "**REWRITE, DON'T EDIT**, anywhere copy earned credibility by being candid
> about an incomplete credential."
### ⚠️ THIS DEVIATES FROM THE STRATEGY BRIEF, AND THE DEVIATION IS THE RECORD
Pouya's instruction: *"Record that this deviates from the strategy brief, which
made C.Med-Arb 'the explicit long-term professional narrative'. Pouya has
dispensed with it. Note the deviation so nobody reinstates it from the brief."*
**The brief is not in this repository.** It is cited by `AGENTS.md`, `docs/01`,
`docs/03`, `docs/07` and `src/data/site.ts`, and no reader can open it — R14's
shape, pre-existing and not created here. That is precisely why this paragraph
matters: **the only defence against C.Med-Arb being reinstated from an
unreachable document is a written record that its removal was deliberate.** It
is now in four places — this entry, the struck §4 row, `docs/01` items 4 and 3
of `/med-arb/`, and `check:claims`.
### What the ruling touched
**§4.** `Q.Arb` becomes **HELD** (July 2026, recorded and unpublished).
`C.Med-Arb stated as long-term designation goal` is **struck**. The Forbidden
row barring "held, imminent, nearly complete" is struck **and replaced by a live
row barring the opposite** — a struck row whose surviving text does the opposite
of the strike is the Q25 shape, and `adversarial-reviewer` caught it here.
The paired-disclosure condition is dissolved with the reasoning kept, so the
dissolution is legible rather than a deletion. §11's `C.Med-Arb` row stays as a
**definition** and says so.
**`src/`.** `CREDENTIALS.inProgress`, `.goal` and `.goalName` are **deleted, not
emptied** — which turned every consumer into a `ts(2339)` build error and is how
`/arbitration/` and `/med-arb/` surfaced rather than being remembered. Pouya's
own principle from 2026-08-29: *"the pattern that actually worked was
mechanical."* `/about/`'s arc section, `/arbitration/`'s credentialing-stage
section, and their styles are gone; `/arbitration/`'s Appointments section
inherits the vacated `section-inverse` so the page keeps alternating.
`hasCredential` now **maps** `CREDENTIALS.designations` instead of indexing
`[0]` — indexing is what would have dropped Q.Arb from the graph silently.
**Specs.** `docs/01` items amended at `/`, `/about/`, `/arbitration/` and
`/med-arb/`, each carrying the strike and its date **inside the item**, because
the reinstatement risk is somebody reading the outline. `docs/03`, `docs/04`,
`docs/06`, `docs/07` follow.
**`check:claims`** gains `c-med-arb-struck` and an **inverted** `q-arb-as-a-stage`
— the predecessor barred Q.Arb reading as held.
### The sweeps, as commands — and one of them was run twice
```
$ git grep -nE 'Q\.?Arb' -- src/ docs/ ':!docs/reference' | grep -icE 'commenc|in progress|pathway|not yet'
10 # each one a strike notice or a check:claims fixture; none is live copy
```
⚠️ **THE `dist/` SWEEP WAS RUN TWICE, AND THE FIRST INSTRUMENT WAS WRONG.**
`grep -roh '.\{50\}Q\.Arb.\{50\}' dist/ | sort -u` returned **10 distinct
contexts**, and this entry was drafted around that number. `grep -o` takes
**non-overlapping** windows, so on minified HTML — where a page is a handful of
very long lines — an early match consumes characters a later one needs. The
visible symptom: *"I hold Q.Med and Q.Arb through…"* ships on two pages and
**did not appear in the list at all.** A `grep -o` window count is not an
enumeration. Re-run with an overlap-safe scan over every match:
```
49 occurrences of "Q.Arb" across 12 pages, in 13 distinct contexts:
x12 ...arbitration appointments. Q.Med and Q.Arb designations through ADRIC and ADRIO...
x12 "name":"Q.Arb (ADRIC / ADRIO)","credentialCategory":"Professional designation"
x12 Q.Med (ADRIC / ADRIO) · Q.Arb (ADRIC / ADRIO) footer, every page
x3 ...JD, Q.Med, Q.Arb — a Toronto mediator... meta/og/twitter desc
x2 <dt>Q.Arb</dt><dd>ADRIC / ADRIO designation</dd> credential row
x1 <title>About · … · Mediator, Q.Med, Q.Arb · Toronto</title> (+ og, + twitter)
x1 · Q.Arb (ADRIC / ADRIO) /about/ designation line
x1 <li>Q.Arb (ADRIC / ADRIO)</li> /about/ Designations
x1 Toronto, by appointment. Q.Med and Q.Arb designations held. ProfessionalService
x1 Mediation is where they meet. I hold Q.Med and Q.Arb through… /about/
x1 ...did not settle. I hold Q.Med and Q.Arb through… /med-arb/
Stage word within 60 chars of any of the 49: none
```
**This is the fifth time on this project that a number turned out to be a claim
about the instrument** — `CLAUDE.md` lists the other four. Same tell every time:
the figure looked plausible and nobody asked what it was a number *of*.
```
$ node scripts/check-claims.mjs → exit=0, c-med-arb-struck clean over 12 pages
```
**And the gate was tested against the copy it replaces**, which is the check that
matters: of the **nine** strings this change set removes, it now catches **eight**.
The ninth is the h1 *"Available now, and open about the stage"*, which names no
designation — recorded as a known limit in the pattern itself and assigned to
`claims-auditor` rather than papered over.
### Two review rounds — 26 findings, and four of mine were defects in my own fixes
**`claims-auditor` (R1 is the one that matters).** It found the register
contradicting itself on the acquisition date and would not let it pass:
2026-08-26 (a) records *"commenced August 2026"*; this ruling says *"obtained
July 2026"*; both `[verified — Pouya]`, three days apart. **Opened as Q55.**
It does not block — the site says *held*, which is his ruling either way, and the
date is unpublished — but §4's function is that a stamped claim is checkable, and
this one is contradicted on the face of the record. Also caught: `/med-arb/`
stating the arbitration offering **unscoped** (every §4 row is commercial); a
**wrong acquisition date invented in a `SiteHeader` comment**; `site.ts` holding a
second copy of a date §4 is the sole record for; `docs/04` contradicting itself
seven lines apart on `hasCredential`.
**`adversarial-reviewer`.** Its blocking finding was **mine**: the `/about/`
paragraph I wrote to restore the word count opened *"The matters I take are
commercial"* — **no §4 row** (Offerings scopes *arbitration* commercial; the
mediation row is unscoped) — and named the LAT inside its own commercial class
while `/practice/insurance/` ships *"Disputes between an insured person and an
insurer"*. Also: `q-arb-as-a-stage` firing on **compliant** copy, because bare
`once|when` in a 50-character window matches *"I hold Q.Med and Q.Arb… when a
party asks"*; `c-med-arb-struck` blind to `C.Med-Arbitrator` (a trailing `\b`
after `Med-Arb`); the gate **defeated by `<strong>`**, since `[^<]` cannot cross
inline markup and this site sets `<strong>` in prose; and a JSDoc detached from
`designationLine` by a guard I inserted between them.
**Both agents reported the handed diff was stale** — the working tree had moved
under it. Regenerate the diff at review time, or point reviewers at the tree.
⚠️ **AND `claims-auditor` DID NOT HAVE THE LENS ADDED IN ENTRY (ac).** Agent
definitions load at session start, so the lens committed hours earlier was not
in its brief; it reconstructed it from the Change Log and ran it anyway. **An
edit to `.claude/agents/*.md` does not take effect until a new session.** That is
the fifth stale-claim-inside-that-brief instance the brief itself predicts.
### Fixes to the fixes
The `once|when` repair, the two-view scan, and the `C.Med-Arbitrator` blend were
all corrections to patterns written **in this change set**. The scanner now reads
each page twice — as published, and with inline tags collapsed to a space and
block tags to a full stop — which preserves the do-not-leap-a-paragraph property
that made the `[^.<]` window worth having. Proved by injecting
`<strong>Q.Arb</strong> — the pathway commenced` into a built page: **raw view
missed, collapsed view caught.**
`DESIGNATIONS_HELD_LINE` now holds the one sentence `/about/` and `/med-arb/`
had **already** typed two different ways in the change set that introduced both.
### Round 2 — and the worst finding was one the round-1 sweep could not reach
**`claims-auditor` found ten lines in `docs/03` that instructed the struck
form, unstruck, imperative, eleven lines below this change set's own strike
notice on the same bullet.** They read *"'Pathway', never 'designation'"*, cited
the **struck** Forbidden row as live, told an implementer *"the limit being named
is the stage of the arc, stated plainly"*, and closed *"Precision about what you
cannot yet do makes the rest believable."*
**Why the 2026-08-29 sweep missed it, and this is the transferable part:
`git grep -nE 'Q\.?Arb'` is LINE-ANCHORED, and not one of those ten lines
contains the string.** The block is entirely about Q.Arb and never names it. A
sweep anchored on a subject cannot find prose that discusses the subject by
pronoun, by paraphrase, or across a line break — which is the same wrap defect
`/about/` already recorded for `as in\n * progress`. **Sweep the vocabulary, not
only the subject.** Re-run unanchored, on the stage words themselves:
```
$ git grep -nIE 'commenced (in )?August 2026|in progress|the arc\b|long-term (arc|narrative)|endpoint|newly commenced|not yet held|nearing completion|built toward' \
-- docs/ src/ scripts/ ':!docs/reference' | grep -v <strike-notice terms>
→ every survivor is a strike notice or an unrelated sense of "endpoint" (API, S3)
```
**And `docs/reference/adrio-designations.md` carried three claims asserting the
struck §4 row** — *"the designation §4 records as the practice's stated goal"*,
*"is Pouya's own stated goal and has a §4 row"*, *"not that he has **commenced**
Q.Arb"* — in the file an implementer opens to write designation copy. The
2026-08-29 sweep excluded `docs/reference/` on the reasoning that it holds
sourced extracts. **That reasoning is half right:** the quotations are evidence
and must not be touched; the *commentary around them* is this repo's own voice
and goes stale like any other. Corrected without touching an extract.
**The gloss lens earned itself on `/med-arb/`.** The page quoted ADRIC
accurately — *"requires a high level of practitioner competence to do
successfully"* — headed the next section *"Med-arb asks one neutral to be
competent at both"*, and answered it with the two held designations. **ADRIC
answers its own sentence with a different designation**: the same page points at
the Chartered Med-Arb and a Med-Arb Foundational Course, and
`docs/reference/adrio-designations.md` Finding 3 calls the Q-level designations
*"an intermediate step"*. So the page borrowed a third party's competence
standard and supplied an answer that party does not give — **by adjacency, which
is why no claim in it was individually false.** Heading and lede rewritten to
state what the practice holds and offers, with no competence proposition.
**Two register corrections, both about what a stamp means.** (1) The Q.Arb row
stamped `[verified 2026-08-29 — Pouya]` over the acquisition date **in the same
cell that says the register cannot vouch for it**. The stamp is now split:
status `[verified]`, date `[Pouya's stated basis 2026-08-29]` — the device §4
already uses for the commercial-arbitration proposition. (2) Q55's disposition
read *"the site is correct either way"*. It is not: it is **faithful to his most
recent instruction**, which is a different thing, and §4's premise is that
`[verified — Pouya]` establishes what he reported rather than the fact.
**`/about/`'s replacement paragraph was wrong a second time.** Round 1 struck
*"The matters I take are commercial"* (no §4 row). The replacement opened *"The
subject matter runs across…"*, which swaps a scope claim for a **coverage**
claim — also unrowed, and a bare present-tense indicative in §Background, the
one section where a reader defaults to reading history. It now reads *"I accept
appointments in six areas"*, which is exactly what Q35 grants: an area may be
named where he can competently accept an appointment **and the page frames it as
positioning, not claimed history.**
**One finding declined, with the reason recorded in the file.** The audit held
that the ground which struck the biography sentence should also reach
`/about/`'s hero — *"I mediate commercial disputes"*. It does not: the struck
sentence was a **universal** (nothing he takes is non-commercial — an exclusion
§4 has no row for); this one is **existential** (he mediates commercial
disputes — narrower than the §4 Offerings mediation row grants, and excluding
nothing). A claim narrower than its row is safe; a claim the row does not reach
is not.
**Smaller round-2 corrections:** *"put to ADRIC's membership"* → *"presented to
the membership at ADRIC's 2019 annual conference"* (the extract says
**presented**; *put to* connotes submission for decision); `docs/01`'s Indigenous
paragraph, where *"for a Q.Med on the C.Med-Arb pathway"* sat **outside** the
quotation marks in `docs/01`'s own voice while a parenthetical this change set
added called it *"the brief's framing, quoted"* — a quotation boundary the marks
do not draw, plus a struck stage form; two cutover-checklist bullets that ended
mid-sentence; a build-guard message naming a paragraph that had been deleted;
`CredentialRow`'s claim that the fourth slot *"got SHORTER"* (21 → 25
characters — it got longer, and the conclusion survives on the other half of the
sentence); and a `CREDENTIAL_ROW` JSDoc orphaned by the constant inserted above
it — the second detached-JSDoc defect in this change set, both caused by
inserting a declaration between a comment and its subject.
**`adversarial-reviewer`'s round-2 pass found five defects in the round-1 fixes
to `check:claims`, and two of them made the gate worse than before:**
1. **The dedup dropped real breaches.** Keying a `Set` on the matched text meant
`He is a lawyer.` twice on one page reported **once**, count 1. Before the
two-view change it reported 2. **The check was truncating its own output**
the one thing `CLAUDE.md` says a check must never do — and the report is what
an operator acts on. Now counted per occurrence, published view authoritative.
2. **The collapsed view leapt paragraph boundaries**, and the comment claimed it
could not. Block tags collapsed to `' . '`, but the windows are written
`[^<]` and collapsed text contains no `<`, so they were bounded by nothing:
an `<h2>Q.Arb</h2>` joined to a paragraph reading *"took effect on 1 March
2025"* — approved copy that ships. Writing `[^.<]` instead would have
reintroduced the sentence-crossing the collapsed view exists for. **A
sentinel separates the two jobs**: block boundaries become `\uE000` (Private
Use Area, not a control character — `no-control-regex` bars `\u0000`), and
every window reads `[^<\uE000]`, bounded by `<` in one view and the sentinel
in the other.
3. **The self-test read only the published view**, so the entire false-positive
surface of the new view was untested *by construction* — the loosening
happened precisely where the instrument check could not look.
4. **Both patterns advertised coverage they lacked.** The `rule` line printed on
failure named *pending*, which the regex had never matched; `working toward`
— the exact phrase struck from `/med-arb/` — was missed; and
`c-med-arb-struck`'s trailing `\b` still blocked `C.Med-Arbitrators` and
`C.Med-Arbitration` after the round-1 repair moved it. The `once|when` repair
**narrowed rather than closed**: it still fired on *"when I hold a
preliminary conference"*, because `hold` takes any object. The hold-verb must
now take the designation, and that alternative had to move to the top level —
as a member of the stage group it swallowed the anchor and the self-test
caught it.
5. **`publishedText`'s JSDoc was detached** by the block inserted above it —
**the same defect this entry records catching on `designationLine`**, in the
same change set, by the same mechanism.
**Proved rather than asserted.** Three probe pages injected into a real `dist/`:
duplicates reported as **2 with both line numbers**; the paragraph-split approved
copy **silent**; `<strong>Q.Arb</strong> — the pathway commenced` **caught**.
**Two more structural findings, both about drift the change set created:**
- **`AREAS_NAMED_IN_BIO`'s message was unreachable.** `PRACTICE_AREAS` is
`as const`, so `.length` is the literal `6`; with the constant also literal
`6`, a seventh area makes `7 !== 6` non-overlapping literals and `astro check`
fails with **`ts(2367)`, which reads like lint noise** — and both deploy paths
run `check` before the build, so the message never renders. One token
(`: number`) fixes it. Probed: with a seventh area, zero `ts(2367)` and the
build throws the intended sentence.
- **`CREDENTIAL_ROW` hand-types the designations.** Harmless while the fourth
slot held a *stage* (an independent fact); on 2026-08-29 it became a duplicate
of `designations[1]`, and nothing connected them — so a third designation
would reach four surfaces and silently miss the credential row. The
map-not-index fix celebrated in `schema.ts` and `docs/04` had left this copy
alone. Now pinned by `_DesignationRowParity`, a type-level assertion in
`_MembershipParity`'s shape; probed by renaming one value, which fails
`npm run check` with `ts(2344)`.
**And a scope question that is Pouya's, opened as Q56.** §4 rows arbitration
scoped commercial three times and leaves the mediation row unscoped, while the
site says *"Commercial Mediation"*, *"I mediate commercial disputes"* and
`Service.name: "Commercial mediation"` — and `/practice/insurance/` offers
mediation in insured-versus-insurer SABS matters, which are not commercial.
Nothing is false (narrower than a row is safe), but the two halves cannot both
be the whole picture. **This change set had newly written the claim onto
`/med-arb/`; that sentence is removed pending his answer**, and the page's own
med-arb scoping — which §4 does row — is untouched.
**D19 trim applied to this change set's own comments:** `Pill.astro` 16 lines →
5, `about.astro`'s paragraph note 26 → 10, the `q-arb-as-a-stage` comment 24 →
16. Each kept its live constraint and dropped the narrative of its own drafts.
⚠️ **THE LOOP STOPS HERE — D19.** Round 1 reviewed the change; round 2 reviewed
the fixes, and again a majority of its findings were defects *in* round 1's
fixes. That is why round 2 exists and it is also why round 3 does not.
### Verification — exit statuses read directly, never through a pipe
```
npm run check exit=0 (0 errors, 0 warnings, 0 hints)
npm run lint exit=0
npm run build exit=0 (12 pages)
npm run check:claims exit=0 (11 patterns, 25 approved strings)
```
12/12 pages: one `<h1>`, no skipped heading level, no adjacent duplicate ground.
`/about/` biography **404 words** — back inside `docs/01`'s 400600 after the
deleted paragraph took it to 355. The `AREAS_NAMED_IN_BIO` guard was probed by
setting it to 5: build fails with the intended message.
### Open after this entry
1. **Q55 — the Q.Arb acquisition date.** Needs one line from Pouya. Does not
block; nothing published turns on it.
2. **`/about/` has no dark band.** The arc section was its only `section-inverse`;
the accent contact band still closes the page. Making the credentials section
inverse would restore the rhythm and needs a contrast pass — **not done, because
it is a design decision the ruling did not reach.**
3. **R1 (licensure framing)** — unchanged and unaffected by anything here.
---
## 2026-08-30 (ac) — Pouya ratifies build step 5; ADR Chambers struck from the page and from the spec; and the pattern behind three shipped defects gets a named lens in `claims-auditor` ## 2026-08-30 (ac) — Pouya ratifies build step 5; ADR Chambers struck from the page and from the spec; and the pattern behind three shipped defects gets a named lens in `claims-auditor`
**Type:** ruling + correction. **Files:** `src/pages/arbitration.astro`, **Type:** ruling + correction. **Files:** `src/pages/arbitration.astro`,
+8 -1
View File
@@ -282,7 +282,7 @@ an operator to delete the three records that authenticate outbound mail —
under the heading "Never delete". under the heading "Never delete".
**A measurement is a claim about your instrument until you check the **A measurement is a claim about your instrument until you check the
instrument.** This has now cost five times, and the shape is identical every instrument.** This has now cost six times, and the shape is identical every
time: a number that looks like a finding, from a probe nobody validated. time: a number that looks like a finding, from a probe nobody validated.
- `timeout 60 ls "$DRIVE"`**the command never ran.** `timeout` is not - `timeout 60 ls "$DRIVE"`**the command never ran.** `timeout` is not
@@ -303,6 +303,13 @@ time: a number that looks like a finding, from a probe nobody validated.
ladder is not being generated at all*, a shipped defect on every page. It is ladder is not being generated at all*, a shipped defect on every page. It is
**density-corrected by spec**: a 192px file selected at `3x` correctly reports **density-corrected by spec**: a 192px file selected at `3x` correctly reports
64. The files on disk were 64 / 128 / 192 all along. 64. The files on disk were 64 / 128 / 192 all along.
- **"10 distinct contexts" from `grep -roh '.\{50\}X.\{50\}' dist/ | sort -u`**
**`grep -o` takes NON-OVERLAPPING matches.** On minified HTML a page is a
handful of very long lines, so an early window eats the characters a later one
needs and occurrences vanish silently. A whole shipped sentence was missing
from the list. **A `grep -o` window count is not an enumeration** — to count
occurrences of a string, iterate every match position, or `grep -o` the bare
string with no context window.
So before acting on a number: say what it is a number *of*; confirm the command So before acting on a number: say what it is a number *of*; confirm the command
actually ran and read its exit status; and check it against a second method that actually ran and read its exit status; and check it against a second method that
+50 -25
View File
@@ -81,8 +81,15 @@ the ceiling before a nav stops being scannable.
## Deliberate omission: Indigenous engagement ## Deliberate omission: Indigenous engagement
The strategy brief (§III.4) rates Indigenous engagement, IBA, and consultation- The strategy brief (§III.4) rates Indigenous engagement, IBA, and consultation-
breakdown mediation as *"strategically the most valuable single niche"* for a breakdown mediation as *"strategically the most valuable single niche"*.
Q.Med on the C.Med-Arb pathway.
⚠️ **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: There is no page for it at launch, on the following reasoning:
@@ -139,7 +146,11 @@ four audiences to its surface.
stands; do not lift the phrase into copy** — it reached `/` once already. 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. State the asymmetry instead: `docs/03` §The credential row. Infinity mark as the visual anchor.
4. **Two practices.** Mediation and Arbitration cards → `/mediation/`, `/arbitration/`. 4. **Two practices.** Mediation and Arbitration cards → `/mediation/`, `/arbitration/`.
Med-Arb named here as the long-term arc, linking to `/med-arb/`. 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 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 block on the page for search, because it distributes authority to the pages
that can actually rank. that can actually rank.
@@ -167,10 +178,13 @@ to an appointment. This page carries the verifiable record.
engineering, operating a company — told as one arc rather than three lists. engineering, operating a company — told as one arc rather than three lists.
3. **Credentials**, structured and scannable: designations, education, 3. **Credentials**, structured and scannable: designations, education,
certifications, memberships. Every line from `AGENTS.md` §4 Verified. certifications, memberships. Every line from `AGENTS.md` §4 Verified.
4. **The credentialing arc.** Q.Med held → Q.Arb **commenced August 2026** 4. ~~**The credentialing arc.**~~ ⚠️ **STRUCK 2026-08-29 — Pouya, and the
C.Med-Arb as the section is deleted from the page, not rewritten.** *"Two held designations,
endpoint. The brief (§V) treats the arc itself as part of the story; say so no journey… An arc invites 'where are you on it'; two designations don't."*
openly rather than implying a finished state. 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.** 5. **Languages and cross-cultural practice.**
6. **Speaking and publications.** Omit the section entirely until there is 6. **Speaking and publications.** Omit the section entirely until there is
something in it. An empty "Speaking" heading is worse than no heading. something in it. An empty "Speaking" heading is worse than no heading.
@@ -228,7 +242,9 @@ an *agreement* settles, not what he promises.
### `/arbitration/` ### `/arbitration/`
**Job:** the same, for arbitrationand to state the Q.Arb position honestly. **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`, **Search intent:** `sole arbitrator Ontario`, `expedited arbitration Canada`,
`documents-only arbitration`. `documents-only arbitration`.
@@ -246,17 +262,17 @@ an *agreement* settles, not what he promises.
edition date (1 March 2025) is published on the page because ADRIC publishes edition date (1 March 2025) is published on the page because ADRIC publishes
one. one.
4. Awards — form, reasoning, timing. 4. Awards — form, reasoning, timing.
5. **Credentialing status, stated plainly.** The Q.Arb pathway **commenced 5. ~~**Credentialing status, stated plainly.**~~ ⚠️ **STRUCK 2026-08-29 —
August 2026**; the page says so in those words. *"In progress" was the Pouya. Q.Arb is HELD, and §4's paired-disclosure condition dissolved with the
wording here until 2026-08-28 and it is barred — `docs/06`'s own cutover stage it required.** *"It existed only because Q.Arb was in progress. There
checklist says "§4's wording, not the looser 'in progress'", and this is the is no stage left to disclose."* The page's whole credentialing-stage section
spec for the page that has to get it right.* **What is available now is all three forms — sole, is deleted, its `<h1>` no longer reads *"Available now, and open about the
party-appointed and co-arbitration** — and `AGENTS.md` §4 Offerings carries a stage"*, and **no residue of the condition may be reintroduced** — a page
row for each `[verified 2026-08-26 — Pouya]`. The page states that alongside that offers arbitration and then reaches for something qualifying to say is
the credentialing stage: Q.Arb commenced August 2026, C.Med-Arb is the reproducing it from memory. **What survives:** all three forms — sole,
endpoint. §4 Offerings: **neither half may be dropped.** Honesty here is a party-appointed and co-arbitration — are offered now, with an `AGENTS.md` §4
differentiator, not a weakness — and misstating it in either direction is a Offerings row for each `[verified 2026-08-26 — Pouya]`, and the scope is
conduct problem. **commercial** (Q39, Pouya's own choice, never part of this condition).
*(This paragraph read "(co-arbitration, co-arbitration)" until 2026-08-26 — *(This paragraph read "(co-arbitration, co-arbitration)" until 2026-08-26 —
edited without being re-read — and then carried a caveat against Q36 for 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 several hours after Q36 closed. Both are recorded because the pattern is the
@@ -272,8 +288,8 @@ is "Mediator".
### `/med-arb/` ### `/med-arb/`
**Job:** own a term few Canadian neutrals explain well, and frame the C.Med-Arb **Job:** own a term few Canadian neutrals explain well. *(This read "and frame
endpoint. 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`. **Search intent:** `med-arb Canada`, `what is med-arb`, `arb-med`.
1. What Med-Arb is; how it differs from Arb-Med. 1. What Med-Arb is; how it differs from Arb-Med.
@@ -295,17 +311,26 @@ endpoint.
with no §4 row.* Three are drafted for his approval in **Q54**; the section is with no §4 row.* Three are drafted for his approval in **Q54**; the section is
incomplete until he rules. incomplete until he rules.
3. When it fits and when it does not. 3. When it fits and when it does not.
4. The C.Med-Arb designation and why it is the practice's stated endpoint. 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 that he holds both designations.
5. **The ADRIC Med-Arb Rules**, which this spec did not mention and which exist: 5. **The ADRIC Med-Arb Rules**, which this spec did not mention and which exist:
a published rule set, put to ADRIC's membership in 2019, drafted for domestic a published rule set, presented to ADRIC's membership at its 2019 annual conference, drafted for domestic
commercial disputes and designed to work with its Mediation and Arbitration commercial disputes and designed to work with its Mediation and Arbitration
Rules. Sourced: `docs/reference/adric-rules.md` Finding 2. Quote ADRIC's own Rules. Sourced: `docs/reference/adric-rules.md` Finding 2. Quote ADRIC's own
framing rather than paraphrasing it, and **keep its superlatives inside the framing rather than paraphrasing it, and **keep its superlatives inside the
quotation marks** — Finding 5 lists the two not to lift. quotation marks** — Finding 5 lists the two not to lift.
This page is a strong candidate for the best-performing page on the site. This page is a strong candidate for the best-performing page on the site.
Search demand exists, competition is thin, and it maps exactly to the brand's Search demand exists and competition is thin. *(This closed "and it maps exactly
long-term narrative. 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 ### `/practice/` — index
+57 -33
View File
@@ -79,23 +79,31 @@ detect padding instantly and discount everything after it.
The shape of the bullet still stands, so here is a sentence that fits it and The shape of the bullet still stands, so here is a sentence that fits it and
clears the register: *"I accept sole, party-appointed and co-arbitration clears the register: *"I accept sole, party-appointed and co-arbitration
appointments **in commercial matters**. The Q.Arb **pathway** commenced in appointments **in commercial matters**."* ⚠️ **THE SECOND SENTENCE IS STRUCK
August 2026; C.Med-Arb is the endpoint."* **"in commercial matters" is not (2026-08-29).** It read *"The Q.Arb **pathway** commenced in August 2026;
C.Med-Arb is the endpoint"*; Q.Arb is held, C.Med-Arb is off the site, and §4's
paired-disclosure condition that required a second sentence at all is
dissolved. **The limit this bullet names is now the SCOPE, not the stage**
which is the durable half. **"in commercial matters" is not
optional** — every §4 Offerings arbitration row is scoped commercial, family optional** — every §4 Offerings arbitration row is scoped commercial, family
arbitration has its own NOT OFFERED row, and §4's NOT-NEGOTIABLE boundary arbitration has its own NOT OFFERED row, and §4's NOT-NEGOTIABLE boundary
records the unscoped class form as the struck universal (Q39). This model records the unscoped class form as the struck universal (Q39). This model
sentence was unscoped until 2026-08-28 while the shipped page it feeds was sentence was unscoped until 2026-08-28 while the shipped page it feeds was
scoped; found by `claims-auditor` on re-audit, one file over from the same scoped; found by `claims-auditor` on re-audit, one file over from the same
defect fixed in `docs/04` earlier the same day. **"Pathway", never "designation"** — a *designation* that defect fixed in `docs/04` earlier the same day.
"commenced in August 2026" reads as in force since then, i.e. **held**, which
§4 Forbidden bars outright. This model sentence said "designation" until ⚠️ **TEN LINES WERE DELETED HERE ON 2026-08-30, AND THE DELETION IS THE
2026-08-28 and it is copy an implementer is told to lift; found by POINT.** They read *"'Pathway', never 'designation'"*, cited the **struck**
`claims-auditor`. The limit being named is the **stage of the arc**, stated plainly — Forbidden row as live, instructed that *"the limit being named is the stage of
Pouya's instruction is that being open about it is the differentiator, so do the arc, stated plainly"*, and closed *"Precision about what you cannot yet do
not hedge it into vagueness and do not drop it. (**No tribunal-secretary makes the rest believable."* Every one of those directs an implementer to
work** — D14 write the form §4 now bars — **eleven lines below this bullet's own strike
removed the rate and bars offering it; see `docs/07-fees.md`.) Precision about notice**, so one bullet said both things. The Q25 shape, in the copy deck an
what you cannot yet do makes the rest believable. implementer is told to lift verbatim. **The 2026-08-29 sweep missed it because
`git grep -nE 'Q\.?Arb'` is line-anchored and not one of those ten lines
contained the string.** Found by `claims-auditor` on the round-2 audit.
(**No tribunal-secretary work** — D14 removed the rate and bars offering it;
see `docs/07-fees.md`.)
- Plain words over Latin. "Without prejudice" survives because it is a term of - Plain words over Latin. "Without prejudice" survives because it is a term of
art; *inter alia* does not. art; *inter alia* does not.
@@ -229,17 +237,18 @@ session that wrote them. Consume the constant on any page that needs the
sentence. Do not retype it, do not paraphrase it, and do not quote a variant of sentence. Do not retype it, do not paraphrase it, and do not quote a variant of
it in a spec. it in a spec.
Fourth slot where the layout has one: **Q.Arb — commenced August 2026.** Use Fourth slot where the layout has one: **`Q.Arb` over `ADRIC / ADRIO designation`**
that wording, not "in progress": §4 pins it, and the weaker form drifts toward — the label is byte-identical to the Q.Med slot's, because the two render side by
"nearly complete", which §4 Forbidden bars outright. side and any difference reads as a distinction being drawn. ⚠️ **AMENDED 2026-08-29.** It read *"Q.Arb — commenced August
2026"*, and every stage form — "commenced", "in progress", "pathway", "not yet" —
is now barred: Q.Arb is **held** (`AGENTS.md` §4), so a stage word understates a
held credential. **The acquisition date is recorded in §4 and is not published.**
**On the home page the fourth slot IS used, and it is not optional there.** **The fourth slot is no longer MANDATORY anywhere.** It was, on `/`, under §4's
`docs/01` §`/` says "Three slots"; §4's paired-disclosure condition is the higher paired-disclosure condition that page says *arbitrator* in its opening
authority and requires that wherever the site offers arbitration it "states sentence and the stage had to appear beside the offering. The condition is
plainly" the stage of the arc. `/` says *arbitrator* in its opening sentence, so dissolved. `/` keeps the slot because §4's substitution principle wants a fourth
the stage belongs on the same page rather than only in the footer. Rendered as credential where the layout has one, not because anything requires it.
value `Q.Arb` over label `Commenced August 2026` — the same wording, with the
em-dash carried by the layout instead of by the string.
The substitution principle (`AGENTS.md` §4): wherever the design wants a "how The substitution principle (`AGENTS.md` §4): wherever the design wants a "how
many", substitute a longer-arc credential. These are all true at launch and stay many", substitute a longer-arc credential. These are all true at launch and stay
@@ -269,23 +278,31 @@ redrawing the loop into a line.* First person: "my mark", not "our mark".
as one arc, not three lists: a JD and active litigation exposure; a parallel as one arc, not three lists: a JD and active litigation exposure; a parallel
career in machine learning and infrastructure engineering; a company run career in machine learning and infrastructure engineering; a company run
alongside the practice — §4's wording; "alongside both" was a concurrency claim alongside the practice — §4's wording; "alongside both" was a concurrency claim
the register does not make. The arc is the point — the credentialing pathway from Q.Med the register does not make.
through Q.Arb to C.Med-Arb is stated openly, **with Q.Arb described as
commenced August 2026** and never as "in progress", which is looser than §4 and
is barred by `docs/06`'s cutover checklist. The brief treats that arc as part of
the story rather than something to obscure.
The designation names expand as **Qualified Mediator**, **Qualified Arbitrator** ⚠️ **THE CREDENTIALING ARC IS STRUCK (2026-08-29, Pouya), AND SO IS `/about/`'s
and **Chartered Med-Arbitrator** — ADRIO's own forms, sourced in ARC SECTION.** This paragraph required *"the credentialing pathway from Q.Med
`docs/reference/adrio-designations.md`. Never "Chartered Mediator-Arbitrator". through Q.Arb to C.Med-Arb… stated openly, with Q.Arb described as commenced
August 2026"*. Q.Arb is held; C.Med-Arb is off the site; there is no pathway.
**The three-track story stays** — law, engineering, a company — because that arc
is about his working life, not about a credential. Only the credentialing arc
goes.
The designation names expand as **Qualified Mediator** and **Qualified
Arbitrator** — ADRIO's own forms, sourced in
`docs/reference/adrio-designations.md`. *(**Chartered Med-Arbitrator** was here
too; the designation is real and stays in `AGENTS.md` §11 as a definition, but
nothing on the site names it.)* Never "Chartered Mediator-Arbitrator".
Omit any section that would be empty. No "Speaking" heading until there is a Omit any section that would be empty. No "Speaking" heading until there is a
talk to list. talk to list.
### Mediation / Arbitration / Med-Arb ### Mediation / Arbitration / Med-Arb
Procedural, specific, unembellished. Name the rules. Describe the formats. State Procedural, specific, unembellished. Name the rules. Describe the formats. State
what a party should expect to do and when. On `/arbitration/`, state the Q.Arb what a party should expect to do and when. *(This closed with "On
position in plain terms — what is available now versus what follows designation. `/arbitration/`, state the Q.Arb position in plain terms — what is available now
versus what follows designation." Struck 2026-08-29: Q.Arb is held, and nothing
follows designation.)*
`/med-arb/` addresses the procedural-fairness objection directly: the same `/med-arb/` addresses the procedural-fairness objection directly: the same
neutral who heard a party's confidential caucus later decides the matter. Do not neutral who heard a party's confidential caucus later decides the matter. Do not
@@ -424,7 +441,14 @@ Drafted by Claude, **every word reviewed by Pouya before publication**:
grepped. **Keep the source's superlatives inside the quotation marks** grepped. **Keep the source's superlatives inside the quotation marks**
- [ ] No superlatives and no guarantee language - [ ] No superlatives and no guarantee language
- [ ] No claim or implication of legal licensure anywhere (D13) - [ ] No claim or implication of legal licensure anywhere (D13)
- [ ] Q.Arb described as commenced August 2026, never as held or nearly complete - [ ] Q.Arb described as **held**`Q.Arb (ADRIC / ADRIO)`, no acquisition
date, and never as "commenced", "in progress", "a pathway" or "not yet"
(amended 2026-08-29). `npm run check:claims` enforces the **stage words**
and a **date near `Q.Arb`** on `dist/`. It cannot catch a stage expressed
without naming the designation — the struck h1 "Available now, and open
about the stage" matches nothing — and that gap is `claims-auditor`'s to
close, not this checklist's
- [ ] **C.Med-Arb appears nowhere** — struck entirely 2026-08-29
- [ ] Nothing implies a firm, a team, or offices that do not exist - [ ] Nothing implies a firm, a team, or offices that do not exist
- [ ] Contact page states that an inquiry creates no retainer and no - [ ] Contact page states that an inquiry creates no retainer and no
mediatorparty relationship mediatorparty relationship
+12 -4
View File
@@ -105,16 +105,24 @@ JSON-LD only. Validate against Google's Rich Results Test before cutover.
| Type | Where | Notes | | Type | Where | Notes |
|---|---|---| |---|---|---|
| `Person` | `/about/`, referenced site-wide | **Emitted:** `name`, `url`, `jobTitle`, `description`, `alumniOf` (Bond University), `knowsLanguage` (en, fa), `hasCredential` (Q.Med), `sameAs` (LinkedIn), `email`, `image`. **Emitted on `/about/` only:** `memberOf` — the four §4 memberships as `Organization` nodes (Q53, ruled 2026-08-28). `/` shows no memberships, so its Person node omits it: structured data represents the page it sits on. **Withheld:** `worksFor` — Q49(b) declined the row 2026-08-28 and Pouya confirmed the reading 2026-08-29, so it is settled rather than pending; `provider → Person → worksFor` would assert a same-entity claim §4 does not row. *(This enumeration listed `worksFor` as emitted while the same cell said it was withheld, and omitted `url` and `email`, which are — wrong in both directions. The enumeration is the part an implementer copies. Found by `adversarial-reviewer`.)* **CHANGED 2026-08-28 — Q47.** This row read *"`jobTitle` = 'Director of Firm Operations'; omit `worksFor`"*, which put the boutique title on a node whose `url` is this ADR practice's `/about/` — so a consumer could attach it to this entity. Pouya's ruling reframes the field: `jobTitle` describes **this practice**, not the boutique role, which D16 keeps unnamed. The visible role line is unchanged and still reads "Director of Firm Operations at a Toronto litigation and ADR boutique". **THE VALUE IS `PRACTICE_JOB_TITLE` IN `src/data/site.ts` AND THIS ROW DOES NOT RESTATE IT** — §7's rule, applied to a string with a live revert trigger on it: this row carried the literal text for one pass, and `adversarial-reviewer` noted it would go stale the moment the constant moved. Cite, do not copy. **`worksFor` IS WITHHELD** — set for one pass under Q47, then reverted: `ProfessionalService.provider` is this Person, so `provider → Person → worksFor` asserts the same-entity claim `schema.ts` explicitly declines, and §4 says "alongside the practice" where the ruling says "operates through". **`memberOf` is emitted** — see the sentence above; Q53 closed 2026-08-28. *(This cell asserted `memberOf` was both emitted and withheld for one pass, which is the defect it already records itself being caught for on `worksFor`, in the opposite direction. The enumeration is the part an implementer copies.)* See `src/data/schema.ts` | | `Person` | `/about/`, referenced site-wide | **Emitted:** `name`, `url`, `jobTitle`, `description`, `alumniOf` (Bond University), `knowsLanguage` (en, fa), `hasCredential` (**Q.Med, Q.Arb** — both, since 2026-08-29), `sameAs` (LinkedIn), `email`, `image`. **Emitted on `/about/` only:** `memberOf` — the four §4 memberships as `Organization` nodes (Q53, ruled 2026-08-28). `/` shows no memberships, so its Person node omits it: structured data represents the page it sits on. **Withheld:** `worksFor` — Q49(b) declined the row 2026-08-28 and Pouya confirmed the reading 2026-08-29, so it is settled rather than pending; `provider → Person → worksFor` would assert a same-entity claim §4 does not row. *(This enumeration listed `worksFor` as emitted while the same cell said it was withheld, and omitted `url` and `email`, which are — wrong in both directions. The enumeration is the part an implementer copies. Found by `adversarial-reviewer`.)* **CHANGED 2026-08-28 — Q47.** This row read *"`jobTitle` = 'Director of Firm Operations'; omit `worksFor`"*, which put the boutique title on a node whose `url` is this ADR practice's `/about/` — so a consumer could attach it to this entity. Pouya's ruling reframes the field: `jobTitle` describes **this practice**, not the boutique role, which D16 keeps unnamed. The visible role line is unchanged and still reads "Director of Firm Operations at a Toronto litigation and ADR boutique". **THE VALUE IS `PRACTICE_JOB_TITLE` IN `src/data/site.ts` AND THIS ROW DOES NOT RESTATE IT** — §7's rule, applied to a string with a live revert trigger on it: this row carried the literal text for one pass, and `adversarial-reviewer` noted it would go stale the moment the constant moved. Cite, do not copy. **`worksFor` IS WITHHELD** — set for one pass under Q47, then reverted: `ProfessionalService.provider` is this Person, so `provider → Person → worksFor` asserts the same-entity claim `schema.ts` explicitly declines, and §4 says "alongside the practice" where the ruling says "operates through". **`memberOf` is emitted** — see the sentence above; Q53 closed 2026-08-28. *(This cell asserted `memberOf` was both emitted and withheld for one pass, which is the defect it already records itself being caught for on `worksFor`, in the opposite direction. The enumeration is the part an implementer copies.)* See `src/data/schema.ts` |
| `ProfessionalService` | Home | `areaServed` Toronto/Ontario, `serviceType` **Mediation / Commercial arbitration / Mediation-arbitration (med-arb)***scoped 2026-08-28 on `claims-auditor`'s finding; this row instructed the unscoped class form "Mediation/Arbitration" that Q39 struck and that `schema.ts` deliberately does not follow. Family arbitration carries prescribed training and has its own NOT OFFERED row, so unscoped "Arbitration" is the struck universal in a field nobody reads. Do not widen these strings without a §4 row to widen them from*`provider` → Person, `priceRange` once `/fees/` is real. **Never `LegalService`** — schema.org defines it as a business providing legal advice and *representation*, which asserts in machine-readable form exactly what D13 bars and §4 Forbidden calls out | | `ProfessionalService` | Home | `areaServed` Toronto/Ontario, `serviceType` **Mediation / Commercial arbitration / Mediation-arbitration (med-arb)***scoped 2026-08-28 on `claims-auditor`'s finding; this row instructed the unscoped class form "Mediation/Arbitration" that Q39 struck and that `schema.ts` deliberately does not follow. Family arbitration carries prescribed training and has its own NOT OFFERED row, so unscoped "Arbitration" is the struck universal in a field nobody reads. Do not widen these strings without a §4 row to widen them from*`provider` → Person, `priceRange` once `/fees/` is real. **Never `LegalService`** — schema.org defines it as a business providing legal advice and *representation*, which asserts in machine-readable form exactly what D13 bars and §4 Forbidden calls out |
| `Service` | **`/mediation/`, `/arbitration/`, `/med-arb/`** and each practice page | `serviceType`, `provider` → Person, `areaServed`. **The Person node travels in the same `@graph`** so `provider: {'@id'}` resolves in one document rather than relying on a crawler joining two — `homeGraph`'s reasoning, applied. `serviceType` is scoped where §4 scopes it: *Commercial arbitration*, never a bare "Arbitration". No `BreadcrumbList` on the three — one hop from the root, no visible breadcrumb, and this spec requires the markup to match the visible one | | `Service` | **`/mediation/`, `/arbitration/`, `/med-arb/`** and each practice page | `serviceType`, `provider` → Person, `areaServed`. **The Person node travels in the same `@graph`** so `provider: {'@id'}` resolves in one document rather than relying on a crawler joining two — `homeGraph`'s reasoning, applied. `serviceType` is scoped where §4 scopes it: *Commercial arbitration*, never a bare "Arbitration". No `BreadcrumbList` on the three — one hop from the root, no visible breadcrumb, and this spec requires the markup to match the visible one |
| `Article` | Each article | `headline`, `description`, `datePublished`, `dateModified`, `author` → Person, `image` | | `Article` | Each article | `headline`, `description`, `datePublished`, `dateModified`, `author` → Person, `image` |
| `BreadcrumbList` | All nested pages | Matches visible breadcrumbs | | `BreadcrumbList` | All nested pages | Matches visible breadcrumbs |
| `FAQPage` | `/for-parties/`, `/med-arb/` | Only where the visible page genuinely is Q&A. Never fabricate questions to farm a rich result | | `FAQPage` | `/for-parties/`, `/med-arb/` | Only where the visible page genuinely is Q&A. Never fabricate questions to farm a rich result |
**`hasCredential` must reflect reality.** Q.Med is held. Q.Arb is not. Marking an **`hasCredential` must reflect reality.** ⚠️ **Q.Med AND Q.Arb are both held as
unheld credential as held in structured data is a misrepresentation that happens of 2026-08-29** (`AGENTS.md` §4) and the field carries both — it was Q.Med-only
to be machine-readable. while Q.Arb was a commenced pathway. The rule is unchanged and cuts both ways:
marking an unheld credential as held is a misrepresentation that happens to be
machine-readable, and **omitting a held one understates the record in a field
whose whole meaning is "holds"**. `personNode` maps `CREDENTIALS.designations`
rather than indexing it, so a designation added to that constant reaches the
graph automatically. **That links the CONSTANT to the graph, not §4 to the
graph** — a designation added to §4 and not to `src/data/site.ts` still drifts
silently, and no mechanism catches it. `src/data/schema.ts` states the condition
in full; this sentence overstated it for one pass.
## Crawlability ## Crawlability
+8 -2
View File
@@ -374,8 +374,14 @@ Then invalidate `/*`.
question question
- [ ] No `TODO(pouya)` remains in any shipped page - [ ] No `TODO(pouya)` remains in any shipped page
- [ ] No matter counts, rates, dollar figures, or testimonials anywhere - [ ] No matter counts, rates, dollar figures, or testimonials anywhere
- [ ] Q.Arb described as **commenced August 2026** everywhere it appears — §4's - [ ] Q.Arb described as **held** everywhere it appears — `Q.Arb (ADRIC /
wording, not the looser "in progress" ADRIO)`, no acquisition date. **Every stage form is barred**: "commenced",
"in progress", "pathway", "not yet" (amended 2026-08-29). `npm run
check:claims` enforces the **stage words** and a **date near the
designation**, on `dist/`, in both deploy paths. It cannot catch a stage
expressed without naming the designation; that gap is `claims-auditor`'s to
close, and it is stated in the pattern itself
- [ ] **C.Med-Arb appears nowhere in `dist/`** — struck entirely 2026-08-29
- [ ] `/fees/` carries the rates confirmed in D14 and `docs/07-fees.md`, or the page does not ship - [ ] `/fees/` carries the rates confirmed in D14 and `docs/07-fees.md`, or the page does not ship
- [ ] Privacy policy matches the backend as actually built - [ ] Privacy policy matches the backend as actually built
+11 -7
View File
@@ -70,7 +70,7 @@ Three observations that drive the recommendation.
## Where this practice should sit ## Where this practice should sit
**Not at the floor.** Pouya's stack — JD, an operating role inside a litigation **Not at the floor.** Pouya's stack — JD, an operating role inside a litigation
and ADR boutique, Q.Med held, Q.Arb commenced, and a working engineering career — and ADR boutique, Q.Med and Q.Arb held, and a working engineering career —
is not a junior generalist profile. Entering at roster rates would anchor him is not a junior generalist profile. Entering at roster rates would anchor him
into SABS volume work and make the commercial rate very hard to raise later. into SABS volume work and make the commercial rate very hard to raise later.
Published rates are close to unrecoverable once set: raising them looks Published rates are close to unrecoverable once set: raising them looks
@@ -111,12 +111,16 @@ line was unscoped, and every §4 arbitration row is scoped commercial with famil
arbitration separately NOT OFFERED — Q39's struck universal.)* arbitration separately NOT OFFERED — Q39's struck universal.)*
*(This line previously read "sole appointments follow the Q.Arb designation", *(This line previously read "sole appointments follow the Q.Arb designation",
which understated the offering, and carried a caveat against a since-closed which understated the offering, and carried a caveat against a since-closed
Q36.)* Whatever `/fees/` says about arbitration must state the Q.Arb stage Q36.)*
plainly alongside it — §4 Offerings, "neither half may be dropped": the Q.Arb
**pathway** commenced August 2026, with C.Med-Arb as the endpoint. *("pathway", ⚠️ **`/fees/` HAS NO CREDENTIALING DISCLOSURE TO MAKE (amended 2026-08-29).**
not "designation" — a designation that commenced reads as held, which §4 This paragraph required that whatever the page says about arbitration *"must
Forbidden bars. Corrected 2026-08-28 on `claims-auditor`'s finding.)* See state the Q.Arb stage plainly alongside it — §4 Offerings, 'neither half may be
`03-content-spec.md` for the wording. dropped'"*. **Q.Arb is held and that condition is dissolved.** `/fees/` is
unbuilt (step 9), so this is the one place the amendment lands before the page
exists rather than after — do not build the page against the struck form. `03-content-spec.md`'s
model sentence is now the scope half only — the stage half was struck with the
paragraph this one used to point at.
| Item | Fee | | Item | Fee |
|---|---| |---|---|
+14 -7
View File
@@ -166,9 +166,11 @@ designation structure, not about Pouya.
> FALSIFIED IT WAS ONE THIS FILE HAD ALREADY FETCHED.** It was headed *"the two > FALSIFIED IT WAS ONE THIS FILE HAD ALREADY FETCHED.** It was headed *"the two
> Chartered pages state a retention condition; the Q page does not"* and argued a > Chartered pages state a retention condition; the Q page does not"* and argued a
> **Qualified-vs-Chartered** asymmetry. There are **three** Chartered pages. The > **Qualified-vs-Chartered** asymmetry. There are **three** Chartered pages. The
> count was never run on `chartered-med-arbitrator-c-med-arb/` — the designation > count was never run on `chartered-med-arbitrator-c-med-arb/` — at the time,
> §4 records as the practice's stated goal, and therefore the one most > the designation §4 recorded as the practice's stated goal, and therefore the
> load-bearing for Q48. Found by `claims-auditor`, 2026-08-28. > one most load-bearing for Q48. Found by `claims-auditor`, 2026-08-28.
> *(That §4 row was **struck 2026-08-29** — C.Med-Arb is off the site entirely.
> The counting defect this paragraph records is unaffected.)*
Counted on the extracted text of **all four** designation pages: Counted on the extracted text of **all four** designation pages:
@@ -220,8 +222,11 @@ both are quotable in principle.
(*"best", "leading", "top-rated"*), and the reason given there is not only (*"best", "leading", "top-rated"*), and the reason given there is not only
verifiability — it is that *"they read as insecure to the audience this site is verifiability — it is that *"they read as insecure to the audience this site is
for"*. A superlative does not stop being one because a third party said it first, for"*. A superlative does not stop being one because a third party said it first,
and the credential arc does not need it: **"the designation this practice is built and the copy did not need it. *(This sentence justified the superlative's
toward"** is Pouya's own stated goal and has a §4 row. removal by pointing at **"the designation this practice is built toward"** as
"Pouya's own stated goal" with "a §4 row". **That row was struck 2026-08-29** and
the phrase is off the site. The reason superlatives stay inside quotation marks
is unchanged and never depended on it.)*
--- ---
@@ -239,8 +244,10 @@ toward"** is Pouya's own stated goal and has a §4 row.
**Does not establish:** **Does not establish:**
- **Anything about Pouya.** Not that he holds Q.Med, not that he has commenced - **Anything about Pouya.** Not that he holds Q.Med, not that he holds Q.Arb,
Q.Arb, not that he is a member of ADRIO. Those are §4 Verified rows and this not that he is a member of ADRIO. *(This read "not that he has **commenced**
Q.Arb" until 2026-08-30 — a struck stage form surviving in the file an
implementer opens to write designation copy.)* Those are §4 Verified rows and this
file is not a substitute for one. The standard Pouya ratified is exactly this file is not a substitute for one. The standard Pouya ratified is exactly this
split: *"§11 Glossary is the source for DEFINITIONAL expansions; §4 remains split: *"§11 Glossary is the source for DEFINITIONAL expansions; §4 remains
the only source for claims about Pouya."* the only source for claims about Pouya."*
+206 -23
View File
@@ -177,14 +177,72 @@ const PATTERNS = [
re: /\bS\.?\s?M\.?\s+Lawrence\b|\b07452218\b/gi, re: /\bS\.?\s?M\.?\s+Lawrence\b|\b07452218\b/gi,
}, },
{ {
id: 'q-arb-as-held', id: 'q-arb-as-a-stage',
rule: '§4 Forbidden — Q.Arb must never read as held, imminent, or nearly complete.', rule: '§4 — Q.Arb is HELD. It must never read as a stage, a pathway, or pending.',
incident: incident:
'It commenced August 2026. The recurring drift is one word: docs/03 said ' + 'THIS PATTERN WAS INVERTED ON 2026-08-29 AND ITS PREDECESSOR IS GONE. It ' +
'the Q.Arb "designation commenced in August 2026" — which reads as in ' + 'used to bar Q.Arb reading as HELD, because §4 recorded it as "commenced ' +
'force since then, i.e. HELD — in copy an implementer is told to lift ' + 'August 2026"; Pouya ruled it held (obtained July 2026, date NOT ' +
'verbatim. Found by claims-auditor 2026-08-28. §4 requires "pathway".', 'published), so every stage word now understates a real credential. The ' +
re: /Q\.?\s?Arb\s+designation\b|\b(holds?|holding|awarded|conferred|earned|achieved)\s+(the\s+|a\s+)?Q\.?\s?Arb\b|Q\.?\s?Arb[^.<]{0,60}\b(nearly|almost) complete\b|Q\.?\s?Arb[^.<]{0,60}\bin progress\b/gi, 'site carried the struck forms on six surfaces — an h1 reading "Available ' +
'now, and open about the stage", a whole /arbitration/ section headed ' +
'"Where I am in the arc", /about/\'s arc section, the footer strip, and ' +
'both JSON-LD nodes. Publish "Q.Arb (ADRIC / ADRIO)" and nothing more.',
/* ~50 characters either side, per Pouya's specification. The window stops at
the next TAG boundary so it cannot leap a paragraph. It stopped at a
sentence boundary too (`[^.<]`) until the fixture below proved that too
tight: "Qualified Arbitrator. Newly commenced" splits the anchor from the
stage word across a full stop, 22 characters apart, and that is precisely
the copy this pattern exists for. The self-test caught the regression.
⚠️ THE ANCHOR MATCHES THE EXPANSION TOO, and it did not on the first
draft. Tested against the nine strings this change set removed: it caught
seven and MISSED "Qualified Arbitrator. Newly commenced — not held, and
not nearing completion." — /about/'s own arc body, which never wrote the
abbreviation. An abbreviation-only anchor cannot see copy that spells the
designation out, and prose is exactly where it gets spelled out.
KNOWN LIMIT, stated rather than papered over: this cannot catch a stage
expressed without naming the designation at all. The h1 it replaced —
"Available now, and open about the stage" — matches nothing here and no
regex over shipped HTML would catch it without firing on ordinary copy.
That one is `claims-auditor`'s. */
/* WHAT EACH ALTERNATIVE IS FOR, because none is obvious from the regex:
(1) stage word after the designation, (2) before it, (3) an acquisition
DATE near it — §4 records July 2026 and bars publishing it, and docs/03
cited this script as enforcing that before it did (the Q22 shape) —
(4) "once/when I hold it", which must take the designation as its object
or it fires on "when I hold a preliminary conference".
THE ANCHOR MATCHES THE EXPANSION because `docs/03` authorises "Qualified
Arbitrator" as publishable prose, and prose is where it gets spelled out.
KNOWN LIMIT, stated rather than papered over: this cannot catch a stage
expressed without naming the designation. The h1 it replaced — "Available
now, and open about the stage" — matches nothing here, and no regex over
shipped HTML would catch it without firing on ordinary copy. That one is
`claims-auditor`'s. */
re: /(?:Q\.?\s?Arb|Qualified Arbitrator)\b[^<\uE000]{0,50}?\b(commenc\w*|in progress|pathway|not yet|not held|nearing completion|pending|working toward|under ?way)\b|\b(commenc\w*|in progress|pathway|not yet|not held|nearing completion|pending|working toward|under ?way)\b[^<\uE000]{0,50}?\b(?:Q\.?\s?Arb|Qualified Arbitrator)\b|(?:Q\.?\s?Arb|Qualified Arbitrator)\b[^<\uE000]{0,50}?\b(?:January|February|March|April|May|June|July|August|September|October|November|December)\s+20\d\d\b|\b(?:January|February|March|April|May|June|July|August|September|October|November|December)\s+20\d\d\b[^<\uE000]{0,50}?\b(?:Q\.?\s?Arb|Qualified Arbitrator)\b|\b(?:once|when)\s+(?:I|he)\s+(?:holds?|obtains?|receives?|completes?)\s+(?:it\b|the\s+)?(?:Q\.?\s?Arb|designation)\b/gi,
},
{
id: 'c-med-arb-struck',
rule: 'C.Med-Arb is out entirely — it appears on no page (Pouya, 2026-08-29).',
incident:
'It was the strategy brief\'s "explicit long-term professional narrative" ' +
'and it shipped on /, /about/, /arbitration/ and /med-arb/ as the endpoint ' +
'of a credentialing arc. Pouya dispensed with it: he holds Q.Med and ' +
'Q.Arb, which is what med-arb requires. THE DESIGNATION IS STILL REAL and ' +
'stays in AGENTS.md §11 as a definition — this bars naming it in shipped ' +
'output, not knowing what it is. Barred in every spelling both ' +
'institutions use, because the reinstatement risk is a well-meaning ' +
'implementer reading the brief, not a typo.',
/* ⚠️ THE LEADING \b AND THE MANDATORY DOT ARE BOTH LOAD-BEARING, and this
pattern shipped without them for one run. `C\.?\s?Med-Arb` matched
"ADRIC Med-Arb Rules" as "C Med-Arb" — the C of ADRIC, a space, then the
real rule-set name — and failed the build on approved copy on /med-arb/.
The abbreviation always carries the dot; "C Med-Arb" is not a form either
institution uses. The fixture below pins it. */
re: /\bC\.\s?Med-Arb(?:itrat(?:or|ion))?s?\b|\bChartered Med-Arb(?:itrat(?:or|ion))?s?\b/gi,
}, },
{ {
id: 'struck-universal-q39', id: 'struck-universal-q39',
@@ -252,11 +310,36 @@ const FIXTURES = {
'the best mediator', 'the best mediator',
], ],
'fabricated-founder': ['S. M. Lawrence', 'Co. № 07452218'], 'fabricated-founder': ['S. M. Lawrence', 'Co. № 07452218'],
'q-arb-as-held': [ 'q-arb-as-a-stage': [
'the Q.Arb designation', 'The Q.Arb pathway commenced in August 2026',
'holds Q.Arb', 'Q.Arb is in progress',
'Q.Arb is nearly complete', 'Q.Arb — not yet held',
'Q.Arb, in progress', 'once I hold Q.Arb',
'my Q.Arb pathway',
/* The expansion, which the first draft of this pattern missed. */
'Qualified Arbitrator. Newly commenced — not held, and not nearing completion.',
/* The acquisition date, which no stage word caught. */
'Q.Arb, obtained July 2026',
'Q.Arb (ADRIC / ADRIO), held since July 2026',
/* The `rule` line above named these and the regex never matched them —
a documented control not covering what it is cited for (Q22's shape). */
'Q.Arb is pending',
'Q.Arb — the designation I am working toward',
'the Q.Arb process is under way',
],
'c-med-arb-struck': [
'C.Med-Arb is the endpoint',
'Chartered Med-Arbitrator',
'the ADRIC Chartered Med-Arb designation',
/* The blend §11's own expansion invites, which the trailing \b in the
first draft made invisible: `C\.Med-Arb\b` cannot match when the next
character is a word char. */
'the C.Med-Arbitrator designation',
'Chartered Med-Arbitration',
/* Plurals: the trailing \b survived the first repair and blocked these. */
'Chartered Med-Arbitrators',
'C.Med-Arbitrators',
'C.Med-Arbitration',
], ],
'struck-universal-q39': [ 'struck-universal-q39': [
'Anyone may be appointed an arbitrator in Ontario', 'Anyone may be appointed an arbitrator in Ontario',
@@ -286,8 +369,26 @@ const FIXTURES = {
inside <style>. */ inside <style>. */
'<style>.hero-lede{line-height:var(--leading-body);color:var(--text-secondary)}</style>', '<style>.hero-lede{line-height:var(--leading-body);color:var(--text-secondary)}</style>',
'Software contracts, SLA and MSA breakdowns, data residency and processing, AI vendor diligence, IP and licensing.', 'Software contracts, SLA and MSA breakdowns, data residency and processing, AI vendor diligence, IP and licensing.',
'The Q.Arb pathway commenced in August 2026; C.Med-Arb is the endpoint.', /* The approved replacements for the two negatives struck on 2026-08-29,
'Chartered Med-Arbitrator', which were 'The Q.Arb pathway commenced in August 2026; C.Med-Arb is
the endpoint.' and a bare 'Chartered Med-Arbitrator'. Both are now
breaches, and both moved to mustMatch. */
'Q.Med (ADRIC / ADRIO) · Q.Arb (ADRIC / ADRIO)',
/* The expansion in approved use — §11 definitional, no stage word. */
'Q.Arb stands for Qualified Arbitrator, an ADRIC and ADRIO designation.',
/* `once` and `when` were BARE stage words for one run, and all four of these
compliant sentences failed the build. They now require a hold-verb. */
'I hold Q.Med and Q.Arb, and I say so when a party asks',
'Q.Arb (ADRIC / ADRIO), which is what parties look at when they appoint',
'Once appointed, I hold Q.Arb and act as sole arbitrator',
'Q.Arb, and when the parties agree the process runs on that basis',
/* `hold` is a common verb on an arbitration page with a different object;
the repair narrowed `once|when` rather than closing it, and this shipped
past it for one run. The hold-verb must now take the designation. */
'I hold Q.Arb, and when I hold a preliminary conference the parties attend',
'I hold the Q.Med and Q.Arb designations through the ADR Institute of Canada and the ADR Institute of Ontario.',
/* The false positive the first form of `c-med-arb-struck` produced. */
'The ADR Institute of Canada publishes ADRIC Med-Arb Rules, developed by a task force.',
'The ADRIC National Mediation Rules.', 'The ADRIC National Mediation Rules.',
'adopted a new edition effective 1 March 2025', 'adopted a new edition effective 1 March 2025',
'Commercial arbitration in Ontario. I do not accept family arbitration.', 'Commercial arbitration in Ontario. I do not accept family arbitration.',
@@ -364,6 +465,53 @@ function publishedText(html) {
); );
} }
/**
* THE SECOND VIEW, AND IT EXISTS BECAUSE `<strong>` DEFEATED THE GATE.
*
* `publishedText` leaves tags in place, and several patterns use `[^<]` as a
* window boundary so they cannot leap a paragraph. That boundary also stops
* them crossing INLINE markup: `<strong>Q.Arb</strong> — the pathway commenced
* in August 2026` matched nothing, and this site sets `<strong>` in prose on
* `/arbitration/` and `/`. Found by `adversarial-reviewer` 2026-08-30.
*
* So every page is scanned TWICE — once as published, once with inline tags
* collapsed to a single space. Block-level tags collapse to a full stop
* instead, which preserves the "do not leap a paragraph" property that made the
* `[^.<]` window worth having in the first place. Matches are deduplicated by
* the matched text, so a hit visible in both views is reported once.
*/
const BLOCK_TAGS =
/<\/?(?:p|div|section|article|header|footer|nav|main|aside|h[1-6]|li|ul|ol|dl|dt|dd|table|tr|td|th|blockquote|figure|figcaption|br|hr)\b[^>]*>/gi;
/**
* ⚠️ THE BLOCK BOUNDARY IS A SENTINEL (`\uE000`), NOT A FULL STOP, AND THAT IS
* WHAT LETS ONE REGEX SERVE BOTH VIEWS.
*
* First attempt substituted `' . '` and the windows were written `[^<]` — but
* collapsed text contains no `<` at all, so the window was bounded by nothing
* and leapt three block boundaries to join an `<h2>Q.Arb</h2>` to a paragraph
* reading "took effect on 1 March 2025" — approved copy that ships. Measured by
* `adversarial-reviewer`.
*
* Writing the windows `[^.<]` instead would fix that and reintroduce the defect
* the collapsed view exists for: a real sentence period inside one paragraph
* ("Qualified Arbitrator. Newly commenced") must still be crossable.
*
* A sentinel separates the two jobs. `[^<\uE000]` is bounded by `<` in the
* published view and by `\uE000` in the collapsed one; neither character occurs
* in the other view, and a full stop bounds neither. Every window in PATTERNS
* uses that class.
*/
const BLOCK_BOUNDARY = '\uE000'; // Private Use Area: never occurs in real content,
// and unlike \u0000 it is not a control character, which `no-control-regex` bars.
function collapsedText(html) {
return publishedText(html)
.replace(BLOCK_TAGS, BLOCK_BOUNDARY)
.replace(/<[^>]+>/g, ' ')
.replace(/[ \t]+/g, ' ');
}
function contextAt(text, index, length) { function contextAt(text, index, length) {
const from = Math.max(0, index - 55); const from = Math.max(0, index - 55);
const to = Math.min(text.length, index + length + 55); const to = Math.min(text.length, index + length + 55);
@@ -404,7 +552,15 @@ function selfTest() {
); );
} }
for (const negative of FIXTURES.mustNotMatch) { for (const negative of FIXTURES.mustNotMatch) {
const hits = scan(publishedText(negative), p.re); /* ⚠️ BOTH VIEWS. This read `publishedText` only, which left the entire
false-positive surface of `collapsedText` untested — and that is
exactly where the loosening happened: the collapsed view leapt three
block boundaries onto approved copy and the instrument check could not
see it. Found by `adversarial-reviewer`. */
const hits = [
...scan(publishedText(negative), p.re),
...scan(collapsedText(negative), p.re),
];
if (hits.length > 0) { if (hits.length > 0) {
failures.push( failures.push(
`${p.id}: matched APPROVED copy — ${JSON.stringify(hits[0].match)} in ${JSON.stringify(negative)}`, `${p.id}: matched APPROVED copy — ${JSON.stringify(hits[0].match)} in ${JSON.stringify(negative)}`,
@@ -483,14 +639,41 @@ console.log(` pages: ${pages.length}\n`);
for (const p of PATTERNS) { for (const p of PATTERNS) {
const hits = []; const hits = [];
for (const page of pages) { for (const page of pages) {
const text = publishedText(readFileSync(page, 'utf8')); const raw = readFileSync(page, 'utf8');
for (const hit of scan(text, p.re)) { /* ⚠️ DEDUPE BY OCCURRENCE COUNT, NEVER BY TEXT. The first version keyed a
hits.push({ Set on the matched string, so `He is a lawyer.` twice on one page was
page: rel(page), reported ONCE and the count said 1 — the check truncating its own
line: lineOf(text, hit.index), output, which is the one thing CLAUDE.md says a check must never do.
match: hit.match, Measured by `adversarial-reviewer` on a two-line fixture.
context: contextAt(text, hit.index, hit.match.length),
}); The published view is authoritative; the collapsed view only ever ADDS
occurrences the tags hid, so a collapsed hit counts only where it exceeds
what the published view already found for that same text. */
const counted = new Map();
const bump = (key) => {
const n = (counted.get(key) ?? 0) + 1;
counted.set(key, n);
return n;
};
const publishedCounts = new Map();
for (const [viewIndex, text] of [
publishedText(raw),
collapsedText(raw),
].entries()) {
for (const hit of scan(text, p.re)) {
const key = hit.match.replace(/\s+/g, ' ').trim().toLowerCase();
if (viewIndex === 0) {
publishedCounts.set(key, (publishedCounts.get(key) ?? 0) + 1);
} else if (bump(key) <= (publishedCounts.get(key) ?? 0)) {
continue;
}
hits.push({
page: rel(page),
line: lineOf(text, hit.index),
match: hit.match,
context: contextAt(text, hit.index, hit.match.length),
});
}
} }
} }
+12 -8
View File
@@ -13,11 +13,10 @@
* slots come from src/data/site.ts, which mirrors §4; nothing is typed here. * slots come from src/data/site.ts, which mirrors §4; nothing is typed here.
* *
* <dl> RATHER THAN A DIV GRID. Each pair is a term and its description, which * <dl> RATHER THAN A DIV GRID. Each pair is a term and its description, which
* is what a description list is. It also fixes the reading order: a screen * is what a description list is, and it fixes the reading order: a screen
* reader gets "Q.Arb — Commenced August 2026" as one associated pair, which is * reader gets "Q.Arb — ADRIC / ADRIO" as one associated pair rather than four
* §4's paired-disclosure condition surviving into assistive technology rather * values then four labels. Wrapping each dt/dd pair in a <div> inside <dl> is
* than being a visual arrangement only. Wrapping each dt/dd pair in a <div> * valid HTML and is what makes the grid tractable.
* inside <dl> is valid HTML and is what makes the grid tractable.
*/ */
interface Props { interface Props {
slots: ReadonlyArray<{ value: string; label: string }>; slots: ReadonlyArray<{ value: string; label: string }>;
@@ -45,9 +44,14 @@ const { slots } = Astro.props;
This read `repeat(auto-fit, minmax(11rem, 1fr))` under a comment saying This read `repeat(auto-fit, minmax(11rem, 1fr))` under a comment saying
"two up on a phone, four up where there is room". `adversarial-reviewer` "two up on a phone, four up where there is room". `adversarial-reviewer`
measured it: at 390px the resolved template was a SINGLE 342px track and measured it: at 390px the resolved template was a SINGLE 342px track and
all four items stacked, running the band ~430px tall — with all four items stacked, running the band ~430px tall. The longest label in
`Q.Arb / Commenced August 2026`, which §4's paired-disclosure condition the row is and remains `Legal training and engineering practice` (Q37, 39
puts on this page, at the bottom of it. The arithmetic is not subtle: two chars — see below), which is what drives the track; the fourth slot's
label went from `Commenced August 2026` (21) to `ADRIC / ADRIO
designation` (25), so it got slightly LONGER and is still well inside
that 39. *(A previous version of this comment said "shorter". It was not
measured; `claims-auditor` counted the characters.)* The arithmetic is not
subtle: two
tracks at an 11rem (176px) floor plus a 24px gap need 376px and the tracks at an 11rem (176px) floor plus a 24px gap need 376px and the
container is 342px, so `auto-fit` correctly dropped to one. A container is 342px, so `auto-fit` correctly dropped to one. A
measured-sounding comment that was false is this project's own named measured-sounding comment that was false is this project's own named
+5 -17
View File
@@ -81,23 +81,11 @@ void _props;
line-height: 1.4; line-height: 1.4;
text-transform: uppercase; text-transform: uppercase;
color: var(--pill-fg, var(--text-meta)); color: var(--pill-fg, var(--text-meta));
/* `nowrap` UNTIL 2026-08-28, AND IT WAS FINE UNTIL A PILL HAD FOUR WORDS. /* NEVER `nowrap`. `Pill` takes arbitrary children, and a four-word pill at a
`/`'s six pills are one or two words (longest "Cross-cultural"). 200% default font size (root 32px) overflowed the document by 111px at
`/about/` ships `Commenced August 2026`, and at a 200% DEFAULT FONT SIZE 320px — WCAG 1.4.10 Reflow. Measured 2026-08-28; no pill on the site is
(root 32px — a real browser setting, not page zoom) that pill measured that long today, which is exactly why this is easy to delete and must not
382.6px wide with its right edge at 430.6 in a 390px viewport: be. `normal` costs nothing at default size. */
**41px of document overflow at 390, 111px at 320.** Injecting
`white-space: normal` took 390 to **0** and 320 to **63**, 63 being the
header residual docs/02 already accepts. WCAG 1.4.10 Reflow.
`normal` costs nothing at default size — a pill only wraps when it cannot
fit, which is exactly when wrapping is the right answer.
WHAT IT LOOKS LIKE AT THE EXTREME, recorded so it is not later read as a
new bug: at 320px with root at 32px, `Commenced August 2026` renders
**224 x 119px** inside `border-radius: 999px` — a three-line stadium. It
is ungainly and it is legible, in-viewport, and the alternative was
111px of document overflow. */
white-space: normal; white-space: normal;
} }
</style> </style>
+5 -13
View File
@@ -33,8 +33,7 @@ const year = new Date().getFullYear();
// sitemap and lists /med-arb/ as deliberately out of the primary nav, "linked // sitemap and lists /med-arb/ as deliberately out of the primary nav, "linked
// contextually" — so dropping it here left the page with no site-wide link at // contextually" — so dropping it here left the page with no site-wide link at
// all, on a project whose entire premise is crawlability. (2) The label names a // all, on a project whose entire premise is crawlability. (2) The label names a
// PAGE, and docs/01 frames that page around the C.Med-Arb arc rather than as a // PAGE, not an offering, so listing it is not the §4 inference it looked like.
// present offering, so listing it is not the §4 inference it looked like.
// (3) It settled half of Q35 unilaterally while the other half — Energy and // (3) It settled half of Q35 unilaterally while the other half — Energy and
// Shareholder — stayed in both nav and footer, and the record claimed no // Shareholder — stayed in both nav and footer, and the record claimed no
// unilateral action had been taken. Both halves of Q35 go to Pouya together. // unilateral action had been taken. Both halves of Q35 go to Pouya together.
@@ -60,19 +59,12 @@ const aboutLinks = [
<span class="footer-brand-name">{SITE.name}</span> <span class="footer-brand-name">{SITE.name}</span>
</a> </a>
{ {
/* The designation strip carries the credentialing STAGE, not just the /* HELD DESIGNATIONS ONLY. §4's paired-disclosure condition made this
held designation, and that is a §4 Offerings condition rather than a strip carry a credentialing stage too; that dissolved on 2026-08-29
flourish. The masthead names arbitration on every page except `/`, when Q.Arb became held. */
where SiteHeader suppresses the tagline by design. §4 permits the
arbitration half on the condition that the site "makes the first while
stating the second plainly", and "neither half may be dropped".
Before this line rendered
CREDENTIALS.inProgress, that condition was unmet on every page that
ships — the constant existed in site.ts and was rendered nowhere.
Q.Arb reads as commenced, never as held (§4). */
} }
<p class="footer-designation"> <p class="footer-designation">
{[...CREDENTIALS.designations, ...CREDENTIALS.inProgress].join(' · ')} {CREDENTIALS.designations.join(' · ')}
</p> </p>
</div> </div>
+5 -5
View File
@@ -47,9 +47,8 @@ const inSection = (href: string) => path === href || path.startsWith(href);
* is the placement Q33-orig objected to in the first place: a line under his * is the placement Q33-orig objected to in the first place: a line under his
* name with nothing to qualify it, reading as a designation strip. * name with nothing to qualify it, reading as a designation strip.
* *
* This only ever REMOVES a claim from one page, so no §4 disclosure condition * This only ever REMOVES a claim from one page. The footer's designation strip
* is touched — the footer's designation strip carries `Q.Arb — commenced * carries the held designations on every page including this one.
* August 2026` on every page including this one.
*/ */
const isHome = path === '/'; const isHome = path === '/';
--- ---
@@ -156,8 +155,9 @@ const isHome = path === '/';
/* The tagline is BACK, and the reasoning is worth keeping rather than just /* The tagline is BACK, and the reasoning is worth keeping rather than just
the outcome. It was removed on 2026-08-26 because `Arbitration` under the outcome. It was removed on 2026-08-26 because `Arbitration` under
Pouya's name read as a held capability, and §4 records Q.Arb as merely Pouya's name read as a held capability, and §4 then recorded Q.Arb as
commenced. Q33 answered that the same day, and the premise was wrong: merely commenced. Q33 answered that the same day, and the premise was
wrong twice over — §4 now records Q.Arb as HELD, and even before it did:
ADR designations are voluntary credentials, not licences, and COMMERCIAL ADR designations are voluntary credentials, not licences, and COMMERCIAL
arbitral appointment in Ontario is not gated behind a designation — so the arbitral appointment in Ontario is not gated behind a designation — so the
constraint was always positional, never legal, and Pouya accepts sole, constraint was always positional, never legal, and Pouya accepts sole,
+19 -25
View File
@@ -29,8 +29,11 @@
* 3. `priceRange` — omitted until `/fees/` exists (build step 9). docs/04 * 3. `priceRange` — omitted until `/fees/` exists (build step 9). docs/04
* gates it on that page being real. * gates it on that page being real.
* *
* AND Q.Arb IS NOT IN `hasCredential`. It commenced August 2026 and is not * AND `hasCredential` NOW CARRIES BOTH DESIGNATIONS. It was Q.Med-only until
* held. Q.Med is. That asymmetry is the whole point of the property. * 2026-08-29 because Q.Arb was a commenced pathway and the property means
* *holds*. Q.Arb is held (§4), so it belongs there — and the field is built by
* mapping `CREDENTIALS.designations` rather than indexing it, so a designation
* added to §4 and to that constant cannot be silently omitted here.
*/ */
import { import {
CONTACT, CONTACT,
@@ -55,21 +58,11 @@ export const SERVICE_ID = `${SITE.url}/#practice`;
* counterpart row for a completed arbitration**, so "arbitrator" as a practised * counterpart row for a completed arbitration**, so "arbitrator" as a practised
* role asserted something the register does not hold. * role asserted something the register does not hold.
* *
* AND IT CARRIES THE Q.Arb STAGE. Same finding, and it is the sharper half: * A MACHINE-READABLE CLAIM IS STILL A CLAIM, which is why this description is
* §4 Offerings permits the arbitration offering only while the site states the * audited like visible copy. Every clause traces: Q.Med and Q.Arb [verified], the JD [verified],
* stage of the arc plainly — "neither half may be dropped". The VISIBLE page * engineering practice [verified], Toronto [verified]. It claims no licensure
* satisfied that with the fourth credential slot; this graph asserted * and implies none — D13 bars implication as hard as assertion, and a crawler
* arbitration twice (here and in `serviceType`) and stated the stage nowhere. * summary is a place where an implication travels unedited.
* A machine-readable claim is still a claim.
*
* `hasCredential` stays Q.Med-only regardless — the stage belongs in prose, not
* in a field that means "holds".
*
* Every clause traces: Q.Med [verified], the JD [verified], engineering
* practice [verified], Toronto [verified], the Q.Arb pathway commenced August
* 2026 [verified]. It claims no licensure and implies none — D13 bars
* implication as hard as assertion, and a crawler summary is a place where an
* implication travels unedited.
*/ */
export function personNode( export function personNode(
imageUrl?: string, imageUrl?: string,
@@ -87,21 +80,22 @@ export function personNode(
jobTitle: PRACTICE_JOB_TITLE, jobTitle: PRACTICE_JOB_TITLE,
description: description:
'Mediator in Toronto, accepting commercial arbitration appointments. ' + 'Mediator in Toronto, accepting commercial arbitration appointments. ' +
'Q.Med designation through ADRIC and ADRIO; the Q.Arb pathway commenced ' + 'Q.Med and Q.Arb designations through ADRIC and ADRIO. JD, Bond ' +
'in August 2026. JD, Bond University; practising machine-learning and ' + 'University; practising machine-learning and infrastructure engineer.',
'infrastructure engineer.',
knowsLanguage: ['en', 'fa'], knowsLanguage: ['en', 'fa'],
alumniOf: { '@type': 'CollegeOrUniversity', name: 'Bond University' }, alumniOf: { '@type': 'CollegeOrUniversity', name: 'Bond University' },
// Q.Med only. See the header comment. /* MAPPED, NOT INDEXED. This read `designations[0]` while Q.Arb was a
hasCredential: { pathway; indexing is what would have left Q.Arb out of the graph
silently when §4 changed. */
hasCredential: CREDENTIALS.designations.map((name) => ({
'@type': 'EducationalOccupationalCredential', '@type': 'EducationalOccupationalCredential',
name: CREDENTIALS.designations[0], name,
credentialCategory: 'Professional designation', credentialCategory: 'Professional designation',
recognizedBy: [ recognizedBy: [
{ '@type': 'Organization', name: 'ADR Institute of Canada' }, { '@type': 'Organization', name: 'ADR Institute of Canada' },
{ '@type': 'Organization', name: 'ADR Institute of Ontario' }, { '@type': 'Organization', name: 'ADR Institute of Ontario' },
], ],
}, })),
sameAs: [CONTACT.linkedin], sameAs: [CONTACT.linkedin],
email: `mailto:${CONTACT.email}`, email: `mailto:${CONTACT.email}`,
/* `memberOf` — OPT-IN, AND ONLY `/about/` OPTS IN. Q53, ruled by Pouya /* `memberOf` — OPT-IN, AND ONLY `/about/` OPTS IN. Q53, ruled by Pouya
@@ -211,7 +205,7 @@ export function professionalServiceNode(imageUrl?: string) {
description: description:
'Commercial mediation and arbitration for construction, technology, ' + 'Commercial mediation and arbitration for construction, technology, ' +
'energy, insurance, shareholder and cross-border disputes. Toronto, ' + 'energy, insurance, shareholder and cross-border disputes. Toronto, ' +
'by appointment. Q.Med held; the Q.Arb pathway commenced August 2026.', 'by appointment. Q.Med and Q.Arb designations held.',
provider: { '@id': PERSON_ID }, provider: { '@id': PERSON_ID },
areaServed: [ areaServed: [
{ '@type': 'City', name: 'Toronto' }, { '@type': 'City', name: 'Toronto' },
+74 -28
View File
@@ -47,23 +47,21 @@ export const SITE = {
* licence — and do not imply it either. See AGENTS.md §4 Forbidden. * licence — and do not imply it either. See AGENTS.md §4 Forbidden.
*/ */
export const CREDENTIALS = { export const CREDENTIALS = {
designations: ['Q.Med (ADRIC / ADRIO)'],
inProgress: ['Q.Arb — commenced August 2026'], // [verified 2026-08-26]
/** /**
* "Chartered Med-Arbitrator" — ADRIO's own term, and ADRIC's navigation label * BOTH ARE HELD. Q.Arb joined this list on 2026-08-29 (AGENTS.md §4,
* too (docs/reference/adrio-designations.md; docs/reference/adric-rules.md * `[verified 2026-08-29 — Pouya]`); it was `inProgress` before that.
* Finding 3, which corroborates it from a second body). Never
* "Mediator-Arbitrator".
* *
* `GOAL_NAME` IS THE STRING TO RENDER. This designation's name was wrong on a * ⚠️ NO ACQUISITION DATE IS PUBLISHED for either, and this file does not hold
* public page for the life of the file, and the reason it survived four review * one. §4 is the only record of when Q.Arb was obtained — a second copy here
* passes is that it existed in several hand-typed copies rather than one * is a copy that goes stale, and §4 currently carries an OPEN conflict on
* constant. `/arbitration/` and `/med-arb/` (step 4) render `GOAL_NAME`; * that date (Q55). Do not resolve it by writing a date into this file.
* `/about/`'s arc still hand-types it, which is the remaining copy. *
* There is NO `inProgress` KEY, and its absence is the mechanism. Nothing is
* in progress, and a key that exists is a key a page will eventually render —
* deleting it makes reaching for one a build error rather than a copy defect.
* Same pattern as the deleted `class` prop.
*/ */
goal: 'C.Med-Arb (Chartered Med-Arbitrator)', designations: ['Q.Med (ADRIC / ADRIO)', 'Q.Arb (ADRIC / ADRIO)'],
/** Just the expansion, for prose. §11 Glossary is the authority for it. */
goalName: 'Chartered Med-Arbitrator',
education: ['JD, Bond University'], education: ['JD, Bond University'],
certifications: [ certifications: [
'Kompass Arbitration Certificate Program', 'Kompass Arbitration Certificate Program',
@@ -365,6 +363,22 @@ export const CONDUCT_UNDERTAKINGS = {
'than left open.', 'than left open.',
} as const; // [verified 2026-08-29 — Pouya, Q54] } as const; // [verified 2026-08-29 — Pouya, Q54]
/**
* THE HELD-DESIGNATIONS SENTENCE, RENDERED AND NEVER RETYPED.
*
* `/about/` and `/med-arb/` both make this claim in prose, and in the change
* set that introduced both they had ALREADY diverged — "the Q.Med and Q.Arb
* designations through" versus "Q.Med and Q.Arb through". Two hand-typed forms
* of the highest-stakes claim on the site is the shape `ASYMMETRY_LINE` exists
* to prevent. Found by `adversarial-reviewer` 2026-08-30.
*
* It is a CLAUSE, not a sentence, because the two pages continue it
* differently. Each supplies its own tail; neither restates the head.
*/
export const DESIGNATIONS_HELD_LINE =
'I hold Q.Med and Q.Arb through the ADR Institute of Canada and the ADR ' +
'Institute of Ontario';
/** The three credential slots. Never matter counts — AGENTS.md §4. */ /** The three credential slots. Never matter counts — AGENTS.md §4. */
export const CREDENTIAL_ROW = [ export const CREDENTIAL_ROW = [
{ value: 'Q.Med', label: 'ADRIC / ADRIO designation' }, { value: 'Q.Med', label: 'ADRIC / ADRIO designation' },
@@ -392,24 +406,22 @@ export const CREDENTIAL_ROW = [
* The FOURTH credential slot — separate on purpose, so a three-slot layout * The FOURTH credential slot — separate on purpose, so a three-slot layout
* cannot be handed four by accident and a page has to opt in. * cannot be handed four by accident and a page has to opt in.
* *
* docs/03: 'Fourth slot where the layout has one: Q.Arb — commenced August * ⚠️ IT IS NO LONGER REQUIRED ANYWHERE. Until 2026-08-29 this slot carried
* 2026. Use that wording, not "in progress"' — the weaker form drifts toward * `Q.Arb / Commenced August 2026` and §4's paired-disclosure condition made it
* 'nearly complete', which §4 Forbidden bars outright. * mandatory on any page offering arbitration. Q.Arb is held, that condition is
* dissolved, and the slot reverts to what §4's substitution principle always
* wanted it for: a fourth credential where the layout has room.
* *
* REQUIRED on any page that offers arbitration, not decorative. §4 Offerings * The label is the ISSUING BODIES, matching `designations` above — not a date.
* carries a paired-disclosure condition: the site may make the offering only * §4 records July 2026 and keeps it off the site.
* while 'stating the second plainly', and 'neither half may be dropped'. The
* footer's designation strip satisfies it site-wide; a page whose opening
* sentence says 'arbitrator' should not make the reader scroll to the footer
* for the stage.
*
* The em-dash in docs/03's string is carried by the layout (value over label),
* not by the text. Same wording, same pairing.
*/ */
export const CREDENTIAL_ROW_ARB = { export const CREDENTIAL_ROW_ARB = {
value: 'Q.Arb', value: 'Q.Arb',
label: 'Commenced August 2026', /* IDENTICAL TO `CREDENTIAL_ROW[0].label`. These two render side by side on `/`
} as const; // [verified 2026-08-26 — Pouya] and `/arbitration/`; 'ADRIC / ADRIO' beside 'ADRIC / ADRIO designation'
reads as a distinction that is not being drawn. */
label: 'ADRIC / ADRIO designation',
} as const; // [verified 2026-08-29 — Pouya]
/** Analytics: privacy-first and cookieless (D15). No GA4, no consent banner. */ /** Analytics: privacy-first and cookieless (D15). No GA4, no consent banner. */
export const ANALYTICS = { export const ANALYTICS = {
@@ -671,6 +683,40 @@ export type _MembershipParity = _AssertTrue<
: false : false
>; >;
/**
* ⚠️ THE VISIBLE CREDENTIAL ROW HAND-TYPES THE DESIGNATIONS, AND THIS PINS IT.
*
* `CREDENTIALS.designations` feeds the footer strip, `/about/`'s designation
* line, `/about/`'s Designations list and `hasCredential`. `CREDENTIAL_ROW[0]`
* and `CREDENTIAL_ROW_ARB` carry the same two facts decomposed into
* `value`/`label` for `/` and `/arbitration/`, and nothing connected them —
* so a third designation added to §4 and to `designations` would reach four
* surfaces and silently miss the credential row.
*
* That was survivable while the fourth slot held a STAGE (`Commenced August
* 2026`), which was an independent fact. On 2026-08-29 it became a duplicate of
* `designations[1]`, which is what made the two constants drift-capable.
* `adversarial-reviewer` caught that the map-not-index fix celebrated in
* `schema.ts` and `docs/04` left this copy untouched.
*
* A type-level assertion rather than a refactor: the row's `value`/`label`
* shape is a LAYOUT decision (value over label, two-up on a phone) and
* collapsing it into the prose strings would be the wrong fix. This fails
* `npm run check` with a named type the moment the two disagree.
*/
type _DesignationValue<S> = S extends `${infer V} (${string})` ? V : never;
export type _DesignationRowParity = _AssertTrue<
_DesignationValue<
(typeof CREDENTIALS.designations)[0]
> extends (typeof CREDENTIAL_ROW)[0]['value']
? _DesignationValue<
(typeof CREDENTIALS.designations)[1]
> extends (typeof CREDENTIAL_ROW_ARB)['value']
? true
: false
: false
>;
/** /**
* The five process steps. **HERE, NOT IN THE PAGE**, for the reason written * The five process steps. **HERE, NOT IN THE PAGE**, for the reason written
* against PRACTICE_AREAS above and applied by `adversarial-reviewer` 2026-08-27: * against PRACTICE_AREAS above and applied by `adversarial-reviewer` 2026-08-27:
+85 -247
View File
@@ -11,11 +11,19 @@
* 1 Portrait, name, designation line → the hero * 1 Portrait, name, designation line → the hero
* 2 Narrative biography, 400600 words → §Background * 2 Narrative biography, 400600 words → §Background
* 3 Credentials, structured → §Credentials * 3 Credentials, structured → §Credentials
* 4 The credentialing arc → §The arc * 4 The credentialing arc → REMOVED 2026-08-29, see below
* 5 Languages and cross-cultural → §Language * 5 Languages and cross-cultural → §Language
* 6 Speaking and publications → OMITTED, per the spec itself * 6 Speaking and publications → OMITTED, per the spec itself
* 7 Person JSON-LD + PDF bio → JSON-LD ships; the PDF does not * 7 Person JSON-LD + PDF bio → JSON-LD ships; the PDF does not
* *
* ⚠️ ITEM 4 IS GONE, AND IT WAS DELETED RATHER THAN REWRITTEN. Pouya, 2026-08-29:
* *"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 section had no subject left — three pills reading Held,
* Held, and nothing. What it used to carry now sits in item 3, which is a list
* of held things and was always the right shape for it. **Do not restore it
* from docs/01's seven-item outline**; that item is struck there too.
*
* ITEM 6 IS OMITTED ON THE SPEC'S OWN INSTRUCTION, not by oversight: "Omit the * ITEM 6 IS OMITTED ON THE SPEC'S OWN INSTRUCTION, not by oversight: "Omit the
* section entirely until there is something in it. An empty 'Speaking' heading * section entirely until there is something in it. An empty 'Speaking' heading
* is worse than no heading." Nothing to list. * is worse than no heading." Nothing to list.
@@ -69,7 +77,6 @@ import { Picture, getImage } from 'astro:assets';
import BaseLayout from '../layouts/BaseLayout.astro'; import BaseLayout from '../layouts/BaseLayout.astro';
import ContactBand from '../components/ContactBand.astro'; import ContactBand from '../components/ContactBand.astro';
import Eyebrow from '../components/Eyebrow.astro'; import Eyebrow from '../components/Eyebrow.astro';
import Pill from '../components/Pill.astro';
import SectionHeading from '../components/SectionHeading.astro'; import SectionHeading from '../components/SectionHeading.astro';
import portrait from '../assets/pouya-lajevardi.jpg'; import portrait from '../assets/pouya-lajevardi.jpg';
import ogDefault from '../assets/og-portrait.jpg'; import ogDefault from '../assets/og-portrait.jpg';
@@ -77,7 +84,9 @@ import { aboutGraph } from '../data/schema';
import { import {
ASYMMETRY_LINE, ASYMMETRY_LINE,
CREDENTIALS, CREDENTIALS,
DESIGNATIONS_HELD_LINE,
PORTRAIT, PORTRAIT,
PRACTICE_AREAS,
ROLE, ROLE,
SITE, SITE,
} from '../data/site'; } from '../data/site';
@@ -129,141 +138,47 @@ const ldImage = await getImage({
}); });
const graph = aboutGraph(new URL(ldImage.src, Astro.site).href); const graph = aboutGraph(new URL(ldImage.src, Astro.site).href);
/* THE BIOGRAPHY ENUMERATES THE PRACTICE AREAS IN PROSE, which means it is the
one place on the site that names them without rendering `PRACTICE_AREAS`.
Card labels ("Insurance, SABS & LAT") do not read as prose, and a joined list
of them in a paragraph was worse than the duplication. So the count is
asserted instead: add a seventh area and this throws, which is the prompt to
rewrite the sentence. Same mechanism as the ground-alternation check in
`practice/[slug].astro`. */
/* `: number`, NOT the inferred literal. `PRACTICE_AREAS` is `as const`, so
`.length` is the literal type `6`; with `AREAS_NAMED_IN_BIO` also literal `6`,
adding a seventh area makes the comparison `7 !== 6` — non-overlapping
literals — and `astro check` fails first with `ts(2367) This comparison
appears to be unintentional`, which reads like lint noise. Both deploy paths
run `npm run check` BEFORE the build, so the implementer would never see the
message below, and the message is the whole point of the guard. Widening the
left side keeps the comparison live at runtime. Measured by
`adversarial-reviewer` 2026-08-30. */
const AREAS_NAMED_IN_BIO: number = 6;
if (PRACTICE_AREAS.length !== AREAS_NAMED_IN_BIO) {
throw new Error(
`/about/'s biography names ${AREAS_NAMED_IN_BIO} practice areas in prose, ` +
`but PRACTICE_AREAS now has ${PRACTICE_AREAS.length}. Rewrite the ` +
`"I accept appointments in six areas" paragraph, then update this count.`,
);
}
/** /**
* The designation line — docs/01 item 1. Assembled from constants so it cannot * The designation line — docs/01 item 1. Assembled from constants so it cannot
* drift from §4, and ordered held-first. * drift from §4.
* *
* Q.Arb IS NOT IN IT, deliberately. It is not held (§4: "Describe as newly * BOTH DESIGNATIONS, because a designation line is a list of things held and
* commenced, never as held or nearing completion"), and a designation line is * as of 2026-08-29 Q.Arb is one of them. It was excluded while it was a stage.
* precisely a list of things held. The arc section states the stage plainly, * The issuing bodies repeat across the two entries; that is what the strings in
* which is what §4's paired-disclosure condition requires — this page offers * `CREDENTIALS.designations` say, and spelling them once across a joined pair
* arbitration, so the stage appears on this page and not only in the footer. * would be this file re-typing §4 rather than rendering it.
*/ */
const designationLine = [ const designationLine = [
'Mediator', 'Mediator',
CREDENTIALS.designations[0], ...CREDENTIALS.designations,
CREDENTIALS.education[0], CREDENTIALS.education[0],
]; ];
/**
* The credentialing arc — docs/01 item 4, and docs/03: "the credentialing
* pathway from Q.Med through Q.Arb to C.Med-Arb is stated openly, **with Q.Arb
* described as commenced August 2026** and never as 'in progress', which is
* looser than §4 and is barred by docs/06's cutover checklist. The brief treats
* that arc as part of the story rather than something to obscure."
*
* ⚠️ THAT QUOTATION WAS STALE AND THE STALE HALF WAS THE BARRED PHRASE. It
* quoted docs/03's pre-2026-08-28 text, which ended "...stated openly as in
* progress" — so THIS FILE cited docs/03 as REQUIRING the phrase six lines
* above citing it as BARRING the phrase. Found by `adversarial-reviewer`.
*
* **And the Q.Arb-wording sweep missed it because the phrase was line-wrapped**
* as `as in\n * progress`: a grep for "in progress" on one line returns
* nothing. Same defect CLAUDE.md already records for a docs/03 phrase that
* wrapped behind a blockquote marker. Sweep the wrapped form too.
*
* `state` is the load-bearing column. "Commenced August 2026" is §4's exact
* wording and the ONLY permitted wording — docs/03: not "in progress", because
* the weaker form drifts toward "nearly complete", which §4 Forbidden bars
* outright.
*/
/*
* FIVE CLAIMS CAME OUT OF THIS BLOCK, and the first was the worst thing in the
* step-3 diff. BOTH review agents found it independently, which is the strongest
* signal this loop produces.
*
* 1. ⚠️ "arbitral appointments are not gated behind it, which is why I accept
* them now" — **the false universal Q39 struck, on a public page.**
* Unscoped ("arbitral", not commercial), asserted as flat fact in the first
* person, and it publishes a proposition of Ontario law that §4 holds only
* in scoped form and deliberately does NOT stamp `[verified]`. Family
* arbitration is an arbitral appointment and it IS gated
* (`docs/reference/ontario-family-arbitration-training.md`). Q39 swept
* three instances of this universal on 2026-08-27; this was the fourth and
* the first outside a comment. §4 requires the STAGE be stated — never the
* register's gating rationale. Deleted rather than rescoped: this page has
* no business carrying the argument at all.
* 2. "on the same institutional pathway" and
* 3. "Three designations on one institutional pathway" (the section lede) —
* §4 attaches ADRIC / ADRIO to **Q.Med only**. Neither the Q.Arb row nor
* the C.Med-Arb row names a body.
* 4. "The senior hybrid designation" — a ranking claim about a third party's
* credential structure, with no row and no source.
* 5. The expansions — "Qualified Mediator", "Qualified Arbitrator",
* "Chartered Mediator-Arbitrator". Flagged as being in §11 Glossary but
* not in §4 Verified. **The third was also simply WRONG** — ADRIO's term
* is "Chartered Med-Arbitrator" — but that is not what this finding
* caught, and no review pass caught it either: four passes read the string
* and checked only whether it was *sourced*. Pouya caught it on
* 2026-08-28. The wrong form is quoted here because it is what was
* flagged; it is corrected in the arc below and swept from the repo.
*
* ⚠️ ITEM 5 WAS REMOVED AND IS NOW RESTORED, AND IT IS THE ONE PLACE THIS
* SESSION WENT AGAINST A REVIEW FINDING. The reason is a SECOND finding, from
* the next audit pass, and it is a consistency point rather than a claim point:
* this page also publishes "Provincial Offences Act", "Statutory Accident
* Benefits Schedule" (as SABS) and "the ADR Institute of Canada and the ADR
* Institute of Ontario" — every one of them a §11 Glossary expansion, on exactly
* the ground the designation names were struck. *"One standard or the other."*
*
* ✅ **RATIFIED BY POUYA 2026-08-28 (Q46(b)), AND NO LONGER RESTING ON §11
* ASSERTING ITS OWN CONTENT.** The standard: **§11 Glossary is the source for
* DEFINITIONAL expansions** — what an abbreviation stands for — while §4
* Verified remains the only source for claims ABOUT POUYA. Expanding `Q.Med`
* says nothing about him; "he holds it" is the claim, and that has a row. His
* words: *"the same line the Offerings ruling drew"*, and *"You were right that
* one standard or the other had to apply."*
*
* The alternative standard would have required stripping POA, SABS and the
* institute names from the prose and `recognizedBy` from the JSON-LD — making
* the page materially worse for a reader who does not already know the acronyms,
* in exchange for no reduction in risk.
*
* **R14 IS NOW SATISFIED, which it was not when this comment was first written.**
* Pouya's ruling attached a condition — fetch and commit the source — and
* `docs/reference/adrio-designations.md` is it: all five expansions in ADRIO's
* own words, four independent fetches, reproducible sha256. The earlier attempt
* had failed on the obvious URL (`adric.ca/designations/` redirects to
* `/designations-cee/` and serves **zero** occurrences of "Q.Med", "Qualified
* Mediator" or "Chartered Mediator" in 114,985 bytes — navigation only, body
* assembled client-side), and that failure is why this rested on §11 alone for
* one day. `adr-ontario.ca` serves them server-side. **The lesson is that one
* dead URL is not a sourcing dead end** — the national body's page was
* client-rendered and the provincial affiliate's was not.
*/
const ARC = [
{
name: 'Q.Med',
state: 'Held',
/* NOT "the designation I mediate under". That imported a PERMISSION framing
onto what §4 records as a voluntary credential, in a register that says
no designation is required to be appointed as a mediator — the
credential-as-licence slip §4 says produced a wrong answer twice. */
body:
'Qualified Mediator, held through the ADR Institute of Canada and the ' +
'ADR Institute of Ontario. The designation I hold as a mediator today.',
},
{
name: 'Q.Arb',
state: 'Commenced August 2026',
body:
'Qualified Arbitrator. Newly commenced — not held, and not nearing ' +
'completion.',
},
{
name: 'C.Med-Arb',
state: 'The endpoint',
/* "Chartered Med-Arbitrator", NOT "Chartered Mediator-Arbitrator". The
second form shipped in this string until 2026-08-28 and was in
dist/about/index.html; ADRIO's own term is the first
(docs/reference/adrio-designations.md, Finding 2). Pouya's correction,
and it was his own error carried from the strategy brief. */
body:
'Chartered Med-Arbitrator. The designation this practice is built ' +
'toward.',
},
];
/** /**
* The structured credentials — docs/01 item 3: "designations, education, * The structured credentials — docs/01 item 3: "designations, education,
* certifications, memberships. Every line from AGENTS.md §4 Verified." * certifications, memberships. Every line from AGENTS.md §4 Verified."
@@ -331,8 +246,8 @@ const CREDENTIAL_GROUPS = [
--- ---
<BaseLayout <BaseLayout
title="About · Pouya Lajevardi · Mediator, Q.Med · Toronto" title="About · Pouya Lajevardi · Mediator, Q.Med, Q.Arb · Toronto"
description="Pouya Lajevardi, JD, Q.Med — a Toronto mediator who also practises as a machine-learning and infrastructure engineer. Credentials, background, designations." description="Pouya Lajevardi, JD, Q.Med, Q.Arb — a Toronto mediator who also practises as a machine-learning and infrastructure engineer. Credentials and background."
ogType="profile" ogType="profile"
imageAlt={PORTRAIT.alt} imageAlt={PORTRAIT.alt}
jsonLd={graph} jsonLd={graph}
@@ -387,15 +302,24 @@ const CREDENTIAL_GROUPS = [
EXPLICITLY INTERIM — AGENTS.md R1, surfaced again 2026-08-28 EXPLICITLY INTERIM — AGENTS.md R1, surfaced again 2026-08-28
precisely because this page is where the framing now does its precisely because this page is where the framing now does its
heaviest work. */ heaviest work.
"I MEDIATE COMMERCIAL DISPUTES" STAYS, and a round-2 finding against
it was declined rather than missed. The objection: the same ground
that struck "The matters I take are commercial" from the biography
should reach this sentence too. It does not. **That one was a
universal** — it said nothing he takes is non-commercial, which is an
exclusion §4 has no row for. **This one is existential**: he mediates
commercial disputes, which §4 Offerings' mediation row supports and
which excludes nothing. A narrower claim than the row grants is
safe; a claim the row does not reach is not. */
} }
<p class="hero-lede"> <p class="hero-lede">
I am {ROLE.title} at {ROLE.at}, with {ROLE.litigationLine} across{' '} I am {ROLE.title} at {ROLE.at}, with {ROLE.litigationLine} across{' '}
{ROLE.litigationAreas.slice(0, -1).join(', ')} and{' '} {ROLE.litigationAreas.slice(0, -1).join(', ')} and{' '}
{ROLE.litigationAreas.at(-1)}. I mediate commercial disputes and I {ROLE.litigationAreas.at(-1)}. I mediate commercial disputes and I
accept arbitration appointments in commercial matters; the Q.Arb accept arbitration appointments in commercial matters. I also work as
pathway commenced in August 2026. I also work as a machine-learning a machine-learning and infrastructure engineer.
and infrastructure engineer.
</p> </p>
</div> </div>
@@ -519,9 +443,8 @@ const CREDENTIAL_GROUPS = [
EVERY CLAIM TRACES TO §4 Verified: the JD, the boutique role, active EVERY CLAIM TRACES TO §4 Verified: the JD, the boutique role, active
litigation exposure and its four matter types, Q.Med, multiple litigation exposure and its four matter types, Q.Med, multiple
completed sole mediations, arbitration appointments (§4 Offerings, completed sole mediations, arbitration appointments (§4 Offerings,
scoped to commercial), the Q.Arb pathway commenced August 2026, scoped to commercial), Q.Arb, engineering practice, SML Company Ltd,
C.Med-Arb as the goal, engineering practice, SML Company Ltd, Farsi, Farsi, Iranian-Canadian. Nothing here asserts or implies licensure. */
Iranian-Canadian. Nothing here asserts or implies licensure. */
} }
<div class="prose bio-prose"> <div class="prose bio-prose">
<p> <p>
@@ -554,21 +477,18 @@ const CREDENTIAL_GROUPS = [
drift. */ drift. */
} }
<p>{ASYMMETRY_LINE}</p> <p>{ASYMMETRY_LINE}</p>
{
/* A SECOND PARAGRAPH HERE WAS CANDOUR ABOUT AN INCOMPLETE CREDENTIAL
— "I would rather say where I am on the arc". Q.Arb is held; do not
write another. `check:claims` q-arb-as-a-stage catches the form. */
}
<p> <p>
Mediation is where they meet. I hold the Q.Med designation through the Mediation is where they meet. {DESIGNATIONS_HELD_LINE}, and I have
ADR Institute of Canada and the ADR Institute of Ontario, and I have
completed multiple sole mediations. I accept arbitration appointments completed multiple sole mediations. I accept arbitration appointments
in commercial matters — as sole arbitrator, as a party-appointed in commercial matters — as sole arbitrator, as a party-appointed
arbitrator, and in co-arbitration. Where a matter turns on a technical arbitrator, and in co-arbitration. Where a matter turns on a technical
question, I read the technical material myself. question, I read the technical material myself.
</p> </p>
<p>
My Q.Arb pathway commenced in August 2026, and C.Med-Arb is the
designation I am working toward. I state the stage openly because an
appointing body will establish it anyway, and because a reader can do
more with the fact than with a hedge. I would rather say where I am on
the arc than leave it to be inferred.
</p>
{ {
/* BOTH ADDITIONS TO THIS SENTENCE CAME BACK OUT. §4 verifies exactly /* BOTH ADDITIONS TO THIS SENTENCE CAME BACK OUT. §4 verifies exactly
one relation — *"Operator of SML Company Ltd. alongside the one relation — *"Operator of SML Company Ltd. alongside the
@@ -596,6 +516,25 @@ const CREDENTIAL_GROUPS = [
`worksFor` is withheld. */ `worksFor` is withheld. */
} }
<p>I run SML Company Ltd alongside the practice.</p> <p>I run SML Company Ltd alongside the practice.</p>
{
/* ⚠️ NO SCOPE CLAIM AND NO COVERAGE CLAIM. §4 has no row for the
subject matter of his ADR work, and `/practice/insurance/` ships
"Disputes between an insured person and an insurer" — an
individual-versus-insurer SABS dispute is not commercial, so this
paragraph must not declare the six areas a commercial class.
What Q35 grants is the frame used here: an area may be named where
he can competently accept an appointment, framed as positioning
rather than claimed history. "I accept appointments in" is that
frame; "the subject matter runs across" is not, because §Background
is where a reader defaults to reading history. */
}
<p>
I accept appointments in six areas: construction and infrastructure;
technology, AI and data; energy and the grid; insurance and accident
benefits; shareholder and family-business disputes; and cross-border
matters. What those have in common is a record somebody has to read
closely, and a dispute that turns on what is actually in it.
</p>
<p> <p>
I have also completed the Kompass Arbitration Certificate Program and I have also completed the Kompass Arbitration Certificate Program and
the Stitt Feld Handy negotiation and ADR workshop sequence. Neither is the Stitt Feld Handy negotiation and ADR workshop sequence. Neither is
@@ -652,62 +591,6 @@ const CREDENTIAL_GROUPS = [
</div> </div>
</section> </section>
{/* ---- 4. The credentialing arc -------------------------------------- */}
{
/* SECTION 4 BEFORE SECTION 3, and the reorder is deliberate. docs/01 lists
credentials (item 3) then the arc (item 4). The arc is the part a reader
is likely to have a question about — it is the thing this practice is
candid about that others are not — and burying it under a scannable list
of things already held reads as a footnote to them. §4's paired-disclosure
condition also wants the stage stated where the offering is made, and the
offering is made in the narrative directly above. The list follows. */
}
<section class="section section-inverse arc-section reveal">
<div class="wrap">
<div class="section-head">
<SectionHeading
eyebrow="The arc"
level={2}
lede="Three designations. Two of them are ahead of me, and saying so is the point."
>
<span slot="heading">Where the credentials sit.</span>
</SectionHeading>
</div>
{
/* `role="list"` RESTORED, AND THE REASON I REMOVED IT WAS WRONG ABOUT
ARIA. The comment here claimed that on an <ol> the role "re-announces
an ordered list as an unordered one". It does not: **both <ul> and <ol>
map to the `list` role**, so `role="list"` on an <ol> is a no-op for
ordering, not a downgrade. What it is actually for is the WebKit
heuristic that strips list semantics from a list with
`list-style-type: none` — and `.arc` sets exactly that.
It also left the two <ol>s on this two-page site DISAGREEING, with
`/`'s `.process-strip` keeping the role. That is the state that gets
copied seventeen times.
Not verified here: whether WebKit's heuristic covers <ol> as well as
<ul>. There is no Safari instrument in this environment, so the role
stays on the precautionary side, which costs nothing. Chrome's AX tree
exposes `.arc` as `list` with three `listitem` children either way. */
}
<ol class="arc" role="list">
{
ARC.map((stage) => (
<li class="arc-item">
<h3 class="arc-name">{stage.name}</h3>
<p class="arc-state">
<Pill>{stage.state}</Pill>
</p>
<p class="arc-body">{stage.body}</p>
</li>
))
}
</ol>
</div>
</section>
{/* ---- 3. Credentials, structured ------------------------------------ */} {/* ---- 3. Credentials, structured ------------------------------------ */}
<section class="section section-alt creds reveal"> <section class="section section-alt creds reveal">
<div class="wrap"> <div class="wrap">
@@ -955,51 +838,6 @@ const CREDENTIAL_GROUPS = [
page. "Provincial Offences Act" is set in roman. If a statute name ever page. "Provincial Offences Act" is set in roman. If a statute name ever
needs italics here, load a face for it first. */ needs italics here, load a face for it first. */
/* --- 4. The arc ------------------------------------------------------ */
.arc {
display: grid;
/* `min(18rem, 100%)` rather than a bare 18rem floor: a bare floor cannot
shrink below itself and overflows at a large default font size. The
credential row on `/` is the measured instance of that mistake. */
grid-template-columns: repeat(auto-fit, minmax(min(18rem, 100%), 1fr));
gap: var(--space-6);
/* NO `padding: 0` OR `list-style: none` HERE — `global.css`'s
`ul[role='list'], ol[role='list']` reset already supplies both, and this
block was re-implementing it by hand. Two rules for one job, and the
hand-written copy is the one that drifts. `margin: 0` also comes from the
global `* { margin: 0 }` reset. */
}
.arc-item {
display: flex;
flex-direction: column;
gap: var(--space-3);
padding-block-start: var(--space-4);
border-block-start: 1px solid var(--line-dark);
}
/* <h3>, not <p>. These are the headings of the three arc items and they set
at --text-2xl serif, so marking them up as paragraphs was the fake-heading
pattern: a screen-reader user got no heading navigation for the one section
on this page a reader is most likely to jump to. `ProcessStep` on `/` uses
<h3> for exactly this shape. Outline stays h1 -> h2 -> h3 with no skips. */
.arc-name {
font-family: var(--font-serif);
font-size: var(--text-2xl);
line-height: var(--leading-tight);
}
.arc-state {
margin: 0;
}
.arc-body {
margin: 0;
font-size: var(--text-base);
line-height: var(--leading-body);
/* NOT --text-secondary. On an inverse ground `--ink-soft` measures ~1.4:1
against `--ink` — the inherited `--text-inverse` (cream, 16.81:1) is what
carries body copy here, so the colour is deliberately left alone rather
than set to a token that is correct only on cream. */
}
/* --- 3. Credentials -------------------------------------------------- */ /* --- 3. Credentials -------------------------------------------------- */
.cred-grid { .cred-grid {
+30 -100
View File
@@ -2,25 +2,26 @@
/** /**
* `/arbitration/` — build step 4. Spec: docs/01 §`/arbitration/`, docs/03. * `/arbitration/` — build step 4. Spec: docs/01 §`/arbitration/`, docs/03.
* *
* ⚠️ THIS PAGE CARRIES §4's PAIRED-DISCLOSURE CONDITION, AND IT IS A CONDITION * ⚠️ THE PAIRED-DISCLOSURE CONDITION IS GONE, AND SO IS THE SECTION IT
* ON THE OFFERING ITSELF, NOT A DISCLAIMER BOLTED TO IT. Both halves ship or * REQUIRED. Until 2026-08-29 this page was built around §4's condition that the
* neither does: * arbitration offering ship beside the STAGE of the Q.Arb pathway — an h1
* reading "Available now, and open about the stage", and a whole section headed
* "Where I am in the arc". Q.Arb is held; the condition dissolved with its
* subject; the section was deleted rather than rewritten.
* *
* 1. All three forms are offered NOW — sole, party-appointed, co-arbitration * ⚠️ AND DO NOT REPRODUCE IT FROM MEMORY. The characteristic failure now is a
* — in commercial matters. §4 Offerings rows all three. * page that offers arbitration and then reaches for something qualifying to
* 2. The Q.Arb PATHWAY commenced August 2026, with C.Med-Arb as the endpoint. * say. There is nothing to qualify: §4 Offerings rows all three forms, the
* * designations are held, and the hero's `CredentialRow` names them. What
* "Pathway", never "designation": a designation that "commenced in August 2026" * remains of the old framing is the commercial scope — which was never part of
* reads as held since then, which §4 Forbidden bars. Pouya's instruction is that * the condition and is Pouya's own choice (Q39).
* being open about the stage is the differentiator — so it is stated plainly and
* high on the page, not hedged and not buried.
* *
* ⚠️ AND NOTHING HERE MAY SAY OR IMPLY THAT ARBITRATION IS UNGATED IN ONTARIO. * ⚠️ AND NOTHING HERE MAY SAY OR IMPLY THAT ARBITRATION IS UNGATED IN ONTARIO.
* Q39's struck universal — "anyone may be appointed an arbitrator in Ontario; * Q39's struck universal — "anyone may be appointed an arbitrator in Ontario;
* nothing in law gates the role behind a designation" — was FALSE as a * nothing in law gates the role behind a designation" — was FALSE as a
* universal, has been swept four times, and reached a public page once. The * universal, has been swept four times, and reached a public page once. The
* page states what is offered and where the credentialing stands. It makes no * page states what is offered. It makes no claim about what the law requires of
* claim about what the law requires of anyone. * anyone.
*/ */
import BaseLayout from '../layouts/BaseLayout.astro'; import BaseLayout from '../layouts/BaseLayout.astro';
import Button from '../components/Button.astro'; import Button from '../components/Button.astro';
@@ -28,7 +29,6 @@ import ContactBand from '../components/ContactBand.astro';
import DefinitionGrid from '../components/DefinitionGrid.astro'; import DefinitionGrid from '../components/DefinitionGrid.astro';
import CredentialRow from '../components/CredentialRow.astro'; import CredentialRow from '../components/CredentialRow.astro';
import Eyebrow from '../components/Eyebrow.astro'; import Eyebrow from '../components/Eyebrow.astro';
import Pill from '../components/Pill.astro';
import SectionHeading from '../components/SectionHeading.astro'; import SectionHeading from '../components/SectionHeading.astro';
import Undertaking from '../components/Undertaking.astro'; import Undertaking from '../components/Undertaking.astro';
import { getImage } from 'astro:assets'; import { getImage } from 'astro:assets';
@@ -36,7 +36,6 @@ import ogDefault from '../assets/og-portrait.jpg';
import { serviceGraph } from '../data/schema'; import { serviceGraph } from '../data/schema';
import { import {
CONDUCT_UNDERTAKINGS, CONDUCT_UNDERTAKINGS,
CREDENTIALS,
CREDENTIAL_ROW, CREDENTIAL_ROW,
CREDENTIAL_ROW_ARB, CREDENTIAL_ROW_ARB,
} from '../data/site'; } from '../data/site';
@@ -94,19 +93,18 @@ const TRACKS = [
<BaseLayout <BaseLayout
title="Commercial Arbitration · Pouya Lajevardi · Toronto" title="Commercial Arbitration · Pouya Lajevardi · Toronto"
description="Sole, party-appointed and co-arbitration appointments in commercial matters, Toronto. Tracks, rules and awards — and where the Q.Arb pathway stands." description="Sole, party-appointed and co-arbitration appointments in commercial matters, Toronto. Tracks, rules, and how an award is written and when it is due."
jsonLd={graph} jsonLd={graph}
> >
{/* ---- 1. Hero — and the paired disclosure starts here ---------------- */} {/* ---- 1. Hero -------------------------------------------------------- */}
<section class="section hero"> <section class="section hero">
<div class="wrap"> <div class="wrap">
<Eyebrow dot>Arbitration</Eyebrow> <Eyebrow dot>Arbitration</Eyebrow>
<h1 class="display hero-h">Available now, and open about the stage.</h1> <h1 class="display hero-h">Sole, party-appointed, co-arbitration.</h1>
<p class="hero-lede"> <p class="hero-lede">
I accept sole, party-appointed and co-arbitration appointments in I accept all three in commercial matters. This page covers how much
commercial matters. The Q.Arb pathway commenced in August 2026; process the dispute needs, whose rules it runs under, and how the award
C.Med-Arb is the endpoint. Both are true at once, and they belong gets written.
together rather than one of them surfacing later.
</p> </p>
<div class="hero-creds"> <div class="hero-creds">
<CredentialRow slots={[...CREDENTIAL_ROW, CREDENTIAL_ROW_ARB]} /> <CredentialRow slots={[...CREDENTIAL_ROW, CREDENTIAL_ROW_ARB]} />
@@ -114,56 +112,15 @@ const TRACKS = [
</div> </div>
</section> </section>
{/* ---- 2. The credentialing stage, on its own ------------------------- */} {/* ---- 2. Appointments ------------------------------------------------ */}
{ {
/* §4 Offerings: "neither half may be dropped". The offering is in the hero; /* INVERSE, and it inherited the ground rather than choosing it. The deleted
this is the other half, given its own section rather than a footnote, credentialing-stage section was this page's only `section-inverse`; left
because Pouya's instruction is that the openness IS the differentiator. */ cream, this section would have sat cream-on-cream against the hero and
rendered as one doubled block — the defect `/practice/[slug].astro` now
throws on. */
} }
<section class="section section-inverse reveal"> <section class="section section-inverse reveal">
<div class="wrap">
<div class="section-head">
<SectionHeading eyebrow="Where I am in the arc" level={2}>
<span slot="heading"
>Stated plainly rather than discovered later.</span
>
</SectionHeading>
</div>
<ol class="grid-autofit stage" role="list">
<li>
<Pill>Held</Pill>
<h3 class="stage-name">Q.Med</h3>
<p class="stage-body">
Qualified Mediator, through the ADR Institute of Canada and the ADR
Institute of Ontario.
</p>
</li>
<li>
<Pill>Commenced August 2026</Pill>
<h3 class="stage-name">Q.Arb</h3>
<p class="stage-body">
Qualified Arbitrator. Newly commenced — not held, and not nearing
completion.
</p>
</li>
<li>
<Pill>The endpoint</Pill>
<h3 class="stage-name">C.Med-Arb</h3>
<p class="stage-body">
{CREDENTIALS.goalName}. The designation this practice is built
toward.
</p>
</li>
</ol>
<p class="stage-note">
If the stage of the arc bears on an appointment decision, it should bear
on it before the appointment and not after.
</p>
</div>
</section>
{/* ---- 3. Appointments ------------------------------------------------ */}
<section class="section reveal">
<div class="wrap"> <div class="wrap">
<div class="section-head"> <div class="section-head">
<SectionHeading <SectionHeading
@@ -178,7 +135,7 @@ const TRACKS = [
</div> </div>
</section> </section>
{/* ---- 4. Tracks ------------------------------------------------------ */} {/* ---- 3. Tracks ------------------------------------------------------ */}
<section class="section section-alt reveal"> <section class="section section-alt reveal">
<div class="wrap"> <div class="wrap">
<div class="section-head"> <div class="section-head">
@@ -194,7 +151,7 @@ const TRACKS = [
</div> </div>
</section> </section>
{/* ---- 5. Rules ------------------------------------------------------- */} {/* ---- 4. Rules ------------------------------------------------------- */}
<section class="section reveal"> <section class="section reveal">
<div class="wrap"> <div class="wrap">
<div class="section-head"> <div class="section-head">
@@ -236,7 +193,7 @@ const TRACKS = [
</div> </div>
</section> </section>
{/* ---- 6. Awards ------------------------------------------------------ */} {/* ---- 5. Awards ------------------------------------------------------ */}
<section class="section section-alt reveal"> <section class="section section-alt reveal">
<div class="wrap"> <div class="wrap">
<div class="section-head"> <div class="section-head">
@@ -274,7 +231,7 @@ const TRACKS = [
</div> </div>
</section> </section>
{/* ---- 7. Fees --------------------------------------------------------- */} {/* ---- 6. Fees --------------------------------------------------------- */}
<section class="section reveal"> <section class="section reveal">
<div class="wrap"> <div class="wrap">
<div class="section-head"> <div class="section-head">
@@ -317,33 +274,6 @@ const TRACKS = [
margin-block-start: var(--space-8); margin-block-start: var(--space-8);
} }
/* `.stage`, NOT `.arc`. `/about/` has an `.arc` block of its own with the
same class names and different rendering — serif at --text-2xl there, mono
at --text-lg here — and Astro's scoping means neither reaches the other. Two
meanings for one name across two pages is a rename waiting to go wrong.
`role="list"` on the <ol> and no local `list-style: none`: global.css does
both for `ol[role='list']`, and WebKit drops list semantics when the marker
goes, which is why the role is there. Columns come from `.grid-autofit`. */
.stage {
--grid-min: 17rem;
gap: var(--space-7);
}
.stage-name {
margin-block: var(--space-4) var(--space-2);
font-family: var(--font-mono);
font-size: var(--text-lg);
font-weight: var(--weight-medium);
}
.stage-body {
max-inline-size: 40ch;
line-height: var(--leading-body);
}
.stage-note {
margin-block-start: var(--space-8);
max-inline-size: 54ch;
line-height: var(--leading-body);
color: var(--text-inverse-2);
}
.cta { .cta {
margin-block-start: var(--space-6); margin-block-start: var(--space-6);
} }
+22 -25
View File
@@ -23,8 +23,8 @@
* EVERY FACTUAL CLAIM ON THIS PAGE TRACES TO AGENTS.md §4, and the ones that * EVERY FACTUAL CLAIM ON THIS PAGE TRACES TO AGENTS.md §4, and the ones that
* carry risk are constants from src/data/site.ts rather than typed here. * carry risk are constants from src/data/site.ts rather than typed here.
* Notably: arbitration is scoped to COMMERCIAL matters throughout (§4 * Notably: arbitration is scoped to COMMERCIAL matters throughout (§4
* Offerings, Q39 2026-08-27), the Q.Arb stage is stated on the page and not * Offerings, Q39 2026-08-27), the held designations come from `CREDENTIALS`,
* only in the footer, and nothing claims or implies licensure (D13). * and nothing claims or implies licensure (D13).
*/ */
import { Picture, getImage } from 'astro:assets'; import { Picture, getImage } from 'astro:assets';
import BaseLayout from '../layouts/BaseLayout.astro'; import BaseLayout from '../layouts/BaseLayout.astro';
@@ -51,16 +51,16 @@ import {
} from '../data/site'; } from '../data/site';
/** /**
* FOUR SLOTS, NOT THREE, AND THE FOURTH IS NOT DECORATIVE. * FOUR SLOTS, NOT THREE, and it is now a §4 substitution-principle choice
* rather than a condition.
* *
* docs/01 §`/` item 2 says "Three slots". §4 Offerings is the higher authority * docs/01 §`/` item 2 says "Three slots"; §4's substitution principle
* on claims and attaches a PAIRED-DISCLOSURE CONDITION to offering arbitration * authorises `Q.Arb` as a fourth "where one exists", and this layout has one.
* at all: the site "makes the first while stating the second plainly", and * It was MANDATORY here until 2026-08-29 under §4's paired-disclosure
* "neither half may be dropped". This page says *arbitrator* in its second * condition, because the page says *arbitrator* in its second sentence and the
* sentence, so the stage of the arc belongs on this page rather than only in * stage had to appear beside the offering. Q.Arb is held and that condition is
* the site footer. docs/03 authorises the fourth slot; docs/03 has been amended * dissolved; the slot stays because a fourth held credential earns its place,
* to record that on `/` it is required. Q.Arb reads as commenced — never as * not because anything requires it.
* held or nearing completion (§4 Forbidden).
*/ */
const credentials = [...CREDENTIAL_ROW, CREDENTIAL_ROW_ARB]; const credentials = [...CREDENTIAL_ROW, CREDENTIAL_ROW_ARB];
@@ -488,32 +488,29 @@ const graph = homeGraph(new URL(ldImage.src, Astro.site).href);
<a href="/arbitration/">Arbitration</a> <a href="/arbitration/">Arbitration</a>
</h3> </h3>
{ {
/* docs/03's model sentence, and BOTH halves are required: §4 /* COMMERCIAL MATTERS ONLY (Q39) — family arbitration is not offered,
Offerings — "neither half may be dropped". Pouya's instruction: and that scope is Pouya's own choice, not a conclusion this record
being open about the stage is the differentiator, so it is not draws about the law. */
hedged into vagueness and not dropped. Commercial matters only
(Q39): family arbitration is not offered. */
} }
<p class="feature-body"> <p class="feature-body">
I accept sole, party-appointed and co-arbitration appointments in I accept sole, party-appointed and co-arbitration appointments in
commercial matters. The Q.Arb pathway commenced in August 2026; commercial matters, on a documents-only, expedited or full-hearing
C.Med-Arb is the endpoint. track.
</p> </p>
<span class="feature-arrow" aria-hidden="true">&rarr;</span> <span class="feature-arrow" aria-hidden="true">&rarr;</span>
</article> </article>
</div> </div>
{ {
/* docs/01 §`/` item 4: "Med-Arb named here as the long-term arc, /* Med-Arb has its own §4 Offerings row (Q35, 2026-08-27), so it is named
linking to /med-arb/." It has had its own §4 Offerings row since here as a present offering. docs/01 item 4 asked for it as "the
2026-08-27 (Q35), so it is named as offered rather than only as an long-term arc"; there is no arc, and that item is amended. */
aspiration — but the arc is what docs/01 asks this page to carry. */
} }
<p class="pair-note"> <p class="pair-note">
<strong>Med-Arb</strong> combines the two: one neutral mediates, then arbitrates <strong>Med-Arb</strong> combines the two: one neutral mediates, then arbitrates
whatever has not settled. I accept those appointments, and C.Med-Arb is the whatever has not settled. I accept those appointments in commercial matters.
designation endpoint. The page on it meets the procedural-fairness objection The page on it meets the procedural-fairness objection head on rather than
head on rather than around it &mdash; around it &mdash;
<a href="/med-arb/">how med-arb works &rarr;</a> <a href="/med-arb/">how med-arb works &rarr;</a>
</p> </p>
</div> </div>
+28 -15
View File
@@ -4,9 +4,10 @@
* Arbitration / Med-Arb, docs/04 (FAQPage is specified for this page). * Arbitration / Med-Arb, docs/04 (FAQPage is specified for this page).
* *
* docs/01 rates this the strongest candidate for the best-performing page on * docs/01 rates this the strongest candidate for the best-performing page on
* the site: real search demand, thin competition, and it maps to the practice's * the site: real search demand and thin competition. So it is written to be the
* long-term arc. So it is written to be the page that actually explains the * page that actually explains the process, not a service blurb. (A third reason
* process, not a service blurb. * — "it maps to the practice's long-term arc" — went with C.Med-Arb on
* 2026-08-29. Do not restore arc framing on this page from an older reading.)
* *
* THE PAGE NOW ANSWERS THE FAIRNESS OBJECTION TWICE, AND THE SECOND HALF IS THE * THE PAGE NOW ANSWERS THE FAIRNESS OBJECTION TWICE, AND THE SECOND HALF IS THE
* ONE Q54 UNBLOCKED. The FAQ answers it at the level of PROCESS DESIGN — what a * ONE Q54 UNBLOCKED. The FAQ answers it at the level of PROCESS DESIGN — what a
@@ -24,7 +25,7 @@ import Undertaking from '../components/Undertaking.astro';
import { getImage } from 'astro:assets'; import { getImage } from 'astro:assets';
import ogDefault from '../assets/og-portrait.jpg'; import ogDefault from '../assets/og-portrait.jpg';
import { medArbGraph } from '../data/schema'; import { medArbGraph } from '../data/schema';
import { CONDUCT_UNDERTAKINGS, CREDENTIALS } from '../data/site'; import { CONDUCT_UNDERTAKINGS, DESIGNATIONS_HELD_LINE } from '../data/site';
const ldImage = await getImage({ const ldImage = await getImage({
src: ogDefault, src: ogDefault,
@@ -212,8 +213,8 @@ const graph = medArbGraph({
<p> <p>
The ADR Institute of Canada publishes <strong The ADR Institute of Canada publishes <strong
>ADRIC Med-Arb Rules</strong >ADRIC Med-Arb Rules</strong
>, developed by a task force and put to the membership in 2019, and >, developed by a task force and presented to the membership at
designed, in ADRIC's words, to <q ADRIC's 2019 annual conference, and designed, in ADRIC's words, to <q
>work in tandem with ADRIC's existing Mediation Rules and >work in tandem with ADRIC's existing Mediation Rules and
Arbitration Rules</q Arbitration Rules</q
>. They were drafted for domestic commercial disputes, and ADRIC notes >. They were drafted for domestic commercial disputes, and ADRIC notes
@@ -234,23 +235,35 @@ const graph = medArbGraph({
</div> </div>
</section> </section>
{/* ---- 6. The endpoint ------------------------------------------------- */} {/* ---- 6. Why this practice -------------------------------------------- */}
{
/* ⚠️ THIS SECTION MUST NOT ANSWER THE ADRIC COMPETENCE QUOTATION ABOVE IT.
For one pass it did: the heading read "Med-arb asks one neutral to be
competent at both" — a restatement, in this site's voice, of ADRIC's
"requires a high level of practitioner competence" quoted in the section
immediately above — and the designations then answered it by adjacency.
**The source answers its own sentence with a DIFFERENT designation**: the
same ADRIC page points at the Chartered Med-Arb and a Med-Arb Foundational
Course, and `docs/reference/adrio-designations.md` Finding 3 calls the
Q-level designations "an intermediate step". So the page was borrowing a
third party's competence standard and supplying an answer that party does
not give. `claims-auditor`, round-2 audit, 2026-08-30 — the gloss lens.
The heading and lede now state what this practice holds and offers, with
no competence proposition and no bridge to the quotation above. */
}
<section class="section section-alt reveal"> <section class="section section-alt reveal">
<div class="wrap"> <div class="wrap">
<div class="section-head"> <div class="section-head">
<SectionHeading eyebrow="Why this practice" level={2}> <SectionHeading eyebrow="Why this practice" level={2}>
<span slot="heading" <span slot="heading">Both halves, in one practice.</span>
>C.Med-Arb is the designation this practice is built toward.</span
>
</SectionHeading> </SectionHeading>
</div> </div>
<div class="prose"> <div class="prose">
<p> <p>
{CREDENTIALS.goalName}, the ADRIC and ADRIO designation for exactly {DESIGNATIONS_HELD_LINE}. Med-arb is not a third service bolted onto
this hybrid, is the endpoint of the arc. Q.Med is held. The Q.Arb mediation and arbitration; it is the two of them run under one
pathway commenced in August 2026. C.Med-Arb comes after both, and it agreement, in the order the agreement sets.
is the reason the two halves of this practice are being built together
rather than one after the other.
</p> </p>
<p> <p>
I accept med-arb appointments now, in commercial matters. The section I accept med-arb appointments now, in commercial matters. The section
+6 -4
View File
@@ -584,10 +584,12 @@ hr {
what a UA without that fudge renders. With `printBackground: true` the what a UA without that fudge renders. With `printBackground: true` the
pages are correct, which is what isolates the cause. pages are correct, which is what isolates the cause.
What vanished was the Q.Med / Q.Arb / C.Med-Arb progression on `/about/` — What vanished when it was measured was `/about/`'s inverse-ground arc block
§4's paired disclosure — plus the contact band. `!important` because the plus the contact band. (That arc section was deleted on 2026-08-29; the
rules being overridden are class-level and these must win regardless of defect it exposed was never about that section — any `section-inverse`
which section variant a future page uses. */ reproduces it, and `/practice/*` and `/arbitration/` still carry one.)
`!important` because the rules being overridden are class-level and these
must win regardless of which section variant a future page uses. */
/* TOKENS FIRST, THEN CLASSES — and the token half is the part that works. /* TOKENS FIRST, THEN CLASSES — and the token half is the part that works.
A class-by-class version of this block shipped first and MISSED TWO A class-by-class version of this block shipped first and MISSED TWO
ELEMENTS, both measured under print-media emulation: `.approach-metaphor` ELEMENTS, both measured under print-media emulation: `.approach-metaphor`