Skip to content

Commit 46a5b12

Browse files
committed
Fill in the change log hash for the Rails adapter
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent 11456a0 commit 46a5b12

1 file changed

Lines changed: 1 addition & 1 deletion

File tree

docs/changelog.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@ zero across these commits; several were pre-existing bugs the old markup had bee
342342
| `b1c97ada2` | **`.link-brand`: 71 hand-written link styles become one class, and every link gains a non-colour cue.** Previewed as rendered HTML before building, and the preview changed the answer. My first recommendation covered colour and weight and was **silent on affordance**; asked "shouldn't it have an underline for accessibility", measuring settled it. **Brand colour against the prose these links sit in: 1.04:1 on `slate-600`, 1.31:1 on `slate-700`, 2.26:1 on `slate-900`** — WCAG technique **G183 wants 3:1** when colour is the only marker, so colour was doing essentially nothing. Against white it is 7.90:1: the links were readable, just not *identifiable*. And of **78** brand link strings, **3** had `hover:underline` and **6** any focus style — a table-cell link had no non-colour cue at rest, on hover or on focus, verified in a browser. The class carries the colour plus `underline` on **hover and `:focus-visible`**. **It carries no weight**, deliberately: a table cell is already `font-medium` and the link inherits it, a list of nineteen item names should not be medium per line, a sentence adds it — measured after, the name-cell link is **500** and the list link **400**, exactly as before. Baking weight in would have bolded six list links to make the rule tidier than the design is. **Nothing changes at rest**: colour identical, weight per context, no decoration. 71 strings in 13 shapes across 48 files; the 5 `file:text-brand-700` and 2 avatar discs correctly untouched. `page-audit` now reports a hand-written `hover:text-brand-800` as a defect, proven by planting one. axe 156 pages 0 violations; 46 examples 0 failures. |
343343
| `58e10a924` | **The "Current state" table is generated, and CI fails when it drifts.** It was hand-maintained, and hand-maintained meant wrong: refreshed on 2026-09-03 and **42 commits stale two days later**, and before that it had drifted far enough that `migration-map.md` carried a second copy disagreeing with it. Every figure in it was already computed by something — `status.rb`, `dead-routes.rb`, `dead-code.rb`, `undefined-classes.py`, a couple of `git` counts — so the only reason they went stale is that a person had to copy them across. `bin/design/state.rb` rewrites the block between two markers; the prose around it stays hand-written, because a generator has nothing useful to say about which numbers are misleading. **`--check` is wired into the `audit-selftest` workflow** and fails when a figure has drifted, the same discipline as a schema dump. **It deliberately excludes the commit and file counts** — those change on every commit, and a gate that fails every pull request for a reason nobody can act on is a gate that gets switched off. Proven both ways: corrupting `Routes whose request would raise` fails the check, corrupting the commit count does not. Two faults found while building it — `sh` resolves to Rake's `FileUtils#sh` under `rails runner`, which echoes the command and returns `true`, so every figure came back as `true`; and CI checks out shallow, so `main..HEAD` resolves to nothing and the git counts would have printed a confident **0**. They say `n/a (no main ref)` now, verified by renaming the branch. |
344344
| `380833de9` | **The avatar disc deferral was wrong, and the duplication was hiding a defect.** Asked why it had not been done, and looking settled it: the reason on file — that merging with `essentials_step_number` needs a size *and* a semantics argument — is true and **beside the point**. The two copies were **byte-identical to each other**, so extracting them needed no argument at all. Deferring a two-line job because a *different* question about it was hard is how it survived the whole migration. **Both copies were also wrong**: they passed `display_name`, which returns the literal `"Name Not Provided"`, so a nameless user's avatar read **"NN"** — **9 such users** in the development database. The partner bar appeared to guard against it with `display_name.presence || email`, but `display_name` is never blank, so that fallback was **dead code** and it rendered "NN" as well. `essentials_avatar_disc(user)` owns the markup and the name choice, using `preferred_name`. **The same fault was in the trigger's `aria-label`**, so two different users announced as *"Account menu for Name Not Provided"* — identical to the defect this project found and fixed in `users/_organization_user`, and missed here because the topbar was edited three times this week without anyone reading that line. Measured after: bank `org_admin1@example.com`, partner `Justine Baumbach`, admin `superadmin@example.com` — three distinct names. 4 helper examples watched failing with `got: "NN"`; 144 examples, axe 156 pages 0 violations, `page-audit` 0 defects. `essentials_step_number` stays separate and that half stands. |
345-
| `PENDING` | **The adapter, written — and the deferral was half right, which is why measuring it first mattered.** The reason on file was that inventing a cross-stack abstraction from a sample of one repeats an earlier mistake. **That still holds**, and nothing here claims the interface generalises. But it was doing double duty: it also deferred writing down the Rails adapter that **already exists and works**, for which the evidence is 34 audit scripts over 155 screens. Two jobs, one reason — the same shape as the avatar disc deferral an hour earlier. `templates/adapter-rails.md` (128 lines) records what runs: the nine-export seam, route enumeration behind one `TARGETS_CMD` variable, the Devise sign-in with the four details that were each a bug first, role predicates including the awkward `/partners/12` case, and `visit` returning null so a caller can tell *not checked* from *fine*. **The most useful part is the honest measurement**: only **7** browser audits import the seam, **13** shell out to the generator directly, and **16** files still carry their own `signIn`, at least two byte-identical. **A change log row was overstated and is corrected**: it said the seam was "replacing 21 hand-copied `signIn` functions" when the commit changed three files and converted one audit — it made 21 *replaceable*. A seam nobody adopts is a ninth way of doing something with none removed, and the skill now says so, with the cheap first step: a check that fails on a new private `signIn` so the number can only go down. |
345+
| `11456a0d8` | **The adapter, written — and the deferral was half right, which is why measuring it first mattered.** The reason on file was that inventing a cross-stack abstraction from a sample of one repeats an earlier mistake. **That still holds**, and nothing here claims the interface generalises. But it was doing double duty: it also deferred writing down the Rails adapter that **already exists and works**, for which the evidence is 34 audit scripts over 155 screens. Two jobs, one reason — the same shape as the avatar disc deferral an hour earlier. `templates/adapter-rails.md` (128 lines) records what runs: the nine-export seam, route enumeration behind one `TARGETS_CMD` variable, the Devise sign-in with the four details that were each a bug first, role predicates including the awkward `/partners/12` case, and `visit` returning null so a caller can tell *not checked* from *fine*. **The most useful part is the honest measurement**: only **7** browser audits import the seam, **13** shell out to the generator directly, and **16** files still carry their own `signIn`, at least two byte-identical. **A change log row was overstated and is corrected**: it said the seam was "replacing 21 hand-copied `signIn` functions" when the commit changed three files and converted one audit — it made 21 *replaceable*. A seam nobody adopts is a ninth way of doing something with none removed, and the skill now says so, with the cheap first step: a check that fails on a new private `signIn` so the number can only go down. |
346346

347347

348348

0 commit comments

Comments
 (0)