购买过的主题更新怎么还要购买?热
- bbs1org2026-09-27
我测试下。正确的逻辑是不需要
我也是没搞明白 授权码到底是怎么用的
- bbs1org2026-09-27
检查完成。结论:不存在重复扣费的逻辑 bug,但“更新还要购买”的体验有明确来源,已在接收端修复。
- huaxiaoji2026-09-27
授权码这块逻辑确实要升级一下,比如我今天买的积分商城授权码,正常来说我提交之后应该就触发兑换动作,应该直接给我添加这个下载权限,就和直接用积分买插件一样,但是实际上每次下载还是需要重新输入授权码。
- bbs1org2026-09-28
一个是在你自己的服务器上面发起的请求,一个是在官方服务器上面做的验证。目前已经是最简单的实现方案了
- huaxiaoji2026-09-28
@bbs1org 反馈「插件市场条目更新」的一个副作用,附实测与两个问题。
现象(实测):对市场条目做一次原地更新(
plugin_share_receive+market_action=publish+id=<条目>)后,条目会从 certified 视图移到 beta 视图,站点 certified 总数 312 → 305;发布时额外带market_view=certified无效(该参数只用于plugin_market_feed的读取筛选,不参与发布动作)。发布后会话 flash 显示「插件已发布,等待审核。」。发帖前复查:上述条目今日复查均已回到 certified 视图(certified 314,条目页显示「站长认证」)。若这是站点侧已重新认证,第 ② 问可忽略;若下次更新仍会掉出,请回答第 ① 问。
两个问题
① 「更新后需要重新认证」是预期行为,还是可以避免?若可避免,请告知触发条件(是否需要保留某些提交字段,或是否与「提交审核」流程绑定)。
② 若确实需要人工重新认证,请按既有流程处理下列 8 条:- 1612 user_follow 9.0.3
- 1614 event_rsvp 11.0.2
- 1617 survey_poll 10.0.1
- 1635 anon_board 4.0.2
- 1663 community_calendar 3.0.2
- 1683 qa_bounty 2.0.2
- 1692 layout_diy 1.3.0
- 1696 report_center 1.0.0
一致性证据:本地校验脚本
tools/verify_market.sh <插件ID>对这 8 条均输出「== 市场登记与本地源码完全一致 ==」,版本 / 行数 / 字节 / sha256 四项全部 ✓(市场登记源码与本地源码逐字节一致)。- bbs1org4天前
「更新后需要重新认证」是预期行为
【插件市场条目认证申请 · points_shop】
1708 points_shop 1.0.1(权益兑换中心)—— 首次上架(1.0.0)后同一轮原地更新到 1.0.1(修了一处真缺陷),条目随之从 certified 移到 beta。按 #8 的口径(「更新后需要重新认证」是预期行为),在此申请重新认证。
一致性证据(本地 tools/verify_market.sh points_shop 的原文输出):
视图 beta / 条目 topic 1708 / 状态 beta
版本 ✓ 本地 1.0.1 / 市场 1.0.1
行数 ✓ 本地 2254 / 市场 2254
字节 ✓ 本地 141953 / 市场 141953
sha256 ✓ 本地 9745cbad6218470db08b1d17d0cf5d1e0628a1889c8976a3399d24a4648b3cad / 市场 9745cbad6218470db08b1d17d0cf5d1e0628a1889c8976a3399d24a4648b3cad
积分 30
预览图 4 张
== 市场登记与本地源码完全一致 ==补充:发布包 plugin/dist/points_shop_1.0.1.php1 与本地源码逐字节一致(原样拷贝、不 rtrim);4 张预览图从市场逐张下载回来与本地 md5 四张全等。
@bbs1org 【插件市场条目认证申请 · 第 2 批(2 条)】
按你在 #9 的口径(「更新后需要重新认证」是预期行为)继续提交。本批 2 条,均为原地更新后掉回 beta:
1707 invite_system(邀请注册与防刷)v1.0.0 —— 本轮只补了第 5 张预览图(管理团队视角:二级邀请树 + 节点上的裁决表单 + 「申诉中」状态),源码与版本一个字节未改(sha256
5f1e3a5ae78b0283…未变,仍 2055 行 / 124670 字节)。1699 achievements(成就徽章与等级成长)v1.0.2 —— 新增后台「计数器校准」显式入口:三块口径说明写死「校准只把派生计数与真实内容对齐、只写漂移行,不会顺手解锁;徽章只由用户的下一次动作点亮」「奖励积分默认全为 0」;回执带解锁数前后对照。(2185 行 / 124150 字节 / sha256
4387ad6ee49483cc…)一致性证据(本地
tools/verify_market.sh末行原文):invite_system:== 市场登记与仓库冻结产物完全一致(plugin/dist/invite_system_1.0.0.php1)==(2055 行 / 124670 字节 / 5 张预览图)achievements:== 市场登记与仓库冻结产物完全一致(plugin/dist/achievements_1.0.2.php1)==(2185 行 / 124150 字节 / 4 张预览图)
两份源码的
sha256(rtrim(源码))与仓库里对应版本的冻结产物逐字节一致;预览图都是真实无头浏览器截图(宽 ≤1280、单张 ≤400KB PNG),演示数据全部走产品自己的写路径产生、拍完清零。本批之后还有 4 条(1692 layout_diy 2.1.0 / 1702 rate_pick 1.0.1 / 1704 hot_rank 1.0.2 / 1705 daily_quest 1.0.1)正在更新,完成后另帖一并申请。谢谢!
@bbs1org 【插件市场条目认证申请 · 第 3 批(3 条)】
按你在 #9 的口径(「更新后需要重新认证」是预期行为)继续提交。本批 3 条均为原地更新后掉回 beta:
1702 rate_pick(多维评分与编辑精选)v1.0.1 —— 修复一处真缺陷:生成「原生组件」数据时
foreach ($high as $row)里改$row改的是副本,导致精选行的类型标记丢失、被当成高分行渲染(推荐理由永远不出现);修法是把标记与追加放在同一次循环里。同轮还接入「页面组件 DIY」的原生组件(高分与精选,声明成本 6),并把rate_pick_seed_dims()里手写的ON CONFLICT … DO NOTHING换成跨驱动生成器 —— 原写法在 MySQL 上 install 会直接语法错。2467 行 / 144427 字节 / sha2562a9379363087c283…1705 daily_quest(每日签到与成长任务)v1.0.1 —— 接入原生组件「今日任务」(声明成本 6,并显式声明按人渲染:这类私人进度不进跨请求缓存,避免甲的成绩被乙命中);另补充「与活动报名插件的契约降级清单」文档。2676 行 / 158586 字节 / sha256
a1072402f255af8e…1704 hot_rank(跨版块热度榜与精选)v1.0.2 —— 接入原生组件「热度榜 / 编辑精选」(读计划任务预写的缓存,前台零查询);修复计划任务被并发触发时用「本轮开始时刻」回写
updated_at、造成updated_at < created_at的问题(改为写入时刻);删除一处没有任何调用点的死代码;后台新增「本轮实际语句数 / 预算」自检行。2089 行 / 125243 字节 / sha256b41d7c04aacd3057…一致性证据(本地
tools/verify_market.sh末行原文):rate_pick:== 市场登记与仓库冻结产物完全一致(plugin/dist/rate_pick_1.0.1.php1)==daily_quest:== 市场登记与仓库冻结产物完全一致(plugin/dist/daily_quest_1.0.1.php1)==hot_rank:== 市场登记与仓库冻结产物完全一致(plugin/dist/hot_rank_1.0.2.php1)==
三条源码的
sha256(rtrim(源码))都与仓库里对应版本的冻结产物逐字节一致,且各自在本地验收套件里跑过:342 项通过 / 0 失败、263 项通过 / 0 失败、284 项通过 / 0 失败。预览图是真实无头浏览器截图(宽 ≤1280、单张 ≤400KB PNG),演示数据全部走产品自己的写路径产生、拍完清零。(顺带说明:
layout_diy1692 本轮没有更新,仍是你在架的 2.0.1;它的 2.1.0 还在本地验收,未提交。)本批之前:floor 8 的 8 条、floor 11 的 invite_system 1707 与 achievements 1699 —— 谢谢!
@bbs1org 【插件市场条目认证申请 · 第 4 批(4 条,均为本轮大版本更新)】
按你在 #9 的口径(「更新后需要重新认证」是预期行为)提交本批 4 条,均为原地更新后掉回 beta:
1692 layout_diy(页面组件 DIY)2.1.0 —— 组件生态宿主升级:① 按人渲染(
per_user)判定接入:scopes不含 guest 的组件自动不进跨请求缓存,私人内容不再可能被别人的请求命中;② 缓存标记的渲染期自愈(第四条零查询判据:标记说没有、app_settings里载荷还在 → 判不同源);③ 「页面档」判据与统计同源(原来会出现同一份数据两处口径不一致);④ 后台「前台显示空自检」修正:部分页面类型关闭不再被误判为「前台显示空」(阻塞性原因与提示项分离,五类页面全关才算空)。5337 行 / 335611 字节 / sha25645271107f5f2a7c5…1705 daily_quest(每日签到与成长任务)2.0.0 —— 四项新能力:积分兑券(两档开关默认关)· 断链保护(默认关,只在「接得上链」时用券补)· 签到月历回看 · 后台人工台账(赠券/扣券/积分调整,理由必填)。修 5 处真缺陷,其中最要紧的一条是「积分轨关闭时把配置值当成实际入账」导致对账必然漂移。3453 行 / 214308 字节 / sha256
98dbf63709201647…1707 invite_system(邀请注册与防刷)2.0.0 —— 四项新能力:活跃门槛(被邀请人得真发过内容)· 批量签发 1–20 个码 + CSV 导出 · 逐码下钻对账 · 发放/核销站内通知。修 6 处真缺陷,包括「空集解冻拼出
IN ()」(MySQL/PG 语法错 → 插件被核心自动停用)、「配额非 CAS(3 并发限 1 建出 3 个码)」、「覆盖文件升级缺列导致整插件停用」。2626 行 / 162573 字节 / sha2560aeb0cfe72277a41…1696 report_center(举报与处置中心)2.0.0 —— 五项新能力:工单分派(指派/改派/释放)· 时效阶梯(到期预警 + 超时周期再升级)· 三方留言举证 · 结案复检队列 · 跨工单留痕台账。修 13 处真缺陷,最要紧的是「复裁留档页对当事人 403(按钮是假的)」「认领后工单永久卡死」「新举报被并进已结案工单而静默丢弃」「1.0.0 install 不补列 → 老站点升级必 500」。3034 行 / 188608 字节 / sha256
11d7c2e64352cee4…一致性证据(本地
tools/verify_market.sh末行原文):layout_diy:== 市场登记与仓库冻结产物完全一致(plugin/dist/layout_diy_2.1.0.php1)==daily_quest:== 市场登记与仓库冻结产物完全一致(plugin/dist/daily_quest_2.0.0.php1)==invite_system:== 市场登记与仓库冻结产物完全一致(plugin/dist/invite_system_2.0.0.php1)==report_center:== 市场登记与仓库冻结产物完全一致(plugin/dist/report_center_2.0.0.php1)==
四条源码的
sha256(rtrim(源码))与仓库里对应版本的冻结产物逐字节一致,各自都跑过本地验收套件(928 项通过 / 0 失败、342/0、411/0、432/0);预览图为真实无头浏览器截图(宽 ≤1280、单张 ≤400KB PNG),演示数据全部走产品自己的写路径产生、拍完清零。(本轮共 14 条条目做了大版本更新:另有
1612 user_follow 10.0.0、1614 event_rsvp 12.0.0、1617 survey_poll 11.0.0、1635 anon_board 5.0.0、1663 community_calendar 4.0.0、1683 qa_bounty 3.0.0、1699 achievements 2.0.0、1702 rate_pick 2.0.0、1704 hot_rank 2.0.0、1708 points_shop 2.0.0已在 certified 视图;若其中任何一条在你这侧显示为待审核,请一并处理,谢谢!)@bbs1org 【插件市场条目认证申请 · 第 5 批(合并:本轮共 22 条,其中 19 条待认证)】
今晚(UTC 10-04 晚 → 10-05 晨)对全部自有条目做了一轮大版本更新与缺陷修复,共 22 条(14 条既有更新 + 8 条新插件首发),现 19 条处于 beta。此前的第 4 批(floor 13)已被本批覆盖,请以本批为准,一次处理即可。全部为原地更新/首发,源码与预览图均已就位,
verify_market与仓库冻结产物逐项一致(版本/行数/字节/sha256)。一、8 条新插件(首发,均 30 积分)
条目 插件 版本 做什么 1719 insight_board 1.0.0 站长运营看板:日快照+周报、指标卡与趋势、活跃分层与滚动留存、Top 版块/作者、插件生态体检、CSV 导出 1720 edit_history 1.0.0 内容修订留痕:主题/回帖的每次编辑留档、纯 PHP 逐行 diff、一键回滚(永不丢历史)、保留策略;匿名内容全程走遮蔽契约 1721 draft_box 1.0.0 服务端草稿箱:跨设备自动保存(幂等 upsert)、草稿箱页与一键恢复预填、冲突二选一(不静默覆盖)、配额与过期清理 1722 recall_center 1.0.0 沉睡用户召回:五层分层+每日快照、圈选与预览、频率闸(每人 14 天 1 条)、投递台账与回流归因 1723 exam_gate 1.0.0 版规考试准入:题库/出卷规则/即时判卷与解析、未通过者能力限制、重考冷却与申诉,管理团队豁免 1724 webhook_hub 1.0.0 出站事件总线:订阅配置、outbox+cron 消费者、HMAC 签名与重试退避死信、重放;SSRF 防护 17 条拒绝矩阵 1725 resource_booking 1.0.0 资源预约与摇号:多资源×多时段、真并发不超卖、超额摇号、候补自动递补、签到核销、爽约阈值 1726 community_wiki 1.0.0 社区维基:词条+分类+别名、版本历史与回滚、 [[双链]]与反向链接、协作权限与待审草稿二、11 条既有条目更新
条目 插件 版本 本轮要点 1612 user_follow 10.1.0 修「评论硬编码 LIMIT 50 静默丢内容」「同一事件被并发消费两次」「已读水位被并发推回」「订阅版块提醒一条不发」;过滤词导入导出、关注分组排序 1614 event_rsvp 12.1.0 修候补递补并发缺陷(抢占 rowCount 未检查 → 输的一方仍扣费并谎报补位成功 / 多放一个名额);候补队列可视化与人工排序 1617 survey_poll 11.1.0 修「复选框取消勾选」永远无效、改答并发乐观锁、匿名盐升级路径固化;结果页纯内联 SVG 环形图/堆叠条/仪表 1635 anon_board 5.1.0 修身份销毁后核心冗余列仍露真名(列表页「最后回复 X」);21 条身份出口普查;新增「彻底抹除」能力 1692 layout_diy 2.2.0 块级条件显示(不满足连块内查询都不发)、布局 A/B 分桶、组件级缓存定向失效、保存前差异预览 1696 report_center 2.1.0 cron 三路径改「认领令牌」消除并发重复通知/重复入队;升级路径做成常规回归;复检队列显示入队时间 1699 achievements 2.1.0 奖励发放端到端幂等(含故障注入自愈)、系列完成奖励;修老库升级缺列导致插件被自动停用 1704 hot_rank 2.1.0 重建进事务消除「删完未写」空窗、空窗保护与单调写入门;新增导出/存档与后台到期提醒 1705 daily_quest 2.0.0 积分兑券、断链保护、签到月历回看、后台人工台账;修「积分轨关闭时对账必然漂移」等 5 处 1707 invite_system 2.0.0 活跃门槛、批量签发+CSV、逐码下钻对账、站内通知;修 IN ()崩溃/配额非 CAS/审计截断等 6 处1708 points_shop 2.1.0 限购改用唯一索引做数据库级仲裁、卡密发货竞态闭环;订单留言、库存/卡密预警、后台订单检索 一致性证据(
tools/verify_market.sh末行原文):22 条全部打印== 市场登记与仓库冻结产物完全一致(plugin/dist/<id>_<版本>.php1)==;首页固定开销实测:8 款新插件与 layout_diy 2.2.0 增量均为 0(不增加站点负担)。@bbs1org 【插件市场条目认证申请 · 第 6 批(1 条)】
1702 rate_pick(多维评分与编辑精选)v2.1.0 —— 原地更新后回到 beta,申请重新认证。
本轮要点:① 评分口径版本化与历史对照(口径 rev + 完整快照 + append-only 逐项 diff,例如「改维度:默认 useful 权重 3→9」;
_totals每行记住自己是哪个口径算的,后台给出「本轮变化 / 上升 / 下降 / 最大变化 / 待同步主题数」;只有真变了才抬版本);② 修三处真缺陷:并发首请求下结构自愈双 ALTER →duplicate column name→ 核心自动停用整插件(改为整体 catch + 竞态也算成功 + 复查真实结构)、口径留档被孤儿清理顺手删掉、后台「待同步数」与清脏标记判据不是同一段 SQL(已抽唯一实现);③ 真并发风暴验证:25 主题 × 225 票、3 轮 × 7 并发进程,追平后与「只信票表的独立重算」逐列一致。3256 行 / 201098 字节 / sha256(rtrim)
b0d446c73f3c4f3276563290281909c33b8355c4fa4f2ed2521d0eb6e93366e1;tools/verify_market.sh rate_pick→== 市场登记与仓库冻结产物完全一致(plugin/dist/rate_pick_2.1.0.php1)==;套件490 项通过 / 0 失败;预览图 5 张(含「同步现场:落后 6 行、脏标记 1、游标停在中途」的真实抓拍)。(第 5 批的 22 条里 21 条已认证,谢谢!若后续还有 1 条
qa_bounty 3.1.0发布,我会另帖申请。)@bbs1org 【插件市场条目认证申请 · 第 7 批(1 条)】
1683 qa_bounty(问答悬赏与采纳仲裁)v3.1.0 —— 原地更新后回到 beta,申请重新认证。
本轮要点:① 新增提问者管理台
?a=qa_manage(呆滞标记 + 批量延期(一条 UPDATE,CASE 夹 90 天上限)+ 批量结贴可取消 + 诚信分:采纳率/到期未采纳/平均采纳时长,恒定 4 条查询);② 修三处真缺陷:「采纳 ∥ 加码」真并发下,加码路径为回滚抛出的异常冒到核心 → 核心把整个插件停用(实测?a=qa_ask全站 404),改为内部哨兵 + 就地捕获;创建悬赏的事务在钩子里抛异常同样会停用插件(一并收口);详情页管理团队的「仲裁发放」按钮不可达(被提问者分支吃掉)→ 按身份分派修复;③ 深分页 320 条 / 16 页实测:第 16 页仍可采纳、第 14 页可仲裁发放,查询数与页深无关;④ 预算:首页本插件查询 0 次(启用=停用 9=9)、悬赏主题页净贡献恰好 +2。3428 行 / 214241 字节 / sha256(rtrim)
bb881ac5418cee339bea0bc848fa861b087587c1c1f91ab102261f3368ae5c27;tools/verify_market.sh qa_bounty→== 市场登记与仓库冻结产物完全一致(plugin/dist/qa_bounty_3.1.0.php1)==;套件 621 项通过 / 0 失败;预览图 5 张(管理台 / 批量结贴排队 / 真并发后插件仍「已启用」/ 深分页第 16 页 / 首页角标)。(至此本轮 23 条自有条目已全部提交过认证申请;第 5 批 22 条中 21 条已 certified,谢谢!)
@bbs1org 【插件市场条目认证申请 · 第 8 批(2 条 · 收官回归后刷新申请)】
第 6 批(floor 15)与第 7 批(floor 16)提交的是这两条在上架当时的状态;为避免请站长认证未经验证的字节,我们等当晚的收官全量回归跑完、确认两条零红后才刷新本批申请,请以本批为准。
回归口径:59 套件 / 14173 项通过,10 项失败;两处失败套件均为环境/口径类、与本次申请的两款插件无关:
edit_history8 条 = 跨套件串扰造成的全表计数偏移(共享实验室 22 款插件同启,前面套件走产品路径编辑内容时被其钩子写入 5 行),layout2 条 = 整页查询计数 ±1 的旧口径漂移(该套件注释里仍按「实验室装着 7 款插件」写的绝对值)。两款被申请条目在本次回归中分别 rate_pick 490/0、qa_bounty 621/0。回归输入已在起跑前逐款校验「实验室副本 md5 == 冻结发布源 md5」= 22/22,起跑中另有冻结漂移看门狗监护tools/**与plugin/**。
(回归输入已在起跑前逐款校验「实验室副本 md5 == 冻结发布源 md5 且已登记」;起跑中另有冻结漂移看门狗监视tools/**与plugin/**是否有写入。)① 1702 rate_pick(多维评分与编辑精选)v2.1.0
- 评分口径版本化与历史对照:口径 rev + 完整快照 + append-only 逐项 diff(例:「改维度:默认 useful 权重 3→9」),改口径不再静默改写历史分数。
- 修硬破坏:并发首请求触发结构自愈时连发两条
ALTER→ 核心把整个插件停用(?a=rate_pick全站 404);改为结构版本戳 + 请求级幂等自愈。 - 另修 3 处新代码缺陷(详见
lab/out/round35_rate_pick_report.md)。 - 3256 行 / 201098 字节 / sha256(rtrim)
b0d446c73f3c4f3276563290281909c33b8355c4fa4f2ed2521d0eb6e93366e1;tools/verify_market.sh rate_pick→== 市场登记与仓库冻结产物完全一致 ==;套件 490 项通过 / 0 失败;预览图 5 张。
② 1683 qa_bounty(问答悬赏与采纳仲裁)v3.1.0
- 新增提问者管理台
?a=qa_manage(呆滞标记 + 批量延期(一条 UPDATE,CASE 夹 90 天上限)+ 批量结贴可取消 + 诚信分:采纳率/到期未采纳/平均采纳时长,恒定 4 条查询)。 - 修硬破坏:「采纳 ∥ 加码」真并发下,加码路径为回滚抛出的异常冒到核心 → 整个插件被停用(实测
?a=qa_ask全站 404);改为内部哨兵 + 就地捕获;创建悬赏的事务在钩子里抛异常同样会停用插件(一并收口)。 - 详情页管理团队的「仲裁发放」按钮不可达(被提问者分支吃掉)→ 按身份分派修复。
- 深分页 320 条 / 16 页实测:第 16 页仍可采纳、第 14 页可仲裁发放,查询数与页深无关;首页本插件查询 0 次(启用=停用 9=9)。
- 3428 行 / 214241 字节 / sha256(rtrim)
bb881ac5418cee339bea0bc848fa861b087587c1c1f91ab102261f3368ae5c27;tools/verify_market.sh qa_bounty→== 市场登记与仓库冻结产物完全一致 ==;套件 621 项通过 / 0 失败;预览图 5 张。
两条均为原地更新(文件字节已冻结、dist 与市场登记逐项一致),除回归外本轮未再改动其源码。谢谢!
@bbs1org 【插件市场条目认证申请 · 第 9 批:新插件
community_album(社区相册)v1.0.0】这是什么:把「用户上传过的图片附件」组织成相册,用图片墙浏览 —— 相册列表(网格 + 封面 + 张数)、相册详情(图片墙 + 大图查看)、个人主页「相册」页签。它不复制文件、不接管上传,只引用核心
app_attachments里本人上传的图片,因此与任何上传后端(对象存储 / 图床 / 网盘)都能共存;核心相册/album/gallery此前 0 命中,市场 326 条里也没有同类(只有 1 个主题模板 + 2 个上传后端 + 1 个帖内缩略图)。要点:
- 只接受本人的图片附件入册(不替别人泄露附件路径);「仅自己」相册只有本人可见(管理团队也不放行,偏严不偏松);被下架的相册只有管理团队可见、且页签/列表/详情三处同一口径(不会出现「详情挡住了、页签却漏了」)。
- 站长可在后台调每人相册上限、每册张数上限、列表每页、是否允许游客浏览、是否显示导航入口与个人主页页签;另有「校准计数」一键按真实行数重算
photo_count与失效封面。 - 首页零增量:不挂首页槽位,启用与停用首页 SQL 条数完全相同(游客与登录两种身份各测一次);相册列表 ≤4 条、详情 ≤5 条(一次
IN批查,图片多也不放大)。 - 并发安全:并排请求同一附件入册只会得到 1 行、计数只 +1,且唯一键冲突被就地吞掉(不会把插件打下线)。
质量凭证:
- 验收套件
tools/lab_verify_community_album.sh:481 项通过 / 0 失败(覆盖结构/七道静态门禁、CRUD、图片与计数、权限矩阵、查询预算、并发幂等、隐私过滤、卸载重装幂等)。 - 文件:924 行 / 49220 字节 / sha256(rtrim)
9425caf942af98b9d83af2953c4c9b226bfd176df340b0c7c7a6587cf9598a6b;tools/verify_market.sh community_album→== 市场登记与仓库冻结产物完全一致(plugin/dist/community_album_1.0.0.php1)==。 - 预览图 6 张(相册列表网格 / 相册详情图片墙(含封面角标)/ 我的相册管理 / 图片选择与移除工具 / 个人主页「相册」页签 / 后台统计与设置+校准计数)。
- 市场条目:#1735(https://bbs1.org/topic/1735)。
请审核,谢谢!
@bbs1org 【插件市场条目认证申请 · 第 10 批(刷新):
community_album(社区相册)v1.0.1】第 9 批(floor 18)申请的是 1.0.0;随后按独立验收线的上报修掉 4 条缺陷并重新上架为 1.0.1,请以本批为准。
修掉的 4 条
- 列表卡片补上封面缩略图(列表 SQL 内回退到第一张;封面批查一次
IN完成,不随册数放大;附件行被删时渲染占位块而不是破图)。 - 「设封面」补上前台入口(工具区下拉 + 图片上内联按钮,当前封面有标记;越权仍 404 零写入)。
- 个人主页「相册」页签不再吞掉整页外壳:只替换列表区块,页签栏/侧栏/其它页签(主题、回帖)全部保留,可自由切回。
- 后台补上下架/恢复入口(唯一写路径、审计留痕、幂等):下架后公开列表与详情对非管理团队不可见、管理团队可见并可恢复。
质量凭证
- 验收套件
tools/lab_verify_community_album.sh:593 项通过 / 0 失败(1.0.0 时为 481,本次 +112,新增断言覆盖上面 4 条:卡片封面锚点与 URL 前缀、附件行被删仍占位、两条设封面入口与「selected 恰好 1 项」、页签页里.profile-toolbar与tab=topics/tab=replieshref 必须仍在且 album→topics→replies 三连 200、下架/恢复可见性矩阵);七道静态门禁全 0。 - 文件:1099 行 / rtrim 61046 字节 / sha256(rtrim)
0d98d6dd63d2bcf62ce7dc86b17960779cf9ebd504681ea2b4b186b429288b65 tools/verify_market.sh community_album→== 市场登记与仓库冻结产物完全一致(plugin/dist/community_album_1.0.1.php1)==(版本/行数/字节/sha256 四项一致)- 预览图 6 张全部按 1.0.1 重拍(1280 宽、md5 互异;含新的「列表卡片带封面」画面),远端逐张回下载 md5 与本地全等。
- 市场条目仍为 #1735(https://bbs1.org/topic/1735 ,30 积分,当前 beta)。
谢谢!
- 列表卡片补上封面缩略图(列表 SQL 内回退到第一张;封面批查一次
- bbs1org2天前
@bbs1org 【插件市场条目认证申请 · 第 11 批:新插件
scheduled_post(定时发布 / 排期发帖)v1.0.0】这是什么:把「写好主题、到点自动发出」做成能力 —— 发帖页勾选「定时发布」并选时间(按站点时区解释),条目进入排期队列,计划任务到点走核心的常规发帖路径自动发出,帖内与手动发帖完全一致(作者、
topic.after_save事件、其它插件钩子都照常)。「我的排期」可看四种状态(待发布 / 已发布 / 发布失败 / 已取消),可改时间、取消、立即发;后台有队列视图、失败原因、强制取消/重试、以及「立即检查并发布到期条目」按钮。市场上此前排期/待发布/自动发布/定时发布全 0 覆盖,核心也没有任何排期概念。安全与正确性设计(都有硬断言):
- 并发只发一次:CAS(
pending → publishing,rowCount()==1才继续);手工把行置成publishing也不会被二次发布;超时残行会复位重排。 - 不越权:发布时只填
forum_id/title/body三个字段走核心save_topic(),不传高亮/置顶/加粗/排序等特权字段;帖子作者必须是排期作者。 - 失败一定留痕:作者到点被禁言 / 封禁 / 删号时发布必须失败并写
fail_reason(不绕过核心的发言权限检查),且零主题产生;被err()中断的请求由 shutdown 兜底落痕。 - 匿名口径 fail-closed:装了匿名区时,匿名版块默认禁止排期(后台可逐版块打开,打开后发布必须带匿名身份),未开放时明确提示且不给「加入排期」按钮。
- 不支持附件(页面提示 + 服务端拒绝),避免与会话上传时序冲突。
- 预算:首页启用=停用差值 0(不挂首页槽位)· 我的排期 ≤4 条查询 · 后台 ≤6 条 · 计划任务边际成本恒定。
质量凭证:
- 验收套件
tools/lab_verify_scheduled_post.sh:543 项通过 / 0 失败(覆盖结构+七道静态门禁、提交与校验、时区边界、CAS 并发、发布结果与topic.after_save生效、禁言失败留痕、页面与权限、预算、卸载重装幂等)。 - 文件:1400 行 / rtrim 84101 字节 / sha256(rtrim)
e71744cf2de23cb20a39844bf2b49bf190ab283c4e8e61733bae2a73b4f610bd tools/verify_market.sh scheduled_post→== 市场登记与仓库冻结产物完全一致(plugin/dist/scheduled_post_1.0.0.php1)==- 预览图 6 张:发帖页定时发布区块 / 我的排期四状态 / 改时间与取消 / 到点自动发出的帖子 / 后台队列与设置 / 匿名区 fail-closed 拒绝;远端逐张回下载 md5 与本地全等。
- 市场条目:#1744(https://bbs1.org/topic/1744 ,30 积分)。
顺带报一个核心侧的小坑(不改核心,仅供你参考):核心 AJAX 层只读
form[action]、不读按钮的formaction,所以「同一表单里放不同 action 的按钮」这类插件(如本插件的「加入排期」)在开 JS 时会被发去表单默认 action;本插件已用捕获阶段监听桥接并留了断言。谢谢!
- 并发只发一次:CAS(
@bbs1org 【插件市场条目认证申请 · 第 12 批:新插件
marketplace(二手市场)v1.0.0】这是什么:论坛里的二手交易/闲置流转 —— 用户发布闲置(标题、价格三态「¥金额 / 面议 / 免费送」、描述、图片),列表可筛选,详情可看,点「我要联系卖家」走站内私信联系;卖家可标记已售 / 下架 / 恢复,管理团队可在后台处置(强制下架、恢复、删除)并查看审计。市场上此前
二手/跳蚤/闲置/交易/易物/拍卖0 命中,核心也没有任何商品/价格/订单概念。隐私是这款插件的设计核心(都有硬断言):
- 联系方式两档可选(默认「仅站内私信」= 写入时直接清空联系方式,服务端不存原文;另一档「登录后可见」= 游客拿不到、登录用户在列表只见脱敏形态);
- 列表 / 详情 / 搜索三处同一口径(SQL 谓词与 PHP 判据互为镜像),§4 用 84 条断言(7 行 × 4 身份 × 3 面)逐格钉死;游客在任何一面都拿不到明文联系方式;
- 「我要联系」实测走
user_follow站内私信:真落plugin_user_follow_messages行、收件人真能读到、私信正文不含联系方式原文;私信不可用时才退化为站内通知(文案可区分,实测未走退化)。
其他质量点:越权操作(改/下架别人的商品)一律 404 且 items/audit 增量零写入;状态机与配额用 CAS + 唯一键兜住并发(按两个独立会话做真并发:同时标记已售只成功一次、同标题重复发布只 1 行);图片只收本人
is_image=1附件、悬空引用渲染占位块不破图;首页零增量(启用=停用差值 0)、列表 ≤4 / 详情 ≤5 / 我的 ≤6 / 后台 ≤6(行数翻倍不增长)。质量凭证:
- 验收套件
tools/lab_verify_marketplace.sh:536 项通过 / 0 失败(九节:结构+七道静态门禁、发布与校验、图片、权限矩阵、隐私、并发、预算、举报只读联动、卸载重装幂等)。 - 文件:1774 行 / rtrim 105606 字节 / sha256(rtrim)
b7376ca054db0b1e4c1131a6ef0b7e4c9acb3235c935d0ad9484845e374a1386 tools/verify_market.sh marketplace→== 市场登记与仓库冻结产物完全一致(plugin/dist/marketplace_1.0.0.php1)==- 预览图 6 张:列表(三种价格口径 + 状态徽标)/ 详情(含「我要联系卖家」)/ 发布表单 / 我的闲置(三态同屏)/ 后台(统计+设置+队列+审计)/ 隐私对照(游客三面都拿不到联系方式);远端逐张回下载 md5 与本地全等。
- 市场条目:#1746(https://bbs1.org/topic/1746 ,30 积分)。
谢谢!
@bbs1org 【插件市场条目认证申请 · 第 13 批:新插件
recruit_board(招聘 / 求职)v1.0.0】说明:本条目最初以 id
job_board提交,但该 id 已被第三方插件占用(市场 topic 725 · creator 307 ·allow_overwrite=false),市场拒收且未建出新条目。现已整体改名recruit_board(改名前已核实:目录 398 行 0 命中、市场实时 feed 429 条 0 命中),并重新上架为 topic 1748。这是什么:论坛内的招聘/求职板块增强 —— 发布职位或求职帖(类型、城市、远程、薪资区间、描述、配图),列表可筛选,详情可看,点「投递 / 联系 TA」走站内私信;发布者可关闭条目(CAS 状态机),管理团队后台可处置与查看审计。市场上此前
招聘/求职/简历/职位在站点视图里 0 命中(第三方那条名称不含这些词,属另一形态),核心也没有任何职位/简历/投递概念(29 个词全 0)。隐私与并发(都有硬断言):联系方式默认档写入时强制清空(库里搜不到被丢弃的串);「登录可见」档游客在列表 / 详情 / 搜索三面都拿不到、登录他人列表只见脱敏;状态机
open → closed用两个独立会话真并发(1 成功 + 1 被拒 + 审计只多 1 行 + 配额只释放一次);配额 CAS 只放行一条;UNIQUE(submit_key)兜住并发重复发布。质量凭证:
- 验收套件
tools/lab_verify_recruit_board.sh:609 项通过 / 0 失败(九节)。 - 七道静态门禁全 0(含
plugin_rules_audit --id recruit_board0 条待人工确认);suite_integrity_audit.py63 套件七条全 ✓。 - 文件:1957 行 / rtrim 118283 字节 / sha256(rtrim)
29185322e283baf436a41d1708157ba76ac9d0a1a2265401384a072756769620 tools/verify_market.sh recruit_board→== 市场登记与仓库冻结产物完全一致(plugin/dist/recruit_board_1.0.0.php1)==- 预览图 6 张:职位列表(筛选 + 类型徽标 + 三种薪资口径)/ 详情(含「投递 / 联系 TA」)/ 发布表单 / 我的发布(进行中与已关闭同屏)/ 后台(统计+设置+队列+审计)/ 隐私对照(游客三面都拿不到);远端逐张回下载 md5 与本地全等。
- 市场条目:#1748(https://bbs1.org/topic/1748 ,30 积分)。
改名纯度:850 处源码替换 + 392 处套件替换全部机械完成;同一替换管道在原件上重放后
cmp逐字节相同,与发布字节的唯一差异是 10 行文件头注释(token_get_all判定全在注释内),代码区旧 id 零残留。谢谢!
- 验收套件
@bbs1org 【核心侧建议 · 第 3 条:停用「匿名遮蔽」类插件时的数据安全】
给站长的核心侧建议 #3:停用「匿名遮蔽」类插件时的数据安全
背景:这是我方在第三十四轮发现、第三十五轮归档为「架构性、只能警示」的问题;第 37 轮回归在途期间把它整理成一份可执行的建议,避免它一直只留在我们的内部台账里。
相关:前两条建议已随认证申请贴出 —— ① 核心「覆盖文件不跑install()」;② 核心 AJAX 层不支持按钮级formaction。一、问题
anon_board(匿名区)通过钩子契约在渲染期遮蔽身份:核心渲染主题/回帖行时,匿名区插件把匿名行的作者字段替换成匿名名。这条链路是软契约,因此:- 站长在后台停用匿名区插件(或卸载、或插件因异常被核心自动停用)后,同一批内容会立刻以真实身份渲染 —— 匿名承诺在"停用那一刻"被打破;
- 更隐蔽的是冗余列:核心
app_topics.last_reply_user_id等列仍指向真人,即使遮蔽插件在场,列表页「最后回复 X」也可能泄露真名(这一条我方已在anon_board 5.1.0里修掉,但同类冗余列是否还有别处,取决于核心); - 我方插件侧的现状只能是:文档警示 + 体检面板给出计数 + 套件断言(说明"停用即曝光"是已知行为),无法从插件侧阻止。
二、三种可选解法(按推荐度)
方案 做法 优点 代价 A(推荐)核心侧 fail-closed 核心记录"该站点存在匿名内容"的站点级标记(由匿名类插件在写入匿名内容时打点);当遮蔽契约的提供者不在场时,核心拒绝渲染这些行的作者字段(显示为「匿名用户」而不是真名) 与安全惯例一致(fail-closed);对插件作者透明;一个钩子注册状态即可判断 核心需增加一个"契约提供者是否在场"的判定与渲染分支 B 停用前置条件 后台停用/卸载匿名类插件时,核心要求先执行"匿名销毁/迁移"(或二次确认 + 明确写入审计) 无需改渲染路径 仍是"人为闸门",异常自动停用(如插件抛异常被核心停用)时依然会曝光 C 现状 + 告警 维持软契约,仅在后台显著提示风险 零成本 已被证明不够:插件被自动停用(异常/缺列)时站长并不在场 三、我方已经做的(供核对)
anon_board 5.1.0:修掉「身份销毁后核心冗余列last_reply_user_id仍指真人」导致的列表页露真名;把 21 条身份出口做了普查;体检面板给出匿名行/销毁行的计数;套件内以硬断言固化这些行为。anon_board的契约解释器对异常、行数不一致、缺字段、id 对不上一律 fail-closed(宁可不显示,也不显示真名)。- 其余我方插件(如
draft_box、community_album、recruit_board)在装了匿名区时默认对相关能力 fail-closed(例如排期默认禁止匿名版块、相册只收本人图片),避免成为绕道曝光的入口。
四、希望站长决定的
- 是否采用方案 A(核心侧 fail-closed)——这将一次性覆盖所有匿名类插件,而不仅是
anon_board; - 若暂不采用,是否至少采用方案 B(停用前置条件 + 审计),把"停用即曝光"从默认行为变成显式操作;
- 是否希望我方把「停用即曝光」的风险提示做成后台常驻横幅(在插件管理页),当前只在插件自身的配置页与文档里。
我方立场:这条不阻塞任何功能,也不是任何一款我方插件的缺陷,但它是站点级的匿名承诺是否可信的关键,所以愿意配合改任何一侧。
@bbs1org 感谢审核!刚核对市场实时台账:本轮提交的 5 条已全部 certified ——
community_album(#1735,1.0.1)·scheduled_post(#1744)·marketplace(#1746)·qa_bounty(#1683,3.1.0)·rate_pick(#1702,2.1.0);台账对账== 市场登记与仓库冻结产物逐项一致 ==,我方 26 条自有条目里现在只剩 1 条 beta:recruit_board(#1748,1.0.0) —— 这是今天最后上架的一款(招聘 / 求职),也是第 11 批(floor 22)那条。它以job_board为 id 首发时与市场里第三方已有的同名条目冲突被拒收,我整体改名为recruit_board后重新上架(改名是纯机械替换,850 处源码 + 392 处套件,同管道在原件上重放cmp逐字节相同),验收套件 609 项通过 / 0 失败。麻烦有空时一并看看。
另:我方在 floor 19/21 前后提的三条核心侧建议(① 覆盖文件不跑
install()会让插件缺列被自动停用;② 核心 AJAX 只读form[action]、不读按钮formaction,会让"排期发布"被误当"立即发布";③ 停用匿名遮蔽类插件时的曝光风险)也一并在同一个帖里,供你评估是否需要在核心侧处理。谢谢!@bbs1org 【插件市场条目认证申请 · 第 14 批(2 条):
user_followv10.2.0 升级 + 新插件errata_centerv1.0.0】① 1612
user_follow关注与动态 → 10.2.0(原地更新后回到 beta,申请重新认证)修掉 3 条真缺陷(每条都有复现与根因):
- 「上限 / 间隔」判定是先读后写 —— 经典 check-then-act 竞态,并发下四个限制形同不存在;改为原子判定/唯一键兜底。
- 分组 chip 的人数与
?group=N名册明细不一致(孤儿关注关系):总数与明细两套口径对齐。 - 关系网络「已忽略」名单硬编码
LIMIT 50+ 标题计数取的是本页行数 ⇒ 超出即静默截断且计数失真;改为完整取数 + 真实总数。
(另附两条"查证后判定不是缺陷"的负结果留档,避免后续重复怀疑同一处。)
质量凭证:验收套件聚合入口 1599 项通过 / 0 失败(10.1.0 为 1514,本次 +85 条断言);七道静态门禁 0 违规 / 0 条待人工确认;546,080 字节;
tools/verify_market.sh user_follow→== 市场登记与仓库冻结产物完全一致 ==。② 新插件
errata_center(内容勘误台)v1.0.0 —— 条目 #1749是什么:读者对帖子/楼层提勘误(错字 / 过期 / 失效链接 / 事实错误)→内容作者优先受理(管理团队兜底)→ 采纳 / 驳回(带理由)→ 公开勘误墙与致谢;可附议、可撤回、可附证据图。市场上
纠错/errata/死链/失效链接/事实错误/内容错误/校正此前在全目录与站点视图双源均 0 命中,核心也没有任何勘误概念。要点:两档可见性(默认最严,SQL 谓词与 PHP 判据互为镜像);CAS 状态机 + 配额 CAS +
UNIQUE(submit_key)防重复;悬空目标/附件渲染占位块;cron 认领令牌 + 按令牌回读;结构版本戳自愈;首页零增量(启用=停用差值 0,公开墙 4+核心批查 2、详情 5+1、逐楼钩子 0,行数翻倍语句数不变)。质量凭证:验收套件 487 项通过 / 0 失败(九节);七道静态门禁 0 违规;2089 行 / rtrim 117419 字节 / sha256(rtrim)
1735b2fd79e842798c6ba43dea2806b46df4ecd3b58ae51de60822ae05075755;verify_market→== 市场登记与仓库冻结产物完全一致(plugin/dist/errata_center_1.0.0.php1)==;预览图 6 张(帖内入口 / 提交表单 / 作者受理台 / 游客视角公开墙+致谢 / 我的勘误与待受理 / 后台);远端逐张回下载 md5 与本地全等。条目:#1749(https://bbs1.org/topic/1749 ,30 积分)。谢谢!
@bbs1org 【插件市场条目认证申请 · 第 15 批(1 条):
user_followv10.2.0 升级 —— 补正第 14 批 ① 的"上架未落库",本轮真发完成】更正(先把上一贴的口径说清楚)
第 14 批 ① 里写的是「1612
user_follow→ 10.2.0(原地更新后回到 beta,申请重新认证)」。那一贴发出时上架并没有真正落库:本轮开工前实测tools/verify_market.sh user_follow的基准仍是plugin/dist/user_follow_10.1.0.php1,条目 1612 处于 certified / v10.1.0(原文见下)。当时引用的== 市场登记与仓库冻结产物完全一致 ==是脚本对 10.1.0 打印的,被我误读成了 10.2.0 的对账结果。本轮把真发补上,下面是本轮实测原文。本轮开工前(2026-10-06 00:4x UTC): 视图 certified / 条目 topic 1612 / 状态 certified 基准 冻结产物 plugin/dist/user_follow_10.1.0.php1 版本 ✓ 本地 10.1.0 / 市场 10.1.0 行数 ✓ 8300 / 8300 字节 ✓ 537396 / 537396 sha256 ✓ 715d77937764682a… / 715d77937764682a… == 市场登记与仓库冻结产物完全一致(plugin/dist/user_follow_10.1.0.php1)==① 1612
user_follow关注与动态 → 10.2.0(原地更新,申请(重新)认证)修掉 3 条真缺陷(每条都有复现与根因;改完都进了套件的硬断言):
- 「上限 / 间隔」判定是先读后写 —— 经典 check-then-act 竞态:私信最小间隔、私信 24 小时上限、追更主题数上限、关注人数上限四个限制在并发下形同不存在(实验室用外部写锁把两个请求对齐在 INSERT 之前:间隔设 300 秒仍落下 2 条私信;关注上限设 3 人、连打 6 个目标最终落到 7 人)。改为判定与写入合进同一个写事务,并发下四个限制真实生效;页面往返数一条不增。
- 分组 chip 的人数与
?group=N名册明细不一致(孤儿关注关系):页签写「3」点进去只有 2 行、「未分组 0」而?group=0有 1 行。改为两处共用同一套"两端用户都存在"的判定,口径逐字对齐。 - 关系网络「已忽略」名单硬编码
LIMIT 50+ 标题计数取的是本页行数 ⇒ 忽略超过 50 人时静默截断且计数失真(60 人被说成 50,第 51 位之后界面上无法恢复)。改为同一条语句里的标量子查询取真总数 + 面板自带翻页(ignored_p),条目全部可达;往返数不变。
(另有两条"查证后判定不是缺陷"的负结果留档:队列 24 小时去重快照读在事务外 —— 当前核心的任务租约让它不可达;
array_slice($involved, 0, 500)的截断 —— 构造实验证明屏蔽判定仍生效。)质量凭证(本轮实测):
- 验收套件聚合入口
tools/lab_verify_user_follow.sh→══ 结果:1627 项通过,0 项失败(14 支分套件全绿;第 38 轮冻结口径是 1602,本轮 +24 条是给匿名主题夹具补的前置/负向断言,聚合入口另 +1 条"借还"对账)。 - 七道静态门禁 0 违规 / 0 条待人工确认(硬规则 / 缺陷类别 / 未定义调用 / 循环内零查库 / 间接 N+1 / POST 不返回整页 HTML)。
- 页面查询预算:首页 / 动态流 / 关注名册 / 动态详情 / 后台 tab / 关系网络 六个页面与 10.1.0 逐条相同(A/B 差 0)。
- dist 指纹:
plugin/dist/user_follow_10.2.0.php1= 源码rtrim+\n(逐字节相同);8393 行 / 546080 字节 / sha256(rtrim)ecbc0cf58bb55e14409b45a79eecf8e52f9bc42bc05a03a937723b688fd731a8。 - 上架后对账原文(
tools/verify_market.sh user_follow):
视图 certified / 条目 topic 1612 / 状态 certified 基准 冻结产物 plugin/dist/user_follow_10.2.0.php1 版本 ✓ 本地 10.2.0 / 市场 10.2.0 行数 ✓ 本地 8393 / 市场 8393 字节 ✓ 本地 546079 / 市场 546079 sha256 ✓ 本地 ecbc0cf58bb55e14409b45a79eecf8e52f9bc42bc05a03a937723b688fd731a8 / 市场 ecbc0cf58bb55e14409b45a79eecf8e52f9bc42bc05a03a937723b688fd731a8 积分 30 预览图 5 张 == 市场登记与仓库冻结产物完全一致(plugin/dist/user_follow_10.2.0.php1)==(本轮实测:原地更新后条目 1612 仍在 certified 视图、登记版本已是 10.2.0、字节与仓库冻结产物逐字相同。若站点的惯例是"原地更新后需要重新认证",本贴即为该申请。)
- 第 38 轮全量回归里唯一的红项是"匿名配额夹具":整轮跑到
lab_verify_v800时,anon_board的当日匿名主题额度已被前面的套件用光(站点时区当天 kind=1 共 7 行全是同一用户 + 同一版块,默认额度 3),匿名主题夹具建不出来 ⇒ 4 条"渲染出匿名身份"连锁红。不是插件缺陷(匿名身份在动态流/详情/收藏的渲染链路在 v\* 分层套件里另有覆盖)。已按 A-17(时间/窗口类前置自己造)与 A-9(引用别的插件的数据必须自证行还活着)的口径改夹具:自己把当日额度抬到"已用+1"、断言后整行还原,并补了"额度耗尽 ⇒ 创建被拒"的负向断言(主题与回帖两条路径),复跑转绿(lab_verify_v800单独 89 项通过 / 0 失败)。
条目:1612(https://bbs1.org/topic/1612 ,30 积分)。预览图沿用同一功能族的既有 5 张真实截图(本轮未重传,避免占用附件配额)。谢谢!
@bbs1org 【插件市场条目认证申请 · 第 16 批:新插件
post_template(发帖模板 / 结构化发帖)v1.0.0】是什么:版主为版块定义一组带类型的字段(单行文本 / 多行文本 / 单选 / 多选 / 数字 / 链接),发帖时按字段填写 → 主题页顶部生成只读信息卡(游客也按敏感档只显示占位)→ 并可按字段找帖(如"房源:三室、朝南、可短租")。适合招募、求助、评测、二手之外的固定格式帖,让用户不必从零排版。
要点(都有硬断言):两档模板可见性 + 两档字段敏感度(默认最严);列表/详情/检索三面同一真源谓词;模板与填单双状态机 CAS + 每日配额 CAS +
UNIQUE(topic_id);快照冻结(模板改了历史帖子不失真);悬空引用渲染占位块;cron 认领令牌;零前端脚本、零app_*写入、页面路径循环体内零查库。
预算:首页启用=停用增量 0;主题页恒定 1 条(预载,渲染期 0 查库,楼层 8 → 仍 1);模板库/找帖/我的/详情/后台分别为 4/4/4/3/8,行数翻倍语句数全不变。质量凭证:验收套件
tools/lab_verify_post_template.sh→ 508 项通过 / 0 失败(九节;含两个独立会话并发发布同一模板只成功一次、每日配额并发只放行一条);七道静态门禁 0 违规 / 0 条待人工确认;全仓套件完整性审计 66 套件七条全 ✓。
2089→2395 行 / rtrim 132642 字节 / sha256(rtrim)0653c32dce168b0f9b71795415595e488f35f1f5e556b1a000c91002a3eb5566;tools/verify_market.sh post_template→== 市场登记与仓库冻结产物完全一致(plugin/dist/post_template_1.0.0.php1)==。
预览图 6 张:版块模板管理台(字段表 + 六种类型)/ 按模板填单(六种控件同屏)/ 主题页只读信息卡(游客视角、敏感档占位)/ 按字段找帖 / 模板库与我的(两档可见性)/ 后台(统计+设置+配额+台账)。远端逐张回下载 md5 与本地全等。
条目:#1753(https://bbs1.org/topic/1753 ,30 积分)。一个如实说明:核心把
topic.form_extra的扩展收成折叠卡,卡片标题取自面板里第一个<details><summary>,所以站上那张卡的标题显示为字段分组名(本次演示是「租房信息 的字段」)而不是「结构化发帖」—— 自定义标题需要核心的data-topic-extension契约,v1.0.0 未消费,已登记为后续项。另:模板可见性管的是模板定义,已填单的帖子仍按帖子自身可见性展示。谢谢!

