feat: build step 4 — /mediation/, /arbitration/, /med-arb/; source ADRIC's rules
Build and deploy / build-and-deploy (push) Failing after 4s
Build and deploy / build-and-deploy (push) Failing after 4s
Three pages, five in the build, zero JavaScript. /arbitration/ carries §4's paired-disclosure condition on four surfaces and Q39's struck universal appears in no form. /med-arb/ meets the procedural-fairness objection at the level of process design and ships deliberately without Pouya's own protocol commitments, which are Q54. docs/01 directed the mediation page to name the "ADRIC Model Mediation Rules". No such document exists — 0 occurrences across all four of ADRIC's rules pages against 10 for "National Mediation Rules"; "Model" belongs to the Model Dispute Resolution Clause inside the rules. Caught only because R14 requires the source before the claim. docs/reference/adric-rules.md + adric-extract/ carry it, with the digest drift measured rather than assumed: the HTML changes per request, the text extracts are byte-stable, so the extracts are the artefact. Four review passes, 21 defects, and the pattern was mine: I wrote the Q54 gate into the page and then breached it four times, then round 2 found two survivors of round 1's own fixes and one defect round 1's fix created. Also removed a <title> naming a practised role §4 does not grant, a habitual presupposing awards issued, and a claim about what ADRIC's rules permit that my own reference doc says is unsupported. Two instrument failures caught before they became conclusions: touch targets measured over file:// with no CSS loaded (uniform 18px, including on a .btn with a 44px floor), and a schema.org validator call that parsed nothing and returned 0 warnings for everything. Both re-run with the instrument validated first. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0148NztQskLKKApP5SzAA78e
This commit is contained in:
co-authored by
Claude Opus 5
parent
2282183b4b
commit
f3138a0a79
@@ -0,0 +1,63 @@
|
||||
---
|
||||
/**
|
||||
* A `<dl>` of term/description pairs on an auto-fitting grid.
|
||||
*
|
||||
* EXTRACTED AT STEP 4 ON `adversarial-reviewer`'S FINDING, and the finding was
|
||||
* that `/mediation/`'s `.formats` and `/arbitration/`'s `.cols` were the same
|
||||
* component under two names — identical markup, near-identical CSS, and
|
||||
* `.cols` was already serving two different content types on one page.
|
||||
* `/practice/*` at step 5 wants it a fourth time. Same argument that extracted
|
||||
* `ContactBand`: two call sites, one already divergent, pages to come.
|
||||
*
|
||||
* `<dl>` RATHER THAN A DIV GRID, for `CredentialRow`'s reason: each pair is a
|
||||
* term and its description, so a screen reader gets them as an associated pair
|
||||
* rather than as a visual arrangement. Wrapping each `<dt>`/`<dd>` in a `<div>`
|
||||
* inside the `<dl>` is valid HTML and is what makes the grid tractable.
|
||||
*
|
||||
* A `<dt>` IS NOT A HEADING and must not become one. These sit under the
|
||||
* section's `<h2>`; promoting them to `<h3>` would be a heading level that adds
|
||||
* nothing to the outline, and `docs/02` forbids skipped levels either way.
|
||||
*/
|
||||
interface Props {
|
||||
items: ReadonlyArray<{ name: string; body: string }>;
|
||||
/** The grid's per-column floor, passed to `.grid-autofit` as `--grid-min`.
|
||||
* The `min(N, 100%)` guard lives there, in one place. */
|
||||
minColumn?: string;
|
||||
}
|
||||
const { items, minColumn = '17rem' } = Astro.props;
|
||||
---
|
||||
|
||||
<dl class="grid-autofit defs" style={`--grid-min: ${minColumn}`}>
|
||||
{
|
||||
items.map((item) => (
|
||||
<div class="def">
|
||||
<dt class="def-name">{item.name}</dt>
|
||||
<dd class="def-body">{item.body}</dd>
|
||||
</div>
|
||||
))
|
||||
}
|
||||
</dl>
|
||||
|
||||
<style>
|
||||
/* Columns and the `min()` guard come from `.grid-autofit` (global.css); this
|
||||
sets only the gap. It re-implemented them for one pass — a second copy of
|
||||
the guard, inside the extraction made to remove copies of the guard.
|
||||
`--grid-min` is passed inline by the caller because a parent cannot style
|
||||
this component's root, and a custom property is the one mechanism that
|
||||
crosses that boundary. */
|
||||
.defs {
|
||||
gap: var(--space-7);
|
||||
}
|
||||
.def-name {
|
||||
font-family: var(--font-mono);
|
||||
font-size: var(--text-xs);
|
||||
font-weight: var(--weight-medium);
|
||||
letter-spacing: var(--tracking-wide);
|
||||
text-transform: uppercase;
|
||||
color: var(--text-meta);
|
||||
}
|
||||
.def-body {
|
||||
margin-block-start: var(--space-2);
|
||||
line-height: var(--leading-body);
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user