[开发]SoSite 与 FlintHub 八月开发会话交接纪要

👑Lv.11 元老 🌞 骨干会员
2026-10-24 00:05:10

本文由 FlintHub 开发文档归档发布。原始文档日期见标题前缀,来源:内部文档归档。

SoSite 与 FlintHub 八月开发会话交接纪要

本篇由 17 篇会话交接/总结文档合并去重而成(2026-08-06 ~ 08-23)。原始文档是为"下一个 AI 会话"写的接手指令,重复度高;本篇按时间线归并,保留动作与结论。

说明:清单中 SoSite-会话工作交接-2026-08-08.md 实际不存在(已全盘查找确认);SoSite-会话交接说明-2026-08-09-收藏按钮排查.md 读取受限,其内容已由 08-10 交接文档完整总结并归并至 08-09 当日纪要。目录名实际为 8月13日备份(非"SoSite 期")。

一、时间线总览

日期阶段主题关键动作
08-06SoSite 收尾重构后清理与 CSS/JS 修复垃圾清理、正文标题字号、$el 缺失修复 12 处、灯箱补全、正文图片约束;下半场:CSS 按需加载(方案 A)、全项目 !important 四批清理 38 处、帖子数不一致 A+B 修复
08-07/08SoSite 加固install.php 实测 + 安全加固E2E 实测抓 4 个 bug(16/16 全绿)、configTemplate() 自动生成 config、移动端 UI 5 项、安全审计修复 7 文件、update/3 打包
08-09SoSite 排障收藏按钮排查根因:两个 .thread-info-bar 取错第一个;script.js 选择器修复、toggle 500 修复、删核心 script.js
08-10SoSite 功能邮箱验证 / 附件权限 / 移动端表格update/7(邮箱验证开关)、update/9(附件权限 /attachment/{id})、分页折叠、公告插件、后台首页卡片;P0 表格布局首轮定案
08-11SoSite 插件通知中心插件新增 vote_after/points_award_after/points_deduct_after 3 hook、审核积分暂扣、P0 表格布局最终修复、nginx/IIS 修复、update/11
08-12SoSite 插件勋章中心插件medal 插件 16 文件、全插件 init_after 查询归零、SVG 勋章 10 枚、详情页元信息行精简、update/12/13/14
08-15FlintHub 性能SplitDB 架构交接 + 0.11s 排查P16~P24 速览、PageCache 前置缓存、getOnlineData 30s 缓存;P25:统计永久化 99ms→2.14ms、keyset 深翻页 188ms→0.36ms、编辑生效修复、覆盖索引教训
08-16FlintHub 体验/控制台后台查询/分页统一/编辑器(P26)+ SplitDB 引擎控制台(P29~P33)后台用户查询与分类筛选、GFM 表格保真、表格溢出修复;引擎控制台 overview/settings 拆分、操作日志页、编辑器 P31~P33、version.php 单一版本源、update/1
08-17FlintHub 多语言多语言改造(P34)lang/zh.php+en.php 899 key、前台 28 视图 + 13 控制器抽取完成,中断于后台控制器
08-18FlintHub 收尾全盘审计 + 搜索优化 + 系统设置3 高/6 中/6 低全部修复、搜索 2.4s→31ms、重建断点续建、右侧栏统计与公告、admin_verify_timeout 动态化、系统设置页、update/10~16
08-23FlintHub 前台美化封面生成器 + 下拉/抽屉CoverTemplate 6 套 SVG 模板、PC 用户下拉、移动端抽屉调整、下拉样式抽离公共类、CSS 审计清理、update/35~39

二、逐日纪要

08-06(SoSite,两篇:会话工作交接 + 会话修改记录)

