feat: rule Q58 and close Q57; §4 lists all six areas; docs/03's checklist cites §4 instead of restating it
Build and deploy / build-and-deploy (push) Failing after 4s

Four rulings from Pouya, plus what implementing them turned up.

Q58 — RULED, and he attributed the ambiguity to his own document: "3.5 was meant
as the TOTAL time committed, of which 2 is preparation — leaving 1.5 hours in the
room. Your arithmetic caught it: if prep sat inside, 3.5 and 7 wouldn't be
exactly 2x, because preparation doesn't scale with session length." The card now
reads: half day up to 3 hours of session, fee includes up to 2 hours of
preparation, $2,000; full day up to 6 hours, up to 3 hours of preparation,
$4,000. docs/07's own research table corroborates 3 and 6 — Patey and Zuber both
publish those hours, and ADR Chambers' roster rate counts preparation separately
from "up to three hours of mediation". One provenance note under R14: he recalled
"all or part of 3 hours" as their wording; the committed extract carries the
hours but not the phrase, so docs/07 cites the hours and attributes the phrase to
nobody.

Two things fell out of the ruling that the instruction did not name, and both
were defects. docs/07 §All parameters confirmed was itself prescribing the flat
"including 2 hours of preparation" — the sentence /for-parties/ was built
against, so the spec was generating the defect. And the cap had to reach the
copy: "including up to 2 hours". FEES.mediation.*.hours is corrected 3.5 -> 3 and
7 -> 6; it had no consumer in src/ while the question was open, which is the only
reason no page was ever wrong. /fees/ is unblocked for step 9 on the question Q58
asked.

Q57 — CLOSED with no seventh undertaking. "A reader assumes the outcome, and the
obvious undertaking adds nothing a reader doesn't already infer." The TODO(pouya)
is replaced by the ruling where the question was; src/ now carries zero live
TODO(pouya) markers.

§4's mediation row lists all six published areas. Q56's ruling had named five,
which was four areas plus the word "commercial" — a scope descriptor, not a
seventh area. The hedge is struck on his instruction; the clause saying the six
are not the authorised subject-matter list is restored, because his ruling
supplied a correct value and did not close Q35(c)'s class. Split-stamped.

docs/03's compliance checklist now names what to look for on a page and which §4
row decides it, never the bar's own wording. 12 items before, 12 after — a
structural fix, not a coverage change.

Thirteen review findings across two rounds, all applied, none declined. Three
were mine to own. The capped-form rule was written and then applied to one
surface: /mediation/ shipped an uncapped form in words no barred-string grep
could reach, site.ts quoted a docs/07 sentence Q58 had just deleted, and §9's
Q15/Q16/Q17 row prescribed the flat form — which is what a later implementer
building /fees/ reads. A derived fee term was asserted as applied fact in the
document that is the authority on money: "overtime begins after 3 h and 6 h" is
in no ruling. Struck, and opened as Q59.

And round 2 caught the arithmetic in round 1's own fix. The full-day route is
flat $4,000 until hour 6, so generalising it as 500n+1000 for all n>=3 was valid
only from 6 h, and "cheaper by $500 at every length" was wrong across the whole
3-6 h band. The real spread is $2,000 at three hours narrowing to $500 from six
on — up to four times larger, and largest exactly where a half-day booking
overruns. Written into docs/07 §Recorded dissent and §12's R5 row, which is where
the 12-month fee review will read it. Round 1's fix for the missing consequence
also published the overtime rate on a page that now states an unambiguous cap,
defining the trigger by adjacency with no other quantity for it to attach to; the
rate came off the page.

R11 at the step 6 -> 7 boundary: 13 of 14 pins current. §7's TypeScript hold
named one gate and there are two — typescript-eslint requires <6.1.0, tighter
than @astrojs/check, so the recorded removal trigger was unreachable. Both are
now named.

