Skip to content

Latest commit

 

History

History
278 lines (207 loc) · 30.4 KB

log.md

File metadata and controls

278 lines (207 loc) · 30.4 KB

LOG

20260213

目前我这个项目主要是想要开发一个纯前端的项目工具网站,比如JSON/SQL的格式化,UUID生成等等,我想要使用 Svelte + Tailwind + Vite + Biome 来构建一个轻量化的纯前端工程,并且后续会使用cloudflare pages/workser构建部署,部分提示词我已经放在了 @GEMINI.md 下面,请你上述背景为我做一下事情:

  1. 使用pnpm搭建项目基本环境
  2. 生成 tailwindcss、vite、biome等业内最佳实践的规范配置
  3. 补充项目背景在 @GEMINI.md 文件里面
  4. 依据业内规范生成并补充内容.gitignore 文件里面
  5. 依据业内规范使用biome和husky等配置git hooks
  6. 其他业内规范在项目搭建初期需要做的事情 如果有问题,请及时与我确认

先帮我完善一下 UUID生成的这个工具吧,需要包含一下逻辑:

  1. 点击生成随机的UUID,并且生成之后字段复制到系统截切板
  2. UUID生成之后也会出现手动复制的按钮
  3. 当前前面每次用户生成一个UUID 下方就会出之前历史生成的UUID的信息(纯前端展示存储)
  4. 支持用户校验一个UUID,就是用户把一个UUID复制进来之后,可以校验是否是一个标准格式的UUID
  5. 其他类似UUID生成网站的功能 请以上述背景,为我编写这个UUID工具的功能吧

我刚又在 @GEMINI.md 补充和完善了一些上下文信息,请你知悉

现在有这个错误

[vite] Internal server error: src/routes/uuid/+page.svelte:85:12 Cannot bind to constant
https://svelte.dev/e/constant_binding
  Plugin: vite-plugin-svelte:compile
  File: src/routes/uuid/+page.svelte:85:12
   83 |            <input
   84 |              type="text"
   85 |              bind:value={validationInput}
                                                 ^
   86 |              placeholder="Paste UUID to validate..."
   87 |              class="w-full rounded-lg border px-4 py-3 font-mono text-sm focus:ring-2 focus:ring-indigo-500 outline-none

现在还是有这个错误,请帮我修复一下

1:33:04 PM [vite] Internal server error: src/routes/uuid/+page.svelte:85:12 Cannot bind to constant
https://svelte.dev/e/constant_binding
  Plugin: vite-plugin-svelte:compile
  File: src/routes/uuid/+page.svelte:85:12
   83 |            <input
   84 |              type="text"
   85 |              bind:value={validationInput}
                                                 ^
   86 |              placeholder="Paste UUID to validate..."
   87 |              class="w-full rounded-lg border px-4 py-3 font-mono text-sm focus:ring-2 focus:ring-indigo-500 outline-none (x3)

20260224

目前我还在完善我的这个纯前端的工具网站,现在在开发UUID生成的这个工具的时候,提示以下错误

[plugin:vite-plugin-svelte:compile] src/routes/uuid/+page.svelte:85:12 Cannot bind to constant
https://svelte.dev/e/constant_binding

+page.svelte:85:12

83 |            <input
 84 |              type="text"
 85 |              bind:value={validationInput}
                                               ^
 86 |              placeholder="Paste UUID to validate..."
 87 |              class="w-full rounded-lg border px-4 py-3 font-mono text-sm focus:ring-2 focus:ring-indigo-500 outline-none

能帮我修复一下吗

修复记录:将 validationInput 从 const 改为 let,以允许 bind:value 正常工作。

