v2.0 #7

Merged
xavier merged 39 commits from dev into main 2026-08-20 07:49:27 +02:00
Owner
No description provided.
Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
docs(plans): backlog — raw HTTP/2 and HTTP/3 listener ideas; fix dangling v1.2 link
All checks were successful
release / build + scan + publish (push) Successful in 1m1s
CI / pnpm gate (typecheck, lint, build, test) (push) Successful in 1m36s
49b269b116
Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
Execution greenlit 2026-08-16. Plan layer beneath both scope items per ADRs #39-#43: 9 i18n tasks, 2 TLS tasks, 5 waves. Preamble process-status refresh: v1.2 connection profiles shipped 2026-08; today's HTTP/2-3 ideas are backlog, not v2.0. Scope items untouched.

Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
ConfigResponseSchema gains required defaultLocale (resolved DEFAULT_LOCALE, pinned 'en-US' default) and optional availableLocales (verbatim operator tags; the client owns the shipped-catalog intersection). Proxy buildConfig validates per ADR #40 §5: BCP-47 structural validation via Intl.Locale, DEFAULT_LOCALE ∈ AVAILABLE_LOCALES when both set (canonical comparison), and the fail-closed unset-default guard — AVAILABLE_LOCALES set without canonical en-US refuses boot (no implicit en-US addition to the picker). Web fallout is mechanical: DEFAULT_CONFIG + test fixtures gain the required field.

v2.0 plan task i1 (wave 1). Full validation matrix + catalog-blindness pins in config tests; reviewer-approved.

Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
tls-options.ts pins the floor in one place (minVersion TLSv1.2; exactly the six AEAD-only ECDHE suites for TLS <=1.2; TLS 1.3 left at Node defaults). tls-config.ts is a pure both-or-neither resolver for TLS_CERT_FILE/TLS_KEY_FILE (_FILE-only, no plain variant): unreadable path -> ConfigParseError naming knob+path; empty file / malformed PEM / key-cert mismatch -> generic error, contents never echoed (createSecureContext + KeyObject.equals leaf-public-key backstop for cross-type mismatches createSecureContext misses). app.ts gains the https factory option (conditional spread; absent -> byte-identical v1 plain-HTTP listener); server.ts resolves once at boot and logs TLS-armed + cert subject/validity (public data) — key material structurally never reaches a log path. Committed self-signed EC P-256 fixture (CN=localhost, non-secret). HTTP/1.1 over TLS only — no HTTP/2, no HTTP/3.

