You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
i18n audited at **two mismatches**, both fixed in the same PR:
183
+
`i18n.getTranslations` sent `/translations?locale=xx` and
184
+
`i18n.getFieldLabels` sent `/labels/:object?locale=xx`, while every serving
185
+
surface — service-i18n's mounts, the dispatcher's HTTP mounts, and the
186
+
`plugin-rest-api.zod.ts` contract — mounts only the path form. Both were
187
+
wire-level 404s, and both had carried a green `sdk` row in
188
+
`route-ledger.ts` since tranche 1: **§1 coverage rows assert the client method
189
+
exists, not that it speaks a URL anything mounts.** The same audit found
190
+
service-i18n omitting the `success` flag from its `{ data }` bodies, so
191
+
`unwrapResponse` returned the raw wrapper against that provider while
192
+
returning the declared shape against the dispatcher — one method, two shapes,
193
+
decided by which plugin mounted the route.
194
+
195
+
Also filed, not fixed: `GET {base}/_local/file/:key` is built by three call
196
+
sites and mounted by none (#3641).
197
+
198
+
**The gap all three ledgers still share** is the reverse direction — no guard
199
+
compares the URL a client method *builds* against the patterns any surface
200
+
*mounts*. Four instances of that class have now been found one at a time
201
+
(#3584 ×2, #3611, #3636 ×2). Mechanizing it is the capstone, #3642.
202
+
160
203
## Follow-up slicing (proposed)
161
204
162
205
1.**`client.actions.invoke(...)`** — closes the largest hole (3 routes).
@@ -166,7 +209,9 @@ three-column method is the next tranche of #3563.
166
209
5.**Mismatch reconciliation** (§4) — done in #3584: analytics client aligned to the dispatcher, storage protocol documented as canonical (see §4 Resolution).
0 commit comments