做了什么

  • 上半场:删 nul/curl_test.txt/test_css.txt 垃圾文件;forum.css 补 .post-text-content h1~h6 桌面端字号(24/20/18/16/15/13px)、modern.css 补移动端(19~12px);博客详情页编辑/删除按钮改独占一行右对齐。
  • $el 缺失修复 12 处(重要):此前正则批量替换遗留 return; .submit() 丢失 $el,导致删除/维护按钮失效;修复覆盖 admin/maintenance.php(4)、admin/database.php(5)、admin/blog_manage.php、admin/threads.php、admin/users.php,全部逐处精确替换,复扫 bad=0/ok=31。
  • 三项遗留:删 Vote.php 死代码 renderButtons();3 处原生 onsubmit="return confirm(...)" 改 Alpine x-on:submit.prevent;themes.php 清理残留文案。
  • 灯箱补全:thread/show.php、blog/detail.php 补灯箱 DOM + 加载 thread.js;灯箱 60%/100% 两档切换,用 #lightboxImg ID 选择器强化防覆盖;补 .post-text-content img { max-height:500px } 修复博客正文图片铺满。
  • 下半场:thread/show.php 标题前加分类标签;main.php 改 CSS 按需加载(基座 modern.css+fontawesome + 视图 section('css') 声明,10 个视图配套,必须成套上传);首页友链 UI 重写、热门标签/帖子标签加链接;!important 四批清理共 38 处(死代码 10/mn- 迁移 14/编辑器后台 8/modern.css 自身 6),仅保留 5 处功能性必需。

卡点与结论

  • 帖子数不一致:右侧栏取 users.post_count(历史累计,删除不递减,soadmin 实测 137 vs 95 漂移)vs 资料页实时 COUNT。定 A+B 组合:A 右侧栏改 User::getStats() 实时口径;B 删帖递减 + 单删/批量删/恢复全链路同步 + 存量重建 SQL 已本地执行(soadmin 95=95 一致),线上需执行同一条 UPDATE。
  • 线上/本地库对比:41 表结构一致,本地多 dice_records;default_theme 线上为空不改为 modern 也不崩(Theme::getCurrent() 有 config.php DEFAULT_THEME 兜底),覆盖线上必须带 config.php。
  • 安全复查四轮重构后无高危;孤儿文件 app/Views/admin/admin.css、schema_mysql.sql/schema_sqlite.sql 确认可删,待用户确认。

交接给下一步

  • update/ 27 文件成套上传(main.php 与 10 视图不可拆分);线上执行 post_count 重建 SQL;孤儿文件删除待确认;收藏按钮 htmx 化、JS lint 防回潮列入建议;home.css 死文件。

08-07/08(SoSite,两篇:会话修复整理 + 会话交接说明)

做了什么

  • install.php 全新环境实测:抓到 4 个真实 bug 并修复——writeConfig() 不匹配无引号裸值 DB_PORT;init.php tableExists() 的 SHOW TABLES LIKE :tbl 在 native prepare 下报 1064(改 $conn->quote() 内联);COUNT(*) as cnt 却读 ['count'] 导致重复 INSERT(改读 ['cnt'] 幂等);:now 占位符重复使用报 HY093(拆 :created_at/:last_active_at)。E2E 16/16 全绿。
  • install.php 增强:新增 configTemplate()(68 行内置模板,config.php 缺失时自动生成,是 config.php 的镜像,改配置需同步);runInstall() 开头 session_write_close() 修复完成页 session ini_set 警告;步骤4 表单防重复提交;完成页按 SERVER_SOFTWARE 显示 Nginx 防下载提示;写后 opcache_invalidate。
  • 外部评审 5 条:4 条采纳(循环内 SHOW COLUMNS 合并、表单硬化、opcache 失效、提示文案),1 条判定误判不采纳。
  • bbs/三功能分析:产出 SoSite-三功能落地方案-在线升级-插件仓库-定时任务.md(P0~P3);结论:定时任务暂缓(现有周期性需求均访问触发+节流),插件仓库 → 在线升级优先;在线升级走 xiunox 全量 zip 路线(补 sha256 校验 + 维护锁 + 步骤编排)。
  • 移动端 UI 5 项:深色主题下拉菜单文字不可见(导航 hover 级联覆盖)、下拉点击无反馈、浏览数显示、页脚统计被固定底栏遮挡、页脚 SoSite 徽章。
  • 安全审计与修复 7 文件:10 项声明中 8 误报/1 低危/1 属实;Segmenter bigram 单字过滤、Thread.php/Blog.php 附件文件名白名单 + 动态占位符、Settings.php 清理孤儿附件跳符号链接、TemplateCompiler safeExpr 黑名单(仅放行 isset/empty)、Permission 严格模式、editor.js paste 净化。打包 update/3。