补充修复:为 Biome 的 Svelte 误报添加忽略注释,消除 noUnused* 警告。 配置优化:Biome 的 Svelte 覆盖规则改为匹配 **/*.svelte,并移除文件内的忽略注释。 配置优化:lint 脚本串联 svelte-check,并在 tsconfig.json 中开启 noUnusedLocals 与 noUnusedParameters 以获得更准确的 Svelte 脚本级提示。

新增:添加 wrangler.toml,用于 Cloudflare Workers 部署(适配 SvelteKit adapter-cloudflare 输出)。

更新:加入 wrangler 到 devDependencies,用于 Cloudflare Workers 部署命令。

更新:新增 commit-msg 钩子,强制提交信息遵循 feat: / docs: / chore: 规范。 修正:去掉 commit-msg 中 Husky v9 已弃用的引导行,避免警告与未来升级风险。 更新:扩展 commit-msg 允许的提交类型(feat/fix/docs/style/refactor/perf/test/build/ci/chore/revert)。 更新:移除首页中 UUID 的占位卡片,避免与已完成的工具重复。

JSON Format 在以上改动的基础上,需要包含的功能:

  1. JSON的压缩
  2. JSON的格式化
  3. JSON的格式校验
  4. JSON的转义
  5. JSON的语法高亮
  6. JSON的复制按钮

SQL Format

更新:JSON Formatter 增加压缩、转义、语法高亮与复制输出能力,完善校验与格式化体验。 更新:JSON Formatter 新增反转义(Unescape)模式,支持将转义字符串还原为可读 JSON。 修复:JSON Formatter 高亮输出显示为函数的问题,改用 $derived.by。 更新:JSON Formatter 输入/输出区域新增行号显示并同步滚动。 更新:SQL Formatter 增强为可格式化/压缩的工具页,支持基础校验、行号、复制与示例。 更新:首页卡片按钮尺寸统一,确保 Open Tool 高度与宽度一致。 修复:首页 JSON/SQL 卡片补充悬浮高亮样式,与 UUID 卡片一致。 新增:GitHub 链接转 jsDelivr CDN 工具页与首页入口。 更新:GitHub 链接转换支持 tree 目录与 release 链接(tag/download)。 更新:GitHub CDN 工具在输出目录地址时提示可追加文件路径。 修复:GitHub release 下载链接转换为 jsDelivr 时保留 releases/download 路径。 更新:GitHub CDN 工具提示 jsDelivr 不支持 release assets,建议使用 GitHub 直链。 更新:GitHub CDN 工具同时输出 Raw 与 jsDelivr 两个链接并分别提供复制按钮。 更新:Raw 输出不可用时提示使用 GitHub blob 文件链接。

20260226

新增:时间戳工具页,支持时间戳与人类可读时间互转、s/ms 格式选择、有效性校验与错误提示,输出本地与 UTC 时间。 更新:首页新增时间戳工具入口卡片。

20260228

更新:引入 lucide-svelte 图标库,全面重构 UI/UX。 更新:首页重构,采用更现代的 Hero 区域、功能卡片展示与 Lucide 图标。 更新:全局布局优化,添加固定 Header(含搜索占位符与 GitHub 入口)与简洁 Footer。

20260513

修复:Cron 与 Regex 工具页补充表单标签关联,消除 svelte-check 的 a11y label 警告。 更新:所有工具页(UUID、JSON、SQL、Timestamp、GitHub CDN)样式对齐,采用统一的卡片布局、操作栏与状态反馈,大幅提升视觉精致度与易用性。 配置:GEMINI.md 明确规定项目必须使用 pnpm 且禁止使用其他包管理器。

20260228

修正:更新项目 GitHub 仓库链接为正确的 KnowSky404/PureTools。

20260302

更新:项目包管理器从 pnpm 迁移到 Bun,package.json 脚本链路改为 bun run 调用。 更新:新增 cf:dev 与 cf:deploy 脚本,统一 Wrangler 在 Bun 环境下的本地调试与部署入口。 更新:README 本地开发与脚本文档全面切换为 Bun 命令。 配置:GEMINI.md 包管理器约束更新为 Bun,避免后续协作指令冲突。 更新:AGENTS.md 与 GEMINI.md 新增技术架构说明,明确路由分层、逻辑分层、构建部署链路与环境变量约束。 修正:AGENTS.md 技术栈约束同步为 Vite / Bun,和当前项目包管理器保持一致。

20260304

修正:pre-commit 钩子从 pnpm lint-staged 切换为 bunx lint-staged,避免无 pnpm 环境提交失败。 配置:package.json 新增 "packageManager": "bun@1.3.10",明确项目统一使用 Bun。

20260313

新增:Regex 工具页,支持正则校验、匹配高亮、结果列表与零长度提示。 新增:Regex 生成器支持前后缀、字符集、量词、锚点与模板,一键应用到校验器。 更新:首页与导航新增 Regex 入口。 修复:Regex 高亮输出渲染语法错误,避免 Svelte 编译失败。 新增:CRON 工具页,支持 5 字段表达式校验、模板与生成器。 更新:首页与导航新增 CRON 入口。 新增:Base64、URL 编码、JWT 解码、Hash 工具页。 更新:工具列表集中管理,顶部导航改为 Tools 下拉菜单以适配更多工具入口。 更新:顶部导航支持工具搜索与分类分组展示。 更新:新增全局快捷键 / 聚焦工具搜索。 更新:移除右上角独立搜索按钮,避免与工具下拉搜索重复。 新增:暗色/亮色模式切换,默认跟随系统,右上角提供切换按钮。 更新:README 增加中英文版本与最新工具列表。

20260324

新增:随机字符串生成器工具页,支持邮箱前缀友好的默认预设、批量生成、复制与历史记录。 新增:随机字符串纯函数工具,统一处理字符池构建、参数校验与基于 Web Crypto 的随机生成。 更新:首页工具索引与中英文 README,补充随机字符串工具入口与说明。 更新:项目许可证切换为 GNU AGPL v3.0 or later,新增 LICENSE 文件并同步更新 package.json 与双语 README 的授权声明。

20260413

新增需求设计:随机姓名生成器,支持美国、中国、日本、韩国四个国家。 设计范围:支持 random / male / female 性别筛选、批量生成、本地顺序与英文顺序切换、完整姓名与姓/名拆分展示。 实现约束:采用纯前端内置轻量词库,不引入外部 API 或远程数据源,后续按 spec 进入实现。 新增计划:随机姓名生成器 implementation plan 已写入 docs/superpowers/plans/2026-04-13-random-name-generator.md,后续按 TDD 顺序执行。 新增:随机姓名纯函数工具与 Bun 测试,支持美国、中国、日本、韩国轻量词库、性别筛选、批量生成、顺序切换与参数校验。 新增:随机姓名生成器工具页,支持国家切换、random / male / female 性别筛选、批量生成、本地顺序与英文顺序切换、主结果和批量结果复制。 更新:首页工具索引,新增 Random Name Generator 入口。 调整:随机姓名生成器词库改为国家对应本地文字,美国输出英文,中国输出中文,日本输出日文,韩国输出韩文。 调整:中国、日本、韩国仅保留本地文字和本地顺序,美国继续支持英文顺序切换。 调整:统一移除各工具页最上方的说明卡片,减少首屏占用,让核心操作区直接上移显示。 调整:随机姓名生成器在点击生成时自动复制主结果,并增加页面内轻提示浮层反馈复制状态。 调整:随机姓名生成器的轻提示浮层从右下角移动到页面上方居中,提升可见性。 调整:顶部导航从单一 Tools 菜单改为按分类拆分的多个菜单,并保留独立的全局工具搜索入口和 / 快捷键。

20260513

新增:HTML Previewer 工具页,支持粘贴静态 HTML 并通过 sandbox iframe 本地预览渲染效果。 更新:首页与导航新增 HTML Previewer 入口,归入 Formatters 分类。 修正:HTML Previewer 默认示例替换为虚构订单表,避免示例中包含敏感业务字段或真实样式数据。

20260713

新增:二维码生成器工具页,将输入的原始文本直接编码为二维码,支持实时预览、错误提示、清空与 PNG 下载。 更新:首页与导航新增二维码生成器入口,归入 Encoding 分类,并同步中英文 README。 调整:二维码生成改为右上角按钮手动确认触发,结果区展示实际编码内容,并在输入变化后提示重新生成。 新增:使用生图模型设计 PureTools 品牌 Logo,提交高清生成原件、网站生产版图标与完整生成/精修提示词。 更新:顶部导航改用新品牌 Logo,替换默认 Svelte favicon,并补充 PNG、ICO 与 Apple Touch Icon。 更新:中英文 README 展示新 Logo,并增加品牌原件与提示词入口。 修复:首页补齐显式 Tailwind 暗色变体,并将工具卡片动画限定为边框与阴影,避免主题切换时出现短暂的浅色背景与浅色文字叠加。

20260719

新增:本地翻译工具页,基于 Chrome Translator API 在浏览器端完成翻译,支持语言选择、自动识别、语言包下载进度、结果复制与语言互换。 更新:首页与导航新增 Local Translator 入口并归入 Text 分类,同步中英文 README 和浏览器兼容性说明。 修复:本地翻译结果过期后仍可交换语言的问题,输入或语言组合变化时要求重新翻译。

20260720

新增:参考汇率转换工具,只读下载 Frankfurter 公开参考汇率,金额与币种换算保持在浏览器本地。 新增:汇率快照本地缓存与网络失败降级,界面显示汇率日期、抓取时间、数据源与非交易报价声明。 更新:项目运行边界允许只读公开参考数据,仍禁止自有业务后端和用户输入上传。 测试:补充汇率请求层成功、HTTP 错误与异常响应测试,并新增 Playwright 页面换算、币种交换和缓存降级端到端测试。 修复:远程响应与本地缓存统一执行汇率清洗,过滤未知、非数字、零值和负值,并拒绝无效日期。 修复:汇率快照缺失的币种在选择器中标记为不可用,换算区显示明确错误而非静默返回空结果。 测试:新增真实汇率 API/CORS 独立健康检查,Playwright 在非 Linux 系统回退为标准浏览器并关闭不必要的并行。 修复:浏览器策略禁用 localStorage 时忽略缓存读取异常,确保参考汇率网络请求仍会正常执行。 修复:参考汇率请求增加 10 秒超时与可重试错误,避免首次访问时供应商请求挂起导致页面永久停留在加载状态。

20261013

新增需求:实现独立的 Markdown Previewer(/markdown-preview),支持 Enhanced 与 CommonMark 两种明确模式;Enhanced 覆盖 GFM、脚注、数学公式、Mermaid、提示块、Frontmatter 展示和受限静态 HTML,并保持所有解析与渲染在浏览器本地完成。 实现记录:补充中英文 README 工具入口与 docs/markdown-preview.md 权威说明,记录当前 unified/remark/rehype、KaTeX、highlight.js、Mermaid 与 DOMPurify 版本,Mermaid 正常构建与实验/附加图表边界、资源限制、安全隔离和降级策略。 安全边界:Markdown AST 解析、内容净化、KaTeX 输出与 Mermaid SVG 输出分阶段处理;Mermaid 生成使用独立的 allow-scripts 且无同源权限 iframe,生产构建使用 Vite inlineDynamicImports 生成的完整自包含 IIFE,并将 CSP script-src 固定到精确资源路径;开发环境 ESM 资源的 CORS 仅允许沙箱不透明 null origin;最终预览不开放脚本,仅为应用自带 KaTeX 字体保留 allow-same-origin;远程/相对图片、危险链接、脚本、事件属性、嵌入和用户 CSS 均受限或降级。 边界补充:Mermaid 源码与引擎均限制单图 20,000 字符和 500 条边;完整 Mermaid 构建仍不承诺富 HTML label、foreignObject、图内数学、图标/图片包、自定义布局、回调、插件或外部图表注册能力;独立 Markdown KaTeX 数学公式仍受支持。复制失败时显示浏览器 Clipboard API/HTTPS 权限或手动复制提示。 需求来源:https://microbin.knowsky.uk/raw/b42R1e。完成独立工具注册、双模式解析、GFM/脚注/五类提示块/Frontmatter、KaTeX、真实 Mermaid 图表、按需代码高亮、导入/复制/下载、深浅色与移动视图;源文仅存在当前页面内存,所有渲染保持浏览器本地执行。 修复记录:SVG 净化后使用具有 SVG API 的解析节点保留图表实际尺寸与局部滚动;文档锚点(含单次、双重编码)映射到预览自身目标;BOM 源码偏移统一校正,保留货币文本、提示块与 Frontmatter 完整边界;Playwright 按 CPU 架构选择浏览器,并等待工具路由完成客户端挂载。 最终验证:bun run lint:fix、bun run check、bun run lint、bun run test:unit、bun run test:e2e、bun run build 均通过;单元测试 60 项、246 次断言;Chromium 完整 14 项,最终生产构建上的 Firefox 与 WebKit Markdown 测试分别 13 项全部通过,包含 11 类 Mermaid 实际 SVG 与 CSP/请求安全验收。桌面 1440×1000、手机 390×844 截图正常,常规流程控制台无错误、手机横向溢出为 0;首页、JSON 与普通 Markdown 不下载 Mermaid/KaTeX 重资源。 产物记录:客户端 JS 相对基线增加 5,991,794 字节,逐文件 gzip 增加 1,711,524 字节;完整 Mermaid 按需资源 5,193,475 字节(gzip 1,458,721 字节)。详细依赖、产物对比、初始失败及修复、已验证浏览器和限制见 docs/markdown-preview.md。 验证环境:Ubuntu 24.04 arm64、Bun 1.4.3、Playwright 1.61.1,使用原生 Chromium 149、Firefox 151、WebKit 26.5。受限缓存/日志路径及 loopback 代理问题通过临时 /tmp 路径和同宿主测试解决;验收时串行运行构建与服务,未放宽应用安全策略。真实 Safari/iOS 与其他图表语法尚未逐项验收;Mermaid DOM 渲染的超时不能抢占同步计算,完整包首次加载成本仍较大。

20261021

需求来源:https://microbin.knowsky.uk/raw/dw08Xe。扩展现有 /hash 为统一的 Hash Calculator & Verifier,增加 MD5 文本/文件、全部现有 SHA 算法的文件支持、单文件选择/拖拽、完整性核对、进度、取消与清除;保持 SHA-256 默认值,不新增 /md5 路由。

实现:文本保留原始 UTF-8 字节、空格与换行,非空输入使用 250 ms 防抖,空字符串通过 Calculate 显式计算;SHA 文本继续使用 Web Crypto,MD5 文本按需加载引擎。文件以 Blob.slice 顺序读取最多 4 MiB 的分块,在独立 Worker 内连续增量更新,支持二进制与 0 字节文件,文件名不参与计算。完成、失败、取消、切换输入/算法以及页面卸载均终止对应 Worker;任务编号同时阻止过期进度、结果和错误覆盖新状态,清理防抖及复制反馈计时器。

校验与界面:预期值按当前算法检查十六进制长度,比较前去除首尾空白且忽略大小写,区分 Match、Mismatch、Invalid checksum 和等待计算;更改预期值不重新计算文件。复用 Clipboard 封装并报告实际复制失败,保留文本 Swap,补充无障碍标签、深浅色、移动布局、隐私说明与 MD5 碰撞风险提示,推荐 SHA-256。工具描述和搜索关键词覆盖 md5、hash、checksum、sha256、file hash。

依赖评估:固定新增 hash-wasm 4.12.0(npm 当前版本,MIT,零运行时依赖;下载包解压约 1.80 MB),使用同一实现提供 MD5 和增量 SHA,引擎的 WASM 内嵌在本地产物中。随站点提供 static/licenses/hash-wasm.txt 原始许可证与版权声明;不引入运行时 CDN 或计算 API。Vite 的 Mermaid 专用 IIFE/inlineDynamicImports 配置与其 CSP 实现保留,Cloudflare adapter 构建通过。

产物测量:相对修改前同环境的构建,客户端 JS 总量由 6,347,540 bytes 增至 6,418,156 bytes(+70,616 bytes);逐文件 gzip(Python gzip.compress,level 9)合计由 1,841,410 bytes 增至 1,868,113 bytes(+26,703 bytes)。文件 Worker 为 50,564 bytes / gzip 18,136 bytes;文本 MD5 按需块为 9,929 bytes / gzip 4,561 bytes。首页、JSON 与 SHA 文本运行时未请求这些引擎资源,MD5/文件操作才加载对应同源资源;嵌入的 WASM 无单独网络请求。上述为资源测量,并非所有访问者的实际传输量承诺。

测试覆盖:标准 MD5 abc/空字符串及五种算法的独立 Node crypto 参照,中文/Emoji、空白/多行、Unicode 非规范化、空文件、含 0x00/0xFF 的二进制、改名、跨多个分块、正确/错误/无效预期值;浏览器覆盖选择/拖拽、切换、进度、取消/重试、清除、复制成功/失败、真实 Worker 文件读取异常、无 Worker 能力、延迟文本/Worker 结果隔离和导航清理。128 MiB 测试在实际 Worker 中记录逐块读取,强制拒绝超过 4 MiB 的读取,在 12 MiB 进度处取消,主线程仍能处理动画帧与交互。此证据证明计算缓冲按分块处理,不等于所有设备总内存峰值测量或无限文件大小保证。

隐私边界:未发现文件、文本、预期值或哈希上传;没有 hash 输入的 localStorage/sessionStorage/IndexedDB 写入。网站原有 Google Fonts 资源请求单独识别,不计为哈希处理请求;Hash 不新增外部服务。文档说明 Web Crypto 的安全上下文要求、Worker/Blob/WebAssembly 能力要求、浏览器资源限制与 MD5 安全边界。

验证结果:bun run lint:fix、bun run check、bun run lint、bun run test:unit、bun run test:e2e、bun run build 均通过;类型检查为 0 errors / 0 warnings。单元测试 79 项、422 个断言通过(本次新增 19 项);默认 Chromium 开发端到端测试 27/27 通过。生产预览使用临时 Playwright 配置运行 Chromium 149、Firefox 151、WebKit 26.5,按当前测试清单逐项核对,三个浏览器各 27 项、去重共 81 项均有通过证据,包括 Hash、参考汇率和完整 Markdown/Mermaid/CSP 回归。长任务首轮在末尾被外部 SIGTERM 终止;修正 WebKit 会缓存故障注入脚本的测试夹具后,以 6/6 通过的补跑覆盖错误恢复及 Mermaid 依赖重试,再与当前 81 项清单核对无遗漏,未跳过失败项。

界面与浏览器证明:1440×900 桌面、390×844 移动暗色截图已检查;目标 Hash 页面非空、标题与路由正确、无框架错误遮罩和相关控制台错误,目标布局未横向溢出。键盘可切换 Text/File 并显式计算空字符串;Chromium 原生 Clipboard 写入后读回结果一致,故障测试验证复制失败反馈。生产资源探针确认首页、JSON 和 SHA 文本不加载 MD5 块/文件 Worker,MD5 与文件操作按需请求本地资源,未请求外部 WASM。

环境说明:Browser plugin not available,采用仓库 Playwright。浏览器安装与测试产物位于 /tmp;受限沙箱的 Wrangler/Miniflare 注册目录只读及回环代理影响通过 /tmp 本地模拟器目录和主机执行测试解决,保留系统凭证目录,未登录或访问远程 Cloudflare 资源。额外配置、截图、探针和临时注册数据未加入 Git。尚未进行实体设备、极端文件大小或所有浏览器总内存峰值测试;不承诺无限文件大小。仅本地提交,包含本文件,不 push、merge 或生产部署。

修改/新增文件清单:src/routes/hash/+page.svelte、src/lib/utils/hash.ts、src/lib/workers/hash.worker.ts、src/lib/utils/hash.test.ts、tests/e2e/hash.e2e.ts、src/lib/utils/tools.ts、package.json、bun.lock、README.md、README.zh-CN.md、static/licenses/hash-wasm.txt、log.md。最终 Cloudflare 产物包含原始 MIT 许可证;Hash 页面、MD5 块和文件 Worker 的资源哈希及大小与上述浏览器验证版本一致,共享入口按 SvelteKit 构建版本号更新。

最终产物复核:最后一次构建后,Chromium 对五种文本算法、实际多分块文件 Worker、响应式/隐私以及 11 类 Mermaid SVG 再做 4/4 冒烟验证通过;原始 hash-wasm MIT 许可证的生产预览 HTTP 响应与源文件逐字节一致。

20261022

需求来源:https://microbin.knowsky.uk/raw/aMplQe。新增独立 /timezone(Time Zone Converter & World Clock),并将全局九个分类映射为四个一级导航分组。重新核对的实现基线为 main 5fc50c6,初始工作区干净;按本次要求仅本地提交,不 push、merge 或部署。

时区实现:src/lib/utils/timezone.ts 使用原生 Intl.DateTimeFormat / IANA 数据,不新增日期库、Temporal/polyfill、全球时区数据库或时间 API。严格验证完整公历日期与 24 小时时间(0001–9999 年,可含秒及毫秒),以 UTC 日历字段表示 wall time,在该日附近 96 小时窗口逐小时采集实际偏移,再反向验证候选 instant。零候选明确拒绝不存在的当地时间,多候选展示 Earlier/Later 及对应 UTC 偏移和 ISO instant,必须显式选择;不通过系统时区 new Date(localDateTimeString) 解析其他地区时间,不静默归一化。覆盖美国、欧洲、南半球、Lord Howe 半小时跳变、跨日期线与历史秒级偏移;Formatter 和日期偏移缓存各限 128 项。

换算页面:地区规则与 fixed PST(UTC−08:00)、PDT(UTC−07:00)、UTC 明确分开;支持本地时区检测、常用城市与 IANA 搜索、完整日期时间输入、自动目标结果/偏移/可用缩写/跨日提示、Now、Copy Result、交换源/目标。交换保留原 instant 与毫秒,也保留重复小时中已选择的实例;复用 Clipboard 封装并展示真实复制失败反馈。保留 /timestamp 原有逻辑,在两个工具间添加快捷入口,工具清单、首页、分类和关键词搜索共用原 registry。

世界时钟:默认 Los Angeles、New York、London、Beijing(Asia/Shanghai)、Tokyo、Sydney,显示当地日期时间、偏移、可用缩写及相对本地日期的跨日信息。支持搜索添加/移除至多 24 个 IANA 地区、12/24 小时切换;仅城市 ID 与显示偏好保存到 puretools.world-clock.v1,不保存换算输入或结果。读取损坏配置时安全降级,存储受限时保留当前访问功能并提示,主题持久化也容忍存储异常。当前时间、设备时区、存储及定时器在 onMount 后初始化,避免 SSR 时间差;单个一秒计时器在隐藏时清除、可见时立即同步,离页销毁时清理监听器与计时器。缺少 supportedValuesOf 时使用运行时验证的常用城市,缺少核心 Intl 能力时明确反馈。页面说明设备系统时钟与浏览器时区规则的数据边界。

导航:navGroups 保留原 category 结构,分别映射 Text & Data(Formatters/Text)、Generate & Encode(Identifiers/Encoding)、Dev & Security(Patterns/Security/Delivery)、Time & Convert(Time/Finance)。Tailwind xl(80rem,通常为 1280 CSS px 的有效 viewport)起显示四组,较窄屏幕统一 Tools 菜单;Search、Theme、GitHub 在 320px 仍可用。共享 popup 限制在 viewport 内并允许纵向滚动,提供 aria-expanded/controls、当前路由 aria-current、点击切换、ArrowDown 聚焦首项、Escape/关闭按钮返回触发器、外部点击/Tab 离开/导航及响应式模式变化时关闭。保留 / 搜索快捷键与名称、描述、分类、关键词匹配,不劫持输入编辑。

已验证:bun run lint:fix、bun run check、bun run lint 均通过,Svelte 检查 0 errors / 0 warnings;bun run test:unit 92/92、1476 次断言通过,其中新增时区测试 13 项。当前 Bun/ICU 支持的 445 个地区分别验证冬夏日期反向解析;额外在 TZ=Pacific/Honolulu 下重跑时区测试 13/13,通过证据不依赖宿主恰好处于某个时区。bun run test:e2e Chromium 149 完整 51/51 通过,包含现有 Hash、Markdown/Mermaid/CSP 与汇率回归,以及新增 24 项页面/导航验收。导航覆盖 320、375、768、1024、1280、1440px 的深浅色,逐项对比首页与菜单入口;页面覆盖 DST 双实例、设备时区与目标不同、真实显示偏移、偏好保存与禁用存储、能力缺失、复制成功/失败、隐藏/恢复与离页计时器清理、刷新无 hydration 错误、无时间服务/业务后端请求。

浏览器与环境记录:Browser plugin not available,采用仓库 Playwright;Ubuntu 24.04 arm64、Bun 1.4.3,浏览器缓存与新测试产物位于 /tmp。沙箱 IPv4 回环超时已与主机 HTTP 200/IPv6 HTTP 200 对比,改用主机执行浏览器验收;独立 Vite 服务一度退出 143(SIGTERM)导致连接拒绝,确认端口消失后改由 Playwright 管理服务器生命周期,完整回归重新通过。计时器夹具先暂停了 SvelteKit 路由所需的计时器,修正为导航前恢复模拟时钟后通过;未放宽应用逻辑或跳过断言。Wrangler/Miniflare 本地注册和日志定向 /tmp,系统凭证位置保持不变,未访问远程 Cloudflare 资源。

截图与界面:1440×1000 浅色桌面、375×900 深色手机和手机 Tools 菜单截图已检查,目标 URL/标题和实际换算结果正确;页面非空、无框架错误遮罩、相关控制台错误为 0、横向溢出为 0。截图仅保留 /tmp。实体设备、真实 Safari/iOS 及不同系统时区数据库版本未逐项验收;当前时间不独立校准,时区缩写可能由浏览器返回 GMT 偏移。

文件清单:新增 src/lib/utils/timezone.ts、src/lib/utils/timezone.test.ts、src/lib/components/TimeZonePicker.svelte、src/routes/timezone/+page.svelte、tests/e2e/timezone.e2e.ts、tests/e2e/navigation.e2e.ts、docs/timezone.md;修改 src/lib/utils/tools.ts、src/routes/+layout.svelte、src/routes/timestamp/+page.svelte、src/app.bun-test.d.ts、README.md、README.zh-CN.md、log.md。未新增依赖或全局自定义样式;未改写首页或其他工具业务逻辑。

生产与最终兼容验收:bun run build 通过,SvelteKit Cloudflare adapter 完成并生成 .svelte-kit/cloudflare/_worker.js。同一生产预览产物上的 Firefox 151 与 WebKit 26.5 各 24/24 新增时区/导航用例全部通过;Chromium 149 完整回归再次 51/51 通过,最后媒体查询断言修正后对导航文件补跑 15/15 通过。三个浏览器的证明范围为 Chromium 全部现有与新增用例,以及 Firefox/WebKit 本次新增的全部用例;不将其表述为真实 Safari 或实体设备验收。生产 Chromium 另外逐一打开 19 个工具路由,均 HTTP 200、内容非空、无运行错误,并核对 Timestamp 秒/毫秒、日期转换及两页互链;汇率使用测试夹具,不是实际提供商验证。生产桌面/手机截图亦复核了正确标题/URL、PDT 示例输出、无错误遮罩、控制台错误 0 与横向溢出 0。

WebKit 测试修正说明:传统竖向滚动条占用 8px,导致 scrollWidth 与 innerWidth 的差值为 −8;改为比较 scrollWidth 与真实 clientWidth,直接检验横向滚动。1280px 窗口下有效媒体 viewport 也可能低于 xl,响应式测试改用与 Tailwind 同一个 (min-width: 80rem) 查询判定预期模式,继续检查对应菜单、全部工具入口和布局范围;未强制隐藏滚动条、放宽溢出断言或改变应用行为。修正后的完整 Firefox/WebKit 48 项全部重跑通过,Chromium 导航 15 项补跑通过。生产构建后应用源码未再变动,仅调整上述测试与文档记录。