Verified: check 0 errors, lint 0, build 0 (14 pages), check:claims 0, npm audit
0, minifier tripwire clean, zero JS shipped, all copy present with JavaScript
disabled. Lighthouse not run — tool unavailable until step 7.

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-31 08:17:59 -04:00
co-authored by Claude Opus 5
parent 13b97841b9
commit 6cfe69033f
9 changed files with 594 additions and 132 deletions
+308 -6
View File
@@ -399,7 +399,7 @@ never be read as one:
| Offering | Status |
|---|---|
| **Mediation** — sole mediator | `[verified 2026-08-26 — Pouya]`. Q.Med held; §4 also verifies multiple completed sole mediations. ⚠️ **UNSCOPED, AND DELIBERATELY SO — Q56, ruled by Pouya 2026-08-30. Do not add "commercial" to this row, and do not scope it on a page.** He mediates commercial, construction, insurance/SABS, shareholder and cross-cultural matters, and the practice pages say so. ⚠️ **THAT LIST IS ILLUSTRATIVE OF BREADTH, NOT A CLOSED SET, and it is not the authorised subject-matter list** — Q35's gate governs that, and the site publishes **six** areas of which every one offers mediation (`src/data/practice-pages.ts`), **technology and energy included**. Read as an enumeration it is short by two, and a later reader would strike two live pages or open a question that did not need opening. Flagged to Pouya rather than rewritten, because the words are his ruling. Raised by `adversarial-reviewer`, 2026-08-30. **Why this row and the arbitration row below do not match, so the asymmetry reads as designed rather than as an oversight:** arbitration is scoped commercial because of a **legal gate** — Q39, family arbitration in Ontario requires prescribed training. **Mediation has no such gate.** The site said *"Commercial Mediation"* on four surfaces until 2026-08-30; that was under-describing the offering, and it was corrected rather than ratified |
| **Mediation** — sole mediator | `[verified 2026-08-26 — Pouya]`. Q.Med held; §4 also verifies multiple completed sole mediations. ⚠️ **UNSCOPED, AND DELIBERATELY SO — Q56, ruled by Pouya 2026-08-30. Do not add "commercial" to this row, and do not scope it on a page.** **He mediates in all six published practice areas** — construction, technology, energy, insurance, shareholder, and cross-cultural. `PRACTICE_AREAS` in `src/data/site.ts` carries the full names and the six pages are built (`src/data/practice-pages.ts`); **every one of the six offers mediation**, and each is named under **Q35(c)'s subject-matter publication gate**. ⚠️ **THE SIX ARE THE VALUE, AND THE HEDGE THAT STOOD HERE FOR ONE DAY IS STRUCK — Pouya, 2026-08-31:** *"The register should match the site; 'illustrative' is a hedge covering a gap that has a correct value. Technology and energy go in."* Q56's ruling had named five — *"commercial, construction, insurance/SABS, shareholder and cross-cultural"* — which is **four of the six areas plus the word *commercial***, a scope descriptor rather than a seventh area. `adversarial-reviewer` found the row two short; it was annotated as illustrative rather than rewritten, because the words were his ruling and only he could supply the missing value. He has, so the enumeration is now the site's own six and a reader comparing register against site finds them equal. ⚠️ **BUT THE SIX ARE THE PUBLISHED AREAS, NOT THE AUTHORISED SUBJECT-MATTER LIST — that clause was struck with the hedge on 2026-08-31 and is restored the same day.** Pouya's ruling replaced *"illustrative"* with a correct value; it did not close the class. **Q35(c)'s gate still governs what may be named** — a practice area may be named where he can competently accept an appointment in that subject matter and the page frames it as positioning without claiming history — and the gate is not spent by having been used six times. Read as a closed list this row would withdraw the register's support from `/practice/cross-cultural/`'s shipped *"commercial mediations and arbitrations"*, which was deliberately left on the recorded ground that the class is open. **The six-area fact is `[verified 2026-08-31 — Pouya]`; the row's opening stamp is 2026-08-26 and said nothing about subject matter** — split, on the device this register ratified for the Q.Arb row. **Why this row and the arbitration row below do not match, so the asymmetry reads as designed rather than as an oversight:** arbitration is scoped commercial because of a **legal gate** — Q39, family arbitration in Ontario requires prescribed training. **Mediation has no such gate.** The site said *"Commercial Mediation"* on four surfaces until 2026-08-30; that was under-describing the offering, and it was corrected rather than ratified |
| **Arbitration — sole arbitrator** (commercial) | `[verified 2026-08-26 — Pouya, Q33/Q36]`. Offered **now**. Not gated by Q.Arb. **Commercial**, and the scope is now load-bearing rather than provisional: Q39 closed 2026-08-27 and **family arbitration is excluded by Pouya's choice** — see the row below. ⚠️ **THE SCOPE IS A LEGAL GATE, NOT A POSITIONING CHOICE — Q56, 2026-08-30.** Family arbitration in Ontario requires prescribed training, which is why this word is load-bearing here and **must not be copied onto the mediation row above**: mediation has no equivalent gate and is unscoped on purpose |
| **Arbitration — party-appointed** | `[verified 2026-08-26 — Pouya, Q33/Q36]`. Offered **now** |
| **Arbitration — co-arbitration** | `[verified 2026-08-26 — Pouya, Q33/Q36]`. Offered **now**. This closes Q36, which had flagged the claim as asserted in three specs and resting on no §4 row — the row is here |
@@ -703,7 +703,7 @@ the audience it targets. Revisit at month 1218. `[verified 2026-08-25 — dec
| Thing | Value |
|---|---|
| Framework | **Astro 7.2.9**, `output: 'static'` `[verified 2026-08-27 — npm view astro version, D1 as amended]`. `@astrojs/mdx` 7.0.8, `@astrojs/sitemap` 3.7.3, `sharp` 0.35.4 — all three at `latest`. Bumped from 7.2.7 at the step 1 → step 2 phase boundary under R11: 7.2.8 published 2026-08-26 and 7.2.9 on 2026-08-27, i.e. **two patches appeared inside 48 hours**, which is the argument for checking at boundaries rather than on failure. `engines` unchanged at `node >=22.12.0`, `npm >=9.6.5` `[verified 2026-08-27 — npm view astro@7.2.9 engines]` |
| **TypeScript — HELD at 6.x, and the hold is a peer constraint rather than a preference** | Pinned `^6.0.3`; `npm view typescript version` returns **7.0.2** `[verified 2026-08-30 — R11, step 56 phase boundary; unchanged from 2026-08-29]`. **The removal trigger was re-checked rather than recalled:** `npm view @astrojs/check@0.9.10 peerDependencies` still returns `{ typescript: '^5.0.0 || ^6.0.0' }`, so the hold stands. **One major behind, which is the exact shape D1 was amended over — so the reason is recorded rather than the hold being silent.** `@astrojs/check@0.9.10` declares `peerDependencies: { typescript: '^5.0.0 \|\| ^6.0.0' }` `[verified 2026-08-29 — npm view @astrojs/check@0.9.10 peerDependencies]`, and `npm run check` is `astro check`, which is the type gate the deploy path runs before it builds. **Removal trigger: `@astrojs/check` widens the range to include 7.** Re-check at every phase boundary under R11 — this is a hold on a dependency's schedule, not on a judgement, so it lifts without a decision |
| **TypeScript — HELD at 6.x, and the hold is a peer constraint rather than a preference** | Pinned `^6.0.3`; `npm view typescript version` returns **7.0.2** `[verified 2026-08-31 — R11, step 67 phase boundary; 13 of 14 pins current, this the only hold]`. **The removal trigger was re-checked rather than recalled:** `npm view @astrojs/check@0.9.10 peerDependencies` still returns `{ typescript: '^5.0.0 || ^6.0.0' }`, so the hold stands. ⚠️ **AND THERE ARE TWO GATES, NOT ONE — corrected 2026-08-31, and this row named only the first for two days.** `npm view typescript-eslint peerDependencies` returns `{ typescript: '>=4.8.4 <6.1.0' }`, which is **tighter**: widening `@astrojs/check` alone would not lift the hold, so the trigger as recorded was unreachable. **A second consequence, live:** the pin is a caret, so if a 6.1.x ever ships, a plain `npm install` moves the tree into a peer-range breach with nothing in the repo saying so. Nothing is breached today — `npm ls typescript` resolves **6.0.3**, which is the highest stable 6.x on the registry. Found by running R11's own check rather than reading the row. **One major behind, which is the exact shape D1 was amended over — so the reason is recorded rather than the hold being silent.** `@astrojs/check@0.9.10` declares `peerDependencies: { typescript: '^5.0.0 \|\| ^6.0.0' }` `[verified 2026-08-29 — npm view @astrojs/check@0.9.10 peerDependencies]`, and `npm run check` is `astro check`, which is the type gate the deploy path runs before it builds. **Removal trigger: `@astrojs/check` AND `typescript-eslint` both widen to include 7** — either alone is not enough. Re-check at every phase boundary under R11 — this is a hold on a dependency's schedule, not on a judgement, so it lifts without a decision |
| Lint toolchain | ESLint **10.9.1**, `@eslint/js` 10.0.1, `globals` 17.11.0, `eslint-plugin-astro` **3.1.0**, `eslint-plugin-jsx-a11y` 6.10.2, `typescript-eslint` 8.68.0, `typescript` **6.0.3****every pin at the registry's `latest` except `typescript`** `[verified 2026-08-30 — npm view, all 14 pins, R11 at the step 5 → 6 boundary; thirteen current, one held]`. `@eslint/js` and `globals` are declared explicitly; before 2026-08-26 `eslint.config.js` imported them and they resolved only by npm hoisting accident. **Accessibility linting is on**`flat/jsx-a11y-recommended`, 36 rules `[verified 2026-08-26 — 7 rules fired on a deliberately inaccessible .astro file]`. `eslint-plugin-jsx-a11y@6.10.2` declares a stale `eslint ^3..^9` peer range; a one-line `overrides` entry in `package.json` resolves it. ⚠️ **`eslint-plugin-astro@3.1.0` declares `node ^22.22.3 \|\| ^24.16.0 \|\| >=26.3.0`**, which excludes Pouya's Node 25.6.0 — `npm install` prints EBADENGINE there. Dev-time only, and `nvm use` (Node 22 LTS, per `.nvmrc`) clears it. **`typescript` — the hold, and it was too wide by a whole major until 2026-08-27.** `latest` is **7.0.2** and it is unusable here: `typescript-eslint@8.68.0` peers `typescript >=4.8.4 <6.1.0` and `@astrojs/check@0.9.10` peers `^5.0.0 \|\| ^6.0.0`, so taking 7 breaks **both** the linter and `astro check` `[verified 2026-08-27 — npm view <pkg> peerDependencies]`. **But this row previously read "held at 5.x", and 6.0.3 is a stable release both peers accept** — so the pin sat a full major behind for no reason the record could name, in a row whose whole job is to name the reason. Now at **6.0.3**, the newest version compatible with both peers; `npx tsc --version` reports 6.0.3 and the full gate is green `[verified 2026-08-27]`. The 6.x listing is mostly `-dev` and `-beta` tags; **6.0.2 and 6.0.3 are the only stable 6.x releases**, which is why `npm view typescript version` (7.0.2) is not the number to pin against here. Re-check at the next phase boundary: the hold ends when `typescript-eslint` widens its peer range past `<6.1.0` |
| Lighthouse CI | **Not installed, and that is now stated wherever the check is claimed.** `@lhci/cli` was the sole source of all 10 `npm audit` findings (7 high, via `lighthouse → puppeteer-core → extract-zip`), 0.15.1 is `latest` so there was no clean upgrade, and it cannot run at all — no pages, no `lighthouserc`. Removed 2026-08-26; **`npm audit` now reports 0 vulnerabilities** `[verified 2026-08-26 — npm audit]`. Removing it left a **documented control that no longer exists**`docs/04`, `CLAUDE.md` and `/build` Phase 5 all required a run that had silently become impossible, which is Q22's defect in a different costume. Fixed 2026-08-26: the unavailability is stated in `docs/04-seo-spec.md` (budget table, the callout under Performance, and the post-launch checklist), `CLAUDE.md` (performance budget and the definition of done), `.claude/commands/build.md` Phase 5, `docs/06-deployment.md` (PR checks and the cutover checklist), and `.claude/agents/adversarial-reviewer.md` §4 — which is also told **not** to raise the absence as a finding. **Re-add at build step 7** with a pin verified that day and a check for a patched release; do not assume 0.15.1 is still the ceiling (R11) |
| Node | **22 LTS line**, `.nvmrc` holds `22` so it tracks the latest 22.x rather than freezing at a floor. `package.json` declares **`engines.node` = `^22.13.0 || >=24`** (verbatim — it excludes Node 23, an EOL odd line, which a flat `>=22.13.0` would have admitted) and **`engines.npm >=9.6.5`** — the intersection of every dependency's own floor: Astro 7 and `@astrojs/mdx` 7 need `>=22.12.0`, ESLint 10 needs `^20.19.0 \|\| ^22.13.0 \|\| >=24` `[verified 2026-08-26 — npm view astro@7.2.7 engines, npm view eslint@10.9.1 engines]`. **Pouya's machine reports Node v25.6.0** `[verified 2026-08-26 — node -v]`, an odd-numbered non-LTS line; it satisfies the floor, but `nvm use` keeps local and CI on the same runtime |
@@ -771,8 +771,9 @@ Nothing below can be invented. Each needs an answer from Pouya.
| # | Question | Blocks |
|---|---|---|
| **Q58** | **DOES `hours` IN THE MEDIATION RATE CARD MEAN THE LENGTH OF THE DAY, OR THE BILLED ENVELOPE INCLUDING PREPARATION?** `docs/07-fees.md` reads *"Half day — **up to 3.5 h, including 2 h preparation**"* and *"Full day — up to 7 h, including 3 h preparation"*. Taken at face value, 3.5 is the whole billed envelope and the **time in the room is 1.5 h** for a half day and **4 h** for a full day. **Against that reading:** 3.5 and 7 are exactly 2×, which they would not be if preparation sat inside them (1.5 vs 4 is not 2×). So either the card's wording is wrong in the one document that is the authority on money, or `FEES.mediation.*.hours` in `src/data/site.ts` does not mean what a page would naturally publish it as. **This was one sentence from shipping.** A draft of `/for-parties/` answered *"What happens on the day?"* with *"A half day is about 3.5 hours"* — the envelope presented as the day, to the reader least able to check it. The sentence was removed rather than resolved by inference; the page now says only that you book a half day or a full day. **What is needed:** one line from Pouya saying which the 3.5 and 7 are. Then `docs/07`'s two rows or `site.ts`'s field gains the correction, and the semantics go in the constant's doc comment (a warning is there now). **`/fees/` at build step 9 publishes this table and cannot be built without the answer.** Raised by `adversarial-reviewer`, 2026-08-30 | **`/fees/` (step 9), and any sentence anywhere stating how long a mediation day is.** Nothing currently shipping — no page states a duration |
| **Q57** | **WHAT HAPPENS WHEN A CONFLICTS CHECK TURNS SOMETHING UP?** `/process/` §Conflicts ships saying **when** the check runs (the intake call, before anything is agreed) and **what it needs** (full legal names of the parties, the parent or affiliate actually behind the dispute, counsel on each side). It stops there, and the stop is deliberate: **any sentence naming the outcome is a SEVENTH conduct undertaking**, and §4's gate for that class is one line — *"an undertaking may be published only where Pouya has made it in terms. Not 'would obviously agree to', not 'follows from the process' — said."* *"If a conflict appears I decline the appointment"* is exactly what that gate refuses to let this repository infer, however obvious it looks. **What is needed:** one sentence from Pouya, in his words, or a decision that the page says nothing further. `TODO(pouya)` sits at `src/pages/process.astro` §Conflicts. Raised at build step 6, 2026-08-30 | **The outcome half of `/process/` §Conflicts.** The section ships and is accurate; a reader who asks the obvious next question does not find the answer on the page |
| **Q59** | **WHERE DOES THE OVERTIME HOUR START?** `docs/07`'s card carries *"Overtime, per hour — $500"* and has never said what it is overtime **to**. Q58's ruling settled the two allowances (up to 3 h / 6 h of session, up to 2 h / 3 h of preparation) and did not reach this, and Q15Q17's answer records the rate with no trigger either. **The two candidates are the session cap (3 h / 6 h) and the billed envelope (5 h / 9 h), and this repository must not pick one** — it is a fee term, and `CLAUDE.md`'s rule for a fact we do not have is a question, not an inference. A first pass at `docs/07`'s Q58 note asserted the session cap as applied fact; `adversarial-reviewer` struck it in the same change set that wrote it. ⚠️ **AND THE ANSWER EXPOSES SOMETHING IN D14's FIGURES THAT IS WORTH SEEING BEFORE `/fees/` PUBLISHES THEM.** Under the session-cap trigger the half-day route costs `2000 + 500 × max(0, n 3)` and the full-day route is **flat $4,000 until hour 6** — so **booking a half day and paying overtime is cheaper at EVERY length: by $2,000 at 3 h, $1,500 at 4 h, $1,000 at 5 h, and $500 from 6 h on. The full-day rate is never the cheaper choice.** The cause is the relationship between two of D14's own numbers rather than the trigger — the half-to-full step is $2,000 and three hours of overtime is $1,500 — and the envelope trigger trades bands rather than fixing it (worse at 6 h, closing to zero from 9 h). ⚠️ *This row first stated the spread as a flat $500 and generalised the full-day route as `500n + 1000` for all `n ≥ 3`, which is only valid from hour 6. The real spread is up to FOUR TIMES larger and is largest at 35 h, the band a half-day booking actually overruns into — so the wrong figure understated exactly the thing this row exists to escalate. Corrected 2026-08-31; found by `adversarial-reviewer` on round 2 of the change set that wrote it.* The table is in `docs/07` §The confirmed rate card and, for the rate decision, §Recorded dissent. **What is needed:** one line on where the hour starts, and a decision on whether the half/full step is a choice or an oversight (R5's 12-month review is the other place that belongs). Raised by `adversarial-reviewer`, 2026-08-31 | **`/for-parties/` NOW, and the overtime line on `/fees/` at step 9.** That page states an unambiguous session cap, so an overtime RATE printed on it defines the trigger **by adjacency** — there is no other quantity for the charge to attach to, and the answer travels alone into the `FAQPage` node. The rate is therefore off that page until this is answered; it names the charge without its rate or its trigger. `/mediation/` says only that overtime is on the rate card |
| ~~Q58~~ | **RULED 2026-08-31 — `hours` IS THE SESSION, AND THE AMBIGUITY WAS IN `docs/07` RATHER THAN IN ANY COPY. Pouya owned it in terms:** *"the ambiguity is mine… My `docs/07` wording said "up to 3.5 h, including 2 h preparation", which is genuinely unclear: 3.5 was meant as the TOTAL time committed, of which 2 is preparation — leaving 1.5 hours in the room. Your arithmetic caught it: if prep sat inside, 3.5 and 7 wouldn't be exactly 2×, because preparation doesn't scale with session length. The intended reading is the market's, and my wording obscured it."* **THE CORRECTED CARD, in his words:** *"Half day — up to 3 hours of session. Fee includes up to 2 hours of preparation. $2,000. Full day — up to 6 hours of session. Fee includes up to 3 hours of preparation. $4,000."* His reason for 3 and 6: *"the market convention — Patey and Zuber both publish "all or part of 3 hours" and "all or part of 6 hours", and those were the comparables the rate was set against. Selling 1.5 hours of room time as a half day would be an outlier nobody would recognise."* ⚠️ **ONE PROVENANCE NOTE, and it is R14's rule rather than a doubt about the ruling:** `docs/07`'s committed extract records Patey and Zuber at **3 h** and **6 h** but **does not carry the phrase "all or part of"** — so `docs/07` cites the hours, not the phrase, and the phrase is not attributed to them anywhere in the repository. The hours corroborate the ruling on their own, and ADR Chambers' roster rate in the same table is the clearest corroboration of the *shape*: *"one half hour of preparation time per party **and** up to three hours of mediation"* — preparation counted separately from a three-hour session. **APPLIED:** `docs/07`'s two card rows and its §All parameters confirmed (which prescribed the flat *"including 2 hours"*, the form `/for-parties/` then shipped); `FEES.mediation.*.hours` 3.5 → 3 and 7 → 6 with the semantics in the constant's doc comment; `/for-parties/` now states the session length interpolated from the constant and the preparation allowance **as a cap**. **The preparation allowance is CAPPED and must be published as capped***"including **up to** 2 hours"*, never the flat form and never "preparation included". **`/fees/` is UNBLOCKED for build step 9.** **The question as raised is preserved below.** **DOES `hours` IN THE MEDIATION RATE CARD MEAN THE LENGTH OF THE DAY, OR THE BILLED ENVELOPE INCLUDING PREPARATION?** `docs/07-fees.md` reads *"Half day — **up to 3.5 h, including 2 h preparation**"* and *"Full day — up to 7 h, including 3 h preparation"*. Taken at face value, 3.5 is the whole billed envelope and the **time in the room is 1.5 h** for a half day and **4 h** for a full day. **Against that reading:** 3.5 and 7 are exactly 2×, which they would not be if preparation sat inside them (1.5 vs 4 is not 2×). So either the card's wording is wrong in the one document that is the authority on money, or `FEES.mediation.*.hours` in `src/data/site.ts` does not mean what a page would naturally publish it as. **This was one sentence from shipping.** A draft of `/for-parties/` answered *"What happens on the day?"* with *"A half day is about 3.5 hours"* — the envelope presented as the day, to the reader least able to check it. The sentence was removed rather than resolved by inference; the page now says only that you book a half day or a full day. **What is needed:** one line from Pouya saying which the 3.5 and 7 are. Then `docs/07`'s two rows or `site.ts`'s field gains the correction, and the semantics go in the constant's doc comment (a warning is there now). **`/fees/` at build step 9 publishes this table and cannot be built without the answer.** Raised by `adversarial-reviewer`, 2026-08-30 | **Nothing.** No page stated a duration while the question was open — the one draft sentence that did was removed rather than reconciled, which is why the ruling had nothing to correct in public copy |
| ~~Q57~~ | **CLOSED 2026-08-31 — NO SEVENTH UNDERTAKING, AND THE PAGE IS COMPLETE AS IT STANDS.** Pouya: *"`/process/` stating when conflicts are run and what the check needs is complete. A reader assumes the outcome, and the obvious undertaking ("if a conflict is found I decline") adds nothing a reader doesn't already infer. Your restraint was right — §4's gate held. Record it closed rather than open, so it stops appearing in the live list."* **So this is a closure, not a deferral:** the answer is that the page says nothing further, which was one of the two outcomes the question named. §4 gains no seventh conduct undertaking and `CONDUCT_UNDERTAKINGS` still holds six. **APPLIED:** the `TODO(pouya)` is removed from `src/pages/process.astro` §Conflicts and replaced with the ruling, so a later reader finds the decision where the question was rather than an open marker; the file header's *"see the TODO below"* is corrected to cite this closure. `src/` now carries **zero** live `TODO(pouya)` markers. **The question as raised is preserved below.** **WHAT HAPPENS WHEN A CONFLICTS CHECK TURNS SOMETHING UP?** `/process/` §Conflicts ships saying **when** the check runs (the intake call, before anything is agreed) and **what it needs** (full legal names of the parties, the parent or affiliate actually behind the dispute, counsel on each side). It stops there, and the stop is deliberate: **any sentence naming the outcome is a SEVENTH conduct undertaking**, and §4's gate for that class is one line — *"an undertaking may be published only where Pouya has made it in terms. Not 'would obviously agree to', not 'follows from the process' — said."* *"If a conflict appears I decline the appointment"* is exactly what that gate refuses to let this repository infer, however obvious it looks. **What is needed:** one sentence from Pouya, in his words, or a decision that the page says nothing further. `TODO(pouya)` sits at `src/pages/process.astro` §Conflicts. Raised at build step 6, 2026-08-30 | **Nothing.** The section shipped accurate and unchanged; what closed is whether anything more was owed |
| ~~Q56~~ | **RULED 2026-08-30 — MEDIATION IS *NOT* SCOPED COMMERCIAL.** Pouya: *"Correct the four 'Commercial Mediation' surfaces to 'Mediation'; leave §4's mediation row unscoped."* **And the asymmetry with arbitration is DESIGNED, not an oversight — the reason is now recorded beside both §4 rows so nobody tidies them into a matching pair.** **Arbitration is scoped commercial because of a LEGAL GATE:** Q39 — family arbitration in Ontario requires prescribed training, and Pouya has excluded it by choice. **Mediation has no such gate**; he mediates commercial, construction, insurance/SABS, shareholder and cross-cultural matters, and the practice pages say so. So the site-wide "commercial" framing was **under-describing a wider offering**, which is why it is corrected rather than ratified as a positioning choice. `/practice/insurance/`'s SABS framing needs no reconciliation: it was never outside the offering. **The question as raised is preserved below.** ⚠️ **IS THE MEDIATION OFFERING SCOPED COMMERCIAL, OR NOT? THE SITE SAID 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 — ruled the same day it was raised.** No page was wrong; the register was silent where the site was specific, and the ruling makes the site match the register rather than the other way round |
| ~~Q55~~ | **CLOSED 2026-08-30 — NOT RESOLVED, AND THE DIFFERENCE IS THE RULING.** Pouya: *"The date is not published and nothing depends on it. Your split stamp was right: `[verified]` on the status, `[Pouya's stated basis]` on the date, the 2026-08-26 record noted as unreconciled. A register that says 'two inconsistent reports of an unpublished fact, neither relied on' is complete. Do not put it to Pouya."* **So this row is not a question any more and must not be re-raised as one.** §4's Q.Arb row now carries the split stamp explicitly and marks the 2026-08-26 (a) report **unreconciled, permanently**. **Why closing beats answering here:** the register's job is to say what it can vouch for, and it can vouch for exactly this — that he reported a July acquisition, that he had reported an August commencement three days earlier, and that no published claim rests on either. Asking again would buy a third self-report about a fact the site does not state. **The question as raised is preserved below, because the evidence is the record.** ⚠️ **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 — and closed on that basis rather than despite it.** The site states what Pouya most recently instructed, and no page carries the date |
| ~~Q1~~ | **ANSWERED 2026-08-26.** Licensure is left out entirely; the site asserts the JD only. See D13 | — |
@@ -780,7 +781,7 @@ Nothing below can be invented. Each needs an answer from Pouya.
| ~~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` | — |
| ~~Q13~~ | **ANSWERED 2026-08-26.** Self-hosted Gitea with Gitea Actions | — |
| ~~Q15 / Q16 / Q17~~ | **ANSWERED 2026-08-26.** Non-mediation hourly $500. Prep bundled: 2 h in the half day, 3 h in the full day, **stated on the page**. Overtime $500/h | — |
| ~~Q15 / Q16 / Q17~~ | **ANSWERED 2026-08-26.** Non-mediation hourly $500. Prep bundled and **CAPPED**: **up to** 2 h in the half day, **up to** 3 h in the full day, and `docs/07` §All parameters confirmed requires it published **in hours and as a cap**. Overtime $500/h — **the RATE only; where it begins is §9 Q59, open.** ⚠️ *Corrected 2026-08-31 with Q58: this row prescribed the flat form ("2 h in the half day"), which is the form `docs/07` now says must never be published — and §9 is what a later implementer building `/fees/` reads. Found by `adversarial-reviewer` in the change set that wrote the new rule.* | — |
| ~~Q25~~ | **ANSWERED 2026-08-26. Struck.** The §4 row permitting the boutique to be named is removed; D16 governs alone | — |
| ~~Q26~~ | **ANSWERED 2026-08-26.** §4 now carries an explicit **Licence status — NOT ESTABLISHED** row, and its opening no longer asserts that LSO rules apply. The register's rationale stands on the fabricated-credentials history alone | — |
| ~~Q24~~ | **ANSWERED 2026-08-26.** `AWS-Hosting-Guide.md` copied into `docs/reference/` — it is the only record of how the hand-built infrastructure was created. Scanned for credentials before copying: no access keys, no secrets, no account ID | — |
@@ -914,7 +915,7 @@ never being raised again.
| R2 | **Matter counts stay off the site until they are independently credible.** Revisit once there is a number a sophisticated GC would find persuasive on its own | 2026-08-26 | §4 forbids them now. That rule has an expiry date nobody has set |
| R3 | **The month 1218 practice-area review — now two candidates, not one.** *(a)* **Indigenous engagement**, deliberately omitted at launch (§6). *(b)* **Tax-adjacent disputes**, added 2026-08-26 on the Canadian Tax Foundation membership: it is the one credential none of the six areas touch, and valuation, earn-out, indemnity and shareholder disputes that turn on a tax position are ADR territory. Reasoning for both is in `docs/01-architecture.md`. One review, two candidates | 2026-08-26 | The brief rates the Indigenous niche the most valuable single one, and omission there is a timing call rather than a permanent one. The tax case is the same shape and fails for the same reason today: a practice page is a claim of present capability, and a membership is a credential, not a caseload. Both stop being true at some point, and nothing will tell you when |
| R4 | **Insights cadence.** D9 commits to monthly. A blog that stops is worse than one that never started | 2026-08-26 | The section's whole value is compounding |
| R5 | **Fee review at 12 months.** Published rates are sticky; the right moment to move them is deliberate, not reactive | 2026-08-26 | D14 is priced for where the practice is going, not where it is |
| R5 | **Fee review at 12 months.** Published rates are sticky; the right moment to move them is deliberate, not reactive. ⚠️ **ONE ITEM IS ALREADY WAITING AND IT IS ARITHMETIC RATHER THAN JUDGEMENT — added 2026-08-31:** the half-day-plus-overtime route is cheaper than the full-day rate at **every** session length, by $2,000 at three hours narrowing to $500 from six on, because the half-to-full step is $2,000 and three hours of overtime is $1,500. Written out in `docs/07` §Recorded dissent with the table, which is the section built for this review to test against. The **trigger** for the overtime hour is a separate open question — §9 Q59 | 2026-08-26 | D14 is priced for where the practice is going, not where it is. And the anomaly above was assigned to this reminder twice in one change set and written into neither place the reminder lives, which is the failure §12 exists to prevent |
| R6 | **Booking tool.** Parked by Pouya on 2026-08-26; `/contact/` ships with the intake form and a reserved slot for an embed | 2026-08-26 | He asked to be reminded. D10 committed to booking because it removes the back-and-forth that loses appointments — the form alone is a partial answer |
| R9 | **The SES alarms notify nobody until the `ses-alerts` email subscription is confirmed.** `SES-BounceRate-High` and `SES-ComplaintRate-High` are configured and live; the SNS email subscription to `info@smlcompany.ca` is **pending confirmation**, and an unconfirmed subscription drops every message | 2026-08-26 | A monitoring control that exists but does not deliver is worse than none, because it reads as covered. At this volume five bounces can cross the ~5% suspension threshold. Tracked in §7 and on the cutover checklist, but a one-click task nobody owns is exactly what §12 is for |
| R10 | ⚠️ **A THIRD SURFACE, 2026-08-30: `/process/` §Confidentiality renders `MEMBERSHIP_ORGS[0]` ("I am a member of the ADR Institute of Canada").** It is rendered from the constant rather than typed, so the sweep this reminder prescribes reaches it — that was `adversarial-reviewer`'s finding and the fix, in that order. **DISCHARGED AS WRITTEN 2026-08-28 — AND RE-ARMED WITH AN EVENT TRIGGER INSTEAD OF A DATE. STILL LIVE.** Pouya re-confirmed all four memberships as current (Q44), which discharges the prohibition this row carried, and `/about/` now publishes the Memberships group. **The row does not close, because he declined renewal-date tracking**, and that was his instruction for what to do about it: *"Without renewal months it cannot fire on a date, so make it fire on an event: re-confirm memberships before any cutover or major republish, and re-stamp §4 when confirmed."* **THE TRIGGER: re-confirm before any cutover, and before any major republish. Then re-stamp §4 the same day.** **His reason, kept verbatim because it is the general principle and not a membership detail:** *"§4 already carries OCNI as lapsed and unpublishable, and that was found roughly a year late. A stamp with no trigger behind it goes stale silently, which is exactly how OCNI got onto a list of things to feature."* **Two things the discharge did NOT license.** (1) **No currency warranty on the page** — list the memberships, promise nothing about their future state; the struck sentence stays struck and nothing replaces it. (2) ~~`memberOf` stays out of the JSON-LD~~**SUPERSEDED. Q53, ruled 2026-08-28: EMIT IT.** `/about/`'s Person node now carries the four memberships as `Organization` nodes. Pouya took `adversarial-reviewer`'s argument: they are already crawlable in `/about/`'s HTML, so withholding the triple reduced no exposure and only made the graph less complete than the page. **The consequence for THIS reminder is that it now covers two surfaces** — re-confirming before a cutover means `src/data/schema.ts` as well as the visible list, and they must not be allowed to diverge. **Renewal periods, stated once and not widened again:** the OBA sections and the CTF renew yearly; §4 records **nothing** about ADRIC's or ADRIO's period, and the widened form ("all four renew yearly") reached four files before it was swept. *Previous text described the prohibition and the withheld group; it held for one session and did its job.* | 2026-08-26 | A credential that lapses quietly is the failure mode §4 exists to prevent, and OCNI already did exactly this. The group is on a public page now, which raises the cost of a lapse rather than lowering it — *(This rationale ended by pointing at **Q48** as a possible widening of the row. Q48 closed 2026-08-28 as not site-relevant — ADRIO retention governs whether Pouya keeps a designation, not what the site may say about holding one — so the clause is struck. §12 is read aloud every session; a live reminder pointing at a struck row produces a false surface every time.)*, not just a list |
@@ -933,6 +934,307 @@ never being raised again.
# Change Log
## 2026-08-31 (ag) — Q58 and Q57 ruled and closed; §4's mediation row enumerates all six areas; `docs/03`'s compliance checklist stops paraphrasing §4 and cites it; and a derived fee term was struck from the one document that is the authority on money
**Four rulings from Pouya, plus what implementing them turned up.** Both of the
previous session's change sets are committed and pushed first, on his
instruction — `2ea4c0f` (the D20/Q55/Q56 rulings, 14 files, builds and passes on
its own at 12 pages) and `13b9784` (build step 6, 14 pages). The split was
prepared in the prior session and he ratified it: *"COMMIT AND PUSH both sets.
The split you prepared is correct."*
### Q58 — RULED, and Pouya attributed the ambiguity to his own document
*"The ambiguity is mine. My `docs/07` wording said 'up to 3.5 h, including 2 h
preparation', which is genuinely unclear: 3.5 was meant as the TOTAL time
committed, of which 2 is preparation — leaving 1.5 hours in the room. Your
arithmetic caught it: if prep sat inside, 3.5 and 7 wouldn't be exactly 2×,
because preparation doesn't scale with session length. The intended reading is
the market's, and my wording obscured it."*
The card now reads, in his words: **half day — up to 3 hours of session, fee
includes up to 2 hours of preparation, $2,000; full day — up to 6 hours of
session, up to 3 hours of preparation, $4,000.** His reason for 3 and 6 is the
market convention, and **`docs/07`'s own research table corroborates it** — which
is why the corroboration is recorded there rather than asserted: Patey publishes
3 h / 6 h in both tiers, Zuber 3 h video and 6 h full day, and ADR Chambers'
roster rate covers *"one half hour of preparation time per party **and** up to
three hours of mediation"*, preparation counted separately from a three-hour
session.
⚠️ **One provenance note, under R14 rather than as a doubt about the ruling.** He
recalled Patey and Zuber as publishing *"all or part of 3 hours"*. The committed
extract records their **hours** and not that phrase, so `docs/07` cites the hours
and the phrase is attributed to nobody. The hours carry the point on their own.
**Two things fell out of the ruling that the instruction did not name, and both
were defects rather than extensions.**
**(a) `docs/07` §All parameters confirmed was prescribing the flat form** —
*"must be stated on the page — 'including 2 hours of preparation'"*. That is the
sentence `/for-parties/` was built against, so **the spec was generating the
defect the same spec elsewhere forbids.** Corrected to require the cap: *"in
hours AND AS A CAP"*.
**(b) The cap had to reach the copy.** `/for-parties/` shipped *"including 2
hours of preparation"* — a flat entitlement where the allowance is capped. Now
*"including up to 2 hours of preparation"*. The session length also returned to
the page, interpolated from `FEES` rather than typed; it had been removed for one
build **only** because Q58 was open.
`FEES.mediation.*.hours` is corrected 3.5 → 3 and 7 → 6 and now means the
session. **It had no consumer in `src/` when the question was open**, which is
the only reason no page was ever wrong. `/fees/` is unblocked for step 9 on the
question Q58 asked.
### Q57 — CLOSED, and a closure is not a deferral
*"`/process/` stating when conflicts are run and what the check needs is
complete. A reader assumes the outcome, and the obvious undertaking ('if a
conflict is found I decline') adds nothing a reader doesn't already infer. Your
restraint was right — §4's gate held. Record it closed rather than open, so it
stops appearing in the live list."*
The answer is one of the two the question offered: the page says nothing further.
§4 gains no seventh undertaking; `CONDUCT_UNDERTAKINGS` still holds six. The
`TODO(pouya)` is replaced by the ruling at the place the question was, and **`src/`
now carries zero live `TODO(pouya)` markers.**
### §4's mediation row — all six areas, and the hedge struck
*"The register should match the site; 'illustrative' is a hedge covering a gap
that has a correct value. Technology and energy go in."*
Q56's ruling had named five, which was **four of the six areas plus the word
*commercial*** — a scope descriptor, not a seventh area. The row is now the
site's own six (construction, technology, energy, insurance, shareholder,
cross-cultural) and a reader comparing register against site finds them equal.
The six-area fact is stamped `[verified 2026-08-31 — Pouya]` against the row's
2026-08-26 opening stamp, on the split-stamp device this register ratified for
Q.Arb.
**The vocabulary sweep found the same hedge in `docs/03`**, which a
subject-anchored sweep would have missed:
```
$ git grep -n 'illustrative of breadth\|illustrative, not a closed' -- docs/ src/ AGENTS.md CLAUDE.md .claude/
AGENTS.md:1367:pages. The row now says the list is **illustrative of breadth, not a closed
docs/03-content-spec.md:101: matters"* — is **illustrative of breadth, not a closed set**: the site
```
`AGENTS.md:1367` is entry (ae) — append-only history, correctly left. `docs/03`
was live instruction and was corrected.
### `docs/03`'s compliance checklist — a structural fix, on the third instance
*"The checklist paraphrases §4 rows and drops qualifiers… Every time, the
checklist is what gets grepped and §4 is what's correct. So: the checklist must
CITE the §4 row, not restate it. Same single-source rule as §7 and operational
facts."*
Every item that bars something now names **what to look for on the page** and
**which §4 row decides it** — never the bar's own wording — and names the
`check:claims` pattern that sweeps `dist/` for it where one exists. **Item count
is unchanged: 12 before, 12 after.** This is a structural fix and deliberately
not a coverage change; the same discipline the frozen `check:claims` is under.
The three instances, all caught by review and never by the checklist, and in each
case §4 was right: *"no dollar figures"* for §4's *"attached to **past
matters**"*, which read as forbidding the rate card D8 commits to; *"no
testimonials"* for §4's bar on endorsements **of the practice or of Pouya**,
which read as forbidding the institutional quotations `docs/01` directs; and the
licence-capacity item, which unscoped rejected the exact sentence the section
above it exists to bless.
### An argument for the freeze, recorded because Pouya asked for it
*"That is twice the freeze has forced a copy change and twice the replacement was
better. Record that, it is an argument for the freeze."*
Both on `/med-arb/` and `/for-parties/`, `check:claims` failed the build on copy
that was **compliant on §4's wording***"my client"* used of a party, and five
uses of *"lawyer"* about the **reader**. There is no allowlist and the freeze
bars narrowing a pattern, so the copy moved instead. *"our client"* is better
than *"my client"* on a neutral's site whatever §4 says, and *"Should I get my
own legal advice?"* is better than *"Do I need my own lawyer?"* on the page
written for a party without one. **A tripwire slightly wider than the rule it
guards produces better copy at the cost of an argument you have to win twice.**
Narrowing it would have produced worse copy and a looser instrument.
### Ratified as shipped
The `/process/` contrast fix and its load-bearing `:not(.btn)`; the unrowed
terms-of-appointment claim replaced with the sourced ADRIC obligation; the
`/practice/` *"in commercial matters"* scoping breach; and the gloss lens's
fourth catch — the *"one sentence"* completeness claim, where the cited source
supplied its own counter-example.
### The review — two rounds, thirteen findings, all applied
`adversarial-reviewer` only, per D20. `claims-auditor` did **not** run and must
not until cutover. **Stopped at two rounds under D19**, and the cap is not
laxness: round 2 found five defects and **three of them were in round 1's own
fixes**, which is the measured reason round 2 exists — and past two the
manufacture rate exceeds the value of the marginal finding.
**Round 1 — seven findings, and three were mine to own.**
**(a) The sweep failure, and it is R8's sharpest edge committed two commits after
writing it into `CLAUDE.md`.** This change set wrote *"the preparation allowance
is CAPPED and must be published as capped"* into `docs/07` and applied it to one
surface. Three restatements still carried the flat or uncapped form:
`/mediation/` shipped *"with the preparation time bundled into each one stated
rather than folded into the hours"* — the *"preparation included"* form the new
rule bars, **in different words, so grepping the barred strings could never reach
it** — and its second clause described a distinction the corrected card no longer
draws; `site.ts` quoted a `docs/07` sentence that Q58 had just deleted; and
**§9's Q15/Q16/Q17 row prescribed the flat form**, which is what a later
implementer building `/fees/` reads. All three corrected.
**(b) A derived fee term asserted as applied fact in the document this file calls
the authority on money.** *"The overtime rate begins after 3 h and 6 h of session
respectively"* is nowhere in Pouya's ruling, nowhere in the card, and nowhere in
Q15Q17's answer. Struck, and opened as **Q59**. `CLAUDE.md`'s rule for a fact we
do not have is a question, not an inference — and `/fees/` had just been declared
unblocked to publish from it.
**(c) The ruling struck less than the implementation did.** Pouya replaced
*"illustrative"* with a correct value; the clause saying the six are **not** the
authorised subject-matter list went with it, in both files. That would have
withdrawn the register's support from `/practice/cross-cultural/`'s shipped
*"commercial mediations and arbitrations"*, left deliberately on the recorded
ground that Q35(c)'s class is open. Restored, and the gate noted as not spent by
having been used six times.
The other four: `/for-parties/` measured the session cap *"in the room"* two
sentences after telling a party they may never be in the same room as the other
side — `docs/07` uses a format-neutral noun for exactly that reason and the page
had not carried it over; the cost answer dropped *"of preparation"* from its
second half, where the number collides with the new session figure; the page
stated a cap with no consequence, disclosing neither overtime nor the
additional-party fee; and **D19 — 40 comment lines in `src/` for 4 functional
lines**, roughly 13 of them pure revision history.
**Round 2 — five findings and one `consider`, and the sharpest was arithmetic.**
**⚠️ THE ARITHMETIC IN ROUND 1's OWN FIX WAS WRONG, AND WRONG IN THE DIRECTION
THAT UNDERSTATED THE THING IT EXISTED TO ESCALATE.** The Q59 note generalised the
full-day route as `500n + 1000` for all `n ≥ 3`. **The route is flat $4,000 until
hour 6**, so the formula was valid only from 6 h and the stated spread — *"$500
cheaper at every length"* — was wrong across the whole 36 h band. The real
spread is **$2,000 at three hours, narrowing to $500 from six on: up to four
times larger, and largest exactly where a half-day booking overruns.** The
document's own table contradicted the formula three lines above it. Pouya was
being asked to rule on whether the half/full step is a choice, on a number wrong
in the direction that makes it look like one. *A formula is an instrument, and a
measurement is a claim about your instrument.* The claim that the envelope
trigger is *"worse, not better"* was also half wrong: it is worse at six hours
and closes to **zero** from nine.
**And round 1's fix for the missing consequence supplied the very term Q59 says
must not be inferred.** Publishing *"Overtime is $500 an hour"* on a page that
now states an unambiguous *"up to 3 hours"* **defines the trigger by adjacency**
there is no other quantity on the page for the charge to attach to, and the
answer travels alone into the `FAQPage` node where no context follows it. Under
the envelope reading a fourth hour carries nothing, so the inference makes a
party **over-state their own exposure by $500**. Same shape as D20's `/med-arb/`
ADRIC gloss: no sentence false, the defect is adjacency. **The rate came off the
page.** It now names the charge without its rate and without its trigger, and
Q59's Blocks column — which had asserted the page *"publishable as it stands"*,
closing the question against the page before Pouya read it — now names
`/for-parties/` as blocked.
**Round-1 finding (a) recurred inside its own fix.** The half/full anomaly was
assigned to R5's 12-month review **twice** and written into neither place R5
lives: not into `docs/07` §Recorded dissent — the section whose stated purpose is
*"so the 12-month review has something to test against"* — and not into §12's R5
row. Both now carry it, with the corrected table.
Also: `/mediation/`'s swept sentence claimed a disclosure it did not make — *"each
including a capped amount of preparation time, stated in hours"*, under a heading
reading **"Published in full"**, with no hours anywhere on the page, and it leaked
`docs/07`'s internal publication rule onto a public page. It now states the hours,
interpolated. And the D19 fix **did not land**: 39 comment lines for 7 functional
lines, a net reduction of one, including a block in `/for-parties/` restating the
one three lines above it, and a comment calling the overtime and additional-party
figures **"§4-publishable"** when they are D14/`docs/07` and `docs/03`'s own new
checklist item says in terms that no §4 row reaches the rate card. Folded, trimmed,
and the authority corrected.
The `consider` was taken: *"hours of session"* is an undefined unit on the page
`docs/01` requires to carry no jargon, and the page defines its other term of art.
It now reads *"up to 3 hours of mediation, a full day up to 6 hours"* — ADR
Chambers' own noun, quoted in `docs/07`, and the elided unit restored.
**Nothing was declined.** All thirteen findings and the `consider` were applied.
### Two things found by running a check rather than reading a row
**§7's TypeScript hold named one gate and there are two.** R11's check at the
step 6 → 7 boundary: 13 of 14 pins current, TypeScript the only hold.
`npm view typescript-eslint peerDependencies` returns
`{ typescript: '>=4.8.4 <6.1.0' }`, **tighter** than `@astrojs/check`'s
`^5.0.0 || ^6.0.0` — so the recorded removal trigger, *"`@astrojs/check` widens
the range to include 7"*, was **unreachable**: widening it alone would not lift
the hold. And the pin is a caret, so a future 6.1.x would move the tree into a
peer-range breach on a plain `npm install`, with nothing in the repo saying so.
Nothing is breached today: `npm ls typescript` resolves **6.0.3**, the highest
stable 6.x. Both gates are now named and the trigger requires both.
**`struck-universal-q39` is enforced on `dist/` and has no §4 row.** The bar
lives only in `scripts/check-claims.mjs` and in Q39's §9 entry, so the rewritten
`docs/03` checklist has nothing to point at and **deliberately does not carry a
line for it** — writing the bar into the checklist is the exact failure mode the
rewrite was for. Surfaced to Pouya rather than fixed: which side it gets fixed on
is his call, and it gates nothing today, so it is a note and not a numbered
question (D19).
### Verified — commands run, exit statuses read, never through a pipe
```
npm run check exit 0 0 errors / 0 warnings / 0 hints (34 files)
npm run lint exit 0
npm run build exit 0 14 pages
npm run check:claims exit 0 11 patterns, self-test clean
npm audit exit 0 0 vulnerabilities
minifier tripwire exit 1 (clean — no `animation` shorthand beside a timeline)
```
Also measured on `dist/`, not asserted: **zero `.js` files and zero `client:*`
directives**, so every page renders in full with JavaScript disabled; one `<h1>`
per page across all 14; unique title (5060) and description (143160) on every
page; canonical, 10 Open Graph and 5 Twitter tags on every page; all JSON-LD
parses, and `/for-parties/`'s `FAQPage` answers are byte-identical to the visible
copy because both come from one array. **Five distinct dangling internal links**
`/contact/`, `/fees/`, `/insights/`, `/legal/privacy/`, `/legal/terms/` — all
pages on the build order not yet built, unchanged by this change set.
**Lighthouse: NOT RUN — tool unavailable.** `@lhci/cli` returns at step 7.
### The sweeps, with the commands and their output
```
$ git grep -n 'illustrative of breadth\|illustrative, not a closed' -- docs/ src/ AGENTS.md CLAUDE.md .claude/
AGENTS.md:1367:pages. The row now says the list is **illustrative of breadth, not a closed
docs/03-content-spec.md:105: "commercial", and this block called the list "illustrative of breadth, not a
```
`AGENTS.md:1367` is entry (ae) — append-only, correctly untouched. `docs/03:105`
is the labelled historical note that replaced the live instruction.
```
$ git grep -c 'TODO(pouya):' -- src/
(exit 1 — no matches)
$ awk '/^## Compliance checklist/,0' docs/03-content-spec.md | grep -c '^- \[ \]'
12 # HEAD: 12. Structural fix, not a coverage change.
```
⚠️ **And the sweep that mattered was the one round 1 caught me not running** — the
capped-form rule, swept by its **vocabulary** rather than by the barred strings,
because `/mediation/`'s breach used none of them.
---
## 2026-08-30 (af) — Build step 6: `/process/` and `/for-parties/`, the first step under D20 — and the frozen `check:claims` failed the build on compliant copy, which is the freeze working
**Two pages, 14 in `dist/` (was 12), zero JavaScript, one `<h1>` each, no skipped
+18 -8
View File
@@ -253,14 +253,24 @@ anything you pass as flags, and re-check any result whose shape is "uniformly
bad".
**And re-check "uniformly GOOD" too — that is the dangerous half.** *Added
2026-08-30.* The same `set -- $pair` loop recurred while confirming nine restored
files matched a saved copy, and this time it printed **`same` on all nine**:
`shasum` was handed both filenames as one argument, errored, and left both
variables empty, so `"" = ""` passed. **The `DIFFER` version announces itself
because it is alarming; a false pass is the answer you wanted and it ends the
check.** A comparison must **assert that both things it compares exist** before
comparing them, and `git grep` silently misses untracked files — so a clean sweep
across new work means nothing until the files are staged.
2026-08-30; sharpened on Pouya's instruction 2026-08-31, as "the sharpest
instrument finding yet".* The same `set -- $pair` loop recurred while confirming
nine restored files matched a saved copy, and this time it printed **`same` on
all nine**: `shasum` was handed both filenames as one argument, errored, and left
both variables empty, so `"" = ""` passed.
**The distinguishing property, and it is the whole rule: a broken verification
that fails loudly is safe; one that passes uniformly is not.** `DIFFER` on every
row announces itself — it is alarming, so it starts an investigation, and the
investigation finds the broken loop. A uniform pass is **the result you were
hoping for, so it ends the check** instead of starting one. The two failures come
from the identical bug and only one of them is survivable.
So a comparison must **assert that both things it compares exist** before
comparing them — that is the assertion the shell loop skipped, and it is what
turns this class of bug back into the loud kind. Note the same hole in `git grep`:
it silently misses untracked files, so a clean sweep across new work means
nothing until the files are staged.
**A parent cannot style a child component's root element.** Astro does not pass
a parent's scope attribute down, so `<Button class="header-cta" />` compiles the
+92 -54
View File
@@ -96,12 +96,22 @@ detect padding instantly and discount everything after it.
DO NOT MIRROR THIS SCOPE ONTO MEDIATION.** The scope above exists because of a
**legal gate**: family arbitration in Ontario requires prescribed training, so
"in commercial matters" is load-bearing there. **Mediation has no such gate,
§4's mediation row is unscoped on purpose.** Pouya's list of what he mediates
— *"commercial, construction, insurance/SABS, shareholder and cross-cultural
matters"* — is **illustrative of breadth, not a closed set**: the site
publishes **six** areas and every one of them offers mediation
(`src/data/practice-pages.ts`), technology and energy included. Do not read it
as the authorised subject-matter list; §4's Q35 gate governs that.
§4's mediation row is unscoped on purpose.** **He mediates in all six published
practice areas** — construction, technology, energy, insurance, shareholder,
cross-cultural — and §4's row now enumerates them (`PRACTICE_AREAS` in
`src/data/site.ts`), each named under **Q35(c)'s subject-matter publication
gate**. ⚠️ **The six are the PUBLISHED areas, not the authorised
subject-matter list, and Q35(c)'s gate is not spent by having been used six
times.** A seventh may be named where it clears that gate.
*(Q56's ruling had named five, which was four of the six areas plus the word
"commercial", and this block called the list "illustrative of breadth, not a
closed set" for one day. Pouya struck the hedge on 2026-08-31: "the register
should match the site; 'illustrative' is a hedge covering a gap that has a
correct value." Technology and energy are the two that were missing. The
non-exhaustiveness clause was struck with the hedge in the same pass and
restored the same day — his ruling supplied a correct value, it did not close
the class.)*
The site-wide *"Commercial Mediation"* framing was **under-describing the
offering**, and it was corrected rather than ratified as positioning. The
@@ -461,57 +471,85 @@ Drafted by Claude, **every word reviewed by Pouya before publication**:
## Compliance checklist — before any page ships
⚠️ **EVERY ITEM HERE THAT BARS SOMETHING CITES ITS `AGENTS.md` §4 ROW. IT DOES
NOT RESTATE IT — STRUCTURAL FIX, Pouya, 2026-08-31, after the third instance.**
His ruling: *"the checklist must CITE the §4 row, not restate it. Same
single-source rule as §7 and operational facts."* **This file is what gets
grepped; §4 is what is correct.** Three times a line here paraphrased a §4 row,
dropped a qualifier, and then flagged the copy a spec **requires** — *"no dollar
figures"* for §4's *"attached to **past matters**"*, which forbade the rate card
D8 commits to; *"no testimonials"* for §4's bar on endorsements **of the practice
or of Pouya**, which forbade the institutional quotations `docs/01` directs; and
the licence-capacity item, which rejected the exact sentence the section above
exists to bless. Each was caught by review, never by the checklist, and the row
was never wrong.
**So an item below names what to look for on the page, and which row decides it.
Not both halves of the rule.**
- [ ] Every factual claim appears in `AGENTS.md` §4 Verified
- [ ] No matter counts, settlement rates, claimed matter values, or
time-to-award stats. ⚠️ **SCOPED 2026-08-30, and it read "dollar figures"
until then.** What this bars is the **fabricated-statistic family** the old
site carried — *"420+ matters"*, *"$3.8B resolved"*, *"93% settled"*. It
does **not** bar the **rate card**: D8 commits to publishing it in full and
D14 confirms the numbers `[verified 2026-08-26 — Pouya]`, so `/fees/`
publishes all of them and `/for-parties/` publishes the two mediation rates
because `docs/01` requires that page to answer *"what it costs"*. Read
literally, the old wording forbade the page the architecture spec commits
to. **§4's own row was never wrong** — it reads *"Aggregate value resolved;
any dollar figure attached to **past matters**"*, and this checklist
dropped the qualifier when it mirrored it. A duplicated fact is a fact that
will eventually be wrong in one place, and the copy that goes stale is the
one nobody re-reads. **Third instance of an unscoped checklist line flagging the copy the
spec requires** — the other two are the testimonials item
immediately below and the capacity-phrasing item further down, and in both
cases the checklist is what gets grepped
- [ ] No testimonials, endorsements, or third-party quotes **about the practice
or about Pouya**. Scope matters: `docs/01` §`/med-arb/` **directs** the page
to quote ADRIC's own framing of med-arb, and `/mediation/` and
`/arbitration/` name published rule sets. Quoting an institution about
**its own rules**, from a committed source, is not an endorsement — and an
unscoped version of this line flags the copy the spec requires. Same shape
as the "legal advice" item corrected on 2026-08-28, in the file that gets
grepped. **Keep the source's superlatives inside the quotation marks**
- [ ] No superlatives and no guarantee language
- [ ] No claim or implication of legal licensure anywhere (D13)
- [ ] 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
- [ ] **Numbers that describe the practice** — any count, rate, percentage, time
or dollar figure about matters, hours, years, or outcomes. Decided by §4
Forbidden's *counts of matters closed / hours mediated / years in ADR
practice*, *settlement rates, resolution percentages, median time to
award*, *aggregate value resolved; any dollar figure attached to past
matters*, and *named or describable past matters*. `npm run check:claims`
`counts-and-tenure` sweeps `dist/`. ⚠️ **The rate card is a different
thing and no row reaches it:** D8 commits to publishing it in full, D14
confirms the figures `[verified 2026-08-26 — Pouya]`, and `docs/01`
requires `/for-parties/` to answer *"what it costs"*. A published **price**
is an offer; a published **statistic about past matters** is what the old
site fabricated
- [ ] **Third-party voices** — decided by §4 Forbidden's *testimonials,
endorsements, quotes from counterparties*. ⚠️ **Scope is the whole
question:** that row reaches a third party praising the practice or Pouya.
It does not reach an institution quoted **about its own rules**, from a
committed source — which `docs/01` §`/med-arb/` **directs**, and which
`/mediation/`, `/arbitration/` and `/process/` all do. **Keep the source's
superlatives inside the quotation marks**
- [ ] **Superlatives and guarantee language** — decided by §4 Forbidden's
*guarantees of outcome, or superlatives*. `check:claims` `superlatives`
sweeps `dist/`
- [ ] **Licensure, asserted or implied** — decided by §4 Forbidden's two
licensure rows and D13. The second of the two is the one that catches
copy: it reaches phrasing that *implies* entitlement without saying so.
`check:claims` `licensure-of-pouya` and `acting-for-a-party` sweep `dist/`
- [ ] **The licence-capacity question answered in EITHER direction** — see *When
a fact is `[unestablished]`* above, and §4's own note that its two
licensure rows are verified **directives not to publish**, not a verified
status. Check for *cannot*, *do not*, *am not*, *not permitted*, *not
qualified* **attached to giving legal advice, practising law, or holding a
licence.** ⚠️ **The objection is to answering the capacity question, not
to the words themselves** — the approved sentence contains "do not" and
passes: *"I act as a neutral. I do not act for a party in a matter I take,
and each party should have their own legal advice."* That is **role
conduct**, which he may state freely. `check:claims` `capacity-phrasing`
sweeps `dist/`
- [ ] **Q.Arb** — decided by §4's Q.Arb Verified row and its Forbidden row. The
publishable form is `Q.Arb (ADRIC / ADRIO)`; the acquisition date is
recorded in §4 and is not published. `check:claims` `q-arb-as-a-stage`
enforces the stage words and a date near the designation, 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 belongs to the cutover claims pass, not to this checklist
- [ ] **C.Med-Arb appears nowhere** — decided by §4's struck *C.Med-Arb as a
long-term designation goal* row, which carries the reasoning and the
deliberate deviation from the strategy brief. `check:claims`
`c-med-arb-struck` sweeps `dist/`
- [ ] **A firm, a team, or offices that do not exist** — §4 Forbidden rows the
specific false artefacts (*"Since 2009"*, *"sixteen years"*, the London
and New York offices, the company number, and the fictitious founder);
the general rule is **D16** — the boutique is never named, and the
publishable form is *Director of Firm Operations at a Toronto litigation
and ADR boutique*. `check:claims` `fabricated-founder` sweeps `dist/`
- [ ] Contact page states that an inquiry creates no retainer and no
mediatorparty relationship
- [ ] Any comparative claim is factual and verifiable
- [ ] No sentence answers the licence-capacity question in **either** direction —
see *When a fact is `[unestablished]`* above. Check for *cannot*, *do not*,
*am not*, *not permitted*, *not qualified* **attached to giving legal
advice, practising law, or holding a licence.** The objection is to
answering the *capacity* question, not to the words themselves — the
approved sentence contains "do not" and passes: *"I act as a neutral. I do
not act for a party in a matter I take, and each party should have their
own legal advice."* That is **role conduct**, which he may state freely.
*(This item shipped unscoped for one pass and `adversarial-reviewer` showed
it would fail the exact sentence the section exists to bless — and the
checklist is what gets grepped.)*
- [ ] Any comparative claim is factual and verifiable — **Q41(b), closed
2026-08-27**, which struck a comparative claim about other neutrals from
this file's own positioning statement. Pouya: *"comparative claims must be
factual and verifiable… assert his capability, not the field's
incapability."*
- [ ] Abbreviations expanded on §11 Glossary's authority only — and expansions
for the five ADR designations checked against
`docs/reference/adrio-designations.md`, not from memory. "Chartered
+123 -4
View File
@@ -97,11 +97,95 @@ All figures **plus HST**.
| Item | Fee |
|---|---|
| Half day — up to 3.5 h, including 2 h preparation | **$2,000** |
| Full day — up to 7 h, including 3 h preparation | **$4,000** |
| Half day — up to 3 hours of session. Fee includes up to 2 hours of preparation | **$2,000** |
| Full day — up to 6 hours of session. Fee includes up to 3 hours of preparation | **$4,000** |
| Each party beyond two | **$500** |
| Overtime, per hour | **$500** |
⚠️ **THE TWO ROWS ABOVE WERE AMBIGUOUS UNTIL 2026-08-31, AND THE AMBIGUITY WAS
IN THIS DOCUMENT RATHER THAN IN ANY COPY — Q58, ruled by Pouya.** They read
*"Half day — up to 3.5 h, including 2 h preparation"* and *"Full day — up to
7 h, including 3 h preparation"*. Read literally that makes 3.5 the **whole
billed envelope** and the time in the room **1.5 h**. Pouya's ruling: *"3.5 was
meant as the TOTAL time committed, of which 2 is preparation — leaving 1.5 hours
in the room… The intended reading is the market's, and my wording obscured
it."*
**What found it was arithmetic, not reading:** 3.5 and 7 are exactly 2×, which
they would not be if preparation sat inside them, **because preparation does not
scale with session length**. Under the literal reading the room time was 1.5 h
and 4 h, which is not 2× anything.
**The corrected numbers are corroborated by this file's own research table**, one
section up — which is the reason they are 3 and 6 rather than a round guess:
- **Patey** publishes **3 h** half-day and **6 h** full-day in *both* tiers.
- **Zuber** publishes **3 h** video half-day and **6 h** full day.
- **ADR Chambers**' roster rate covers *"one half hour of preparation time per
party **and** up to three hours of mediation"* — preparation counted
**separately from** a three-hour session, which is the shape this card now
has.
Pouya: *"Selling 1.5 hours of room time as a half day would be an outlier nobody
would recognise."* ⚠️ **One provenance note, because this file is the authority
on money:** he recalled Patey and Zuber as publishing *"all or part of 3 hours"*.
The extract above records their **hours** but not that phrase, so **the hours are
what this file relies on** — do not quote the phrase as theirs.
**THE PREPARATION ALLOWANCE IS CAPPED, AND MUST BE PUBLISHED AS CAPPED.**
*"Including **up to** 2 hours of preparation."* Never *"including 2 hours"*,
which reads as a flat entitlement, and never *"preparation included"*, which
sells an uncapped one. See §All parameters confirmed below.
**Consequences, applied 2026-08-31:** `FEES.mediation.*.hours` in
`src/data/site.ts` means the **session** and is corrected 3.5 → 3 and 7 → 6, and
**`/fees/` is unblocked for build step 9** on the question Q58 asked.
⚠️ **BUT WHERE OVERTIME BEGINS IS STILL NOT STATED, AND IT IS NOT SAFE TO INFER
— §9 Q59, OPEN.** A first pass at this paragraph asserted that *"the overtime
rate begins after 3 h and 6 h of session respectively"*. **That is a derived fee
term, not part of the ruling**, and `adversarial-reviewer` was right to strike
it: this file is the authority on money and `/fees/` is now cleared to publish
from it. Nothing in the card, in Q58's ruling, or in Q15Q17's answer says when
the hourly rate starts.
**And the reason it cannot be quietly chosen is that the choice is visible in the
arithmetic.** Take the trigger as the session cap. The half-day route costs
`2000 + 500 × max(0, n 3)`; the full-day route is **flat $4,000 until hour 6**
and `4000 + 500 × (n 6)` after it:
| Session run to | Book a half day + overtime | Book a full day | Gap |
|---|---|---|---|
| 3 h | **$2,000** | **$4,000** | **$2,000** |
| 4 h | $2,000 + 1 × $500 = **$2,500** | **$4,000** | **$1,500** |
| 5 h | $2,000 + 2 × $500 = **$3,000** | **$4,000** | **$1,000** |
| 6 h | $2,000 + 3 × $500 = **$3,500** | **$4,000** | **$500** |
| 7 h | $2,000 + 4 × $500 = **$4,000** | $4,000 + 1 × $500 = **$4,500** | **$500** |
**Booking a half day and paying overtime is cheaper at every length — by $2,000
at three hours, narrowing to $500 from six hours on — and the full-day rate is
never the cheaper choice.** The gap is in D14's figures rather than in the
trigger: the half-to-full step is $2,000 and three hours of overtime is $1,500.
⚠️ **A FIRST PASS AT THIS PARAGRAPH GOT THE ARITHMETIC WRONG, AND WRONG IN THE
DIRECTION THAT MATTERED.** It generalised the full-day route as `500n + 1000` for
all `n ≥ 3`, which is **only valid from hour 6** — the route is flat until then —
and concluded *"$500 cheaper at every length"*. The real spread is **up to four
times larger and is largest at three to five hours, which is the band a half-day
booking actually overruns into.** The document's own table contradicted the
formula three lines above it. Found by `adversarial-reviewer` on round 2, in the
change set that wrote it. *A measurement is a claim about your instrument, and a
formula is an instrument.*
**Moving the trigger out to the 5 h / 9 h billed envelope does not fix it and is
not uniformly better either** — the gap stays at $2,000 through five hours and is
$1,500 at six, worse than the session-cap trigger there, but it closes to **zero**
from nine hours on, where the session-cap trigger holds a permanent $500. So the
two triggers trade one band against another and neither removes the anomaly. **It
is not a defect this file can fix by picking a trigger, which is why the trigger
goes to Pouya and the step goes to R5** — see §Recorded dissent below, where it is
written out for the 12-month review rather than left in this footnote.
### Arbitration
Sole, party-appointed and co-arbitration appointments **in commercial matters**
@@ -182,10 +266,16 @@ page is an offer.
### All parameters confirmed
Q15, Q16, and Q17 were closed on 2026-08-26. **Preparation time is bundled and
must be stated on the page** — "including 2 hours of preparation", "including
3 hours of preparation". Do not quietly fold it into the hours figure. At these
must be stated on the page, IN HOURS AND AS A CAP** — "including **up to** 2
hours of preparation", "including **up to** 3 hours of preparation". Do not
quietly fold it into the session figure, and do not drop the "up to": the
allowance is capped, so the unqualified form sells an uncapped one. At these
rates, saying preparation is included is the selling point, not a footnote.
*(The "up to" was added 2026-08-31 with Q58's ruling. This paragraph previously
prescribed the flat form, and `/for-parties/` shipped it — the one page written
for a reader with no counsel to catch it.)*
---
## Recorded dissent — for the 12-month review (R5)
@@ -227,6 +317,35 @@ unrecoverable, and it is far easier to add a lower tier later than to raise a
headline rate. Setting the ceiling first and discounting privately preserves
more optionality than the reverse.
**And a fourth item, added 2026-08-31: the half-day-plus-overtime route is
strictly cheaper than the full-day rate, at every session length.** This is the
one item in this section that is arithmetic rather than judgement, so it is the
one the review can settle without new market data.
| Session run to | Half day + overtime | Full day | Gap |
|---|---|---|---|
| 3 h | $2,000 | $4,000 | **$2,000** |
| 4 h | $2,500 | $4,000 | **$1,500** |
| 5 h | $3,000 | $4,000 | **$1,000** |
| 6 h | $3,500 | $4,000 | **$500** |
| 7 h | $4,000 | $4,500 | **$500** |
*(Session-cap trigger; the trigger itself is `AGENTS.md` §9 **Q59**, open.)* The
cause is the relationship between two of D14's own numbers rather than anything
about the trigger: **the half-to-full step is $2,000 and three hours of overtime
is $1,500.** Any trigger leaves a gap; the envelope trigger closes it only from
nine hours on.
**What the review has to decide is whether that is a choice.** It is defensible
as one — a full-day booking buys certainty and a reserved diary, and a client who
knows they need six hours may prefer to pay $500 for not having to watch the
clock. It is also exactly the kind of thing counsel comparing published cards
finds in under a minute, and this practice's whole pricing argument is that the
card is published in full and means what it says. **The lever, if it is not a
choice:** either raise the overtime rate so the routes converge, or narrow the
half-to-full step. Both are rate moves, which is why they belong here and not in
a footnote to the card.
---
## Sources
+17 -18
View File
@@ -481,20 +481,19 @@ export const FEES = {
currency: 'CAD',
taxNote: 'All fees are plus HST.',
mediation: {
/** Prep is bundled AND stated IN HOURS on the page — [verified 2026-08-26].
* `docs/07`: *"'including 2 hours of preparation'… Do not quietly fold it
* into the hours figure."* The allowance is CAPPED, so the unqualified
* "preparation included" sells an uncapped one. `/for-parties/` shipped
* that form for one pass and `prepIncluded` had no consumer anywhere.
/**
* TWO SEPARATE ALLOWANCES, AND BOTH PUBLISH AS A CAP — Q58, 2026-08-31.
* `hours` is the **session**; `prepIncluded` is preparation, bundled but
* capped. `docs/07` requires each published as a cap and with its noun:
* *"up to 3 hours of session"*, *"including up to 2 hours of preparation"*.
* A flat "including 2 hours" sells an entitlement and a bare "preparation
* included" sells an uncapped allowance.
*
* ⚠️ `hours` IS NOT DOCUMENTED AS THE LENGTH OF THE DAY — §9 Q58, OPEN.
* `docs/07`'s card reads "Half day — up to 3.5 h, INCLUDING 2 h
* preparation", which makes 3.5 the billed envelope and the room time
* 1.5 h. Against that: 3.5 and 7 are exactly 2×, which they would not be
* if prep sat inside them. One of the two is wrong. **Do not publish this
* number as a duration until Q58 is answered.** */
halfDay: { amount: 2000, hours: 3.5, prepIncluded: 2 },
fullDay: { amount: 4000, hours: 7, prepIncluded: 3 },
* ⚠️ WHERE OVERTIME STARTS IS NOT SETTLED — §9 Q59, OPEN. `overtimePerHour`
* may be published; the trigger may not.
*/
halfDay: { amount: 2000, hours: 3, prepIncluded: 2 },
fullDay: { amount: 4000, hours: 6, prepIncluded: 3 },
additionalParty: 500, // each party beyond two
overtimePerHour: 500, // [verified 2026-08-26]
},
@@ -763,11 +762,11 @@ export type _DesignationRowParity = _AssertTrue<
* "Binding conclusion" alone would read as though a mediation binds, which it
* does not until the parties sign.
*
* NO FEE CLAIM IN ANY BODY. `docs/07` bundles a CAPPED preparation allowance
* (2 h in the half day, 3 h in the full day) and says in terms that it "must be
* stated on the page... Do not quietly fold it into the hours figure." A
* five-word strip cannot state it properly, and stating it improperly
* misdescribes money. `/fees/` at step 9.
* NO FEE CLAIM IN ANY BODY. `docs/07` §All parameters confirmed requires the
* bundled preparation allowance published **in hours and as a cap**, and a
* five-word strip cannot do that. Stating it improperly misdescribes money.
* `/fees/` at step 9. (Cited, not quoted — the quotation that stood here went
* stale when Q58 corrected the section it came from.)
*/
export const PROCESS = [
{
+17 -20
View File
@@ -28,25 +28,22 @@
* page genuinely is Q&A" — so a question cannot reach the structured data
* without appearing on the page, and the two cannot drift.
*
* ⚠️ THE FEE FIGURES ARE INTERPOLATED FROM `FEES`, NOT TYPED. D14's card is one
* source; a second hand-typed copy on the page a party reads is the copy that
* goes stale, and it goes stale silently.
* ⚠️ EVERY FEE FIGURE AND EVERY DURATION IS INTERPOLATED FROM `FEES`, NEVER
* TYPED — a second hand-typed copy on the page a party reads is the one that
* goes stale, silently. The two allowances are different things: `hours` is the
* session, `prepIncluded` is preparation, and `docs/07` requires each published
* as a cap with its own noun. **The unit here is "hours of mediation", not
* "of session"** — `docs/01` bars jargon on this page and this page defines its
* other term of art; the plainer noun is ADR Chambers' own, quoted in `docs/07`.
*
* ⚠️ AND THE BUNDLED PREPARATION IS STATED IN HOURS, NEVER AS "PREPARATION
* INCLUDED". `docs/07` §All parameters confirmed is explicit: *"Preparation time
* is bundled and MUST be stated on the page — 'including 2 hours of
* preparation'… Do not quietly fold it into the hours figure."* The allowance is
* CAPPED, so the unqualified form sells an uncapped one. This page shipped
* "with preparation included" for one pass; `adversarial-reviewer` found it, and
* `prepIncluded` had been declared in `site.ts` with no consumer anywhere.
*
* ⚠️ AND THIS PAGE DOES NOT STATE HOW LONG A MEDIATION DAY IS — see §9 Q58.
* `docs/07`'s card reads *"Half day — up to 3.5 h, INCLUDING 2 h preparation"*,
* which makes 3.5 the billed envelope and the room time 1.5 h. `FEES.mediation
* .halfDay.hours` documents neither reading. A draft answered "what happens on
* the day" with "about 3.5 hours", which is the envelope presented as the day,
* to the reader least able to check it. Do not restore a duration here until
* Q58 is answered.
* ⚠️ AND NO OVERTIME FIGURE ON THIS PAGE UNTIL §9 Q59 IS ANSWERED. The rate is
* publishable (D14, `docs/07` — **not** §4, which has no row reaching the rate
* card). **The point at which overtime STARTS is not settled**, and $500 an hour
* printed two answers below an unambiguous "up to 3 hours" defines it by
* adjacency: there is no other quantity on the page for it to attach to. Under
* the envelope reading a fourth hour carries nothing, so the inference
* over-states a party's own exposure — and it also travels alone into the
* `FAQPage` node. So the charge is named without its rate or its trigger.
*/
import BaseLayout from '../layouts/BaseLayout.astro';
import Button from '../components/Button.astro';
@@ -88,7 +85,7 @@ const FAQ = [
},
{
q: 'What happens on the day?',
a: 'I usually start with everyone in one room. After that the parties often sit separately and I move between them. Some matters run that way from the beginning, with the parties never in the same room. You book either a half day or a full day, and which one you need is settled before the date is fixed.',
a: `I usually start with everyone in one room. After that the parties often sit separately and I move between them. Some matters run that way from the beginning, with the parties never in the same room. You book either a half day or a full day. A half day is up to ${FEES.mediation.halfDay.hours} hours of mediation, a full day up to ${FEES.mediation.fullDay.hours} hours. Which one you need is settled before the date is fixed.`,
},
{
q: 'Does what I say stay private?',
@@ -100,7 +97,7 @@ const FAQ = [
},
{
q: 'What does it cost, and who pays?',
a: `${money(FEES.mediation.halfDay.amount)} for a half day, including ${FEES.mediation.halfDay.prepIncluded} hours of preparation, and ${money(FEES.mediation.fullDay.amount)} for a full day, including ${FEES.mediation.fullDay.prepIncluded} hours. ${FEES.taxNote} ${FEES.terms[0]}`,
a: `${money(FEES.mediation.halfDay.amount)} for a half day, including up to ${FEES.mediation.halfDay.prepIncluded} hours of preparation, and ${money(FEES.mediation.fullDay.amount)} for a full day, including up to ${FEES.mediation.fullDay.prepIncluded} hours of preparation. Each party beyond two is ${money(FEES.mediation.additionalParty)}, and if a mediation runs beyond the time the fee covers there is an hourly charge as well. ${FEES.taxNote} ${FEES.terms[0]}`,
},
{
q: 'What if we do not settle?',
+7 -14
View File
@@ -438,20 +438,13 @@ const graph = homeGraph(new URL(ldImage.src, Astro.site).href);
<a href="/mediation/">Mediation</a>
</h3>
{
/* THE FEE CLAIM IS GONE, and it was wrong on two counts —
`claims-auditor`, 2026-08-27, checked against `docs/07-fees.md`.
"at one published rate" reads as ONE PRICE for half and full day;
D14's card sets TWO ($2,000 half, $4,000 full). And "preparation
time included" was unqualified where `docs/07` bundles a CAPPED
allowance and says in terms: *"must be stated on the page —
'including 2 hours of preparation' ... Do not quietly fold it into
the hours figure. At these rates, saying preparation is included
is the selling point, not a footnote."*
A home card is the wrong place to state it properly, and stating
it improperly misdescribes money. `/mediation/` (step 4) and
`/fees/` (step 9) carry the card. "Published" was also
forward-looking: `/fees/` does not exist yet. */
/* NO FEE CLAIM ON THIS CARD — a constraint, not an omission.
There are two ways to get it wrong in one line and both have
shipped once: "at one published rate" reads as ONE price where
D14's card sets two, and an unqualified "preparation included"
sells an uncapped allowance where `docs/07` caps it at stated
hours. A card this size cannot state either properly.
`/mediation/` and `/fees/` carry the card. */
}
<p class="feature-body">
Sole mediator, Q.Med through ADRIC and ADRIO, with multiple
+7 -3
View File
@@ -21,6 +21,7 @@ import { serviceGraph } from '../data/schema';
import {
CONDUCT_UNDERTAKINGS,
CREDENTIAL_ROW,
FEES,
NEUTRAL_ROLE_LINE,
PRACTICE_AREAS,
} from '../data/site';
@@ -272,9 +273,12 @@ const FORMATS = [
</div>
<div class="prose">
<p>
Half day and full day, with the preparation time bundled into each one
stated rather than folded into the hours. Additional parties, overtime
and the cancellation schedule are on the same page.
Half day and full day, including up to {
FEES.mediation.halfDay.prepIncluded
} hours of preparation in a half day and up to {
FEES.mediation.fullDay.prepIncluded
} in a full day. Additional parties, overtime and the cancellation schedule
are on the rate card.
</p>
</div>
<div class="cta">
+5 -5
View File
@@ -15,7 +15,7 @@
* ⚠️ AND NOTHING ON THIS PAGE MAY ADD A SEVENTH. §4's gate: an undertaking is
* publishable only where Pouya has made it **in terms** — not "would obviously
* agree to", not "follows from the process". That is why §Conflicts says when
* the check happens and what it needs, and then stops. See the TODO below.
* the check happens and what it needs, and then stops — Q57, closed 2026-08-31.
*/
import BaseLayout from '../layouts/BaseLayout.astro';
import Button from '../components/Button.astro';
@@ -94,10 +94,10 @@ const graph = pageGraph(new URL(ldImage.src, Astro.site).href);
{/* ---- 3. Conflicts --------------------------------------------------- */}
{
/* TODO(pouya): what happens when a conflicts check turns something up? Any
sentence naming the outcome is a SEVENTH conduct undertaking, and §4's
gate requires that you have made it in terms — so it is not written here.
AGENTS.md §9 Q57. */
/* THE SECTION STOPS AT WHAT THE CHECK NEEDS, AND THE STOP IS THE ANSWER —
Q57, closed 2026-08-31. A sentence naming the outcome would be a seventh
conduct undertaking, which §4's gate does not permit this repository to
infer. Do not add one. */
}
<section class="section reveal">
<div class="wrap">