卡点与结论

  • 环境事实:phpstudy 实际运行 MySQL 5.7.26(8.0.12 为残留目录);so 账号无建库权限;PDO native prepare 两铁律(同命名占位符不可复用、SHOW 不可占位符)。
  • bash 工具误判拦截含 del/findstr/2>nul 的命令,绕行方式:临时 PHP 脚本。

交接给下一步

  • P0:用户上传 update/3 并回归;P1:手动回归主流程、启动三功能之一;P2:真·全新环境验证(需建库权限)、app 级遗留(后台"优化"PDO 2014、导入 1068 重复主键);P3:intval-implode 统一占位符、AuditLog 懒节流、Nginx 补 protected deny。

08-09(SoSite,一篇:收藏按钮排查)

做了什么(承接 08-09、由 08-10 文档收尾确认)

  • 收藏按钮失效根因:帖子详情页有两个 .thread-info-bar(用户信息栏 + 统计操作栏),script.js 的 querySelector('.thread-info-bar') 取到第一个(无 vote-buttons)→ threadId 为空 → 按钮永不注入。
  • 修复:plugins/post_favorite/assets/script.js 改直接定位 .vote-buttons[data-type="thread"] 再 closest();Plugin.php toggle 500 修复(INSERT 缺 created_at,表结构 NOT NULL 无默认值,补 date('Y-m-d H:i:s'));样式去竖线、PC 带文字;删除核心 assets/js/script.js(收藏插件旧版残留,全零引用)。

卡点与结论

  • 两个同名 .thread-info-bar 是反复出现的坑;该根因结论在 08-10 文档明确"勿推翻"。

交接给下一步

  • 清理完成后即可收尾;无独立待办(并入 08-10 大包)。

08-10(SoSite,一篇:会话交接说明)

做了什么

  • 收藏按钮排查收尾(见 08-09)。
  • 邮箱验证(update/7):确认内置功能非插件;后台用户编辑页加验证状态徽标 + "标记为已验证"勾选;"功能开关"加 email_verify_enabled(默认开启);AuthController 按开关分支。
  • 附件权限(update/9):category_permissions 加 can_attach 列(幂等 ALTER Permission::ensureCanAttachColumn(),默认 1 放行);后台权限矩阵加"附件"列;新增 AttachmentController(GET /attachment/{id},校验 canView + canAttach、basename/realpath 防穿越、attachment_download_before 钩子预留);thread/show.php 附件链接改 /attachment/{id}。打包后补修复:游客取消权限后仍能下载(下载校验补 canAttach + 无权限时附件数组置空);回复可见帖子改为只锁主帖。
  • 分页条美观:搜索/标签/博客评论三处全量罗列页码改折叠式(上一页/1/.../当前±2/.../末页)。
  • 公告插件:后台补 section('css');.fl-modal-overlay 的 display:none 改 flex(x-show 只移除内联 display,CSS 写死 none 会钉死弹窗);移动端操作换行。
  • 后台首页:最新注册用户/最新帖子改桌面表格 + 移动端小卡片;滚动条防抖动改 overflow-y:auto; scrollbar-gutter:stable。

卡点与结论

  • 后台帖子/博客管理移动端表格布局(用户点名交新会话):诉求勾选框+标题同行、元信息第二行、操作第三行。连踩 3 坑(margin-right:100% 挤标题、flex:1 1 auto 放不下才换、flex-basis:0% 换行判定在 grow 之前不占空间);临时方案 flex:1 1 0%,当晚些会话以 Yoga 引擎数值验证定案 flex: 1 1 calc(100% - 32px)。

交接给下一步

  • 大量改动未打包(注意 update/9 打包后又有改动);附件权限端到端回归;积分下载插件(attachment_download_before)待做;移动端表格布局待真实视口终验(08-11 完成)。

08-11(SoSite,一篇:会话总结)

