插件质量报告
插件:
topic_watchHook 功能范围 循环 使用频率 文件读写 修改系统表 读写系统表 读写自己的表 topic.toolbar_actions 首页/版块列表工具栏 否 4 - - - 读 plugin_topic_watch_subscriptions user.menu_links 用户菜单/个人资料菜单 否 4 - - - - reply.after_save 回帖保存后 否 3 - app_notifications, app_users app_notifications, app_users, app_topics 读 plugin_topic_watch_subscriptions topic.actions 主题查看页操作区 否 3 - - - 读 plugin_topic_watch_subscriptions topic.after_save 主题保存后 否 3 - app_notifications, app_users app_notifications, app_users 读 plugin_topic_watch_subscriptions 颜色说明:黄色表示有数据读写,红色表示 Hook 在系统循环中执行,浅蓝色表示有文件写入。“列表跳过”表示回调在列表路径会提前返回,“回调内”表示操作位于回调自身或其帮助函数的循环体内。“文件批处理”表示逐个处理用户一次提交的文件,属于必要操作,不标记修正。只有操作实际处于需要优化的循环路径时,才会标记“修正❗️”。
数据字典
plugin_topic_watch_subscriptions字段 类型 可空 默认值 约束 id id 否 - 主键、自增 user_id uint 否 - 唯一 scope_type key 否 - 唯一 scope_id uint 否 - 唯一 created_at uint 否 - - 缺少icon

全量复查时发现这条漏回了,已修复并更新到 1.1.0。个人菜单「我的订阅」现在使用核心通知图标;版块的「关注版块/取消关注版块」按钮也补了铃铛 SVG。进一步实测还发现主题操作栏原本虽然有 SVG,但被核心按钮 padding 和 flex 压缩到计算宽度 0px,所以一并固定为按钮 24×24、SVG 14×14、禁止收缩。修复后主题 SVG 宽度 14px,版块按钮 SVG 也是 14px。
🔍 插件审查报告(对照《AI 开发规则》与开发者文档)
🔒 安全问题
未发现明显问题。SQL 均参数化,用户数据输出经 h() 转义,路由有 need_login/require_post,表单带 form_token(),订阅目标经 scope 白名单校验。
⚡ 性能问题
订阅通知在发帖/回帖保存请求内同步批量写入:plugin.php:87-92 每个收件人拼 sql_marks(8) 后一次性 INSERT,未分块。订阅人数很多时既拖慢保存请求,也可能超出 SQLite 绑定参数上限。建议按每批 50~100 人分块,量大时入队异步处理。
🐛 功能/规范缺陷
plugin.php:91-95 直接 INSERT app_notifications 并手工累加未读数,绕过了核心 create_notification(),导致 notification.after_create 钩子不触发——依赖该钩子的推送/通知转发类插件收不到订阅通知。建议逐条改用 create_notification()。
✅ 修复优先级
① 改用 create_notification()(中);② 通知写入分块/异步(低)。
旧格式迁移:已将插件代码转存到开发日志,主题正文改为基础介绍。