4 Commits
Author SHA1 Message Date
wangairnan c8cdb56bdd test(web): 补充即时渲染装饰层回归用例(61 条)
Release / release (push) Successful in 5m6s
- editor-live-preview.test.ts(29):语法区间识别(标题/强调/行内代码/链接/图片/引用/
  列表/任务/围栏/水平线/表格,含转义、中文标点、可见区间裁剪)、行粒度 reveal 与
  二分/线性等价、选区端点行、构建与安全(图片 src 白名单降级为源码文本、widget 零 innerHTML、
  链接不产出 <a>)
- editor-boundaries.test.ts(32):文首/文末边界、跨原子区间选区、装饰层四项不变量、
  长文档惰性解析与补解析、3000 行性能基准(视口窗口/全篇单区间/最坏选区/全量解析)
- 用 happy-dom 下的真实 EditorView 断言(view.focus()、装饰 DOM、atomicRanges facet 均可读),
  不只是纯函数测试
- package.json / package-lock.json:新增 @codemirror/commands 为 devDependency;它本就在
  依赖树中(@uiw/react-codemirror 的依赖),用于边界回归真实执行退格等编辑命令,不进产物

前端共 71 条用例全绿;docs/editor-live-rendering.md §12.5.2 的性能结论即由本文件的基准用例
与真实浏览器测量共同得出。
2026-09-11 01:03:23 +08:00
wangairnan dda5ad1e5a fix(web): 登录表单补充隐藏用户名字段以兼容 Safari 密码管理器
Safari/WebKit 在明文 HTTP 下不保存 Secure Cookie(无 localhost 豁免,
Chrome/Firefox 有),__Host- 会话被静默丢弃导致登录成功后仍弹回登录页;
本机调试需以 --dev 启动(pn_session 无 Secure,loopback-only 守卫,§7.3-3)。
纯密码表单另令 Safari 保存密码弹窗要求手动输入用户名:补充 sr-only 用户名
输入(autoComplete=username,只读预填 admin),弹窗不再阻断登录。
新增 login.test.tsx 回归测试锁定用户名/密码字段的自动填充标记。
2026-09-08 21:42:52 +08:00
wangairnan b94e9b1721 fix(web): 修复图片上传、自动保存竞态、登录竞态并统一失效公共缓存
FormData 不强设 Content-Type(P1-2),补 api 客户端回归测试; 自动保存成功仅失效列表与公共键,防详情 refetch 回滚输入(P1-4); login/logout 以请求序号丢弃迟到 /api/me 响应,401 统一回调跳登录(P2-15); 首页不硬编码 page_size,写操作后统一 invalidatePublic,TagPage 补 error 分支(P2-15)。
2026-09-08 17:32:57 +08:00
wangairnan e9316c9169 前端:React 19 + Vite 8 + Tailwind 4 博客与管理后台 SPA
- 渲染管线(§8.2):react-markdown + remark-gfm + rehype-sanitize
  (GitHub schema 扩展 hljs class 与 checked)+ rehype-highlight 纯 class
  高亮;链接强制 target=_blank + rel=nofollow noopener noreferrer;
  schema 快照与恶意 Markdown 冒烟测试(vitest 6 用例)
- 编辑器:CodeMirror 6 源码编辑 + 分屏实时预览 + 工具栏 +
  粘贴/拖拽图片上传;slug 首存定稿(冲突 409 就地高亮)、
  摘要留空自动截取、2s 防抖自动保存
- 页面:博客首页(置顶/分页/标签云)、详情(面包屑/上一篇下一篇)、
  标签页、登录、管理列表/回收站/设置/改密、404
- lib:api 客户端(统一包络 + 内存态 CSRF,禁 localStorage)、
  AuthContext(/api/me 重取)、暗色主题(class 切换 + 系统跟随)
- index.html 内嵌 Go template 占位符供服务端 meta 注入;
  vite base 固定 '/'(防深链白屏);/api 代理 127.0.0.1:8080
2026-09-08 08:14:52 +08:00