做了什么

  • P0 表格布局最终修复:admin.css flex: 1 1 0% → flex: 1 1 calc(100% - 32px),375/320px Yoga 验证三行达成。
  • DashboardController 新增 collectEnvInfo() 14 项环境信息区块;app/init.php require config.php 前 is_file 判断,缺失 302 跳 install.php。
  • nginx:nginx.conf 停用 vhosts include,改 include 程序根目录 nginx-server.conf(随程序走);去 upstream 三端口轮询(撞死端口,/thread/149 实测 2.4s)改 fastcgi_pass 127.0.0.1:9001 单端口(0.34s);新增 web.config(IIS;注意 assets/plugins 绝不能进 hiddenSegments);重写《重写规则备忘.md》。
  • 私信 3 处修复:链接 /message/{id} → /message/view/{id}(原 404)、去面包屑、移动端按钮只留图标;邮箱验证开关保存失效修复(未勾选显式存 '0')。
  • 收藏入口迁移:main.php 加 nav_pc_user_links hook,插件 PC 顶栏 star 图标;⚠ 必须清 plugins/plugins_cache.php(无 mtime 校验)。
  • 通知中心插件(核心,update/11,15 文件):notifications 表,覆盖回复/点赞/积分/注册欢迎/审核结果;核心新增 3 hook(vote_after、points_award_after、points_deduct_after);PC bell 图标 + 移动端菜单,未读徽标 30s Session 缓存。
  • 审核插件方案 B 深度接管:review_result_after 广播、content_reviews.points_held 积分暂扣(发帖 5/回帖 2,approve 补发/reject 不补发)、暂扣不发通知;双表同步删(先查后删修 bug)。
  • 后台版块权限表格移动端:加 admin-table-perms 类恢复表格布局(display:table 必须配 width:100%、th 用 table-cell)。

卡点与结论

  • 验证脚本两次把通知插件 plugin.json 的 activated 改回 false → 纪律:只插删测试数据、不动插件激活状态;--mn-info CSS 变量与 coin 图标不存在(改 --mn-warning/money)。

交接给下一步

  • P0:update/11 部署 + 真实验证;P1:通知全链路实测、附件权限回归;P2:积分下载插件、默认头像、通知+审核并存回归。

08-12(SoSite,一篇:会话交接说明)

做了什么

  • left_sidebar.php 从视图数据读 category_id 修复详情页分类高亮;hook 传 ['__nav_uri' => $currentUri] 实现应用面板插件入口激活(update/12,5 个激活插件)。
  • 插件页去限宽:签到/红包 600px → 占满中栏;个人主页去 720px;前台 html 补 scrollbar-gutter:stable(补 08-10"注释承诺未实现"的欠账,update/13)。
  • 勋章中心插件(核心,update/14,16 文件):medals/user_medals/user_medal_wears 三表;后台手动颁发/回收 + 4 种自动规则(发帖/回帖/注册天数/积分);3 处展示位(帖子楼层/右栏/个人主页,controller_view_before 批量注入防 N+1);勋章墙点击即时戴/摘,上限 3 枚;图标最终走纯图片方案,图存 assets/medals/(勿放 uploads,清理孤儿附件会误删)。
  • 性能:勋章首页 8 次查询 → 常规请求 0 次(固定 3 次聚合 + 会话守卫 + 30 分钟节流);全插件 init_after 查询归零(统一 protected/.{插件}_table_cache 缓存文件守卫模式,启用 5 个、停用 2 个)。
  • SVG 勋章 10 枚(medal1-10.svg,128×128 圆形渐变);详情页元信息行精简:去级别/称号徽章、删对话图标旁数字(排查出 threads 无 post_count 字段、u.post_count 是作者发帖总数的 bug,最终按用户要求直接删除该数字)。

卡点与结论

  • fl-modal 样式不通用(只定义在个别插件 CSS),新插件弹窗必须自带;勋章佩戴无保存按钮;threads 主题数/回复数口径:countByThread/getStats()['total_threads'],勿用 $thread['post_count']。

交接给下一步

  • P0:update/12/13/14 部署到服务器;P1:勋章线上回归、自动规则端到端;P2:积分下载插件、通知回归、附件回归、勋章图配色微调。

08-15(FlintHub,两篇:20260814 详细版 + P25 版)

