8 Commits
Author SHA1 Message Date
jason5ng32andClaude Fable 5 0a0a739edd Style: fix a misplaced guard comment and two quoting nits
The provider-id comment block sat above requireValidRecordType; move it
back over requireValidProviderId. Also drop needless quote escapes in
the resolver-check script and match the ui/ double-quote style in
ButtonGroupSeparator.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-24 18:21:38 +08:00
fly1dandOpenAI Codex 79a5269fbc Chore(dns): align resolver diagnostics with runtime usage
Keep resolver health checks on demand and surface actionable runtime availability failures through the shared logger. Remove the GitHub Actions workflow so transient resolver connectivity does not affect code CI.

Co-authored-by: OpenAI Codex <codex@openai.com>
2026-08-24 16:44:46 +08:00
fly1dandOpenAI Codex bb8caa6cc2 Chore(dns): add resolver health checks
Run a daily and dev-push probe for every curated UDP resolver, checking recursive answers and honest NXDOMAIN responses. Add mocked unit coverage and publish a machine-readable report in the Actions summary.

Co-authored-by: OpenAI Codex <codex@openai.com>
2026-08-24 11:13:47 +08:00
jason5ng32andClaude Fable 5 58bd271d8b Refactor(ci): drop the i18n PR comment bot
Republishing PR-computed content under the bot identity needed ever more
laundering (fences, then schema validation) and the residue was still
reviewer-flagged — the data originates from code the PR controls, so no
amount of validation closes that. The convenience isn't worth the
privileged surface: the CI job summary already shows the same dashboard
from inside the PR's own sandbox, so the sticky comment, its artifact
hand-off and the --json mode all go.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-23 13:26:28 +08:00
jason5ng32andClaude Fable 5 10b3368f67 Fix(ci): render the i18n comment from validated numbers only
Even fenced plain text from the PR's run let a hostile PR speak in the
bot's voice. The artifact now carries a structured --json snapshot
(counts, locale codes, key paths); the privileged side validates every
field against enums, integer bounds and tight regexes, then renders the
comment text entirely with trusted code. A hostile PR can at most
misstate its own coverage numbers — it cannot emit prose, links or
instructions as the bot.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-23 12:41:00 +08:00
jason5ng32andClaude Fable 5 e61a1992f3 Feat(i18n): empty-value skeletons with scaffolding and build-time pruning
A beta pack is now en's full skeleton with untranslated values left as
"", so translation review is always a `"" -> text` diff and English left
in place can't masquerade as translated. pnpm i18n-new scaffolds a pack
and its registry line (--privacy / --checklist for the optional files,
which ship finished or not at all); pnpm i18n-sync realigns packs when
en changes. The gate flips accordingly (exact key parity everywhere, ""
legal only in beta main packs) and a Vite plugin prunes empty values at
build time, so shipped chunks carry only translated strings and ""
behaves exactly like an absent key at runtime.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-22 21:17:20 +08:00
jason5ng32andClaude Fable 5 6301d8b838 Feat(i18n): beta locale support with fallback chains, pack gate and status dashboard
A locale can now ship partially translated: registry status drives a Beta
badge in the picker, missing keys walk variant -> base -> en (one chain
definition feeds vue-i18n, the privacy/checklist datasets and the
changelog), and matchLocale gained family matching so pt-PT finds a
pt-BR pack. Changelog history is only required of full locales, removing
the biggest barrier for new-language PRs. tests/locale-packs.test.js is
the hard gate a pack must pass; scripts/i18n-status.js (un-gitignored
for contributors) reports coverage without ever failing. Only visible
behavior change: ?hl= resolves regional tags (?hl=zh-CN -> zh) instead
of dropping to English.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-22 20:13:14 +08:00
jason5ng32andClaude Fable 5 d325144f83 Feat(connectivity): ship the favicon fetcher and auto-heal missing icons
The fetch script was gitignored while the data test hard-required its
output, so outside contributors were blocked by a tool they couldn't
see. The script is now committed (pnpm fetch-favicons) and the data
test auto-downloads missing icons on local runs; CI stays offline and
keeps enforcing that PNGs are committed. Also adds a locale-coverage
check for list names.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-22 17:23:41 +08:00