v2.0 #7
Loading…
Reference in a new issue
No description provided.
Delete branch "dev"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
browser-messages.ts (69 descriptors incl. the downloadErrorCopy descriptor map — framing translated, TransferError.message passthrough stays verbatim) + list-view/messages.ts (breadcrumb labels). BucketsPage/BucketPage/ListView/Breadcrumbs fully catalog-driven: headers, arias, tooltips, empty/loading states, action bar with ICU plurals; placeholder allow-list pinned to {bucket, count, name, prefix}. format.ts: formatSize/formatLastModified gain an explicit locale parameter (Intl.NumberFormat numerals with binary suffixes kept; Intl.DateTimeFormat with UTC kept, h23); memoized per-locale formatters; callers thread useLocaleStore locale. en-US grouping supersedes v1's ungrouped toFixed output (documented in the module contract). Catalogs 73->144 (fr-FR English placeholders until i8). Sorting boundary test-pinned: locale switch re-renders cells but never reorders rows or refetches. v2.0 plan task i5 (wave 3). 1560 web tests green; typecheck/lint/check gates green; visual loop incl. 390px + fr-FR smoke. Reviewed and approved after a comment-only contract correction. Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>transfer/messages.ts (88 keys) + object-ops/messages.ts (83): status/cancel/headline/title maps are pure descriptor maps (statusDescriptor, cancelReasonDescriptor, panelErrorCopy/uploadRefusalCopy/downloadRefusalCopy with {headline, body|null, bodyValues} — body null = raw message verbatim); preflight oversize/too-many-files bodies derive at render from structured fields (binary MiB/GiB kept); executors stay formatting-free per ADR #41 s2. FSA-capability guidance (tester-found leak on Firefox/Safari >256 MiB) becomes the NoStreamingCapabilityError structured variant with descriptor-derived panel copy — end-to-end translated proof under fr-FR replaces the repro. ObjectOpsDialog unknown-enumeration fallback descriptorized via a type-enforced OpError union. Locale threaded into all six formatSize sites (no default-argument survivor). Rich text <bold> via react-intl tag functions. Catalogs 144->315 (fr-FR English placeholders until i8). v2.0 plan task i6 (wave 3). 1638 web tests green; typecheck/lint/check gates green; visual loop incl. real 300 MB multipart upload + fr-FR smoke. Reviewed and approved. Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>E2E (3 specs, 11 tests): real-stack live locale switch en<->fr (no reload/navigation — window-marker proof, session intact through a fresh S3 LIST, <html lang> flips, preference persists across reload); route-mocked /config variants (operator-default first paint, picker shows exactly the offered set incl. xx-XX intersection-out, fail-closed de-DE misconfiguration screen, stale-pref demotion); TopBar layout matrix both locales x {360,390,640,768,1280} on a 5-crumb deep route. E2E found the sm-tier TopBar overflow (yield hierarchy stopped one tier early; right-slot floor derived from the <sm inventory while sm shows the labeled logout): breadcrumbs yield through md with a 6rem visible minimum, per-tier slot floors (12.25rem <sm, 19.75rem sm+ derived from the longest shipped locale); guards folded into the passing matrix. Docs: README knob rows + In-process TLS + Languages/Langues sections + roadmap refresh; CONTRIBUTING string-extraction workflow (extract:locales -> mirror fr-FR -> parity gate) and pnpm check gate line; AGENTS.md check:locale-catalogs command line. v2.0 plan tasks i9 + wave-5 docs. Full pnpm test:e2e: 53 passed / 5 skipped (AWS-manual) / 0 failed; web unit 1729 green; typecheck/lint/check gates green. Pre-existing v1.0 session-restore/deep-link bug recorded in backlog (found by the new E2E). Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>9f3979b(ADR #45)The five per-domain descriptor sweeps' NON-EMPTY tests passed partly on react-intl's fallback chain: the harness could not synthesize rich-text tag callbacks (17 ids formatted to raw ICU source after a caught FORMAT_ERROR), and chrome/login passed no values at all. New shared test-only harness packages/web/test/i18n-sweep.ts — sweepValues(message) synthesizes the full value set from the message itself (count-like placeholders, plural/selectordinal/select/number arms, rich-text tag callbacks) and createSweepIntl() captures onError into an array. Every sweep now formats through a real pass and asserts ZERO captured errors (offending ids named on failure) — the fallback chain stays for runtime resilience but is disqualifying in a contract test. Silencing via onError: () => {} remains ADR-rejected. Test-only: no production code, #39 §6 CI gates untouched, inspector/sql sweeps out of scope. Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>bc5ce88(ADR #44)17a98eb(ADR #46)17a98ebApp-authored inspector vocabulary crosses the worker wire as stable keys — MetadataField.labelKey (18-key closed union), structured notice {key, values} (6 keys incl. previewTruncated, a recorded v1 gap-fill pending architect amendment), keyed format (13 keys) — and maps to descriptors on the main thread via the new pure module metadata/field-messages.ts (ids inspector.field.*/notice.*/format.*); Inspector formats via useIntl() with verbatim fallback on unknown keys (data labels, Parquet column names, hostile payloads stay verbatim). Date exception (§3): meta.created/modified render via active-locale UTC DateTimeFormat (the list-view house skeleton). Catalogs: en-US regenerated 456→493; fr-FR hand-authored per i8 discipline + ADR #48 §4 glossary (office product names stay verbatim — glossary line amendment pending). i7 static-scan guard extended over the extractors; inspector-messages exemption block updated; test repins ride the implementation per the sweeps precedent. Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>d412f12final code commit), full pre-tag battery green, routing resolved