做了什么

  • 交接基线(文件名 08-14、内容截至 08-15 实测):SoSite 已更名 FlintHub 1.0,MySQL 重构为 SplitDB 纯 SQLite 分片引擎(business.sqlite 19MB / search 季度分文件 235 万行 / main_index 19.2 万帖 / bucket 季度分区 + ID%32 / extern 正文外置);P16~P24 速览:测试造数 5 万用户、后台首页卡死修复、idx_topic_index_list 索引、标签分批删除、搜索时间过滤、P21 搜索索引季度分文件(business 306.7MB→19MB)、P22 extern 合并 .bin/.idx + PageCache 60s、P23 PageCache 永久化 + index.php 前置缓存(纯游客 GET 命中 2.3ms)、P24 getOnlineData 30s 缓存。
  • 性能根因定位(0.11s 的真相):统计 GROUP BY 全表 89.8ms + COUNT 46.6ms;P25 落地——Category::getCategoryStats() 永久化缓存(99ms→2.14ms)、idx_users_created(后台用户排序 26.5ms→0.05ms)、idx_online_users_last、keyset 游标深翻页(第 12000 页 188ms→0.36ms,游标格式 {is_pinned}-{last_reply_time}-{create_time}-{id})、版块级最新帖快照 category_{id}_latest.json(Ofstar 借鉴)、写放大 LIMIT 5000 硬上限、页面底部口径改「渲染耗时+查询」。
  • 编辑不生效修复(虚拟主机尤甚):ExternStorage 重写后 .idx 旧偏移遮蔽新正文 → invalidateArchiveEntry() 编辑后删 .idx 条目回退 .txt。
  • 浏览数为 0 修复:ViewCounter::inc() APCu 只内存计数、flush() 无调用点 → index.php shutdown 挂接 flush(tid=1 从 0→59);首页头像/计数在快照聚合后批量 IN 补齐;删除/恢复帖子补快照+缓存失效。
  • Ofstar 2.6 架构审阅报告落盘 update/Ofstar2.6架构审阅与SplitDB借鉴报告.md。

卡点与结论

  • 覆盖索引教训(重要):为 getCategoryStats 加的 idx_topic_index_stats 被列表查询误选 → 19 万行 TEMP B-TREE,0.1s→0.3s 回归;已回滚并在 Schema.php 留注释。结论:加索引前必须 EXPLAIN 全部相关查询,优先用永久缓存。
  • CLI 测时噪声:同脚本跨进程 7~66ms 波动,必须同进程取稳态;decorateList 后原始索引字段不存在,取游标要从原始索引行。

交接给下一步

  • 部署虚拟主机:先 php -l、删线上 pages/ 缓存;回填历史浏览量可选;后台/搜索/标签分页 min(1000) 待一并解除(P26 完成);Nginx 层首访慢属环境层。

08-16(FlintHub,两篇:P26 版 + P33 版)

做了什么(P26 系列)

  • 后台用户管理查询:User::adminSearch/countAdminSearch/buildAdminSearchWhere(LIKE 转义 ESCAPE '\' + field/role/status 白名单 + 参数绑定),GET 表单无需 CSRF。
  • 后台帖子按分类筛选 + 批量操作联动;顺带修 BaseController::batchMoveIds() 的 redirect ?moved_N → ?msg=moved_N(批量移动提示从未显示过的历史 bug)。
  • 页脚改造:Powered by FlintHub V1.0.0;前台/后台分页统一(pagination() 去 admin/mn 双分支,后台默认也显示上一页/下一页);页码钳制全面解除 min(1000)(越界回落末页)。
  • 编辑器 A+B+C:turndown 补 GFM 表格插件(turndown-plugin-gfm.js)、服务端 sanitizeCssStyle() style 白名单 + span 进 allowedTags(承载样式的标签不解包才生效)、模式记忆 localStorage。
  • 表格溢出双保险:正文容器 overflow-x:auto + table max-width:100% + word-break,编辑器同步。
  • 新增《程序介绍.md》《SplitDB介绍.md》。

做了什么(P29~P33 系列)

  • P29 SplitDB 引擎控制台 /admin/database/engine:概览/桶数调整/自动扩容/备份优化/一致性检查;扩容零迁移(旧帖以 main_index.bucket_path 为准);data/lock/auto_expand.lock 防重入。
  • P30 拆分:engine → /admin/database/overview(只读)+ /settings(操作型),旧地址 302;新增操作日志页 /admin/logs/audit(LogController,DISTINCT action + 60s 缓存)。
  • P31:Markdown 发帖后自动滚到回复框 → switchEditorMode 加 skipFocus;P32/P33:编辑器高度 PC 550/移动 300 改固定 height。
  • version.php 单一版本源:config.php/install.php(含 configTemplate 模板)全部 require_once version.php;产出 update/1 上传包(16 文件,version.php 新增文件漏传会白屏)。

卡点与结论

  • SQLite 多占位符必须一一对应(column index out of range);private static 方法自测要走 Reflection;双重 flock 同进程第二把必失败,锁单点持有;CHANGELOG P25 欠账本次补记。

交接给下一步

  • 下一步全盘审计(P26 文档给出五维审计指引:SQLi/XSS/CSRF/越权/分页边界 + 数据对拍 + EXPLAIN + 无 RETURNING/无 APCu 兼容);update/1 部署注意删服务器残留 engine.php;编辑器交互需人工浏览器复核。

08-17(FlintHub,一篇:P34 版,多语言改造)

做了什么

  • 执行《多语言改造计划》(用户已确认,五阶段串行,插件不改造):新建 lang/zh.php+lang/en.php(899 key 完全对齐)、app/Helpers/I18n.php + 全局 t();I18n::detect() 语言判定:?lang= > Cookie flinthub_lang > Session > site_lang > Accept-Language > 中文兜底;PageCache 语言分键(zh 原名、非 zh 加 _en 后缀);视图 $this->t() / {$t:key},JS window.__t 注入。
  • 已完成:前台 28 视图 + 13 控制器 + main.php 语言切换下拉 + Mailer 默认发件人名 + editor.js/auth.js __t 化;后台 26 视图大部分 + database/settings.php 全部文案(交接后补注)。

卡点与结论

  • 默认中文零变化:zh 不分缓存键、t() 缺 key 回退 key 本身;中文占位符正则必须 /\{([^}]+)\}/u(\w 不匹配中文)。

