feat: build step 3 — /about/, minus its memberships; close Q40–Q43
Build and deploy / build-and-deploy (push) Failing after 6s

Applies Pouya's rulings on Q42, Q41(a)(b)(c), Q43 and Q40, then builds
`/about/` — six of docs/01's seven items.

`/about/` ships WITHOUT a memberships group. R10 is a prohibition on
shipping a page that lists memberships before they are re-confirmed; the
re-confirmation is a fact only Pouya holds and was not obtained. The
first version published all four and disclosed the gap in five places
instead; both review agents rejected that. Q44 carries the question.

Rulings:
- Q42 — ENE, dispute-system design and pre-dispute technical advisory
  rowed; settlement counsel struck as a partisan role. The strike
  exposed a hole in the offering test, which now states the prior
  question it was missing.
- Q41(a) — Q37 reaches prose, and prose is held to a higher bar. The
  sentence is now one constant, ASYMMETRY_LINE, because two hand-typed
  copies had already diverged inside one session.
- Q41(b) — not restored; the implication turned out to be in three
  places, two of which survived the sweep that closed it.
- Q41(c) — verified against the LAT's own Rules and extracted into
  docs/reference/lat-case-conference.md. Rule 2.4 makes "Pre-Hearing
  Conference" the Tribunal's own term for a case conference; the Rules
  contain zero occurrences of `mediat` in 66,593 characters.
- Q43 — the timings are service commitments; PROCESS_FRAMING renders
  adjacent to them, not in a lede above.
- Q40 — bundled to step 7 as R15, blocking cutover.

Four review passes, 43 findings, nine of them defects in their own
predecessors' fixes. The worst was mine: the false universal Q39 struck
reached a public page. Also fixed a portrait ladder that upscaled 1.93x
at 1024/DPR2 on BOTH pages — the shipped home page included — because
its 960 ceiling was derived from the layout range where the image is
narrowest.

Verified: check/lint/build/audit clean; 0 upscaling across 11 device
profiles; 0 overflow and 0 over-wide elements at 13 widths; 0 contrast
failures across 127 and 88 painted pairs; 0 print failures against white
paper; reveal 0 hidden under reduced-motion and print; zero JavaScript.
Lighthouse NOT RUN — tool unavailable until step 7 (R11). HTML validator
NOT RUN.

