当前浏览器过旧,页面样式无法完整呈现。请使用 Chrome、Edge、Firefox 或 Safari 访问。

更新记录

    1. 后台

      • 「显示更新记录入口」排到「入口与功能」里「显示文章入口」正下方,分区内按白名单顺序展示。
    2. 后台

      • 后台「设置 → 客户端设置 → 入口与功能」补上「显示更新记录入口」开关(`client.updates.enabled`),不再只落在未列出的「其他」分区。
    3. 后台

      • `telegram:webhook` 对 Telegram API 连接/登记失败改为只打错误日志、正常退出;Mac 发布流水线同样忽略该步失败,避免健康检查已通过后因 TLS 握手失败导致 CI 变红。
    1. 站点

      • `/updates` 只按年月日折叠:每个日期默认露出 3 个时刻,时刻块全量展示;展开/收起改成描边胶囊按钮。
    2. 站点

      • `/updates` 收起改到展开内容末尾(下一日期之前),不再和「展开」共用顶部位置。
    3. 站点

      • `/updates` 展开/收起始终放在当前区域文本下方;收起改为「收起其余 N 条」并提高对比,避免和下一时刻挤在同一行。
    4. 站点

      • `/updates` 样式挂到 `html.site-skin` 下,避免日期 `h2`、时刻 `p` 的 margin 被站点全局标题重置盖掉。
    5. 站点

      • `/updates` 加大日期到时刻块、以及相邻时刻块之间的空隙;收紧同一时刻内条目行距。
    6. 站点

      • `/updates` 收紧日期标题与时刻行、时刻行与首条内容的间距,避免标题和副标题脱开。
    7. 站点

      • `/updates` 每个自然日默认只露出 3 个时刻,其余折叠;单个时刻超过 3 条仍可再展开。
      • 删除未接入 yarn 的字体子集工具:`subset-site-fonts.mjs`、`build-font-charset.py`、`scripts/font-src`。
    8. 后台

      • `AGENTS.md` 增加硬性约束:`LOGS.md` / `logs/` 禁止写入密钥、口令、Token、私钥、`.env` 取值等敏感信息;环境变量只记名字不记值。
    9. 站点

      • `AGENTS.md` 增加硬性约束:`LOGS.md` / `logs/` 禁止写入密钥、口令、Token、私钥、`.env` 取值等敏感信息;环境变量只记名字不记值。
    10. 后台

      • 新增 `GET /web/updates`:部署时从本仓库与 stereo 分支 `LOGS.md` / `logs` 生成 `apps/server/static/site-updates.json`(gitignore,不入库),按日分页下发;`updatesEnabled` 关闭则 403。
      • mono deploy 二次 checkout `stereo` 后 `yarn generate:updates`,产物打进发布包。
    11. 站点

      • `/updates` 改为请求 mono `GET /web/updates`,去掉本仓库静态 JSON 与 `generate:updates`。
      • 页改成按日时间轴,去掉导语;每个时刻最多露出 3 条,其余展开/收起。
    12. 后台

      • 后台「设置 → 客户端设置」新增 `client.updates.enabled`(显示更新记录入口),默认开启;`/web/settings` 下发 `updatesEnabled`,关闭后 Stereo `/updates` 与入口隐藏。
      • 升级 settings 缓存键到 `settings-v3`,避免旧缓存缺少新开关。
    13. 站点

      • 新增公开 `/updates` 按日时间轴:聚合本仓库与 mono 的 `LOGS.md` / `logs` 归档,静态写入 `src/data/site-updates.json`,不进数据库;`yarn generate:updates` 可重生成。
      • 顶栏、抽屉、页脚增加「更新记录」入口;`updatesEnabled` 关闭则入口隐藏且页面跳走。先展示 14 天,点击「加载更多」再拉后续日。
    14. 后台

      • mono Mac mini 发布流水线执行 Telegram `setWebhook` 前显式导出本机代理 `CLASS_PROXY_URL=http://127.0.0.1:7890`,确保独立部署 Shell 不依赖 PM2 子进程环境也能访问 Telegram API。
    15. 站点

      • `SiteLayout` 仅在博客首页与文章详情实际渲染 `SiteRobotFloat`;其他站点页面不再挂载机器人脚本,也不会无意义请求 `/web/robot/status`。
    16. 后台

      • 后台客户端设置的 SSO 分区收拢为一个组合配置项:仅保留 SSO 总开关与 Telegram、Discord、GitHub 登录方式多选,不再为四个布尔配置分别展示卡片。
      • 设置分组滚出可视区域后,顶部操作区继续显示「重置全部 / 保存全部」,并同步标明当前选中的设置 Tab 名称。
    17. 后台

      • 后台「设置 → 客户端设置」新增「SSO 登录」分区:提供 `client.sso.enabled` 总开关,以及 Telegram、Discord、GitHub 三个 provider 独立开关;默认全部开启以保持现有行为,密钥与回调地址仍由 env 管理。
      • `/web/settings` 将后台总开关、provider 开关与 env 完整性合并为最终可用状态,并升级 settings cache key 避免旧缓存把新增开关误判为关闭;关闭入口后对应 start/callback/complete、Telegram Widget 与 webhook 登录链路同步拒绝,不只隐藏前端图标。配置保存会沿用现有 web cache 清理立即生效。
      • 将超过 500 行的 `config-definition.ts` 按核心、客户端、内容源、服务、安全、Formant 与元数据拆分为模块化定义文件,保持原配置顺序、默认值和导出不变;`ConfigGroupCard` 继续使用 Arco switch 并按职责展示新分区。
    18. 站点

      • 客户端 settings 类型补齐 `ssoLoginEnabled`;Telegram、Discord、GitHub 最终入口状态由 mono 后台 SSO 总开关、provider 独立开关和 env 完整性共同决定;`/login` 改为每次 SSR 直取 settings、不复用 60 秒进程缓存,后台保存后刷新登录页即可立即显隐。
    19. 后台

      • 新增 GitHub OAuth App 纯 SSO:`start`、`callback`、`complete` 使用 `read:user` 获取 GitHub id/login/name/avatar,服务端兑换 token 且不落库;首次登录以 `github` identity 自动注册 `g.` + 4~6 位随机字母账号,与 Telegram/Discord 账号保持独立。
      • Discord 与 GitHub 共用新抽取的 `OAuthChallengeStore` 和 OAuth callback validator/HTML:Redis state、浏览器 verifier、approved/failed 状态及重放防护统一原子处理,Discord 既有行为保持不变;GitHub 补齐配置、失效、过期、上游失败错误码与派生类。
      • `.env` 与 `.env.mac` 预埋 GitHub Client ID/Secret/Redirect URI,开发回调指向 localhost、生产指向 `www.oolaf.top`;三项完整才由 `/web/settings` 实时开启 `githubLoginEnabled`,无需数据库迁移或增量 SQL。
    20. 站点

      • 登录页新增 GitHub OAuth App 纯图标入口,使用指定 GitHub 内联 SVG 并以 `currentColor` 适配昼夜主题;与 Telegram、Discord 保持 42px 圆形细边框横排,无常驻文字。
      • Discord/GitHub 前端 start、complete、popup、轮询收敛为 provider 参数化流程,Telegram 深链与 Widget 备用保持独立;挂载逻辑从 `SiteSsoProviders.astro` 拆至 `site-sso-providers.ts`,避免后续 provider 扩展触碰 500 行上限。
      • `/login`、CMS settings 与 auth 类型补齐 `githubLoginEnabled`,mono 三项 GitHub env 未完整配置时安全隐藏入口;授权成功继续复用现有 session 存储、`me()` 与 `next` 回跳。
    21. 站点

      • Discord 登录入口由 Ionicons 改为指定的品牌蓝圆底白色 Discord 内联 SVG,并移除不再使用的 `logo-discord` 全局注册;按钮尺寸、细边框及与 Telegram 的横排布局不变。
    22. 后台

      • 新增 Discord OAuth2 纯 SSO:`start` 创建 3 分钟 Redis state/verifier 挑战,`callback` 服务端兑换授权码并读取 `identify` 用户资料,`complete` 原子消费结果并签发本站会话;Discord token 不落库。
      • `WebClientSsoService` 改为 provider 通用签发,Telegram 行为保持不变;Discord identity 复用 `client_identities`,首次注册生成 `d.` + 4~6 位随机字母账号,与 Telegram 身份按策略分别建立独立站内账号,无需新增表或 SQL。
      • `.env` / `.env.mac` 预埋 `DISCORD_CLIENT_ID`、`DISCORD_CLIENT_SECRET`、`DISCORD_REDIRECT_URI`;三项完整才由 `/web/settings` 开启 Discord 入口,SSO env 字段在通用 settings 缓存外实时覆盖,避免部署后读取旧开关。新增 Discord 配置、失效、过期及上游失败错误码与派生类,并补 OAuth URL、资料归一化和回调地址校验测试。
    23. 站点

      • 登录页新增 Discord OAuth2 圆形 `logo-discord` Ionicon,与 Telegram 保持同尺寸纯图标横排;仅 mono 三项 Discord env 完整时渲染,不增加常驻 provider 文字。
      • 第三方登录从 `SiteLoginPanel` 拆为 `SiteSsoProviders`,统一管理 Telegram 深链、Widget 备用及 Discord OAuth 弹窗/轮询,成功后共用本站 session 存储与 `next` 回跳;状态、拒绝、超时及弹窗阻止提示仅在交互后出现。
      • auth client、CMS settings 类型与默认值补齐 Discord start/complete 和 `discordLoginEnabled`;`SiteLayout` 注册 `logo-discord`,样式继续复用昼夜主题 token。
    24. 后台

      • mono Mac mini 发布流水线在服务健康检查通过后自动幂等执行 Telegram `setWebhook`,固定恢复到 `https://www.oolaf.top`;首次上线及本地 ngrok 调试后的生产切回均无需人工运行命令。
    25. 站点

      • 登录页第三方 provider 区保持纯圆形图标横排,Telegram「改用网页授权」不再常驻图标下方,仅在深链等待、过期或失败时提供临时备用操作,后续追加 Discord 等 provider 不会形成“图标 + 文字”纵向入口。
    26. 后台

      • Telegram 登录新增 Bot 深链主流程:`POST /web/auth/telegram/deep-link/start` 生成浏览器 verifier 与独立 `/start` token,Redis 保存 3 分钟一次性挑战;Telegram webhook 确认后,浏览器轮询 `complete` 并复用既有 identity 自动注册与 session issuer。
      • 新增 `POST /web/auth/telegram/deep-link/webhook`,通过由 bot token 派生的 `X-Telegram-Bot-Api-Secret-Token` 做 timing-safe 校验;start token 与 approved challenge 均用 Redis Lua 原子消费,避免重放、并发重复签发及 Bot 侧 token 直接兑换浏览器会话。
      • 新增 `telegram:webhook -- <HTTPS origin>` 命令配置 Telegram `setWebhook`,支持项目出站代理;Telegram 深链解析、webhook secret 与 profile 归一化新增 5 个单测,原 Widget HMAC 登录保留为备用。
    27. 站点

      • Telegram 品牌入口改为真实 42px 圆形 `<button>` + 内联指定 SVG,修复 Ionicons 自定义 SVG 不显示和透明 iframe 点击不稳定;点击后创建 3 分钟深链挑战、打开 Telegram App,并每 1.5 秒轮询确认,成功后复用现有 session 存储与 `next` 回跳。
      • 官方 Login Widget 改为「改用网页授权」备用入口,按需加载,不再覆盖品牌按钮;providers 仍为可换行横排容器,后续可追加其它 SSO。
      • `npm run telegram:tunnel` 同时打印 mono webhook 配置命令;Astro 开发代理将同一 ngrok 域名的 `/api` 转发到本机 mono,便于 Telegram webhook 本地联调。
    28. 站点

      • Telegram 圆形登录入口改用指定蓝色渐变品牌 SVG,并通过 Ionicons `addIcons` 注册为 `logo-telegram` 后由 `ion-icon` 渲染;按钮尺寸、边框和官方 Widget 点击覆盖层保持不变。
    29. 站点

      • Telegram 登录入口由官方大号文字按钮改为 42px 圆形 `send-outline` 纸飞机 Ionicon 细边框按钮(Ionicons 8 无 Telegram 品牌图标);官方跨域 Widget iframe 透明覆盖点击区,继续使用原生授权弹窗与验签链路。第三方入口改用可换行 providers 容器,后续可并排追加 Google/GitHub。
    30. 站点

      • 新增独立命令 `npm run telegram:tunnel`:确认 3102 dev server 后启动 ngrok,自动清除仅子进程内的代理变量以兼容免费套餐,并打印公网 `/login`、Domain 和 BotFather `/setdomain` 提示;`Ctrl+C` 只关闭隧道,不影响 `npm run dev`。Vite 开发服务器允许 `.ngrok-free.app` Host,避免随机隧道域名被 403 拒绝;旧终端尚未刷新 PATH 时,Windows 自动回退到本机 ngrok 安装路径,并将 spawn 失败转成明确错误提示。
    31. 后台

      • 站点客户端接入 Telegram SSO 登录:新增 `POST /web/auth/telegram`(HMAC-SHA256 验签 + `auth_date` 防重放 + IP 限流),首次登录自动注册(username 为 `t.` + 4~6 位随机字母,唯一冲突重试;昵称取 Telegram first_name + last_name),会话签发与密码登录共用新抽取的 `WebClientSessionIssuer`(`web-client-session-issuer.ts`),`WebClientAuthService` 行为不变。
      • 新增 Prisma `ClientIdentity`(`client_identities` 表,`provider` + `provider_user_id` 唯一,`client_user_id` 外键级联删除),为后续 Google/GitHub 预留;现网需手动执行一次增量 SQL(CI 不跑 migrate)。
      • env 新增 `TELEGRAM_BOT_TOKEN` / `TELEGRAM_BOT_USERNAME`(`.env` 与 `.env.mac` 已预埋空值,空 = 功能关闭);`/web/settings` 新增下发 `telegramLoginEnabled` / `telegramBotUsername`。
      • 错误码新增 `TelegramAuthInvalid 40103` / `TelegramAuthExpired 40104` / `TelegramLoginNotConfigured 40105`,并在 `app-error.ts` 同步派生类;验签器 `telegram-auth-verifier.ts` 配 7 个单测(合法/缺省/篡改/错 token/坏 hash/过期/未来时间戳)。
    32. 站点

      • 登录页接入 Telegram SSO:`/login` SSR 经 `getCachedClientSettings` 取 `telegramBotUsername`,未配置或接口失败时不渲染入口(安全降级,页面其余部分不受影响)。
      • `SiteLoginPanel` 表单下新增「或」分隔线 + 官方 Login Widget(动态注入 script,`data-onauth` 全局回调 → `webClientAuth.loginWithTelegram` → `me()` → 跳 `next`),接入现有 `astro:page-load` 挂载/防重复逻辑;`_login.scss` 新增分隔线与容器样式,只用 `--site-*` token,昼夜自适应。
      • `src/lib/auth` 新增 `loginWithTelegram` 与 `WebClientTelegramAuthPayload` 类型,会话存储与密码登录同一链路;`WebClientSettings` 类型与 `defaultClientSettings` 同步 `telegramLoginEnabled` / `telegramBotUsername` 字段。
    1. 后台

      • 文章编辑器链接弹层不能切换站内/外链、输入框也打不了字:弹层 `@mousedown.prevent` 把 radio 和 input 的默认行为一起拦住了。表单控件放行,确定/移除仍阻止失焦。
    2. 站点

      • 列表封面按场景改写:Unsplash 用 `w=640&fm=webp`,`s0.oolaf.top` 拼七牛 `imageView2`;详情 hero 用更大一档;OG 图仍原地址。
      • HarmonyOS 改为 GB2312 一级子集 woff2 并 preload;去掉 Google Fonts,自托管一份 Noto Serif SC Regular 子集作展示衬线。
    3. 站点

      • `SiteLayout` 默认 robots 从 `noindex,nofollow` 改成 `index,follow`,博客/文章等公开页不再被整站屏蔽收录;登录、注册和文章 404 仍 noindex。
    1. 后台

      • 文章富文本链接支持「站内路径 / 外链」:选中文字后可选 `/test` 这类站内地址,不再被补成 `https://`;站内同页打开,外链仍新窗口。
    2. 站点

      • 文章正文链接改用 `--site-fg-muted`,hover 用 `--site-fg-bright`,昼夜都和普通正文区分开;`href="/test"` 仍按站点 origin 打开。
    3. 后台

      • 文章编辑「正文」标题行和工具栏之间补 12px 间距,全屏按钮不再贴着编辑器。
    4. 后台

      • 文章状态拆成上架 / 下架 / 草稿三态:列表下架写入 `unpublished` 不再当草稿;筛选、抽屉、专题列表同步展示。
    5. 后台

      • 文章列表「状态」「更新时间」收进标题列:状态跟置顶标签同行,更新时间跟摘要同行,去掉独立列省宽度。
    6. 后台

      • 文章编辑/新增抽屉在「正文」标题加网页全屏与收起,仅正文覆盖页面并可滚动,Esc 退出。
      • 文章管理置顶 Tab 支持拖拽排序和列表内优先级编辑,与抽屉置顶优先级同步;新增 `POST /articles/pin-sort`。
    7. 站点

      • 部署后 PM2 起不来:`import { clsx } from "clsx"` 打到 Excalidraw 提升上来的 CJS `clsx@1.1.1`。强制解析到 `clsx@2.1.1`(有具名 ESM 导出),SSR 也把 clsx 打进服务端包。
    8. 站点

      • `/tv` 播放器进度条和设置 switch 不再跟黑核糊在一起:控件改用封面叠字的浅色 token(`--site-hero-ink-on-dark`),白天主题也不再吃成 `--site-accent` 的黑。
    9. 站点

      • stereo 部署 CI 在 Mac 上 `yarn install` 失败:`postinstall` 要跑 `scripts/copy-excalidraw-fonts.mjs`,发布 tarball 只打了 dist / package.json 等,没带 `scripts/`。打包步骤补上该目录。
    1. 站点

      • 文章正文相框去掉灰垫,改成贴页面底的细发丝框,padding 收到 3px;简历头像同样去掉发灰底。
    2. 站点

      • `/articles/:id` 正文图加相框:frost 发丝边 + 垫边,和周围阅读面分开;小图仍不拉满,点击仍看原图。
    3. 站点

      • `/draw` 进页报 `_jsxDEV is not a function`:React 19.3 的 jsx-dev-runtime 在 Vite 预打包后 `jsxDEV` 为空。改为 shim 到 `jsx`,并关掉 Oxc 开发态 JSX。
    1. 后台

      • 今日热榜按小时强制预热:`POST /client/web-hotlist/warmup`(client-key)重采已启用平台写入 Redis;定时任务 `web-hotlist-warmup` cron `0 * * * *`,脚本 Key 复用首页预热的 `WEB_CACHE_WARMUP_CLIENT_KEY`。增量 SQL `scripts/migrations/20260916-web-hotlist-warmup-scheduled-job.sql`。
    2. 站点

      • `/hotlist` 进页改为 SSR 带上 Redis 快照,有数据就不再先转圈再打 `/hotlist.json`;冷缓存仍由客户端补拉。
    3. 站点

      • `/slides/:id` 顶栏改成单行:标题与放映/保存/删除垂直居中,「已保存」挪到标题和按钮之间,不再垫在标题下面。
      • `/slides/:id/play` 返回、标题、全屏同一行垂直对齐;全屏旁标出快捷键 F。
    4. 站点

      • `/slides` 切页预览闪一下源码框:iframe 重载时 remark 的 `#source` 会露出来。切页改为后台加载新 iframe,旧页留着,就绪后再换;源码 textarea 默认隐藏。
    5. 站点

      • `/slides` 放映钉图底部被裁:正方形图按宽度放大后高出剩余画布。改为按剩余高度等比缩小(`--pin-frac`),完整显示、不再被 overflow 切掉。
    6. 站点

      • `/slides` 首次进编辑页、从放映返回后预览钉图消失:overlay 量不到尺寸时不再写成 0×0,先铺满预览框;量到后再信箱对齐。ClientRouter 回来会强制重挂 iframe 并重画钉图。
    7. 站点

      • `/slides` 编辑预览钉图和放映页大小不一致:两边都按 16:9(1280×720)信箱缩放,overlay 不再铺满整块预览框,left/top/width 百分比和放映共用同一块画布。
    8. 站点

      • `/slides` 放映裂图:去掉 srcdoc 里把 img 改成 data-src 的做法,钉图继续用真实 src。
      • 编辑页首次预览没图:钉图解析放宽,CDN 地址立刻挂到 overlay,iframe 改为垫底绝对定位,load 后再画一次钉图。
    9. 站点

      • `/slides` 插入图片不再送进 remark:编辑预览把钉图叠在 iframe 上,原图在 Worker 里缩成 960 预览图;remark 只渲染去掉 pin 的 Markdown,主线程不再解码相机原图。
    10. 后台

      • Oolaf 面试备忘 30 秒改成先讲核心:start 立刻返回任务 ID,传到 Catbox 放后台,前端轮询 success 才拿链接。超时/转圈挪到追问。
    11. 站点

      • `/slides/:id` 编辑顶栏去掉层间横线和插入区分隔线,只留标题/页选择输入发丝底边。
    12. 站点

      • `/slides` 插入图片卡死:根因是预览把原图像素送进 remark,且 presenter 会复制成三份解码;预览改为最长边 960 的缩小图,srcdoc 里先 data-src、去掉 notes/preview 克隆后再给当前页挂 src。
    13. 后台

      • Oolaf 面试备忘改成口播:大文件不能一个请求干等;先 start 拿任务 ID,再轮询好了没。追问覆盖为什么拆两步、轮询什么、进度条、为何不直传。
    14. 后台

      • 「何健-前端开发-西安」个人项目 Oolaf 绑下架面试备忘 `interview-oolaf-catbox-chunk`:Catbox 大文件切片上传(官方无分片口、中台落盘异步代传、手写 multipart)。口播结构与海外官网等篇一致。
      • 简历列表预览关掉再开,面试便签会丢:`$refs` 被 computed 缓存成已销毁 DOM。改为每次打开重取宿主,分页就绪后再画浮层。
    15. 站点

      • `/slides/:id` 编辑顶栏分层:名称与放映/保存/删除、翻页与插入、套用模板拆成三层,发丝线分隔;快捷说明收到按钮 title,不再挤在同一行。
    16. 站点

      • `/slides` 插入图片改为先写入 IndexedDB,预览用本地草稿;点保存(含 Ctrl+S)才上传 gallery OSS 并写回 CDN 地址。
    17. 后台

      • 新增 `POST /web/slides/:id/images`:需 slides 权限,图片落到当前 gallery 绑定的 OSS,转 WebP 最长边 1920;Web API 调试文档已补。
    18. 站点

      • `/slides` 支持插入图片:传到当前生效的 gallery OSS,预览里可拖动位置、右下角缩放;也可粘贴或拖放图片。
    19. 站点

      • `/slides` 去掉插入流程图:编辑页分类轨、拖入/点击插入和相关脚本样式都移除,流程图仍只在 `/draw`。
    20. 后台

      • 流程图上传 WebP 最长边限制 1920,避免原图像素过大把站点幻灯片预览卡死。
    21. 站点

      • `/slides` 插入流程图不再卡死:预览 iframe 关掉 remark 的 `transform:scale` 和 window resize 循环,预览图先缩到最长边 1280 再送进 remark;素材条缩略图改为懒加载。
    22. 站点

      • `/draw` 找回「在画布上查找」侧栏:去掉素材库时不再从 DOM 拆侧栏节点;查找输入框补发丝边,素材库页签和右上角入口仍隐藏。
    23. 站点

      • `/slides` 插入流程图后预览不再卡死:remark iframe 限制图片尺寸并关掉溢出滚动条循环缩放;流程图导出也限制最长边 1920。
    24. 站点

      • `/draw` 界面去掉 Excalidraw 文案痕迹(Mermaid 弹层说明、更多工具标题、导出水印、帮助里的 Plus/协作宣传);本地保存改用流程图 .json,不再用 Excalidraw 作文件类型名。
    25. 站点

      • `/draw` 去掉 Excalidraw 素材库:右上角入口、侧栏、命令面板和右键「添加到素材库」都不再出现;画布查找仍可用。
    26. 站点

      • `/draw` 去掉「线框图至代码」(选中画框上的 AI 转换、更多工具里的入口),文字至图表 / Mermaid 仍保留。
    27. 站点

      • `/draw` 把 Excalidraw 主题覆盖改到其 CSS 之后加载,清掉黑夜模式残留紫色(主色、表面、焦点边框、Logo、选区)。
      • 文字至图表 / Mermaid 弹层的页签下划线、输入框、插入按钮、AI Beta 标改成站点黑白主色。
    28. 站点

      • `/draw`「保存到本地」不再弹中间层,直接走系统另存为(Ctrl+S 同样);菜单项补下载图标。
    29. 站点

      • `/draw` 二级菜单改 portal 到 body,不再吃 Excalidraw 下拉的边框/间距;无权限锁改成 SVG。
      • 空画布默认跟站点黑夜(void 黑);首选项行距和画布色点自己排,分类改成自定义下拉。
      • 帮助/导出/保存到本地等弹层跟站点黑白主色,弹层和侧栏补开合动画。
    30. 站点

      • `/draw` 云端保存收进汉堡「保存到 ›」二级:本地保存、标题、分类、保存到 OSS 都在侧栏,主菜单不再堆「云端保存」分组。
      • 二级里的标题/分类改成矮发丝线输入,去掉过高的输入框。
    31. 站点

      • `/draw` 汉堡菜单里的首选项收成「首选项 ›」二级浮层,开关和画布背景不再在主菜单里往下堆。
    32. 后台

      • 新增 `POST /web/diagrams/ai`:需登录且账号含 `diagrams`,走系统默认 `isActive` 模型;`mode` 为 mermaid 或 html,专用提示词,不复用机器人 RAG。
      • 后台 Web API 调试文档补流程图 AI 接口;该口限流 10 次/分钟。
    33. 站点

      • `/draw` 文字生成图接 mono 系统默认 AI;无 `diagrams` 权限时「从代码生成图」「保存到 OSS」显示弱化文字加锁,不再跳登录。
      • 汉堡菜单补回首选项(网格 / 吸附 / 禅 / 查看 / 属性 / 工具锁 / 箭头绑定 / 画布背景,不含主题和语言);命令面板和画布查找补图标。
      • 清掉帮助、素材库等 Excalidraw 外链;去掉「浏览素材库」,只留本地打开;右键菜单和搜索框漏网英文再硬编码一层。
    34. 站点

      • 命令面板改成站点自己的中文浮层(Ctrl+/ 或菜单),查找侧栏改开 `default/search`,欢迎屏提示也改成硬编码中文。
      • 漏网英文(placeholder、aria-label、菜单名)再扩一层硬编码对照;云端保存输入保持透明发丝线。
    35. 站点

      • `/draw` 云端保存(标题、分类、保存到 OSS)收进汉堡菜单「云端保存」,不再占画布顶栏。
      • 命令面板、画布查找等简中包缺译的英文改成硬编码中文,并补一层界面文案替换(不含画布里用户写的字)。
    36. 站点

      • 左下角「最近」只在博客首页 `/` 显示;其它页 SSR、软导航 after-swap 都加上 `site-skin--no-recent-pages` 立刻藏掉。
      • 工具页仍上报最近常访,回到博客后列表照常更新。
    37. 站点

      • `/draw` 给 `astro-island` 和舞台明确高度,Excalidraw 绝对铺满剩余区域,避免父级高度为 0 导致画布空白、工具栏点不到。
      • Header 切昼夜时,若画布仍是默认黑/白底,跟站点背景一起切;用户自选的场景底色不改。
    38. 站点

      • `/draw` 保存条移出 Excalidraw 画布层,避免欢迎屏/画布 overlay 挡住「登录后保存」。
      • 工具岛不再跟 void 黑同色:`--island-bg-color` 用前景 10% mix,图标走 `--site-fg`,昼夜都能看见工具栏。
    39. 后台

      • Admin 文章编辑器加「引用幻灯片」:TipTap `slideEmbed` 节点写成 `.article-slide-embed` 占位,插入时自动 `embedEnabled=true`。
    40. 站点

      • 公开入口 `/draw` 接入 Excalidraw 画图层:锁简中、去掉社交/登录/协作/包内主题开关,壳层颜色桥到 `--site-*`,草稿走 IndexedDB,登录且 `diagrams` 才把 WebP + 场景 JSON 存到 gallery OSS。
      • 幻灯片编辑页加分类流程图轨,拖入或点击插入 Markdown 图片,现有 remark 预览立刻出图。
      • 文章页 hydrate `.article-slide-embed`,走公开 embed API 播放;无权限或 404 显示「幻灯片不可用」。
    41. 后台

      • `/p/resume` 锁死手势缩放:viewport `maximum-scale=1` / `user-scalable=no`,`touch-action: pan-x pan-y`,并拦截 iOS `gesture*`。
    42. 站点

      • 站点皮肤 viewport 与遗留壳对齐:`maximum-scale=1` / `user-scalable=no`;`touch-action: pan-x pan-y` 禁捏合(灯箱除外),iOS 再拦 `gesture*`。
    43. 后台

      • 公开简历 `/p/resume`(flush 预览)纸面改为 `width: 100%` / `max-width: 820px`,窄屏收紧内边距并缩小证件照,长链接与教育行可换行;打印分页仍用 820px 测量稿。
    44. 站点

      • `/resume` 静态 iframe 吃满舞台宽,骨架窄屏缩小证件照占位;真正的纸面重排在 Admin 公开预览 `/p/resume`。
    45. 站点

      • `/resume` 静态操作栏改成文档流占位(不再盖在 iframe 上),栏用实心底(现场 `--site-bg`,静态白),正文从栏下开始,GitHub 链接不再穿出或挡住说明。
      • 窄屏说明与按钮上下分排、文案可换行;工具条样式拆到 `_resume-studio-bar.scss`。
    46. 站点

      • 说明文案改到和简历纸同宽栏左对齐(静态 820px / 40px 内边距,现场 720px / 32px),字色改成 `--site-fg-bright` / 白纸 `#111`,并加左侧 2px 竖线,不再用弱化灰字。
    47. 站点

      • `/resume` 工具条左侧加说明「在职中,故隐藏在职工作项目与描述」;现场用 `--site-fg-muted`,静态白纸上用浅底字色,现场/静态都能看见。
    48. 站点

      • 骨架纸宽度改成一开始就是 820px(`max-width: 100%` 仅窄屏收缩),并写进 HTML inline,避免先 100% 再收到 820 闪一下。
    49. 站点

      • `/resume` 静态骨架改成和简历本体同宽(820px 居中),并从工具条高度下起铺,不再 100% 拉满去压右上角按钮。
    50. 后台

      • `/p/resume?from=stereo` 按字段丢掉进行中的工作项目(结束日期「至今」),不按项目名匹配;后台预览和无查询的公开预览不动。
    51. 站点

      • stereo `/resume` 现场稿按字段丢掉进行中的工作项目(结束日期「至今」),不按项目名匹配;Admin / mono 预览不动。
    52. 站点

      • `/resume` iframe 不再把生产默认打到 `localhost:3100`。线上用 `https://mono.oolaf.top/p/resume`;请求 Host 不是本机时,loopback 预览地址会改写到公开 Admin。
      • `.env.mac` 与 PM2 环境补上 `PUBLIC_RESUME_PREVIEW_URL`。
    1. 后台

      • Admin `/setting` HLS 白名单改为服务端分页:`GET /web/tv-hls-hosts?page&pageSize` 返回 `{ list, page, pageSize, total }`,默认 20 条、pageSize 上限 100;播放学习仍走全量表缓存,不受列表分页影响。
      • 设置页白名单表接翻页;删到空页会回到最后一页。
    2. 后台

      • kanju 搜索把 catalog `poster_url` 映射为 `cover` 返回;iyf 搜索 cover 恒为 null,不回 imgPath。
    3. 站点

      • 看剧AI 搜索卡使用目录 `poster_url` 做封面;爱壹帆仍用文字占位,不接 imgPath。
    1. 站点

      • 续看卡片缩小,右上角 badge 标片源(爱壹帆 / 看剧AI),删除钮收到左上角。
      • 搜索源从独立芯片改成搜索框内下拉;收藏/豆瓣不再挂源切换。
      • 片库搜索样式拆到 `tv-library-search.scss`,避免单文件超 500 行。
    2. 后台

      • kanju 目录里的 `zy.baipiaozhe.com/.../yjm3u8/YJ-*.m3u8` 不是播放列表,源站 301 到自身;hls-proxy 改为先请求 `player.baipiaozhe.com/v1/playback/resolve/{YJ-}`,拿到真实 m3u8 再代理。
      • 解析出的 CDN 域名用已放行的 baipiaozhe 父域学习进 HLS 白名单;kanju 取流 Referer 改为播放器域,避免再跟 301 死循环。
    3. 后台

      • 注册第二播放源 `kanju`(看剧AI):HMAC-SHA256 签 `x-ai-movie-timestamp/nonce/signature` 后打 browse/catalog 与 catalog/episodes,只取 `urls.yjm3u8`;不建 `/v1/threads`,不用对方历史。
      • HLS 按 source 选 Referer(kanju 不用 iyf/pipecdn 映射,允许一跳 https 白名单跳转);种子白名单加 `baipiaozhe.com`。
      • 历史/收藏/跳过偏好与 search/play 的 `mcId`/`videoId` 抬到 128;增量 SQL `scripts/migrations/20260915-client-tv-mcid-varchar-128.sql`。
    4. 站点

      • 片源芯片会列出 mono 注册的看剧AI(`kanju`);搜索/播放/历史/弹幕仍走本站 `source::mcId`,不接看剧侧栏历史。
      • 播放 href 与 `tvMediaKey` 覆盖看剧 `av_` 长 id(最长 128)。
    5. 后台

      • Setting 影视片源把清单/切片代理从操作按钮改成独立开关列,开合状态与启用列一致,切片关仍依赖清单开。
    6. 后台

      • 影视片源改成 registry + Setting `tv.sources`:启用/默认/清单代理/切片代理;`GET /web/tv/source/list` 只返回已启用源。
      • search/episodes/play/hls-proxy 可选 `source`,缺省用 defaultSource;play 响应带 proxy flags;切片关时清单里 ts 保持 CDN 原址。
      • 历史/收藏唯一键改为 (用户, source, mcId),空 source 回填 iyf;增量 SQL `20260915-client-tv-history-favorite-source-uidx.sql`。
      • iyf HLS Referer/主机映射抽到独立策略模块;出站仍共用 `CLASS_PROXY_URL`。不加第二播放源。
    7. 站点

      • 影视从单源对象改成源列表:先拉 `/web/tv/source/list`,搜索/播放/历史/收藏/弹幕绑定都带 `source`,身份用 `source::mcId`。
      • 播放页 `/tv/play?source=&id=`;旧链接无 source 时用默认源。`proxyPlaylist` 为真才包 hls-proxy。
      • 片库用现有 tab 样式渲染源芯片(现网仅一项);豆瓣仍只搜当前选中源。
    1. 站点

      • 窄屏助手底部输入框跟 iOS 键盘:对话层贴 visualViewport,聚焦时连续对齐键盘动画,并取消 Safari 把页面顶起。
      • 键盘升起时去掉 home indicator 垫高,避免输入条和键盘之间空一截;开层时给 iOS 加上 `interactive-widget=resizes-content`。
    2. 站点

      • 公开内容助手窄屏改为全屏对话层:占满 visualViewport、返回关闭、建议横滑;开面板不自动弹键盘,有对话后收起芯片。
      • 展开时不再抬高避开音乐条;输入框 16px 避免 iOS 缩放。桌面浮窗交互不变。
      • `_robot.scss` 拆成 panel / motion / mobile,避免单文件超 500 行。
    3. 站点

      • 文章封面按配图下沿亮度选字色:深色图白字 + 黑遮罩,浅色图黑字 + 白遮罩,不再跟站点昼夜主题绑死。
    1. 站点

      • 文章封面改回「整张配图铺底 + 下沿遮罩 + 文字叠图」:拿掉文案区实心底,舞台加高到约 480px,遮罩只在下半段用 `--site-bg` 渐隐,保证字色对比且不再把图压成一条。
    2. 站点

      • 首页软进文章详情时 ClientRouter 会用旧 SSR 样式盖掉封面文案 padding。把 banner 内边距和短遮罩钉进 SiteLayout inline,并给 copy 加上 `border-box`,避免首次进入贴边。
    3. 站点

      • 文章封面文字遮罩改成贴着文案的固定短渐变(约 56px),不再按整张 banner 百分比从四成高度铺实色。
    4. 后台

      • 后台主栏不再用 `100vh` 内容区叠固定顶栏 padding:顶栏回到文档流,内容区只吃剩余高度;未超出视口时不再出现右侧滚动条。
    5. 站点

      • 封面舞台内文案补回左右/底内边距;返回与封面、封面与划线的间距收紧。
      • 封面图不再进 PhotoSwipe 预览。
      • 阅读栏 `--site-article-body-measure` 从 42rem 调到 45rem。
    6. 站点

      • 文章详情封面舞台与底部评论区都收到 `--site-article-body-measure`,和正文同一栏宽。
    7. 后台

      • 文章已选标签不再走 Arco 多选芯片(会把「待保存」和名字粘成一段字)。已入库用绿色实线芯片,未保存用金色虚线 + 独立「待保存」徽章。
    8. 站点

      • 误删的封面舞台加回:封面仍吃满 `.site-article`,不跟阅读栏收窄。日期/标题/摘要、划线、正文继续 42rem。
    9. 站点

      • 文章详情去掉封面舞台。日期、分类、标签、标题、摘要和划线与正文同一栏宽(`--site-article-body-measure`)。
    10. 后台

      • 后台顶栏补上 tags-visited:打开过的页面显示为可关闭页签,工作台固定;`/setting`「后台界面」可开关,配置键 `admin.tags_visited.enabled`(默认开)。增量 SQL `scripts/migrations/20260914-admin-tags-visited-enabled.sql`。
      • 右上角账号胶囊补 hover / 下拉箭头;菜单增加「系统设置」,仅 `config:view` 可见可进。
      • 新建文章自定义标签:已入库与「待保存」芯片样式分开,待保存用金色虚线。
      • 保存文章时给标题、摘要、正文(跳过 code/pre)和官方划线在中文与英文/数字之间补左右空格。
    11. 站点

      • HarmonyOS 只挂了 Regular,却把 `@font-face` 标成 `400 700`,浏览器把粗体映射到同一份 Regular,`strong` 看起来不加粗。改回 `400` 并打开 `font-synthesis: weight`。
      • 文章详情只收窄 `.site-article__body`(`--site-article-body-measure: 42rem`),masthead 仍吃满主栏。
      • 标题摘要去掉 `46rem` 上限,铺满 `.site-article`。
    12. 站点

      • 封面遮罩实色上提到约四成高度,文案顶 padding 加高,meta 一行也坐在不透底上。
    13. 站点

      • 文章封面遮罩加实:约六成高度起就是不透的 `--site-bg`,标题摘要不再透出配图。
    14. 站点

      • 文章封面舞台加一层随主题走的底遮罩,下沿落到 `--site-bg`,标题和摘要不再跟配图串色。
    15. 站点

      • 修复 `SiteArticleHeader` 编译错误:Astro 不用 `<>` 碎片,遮罩改放进封面 figure。
    16. 站点

      • 文章详情 masthead 改成封面舞台:图裁成矮带,日期/分类/标签/标题/摘要叠在下沿,用页面底色渐隐;不再竖着叠五段。
      • 无封面时同一套 copy 收成一行 meta + 衬线标题;摘要最多两行。
    17. 站点

      • 文章详情把列表封面配图接到标题下,规则与正文图一致(等比、限高、可点开预览);无封面不占位。
    18. 站点

      • 影视投屏只有声音没有画面:hls.js 的 MSE blob 不能远投视频轨。Safari/iOS 投屏时改交真实 m3u8;Chrome 等禁止远投 MSE,并强制 video 合成以免 overlay 被丢掉。
    19. 站点

      • 旧引擎(无 module / 无 CSS 变量)只动态加载 `/legacy/readable.css` 与 `gate.js`:顶栏升级提示 + 单栏可读,不补全 site 皮肤。
      • 现代浏览器不下载 legacy 资源;`?legacy=1` 可在现代浏览器预览该模式。
      • 能力谓词落在 `src/lib/legacy/engine.ts`,与 `SiteLayout` 内联 ES5 探测对齐。
    20. 站点

      • 白天分享海报标题不再白字叠白底:浅色修饰类和 article/post 写在同一节点上,标题改为墨色。
    21. 站点

      • 「分享海报」改成下拉:可选黑夜或白天封面,各自生成、缓存和下载。
      • 白天成片走白底墨线,banner 改日轮与发丝光;黑夜仍是月食。
    22. 站点

      • 分享海报离开旧杂志绿/米色:成片改 void 黑 + frost 发丝 + HarmonyOS / 衬线标题,二维码改黑白。
      • 顶部 banner 重画成月食与轨道,不再用五线谱和金色散点。
    23. 站点

      • 正文划线底色加重:mine / official / popular 改走 `--site-hl-*`,黑夜约 40%/30%/22% 前景,白天约 16%/12%/9%,不再用 10% 白或 24% 霜。
    24. 站点

      • 文章详情有划线时「我的划线」默认展开;超过 3 条时列表下方出现展开/收起,收起只留前 3 条。
    25. 站点

      • 公开内容助手只在博客 `/` 与文章详情 `/articles/:id` 出现;软导航离开后收起,不再带到速记等其它页。
      • 速记报错改成底栏 dock 里输入框上方的一行字,不再用会被压缩、随后被 Composer 盖住的整块 `SiteErrorBlock`。
    1. 站点

      • `/translate` 各引擎译文旁加复制图标,点击复制结果;成功后短暂变成对勾。昼夜都走 `--site-*`。
    2. 后台

      • 77 篇导入文共用媒体 `3248`(`blog-img.png` 电脑插画),抽正文首图也会命中同一张;抽图逻辑改为跳过该默认图。
      • 新增 `apply:article-covers`:先上传再引用。标题能对上的用本地生成封面,其余按标题下 Unsplash 图入库写成 `cover` 媒体,不热链、不清标签。
      • 回填脚本的 Unsplash 兜底改为下载后上传媒体库,不再只写 `cover_url`。
      • Unsplash 触发 429 后,剩余共用默认封面改为按分类用已生成主题图做独特色彩/裁切变体,再上传引用。
    3. 后台

      • 导入文章若共用同一张封面,可用 `yarn workspace @oolaf-mono/server backfill:article-covers` 回填:重复或空封面先抽正文第一张真图,没有再按标题/分类/摘要搜 Unsplash;只改 cover,不清标签。支持 `--dry-run`。
      • 后台新建/更新文章时,封面为空则自动抽正文首图(媒体库图写 coverMediaId,外链写 coverUrl)。
      • 抽图、封面指纹与 Unsplash 检索词抽到 `article-cover-from-content.ts`,随机封面中文预设与回填共用。
    1. 站点

      • 文章代码复制按钮改挂在 `pre` 上,不再套 `site-article-code-frame`。软导航首次进入若已套壳会拆掉。
      • `pre > code` 铺满且不描边、不铺底,避免 Prism 后注入时再画出里圈。
    2. 站点

      • 文章代码块只留 `pre` 一层边框底。复制按钮的外框不再自己描边、铺底,避免大盒再套小盒。
    3. 站点

      • 文章代码块不再继承正文 `overflow-wrap: anywhere` / `word-break`,关掉连字,避免 `fix` 一类短行看起来像叠字。
      • 代码框改走 `--site-*` frost,去掉 GitHub 灰底;未加载的 Prism 语言(如 markdown)降成 `language-none`。
    1. 后台

      • 复制更新提示词开头写明:连词、先审后 SQL 等约束对后台每一篇文章同等生效,当前 id 只是代入,不因题目或仓库放宽。
    2. 后台

      • 文章「复制更新提示词」补上连词硬约束:整篇摘要/正文(含旧段)禁用指定并列、选择、转折、因果连词;旧句带禁用词必须改写,不得原样抄出。
      • 交付顺序改为先发完整文案给用户审,明确通过前禁止写 SQL / 写库;独立仓库产品须读该仓库 LOGS / README / git log。
    1. 后台

      • 修复 Stereo 直播刮华视失败:Cloudflare 对 Impit 旧 `chrome`(约 124)指纹直接 403 挑战页;`WebLiveHuavodService` 改为 `chrome142` 并同步 UA。
      • HTTP 非 2xx 时识别 `Just a moment` / Turnstile 验证页,提示更新华视 Cookie,而不再只报 `huavod HTTP 403`。
    2. 后台

      • 定时任务运行记录保留从 7 天改为近 3 天(清理与列表窗口一并改)。
      • Stereo 进页 Redis 预热改为 1 小时:公开缓存 TTL `3600`,定时任务 `web-entry-warmup` cron 改为 `0 * * * *`。增量 SQL `scripts/migrations/20260910-web-entry-warmup-hourly.sql`。
    3. 后台

      • 定时任务运行记录改为只保留近 7 天:启动与每日按 `started_at` 删除更早行,列表查询同样限制窗口。
      • Admin `/system/schedule` 运行记录文案标明「仅保留近 7 天」。
    1. 后台

      • 定时任务增加「脚本 Key」JSON(`scheduled_jobs.extra_keys_json`),运行时注入子进程 `APHELIOS_SCHEDULE_KEYS`,各任务密钥互不共用。
      • Stereo 进页预热脚本改为只读该 JSON 的 `WEB_CACHE_WARMUP_CLIENT_KEY`,不再读服务器 `.env`。增量 SQL `scripts/migrations/20260909-scheduled-job-extra-keys.sql`。
    2. 后台

      • 预热覆盖 Stereo `/posts` 动态页:公开与登录用户的全部/视频/文字/私密第一页、kind-stats、contribution-stats;登录用户另预热带 clientOptions 的 home overview。
    3. 站点

      • 顶栏中宽(平板/折叠屏)不再让「关于我」等导航盖住搜索:导航列可收缩,GitHub/小红书改为操作区图标。
      • 顶栏 inner 用 container query:1080 以下收起意见反馈/关于我/简历、搜索收成图标、露出汉堡;920 以下外链进抽屉。
      • 点击收缩搜索或 Ctrl+K 仍会展开并聚焦输入框;768 以下继续走原移动端顶栏。
    1. 后台

      • Stereo 进页 Redis:首页公开接口 TTL 40 分钟;`/auth/me`、vault 列表、`/nav/recent` 走 `oolaf:web-private:*` 按用户/会话隔离,清公开缓存不会误删。
      • `POST /api/v1/client/web-cache/warmup`(`x-oolaf-client-key`)一键预热首页 + 近 14 天有效会话;后台定时任务 `web-entry-warmup` 每 30 分钟调用。增量 SQL `scripts/migrations/20260909-web-entry-warmup-scheduled-job.sql`。
      • 发布/改配置清公开缓存后 debounce 补热首页;env 使用 `WEB_CACHE_WARMUP_CLIENT_KEY`。
    2. 站点

      • 现场打字机播完不再写入本机「已看过」标记;刷新 `/resume` 会重新播放(系统减少动效仍直接出终稿)。
    3. 站点

      • 现场/静态切换只盖层,不中断打字机;切回现场从当前进度继续,后台仍滚到最新一行。
    4. 站点

      • `/resume?t=static` 直接打开静态纸质预览,不再播打字机;无该参数仍给访客现场动画。
      • 右上角弱化复制图标复制带 `t=static` 的地址;切换现场/静态会同步地址栏。
    5. 站点

      • `/resume` 现场动效加长加明显:简介大号落版缩放、证件照裁切入场、章节/条目从右侧收束展开、进度发丝加左边竖线、光标加脉冲。
      • 简介打完停约 720ms 再继续项目;播放标记升到 v8,刷新会再看一遍;系统减少动效仍直接出终稿。
    6. 站点

      • 现场吐字补上站点霜线:顶栏进度、正在写的段落提亮、条目入场缩放/透明度、证件照淡入;仍只用 160ms 的 opacity/scale/color。
    7. 站点

      • 去掉介绍后的 CSS 源码快闪;简介打完直接落版,继续打项目和技能。
    8. 站点

      • 现场按已发布简历打全文:完整摘要、全部项目条目与要点、技能、个人优势;不再截成 22 字标题后一次性倒出。
      • 介绍打完才写样式落版,随后逐条打印项目与技能。
    9. 站点

      • `/resume` 现场改为整页画布:只打自我介绍文字,再快闪样式代码后落成排版;去掉左源码右预览。
    10. 站点

      • 现场预览去掉光斑/渐变字,改走 `--site-*` 扁平霜线;跟 `html[data-theme]` 与顶栏昼夜切换。
    11. 站点

      • 现场预览 iframe 预置排版骨架(卡片、证件照尺寸、栅格),CSS 打出来之前不再是撑满的原生图和白字。
      • 长标签(头像 URL)一次打完,避免照片在标签写完前失控放大。
    12. 站点

      • `/resume` 现场稿改为 Web `resumes/published` 真实内容(项目/技能/摘要),预览对未闭合 HTML 补全以便边打边画。
      • 访客侧仍去掉姓名、标语与「同花顺」「科为」;本机只记住手工改过的源码,发布更新会重新打印。
    13. 站点

      • 现场默认改为打字机:先打印自我介绍,再打印 CSS;右边随打印实时出字和样式。可跳过;切静态不停。
    14. 站点

      • `/resume` 默认现场分栏(左源码右预览,localStorage);右上角切静态已发布简历,两套都不卸载。
    15. 后台

      • 公开简历骨架改为满高弹性行块,避免下部大片空白。
    16. 站点

      • 简历骨架铺满可视高度:头图 + 分隔线 + 多段弹性行块填满剩余空间。
    17. 后台

      • `/p/resume` 首屏改为白底骨架,去掉 `a-spin` 灰遮罩;iframe 父页收到绘制完成消息后再露出正文。
    18. 站点

      • `/resume` 先出纸面白底骨架,iframe 灰闪隐藏;等 Admin 简历画完再淡入。其它页 prefetch `/p/resume` 减轻等待。
    19. 后台

      • Stereo `/p/resume?from=stereo` 再去掉姓名与标语(如「求职前端开发」);后台预览原文不动。
    20. 站点

      • Stereo 简历再隐藏姓名与标语(mono `?from=stereo`);后台预览不动。
    21. 后台

      • 新增 `client.resume.enabled`(默认开):`/setting`「入口与功能」可关 Stereo 简历入口;Web `/settings` 返回 `resumeEnabled`。增量 SQL `scripts/migrations/20260909-client-resume-enabled.sql`。
    22. 站点

      • 顶栏/抽屉/关于我联系区的简历入口跟 `resumeEnabled`;关闭则 `/resume` 跳首页。
      • 简历页隐藏机器人与最近访问(`site-skin--no-utility-floats`,软导航按路径同步)。
    23. 后台

      • `/p/resume?from=stereo` 渲染前去掉正文里的「同花顺」「科为」;无该查询时公开页与后台预览原文不动。
    24. 站点

      • `/resume` iframe 增加 `from=stereo`,仅访客简历去掉「同花顺」「科为」;不改 Admin 预览。
    25. 后台

      • 公开简历再剥工作经历:清空 `workExperience.items`,并关闭对应模块槽;项目经历仍保留。
    1. 后台

      • 公开 `GET /api/v1/web/resumes/published` 剥联系方式与求职隐私(年龄/学历/工龄/性别婚姻/电话邮箱地址、求职意向、教育经历);后台设计器与列表预览仍用完整数据。
      • 同时关闭求职/教育独立槽的 `moduleVisibility`,避免空模块占位;姓名、标语、头像、自评、工作与项目保留。
    2. 后台

      • 公开 flush 预览改为连续 HTML,不再切 A4 固定页高,去掉页底空白与页间发丝线。列表弹窗 / PDF 仍按纸张分页。
    3. 后台

      • 公开预览 `/p/resume` 覆盖 Admin 全局 `body { overflow: hidden }`,iframe 内可纵向滚动整份 HTML 简历。
    1. 站点

      • `/resume` iframe 在顶栏与页脚之间铺满剩余高度,滚轮落在预览文档上。
    2. 后台

      • 公开 `GET /api/v1/web/resumes/published`:最新已发布简历 + 模板,剥面试文章 id;无则 404;`frame-ancestors *`。
      • 抽出 `ResumePrintDocument`;Admin 公开无壳页 `/p/resume`(无难点、无页缝);列表弹窗预览仍保留浮层与页间距。
      • `client.layout_right.contacts` 增加 `resume`,默认在 github 前。已有逗号配置需手工补 `resume` 才会在关于我联系区出现。
    3. 站点

      • 新增 `/resume`:顶栏「关于我」与 GitHub 之间的「简历」入口;主区 iframe 嵌套 Admin `/p/resume`(`PUBLIC_RESUME_PREVIEW_URL`)。
      • 关于我联系区支持 `layoutRightContacts` 的 `resume`(`/resume`,非外链)。
      • 注册 `document-text-outline`;窄屏抽屉「页面」区关于之后增加简历磁贴。
    4. 后台

      • 删除服务端一次性脚本:`import-hejian-resume.ts`、`sync-resume-theme-swatch.ts`、`patch-hejian-personal-projects.ts`、`seed-interview-lasis-article.ts`、`seed-interview-hejian-work-notes.ts`。
      • 保留 `backfill-article-content-media.ts` 与 `backfill-post-media-thumbs.ts` 作为存量运维入口。
    5. 后台

      • LASIS 面试备忘改成与另外四篇同一口播:30 秒快答 + 追问(响应式/Proxy、markRaw 与 ref、怎么验)。
      • 仍用 slug `interview-lasis-map-proxy`,脚本 `seed-interview-lasis-article.ts` 更新下架正文。
    6. 后台

      • 四篇下架面试备忘落库并绑简历:海外官网 Astro/LCP、中台 Nginx path、rtcpts yalc、同花顺水果机 1px。
      • 脚本 `seed-interview-hejian-work-notes.ts`;slug 分别为 interview-redtea-astro-lcp / interview-iot-nginx-paths / interview-rtcpts-yalc-npm / interview-ths-slot-1px。
      • 正文按口播:30 秒 + 追问(问题在上、答案在下,术语括号注明)。不改 LASIS 那篇绑定。
    7. 后台

      • 面试备忘独立权限 `resume:interview-notes`:权限树挂在简历下;增量 SQL 只授 `super_admin`,不随 `resume:view` 开放。
      • `GET /resumes`、详情与写回响应对无此权限的账号剥掉 `interviewArticleIds`;无权限保存时服务端保留库内绑定,防止被清空或注入。
      • 预览浮层改走 `GET /resumes/:id/interview-notes`,不再用文章详情接口;设计器绑定控件仅该权限可见。
    8. 后台

      • 简历项目可绑 `interviewArticleIds`;设计器右侧多选文章(含下架),编辑画布不画备忘录。
      • 列表「预览」为绑定项目画引线 + 面试难点 float;点标题弹文章预览并限高。另存为 PDF 只截纸页,不含浮层。
      • 下架文章 `interview-lasis-map-proxy`(LASIS 地图实例进 Vue 响应式导致拖图掉帧)绑定 `proj_lasis`。脚本 `seed-interview-lasis-article.ts`。
    9. 后台

      • 个人项目「功能」由两条 list 合并为一条,避免预览出现 3. / 4. 拆段。
    10. 后台

      • 重写何健简历五条个人项目:Oolaf 工作台 / capture / formant / git-muse / Flutter 开工模板。
      • 样本 `hejian-resume-content.json`;脚本 `patch-hejian-personal-projects.ts` 只改对应条目,不改发布状态。
    1. 站点

      • 编辑页窄屏:名称单独一行,放映/保存/删除下一行拉开;模板与分页加大间距和点击高度;快捷键说明在手机上隐藏。
    2. 站点

      • 放映顶栏对齐:用更高选择器盖掉 `.site-back` 的 8/28 外边距,返回 / 标题 / 全屏同一行垂直居中,标题用 UI 字号省略,不再和站点 Header 挤在一起。
    3. 站点

      • 编辑改为按页:上一页 / 下一页 / 页下拉选中要改的那一页,左侧只显示该页 Markdown,右侧只预览该页。
      • 「新页」或 Ctrl+Enter 在当前页后插入空白页并切过去;保存仍按 `---` 拼回整份稿。
    1. 站点

      • 编辑页顶栏可改幻灯片名(空则为未命名);保存写入 `title`,不再只能靠正文一级标题。
      • 列表「新建」带 `?draft=1`;未保存点「全部幻灯片」会提示并丢弃空稿。
      • 当前页极简模板:标题页/章节/正文/双栏/引用/代码/结束页;Ctrl+Shift+1–7 套入光标所在页,Ctrl+Enter 插入新页。标题页仍可用 remark 的 `middle` 居中。
    2. 站点

      • 预览/放映贴顶:覆盖 remark 默认 `vertical-align: middle` 与 scaler 垂直居中,16:9 画布顶对齐,正文第一个块去掉上外边距。
    3. 站点

      • 幻灯片列表改成整行 frost 卡:标题与时间拉开,放映/删除放在卡片内部;删除 hover 只改字色、不铺底。
      • 放映顶栏覆盖 `.site-back` 的大下边距,返回 / 标题 / 全屏拉开。
      • remark 默认 4:3 会在宽屏两侧露出灰底;改为 16:9,并把 `.remark-container` 背景盖成白,去掉 scaler 阴影。
    4. 后台

      • 补 `client_options` 种子:`code=slides`、`label=幻灯片`、`sort=50`(`WHERE NOT EXISTS`,可重复执行)。
      • 写在同一份 `apps/server/scripts/migrations/20260907-client-slide.sql`;执行后到「系统 → 客户端用户 → 管理选项」确认,再勾给对应用户。 **增量 SQL(已有库执行):** ```sql INSERT INTO client_options (code, label, sort) SELECT 'slides', '幻灯片', 50 WHERE NOT EXISTS (SELECT 1 FROM client_options WHERE code = 'slides'); ```
    5. 后台

      • 账号私有 Markdown 幻灯片:表 `client_slide`(ownerClientUserId / title / markdown / updatedAt),无公开 URL、无 buildStatus。
      • `/web/slides` CRUD:登录 + clientOptions 含 `slides`;缺 option 或跨账号 404;markdown UTF-8 上限 256KiB;标题从首个 `#` 抽取,空则「未命名」。
      • 列表只回 id/title/updatedAt,hasMore 由前端按本页是否满页判断。增量 SQL:`apps/server/scripts/migrations/20260907-client-slide.sql`。后台需加 client_options.code=`slides` 再勾到用户。
    6. 站点

      • 账号私有 Markdown 幻灯片:`/slides` 列表、`/slides/:id` 编辑预览、`/slides/:id/play` 放映;闸门抄知识库(无 token → login,无 `slides` → `/`)。
      • Header「文档」入口、recentPageLeaves、SEO_NOINDEX、legacy?tab=slides 302;图标 `easel-outline` 已在 SiteLayout 注册。
      • 预览/放映用 iframe srcdoc + 同源 `public/vendor/remark.min.js`(gnab/remark gh-pages commit `6e2325d23edbe48178000285dbd8bae6ae95ea21`,remark-latest.min.js / 0.14.1);sandbox=`allow-scripts allow-same-origin`,打断 `</textarea>`;编辑预览 debounce 300ms 拆旧 iframe 再建;放映对 iframe requestFullscreen。
    7. 站点

      • 最近常访:窄屏默认折叠;折叠态收成小胶囊,不挡主栏操作。
      • 折叠偏好桌面 / 移动端分键存储。
    8. 站点

      • `/gallery` 支持 Ctrl+V 粘贴图片:抽出剪贴板图后走同一套 `app-gallery-upload-queue`,打开待上传弹层。
      • 剪贴板没有图片时不拦截,避免挡掉输入框文本粘贴。
    9. 站点

      • 最近常访卡片圆角 12px;条目 hover 用 `--site-frost-soft`。
      • 标题可折叠,偏好存 `aphelios-site-recent-pages-collapsed`。
    10. 站点

      • 最近常访请求补 `Authorization`(不再只靠 cookie),避免已登录仍 401。
      • 先 `me()` 刷新 `clientOptions`;上报成功后立刻露出当前叶子,避免空列表把整块藏掉。
    11. 后台

      • 新增 client option `recent-pages`(最近常访)与表 `client_site_page_visits`(跟账号、path_hash 唯一)。
      • `GET/PUT /web/nav/recent`:二级菜单叶子归一后记账;近 14 天次数排序、UI 3 条、库内 trim 20;写口每 IP 30 次/分钟;非法 path 204。
      • 增量 SQL:`apps/server/scripts/migrations/20260907-client-site-page-visits.sql`。
    12. 站点

      • 左下固定「最近常访」:登录且 `recent-pages` 才渲染,最多 3 条 Header 二级叶子,空列表整块隐藏。
      • 同源 `/nav/recent.json` GET/PUT 代理 mono;`astro:page-load` 上报,同 path 2 分钟去重。
      • 有音乐条时上抬,避开右下机器人;昼夜走 `--site-*`。
    13. 站点

      • `_header-mobile.scss` 改到 `nav-drawer` 之后加载,避免基础 `display:none` 盖掉窄屏菜单按钮。
    14. 站点

      • 窄屏菜单改回 `menu-outline`,去掉没画出来的 CSS 三横。
    15. 后台

      • `POST /web/posts/:id/view` 单独限流:每 IP 40 次/分钟(不再跟列表 120、也不按 path 分桶)。
      • Redis SET NX:同 IP 同 id 6 小时只 +1;并发抢锁失败回当前计数,不连加。
      • +1 只清该条详情缓存,不 `clearScope(posts)`,避免打爆列表缓存。
    16. 站点

      • 动态浏览上报:失败不再写 session,避免 429/网络错误把本会话锁死。
    17. 站点

      • 窄屏顶栏收成 1.75rem 一行:logo / 搜索 / 菜单 / 头像同高,间距统一 8px。
      • 菜单改为发丝三横(不再用偏小的 ionicon),账号头像补一圈 frost,和 logo 对齐。
      • 窄屏顶栏样式拆到 `_header-mobile.scss`,避免 `_nav-drawer.scss` 超 500 行。
    18. 站点

      • 窄屏 logo、菜单图标、账号头像统一 2rem,去掉 logo 内边距,避免三颗大小不一致。
    19. 站点

      • 移动端账号头像改成正圆:identicon 底改为圆形,按钮去掉胶囊边框,clip-path 裁成圆。
    20. 后台

      • 新增 `POST /web/posts/:id/view`:已发布可见动态 +1 浏览并回 `{ viewCount }`,供信息流上报。
      • `GET /web/posts/:id` 仍会 +1,兼容旧详情调用。
    21. 站点

      • 动态信息流补浏览上报:同源 `POST /posts/view.json`,同会话每条只计一次。
      • 图文点开预览或开始播视频 +1;纯文字点「展开」+1,无需展开的短文在视口停留约 1s +1;遮罩未揭开不计。
      • 卡片上的浏览数在上报成功后即时刷新。
    22. 后台

      • Web 文章列表:带 categorySlug / tagSlug / keyword 时不再从 list 剔除置顶和专题文章,避免筛选结果被抽空。
      • 列表缓存键升级 articles:list:v4。
    23. 站点

      • 博客筛选时把接口返回的置顶文章并进列表,避免只命中置顶时首页被抽成空态。
    24. 站点

      • 文章详情阅读字体改为 HarmonyOS(`--site-font-reading` 对齐 sans),去掉屏上宋体过锐;展示标题仍用衬线。
      • AGENTS / README / DESIGN 同步说明。
    25. 站点

      • PC 分类 / 标签字色再压淡:默认半透明 meta,选中只用 muted,不再跳到主文字色。
    26. 站点

      • PC 博客分类 / 标签筛选去掉胶囊与实心选中,改成小号文字链,当前项仅下划线。
    27. 站点

      • 窄屏「动态」改为纯文字,挪到头像右侧,填左侧空档。
      • 搜索条吃满中间剩余宽度,右侧只留菜单和账号。
    28. 站点

      • 置顶 / 我的项目横向栏去掉海报左上角胶囊 label(区块标题已足够)。
      • 博客卡片去掉海报底描述与标题下 #tag;加载更多 HTML 同步。
      • 移动端 robot 引导气泡改为贴齐右下 FAB,展开面板仍拉满宽。
      • 窄屏顶栏缩短搜索,在菜单左侧放出「动态」入口(≤430px 仅图标);桌面搜索略收窄。
    1. 站点

      • 访问统计改为同源 /visits.json 代理打到 mono,避免局域网打开 Stereo 时 beacon 误打到不存在的同源 /api/v1/web/visits,以及跨域 sendBeacon 假成功。
      • 冷却仅在上报成功后写入;保留 text/plain sendBeacon 回退。
    2. 后台

      • POST /web/visits:bodyParser 启用 text;text/plain JSON 可解析,配合 Stereo beacon 回退。
    3. 站点

      • 修复访问 beacon:改为优先 fetch+CORS,成功后才写 10 分钟冷却;sendBeacon 仅作 text/plain 回退,避免跨域 JSON 假成功导致今日访问一直为 0。
    1. 站点

      • 动态发布去嵌套框:去掉正文区内框、密钥底部分隔线和缩略图实线,只留卡片外壳、「更换」按钮和「+」虚线槽。
      • 拉开密钥 / 正文 / 选图 / 底栏间距,正文区略增高;选图按栏宽自动换列,不再卡 5 列。
    2. 站点

      • 动态发布正文区:padding 挪到 editor-wrap,修复 placeholder 贴边(绝对定位不吃 editor padding)。
    3. 站点

      • 动态发布:私密改 checkbox,移到右侧与「发表」同组。
      • 固定高度正文区加 input border,overflow 裁切,避免文字叠到选图区。
    4. 站点

      • 动态发布框:正文区固定高度不随内容自增(内部滚动)。
      • 类型筛选改为弱化文字链(下划线激活),去掉填充胶囊。
      • 压缩「+」选图与发表行间距(工具栏上移到 sheet 下、收紧 gap)。
    5. 后台

      • 提醒:client.default_home_tab / client.home_article_pinned_display 代码已废弃;若 Admin 仍见「未定义元数据」,执行 scripts/migrations/20260905-drop-home-tab-pinned-display.sql 删除 configs 残留行。
    6. 站点

      • 动态页发布工具栏:私密开关、类型胶囊、「发表」收成一行;窄屏隐藏「私有可见」副文案,胶囊横向滑动。
      • 类型筛选与 compose 解耦,无发布权限时仍可见筛选条。
    7. 后台

      • 系统设置「保存全部 / 重置全部」:工具栏滚出视口后 Teleport 到顶栏 #admin-topbar-page-actions,便于长 Tab 内容时随时保存。
      • 抽出 SettingTabsSaveToolbar;BasicLayout 增加顶栏挂载点;README 同步。
    8. 站点

      • 文章详情阅读栏 --site-article-measure 改为 100%,与 .site-skin__main 同宽。
      • AGENTS.md / README 同步说明。
    9. 后台

      • 废弃并移除 `client.default_home_tab`、`client.home_article_pinned_display`(配置定义 / settings 下发 / Admin 分组;增量 SQL `scripts/migrations/20260905-drop-home-tab-pinned-display.sql`)。
      • Admin 客户端设置将 `client.robot_agent.*` 归入「机器人」分组,不再落入「其他」。
      • 机器人 chat 支持 `focusArticleId`:文章详情提问直接加载该公开文章语料;默认 system_prompt 补充「这篇文章讲了啥」指引。
    10. 站点

      • 博客/动态首页与 feed 加载更多改用 `settings.homeArticlePageSize` / `homePostPageSize`,不再写死 `SITE_*_PAGE_SIZE`。
      • 去掉 `defaultHomeTab` / `homeArticlePinnedDisplay` 消费;遗留 HomeCenterStage 置顶固定为 rank_list。
      • 机器人 chat 传 `focusArticleId`,文章详情「这篇文章讲了啥」直接锚定当前文。
    11. 后台

      • `optionalWebClientAuthMiddleware`:Bearer 过期/无效时改为按匿名继续,不再抛「未登录或登录已过期」(修复 Stereo 机器人带脏 token 时 chat/status 401)。
    12. 后台

      • Admin 日志「机器人」Tab 补清空:`POST /logs/robot/clear`、`POST /logs/purge` 支持 type=`robot`(清空 / 删 N 天前);卫生条计入机器人用量条数。
      • `LogsRobotPanel` 挂 `LogsPurgeActions`(需 `logs:delete`);README 同步。
    13. 站点

      • 机器人面板打开时接入 `lockDialogScroll`,并允许在 `[data-robot-stage]` 内滚动;stage 加 `overscroll-behavior: contain`,避免滚轮/触控穿透到背后页面。
      • 文章详情路径芯片 prepend「这篇文章讲了啥」;提问时自动附带文章标题与 `/articles/:id` 便于检索锚定。
    14. 站点

      • 修复从机器人引用软导航进文章后 code 块字号变大:去掉 `SiteArticleBody`/`ArticleDetailBody` 组件级 `prism-okaidia` 再注入(布局已挂),并提高 `pre`/`code` 选择器优先级压过 prism 的 `font-size: 1em`。
    15. 后台

      • Stereo 机器人固定走 AI 模型池 key:新增 `client.robot_agent.model_key`(默认 `deepseek-flash`),chat/改写均传 `modelKey`,不再用全局默认模型。
      • 增量 SQL `scripts/migrations/20260905-robot-agent-model-key.sql`;Web API 文档说明同步。
    16. 站点

      • 修复进页机器人引导不出现:去掉额度分支提前 return;首屏滚动误杀不再立刻记已看;改为 window scroll + 宽限期;storage 升 v2。
    17. 站点

      • 用户消息气泡去掉背景与边框,压缩高度。
      • 首次点开面板改为先弹出再后台刷 status,消除约 1s 等待。
    18. 站点

      • 机器人进页招手引导:脉冲环 + 挥手 + 轻提示气泡;滚动/点开即停,会话内只出现一次,不挡阅读。
      • Logo 用 mark 包边框内边距,并对偏左原图做 `object-position` 光学居中。
    19. 站点

      • 横向轨道 `touch-action` 从仅 `pan-x` 改为 `pan-x pan-y`,移动端在置顶/项目等左右滑区域可正常上下滚页面。
    20. 站点

      • 修复访问统计:`SiteLayout` 补挂 `mountWebVisitBeacon`(此前只在遗留 BaseLayout)。
      • 移动端隐藏博客分类/标签两行(`.site-hero`)。
      • Logo 加 frost 边框与内边距;移动顶栏精简为 logo+矮搜索+菜单+账号,主题切换移入抽屉。
    1. 站点

      • 机器人气泡/标题/芯片/输入字号整体下调(气泡约 0.78rem),内边距略收。
    2. 站点

      • 移动端改回侧边 gutter,弹层高度约 68dvh;panel/stage/bubble 防横向溢出。
      • 参考链接弱化为静音纯文字 `[n] 标题`,去掉卡片边框与箭头。
    3. 站点

      • 移动端机器人:展开改为近全宽底部弹层(dvh + safe-area),藏 FAB 防裁切;键盘/音乐避让仍生效。
      • 参考来源改为序号块 + 文章/动态标签 + 标题 + 箭头行;正文 `[n]` 改为小徽标。
    1. 站点

      • 等待态在气泡上方显示「正在检索/整理」文案 + 点阵轻摆动画;引用等正文出字后再挂底部,避免只有分割线空顶。
    2. 站点

      • 修复回答叠字:正文按行拆成块级 `.site-robot__line`,避免行盒塌陷。
      • 引用链接改挂在助手气泡底部,去掉会盖住正文的独立 citations 层。
    3. 站点

      • 机器人弹层打开增加自右下升起缩放动画。
      • 预提示芯片改为纵向一行一个;打开时错落「柳枝斜飘」入场动画。
    4. 站点

      • 机器人弹层改为固定较高高度(约 78vh),对话区纵向 flex 滚动;用户/助手/系统气泡分层。
      • 去掉「只检索…」「不限流」等文案;额度/错误改为气泡提示。
      • 精致化:隐藏芯片滚动条、一体圆角输入条、更轻边框与间距。
    5. 站点

      • 修复机器人面板关不掉:`.site-robot__panel { display:flex }` 盖掉 UA `[hidden]`,补 `[hidden]{display:none!important}`(根节点同理)。
      • 回答气泡行高/折行修正(`pre-line` + `line-height:1.7`),芯片滚动条变细,避免文字叠行与粗滚动条。
      • 默认仍为 FAB 收起;点 X / FAB 可收起。
    6. 站点

      • 修复机器人 `Failed to fetch`:去掉 `credentials: include`(与 `webApiRequest` 一致)。本地 3102→3101 跨域时 mono CORS 为 `Allow-Credentials: false`,include 会被浏览器直接拦。
      • 错误文案不再误报「3101 没起来」。
    7. 站点

      • 机器人发送按钮改为速记同款纸飞机 SVG;新对话刷新改为站点 `SiteRefreshIcon`(与热榜/曲库一致)。
      • 默认预提示芯片 HTML 种子 + 挂载即渲染;soft-nav 不再误清;网络失败中文提示(mono :3101)。
      • 思考/说话动画加大幅度(甩臂、摇头、口型、脉冲)。
    8. 后台

      • 机器人 Phase 2:Meili `robot_public_corpus` 索引与 article/post 增量同步、失败回退 LIKE;`POST /web/robot/corpus/rebuild`。
      • 用量日志 `robot_usage_logs` + Admin 日志「机器人」Tab(`GET /logs/robot`);多轮 chat body + 追问 rewrite;场景芯片 configs。
      • 增量 SQL `scripts/migrations/20260904-robot-agent-phase2.sql`;README / Web API 文档同步。
    9. 站点

      • 机器人 Phase 2:多轮 transcript +「新对话」、路径场景芯片、文章 prose 注入 `#robot-p-n` 锚点。
      • SSE 请求携带 conversationId / history;引用链对齐段落锚点。
      • README 同步公开内容助手 Phase 2 能力说明。
    10. 后台

      • 补增量 SQL `scripts/migrations/20260904-robot-agent.sql`:种子 `client.robot_agent.*` configs(ON DUPLICATE KEY 不覆盖已有值)+ `client_options.robot-agent`。
      • README 机器人条目同步挂上该 SQL 路径。
    11. 站点

      • 删除 `public/robot/` 与 Flaticon/Lottie 相关说明;设计/计划文档改为内联 SVG + CSS。
    12. 站点

      • 机器人 FAB 改用结构化 SVG(天线/身/臂/眼/口),currentColor 跟昼夜主题。
      • 思考中:天线摆、眨眼、手臂微动、右上思考点;吐字中:口型开合 + 身体轻振。
    13. 后台

      • 新增机器人助手:`client.robot_agent.*` 设置、`GET /web/robot/status`、`POST /web/robot/chat`(SSE)、device cookie + IP 双键限流、`robot-agent` 选项不限流。
      • 公开语料检索(文章正文 + visibility=public 动态,排除敏感文);`AiComposerService.streamChat` DeepSeek token 流。
      • Admin Web API 文档登记 robot 端点组。
    14. 站点

      • 新增右下角公开内容助手(SiteRobotFloat):芯片预提示、思考/说话 CSS 状态动画、SSE 流式出字;只发现公开文章/动态。
      • 对接 mono `/web/robot/status` 与 `/web/robot/chat`;设置字段 `robotAgent*`;配额文案与双主题/移动端/音乐条避让。
      • 设计与计划:`docs/superpowers/specs/2026-09-04-robot-agent-design.md`、`docs/superpowers/plans/2026-09-04-robot-agent.md`。
    15. 站点

      • 页面站点名改为 `Oolaf`:`SITE_NAME` 默认与 `.env` / ecosystem 同步(浏览器 title 形如 `Oolaf | Blog`)。
      • 敏感文章 / 敏感动态 spoiler 加 `16px` 圆角;动态敏感卡补边框与内边距以便圆角可见。
    16. 站点

      • 移动端导航抽屉宫格改一行 3 个;菜单区超出可上下滚动(`overflow-y: auto`)。
    17. 站点

      • 修 `/profile` 移动端撑破:`.site-skin__main` / profile / rail 链补 `min-width:0`,避免 flex/grid 子项把容器撑出视口。
      • 技能胶囊改为横向可滑轨(nowrap + overflow-x);作品卡窄屏固定可视宽度可左右滑;箴言强制换行(`overflow-wrap`)。
      • 窄屏隐藏作品区左右箭头,改为手指滑动;rail track 补 touch pan-x。
    18. 站点

      • 全局去掉移动端图标/按钮蓝色 tap 高亮:`html.site-skin` 及 a/button/ion-icon/svg `-webkit-tap-highlight-color: transparent`;icon 点中穿透到按钮。
      • 移动端「更多」恢复右侧抽屉(非全宽):`min(20rem, 100% - 3.25rem)` + 左侧圆角;打开 slide-in / 关闭 slide-out(280ms),遮罩同步淡入淡出。
    19. 站点

      • 博客首页去掉「Blog」标题(移动端与桌面一致)。
      • 分类/标签行强制单行:`nowrap` + chip 弹性宽度 + `ellipsis`;「全部」与当前选中、入口链不压缩。
    20. 站点

      • 修移动端导航抽屉可滚动:抽屉挂到 `body`(避开 sticky header 的 fixed 包含块);去掉应用区 `flex:1` 空白撑开;面板 `overflow:hidden` + 锁 html/body 滚动。
    21. 站点

      • 博客首页移动端分类/标签:只保留「全部」+ 3 项(当前选中始终可见),「全部分类/标签」入口保留。
    22. 站点

      • 修速记等页移动端顶栏:搜索 `type=search` 去掉 WebKit 装饰重叠;动作区高度对齐;窄屏 grid 改为 brand + actions。
      • `/profile` 补 720/560 窄屏:标题、统计换行、项目卡/rail、chip 间距。
      • 移动端导航抽屉改全高一屏宫格(页面/应用/外链);z-index 高于音乐浮条;宫格图标已注册。
    23. 站点

      • 影视片库首页同结构视觉加重(方案 C):标题更大、续看卡更厚、搜索主 CTA、空态 frost 径向氛围;昼夜仍走 `--site-*`。
      • 设计说明:`docs/superpowers/specs/2026-09-04-tv-library-visual-weight-design.md`。
    24. 站点

      • 站点移动端兼容(一次性):≤768 顶栏隐藏横排导航,汉堡 + 右侧抽屉(博客/动态/反馈/关于/权限分组/外链);`menu-outline` 已注册。
      • 壳层:`overflow-x: clip`、header/main safe-area、触控命中加大、搜索防 iOS 缩放;抽屉样式拆 `_nav-drawer.scss`,下拉拆 `_nav-menu.scss`。
      • 列表/工具:动态 meta 可换行;图床触控常显操作;速记高度对齐 `--site-header-h`;影视 Tab/搜索竖排与触控;曲库 ≤430 两列;敏感胶囊窄屏可折行。
    25. 站点

      • 白天敏感提示可读性:胶囊改为白底黑字;噪点 `mix-blend` 只作用在 `::after`,避免把提示文字一起压暗。
    26. 站点

      • 顶栏「关于」旁外链:在硬编码 GitHub 后增加小红书链接(同 `site-header__link--external` + `open-outline`)。
    27. 站点

      • 恢复敏感卡雪花:新增 `_spoiler.scss`(双层噪点);白天主题改暗色噪点 + `multiply`,避免白噪 + soft-light 在浅底上不可见。
      • 博客贯通 `isSensitive`:`SiteHomeArticleView` / `toSiteArticleView` → `SiteBlogCard` + load-more;`article-spoiler` 支持 `.site-card`。
    28. 站点

      • 修 ClientRouter 软导航后顶栏 nav hover 失效:软跳会用 SSR Vite style 盖掉当前 `site-skin`,旧弱选择器 `.site-header__link:hover` 被 `html.site-skin a.site-header__link` 压过。
      • `SiteLayout` head 钉 `style is:inline` 强选择器 hover(跨页一致可持久);`_header.scss` 基色改为 `html.site-skin .site-header__link`,去掉多余 `a/button` 并列以免再抬高基色优先级。
    29. 站点

      • 图床单张图片加载完成:`lazy-image--loaded` 触发 `site-gallery-slide-fade-in-bottom`(自下淡入上移);`prefers-reduced-motion` 时退回纯透明度过渡。
    30. 站点

      • 修复顶栏导航 hover/当前页颜色不生效:`html.site-skin a/button.site-header__link` 选择器优先级高于裸 `.site-header__link:hover`,现补齐同级 specificity,hover 与 `aria-current` 使用 `--site-fg-bright`。
    31. 站点

      • 统一错误态铺到全站:文章详情、传文件/蓝奏/音乐、速记主失败、直播/播放器、翻译/去AI/反馈、登录注册、评论加载、发帖失败等接入 `SiteErrorState` / `SiteErrorBlock` / `buildSiteErrorStateHtml`。
      • 弹窗类接口错误(弹幕匹配、片头片尾、彩云 Token)同步为同一套上图标、下固定宽换行描述。
    32. 站点

      • 全站滚动条:新增 `_mixins.scss`(`site-scrollbar` / `site-scrollbar-none`)与 `--site-scrollbar-thumb*` token;`html.site-skin *` 全局细条胶囊滑块。
      • 特例隐藏:登录/注册面板、FeedTabs 加 `site-scrollbar-none`;去掉各组件重复手写滚动条样式。
      • 设计说明:`docs/superpowers/specs/2026-09-04-site-scrollbar-design.md`。
    33. 站点

      • 全站滚动条:新增 `_mixins.scss`(`site-scrollbar` / `site-scrollbar-none`)与 `--site-scrollbar-thumb*` token;`html.site-skin *` 全局细条胶囊滑块。
      • 特例隐藏:登录/注册面板、FeedTabs 加 `site-scrollbar-none`;去掉各组件重复手写滚动条样式。
      • 设计说明:`docs/superpowers/specs/2026-09-04-site-scrollbar-design.md`。
    34. 站点

      • 接口报错统一为同一套错误块:`SiteErrorBlock`(Vue)/`buildSiteErrorStateHtml`(命令式)+ `site-error--inline`。
      • 影视续看/片库/播放/豆瓣、热点、小红书、速记索引、相册/记事本/书签等 API 失败态改为上图标、下固定宽换行描述。
    35. 站点

      • 接口报错统一为同一套错误块:`SiteErrorBlock`(Vue)/`buildSiteErrorStateHtml`(命令式)+ `site-error--inline`。
      • 影视续看/片库/播放/豆瓣、热点、小红书、速记索引、相册/记事本/书签等 API 失败态改为上图标、下固定宽换行描述。
    36. 站点

      • 新增 `SiteErrorState`:页面级错误水平垂直居中,上 `alert-circle-outline`,下描述固定宽 `20rem` 自动换行。
      • 知识库列表/详情错误态改用该组件;去掉左对齐的 `__error` 纯文案。
    37. 站点

      • 新增 `SiteErrorState`:页面级错误水平垂直居中,上 `alert-circle-outline`,下描述固定宽 `20rem` 自动换行。
      • 知识库列表/详情错误态改用该组件;去掉左对齐的 `__error` 纯文案。
    38. 站点

      • 速记 / 评论发送图标:由 `send-outline` 改为纸飞机 SVG(`stroke=currentColor`),昼夜跟随按钮字色。
    39. 站点

      • 速记 / 评论发送图标:由 `send-outline` 改为纸飞机 SVG(`stroke=currentColor`),昼夜跟随按钮字色。
    40. 站点

      • 速记发送按钮:island composer 里 disabled 写死白半透明,白天不可见;改为 `--site-fg-meta` / `--site-frost-soft`,与 `_dump.scss` 一致。
    41. 站点

      • 速记发送按钮:island composer 里 disabled 写死白半透明,白天不可见;改为 `--site-fg-meta` / `--site-frost-soft`,与 `_dump.scss` 一致。
    42. 站点

      • 顶栏「关于」后增加 GitHub 外链(硬编码 `https://github.com/dirkhe1051931999`),新窗口打开;旁挂 `open-outline` 外链图标。
    43. 站点

      • 顶栏「关于」后增加 GitHub 外链(硬编码 `https://github.com/dirkhe1051931999`),新窗口打开;旁挂 `open-outline` 外链图标。
    44. 站点

      • 扫尾:humanize / 登录邮箱框 / cookie 对话框 / 邀请码 / 发帖 key 框 / Dump `--dump-field` 等残留灰底改为透明。
      • `_base.scss` 外壳列表补 `post-client-key-dialog`、`site-auth__email-box`。
    45. 站点

      • 全站输入框统一无背景:`--site-input-bg` / focus 昼夜均 `transparent`;`_base.scss` 对 input/textarea/select/composer 外壳强制透明。
      • 反馈/评论/Dump/翻译/热点/发帖等字段去掉灰井底,只留发丝边(对齐反馈页样式)。
    46. 站点

      • 顶栏品牌:左上角 `/brand/oolaf-avatar.png` 圆形头像 + 「Oolaf」;头像与字间距 8px,导航左侧留 8px。
    47. 站点

      • 顶栏品牌:左上角 `/brand/oolaf-avatar.png` 圆形头像 + 「Oolaf」;头像与字间距 8px,导航左侧留 8px。
    48. 站点

      • 白天输入框:新增 `--site-input-bg` / `--site-input-bg-focus`(light 透明);全局 input/textarea/select 走 token。
      • 提亮 light:`frost-soft`、`surface-muted/soft`、surface-hover;TV/音乐/Dump/翻译/反馈/热点/评论/登录等字段改用 input-bg。
      • AGENTS / 主题 design 同步输入底色约定。
    49. 站点

      • 白天输入框:新增 `--site-input-bg` / `--site-input-bg-focus`(light 透明);全局 input/textarea/select 走 token。
      • 提亮 light:`frost-soft`、`surface-muted/soft`、surface-hover;TV/音乐/Dump/翻译/反馈/热点/评论/登录等字段改用 input-bg。
      • AGENTS / 主题 design 同步输入底色约定。
    50. 站点

      • 文章详情阅读栏 `--site-article-measure`:52rem → 60rem,减轻两侧留白。
    51. 站点

      • 顶栏登录态账号旁补回头像:`avatarSeed` identicon(临时账号 Google 标);`me()` 后再同步一次。
      • identicon 改 `currentColor`,昼夜都能画出来;避免空种子整块空白。
    52. 站点

      • 顶栏登录态账号旁补回头像:`avatarSeed` identicon(临时账号 Google 标);`me()` 后再同步一次。
      • identicon 改 `currentColor`,昼夜都能画出来;避免空种子整块空白。
    53. 站点

      • 白天顶栏搜索:背景改为透明,只保留发丝边框,去掉偏灰 frost-soft 底。
      • 白天 `--site-accent-hover`(含登录按钮 hover)由 `#333` 调至 `#555`,CTA hover 更轻。
    54. 后台

      • Admin 多处 MySQL/Prisma 时间戳展示统一改用 `@/utils/format-date-time` 的 `formatDateTime`,避免 `toLocaleString()` 对 ISO `Z` 二次套时区。
      • 覆盖帖子/简历/媒体/评论/反馈/账号/通知/知识相似/仪表盘发布抽屉/日志展示/定时任务/TV HLS 白名单等 19 个文件;真 UTC 源(Music S3、WebApi health、Knowledge 本地草稿)未改。
    55. 站点

      • Admin 多处 MySQL/Prisma 时间戳展示统一改用 `@/utils/format-date-time` 的 `formatDateTime`,避免 `toLocaleString()` 对 ISO `Z` 二次套时区。
      • 覆盖帖子/简历/媒体/评论/反馈/账号/通知/知识相似/仪表盘发布抽屉/日志展示/定时任务/TV HLS 白名单等 19 个文件;真 UTC 源(Music S3、WebApi health、Knowledge 本地草稿)未改。
    56. 站点

      • 文章详情编辑部阅读排版:加载 Noto Serif SC;`--site-font-reading`;masthead/prose 约 42rem 居中;标题/正文衬线,标签/返回/按钮仍 HarmonyOS。
      • 正文图限高 `min(70vh, 720px)` 等比居中,小图不强行全宽;预览原图保留。
      • AGENTS 增补昼夜双主题硬约束(1b)及阅读栏/正文图约定;样式拆为 `_article.scss` / `_article-code.scss` / `_article-chrome.scss`。
      • 设计说明:`docs/superpowers/specs/2026-09-04-article-detail-reading-design.md`。
    57. 站点

      • 顶栏主题切换(及同款 icon-btn):去掉 frost 圆底与边框,仅保留透明 icon;actions gap 收紧,icon 左右留 2px。
      • 登录/注册页主题按钮同步去掉玻璃底色。
      • SiteLayout 挂载 route-progress;site 皮肤补顶部 2px 进度条样式(`--site-accent`),软导航切换可见。
    58. 后台

      • 客户端用户「最近登录 / 临时到期」改用共用 `formatDateTime`,按 MySQL DATETIME 墙钟展示,避免把 Prisma 的 UTC `Z` 再按浏览器时区偏移一次。
      • 列表与详情面板一并修正。
    59. 站点

      • 客户端用户「最近登录 / 临时到期」改用共用 `formatDateTime`,按 MySQL DATETIME 墙钟展示,避免把 Prisma 的 UTC `Z` 再按浏览器时区偏移一次。
      • 列表与详情面板一并修正。
    60. 站点

      • 博客/动态/详情日期改为数字 M/D/YYYY(如 7/11/2026),不再用英文月份。
    61. 后台

      • 客户端用户列表「客户端选项」改为溢出展示:新建 `ClientOptionTagsCell`,默认露前 2 个 tag,多余用可点 `+N` Popover 看全部,避免选项多时撑高行。
      • `ClientUserListPanel` 接入该组件,列宽 220→260。
    62. 站点

      • 客户端用户列表「客户端选项」改为溢出展示:新建 `ClientOptionTagsCell`,默认露前 2 个 tag,多余用可点 `+N` Popover 看全部,避免选项多时撑高行。
      • `ClientUserListPanel` 接入该组件,列宽 220→260。
    63. 站点

      • 文章详情代码块:白天底 `#e2e4e8` / 行内 `#dedede`,与白页拉开对比;字号 `0.75rem`;评论提交改 accent/on-accent,disabled 用 `color-mix(fg-bright)`。
      • 「分享海报」触发与 dialog「复制链接」「保存图片」均改 primary(`--site-accent` / `--site-on-accent`);dialog 面板走 glass-panel/frost。
      • Toast(`AppMessageBanner` + site `_base`):底/字/计时环改 site token,昼夜可读。
      • Blog 标签「全部」选中胶囊:提高 `html.site-skin a.site-hero__tag--active` 优先级,强制 `--site-on-accent`,避免 `a { color: inherit }` 导致黑底黑字/白底白字;分类选中同步。
    1. 站点

      • 热力图白天边框:activity 面板改 `--site-frost-strong`;格子边用 `--site-frost`(非 soft),空格/分级 `color-mix(fg-bright)` 提高对比;light frost token 略抬(0.06/0.12/0.2)。
      • 「完整热力图」与首页 hero index:hover border 改 `--site-frost-strong`(昼夜可见,禁半透明白)。
      • Client Key dialog 软导航丢样式:抽出 `app-dialog.scss` 挂 SiteLayout/BaseLayout;dialog 面板自带 glass-panel/frost;mount 校验 `isConnected` 防 stale controller。
    2. 站点

      • 分类/标签索引胶囊白天丢失:`_taxonomy.scss` 半透明白底改为 `color-mix(fg-bright)` + `--site-frost` 边,hover 用 frost-strong / glass-hover,选中/focus 用 accent;`/tags` 同步胶囊外形。
    3. 站点

      • Blog 首页分类胶囊 `.site-hero__filter`:去掉半透明白底/transparent 边,改用 `--site-frost` / `--site-frost-soft` / `--site-glass-hover`,白天 hover 可见外形。
      • 选中态改 `--site-accent` + `--site-on-accent`(hover `--site-accent-hover`);标签行 `.site-hero__tag` 同步胶囊 hover/选中 token。
    1. 站点

      • 文章详情代码块复制按钮:`SiteArticleBody` 挂载类名从遗留 `new-article-code-*` 改为 `site-article-code-*`,与 `_article.scss` 的 `position: relative` 容器对齐,按钮回到代码块右上角(昼夜均生效)。
    2. 站点

      • 热力图白天边框/空格太浅:activity 面板改 `--site-frost`;格子空底/分级改 `color-mix(fg-bright)` + frost 边,去掉半透明白。
      • 「完整热力图」与首页 hero index:hover 加 frost/input-border-focus 边;下划线改 `--site-frost-strong`(含 empty link hover)。
      • Client Key dialog 软导航丢样式:挂入 SiteLayout(组件+scss),posts 页去重;软切翻译再开 dialog 仍有 site token。
    3. 站点

      • 蓝奏白天:拖放区虚线边/底色从半透明白改为 `--site-input-border` + `--site-surface-hover`(hover frost-strong / glass-hover)。
      • 文件夹卡片底改 `--color-surface-muted`;进度条、密码角标、ghost hover/CTA 同步主题 token。
    4. 站点

      • 关于我项目详情 dialog:面板背景 `#050505` 改 `--site-glass-panel`,关闭 hover / 滚动条跟主题 token,白天可读。
    5. 站点

      • 书签三点菜单「删除」项 hover:半透明白改 `--site-glass-hover`,白天白底可见;蓝奏菜单此前已用同 token。
    6. 站点

      • 传文件进度条轨道:半透明白改 `color-mix(fg-bright 14%)`,白天可见;填充仍用 `--site-accent`。
    7. 站点

      • 直播电视框 OOLAF / 屏内 ticker、OSD:不再跟白天深色 token,固定浅色(外框与屏幕始终深色)。
    8. 站点

      • 专辑曲目列表 hover/active:半透明白改 `--site-glass-hover` / `color-mix`,昼夜可见;当前曲左侧 accent 条 + 加粗标题。
      • 正在播放文案:右侧 hint 显示「播放中」/「当前」;序号改 `--site-fg-meta`(原 `--site-fg-faint` 未定义)。
    9. 站点

      • 反馈「提交反馈」白天 hover:`#e8e8e8` 改 `--site-accent-hover`,避免浅灰底白字。
    10. 站点

      • 热榜标签 chip 白天丢边框:去掉写死半透明白,改 `--site-frost-strong` + `color-mix` 前景色底。
      • 标签输入容器/删除 hover 同步主题 token(`hotlist-tag-input.scss` + `_hotlist.scss`)。
    11. 站点

      • 白天适配大扫:AppDialog/Confirm/Client Key、lanzou/bookmarks 菜单、音乐 float/封面/CTA hover、胶囊 tab hover/active、TV/Live/Humanize/Catbox/Knowledge/Dump/Vault 代码块。
      • light frost/surface 略降对比;`--site-glass-hover` 提到 10% 黑;切主题派发 `aphelios:theme-change` 重刷音乐封面。
    12. 站点

      • 动态发布:输入区(sheet / 列表页 compose 面板)hover 与 focus-within 用 `--site-input-border-focus` 高亮,昼夜共用。
      • 「更换」密钥钮与图标钮 hover 改 frost / glass-hover / fg token,修白天白字问题;发表 hover 改 `--site-accent-hover`。
      • 字数统计锚到输入区右下角(`editor-wrap` absolute)。
    13. 站点

      • 白天适配批量修复:AppDialog/Confirm/Client Key、lanzou/bookmarks/redbook 菜单改为 glass-panel token。
      • 音乐 float/封面/播放 CTA hover;胶囊 tab hover/active;TV/Live/Humanize/Catbox/Knowledge/Dump/文章与 vault 代码块浅色面板。
      • 放轻 light frost/surface;header 搜索/图标/菜单 hover 去掉白 wash。
    14. 站点

      • 浅色 frost/surface token 略降对比:`--site-frost*` 与 `--color-surface*` 更柔和。
      • 胶囊/Tab(posts kinds、gallery、tv-library)idle/hover/active 统一 frost + glass-hover;选中态 `--site-accent` / hover `--site-accent-hover`。
      • Catbox 拖放区、Knowledge 标签/字段/pre、文章 prose light 代码面板、Humanize wait、Live remote/toast、Dump bubble/索引卡/drop-mask 去白洗与硬编码,改 site token。
    15. 站点

      • 登录/注册白天模式:暗色 `background-auth.jpg` 加白罩 + 提亮,避免深字压在黑图上。
      • 输入框/占位/链接下划线/禁用按钮/CTA hover 改为主题 token(`color-mix` + `--site-accent-hover`),login/signup 共用。
    16. 站点

      • 音乐浅色模式:`_music.scss` 实心 CTA hover 改 `--site-accent-hover`;float 用 `--site-glass-panel` / `--site-frost`;进度条与未定义 `--site-border` 对齐 token。
      • `cover.ts` 增加 light 粉彩调色板,按 `data-theme` 选色并写入 `--music-cover-ink`;浅色渐变末端改为黑 8%。
      • `applyTheme` 派发 `aphelios:theme-change`;曲库/浮条/专辑/正在播放监听后重刷封面。
    17. 站点

      • AppDialog / AppConfirmDialog / 客户端密钥弹窗:面板、文案、关闭 hover、CTA/ghost 改为 `--site-glass-panel` / `--site-fg*` / `--site-accent*` / `--site-glass-hover`。
      • 蓝奏菜单、书签菜单、小红书 lightbox 面板 `#141414` → `--site-glass-panel`;蓝奏菜单项 hover → `--site-glass-hover`。
      • 相册上传/激活 pill 实心 hover 用 `--site-accent-hover`(避免 glass-hover 半透明糊字)。
    18. 站点

      • 音乐浅色模式:`_music.scss` 实心 CTA hover 改 `--site-accent-hover`;浮条用 `--site-glass-panel` / frost;进度条与未定义 `--site-border` 改 token。
      • `cover.ts` 增加浅色柔和调色板,按 `data-theme` 选 ink(浅 `#111` / 深 `#fff`)与渐变终点。
      • `applyTheme` 派发 `aphelios:theme-change`;曲库/浮条/专辑/正在播放监听后重刷封面。
    19. 站点

      • 博客首页垂直间距收紧:Hero 顶距 `space-10`→`space-6`(移动端 `space-4`)。
      • 区块间距 `72px`→`40px`(移动端 `32px`);标题与卡片间距 `28/24px`→`14px`。
    20. 站点

      • 修主题软导航丢失:`astro:after-swap` 重读 localStorage 写回 `data-theme`;SiteLayout 统一 mount 主题钮。
      • 博客封面胶囊字色固定白;文章正文 `#e8e8e8` 改 `--site-fg`;关于我赞助码图 132→200px。
      • 登录/注册页右上角补主题切换;遗留 `lib/theme/site-theme` 对齐同一 storage 键与默认 dark。
    21. 站点

      • Site 全站黑夜/白天主题:`data-theme` + 双套 token;默认 dark;`localStorage` 键 `aphelios-site-theme`;Header 太阳/月亮切换;SiteLayout 内联防闪。
      • 新增 `src/lib/site/theme.ts`;`_tokens.scss` light 对偶与 `--site-accent-hover` / glass-panel 等;主路径与工具页/重岛硬编码色改 token。
      • 同步 DESIGN / AGENTS / README 与 `docs/superpowers/specs/2026-09-03-site-theme-design.md`。
    22. 站点

      • TV / Live / 分享海报 / 邀请码 / 相册 / 发帖 / 评论 / 轮播等深色面板硬编码色改为 `--color-surface*` / `--site-fg*` / `--site-accent*` 主题变量,便于浅色/深色切换。
      • 跳过播放器纯黑 `#000`;分享海报画布暖色未动。
    23. 站点

      • 删除无用 `src/components/app`(`ThreeColumnLayout`、`layout-right`);清掉各旧 panel / `home-tab-panels` 对右栏的挂载。
      • AGENTS 注明三栏壳已删。
    24. 站点

      • 文档与样式注释去掉外部品牌参照表述,统一改为 void 黑底、发丝线等站内中性描述(DESIGN、README、AGENTS、LOGS、`_tokens.scss`、`_base.scss`)。
    25. 站点

      • 知识库去掉二级标题「知识笔记」;列表区用 `site-grid-section--flush` 取消默认 72px 顶距,标题到卡片间距收紧。
      • 相册标题到标签 pills 的 gap 同步略收。
    26. 站点

      • 速记「索引」移入 SiteHeader(搜索旁圆形 albums 钮);页内头栏仅保留「选择」。
      • 通过 `site-dump-index` 事件开关索引视图,与 Header 搜索同一桥接方式。
    27. 站点

      • 删除 `temp/legacy-shell/`;下线动态详情与统一搜索页:`/posts/:id`、`/search` 仅保留兼容 302。
      • 解链所有详情/旧搜索入口(PostCard、置顶、标签/分类轨、sitemap 等);标签/分类改为 `/?tag=` / `/?category=`。
      • 删除无用 `components/search/*`、`modules/search`、`PostDetail*`、`PostDiscoveryRail`;同步 README / DESIGN / AGENTS。
    28. 站点

      • 去掉各工具/内容页标题下的装饰性 site desc(知识库、音乐、书签、相册、传文件、蓝奏、私密记事本、影视、直播、动态、关于、发布、分类/标签、首页专题轨等),只保留页面名。
    29. 站点

      • 修软导航进 `/dump` 颜色回 legacy:ClientRouter 后注入 `dump-app.scss` 盖掉 site 变量;site 皮肤改为 `.site-dump .dump-app`(更高优先级)锁 token/发送钮,不依赖热刷顺序。
    30. 站点

      • 设计系统去 Discord:_colors.scss / _theme.scss / _elevation.scss 改为 void 黑 + 白 CTA + frost;去掉 $discord-* / blurple / 深靛。
      • site _tokens 补齐 --color-band/cta/link/surface-raised 桥接;site-theme dark theme-color 改为 #000000。
      • 业务与旧壳硬编码紫/靛(dump/redbook/humanize/hotlist/music/nav/home-tabs/content-feed/danmaku 等约 26 文件)统一换成白/灰表面;DESIGN.md Don't 同步。
    31. 站点

      • Header 导航「文档与笔记」改为「文档」,与博客/动态/工具/娱乐二字对齐。
      • 主导航取消水平居中:grid 改为 brand | nav(固宽) | actions(吃剩余),nav `flex-start` + 固定 `padding-left`;有无 search 切换不再闪移。
    32. 站点

      • `/dump` 锁死视口:html/body/page `overflow:hidden`,关掉 music float 给 main 的 padding,禁止整页上下滚(只滚时间线)。
      • 发送钮改为规范白底 CTA + `#111` 图标(可发);禁用 frost 弱底;`send-outline` 补进 SiteLayout 注册(之前白圆无图标)。
    33. 站点

      • 修软导航后速记预览丢样式:`photoswipe/style.css` + `image-preview.css` 挂到 SiteLayout(布局常驻);`/dump` 页级再钉一份。根因是 ClientRouter 卸掉页级/动态 style 后,模块缓存不再注入。
    34. 站点

      • 修 DumpApp hydrate `__VUE_HMR_RUNTIME__ is not defined`:SiteLayout DEV 兜底 runtime;`optimizeDeps` 预热 `vue`;清 Vite 缓存后硬刷。
    35. 站点

      • 去掉「按备注归档 / 按日期回顾」提示;索引关闭钮改为 frost 圆钮并对齐顶栏间距。
      • 归档 hover / 附件 / 编辑按钮 Discord 蓝改为 token;保存为白底实心 CTA,hover `#e8e8e8`。
      • 音乐 float 改抬到 Composer 上方(去掉粗 margin);发送钮禁用态 frost 弱底、可发白底,避免暗→突然白。
    36. 站点

      • 页脚压矮:内边距改为约 `0.65/0.85rem`,字号 `0.75rem`。
    37. 站点

      • 页脚只留备案「陕ICP备2025072462号-1」;Header/Footer 去掉「工具台」入口。
      • `/legacy` 改为纯 302 兼容跳转,不再渲染三栏壳;代码内 `/legacy?tab=*` 引用解链到 site 路径。
      • 同步 README / DESIGN / AGENTS。
    38. 站点

      • `/dump` 时间线禁横向滚动:气泡/正文 `overflow-wrap: anywhere`,列表 `overflow-x: hidden`。
      • 音乐 float 盖住 Composer:dump 锁高下改用 composer `margin-bottom` 给 float 让位。
    39. 站点

      • 速记 site 清 Discord 蓝/紫:附件条、编辑保存/取消、归档 hover、搜索结果全部改 frost/白 CTA。
      • 归档列表改为紧凑 frost 行卡(减行高间距);搜索挪到 SiteHeader(同博客胶囊),页内大白搜索条与「搜索」Tab 去掉。
    40. 站点

      • 站点「刷新」图标换成角回箭头 SVG(`SiteRefreshIcon`,stroke 用 currentColor);音乐 / 书签 / TV 豆瓣刷新已替换。
    41. 站点

      • 速记迁入 site:`/dump` 单栏时间线 + 底常驻 Composer;复用 Vue `DumpApp`/`lib/dump`,`variant="site"` 禁用右栏 Teleport。
      • Header「速记」→ `/dump`;legacy `tab=dump` 302;历史改「加载更早」按钮;autofocus + 页级粘贴文件 + 整页拖放。
      • `_dump.scss` site frost/白 CTA;`albums-outline` 注册;README/DESIGN 同步。
    42. 站点

      • 书签迁入 site:`/bookmarks` 经常访问 + 可折叠文件夹 frost 卡网格;复用 `lib/bookmarks` API。
      • Header `bookmarks` → `/bookmarks`;legacy `tab=bookmarks` 302;`SiteBookmarksApp` + `_bookmarks.scss`。
      • 点卡打开外链并 `visit`;删除收进 ⋯ + 确认框;文件夹展开态写入 sessionStorage。
    43. 站点

      • `/vault` 展开正文缩小字号与段落间距(约 14px),降低单条占高。
    44. 站点

      • `/vault` Prism 预热挪到 `SiteVaultApp.astro` 页面 script(对齐文章页);`highlight-code` 只调全局 Prism,消除 HMR 导致的 504 Outdated Optimize Dep。
    45. 站点

      • `/vault` Prism 改为静态 import 语言组件,避免点击展开时动态 import Vite deps 失败(Failed to fetch … prism-clike)。
    46. 站点

      • `/vault` 展开态卡片边框加深(约 28% 白),便于识别当前阅读项。
    47. 站点

      • `/vault` 滚动改为正文/高亮渲染完成后再量 top(含已缓存详情),避免异步撑高导致滚偏。
    48. 站点

      • `/vault` 展开笔记时自动滚到该卡顶部(`scroll-margin` 避开 sticky header),每条都像打开第一条。
    49. 站点

      • `/vault` `pageSize` 改为 50(接口上限,避免 999 报错)。
    50. 站点

      • `/vault` 列表改为一行一条;`pageSize` 改为 999。
      • 展开正文后用 Prism 高亮代码块(与文章同语言集),修 markdown 代码无高亮。
    51. 站点

      • 私密记事本迁入 site:`/vault` 标题卡网格 + 同页展开阅读(`site-article-prose`)+「加载更多」;复用 `lib/vault` API。
      • 抽出 `lib/vault/render-markdown.ts`;Header `vault` → `/vault`;legacy `tab=vault` 302。
      • 卡片仅标题;同时只展开一张;空态/未开通冷静说明;无新建入口。
    52. 站点

      • `/lanzou` 卡片去掉 grid 内 `min-height:100%`(行高塌缩叠卡),改为固定 `min-height` + `grid-auto-rows:auto`。
    53. 站点

      • 蓝奏迁入 site:`/lanzou` 网盘壳(面包屑 + 扁宽 Drop 带 + frost 四列目录卡);复用 `lib/lanzou` API。
      • Header `lanzou` → `/lanzou`;legacy `tab=lanzou` 302;`SiteLanzouApp` + `_lanzou.scss`。
      • 复制链接白底 CTA(含提取码);删除收进 ⋯「移入回收站」;空目录强调新建文件夹。
    54. 站点

      • `/catbox`「复制链接」白底 CTA hover 改为 `#e8e8e8`(对齐 hotlist 主按钮),不再用半透明 `--site-glass-hover` 导致字发灰难认。
    55. 站点

      • `/catbox` 历史改为博客同款「加载更多」按钮分页,去掉哨兵无限滚动;去掉「历史上传」标题。
      • AGENTS:站点列表(博客/知识库/传文件等)禁止无限滚动,须点击「加载更多」;相册方格墙除外需先确认。
    56. 站点

      • `/catbox` 上传成功后进度条复位隐藏,恢复「拖到此处」初始态,不再停在 100%。
    57. 站点

      • 传文件迁入 site:`/catbox` 大拖放区首屏 + 历史上传 frost 四列卡;复用 `lib/catbox` API。
      • Header `catbox` → `/catbox`;legacy `tab=catbox` 302;`SiteCatboxApp` + `_catbox.scss`。
      • 无限滚动按 `listPageHasMore`;空态文案「还没有文件」;复制/删除走 toast 与确认框。
    58. 站点

      • 预览改回旧版同款:页面静态挂 `ImagePreview`(禁止 dynamic import,修 Failed to fetch dynamically imported module)。
      • 列表点击不再拦截冒泡;补注册 sync/checkmark-circle/alert-circle 图标,消 Ionicons Invalid base URL 刷屏。
    59. 站点

      • 预览改为点击后动态加载动态页同款 `image-preview-photoswipe`;数据源收集无 PhotoSwipe 依赖,列表包可正常挂载。
      • `gallery.astro` 常驻 photoswipe + image-preview CSS;灯箱 `position:fixed` + 打开时锁 body 滚动,修黑块撑出滚动条。
      • 操作条 `pointer-events:none`,避免挡住点图预览。
    60. 站点

      • 修「预览组件加载失败」:去掉动态 import;列表派发 `site-gallery-preview` 事件,独立 script 加载 `site-gallery-preview`(复用已验证的 image-preview-photoswipe)。
    61. 站点

      • 确认冲突:列表脚本顶层静态 import PhotoSwipe 会导致宫格挂载失败(整页黑、无 pills)。
      • 列表与预览拆包——`site-gallery-app` 不再静态依赖预览;点击时再 `import()` PhotoSwipe;脚本未挂上 4s 后给出可见提示。
    62. 站点

      • 相册预览改为点击后直接 `new PhotoSwipe`(`lib/gallery/open-preview.ts`),失败 toast;不再走易静默失败的封装/双通道。
      • site 对 `.pswp__img` 仅放行 max-width/max-height(!important),避免灯箱黑屏。
    63. 站点

      • 修 `/gallery` 整页黑屏「加载中」:列表脚本不再顶层静态引入 PhotoSwipe;预览改为点击时动态 import。
      • 挂载后立刻渲染「全部」pill,标签与图片列表并行加载;满页判定改 `listPageHasMore`;删除按钮 `[hidden]` 补 `display:none!important`。
    64. 站点

      • 修图床预览黑屏/一直转:去掉 site 对 `.pswp__img` 的 `width/height:auto`(干扰灯箱尺寸);相册改为 fade 打开并强制宽高。
      • PhotoSwipe 加载失败文案改为「图片加载失败」。
    65. 站点

      • `/gallery` 预览改为条目点击直接 `openPhotoSwipeFromSources`(`lib/gallery/open-preview.ts`),用 `data-gallery-url`,不再依赖页面级 ImagePreview。
      • 日期 sticky 标题 `pointer-events: none`,避免挡住首行缩略图点击。
    66. 站点

      • Shared 公共件去 Discord 紫:AppMessageBanner / StatePanel / EmptyState / BackLink / BackToTop / ContentAttachment / ContentStats / share-poster / image-carousel。
      • 业务 dialog 统一 site 黑底 frost + 白底深字 CTA:invite / gallery upload&edit / client-key / Live cookie / translate token;顺带 compose / 评论 / 搜索面板。
      • 主按钮不再依赖 `--color-brand`(site 下为白,会导致白底白字)。
    67. 站点

      • 修 `/gallery` 点击不放大:ImagePreview 的 target/group 选择器去掉重复的 `[data-site-gallery]` 前缀,避免在日网格内 querySelectorAll 结果为空。
    68. 站点

      • 图床迁入 site:`/gallery` 日期分组等比方格墙(今天/昨天/年月日),标签横向 pills 对齐博客分类。
      • 选择/同步弱化为 ghost;上传白 CTA 小号;默认「全部」筛选;legacy `tab=gallery` 302 → `/gallery`。
      • 复用既有上传/编辑 dialog 与 PhotoSwipe;`SiteGalleryApp` + `_gallery.scss`;Header `cf` → `/gallery`。
    69. 站点

      • 赞助码图缩小为 132px;微信二维码弹层由 330px 收至 220px。
    70. 站点

      • 技能胶囊软跳转蓝紫、硬刷新黑白:去掉 ProfileShowcase 残留 Discord 紫样式;site `_profile` 用更高优先级 frost 胶囊盖住 ClientRouter 泄漏的旧规则。
    71. 站点

      • 知识库搜索并入 SiteHeader(scope=knowledge → /knowledge/search);列表页去掉内嵌搜索条。
      • 卡片去掉 conclusion 描述与标签,只留标题 + 环境 badge + 日期浏览,方便一眼认题。
      • 详情/搜索结果补标准 .site-back「全部笔记」返回(对齐文章详情)。
    72. 站点

      • 作品卡片「详情 / 预览」垂直对齐:button 与 a 统一 `inline-flex` + 同高行高,去掉 UA 盒差。
    73. 站点

      • 关于我分区标题统一:技能栈 / 作品 / 箴言 / 赞助都用 `site-section__title`(1.5rem),不再混用小号 kicker。
    74. 站点

      • 修 /knowledge 入口页 import 路径:pages/knowledge/index.astro 相对路径少一层,改为 \../../\。
    75. 站点

      • 知识库迁入 site:/knowledge 博客式四列卡片(首字占位 + conclusion 摘要)、顶栏搜索进 /knowledge/search,详情 /knowledge/[id] 保留题解分区。
      • knowledge-feed.json 支持 keyword;加载更多按满页判定;Header / legacy ab=knowledge 改链 /knowledge。
      • 样式走 site token(白 CTA / frost),对齐 blog 宫格节奏。
    76. 站点

      • 关于我「作品」改横向 card rail:对齐博客置顶,超出可横滑 + 左右快捷箭头;衬线大标题卡片。
      • `AppDialog` / 确认框 / 项目详情 / 微信码面板统一 site 黑底 frost,去掉 Discord 紫系。
      • 新增 `dialog-scroll-lock`:打开 dialog 锁 html/body 滚动,并拦截 mask 上的 wheel/touch 穿透。
    77. 站点

      • Humanize 等待条「分段改写」提亮:去掉 Discord 靛色 `#262c66`,ticker 文案走 site muted/fg,调度 chip 用 frost。
      • `/music` 隐藏 mini 后工具栏出现弱化「播放条」按钮(chevron-up),点击恢复显示;仍仅内存 dismiss。
    78. 站点

      • 关于我联系方式去掉突兀胶囊:改为无边框文字链(图标+文案,muted,hover 提亮)。
      • 修微信触发器垂直不齐:覆盖 `padding-top:0.6rem !important`,与 GitHub/小红书统一 `inline-flex` 居中。
    79. 站点

      • Mini float 补弱化上一首/下一首,与 hide 同款淡色图标钮。
      • 隐藏 float 只记内存 `dismissed`,不再写 sessionStorage;刷新后常驻恢复。
    80. 站点

      • Float 补弱化 hide(chevron-down)+ 顶部淡进度条;点击 hide 下滑淡出隐藏,进 `/music/now` 后可再出现。
      • Now 页播放/暂停对齐 float:父级 `site-music-now--playing` 切换,图标包在 span 里互斥显示(暂停→播放,播放→暂停)。
    81. 站点

      • SiteLayout 接入 ClientRouter(与 legacy BaseLayout 一致),站内 History 软跳转不再整页拆掉 Audio。
      • 音乐引擎 <audio data-site-music-engine> + float 条 ransition:persist;player 挂 window 单例,软跳后 syncAfterNavigation 续播。
      • float 进 Now Playing 改用 stro:transitions/client 的 navigate,避免 location.assign 硬刷新。
    82. 站点

      • `/music/now` 锁视口高度:去掉 footer,`site-skin__main--now` + 封面随 `dvh` 收缩,禁止页面滚动。
      • 播放/暂停互斥:`ion-icon` 的 `hidden` 无效;改为 `.is-playing` CSS 切换(同 float bar)。
      • 站点返回统一 `.site-back`(chevron + 文案),文章/音乐/影视/豆瓣/分类/动态二级页对齐博客详情;AGENTS 追加第 7 条硬规则。
    83. 站点

      • 影视搜索 / 音乐刷新旁白底实心胶囊改 frost 描边幽灵钮,对齐 header CTA,不再抢输入框。
      • `.tv-library__btn`、`.site-music__refresh`:透明底 + frost 边 + 10px 圆角(贴搜索框),hover 用 glass。
    84. 站点

      • 音乐迁入 site:/music 专辑封面网格(文件夹=专辑,程序生成封面)、/music/[albumId] 详情曲目表、/music/now 全屏正在播放。
      • SiteLayout 挂全局 float 迷你条(点进 Now Playing);复用 musicPlayer 内核,队列按当前专辑。
      • 顶栏娱乐→音乐改链 /music;样式走 site token(白 CTA / frost),不再用 legacy 紫壳。
    85. 后台

      • Admin `/setting` 增加「TV HLS 代理白名单」卡片:列表查看、手动新增、删除(种子可删,删后代码兜底仍放行)。
      • Admin API:`GET/POST /web/tv-hls-hosts`、`POST /web/tv-hls-hosts/delete`(`config:view` / `config:update`);增删后清 Redis 缓存。
      • README / Web API 说明同步。
    86. 站点

      • 主导航下拉 pop 收窄精致化:去掉 280px 固定宽,改为 `max-content`(min 140 / max 200)。
      • 半透明玻璃底 + blur,内边距/圆角收紧;入场改为轻上浮 `scale(0.98)`。
      • 条目 hover 提亮文字与图标,账号菜单 `--end` 略宽一点保留。
    87. 后台

      • `hls-proxy` 白名单改为可自学习:表 `web_tv_hls_allowed_host`(增量 SQL `scripts/migrations/20260903-web-tv-hls-allowed-host.sql`)存 apex;种子 `pipecdn.vip`/`dudupro.com`;代码兜底种子仍在。
      • 学习只在「已放行清单」改写分片 URI 时触发,入口 `?url=` 不学习;只插 apex(`sssN.x.com` → `x.com`),不会为每个子域刷库。
      • Redis:白名单缓存 60s;学习限流 10/分、60/时、200/日;总数帽 500;同 apex 进程内合并 + Redis NX 去重;hit 写库 5 分钟节流。
      • Admin Web API / README 同步说明;单测覆盖 apex 推导与匹配。
    88. 站点

      • 修主导航文字顶边不齐:纯文字 `<a>` 与带 ▾ 的 `<button>+caret` 盒高/视觉中心不一致。
      • `.site-header__link` 固定 `height: 20px`,并清掉 button UA 内边距;caret 改固定高槽位 + `::before` 画三角,不再挤偏文字。
      • `.site-header__menu` 改为 `inline-flex` 与链接同高对齐。
    89. 后台

      • 定位真实根因(与 site UI 无关):清单里的 `hssN.pipecdn.vip` 经本机 Clash TLS 失败;同 path/query 改写为 `sssN-e1.pipecdn.vip` 可 200 拉到分片。
      • `hls-proxy` 在校验与改写清单时统一做 `hssN → sssN-e1` 映射;去掉无效的 undici/直连优先回退。