交接给下一步(中断点)

  • 从阶段 4 后台剩余处继续:① 17 个后台控制器文案抽取(redirect/error/success 换 I18n::get('admin.xxx'),zh/en 同步补);② TemplateCompiler 的 timeAgo/pagination 本地化;③ zh/en 对齐校验(899/899 双向 0/0);④ update/ 镜像 + CHANGELOG + 使用说明;⑤ 注释精简(删 Pxx 编号,只动注释不动逻辑,改前改后 fc /b 对比)。

08-18(FlintHub,两篇:会话总结 + 会话交接文档)

做了什么

  • 全盘安全审计(只读):3 高危/6 中/6 低;代码六维(SQLi/XSS/CSRF/越权/SSRF/命令)全过,风险集中在部署/入口层。
  • 审计修复(update/10):cli/ Web 直访防护(nginx deny + cli/_guard.php + 34 脚本 SAPI 守卫)、插件 data/ SQLite 防护(15 插件 .htaccess/web.config + Plugin::db() 自动补写)、upgrade_p41.php 鉴权;cron_trigger 的 CRON_KEY、Upload finfo 拒绝伪造图片、RateLimiter json 化、备份轮转(留 10 份)、SITE_URL 覆盖。
  • 搜索优化(update/11):SearchIndexStore 逐 token 强制 token 索引(修 SQLite 误选 type 索引全扫,2.4s→31ms)、keyset 候选放大 + 权限补位、_score 排序;Segmenter 英文单词整体切分 + 小写统一。
  • 重建断点续建(update/12):SearchRebuild.php JSON 断点(phase/last id/开关指纹)+ LOCK_EX + clearstatcache,后台 3 按钮(重建/续建/停止)。
  • 右侧栏统计按页型自适应 + 博客页公告钩子(update/15);系统设置页 /admin/settings/system(站点状态/功能开关/性能/安全)+ admin_verify_timeout 动态化(1800 标准/2592000 长任务,3 处鉴权动态读 + 顶部 sticky 横幅)(update/16)。

卡点与结论

  • 进度显示 115%:条目数与批次数两个量纲相除 → 按阶段取分母;「重建全部」按钮 clear 断点使续建永失效 → 交由指纹校验决定;canAttachColumnExists 用 MySQL SHOW COLUMNS 在 SQLite 恒 false(权限形同虚设)→ 改 PRAGMA table_info;Settings::get() 返回 string,数值配置必须 (int) 强转;数据库文件绝不进镜像。

交接给下一步

  • 服务器按 10→11→12→15→16 覆盖(勿动 data/);后台「重建全部索引」一次;CRON_KEY 建议强随机;install/upgrade 脚本长期建议移出 Web 根;死代码 RateLimiter::remaining() 可删。