Opens Q44 (memberships), Q45 (PDF bio), Q46 (offering-test gating; the
glossary standard), Q47 (jobTitle without worksFor). Adds R15.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0148NztQskLKKApP5SzAA78e
This commit is contained in:
Pouya Lajevardi
2026-08-28 12:10:41 -04:00
co-authored by Claude Opus 5
parent 165d259f5c
commit c576b9a85f
17 changed files with 2603 additions and 147 deletions
+466 -8
View File
@@ -290,8 +290,12 @@ appointments now**, and that — his acceptance — is what the rows below recor
> everything by saying nothing.
**Scope: an offering is a PROCESS the practice conducts** — mediation,
arbitration, med-arb, early neutral evaluation, settlement counsel,
dispute-system design, pre-dispute technical advisory. Each needs its own row.
arbitration, med-arb, early neutral evaluation, dispute-system design,
pre-dispute technical advisory. Each needs its own row.
*`settlement counsel` was in this enumeration until 2026-08-27 and is removed
from it, not merely left unrowed: it is **not a process this practice conducts**
at all. See the struck row in the Offerings table — Q42.*
**A subject-matter area is NOT an offering.** *Construction*, *technology*,
*energy*, *insurance*, *shareholder*, *cross-cultural* are the contexts in which
@@ -341,6 +345,10 @@ never be read as one:
| **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 |
| **Med-Arb** — mediation-arbitration | `[verified 2026-08-27 — Pouya, Q35]`. Offered **now**. Both halves are live: Q.Med is held, and arbitration appointments are accepted (rows above). Ungated by the same reasoning as arbitration. This closes the "Still unanswered" note that used to sit below this table, and it is why `/med-arb/` may stay in the footer sitemap |
| ~~**Family arbitration** under the *Family Law Act*~~ | **NOT OFFERED — a scope exclusion, not a gating problem** `[verified 2026-08-27 — Pouya, Q39]`. Pouya has confirmed he does not do family arbitration. It is therefore out of scope by his choice, and the prescribed-training question never arises for this practice. Recorded because the register reasoned from a false universal for one day and must not do so again — see the box above and `docs/reference/ontario-family-arbitration-training.md`. **`Shareholder & Family Business` does not touch this:** it means commercial disputes among family shareholders — shareholder and partnership disputes, co-founder breakdowns, business succession — and its page must say plainly that family law matters are not accepted |
| **Early neutral evaluation (ENE)** | ⚠️ **COMPETENCE ANSWERED; GATING NOT ANSWERED — NOT YET PUBLISHABLE.** Question 2: *"A neutral assessment of merits sits inside a Q.Med's competence"* `[Pouya's stated basis 2026-08-27, Q42]`. Question 1 — **is the activity gated?** — is `[unestablished]`. An earlier version of this row read *"Ungated on the same footing as mediation — no designation is required to give a non-binding evaluation"* under a `[verified — Pouya]` stamp. That is **a proposition of Ontario law inside a stamp §4 says cannot carry one**, and it was the register doing exactly what the box above warns against, one paragraph after warning against it. Struck by `claims-auditor` on two consecutive passes. **ENE is also the offering nearest the gated side of the boundary** — a neutral assessment of the *merits*, delivered to parties — so it is the one that most needs a source rather than an assertion. Q46. Priced hourly in `docs/07-fees.md`, which is a fee-page question, not a publication licence |
| **Dispute-system design** | ⚠️ **COMPETENCE ANSWERED; GATING NOT ANSWERED — NOT YET PUBLISHABLE.** Question 2: *"Consulting, no appointment, no neutrality question"* `[Pouya's stated basis 2026-08-27, Q42]`. **That sentence answers neutrality, not gating**, and an earlier version of this row presented it as though it answered both. Question 1 is `[unestablished]` and is not his to answer. Q46 |
| **Pre-dispute technical advisory** | ⚠️ **COMPETENCE ANSWERED; GATING NOT ANSWERED — NOT YET PUBLISHABLE.** Question 2, in three words: *"It is the moat"* `[Pouya's stated basis 2026-08-27, Q42]`. Question 1 is `[unestablished]`. Q46. **Caution that belongs with the row regardless:** advisory work for one organisation is the one item in this table that can create a conflict against a later appointment in the same matter. That is practice management rather than a publication gate — but no copy may imply it is free of that tension |
| ~~**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 |
**How the arbitration page must read** (`docs/01` §`/arbitration/`, step 4):
@@ -378,6 +386,57 @@ above.
> most explicitly (*"Write it as a genuine position, not a claim of existing
> volume"*).
### The offering test, applied — the Q42 worked example (2026-08-27)
**Kept because it is the only place in this file where the test is run on four
candidates at once and one of them fails.** Pouya's instruction was literally
*"apply the offering test"*, and the outcome was 31.
| Candidate | Q1 — is the activity gated? *(the register's, with a source)* | Q2 — competence? *(his)* | Outcome |
|---|---|---|---|
| Early neutral evaluation | **`[unestablished]`** — no source. Q46 | *"sits inside a Q.Med's competence"* | **Not publishable yet** |
| Dispute-system design | **`[unestablished]`** — no source. Q46 | *"Consulting, no appointment, no neutrality question"* | **Not publishable yet** |
| Pre-dispute technical advisory | **`[unestablished]`** — no source. Q46 | *"It is the moat"* | **Not publishable yet** |
| Settlement counsel | **Never reached** | — | **STRUCK** |
**THE Q1 COLUMN WAS FILLED IN WITH HIS ANSWERS AND HAS BEEN EMPTIED.** The first
version of this table read *"No. A non-binding neutral assessment is not a
restricted activity"* and *"No. Consulting, no appointment, no neutrality
question"* — the second of which does not even address gating. §4 is explicit:
*"**Question 1 is not his to answer**… It needs a source that a reviewer can
check, and it is answered per activity and per jurisdiction, never as a class."*
No jurisdiction was named for any of the three. `claims-auditor` caught this
substitution on 2026-08-26 in one place and again on 2026-08-28 in this table —
**the same defect, in the paragraph added to explain the defect.**
**The reason settlement counsel fails is the finding.** It did not fail question
1 and it did not fail question 2. It failed a prior question the test does not
ask: **is this a neutral's role at all?** Settlement counsel acts *for* a party.
Run mechanically, the two-question test would have passed it — negotiation on a
party's behalf is not obviously gated, and Pouya is competent to negotiate — and
it would have put a partisan role on a site whose central claim is neutrality.
So the prior question is: **is this a role in which the practice is partisan
between the parties to a dispute?** If it is, the answer is no before the test
starts.
**THAT IS THE RULE, AND IT IS STATED THIS WAY BECAUSE THE FIRST VERSION HAD AN
UNGATED EXCEPTION IN IT.** It read *"the offering test presumes the role is a
neutral's… The one exception in this table is the pre-dispute technical advisory
row, which is also not a neutral role."* `claims-auditor`: a rule and its ad-hoc
exception in the same paragraph, in the section written to prevent *"a category
that authorises everything by saying nothing"* — and the exception was
self-contradictory, because the *dispute-system design* row two lines above also
describes a non-neutral role (*"Consulting, no appointment, no neutrality
question"*). One of the two statements had to be wrong.
Restated as above, there is no exception: dispute-system design and pre-dispute
technical advisory both pass, because neither involves a party to be partisan
between — one advises an organisation about its future disputes, the other
precedes any dispute. Settlement counsel fails, because acting *for* a party in
a negotiation is partisanship between parties by definition. **The distinction is
the party, not the label.**
**Applied, 2026-08-27 — Q35 CLOSED.** `Energy, Grid & Regulatory`,
`Shareholder & Family Business`, and the other four labels **pass condition 1**
on Pouya's answer; condition 2 is each page's job at build step 5. `Med-Arb`
@@ -562,10 +621,14 @@ Nothing below can be invented. Each needs an answer from Pouya.
| **Q34** | **Do §2's measurements of the previous build still hold, and were they measured against the deployed file?** Two of `claims-auditor`'s findings were unverified old-site assertions published in copy, which sent Claude Code to measure the live URL on 2026-08-26. What came back does not straightforwardly match §2. **Reproduced:** the response is a single **2,206,032-byte** file, and `<title>` is still `SML Company · Dispute Resolution`. **Could not be reproduced from the served HTML:** there are **zero** `base64,` occurrences anywhere in it — §2 records "two logo PNGs ~1 MB, base64-inlined" — and no reference to `unpkg` or a React development build. **Why this is a question and not a correction:** the served document is a *bundler harness*. 2,210,921 bytes of it are inline `<script>`, the real `<head>` sits JSON-escaped inside a `<script type="__bundler/template">`, and the application is loaded from **nine UUID-named script files that were not fetched**. The logos and the CDN references may well be in those bundles. So §2 may be right, may be stale, or may have been measured against the local source rather than the deployment — this record cannot tell which. **Why it matters beyond tidiness:** `docs/02` and `CLAUDE.md` both cite the base64-logo figure as the *reason* for a standing convention, and §12 R8 exists because unverified premises propagate. Nobody should quote these numbers in public copy until the question closes. Raised by Claude Code, 2026-08-26 | Nothing structural. It governs whether §2's figures may be cited as fact |
| ~~Q39~~ | **ANSWERED 2026-08-27 — and the answer is that the register's premise was FALSE.** Pouya checked it rather than defending it. His words: *"My assertion was FALSE as a universal."* **(a) Is it gated? YES.** Family arbitrators in Ontario must complete prescribed training — 14 hours on screening for domestic violence and power imbalances, 30 hours of Ontario family law for arbitrators outside the Ontario or another Canadian bar, and 10 hours ongoing per two-year period. **Sourced, and the source is now in the repo** per R14: `docs/reference/ontario-family-arbitration-training.md`, retrieved 2026-08-27 with provenance. **(b) Does the offering extend to it? NO** — and that is what actually disposes of the question. Pouya does not do family arbitration, so it is a **scope exclusion, not a gating problem**, and the prescribed-training requirement never bears on this practice. `Shareholder & Family Business` means **commercial disputes among family shareholders** — shareholder and partnership disputes, co-founder breakdowns, business succession — and its page must state plainly that family law matters are not accepted. *One sentence, not a section: Pouya's instruction is that it earns its place only by saving a wasted intake call.* **(c) One honest limit on the source.** The extract establishes the family gate directly and the commercial half only by absence — it neither mentions nor excludes commercial arbitration. §4 therefore carries *"commercial arbitration in Ontario requires no licence and no designation"* as **Pouya's stated position, unstamped**, not as a sourced fact. Do not let the footnote promote it. **Also swept:** the false universal survived in three live places outside the paragraph that was corrected — §4's NOT-NEGOTIABLE boundary bullet, §9's Q33 closure row, and a comment in `SiteHeader.astro`. All three fixed; the `grep` and its output are pasted in **Change Log entry (w), §Sweeps**. *(`adversarial-reviewer` flagged this citation while it still pointed at nothing: the entry was written at Phase 6, after review, so for the duration of the review a §9 row asserted in the present tense that evidence "is in the Change Log" before it was. Fair catch. The row now names the entry, and the reviewer independently re-ran the sweep and confirmed it was genuinely complete.)* Original question follows | — |
| ~~Q39-orig~~ | **Does the arbitration offering extend to FAMILY arbitration, and is that activity gated?** Raised by `claims-auditor` 2026-08-26 as a counter-example from inside this repo, and it is a good one. §4 Offerings rests on the proposition that arbitral appointment in Ontario is not gated behind a designation. The site ships a **`Shareholder & Family Business`** practice area — and **family** arbitration in Ontario is understood to be one of the places where arbitrator qualification *is* prescribed by statute and regulation. If so, the offering test's own boundary applies: where an activity is gated, the question is **permission**, and permission is not established. **This record does not resolve it** — Claude Code will not assert a proposition of Ontario law, and neither may a self-report. What is needed: (a) does the practice-area page contemplate family-law arbitration at all, or only shareholder, partnership and family-*business* disputes, which is a different thing; and (b) if it does, the gating question needs a checkable source in the repo, per R14. **Interim:** §4's arbitration rows are scoped to **commercial** arbitration and the universal has been removed from the reasoning. Nothing ships that turns on it | The `Shareholder & Family Business` page (step 5); `/arbitration/` (step 4) |
| **Q40** | **All nineteen pages will share ONE Open Graph image, and it is a portrait crop.** `docs/04-seo-spec.md` specifies OG images *"generated at build with `satori` or `astro-og-canvas`... One template: display headline on cream, infinity mark, designation line. Never a screenshot."* What ships is `src/assets/og-portrait.jpg`, the 1200×630 crop Pouya supplied under Q6 — not a screenshot, so the prohibition is not breached, but not the generated template either. The consequence is specific: `docs/04` requires a **unique** title and description per page and every link preview will nonetheless look identical, which is the surface a general counsel actually sees when a colleague pastes the URL into Teams or Slack. **Two decisions, neither an implementer's:** whether to build the generator at all (it adds a dependency and an `npm audit` surface, against R11), and what the card looks like (brand). **Interim:** the portrait crop ships on `/` and is fine on its own terms. Raised by Claude Code, 2026-08-27 | Nothing today. Sharpest once several pages exist — steps 35 |
| **Q41** | **Three copy questions the step-2 claims audit escalated rather than let an implementer settle.** All three were changed to a defensible interim form so `/` could ship; each interim is marked in the source with this question number. **(a) Does Q37's reasoning extend to PROSE, or is it scoped to the credential label?** The approach section opened *"Law and engineering are not blended here"* — the exact parallel Pouya struck one day earlier, relocated from the label into body copy and strengthened by attributing both halves to him personally. `docs/01` §`/` item 3 and `docs/03` §Home both specify the section as *"law and engineering converging on the same dispute"*, so the framing is his; only the construction carrying the implication was changed (to *"what the documents say, and what the engineering says"*). Extend Q37, or scope it to the label and say so. **(b) May the comparative be restored?** *"facts most neutrals take on faith"* is `docs/03`'s core positioning statement and is therefore approved copy — but it is an assertion about a population of third parties, `docs/03`'s own checklist requires *"any comparative claim is factual and verifiable"*, and §4 has no row for it. Interim: *"the documents rather than the pleadings"*, which says the same thing about the work without saying anything about other neutrals. **(c) What does `LAT pre-hearing mediation` mean as an offering?** `docs/01` §`/practice/insurance/` lists that phrase as a **search intent**; as a service blurb it reads as conducting mediation inside the LAT's own statutory process, which is not what a privately retained neutral is appointed to do. Interim: *"private mediation of matters before the LAT"*. Confirm the intent before the page ships. Raised by `claims-auditor`, 2026-08-27 | (a) and (b): `/` is live with the interim wording — his ratification or reversal. (c): `/practice/insurance/` at step 5 |
| **Q42** | **The four "also offered" processes have no §4 Offerings row, and `/practice/` is specified to offer them.** `docs/01` §`/practice/` calls that page *"the natural home for the 'also offered' strip: early neutral evaluation, settlement counsel, dispute-system design, and pre-dispute technical advisory"*, and `FEES.hourly` in `src/data/site.ts` prices them at $500/h. **None has a row**, and §4 is explicit: *"An offering may not be published until it has a row in 'Offered now'... or it is a category that authorises everything by saying nothing."* Found on `/` first: the practice-areas link read *"All six areas, and what else is offered"*, which asserted offerings beyond the six — the Med-Arb-in-the-footer defect in a new place. **Reworded to "All six practice areas" and nothing is claimed today.** Each of the four is a **process**, so each needs its own row and its own competence answer; they are ungated the same way mediation and arbitration are, so this is a competence call and his alone. Raised by `claims-auditor`, 2026-08-27 | The `/practice/` index and its "also offered" strip (step 5); `/fees/` prices them (step 9) |
| **Q43** | **The five process timings are published commitments with no §4 row.** `Day 0 · Days 17 · Days 721 · Days 2130 · Day 30 onward` come from `docs/01` §`/process/` and are now on a public page. They are **not** a forbidden statistic — no matter count, no settlement rate, no median time to award — but they are checkable, specific, and about how the practice runs, which is precisely the class §4 exists to gate. `docs/03` §Process requires *"five steps with real timing"* and warns against evasions, so softening them to "typical" is barred and inventing them was never on. **Interim:** the numbers are published exactly as `docs/01` specifies, and the editorial claim *"with real timing"* — which asserted a quality about them rather than stating them — is gone from `/`. What is wanted is either an Offerings-style row confirming them for publication, or his explicit sign-off. Raised by `claims-auditor`, 2026-08-27 | `/process/` (step 6) states them in full; `/` states them now |
| ~~Q40~~ | **RULED 2026-08-27 — and deliberately BUNDLED rather than shipped as a second interim.** Two kinds of card, not one. Pouya: *"A portrait is the **right** OG image for `/` and `/about/` — a face is the strongest social preview for a personal brand. It is the **wrong** one for nineteen pages, where a typed card carrying the page title would do the work. But do not build the generator now and do not leave 'portrait everywhere' as an untracked interim. **Ship it at step 7 alongside Insights, which needs per-article cards anyway — one build, one dependency, one review.**"* So the portrait is the **decided** card for `/` and `/about/`, not a placeholder; the generated typed card covers every other page and every article, built once at step 7 against a freshly checked pin (R11). Until then all pages share the portrait, and that interim **blocks cutover, not build step 3** — recorded on the cutover checklist in `docs/06` and tracked as **R15** with its removal trigger, on his instruction: *"Record the trigger so it cannot quietly become permanent."* `docs/04` amended. | Nothing until step 7. Then the generator, and cutover |
| ~~Q41~~ | **ANSWERED 2026-08-27 — all three, and two of the three interim wordings were wrong in a way the interim had not identified.** **(a) Q37's reasoning DOES extend to prose, and prose is held to a HIGHER bar, not a looser one.** Pouya: *"The implication test applies everywhere, not just to labels. Prose has more room, so it is easier to satisfy: **state the asymmetry explicitly** rather than relying on a parallel construction to carry it."* Deleting the parallel — which is all the interim did — was half the fix; a reader can still supply the missing symmetry from silence. Both pages now name both halves, from **one constant**`ASYMMETRY_LINE` in `src/data/site.ts`, which is where a claim-bearing sentence belongs (`ROLE`'s reasoning: *"these are the two where the wording IS the compliance"*). It was typed into `/` and then into `/about/`, and **the two copies had diverged inside the same session** — a comma on one, full stops on the other — which is why it is a constant and why this row cites it rather than quoting a variant. Calling the legal half **training** is what makes the licence implication impossible rather than merely absent. `docs/01` §`/` item 3 and `docs/03` §Home both carry a warning not to lift their own phrase *"law and engineering"* into copy. **(b) NOT restored, and the editorial reason outranks the compliance one.** Pouya: *"That is an unverifiable empirical claim about other practitioners… **It is also weaker copy: assert his capability, not the field's incapability.**"* His replacement is used verbatim — *"disputes that turn on the contract, the code, and the engineering documents"* — and it replaces the comparative in `docs/03`'s **core positioning statement**, so the approved-copy defence that had protected it is gone. The interim (*"the documents rather than the pleadings"*) is also gone: it said nothing about other neutrals but still worked by contrast. **(c) Verified, and the interim was ambiguous in the one word that mattered.** `docs/reference/lat-case-conference.md` `[verified 2026-08-28]`: LAT **Rule 2.4** makes *"Pre-Hearing Conference"* the Tribunal's own term for a **case conference**; **Rule 14.3** puts a **Member** in the chair and then disqualifies them from the hearing panel; **Rule 14.6** makes attendance mandatory; and the Rules contain **zero** occurrences of `mediat` or `arbitrat` in 66,593 characters. A privately retained neutral cannot be appointed to it. The affirmative basis is on the Tribunal's own AABS page: *"you may want to consider negotiation or mediation services… including before filing at the LAT-AABS, and continuing… after a claim has been filed."* The interim read *"private mediation of matters **before** the LAT"* — where `before` reads as *pending at* as readily as *prior to*. Published: *"private mediation alongside a LAT application, before filing or after."* No roster claim, because there is no row for one | — |
| ~~Q42~~ | **ANSWERED 2026-08-27 — 3 offered, 1 STRUCK, and the one that failed is the finding.** Pouya applied the offering test himself: **early neutral evaluation** (*"A neutral assessment of merits sits inside a Q.Med's competence"*), **dispute-system design** (*"Consulting, no appointment, no neutrality question"*) and **pre-dispute technical advisory** (*"It is the moat"*) each gained a §4 Offerings row and may now ship on `/practice/`. **Settlement counsel is struck**, 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."* **The positioning objection comes first** — it would be wrong on a site with no licensure question at all, so it is not a D13 consequence. **What it exposed about the test:** settlement counsel fails neither question 1 nor question 2. Run mechanically the test would have PASSED it. It fails a prior question the test does not ask — *is this a neutral's role at all?* — so §4 now records that the offering test **presumes** a neutral role, with the Q42 worked example kept as the 31 table. Swept by command: `docs/01` §`/practice/`, `docs/07-fees.md` (three services at the hourly rate, not four), `FEES.hourly`'s comment, and `/`'s areas-more comment. `AGENTS.md` lines 293 and 3298 are the §4 scope enumeration (fixed) and Change Log entry (d) (history, not edited) | — |
| ~~Q43~~ | **ANSWERED 2026-08-27 — and the ruling reversed the reasoning that had blocked it.** The interim shipped the five timings as bare numbers because `docs/03` §Process required them *"real"* rather than illustrative, which was read as **barring** the word "typical". Pouya: the timings are **service commitments, the same class as Q27's response time***"not facts about Pouya, so they need framing, not a Verified row. Present them as the TYPICAL shape of an engagement, explicitly not a guarantee: mediation timing depends on party and counsel availability, which he does not control. **Published as typical, they are honest and useful; published as commitments, the first matter that slips makes the page false.**"* So no §4 row, and **the numbers are unchanged** — softening them was never the fix. What ships is `PROCESS_FRAMING` in `src/data/site.ts`: *"This is the typical shape of an engagement, not a commitment. Timing depends on party and counsel availability, which I do not control."* **Not optional, and placed adjacent to the numbers rather than in a section lede above them** — a reader who scans the strip and skips the lede has read a commitment. `docs/03` §Process amended to record the override; `docs/01` §`/process/` requires the same rendering at step 6 | — |
| **Q44** | **R10 discharge — are all four memberships current TODAY, and in which month does each renew?** §4 verifies **ADRIC**, **ADRIO**, the three **OBA** sections (Construction & Infrastructure, ADR, Civil Litigation) and the **Canadian Tax Foundation** `[verified 2026-08-26 — Pouya]`, *for now*. **Only Claude Code can raise this; only Pouya can close it** — a two-day-old stamp is not a renewal receipt. **What §4 actually says about renewal, because an earlier version of this row said more:** the **OBA sections and the CTF** renew yearly. §4 records **nothing** about ADRIC's or ADRIO's renewal period, and this row asserted *"All renew yearly"* — a widened fact that had already propagated to `schema.ts`, `docs/06` and `/about/`'s own comment. Fixed in all four. **`/about/` DOES NOT PUBLISH THE MEMBERSHIPS.** An earlier version of this row said it did, and so did §12 R10, `docs/06` and `schema.ts` — four documents recording a page state that had been reversed and not swept, on the one credential class that has already lapsed once (OCNI). R10 is written as a **prohibition**, not a disclosure duty, so the group is withheld and `CREDENTIAL_GROUPS` carries a `TODO(pouya)` with this question. Designations, Education and Certifications ship. **Blocks the memberships block, not step 3.** Four yes/no answers and four renewal months closes it — and the months are what stop this recurring, because they turn R10 from a reminder into a date. Raised by Claude Code 2026-08-28; scope corrected the same day by `claims-auditor` | The Memberships group on `/about/`; `memberOf` in the Person JSON-LD; cutover |
| **Q45** | **The one-page PDF bio — generated, authored, or dropped?** `docs/01` §`/about/` item 7 lists it (brief §VIII: an asset for circulation with appointment proposals) and **it does not exist**; `/about/` therefore ships without a link to it, because a link to a missing file on the page an appointing body reads is worse than the absence. **Why it is a question and not a task:** it is a **credential document**, so every line traces to §4 exactly as a web page does — and it is circulated **detached from the site**, where no reviewer ever sees it again and no build can re-check it. That is the one artefact class this project's whole review apparatus cannot reach. Two decisions are his: (a) generated at build (a dependency and an `npm audit` surface, against R11) or authored once as a designed artefact; (b) whether it carries anything the site does not — a matter list, a fee summary, referees — each of which is a §4 question of its own. Raised by Claude Code, 2026-08-28 | Nothing on the site. It is a circulation asset, wanted before the first appointment proposal |
| **Q46** | **Two questions the offering test cannot close by itself, and one about the glossary.** **(a) Is early neutral evaluation gated in Ontario, and are dispute-system design and pre-dispute technical advisory?** Pouya answered question 2 (competence) for all three on 2026-08-27 and those answers stand. **Question 1 is the register's and it is `[unestablished]`** — §4: *"It needs a source that a reviewer can check, and it is answered per activity and per jurisdiction, never as a class."* No source exists in `docs/reference/` for any of the three (R14). It matters most for **ENE**, which is the offering nearest §4's NOT-NEGOTIABLE boundary: a neutral assessment of the **merits**, delivered to parties, sits closest to *"providing legal services"*, where the binding question is permission and the answer is not established. **Consequence today: none on the site** — the three appear only in comments — but the rows authorise `/practice/`'s "also offered" strip at step 5 and `docs/07-fees.md` prices them, so it blocks step 5, not step 3. Twice-flagged: `claims-auditor` found the register answering its own question 1 with the subject's words on 2026-08-26 and again on 2026-08-28, the second time inside the paragraph added to explain the first. **(b) May §11 Glossary be published as the source for DEFINITIONAL expansions** — what `Q.Med`, `Q.Arb`, `C.Med-Arb`, `POA`, `SABS`, `ADRIC` and `ADRIO` stand for? This is not a claim about Pouya; "he holds it" is the claim and that has a row. `/about/` currently publishes all four classes on this basis, and the alternative is to strip *"Provincial Offences Act"*, *"the ADR Institute of Canada and the ADR Institute of Ontario"* and `recognizedBy` from the JSON-LD as well — which serves no reader and reduces no risk. Sourcing them externally was tried and failed: `adric.ca/designations/` redirects to `/designations-cee/` and serves **zero** occurrences of `Q.Med`, `Qualified Mediator` or `Chartered Mediator` in 114,985 bytes. **This is the one place this session went against a review finding**, on a later finding that the standard was being applied inconsistently. Raised by Claude Code 2026-08-28 | (a) `/practice/` and its strip (step 5), `/fees/` (step 9). (b) `/about/`'s arc and the Person JSON-LD, live now |
| **Q47** | **`Person.jobTitle` is published without `worksFor`, and the two halves of one §4 row are separated in machine-readable form.** §4's row is *"Director of Firm Operations, **Toronto litigation and ADR boutique**"* — one row, one fact, two halves. Visible copy always pairs them (`/about/`: *"Director of Firm Operations at a Toronto litigation and ADR boutique"*). The JSON-LD emits `jobTitle: 'Director of Firm Operations'` with **`worksFor` deliberately omitted**, on a `Person` node whose `url` is this ADR practice's `/about/` — so a consumer may attach the title to **this** entity, which is not what the row says. **This is a structural bind, not an oversight:** `docs/04` instructs the omission and D16 bars naming the employer, so there is no value `worksFor` may take. The options are (i) drop `jobTitle` from the graph and let the visible copy carry the role, (ii) keep it and accept the implication, or (iii) get a §4 row for the half-claim. Flagged twice by `claims-auditor`, which declined to choose. Raised by Claude Code 2026-08-28 | Nothing visible. The Person node on `/` and `/about/`, live now |
| **Q38** | **A true vector master for the infinity mark.** The mark is a shaded ribbon — variable-width band, maroon flowing into champagne, twisting in three dimensions and passing over itself at the crossing. That is gradient-mesh artwork, and there is no honest way to express it as the flat vector paths `docs/02` assumes. An SVG **is** held — `src/assets/brand/sml-logo-source.svg` — and **it renders faithfully**: rasterised at 8333 px it reproduces the master exactly, at the same 1.566:1 `[verified 2026-08-26 — rendered and measured]`. *The characterisation has now moved twice and Pouya has settled it.* This row first called the file **"a raster in a vector wrapper"**; a later draft withdrew that as unfair. **The withdrawal went too far, and Pouya's ruling of 2026-08-27 restores the substance:** *"It renders faithfully because it IS the raster. Your first characterisation was accurate and the walk-back went too far."* Both things are true at once and the row must hold both — the file is a faithful rendering **and** it is faithful because seven base64 PNGs are carried inside it, which is why fidelity was never the question. **The Canva SVG does not close this question.** Pouya: *"Keep it committed, keep the AVIF render path. R13 stays open for a true vector master."* What rules it out is **payload and composition**: 257,278 bytes against **3,063 B** for the AVIF a Retina browser takes in the header — **84×** — plus **seven embedded base64 PNGs** and a 1,225-stop gradient mesh, so inlining it would breach `CLAUDE.md`'s rule against base64-inlining images. *Restated 2026-08-27, because the single number stopped covering the case:* build step 2 added a **232 px** call site (the home page's approach section, rendering at 225.5 px) beside the existing 64 px one, and at that size a DPR-2 device takes **14,555 B** and DPR-3 **22,639 B** — a ratio of ~11×, not 84×. `adversarial-reviewer` caught the three copies of the old figure going stale together, which is the SES-DKIM duplication in a new place. Both ladders are in `docs/reference/brand-assets.md`; **quote the size with the call site, never on its own.** Also worth knowing before someone reads it as a regression: the PNG fallback at 232 px runs **38,094 / 91,618 / 150,215 B**. Nothing that negotiates content types takes it — a DPR-3 device with neither AVIF nor WebP does not exist in practice — and the AVIF above is what real clients fetch. Accepted deliberately rather than capped, because capping it would blunt the mark on the high-DPI desktops that are the only place the 696 px variant is used at all. What is wanted is a master that is faithful **and** light. **Pouya is commissioning a proper vector master.** Until it lands, `InfinityMark.astro` renders an optimised raster and that is a **documented, temporary exception to `docs/02`'s inline-SVG rule** (R13 keeps it from becoming permanent). When the master arrives: replace the component's `<Picture>` with inline SVG, regenerate the favicons from it, and delete the exception from `docs/02` and this row. Raised by Claude Code 2026-08-26; scoped by Pouya the same day | Nothing — the mark renders correctly. This is fidelity and payload, not function |
| ~~Q32~~ | **ANSWERED 2026-08-26 — and the answer was that the reconstruction was WRONG.** Pouya rendered the committed path against the master (`SML Company Just Logo Transparent.png`, 3000×3000) and rejected it on three counts. Two reproduce from the path alone: **(a) TANGENT, NOT CROSSING** — all four cubic branches meet the origin at exactly 90°, so the loops are mutually tangent on a vertical line and at stroke-width 28 render as *two kissing circles*, the one thing an infinity mark must not be `[verified 2026-08-26 — tangent vectors computed per segment, independently reproduced]`. Both lobes are strictly confined to their own half-plane (x is monotone on every segment), so the signed crossing number is **0** — they cannot cross anywhere, not merely at the node. Worse at the size actually shipped: the two strokes stay fused into one mass wherever the centreline separation `y²/192` is under 28, i.e. across **61% of the mark's height** — at 2rem that is a 16.8px blob out of a 27.4px-tall mark. No stroke-width, viewBox or scale change can produce a crossing from this centreline; **(b) WRONG PROPORTION** — the master's ink bounding box is **2668 × 1704 = 1.5657:1** `[verified 2026-08-26 — measured]`, and **(c)** the master is a shaded ribbon where the trace was two flat uniform strokes. ***1.23:1 — RECONCILED, and it was a real measurement, not a slip.*** It is the bounding box of the path's **coordinates** rather than of the **curve**. The control points sit at y = ±160 while the curve only reaches ±120 — the standard 3/4 pull-in of a cubic — so a coordinate-hull box is 400 × 320 = 1.2500, and with stroke-width 28 applied on all four sides it is **428 × 348 = 1.2299**. Pouya's figure to four significant figures, from one method applied consistently `[verified 2026-08-26 — derived]`. **It is a trap rather than a slip:** because x is monotone on every segment, the control points give the *correct* width (±200) and a 33% inflated height, so the obvious sanity check — "does the width look right?" — passes. Any tool that reads a bbox from parsed coordinates lands here; `getBBox()` would have returned 400 × 240. **And the direction is inverted from how it read:** measured from the curve, the traced path is 6.4% *wider and flatter* than the master, not squatter. **Consequence worth keeping:** the declared viewBox 440:280 = 1.5714 is within **0.35%** of the master's 1.566, so re-tuning the layout to the true ratio was ~0.18px of work at the shipped 2rem — and **re-tuning to 1.23 would have actively broken it** — at any given width 1.2299 allocates 1.5657/1.2299 = **27% more height** than the mark occupies, so the header would have been rebuilt around a box a quarter too tall. The ratio was never sufficient grounds on its own; **(a) tangency is, and it is exact.** **The traced path is deleted, not kept as a fallback**, on Pouya's instruction: *a wrong mark that renders is worse than a missing one, because it stops looking wrong.* Now closed by Q38 for the vector master | — |
| ~~Q32-orig~~ | *(superseded — the original wording of this question is preserved in entry (v))* | `src/components/InfinityMark.astro` is built from geometry lifted verbatim from the deployed site's own loading-thumbnail SVG — the element it labels `smlMark`, fetched from `https://adr.smlcompany.ca/` on 2026-08-26. Path, both stroke widths (28 / 6) and the 0.7 inner opacity are the source's; the only change is folding a `translate(60 0)` into the coordinates. So it is SML's own artwork rather than a redrawing — but a loading placeholder is not necessarily the canonical file, and D7 says the mark carries over *unchanged*. If a master SVG or AI/EPS exists, supply it and the component gets replaced. Raised by Claude Code, 2026-08-26 | Nothing — the mark renders. This is about fidelity, not a blocker |
@@ -618,18 +681,19 @@ never being raised again.
| # | Reminder | Raised | Why it must keep coming back |
|---|---|---|---|
| R1 | **Licensure — RAISED 2026-08-27 and acknowledged by Pouya; still open, and the stakes are higher than when it was written.** His words: *"The interim licensure framing is now carried by shipped pages rather than specs, which raises the stakes. Keep surfacing it."* So it is surfaced, and it will be surfaced again next session. **The opening sentence below is now false and is kept only because §12 rows are not rewritten silently:** `src/pages/` exists, `/` ships at build step 2, and the framing is on a public page rather than in a document. Original text follows. **Licensure.** No site exists yet — `src/pages/` does not exist. **As specified**, the copy will assert the JD only and describe the boutique role as *active litigation exposure*, never *practice*. Pouya flagged that as an interim position and asked to be reminded to change it. §4 now records licence status as `[unestablished]`, which is the honest state, not a resolution | 2026-08-26 | If he is licensed and in good standing, it is the first credential appointing bodies and opposing counsel look for, and its absence from a detailed credentials page is conspicuous. If licensure is in progress, the copy should be rewritten the moment it completes. Either way this is a **temporary** framing that will otherwise ossify |
| R1 | **RAISED AGAIN 2026-08-28, and `/about/` is why the stakes moved a second time.** `/about/` is *"the page an appointing body or opposing counsel reads before agreeing to an appointment"* (`docs/01`), it is the site's credential spine, and it now carries the full designation list, the education line, the certifications, the memberships and the boutique role — with **no licence status stated either way**. On `/` that reads as brevity. On a dedicated credentials page a sophisticated reader notices the omission, and D13's framing is doing more work than it was designed for. Q41(a)'s ruling is now load-bearing on the same page: the copy says the legal half is *"training I hold"*, which is honest and is also the closest the site comes to addressing the question. **Nothing here is a request to change D13 — it is the surfacing R1 exists to compel.** Previous text follows. **Licensure — RAISED 2026-08-27 and acknowledged by Pouya; still open, and the stakes are higher than when it was written.** His words: *"The interim licensure framing is now carried by shipped pages rather than specs, which raises the stakes. Keep surfacing it."* So it is surfaced, and it will be surfaced again next session. **The opening sentence below is now false and is kept only because §12 rows are not rewritten silently:** `src/pages/` exists, `/` ships at build step 2, and the framing is on a public page rather than in a document. Original text follows. **Licensure.** No site exists yet — `src/pages/` does not exist. **As specified**, the copy will assert the JD only and describe the boutique role as *active litigation exposure*, never *practice*. Pouya flagged that as an interim position and asked to be reminded to change it. §4 now records licence status as `[unestablished]`, which is the honest state, not a resolution | 2026-08-26 | If he is licensed and in good standing, it is the first credential appointing bodies and opposing counsel look for, and its absence from a detailed credentials page is conspicuous. If licensure is in progress, the copy should be rewritten the moment it completes. Either way this is a **temporary** framing that will otherwise ossify |
| 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 |
| 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 | **Annually-renewing memberships.** §4 verifies the **OBA sections** (Construction & Infrastructure, ADR, Civil Litigation) and the **Canadian Tax Foundation** as of 2026-08-26 — *for now*. Both renew yearly. *Widened 2026-08-26 when CTF was added; it was OBA-only before* | 2026-08-26 | A credential that lapses quietly is the failure mode §4 exists to prevent, and OCNI already did exactly this (§4 records it as "not current, do not publish"). Re-confirm at each renewal, and before any page listing memberships ships — `/about/` at build step 3 is the first one that will |
| R10 | **RAISED 2026-08-28 AND NOT DISCHARGED — AND THE PROHIBITION HELD.** Pouya's instruction for this session was *"R10 first: re-confirm the memberships, which now includes CTF"*. The re-confirmation is a fact only he holds, so it is now **Q44**, and `/about/` ships **without a memberships group** — this row is written as a prohibition on shipping such a page, and documenting a prohibition is not discharging it. *An earlier version of this row said `/about/` had shipped with all four; that was true for part of one session and was reversed on review. Three other documents recorded the same reversed state and have been corrected.* Four yes/no answers and four **renewal months** close it; the months are the part that matters, because they turn this row from a reminder into a date. Original text follows. **Annually-renewing memberships.** §4 verifies the **OBA sections** (Construction & Infrastructure, ADR, Civil Litigation) and the **Canadian Tax Foundation** as of 2026-08-26 — *for now*. Both renew yearly. *Widened 2026-08-26 when CTF was added; it was OBA-only before* | 2026-08-26 | A credential that lapses quietly is the failure mode §4 exists to prevent, and OCNI already did exactly this (§4 records it as "not current, do not publish"). Re-confirm at each renewal, and before any page listing memberships ships — `/about/` at build step 3 is the first one that will |
| R11 | **Re-check dependency currency at every phase boundary in the build order** (`docs/01-architecture.md` §Build order, 11 steps). Run `npm view <pkg> version` across **every** pin in `package.json` and compare; do not wait for something to break. Verified does not mean latest — record the reason for any deliberate hold in §7. **Carries one specific re-add trigger: at step 7, put `@lhci/cli` back.** Check for a patched release — do not assume `0.15.1` is still the ceiling just because it was on 2026-08-26 — pin it against `npm view` that day, write a `lighthouserc` with the budgets from `docs/04-seo-spec.md`, and delete the UNAVAILABLE notices this repo now carries in six places (§7 lists them). If the advisories are still unfixed, that is a decision to take deliberately, not a reason to leave the gap unstated | 2026-08-26 | `astro: "^5.0.0"` was recalled rather than checked and was two majors stale the day it was written, which meant a framework carrying high-severity XSS advisories. Between phases is cheap; after a phase of pages is written is not. The build order has ten more boundaries |
| R12 | **`compressHTML: true` is a deliberate deviation from the Astro 7 default (`'jsx'`).** Measured 2026-08-26: in an `.astro` template an inline pair split across two lines renders as `<em>a</em><strong>b</strong>` under the default — the space is silently deleted. MDX prose is unaffected | 2026-08-26 | It is a deviation, and undocumented deviations become folklore. Revisit **with a measurement**, not a preference — and re-measure after any Astro major, since the behaviour could change again |
| R13 | **The infinity mark ships as a RASTER, and that is temporary. RAISED 2026-08-27; Pouya ruled the committed SVG does NOT close it***"Keep it committed, keep the AVIF render path. Your own measurement is the reason: 257 KB wrapping seven embedded base64 PNGs. It renders faithfully because it IS the raster."* So the exception stands and the reminder stays live. `InfinityMark.astro` renders an optimised AVIF/WebP from `src/assets/brand/sml-infinity-mark.png` — a deliberate, documented exception to `docs/02`'s "inline SVG, never a PNG", because the mark is gradient-mesh artwork and no true vector master exists yet (Q38). **Removal trigger: the commissioned vector master lands.** Then replace the `<Picture>` with inline SVG, regenerate `favicon.ico` and `apple-touch-icon.png` from it, and delete the exception from `docs/02`, from the component, and from Q38 | 2026-08-26 | Pouya flagged this himself when he made the ruling: *an interim raster is exactly the kind of temporary measure that becomes permanent by never being raised.* It costs ~8 KB and works, which is precisely why nobody will notice it again. There is no build error to prompt anyone — only this row |
| R14 | **Anything a spec makes a claim about must be reachable from the repository.** If the artefact lives only in Drive, in a console, or on someone's disk, no reviewer can check the claim and the claim is unverifiable by construction — see the rule now in `CLAUDE.md` | 2026-08-26 | **This has now cost twice.** Q24 was `AWS-Hosting-Guide.md`, the only record of how the infrastructure was hand-built, living outside the repo. Q32 was the infinity mark: Claude Code traced it from the old site's *loading placeholder*, wrote a scrupulous provenance comment recording exactly that doubt — and **two adversarial review passes still could not catch it**, because the artwork they would have had to compare against was not in the repo. The doubt was correctly stated and structurally uncheckable. That is the failure mode: not a missing warning, a missing artefact |
| R15 | **Every page shares ONE Open Graph image — the portrait — and that is an interim for seventeen of the nineteen. RULED, DEFERRED, AND TRACKED HERE ON POUYA'S INSTRUCTION:** *"Record the trigger so it cannot quietly become permanent."* Q40, 2026-08-27. The portrait is the **decided** card for `/` and `/about/` — a face is the strongest social preview for a personal brand. It is the wrong card for the other seventeen, where a typed card carrying the page title does the work. **Removal trigger: build step 7**, where Insights needs per-article cards anyway — one generator (`satori` or `astro-og-canvas`, pinned against `npm view` that day per R11), one dependency, one review. Then delete the interim note from `docs/04` and the cutover line from `docs/06`. **Blocks cutover; does not block steps 36** | 2026-08-27 | Nobody on this project will ever see the defect. A link preview is rendered by LinkedIn, Slack and Teams for a reader who is not us, and `docs/04` requires a **unique** title and description per page — nineteen unique pages that all preview identically is the failure, and it is invisible from inside the repo. It costs nothing and works, which is exactly the R13 shape |
| ~~R7~~ | **RATIFIED / SUPERSEDED 2026-08-26.** (a) Cache-policy table matching the pipeline — **accepted**; documenting what the pipeline does beats documenting an intention. (b) `s3:AbortMultipartUpload` omitted — **accepted, reasoning corrected**: the lifecycle rule does not exist and is therefore not the cover; the actual cover is that `aws s3 sync` only goes multipart above 8 MB and the largest asset is a 357 KB portrait. Recorded in `docs/06-deployment.md` with a revisit trigger. (c) The `aws s3 ls` pre-flight — **superseded** by the variable guard now running as the workflow's first step | 2026-08-26 | — |
| ~~R8~~ | **PROMOTED TO A RULE 2026-08-26.** A reminder was too weak for a pattern that survived three entries. *A sweep is a command, not a claim* now sits in `CLAUDE.md` under Conventions, in `/build` Phase 6, and in `/wrap` step 3: any claim that a change was applied across files must cite the command and be written only after reading its output | 2026-08-26 | — |
@@ -637,6 +701,400 @@ never being raised again.
# Change Log
## 2026-08-28 (x) — Build step 3: `/about/` ships without its memberships. Q40Q43 close; four review passes found nine defects in their own predecessors' fixes
**Task, in Pouya's words:** rulings on **Q42**, **Q41(a)(b)(c)**, **Q43** and
**Q40**, then *"step 3, `/about/` — and R10 first: re-confirm the memberships,
which now includes CTF."*
**Headline, because it is the one thing to read if nothing else:** `/about/`
ships **without a memberships group**. R10 is written as a prohibition on
shipping a page that lists memberships before they are re-confirmed; the
re-confirmation is a fact only Pouya holds; it was not obtained. The first
version of the page published all four and *disclosed* the gap in five places
instead — both review agents rejected that, and they were right. **Q44** carries
the exact question.
---
### Standing reminders surfaced (§12)
- **R1 — licensure. Raised again, and `/about/` is why the stakes moved.** It is
the site's credential spine, it now carries designations, education,
certifications and the boutique role, and it states no licence status either
way. On `/` that reads as brevity; on a dedicated credentials page a
sophisticated reader notices. Q41(a)'s ruling is now load-bearing on the same
page — the copy says the legal half is *"training I hold"*, which is the closest
the site comes to addressing the question. **Nothing here asks to change D13.**
- **R10 — raised and NOT discharged.** See the headline. Now Q44.
- **R13 — the mark is still a raster.** Unchanged; no vector master has landed.
- **R11 — phase-boundary currency check RUN, not recalled.** Every pin in
`package.json` against `npm view`: 13 of 14 exact. The one hold is
`typescript ^6.0.3` against `7.0.2`, and the reason was re-verified rather than
carried forward — `@astrojs/check` peers `^5.0.0 || ^6.0.0` and
`typescript-eslint` peers `>=4.8.4 <6.1.0`. Both bar 7. `npm audit`: **0
vulnerabilities.** `[verified 2026-08-28]`
- **R15 — NEW.** The single portrait OG image across nineteen pages, per Pouya's
Q40 ruling, with build step 7 as the removal trigger.
### Rulings applied
**Q42 — three offerings rowed, settlement counsel struck.** ENE, dispute-system
design and pre-dispute technical advisory gained rows; `settlement counsel` was
struck as Pouya's own error in `docs/01`, on the ground he named first —
*"it undercuts the brand's central claim"* — with the D13 half as aggravation
rather than reason. Swept by command; output below.
**And the strike exposed a hole in the offering test.** Settlement counsel fails
neither question 1 nor question 2; run mechanically the test would have **passed**
it. It fails a prior question the test does not ask. §4 now states that prior
question — *is this a role in which the practice is partisan between the parties
to a dispute?* — with the Q42 worked example kept as the 31 table.
**Q41(a) — Q37 reaches prose, and prose is held to a HIGHER bar.** Deleting the
parallel was half the fix; a reader supplies the missing symmetry from silence.
The sentence that names which half is which is now **one constant**,
`ASYMMETRY_LINE`, because it had been typed into two pages and the two copies had
**already diverged inside the same session** — a comma on one, full stops on the
other.
**Q41(b) — not restored, and the comparative turned out to be in three places,
not one.** Pouya's replacement wording is used verbatim in `docs/03`'s core
positioning statement. Then the second audit found the implication had been
*relocated, not removed*: a new instance written into the `/about/` biography,
plus **two pre-existing instances on `/` that had survived the sweep that closed
Q41(b) the day before** — *"usually arrives as a separate expert report"* and
*"not something a party has to commission and wait for"*. All three gone.
**Q41(c) — verified against the Tribunal's own materials, and the interim was
ambiguous in the one word that mattered.** New extract:
`docs/reference/lat-case-conference.md`. Rule 2.4 makes *"Pre-Hearing
Conference"* the LAT's own term for a **case conference**; Rule 14.3 puts a
**Member** in the chair and disqualifies them from the hearing panel; Rule 14.6
makes attendance mandatory; the Rules contain **zero** occurrences of `mediat` or
`arbitrat` in 66,593 characters. The affirmative basis is the Tribunal's own AABS
page: *"you may want to consider negotiation or mediation services… including
before filing at the LAT-AABS, and continuing… after a claim has been filed."*
**Q43 — the timings are service commitments; framing, not a row.** Numbers
unchanged. `PROCESS_FRAMING` renders adjacent to the strip, not in a lede above
it, because a reader who scans the strip and skips the lede has read a
commitment. `docs/03` §Process amended to record that its *"real timing"*
requirement had been over-read as barring the word "typical".
**Q40 — bundled to step 7, not shipped as a second interim.** Portrait is the
*decided* card for `/` and `/about/`; the generated typed card covers the rest,
built once with Insights. Tracked as **R15**, blocking cutover, not step 3.
### `/about/` — what shipped
Six of `docs/01`'s seven items. Item 6 (Speaking) omitted on the spec's own
instruction. Item 7's PDF **not** shipped — **Q45**. Item 3 ships Designations,
Education and Certifications; **Memberships withheld** — Q44. Sections ordered
4-before-3 deliberately: the arc is the part a reader has a question about.
### Four review passes, and what they cost
Two agents, twice. **28 findings, then 15 more.** Nine of the second round's
findings were defects in the first round's fixes — which is the measurement
`/build` Phase 4 exists on.
**Three that must never have shipped, all mine:**
1. **The false universal Q39 struck, on a public page.** The arc's Q.Arb body
read *"arbitral appointments are not gated behind it, which is why I accept
them now"* — unscoped, first person, publishing a proposition of Ontario law
§4 holds only in scoped form and deliberately does **not** stamp. Q39 swept
three instances on 2026-08-27; this was the **fourth** and the first outside a
comment. Found independently by both agents.
2. **A public warranty of currency over an undischarged R10** — *"Memberships are
renewed annually and are listed as current."* Also **widened §4**, which
records yearly renewal for the OBA sections and the CTF only and says nothing
about ADRIC or ADRIO. The widened form had propagated to four files.
3. **A licensure denial** — *"Nothing above asserts a licence to practise law, in
either direction"* — on the page §4 marks `[unestablished]`, where the rule is
*do not assert it, do not deny it*. No spec asked for it.
**And the same sentence was wrong in both directions, which is the finding worth
keeping.** Audit 1 flagged *"I do not give legal advice"* — "do not" describes an
election, and an election implies the entitlement. So it became *"I cannot give
legal advice"*. Audit 2 flagged that — "cannot" is a **denial**. Both readings
are correct and they point in opposite directions, because **both sentences make
a claim about capacity**. The third version does not: it states the role and its
consequence for the reader.
**Defects in my own fixes, all found by measuring the fix rather than reading it:**
- `:where(.prose) > p + p` is **additive with a flex `gap`**`/`'s approach
paragraphs went 24px → **48px**. My comment said *"Verified: with `:where()`
the flex container's gap governs and this contributes nothing."* False, and
measured false minutes after being written: `:where()` lowers specificity,
which only matters when two rules set the **same property**.
- The 1440w portrait rung removed a 1.07× upscale and imposed **+27,273 B** on
DPR-3 phones (48,799 vs 21,526). Added 1080; that sample is now 27,594 B and
exact.
- Gating the italic preload behind a new prop and **never setting it on `/`**,
which uses the face in a 96px headline.
- `Pill`'s type fix, twice: `interface Props {}` is rejected by eslint and means
"any non-nullish value" anyway; `Record<string, never>` passes eslint and
rejects `class` **and also rejects `children`**, breaking two real call sites
while the probe page went green on exactly what it tested.
- `.designation-part { white-space: nowrap }` fixed an orphaned separator and
took `/about/` to **108px of overflow at 320px** at a 200% default font size.
- The print override, scoped by class, **missed two elements** and then a third:
`.approach-metaphor`, `.btn-gold`, and — after the token rewrite — the hero
`.btn-primary` at **1.07:1** against white paper, which sits on cream inside no
inverse section at all.
**The portrait defect was the expensive one, and it was on the shipped home page
too.** Below 66rem the hero is one column, so the portrait is the **full content
width** — 592 to 928 CSS px — while `sizes` declared 5260vw and the ladder
stopped at 960w. Measured **1.40× upscale at 768/DPR2 and 1.93× at 1024/DPR2**,
identical on both pages, surviving a cleared cache. `/`'s own comment derived the
960 ceiling from the ≥66rem layout: **the range where the image is widest was
never in the arithmetic.**
**Declined, with reasons:**
- *"I will tell you whether I am the right neutral for it"* flagged as an unrowed
service commitment. It is a statement about a conversation, not a metric a
slipped date could falsify, and it ships identically on `/`.
- Empty-collection guards on `CREDENTIAL_GROUPS` and `litigationAreas`. Both are
`as const` tuples; neither is reachable without a source edit.
- `Person.hasCredential` currency (Q.Med as `Held`, present tense, on a
`[verified 2026-08-25]` row under a *"currency is not confirmed"* preamble).
The row exists, so it traces. Noted for Pouya rather than resolved.
- The `ContactBand` CTA invites matter details on pages carrying no no-retainer
notice. `docs/03` scopes `NO_RETAINER_NOTICE` to `/contact/`, which is where the
CTA goes. Worth a ruling before the band reaches nineteen pages.
**Reversed a review finding once, deliberately** — the designation-name
expansions. Audit 1 struck them as §11-Glossary-only; audit 2 then found the page
also publishes *"Provincial Offences Act"*, *"the ADR Institute of Canada and the
ADR Institute of Ontario"* and `recognizedBy`, all on the same footing —
*"one standard or the other."* Standard chosen: **§11 is the source for
definitional expansions; §4 remains the only source for claims about Pouya.**
Sourcing externally was tried and failed — `adric.ca/designations/` redirects and
serves **zero** occurrences of `Q.Med`, `Qualified Mediator` or `Chartered
Mediator` in 114,985 bytes. **Q46(b)** asks Pouya to ratify the standard; if he
declines, all four classes come out together.
### The third review round, and a process defect of my own
The code re-review returned **8 more findings**, and it opened with a criticism
of how I ran the loop that is correct and is recorded here rather than softened:
**I edited the tree while it was measuring.** It anchored to SHA-256, re-verified,
and reported that four of the defects it had measured *"were repaired under me
mid-review"* — so its certification covers a snapshot, not the tree, and the
repairs it watched me make **were reviewed by nobody**. `/build` Phase 4 says to
re-review material fixes; it does not say to hold the tree still while a review
is in flight, and it should. Next session: snapshot, review, then fix.
The four it watched being repaired were all real and all measured: the lost
italic preload on `/`, the 24→48px prose regression, three elements the print
block missed (rasterised from `printToPDF` at 100 dpi: 2.49:1 and 3.96:1 against
white), and dead page-scoped CSS whose compiled selectors carried the old page
cids while the rendered elements carried `ContactBand`'s.
**Two of the eight were defects in fixes from this same session:**
- **`/` kept `fetchpriority="high"` while `/about/` withheld it on the identical
measurement.** Portrait visible px: **0 at 320, 0 at 360, 0 at 390**, with LCP
measured as `P.hero-lede` — so the attribute promoted 2749 KB of image the
reader cannot see above the face that paints the actual LCP element, on the
axis the ≥95 budget is measured on. Removed. `loading="eager"` stays; the
portrait is the LCP element from 768px up.
- **The 1080 rung I added closed the 390px gap and missed the two largest current
iPhones.** 428@3 and 430@3 need 1140/1146 and took **1440 — 48,799 B**, against
27,594 for the device the rung was tuned for: **+21,205 B, 13% of page weight.**
A 1200 rung closes it at 1.05x. Third iteration of this ladder.
**And one of my stated reasons was simply wrong about ARIA.** I removed
`role="list"` from the arc `<ol>` on the ground that it *"re-announces an ordered
list as an unordered one"*. It does not — **both `<ul>` and `<ol>` map to the
`list` role**, so on an `<ol>` it is a no-op for ordering. What it is for is the
WebKit heuristic that strips list semantics from a list with
`list-style-type: none`, which `.arc` sets. Restored, and `.arc`'s hand-written
`padding: 0; list-style: none` deleted because `global.css`'s `ol[role='list']`
reset already supplies both. **Not verified: whether WebKit's heuristic covers
`<ol>`.** No Safari instrument here, so the role stays on the precautionary side.
Also fixed: `ContactBand` shipped `eyebrow?`, `cta?` and a named `heading` slot
with **zero call sites overriding any of them** — the pattern this repo has
already deleted twice, in `Eyebrow` and `SectionHeading`, with the reasons written
into the source. All three gone; the empty `Props` guard stays, because that is
what makes `<ContactBand class="x" />` a build error. `.section-head` moved to
`global.css` (byte-identical in two pages, seventeen to come). `sizes` corrected
in the 66rem80rem band, where `42vw`/`38vw` described neither track — measured
36.0% and 32.5% — costing up to **1.45x** over-fetch at 1200/DPR 1.
Two residual over-fetches left deliberately and recorded in the source: 320@2 at
1.18x (no rung between 480 and 640, and 480 would be an upscale) and 1056@2 at
1.26x, where 380.2 x 2 = 760.4 misses the 760 rung **by four tenths of a pixel**.
Declaring 35vw to duck under it would make `sizes` less truthful across the band
for a 0.05% upscale. The declaration stays honest.
`docs/02`'s reflow table is corrected (65 → **63** px, re-measured) and now
carries an `/about/` row — the first page measured *against* that table rather
than establishing it. It records that `.designation-part { white-space: nowrap }`
was itself introduced as a fix, for an orphaned separator, and created a
**108px** reflow regression at 320px.
### Register defects the audits found in §4 itself
`claims-auditor` caught the register answering **its own question 1 with the
subject's words** — twice, the second time inside the paragraph added to explain
the first. The three new Offerings rows carried gating conclusions
(*"no designation is required to give a non-binding evaluation"*) under a
`[verified — Pouya]` stamp, which §4's own box says cannot carry a proposition of
law. Q1 is now `[unestablished]` on all three, the worked example's Q1 column is
emptied, and **Q46(a)** carries it. Nothing publishes on it today; it blocks
`/practice/` at step 5.
Also: **four documents recorded that `/about/` publishes memberships** after the
page had been changed not to — §9 Q44, §12 R10, `docs/06` and `schema.ts`. And
the widened *"all renew yearly"* survived in three of them plus
**`.claude/agents/claims-auditor.md` itself**, which the auditor found in its own
brief. Third stale claim located inside that file.
### Verified — measured, not asserted
```
npm run check 0 errors / 0 warnings / 0 hints
npm run lint eslint clean; prettier clean
npm run build 2 pages, no errors
npm audit 0 vulnerabilities
grep -rE 'animation:[^;}]*(scroll\(\)|view\(\))' dist --include='*.css' → no match
```
- **Portrait ladder: 0 upscaling** — across 24 synthetic samples and then across
**11 real device profiles** on both pages (was 1.40× / 1.93×). Worst oversize
1.26×, at one viewport, recorded in the source with the reason.
- **`.section-head`: 48 px on all seven wrappers** after the rule moved to
`global.css` — re-measured, because moving a rule that exists to work around
the parent/child scope trap is exactly where that trap recurs.
- **Overflow 0 and 0 over-wide elements** at 13 widths on both pages — elements
measured, not only the document.
- **Contrast: 0 failures** of 127/127/128 painted pairs on `/` and 86/86/88 on
`/about/`, at 390/768/1280.
- **Print, against white paper: 0 failures** of 89 and 48 visible text elements
under print-media emulation (was 1.07:1 on the arc, the contact band and both
CTAs).
- **200% default font size: `/about/` 63 / 23 / 0** px overflow at 320/360/390,
against `/`'s 63 / 23 / 3. The 320/360 residual is the header `A.brand`, which
`docs/02` already accepts.
- **Reveal: 0 of 10 and 0 of 4 hidden** under `prefers-reduced-motion: reduce`
and under print.
- One `<h1>`; outline `h1 → h2 → h3` with no skips; 30 tabbable elements of 37 in
the DOM (the 7 are closed `<details>` contents, correctly untabbable and
correctly ringed when open).
- **Bio: 409 words by my count, 411 by `adversarial-reviewer`'s** (spec 400600).
The two differ on whether a standalone em-dash is a token; both are inside the
range and neither is presented as the number. It was **385** at first review,
which is the point of measuring it — the source comment then claimed the count
had been verified against *"the verify step of this session's Change Log
entry"*, a document that did not yet exist.
- **Zero `<script>`** other than `application/ld+json`; no `.js` in `dist`.
- **Lighthouse: NOT RUN — tool unavailable** (R11, step 7).
- **HTML validator: NOT RUN.** The duplicate-`1x` srcset conformance error
recorded at step 2 stands; no "validator clean" claim is made.
### Sweeps — the command, then the output
```
$ grep -rni "settlement counsel" . --include='*.md' --include='*.ts' --include='*.astro'
AGENTS.md:293 (§4 scope enumeration — REMOVED from the list, pointer added)
AGENTS.md:567 (§9 Q42 — now ANSWERED, records the strike)
AGENTS.md:3298 (Change Log entry (d) — history, not edited)
docs/07-fees.md:128 → three services, not four
docs/01-architecture.md:235 → struck from the strip, with Pouya's reasoning
src/data/site.ts:236 → FEES.hourly comment
src/pages/index.astro:423 → areas-more comment
```
Every live instance struck or converted to an explicit prohibition. A
**whitespace- and blockquote-insensitive** sweep was needed to find them all: a
plain `grep` for `take on faith` returned four hits and **missed `docs/03`
entirely**, because the phrase wrapped across a newline behind a `>` marker — the
positioning statement, i.e. the one that mattered.
```
$ (normalised sweep for "all renew yearly" / "/about/ publishes")
→ every remaining match is a QUOTATION INSIDE A CORRECTION, read individually.
$ (rendered-text-only forbidden sweep, printed with context)
→ 4 matches, all read: "a licence question" (software licence, x2),
"I do not act for a party" (the protective negation), "their own legal advice"
(advising the reader to get advice). The `aLSO` / `pLEADINGs` family.
$ grep -rn "law degree on one side" --include='*.astro' --include='*.ts' --include='*.md' .
docs/03-content-spec.md (spec quotation, canonical form)
src/data/site.ts (the constant)
→ one authoring location.
```
### Instrument errors caught before acting — six this session
`CLAUDE.md`'s rule earned its place again. None of these reached a report:
1. A `<title>` probe using a regex that **cannot match a `<title>` element**
reported "MISSING" on both pages.
2. A link checker counting `?v=1` query strings as missing files.
3. `/` at 390/DPR1 reading as **2.81× oversized** — an HTTP-cache artefact.
Cleared: 0.90, correct.
4. "**7 focusables with no focus ring**" — closed `<details>` contents, correctly
untabbable, correctly ringed when open.
5. A `<picture>` regex that grabbed the **header's infinity mark** instead of the
portrait, reporting the AVIF ladder as 0 bytes.
6. `/about/`'s print button reading as gold **because print media was emulated
after navigation on one page and before it on the other.**
And one non-error worth recording: `adric.ca/designations/` really does serve
zero designation names — but only checking the **raw bytes** established that,
because 4,840 characters extracted from 114,985 is the signature of a
JS-rendered shell, not of an absence.
### Corrections to comments that asserted the opposite of the measurement
Recorded because the confident ones were the false ones:
- *"The `<picture>` WRAPPER carries no cid, so it needs `:global()`"* — false.
The emitted markup is `<picture data-astro-cid-ta2fbyqs="true">`, and
InfinityMark's **bare** `picture` selector compiles to
`picture[data-astro-cid-usztftas]` and works. `:global()` dropped on both pages.
- *"The LCP element on this page is the `<h1>` — two words of 96px serif"*
false twice. LCP at 1280 is `IMG.portrait-img` (229,679 vs the h1's 51,484), and
`--text-5xl` computes to **76px**, not 96.
- *"above the fold at every width"* — false. The portrait is **entirely** below
the fold at 320 and 360, the two widths `docs/02` names.
- *"`--text-meta` on cream measures 3.07:1"* — false, in two files. It is
**5.47:1**; 3.07 is the ratio on **ink**, which is what `tokens.css` says.
- *"the components have had their `class` props deleted so passing one is a build
error"* — false for `Pill`, which had **no `Props` interface at all**, so its
call sites were unchecked. `CLAUDE.md` names `Pill` as the next place the
parent-scope defect will happen; the guard documented as protecting it was
absent on exactly it.
- A comment citing *"the word-count assertion in the verify step of this session's
Change Log entry"* — **which did not exist yet.** The same shape §9's Q39 row
already records as a fair catch.
### Files
New: `src/pages/about.astro`, `src/components/ContactBand.astro`,
`docs/reference/lat-case-conference.md`. Changed: `AGENTS.md` (§4, §9, §12),
`CLAUDE.md`-adjacent agent brief, `docs/01`, `docs/03`, `docs/04`, `docs/06`,
`docs/07`, `src/data/{site,schema}.ts`, `src/layouts/BaseLayout.astro`,
`src/components/Pill.astro`, `src/styles/global.css`, `src/pages/index.astro`.
### Open for Pouya
**Q44** memberships (blocks the group + `memberOf` + cutover) · **Q45** the PDF
bio · **Q46** (a) ENE / DSD / advisory gating, (b) §11 as a source for
definitional expansions · **Q47** `jobTitle` without `worksFor` · plus
**Q23**, **Q34**, **Q38**. Live reminders: **R1**, **R10**, **R13**, **R15**.
**Next:** step 4 — `/mediation/`, `/arbitration/`, `/med-arb/`. `/arbitration/`
is where §4's paired-disclosure condition is hardest: it offers all three forms
and must state the Q.Arb stage plainly, *"and neither half may be dropped."*
## 2026-08-27 (w) — Build step 2: `/` ships. Q35, Q37 and Q39 close, and Q39's answer was that this register had been reasoning from a falsehood
**Pouya ruled on all five parked items in one message.** Four are implemented