Tests: resolver taxonomy, floor invariants, https-boot (handshake, plain-HTTP-refused, https_required passes natively, HSTS, TLS 1.2 liveness), and the F4 redact canary-key boot sweep across every error path (standing rule). v2.0 plan tasks t1+t2 (wave 1); reviewer-approved.

Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
react-intl@10.1.20 + @formatjs/cli@6.16.16 (both >=7d re-verified at install; no minimumReleaseAgeExclude needed). Catalogs at src/i18n/locales/ (COMPONENTS brief; ADR #39 s3 amendment routed to architect): en-US.json source/fallback + fr-FR.json seed (English placeholders until the i8 French pass), both statically bundled; import.meta.glob is the beyond-pair lazy manifest — no CSP changes. preferences/locale-store.ts mirrors theme-store: persisted pref (if offered) -> operator default (if offered) -> 'en-US', stale pref = demotion, effective = (availableLocales ?? shipped) INTERSECT shipped, fail-closed misconfiguration state, <html lang> ownership, store-held createIntl re-created on swap, key-scoped storage-event cross-tab soft sync, no navigator.languages sniffing. Boot: config -> initLocale -> catalog ready -> render. TopBar gains the LanguagePicker (Intl.DisplayNames endonyms, exact offered set); App gains the misconfiguration branch on the resident en-US catalog.

v2.0 plan task i2 (wave 2). 1458 web tests green (71 new: store 43, picker, loader, onError, app-level); typecheck/lint/build green; visual loop verified (live switch, first paint, responsive). Reviewed and approved.

Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
scripts/check-locale-catalogs.mjs: gate 1 regenerates en-US.json from source via the packages/web extract:locales script (single source of truth — flags parsed, not duplicated; --out-file redirected to a temp dir) and fails on drift, naming offenders; gate 2 requires every shipped locale's key set to equal en-US's (missing and extra both fail). Wired into root check and as a CI step after the supply-chain gates. en-US.json regenerated once to the tool's canonical key order (order-only change). Developer workflow documented in the script header: add strings, run extract:locales, mirror keys into fr-FR.json, commit together.

v2.0 plan task i3 (wave 3 entry). pnpm check green; negative behaviors (drift / missing key / extra key) proven and reverted; full suites green (2417 tests).

Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
login-messages.ts (40 descriptors; friendlyHeadline becomes the pure headlineDescriptor(code): MessageDescriptor with the exhaustive never-default preserved) + chrome descriptors in components/messages.ts (33 total). All labels, placeholders, tooltips, aria-labels and error framing on LoginPage/SavedConnections/AppLayout/TopBar/ThemeToggle/ErrorBoundary/NotFound/RouteError/DevError render from the catalog; RelayError.message / Error.message / statusText passthroughs stay verbatim per the i18n spec exemption; endpoint URLs and credentials never enter ICU (SavedConnections delete name composed via aria-labelledby DOM nodes). ErrorBoundary formats through the store-held intl (renders above IntlProvider). Catalogs 7->73 keys (fr-FR English placeholders until the i8 French pass). TopBar: LanguagePicker mount pinned in tests + compact-mobile yield-hierarchy fix (review-evidence round caught Logout off-canvas at >=2 breadcrumbs: breadcrumbs yield first via flex-1 below sm, picker floor min-w-14 self-truncates, right slot structural floor min-w-[12.25rem] keeps Logout on-canvas; >=640px byte-identical). Plural tripwires tightened to ICU-shape regex.

v2.0 plan task i4 (wave 3). 1507 web tests green; typecheck/lint/check gates green; DOM matrix 360-1280px x 1-6 crumbs verified + vision critique. Reviewed and approved (i18n + fix delta).

Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
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>
sql/messages.ts (93 keys), data-inspection/messages.ts (35), inspector-messages.ts (13). Coordinator/guard/store error-mapping tables extracted as structured payloads: SqlQueryError.detail (16-reason tagged union), DataInspectionError.detail (9 reasons), MetadataResult.reason (5, main-thread-mapped only) — wire message fields stay byte-identical English diagnostics (tests pin them), pure descriptor maps render the user-facing framing, body:null renders the diagnostic verbatim per the spec exemption. Workers, coordinator, store and guard import no react-intl/Intl (worker-boundary static-scan test guards it; data-inspection deep-imports the defining module after the S1 barrel fix). SqlResultsTable rowCount moves from toLocaleString() to ICU plurals through the provider locale; every formatSize/formatLastModified site repo-wide now threads the store locale (no default-argument survivor). Export headlines get per-kind descriptors (v1 Export-prefix string surgery gone). Catalogs 315->456 (fr-FR English placeholders until i8).

v2.0 plan task i7 (wave 3 complete). 1729 web tests green; typecheck/lint/check gates green; visual loop with real duckdb engine + fr-FR smoke. Reviewed and approved.

Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
All 456 values translated to idiomatic fr-FR (was English placeholders). Glossary: bucket kept untranslated (operator-facing term), Envoyer/Télécharger for upload/download, point de terminaison, connexion for saved profiles, atelier SQL; verbatim keeps: SQL, Parquet, CSV/JSON, KB/MB suffixes, brand, HTTP/URL, storage-class enums (12 intentional identical pairs). Typography: U+2019 apostrophes, NBSP before : ; and inside guillemets. ICU integrity machine-audited: 0 placeholder mismatches, one+other plurals everywhere, select arms and rich-text tags intact. High-stakes strings verified line-by-line (ADR #02 disclosure, FSA guidance, misconfiguration screen, privacy footers). fr-dependent tests updated to real French pins (layered structural + ~20 hardcoded exact). load-catalog.ts placeholder-era comment replaced.

v2.0 plan task i8 (wave 4). 1729 web tests green; typecheck/lint/check gates green. Reviewer native-quality pass: zero translation fixes required; 4 polish items applied.

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>
AGENTS.md and CONTRIBUTING.md documented only compose.e2e.yaml for
pnpm test:e2e, but the F7/F9b drop-down-mode specs (endpoint-allowlist,
connection-profiles) poll a second externally-managed stack defined in
tests/e2e/compose.e2e.dropdown.yaml (localhost:18082/19100). Without it
they fail with a misleading 'proxy not ready' timeout — hit during the
v2.0 close-out verification run. Both docs now name both stacks; the
yaml's own usage header stays authoritative.

Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
docs(plans): v2.0 close-out verification — full battery green, routed items recorded
Some checks failed
CI / pnpm gate (typecheck, lint, build, test) (push) Failing after 2m12s
release / build + scan + publish (push) Successful in 2m31s
5010cac74d
Resumed PM session (tool restart interrupted the original after
ee57110): full gate battery re-verified at HEAD — build 3/3, unit
2688/2688, integration 7/7, E2E 53 passed / 5 AWS-manual skipped /
0 failed, typecheck/lint/check all green; supply-chain pins
re-verified >=7d at install (ADR #36/#39 §9). v2.0.md gains the
close-out block (incl. the catalog-path item routed to the architect);
backlog gains the proxy vitest load-timeout flake observed during
verification. Execution complete — awaiting Principal ship decision.

Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
docs(arch): v2.0 design→implemented — catalog path fix (ADR #39 §3), deployment view 'reverse proxy or native TLS', phase markers current
Some checks failed
release / build + scan + publish (push) Successful in 1m5s
CI / pnpm gate (typecheck, lint, build, test) (push) Failing after 1m53s
81a74fb030
Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
ADR #44: descriptor sweeps get synthesized rich-text callbacks and a
zero-fallback gate (onError captured, not silenced) — the 17 ids that
passed on react-intl's verbatim-source fallback become build-breaking.

ADR #45: ci.yml gate pins the official node:24.19.0 container (the
runner's default image ships a small-icu Node — Intl silently fell back
fr-FR to en-US, deterministically failing 26 fr tests across 7 files;
not a product bug) + locale-data canary step (scripts/check-node-icu.mjs).
fr assertions stay literal by discipline (computing them would pass
vacuously on a broken runtime).

ADR #46: workflows stay separated by policy (release untouched: dev,
v* tags, latest); enforcement moves to the merge boundary — ci.yml
triggers rescoped to push dev + PRs targeting main, merge gate bound by
Forgejo branch protection on main (ops action, Principal). Supersedes
v1.1.1's blanket PR-trigger disable.

ARCHITECTURE.md CI/CD view and COMPONENTS.md CI/CD + i18n sections
updated to match; stale 'Push + PR' claim in COMPONENTS.md corrected.

Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
docs(plans): v2.0 pre-ship rescope — items 3-5 recorded, execution greenlit
Some checks failed
release / build + scan + publish (push) Successful in 1m10s
CI / pnpm gate (typecheck, lint, build, test) (push) Failing after 1m42s
1dbc261c80
Item 3 (h1): i18n descriptor-sweep hardening (ADR #44), promoted from
backlog by Principal directive 2026-08-19 ('applied before tagging and
shipping').

Item 4 (c1, c2): CI gate ICU fix — node:24.19.0 container pin +
scripts/check-node-icu.mjs canary (ADR #45); zero product-code or
test-expectation changes; verification bar = the 26 predicted failures
vanish with zero test edits.

Item 5 (g1): ci.yml trigger rescope — push dev + PR main (ADR #46),
release.yml untouched; ops action flagged as blocking precondition
(Principal enables main branch protection with ci as required check).

Backlog: release-gate linkage item promoted into item 5 (decided);
header annotation approved by Principal ('2. Ok.'). Wave 6 sequencing:
c1 -> c2 -> h1 -> g1 -> full pre-tag battery -> gated merge PR to main.
Greenlight recorded: Principal, 2026-08-19.

Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
ci(i18n): pin gate to official node:24.19.0 + ICU locale canary (ADR #45)
All checks were successful
release / build + scan + publish (push) Successful in 2m12s
CI / pnpm gate (typecheck, lint, build, test) (push) Successful in 2m24s
9f3979b8e9
The runner's default container image shipped a Node without full ICU
locale data — Intl silently resolved fr-FR to en-US, deterministically
failing 26 fr-FR tests (7 files) in CI while green locally. The gate
job now pins its own runtime via container.image (official full
node:24.19.0 — git + full-icu, not slim/alpine), mirroring ADR #21's
project-scoped pattern. A locale-data canary (scripts/check-node-icu.mjs,
pure Node, zero deps) runs right after Setup Node — before Install
dependencies, invoked directly so pnpm 11's implicit auto-install cannot
precede it — and joins the root check composite. fr test expectations
stay literal (ADR #45 §3); release.yml untouched (ADR #45 §4).

Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
docs(plans): item 4 (c1, c2) done — gate green on 9f3979b (ADR #45)
All checks were successful
release / build + scan + publish (push) Successful in 1m4s
CI / pnpm gate (typecheck, lint, build, test) (push) Successful in 1m47s
7532ae28aa
Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
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>
docs(plans): item 3 (h1) done — zero-fallback sweep gate green at bc5ce88 (ADR #44)
All checks were successful
release / build + scan + publish (push) Successful in 1m5s
CI / pnpm gate (typecheck, lint, build, test) (push) Successful in 1m45s
1ed85f1b46
Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
ci(gate): trigger rescope — push dev + PRs to main, merge-gate governance (ADR #46)
All checks were successful
release / build + scan + publish (push) Successful in 1m2s
CI / pnpm gate (typecheck, lint, build, test) (push) Successful in 1m47s
CI / pnpm gate (typecheck, lint, build, test) (pull_request) Successful in 1m49s
17a98eb4d8
The gate's push trigger drops main (code reaches main already twice-gated:
its dev push and the merge PR) and gains a pull_request trigger scoped to
main — the scoped re-enable v1.1.1's blanket PR disable anticipated, now
the merge gate. Dev-targeting PRs stay ungated (v1.1.1 posture). The
concurrency block is untouched (per-ref lanes: pushes and each PR's head
cancel only their own superseded runs). release.yml is untouched by
ruling — the workflows stay separated; release never waits on the gate.
Actual enforcement is Forgejo branch protection on main with the ci job
as a required check — a repo-settings ops action (Principal), flagged in
the v2 plan as the blocking precondition for the merge PR.

Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
docs(plans): item 5 (g1) done — merge-gate check live on PR 7 at 17a98eb (ADR #46)
All checks were successful
release / build + scan + publish (push) Successful in 1m5s
CI / pnpm gate (typecheck, lint, build, test) (push) Successful in 1m52s
CI / pnpm gate (typecheck, lint, build, test) (pull_request) Successful in 2m4s
54d8b54596
Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
docs(plans): wave 6 close-out — items 3-5 done, pre-tag battery green at 17a98eb
All checks were successful
release / build + scan + publish (push) Successful in 1m1s
CI / pnpm gate (typecheck, lint, build, test) (push) Successful in 1m47s
CI / pnpm gate (typecheck, lint, build, test) (pull_request) Successful in 1m53s
f04b8d31ae
Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
Principal direction 2026-08-19, recorded by the architect: ADR #47
supersedes #40 §6's full-tag endonyms (uniform language-level picker
labels, title-cased, region suffix on offered-set collision); ADR #48
keys the app-authored inspector vocabulary across the worker wire
(labelKey / structured notice / keyed format) with main-thread
descriptor mapping in metadata/field-messages.ts. ARCHITECTURE.md v2.0
section + COMPONENTS.md Locale Store / Metadata Inspector key notes
updated; #40 status line notes the §6 supersession.

Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
Placement Option A: fr-FR inspector heading + consistency strings
(item 6), ADR #47 picker labels (item 7), ADR #48 inspector metadata
vocabulary (item 8) all ride v2.0; both PM descope flags ruled IN
(ADR #48 §3 date exception; item-6 consistency strings). Wave 7
opened; the 17a98eb battery carry-over voids with the first wave-7
code commit — full pre-tag battery re-runs at the new final code
commit.

Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
Principal-directed exact wording: inspector.heading "Inspecteur" →
"Métadonnées"; consistency strings ruled IN (flag 2):
chrome.appLayout.inspectorLabel → "Métadonnées" (aria mirrors the
visible heading), inspector.splitter.resizeAria → "Redimensionner le
panneau de métadonnées". Value-only; en-US unchanged; catalogs gate
green; no test pins the French values.

Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
Options render the primary subtag's endonym title-cased in its own
locale (English / Français) instead of full-tag CLDR endonyms; a
literal region suffix (English (US)) appears exactly when the offered
set collides on a primary subtag; degradation to the full tag
unchanged. Label computation extracted to the pure seam
components/language-picker-labels.ts (react-refresh-clean; directly
testable — the shipped two-locale catalog can't reach a collision via
config). Tests: repinned endonym pin, new collision/script/degradation
suite (11 seam tests).

Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
App-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>
9-test i6/i7-style suite: boots fr-FR, asserts the translated field
glossary / notices / format headers render from labelKey (English
fallback labels provably not driving rendering), data stays verbatim,
date exception renders fr UTC form (14/07/2026 18:22 — Node 24 ICU
comma-less), unknown-key fallbacks stay verbatim, live locale switch
re-renders without re-inspect. Mutation-verified: bypassing the
descriptor map fails 6/9.

Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
formatMetadataDate now requires an explicit zone (Z / ±HH:MM /
±HHMM) before parsing: ECMA-262 parses zone-less W3CDTF literals as
LOCAL time, which shifted the UTC-formatted clock by the viewer's
offset (non-Office-authored OPC files). Zone-less and date-only
literals render the raw wire string verbatim — the ADR #48 §3 'keep
their ISO string' clause honored literally; only unambiguous instants
get re-rendered. Regression-pinned in en-US + fr-FR incl. an
offset-equivalence case (20:22+02:00 renders as the same instant as
the Z form). Found in v5 review; reviewer re-APPROVE.

Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
docs(plans): wave 7 close-out — items 6-8 done + reviewed; routing (architect ADR #48 amendments, Principal 'Code' ruling)
Some checks failed
release / build + scan + publish (push) Successful in 1m32s
CI / pnpm gate (typecheck, lint, build, test) (push) Successful in 1m54s
CI / pnpm gate (typecheck, lint, build, test) (pull_request) Has been cancelled
923bbdb4f1
All 11 tasks done, every review APPROVE. Battery at 3e52b23: build
3/3, unit 2722/2722, typecheck, lint, catalogs 493 keys. Remaining
before the v2 merge: Principal 'Code' format ruling, then
integration + E2E at the final code commit, ADR #46 ops item,
French acceptance, gated merge. Backlog: two review-nit entries
(picker seam polish; zone-gate NaN-branch coverage).

Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
docs(adr): #48 as-shipped amendments — previewTruncated sixth notice key; office-format glossary line vacuous
All checks were successful
release / build + scan + publish (push) Successful in 1m33s
CI / pnpm gate (typecheck, lint, build, test) (push) Successful in 2m4s
CI / pnpm gate (typecheck, lint, build, test) (pull_request) Successful in 2m11s
320ba7510a
Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
docs(adr): #48 format vocabulary gains 'code' (Principal ruling 2026-08-19)
All checks were successful
release / build + scan + publish (push) Successful in 1m11s
CI / pnpm gate (typecheck, lint, build, test) (push) Successful in 1m43s
CI / pnpm gate (typecheck, lint, build, test) (pull_request) Successful in 1m51s
0a0550579b
Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
ADR #48 §1 as amended at 0a05505: the format vocabulary gains
'code' — code-file labels had ridden the unknown-format verbatim
fallback, which exists for hostile/unknown payloads, not known
app-authored labels. One emitter switched (extractors/text.ts
CODE_EXTENSIONS branch); inspector.format.code descriptor added;
catalogs 493→494 (fr-FR 'Code' verbatim, bare-name precedent, keyed
for future locales); unknown-format fallback re-pinned by a genuine
x-unknown case; fr-FR suite gains the code family; field-messages
gap-fill notes updated for the landed 320ba75 amendments.

Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
docs(plans): wave 7 complete — code key landed (d412f12 final code commit), full pre-tag battery green, routing resolved
All checks were successful
CI / pnpm gate (typecheck, lint, build, test) (push) Successful in 1m42s
CI / pnpm gate (typecheck, lint, build, test) (pull_request) Successful in 1m40s
release / build + scan + publish (push) Successful in 51s
d8a212701d
Principal ruling 'Ok for 1., code key.' executed as task v6
(d412f12, reviewer APPROVE). Full pre-tag battery at the final code
commit: build 3/3, unit 2724/2724 serialized, check 5/5 gates,
integration 7/7, E2E 53/5/0 — BATTERY GREEN. All routed architect
amendments landed (320ba75, 0a05505). Remaining before merge is
Principal-side only: ADR #46 ops action item (branch protection),
French acceptance, gated merge via PR #7, tag. Backlog: parallel
runner-topology flake item (generalizes the two file-specific
siblings; serialized-run invocation note included).

Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
xavier merged commit d8a212701d into main 2026-08-20 07:49:27 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
xavier/s3-vedrfolnir!7
No description provided.