08-23(FlintHub,一篇:会话交接文档)

做了什么

  • 博客封面生成器(update/34→35 定稿):app/Helpers/CoverTemplate.php,6 套原创 SVG 模板(crystal/minimal/green/pink/dusk/sunset,1200×750);generateCover()(模板名白名单 + htmlspecialchars 转义)+ saveCover() 落盘 assets/uploads/covers/;文字排版多轮微调定稿(标题 65/60 号、日期 40 号、y=470);每模板 3 条贝塞尔曲线装饰(只分布顶部/底部/角落,不侵入文字安全区);详情页 16:6 横幅封面;编辑页 300ms 防抖实时预览(/api/cover-preview);nginx covers/ 目录 default_type image/svg+xml。
  • PC 用户下拉菜单:个人中心/我的收藏(htmx 懒加载计数 /api/favorites-count,首页零查询)/私信(message_enabled 开关)/管理/退出;通知按钮不动,post_favorite 的 nav_pc_user_links 置空。
  • 移动端抽屉:移除博客存档、站名加 logo(/logo.svg)。
  • 下拉样式抽离公共类(.mn-dropdown-panel/.mn-dropdown-item 系列)+ CSS 审计清理(modern.css 2349→2343 行);update/35~39。

卡点与结论

  • Alpine x-show 与 CSS display 冲突:面板类写 display:none 会钉死下拉(x-show 只清内联)→ 初始隐藏用模板内联 style="display:none",CSS 类不写。
  • 特异性覆盖:下拉从内联抽成类后被 .mn-nav-links a:hover(0,2,1)压过 → 选择器带 .mn-dropdown-panel 前缀提升特异性,用户明确不喜欢 !important。
  • PWA Service Worker Cache-First:改 CSS 必须递增 sw.js CACHE_VERSION(当前 v4→下次 v5),否则永远命中旧缓存。
  • CSS 审计建议 4 条误报:--mn-text-white 无重复、旧变量体系因 admin/threads.php:79 引用不能删、删 .mn-rounded-full 而非 50、.mn-flex-1 已含 min-width:0 不建议改。

交接给下一步

  • 服务器按 35→36→37→38→39 覆盖 + nginx reload + 强刷;P3:抽屉改名、旧变量清理、媒体查询归拢均暂缓;封面 16:9 扩展需重排可见带(y≈263~487)。

三、贯穿 8 月的主线

整个八月是一条"单模板轻量论坛 → 插件生态 → SQLite 分片引擎 → 企业级打磨"的完整演进链:

  1. 重构后清理收尾(08-06,SoSite):htmx+Alpine.js 重构完成后,先做垃圾清理、CSS/JS 修复($el、灯箱、标题字号),再以"CSS 按需加载 + !important 清零 + 帖子数口径统一"完成样式体系整理,站点进入稳定状态。
  2. 安装与安全加固(08-07/08,SoSite):install.php 全新环境实测修 4 bug、补 config 自动生成;安全审计修 7 文件并打 update/3——从"能跑"转向"能交付"。
  3. 功能补全与权限体系(08-09/08-10,SoSite):收藏按钮、邮箱验证、附件权限(can_attach + AttachmentController)把零散功能纳入统一权限框架;后台移动端表格布局历经三轮会话最终以 flex-basis 原理定案,是"用户诉求驱动、反复实测"的典型。
  4. 插件生态建设(08-11~08-12,SoSite):通知中心(3 新 hook)+ 勋章中心两大插件落地,确立 hook 扩展模式与"缓存文件守卫"性能范式,插件 init_after 查询归零。
  5. SplitDB 迁移与数据分层(08-14 前后,FlintHub 起点):从 MySQL 重构为纯 SQLite 分片引擎(季度分区 + ID%32 桶 + extern 正文外置 + main_index),品牌更名 FlintHub;P16 批量造数 19.2 万帖,P17~P22 修后台卡死、搜索索引季度分文件(business 306.7MB→19MB)、extern 合并 .bin/.idx。
  6. 性能治理收官(08-15,P23~P25):列表页前置缓存(游客 2.3ms)+ 统计永久化(99ms→2.14ms)+ keyset 深翻页(188ms→0.36ms),并留下"加索引前必须 EXPLAIN"的教训。
  7. 后台/控制台与编辑器体验(08-16,P26~P33):后台查询筛选、前后台分页统一、GFM 表格保真;SplitDB 引擎控制台(overview/settings 拆分 + 操作日志);version.php 收编版本号。
  8. 多语言改造(08-17,P34):I18n + zh/en 双语言包 899 key,前台全量抽取、后台中断,为后续扩展打底。
  9. 安全审计与前台美化收官(08-18 / 08-23):08-18 全盘审计 3 高/6 中/6 低全修、搜索 2.4s→31ms、系统设置页;08-23 博客封面生成器(6 套 SVG 模板)、PC 用户下拉、抽屉与下拉样式公共类化,前后台视觉统一。

一条暗线是部署资产化:几乎每个会话都产出 update/NN 部署包(update/3 → 39),并沉淀"视图改动必须失效 data/runtime/pages/ 静态缓存、改 plugin.json 必删 plugins_cache、镜像 fc /b 逐字节一致"等纪律。

四、遗留与待办汇总

事项来源日期优先级状态/说明
update/ 各批次部署到服务器(3、7、9、11、12、13、14 / 1 / 10→16 / 35→39)08-07~08-23P0全程待用户操作;覆盖时 main.php 与视图成套、version.php 勿漏传、config.php 先备份
线上执行 post_count 存量重建 SQL08-06P1本地已执行验证一致;线上待执行(或依赖删除操作逐步收敛)
线上 settings.default_theme='modern' + 重建缓存08-06P3不改也能跑(有 config.php 兜底),仅影响后台下拉显示
孤儿文件删除确认:app/Views/admin/admin.css、schema_mysql.sql/schema_sqlite.sql、home.css08-06P2多次交接反复出现,始终待用户确认
手动回归主流程(后台登录/发帖回帖/粘贴/搜索/批量删/附件/版块可见性)08-08P1验证码交互无法自动化
install.php 真·全新环境验证(需建库权限账号)08-08P2环境所限仅验证了优雅报错
后台"优化"PDO 2014、数据库导入 1068 重复主键08-08P2app 级遗留,非当次引入,未修
三功能实施(插件仓库 → 在线升级,xiunox 全量 zip 路线)08-08P1方向已定未启动;定时任务已评估暂缓
积分下载插件(attachment_prices/download_orders 表 + 价格页 + 购买接口)08-10~08-12P2attachment_download_before hook 已预留,跨 3 篇重复出现
附件权限端到端回归 / 邮箱验证线上回归08-10~08-12P1~P2跨 3 篇重复
勋章插件线上回归 + 自动规则端到端验证08-12P130 分钟节流生效性需实测
回填历史浏览量08-15可选19.2 万行仅 108 行有值;无真实数据源则跳过
后台/搜索/标签/博客分页 min(1000) 一并解除08-15P2P26 已完成全部钳制,本条实际已消除
多语言改造:17 个后台控制器 + timeAgo/pagination + 注释精简(删 Pxx 编号)08-17P0中断点,下一会话从阶段 4 后台剩余处继续
存量搜索索引后台「重建全部索引」一次(应用新英文分词)08-18P1未开全文索引约几分钟;建议长任务模式下执行
CRON_KEY 配置强随机串08-18P2默认空兼容旧部署
删除/移出 install.php、upgrade_p41.php08-18P2已有 410/管理员鉴权防护
抽屉类名统一 mn-active、旧变量体系清理(--text-dark 引用先改)08-23P3用户决定暂缓/需前置改造
8 处 @media (max-width:768px) 归拢08-23P3维护性建议,大重构高风险暂缓
封面生成器扩展(16:9 画幅重排可见带)08-23可选用户曾提;改动需重新适配 y≈263~487
PWA sw.js CACHE_VERSION 递增08-23每轮必做当前 v4;今后每轮改 CSS 后必须递增,否则浏览器命中旧缓存


本篇由 17 篇原始交接/总结文档合并去重而成(2026-08-06 ~ 08-23);原始文件均保留在 20260806备份/、8月13日备份/、暂存20260913/docs/ 下,可按需溯源。

轻量级、高性能、零 MySQL 依赖的PHP社区系统。
| Views 3 | Replies 0

All Replies (0)

No replies yet

Please Log in