Repository navigation
SForum v3.0.14
Maintainable, plugin-first open-source forum framework.
本次更新
- 编辑器:链接标记固定为不蔓延(
inclusive: false),粘贴或插入链接后继续输入不再被并入链接;工具栏在空选区下改为插入 URL 作为链接文字,不再写入 stored mark 把后续正文全部链接化。代码块内多行粘贴保持字面文本,HTML-only 剪贴板与逐行<pre>代码 HTML 都合并成单个 fenced block,多段选区切换代码块只产生一个块(列表 / 引用等多块嵌套选区仍为原生行为,已知限制)。 - AI:「调用成功却不回复」不再被记成成功。既无正文也无工具调用判为失败并带
finish_reason/ reasoning / usage 上下文,空结果永不进入回复结果缓存;回复结果独立成账(新增ai_reply_outcomes,六种稳定 outcome,同触发已发布则幂等跳过、写失败不回滚发布)。后台观测台新增「回复结果」区块、缓存命中徽标与「仅缓存命中」筛选,新增GET /admin/ai/reply-outcomes与排障 CLIsforum ai:reply --topic-id N [--confirm](真实帖子与真实配置、禁缓存、不发布、不写结果表)。 - 论坛:首页排序文案统一为 最近活跃 / 最新发表 / 热门,默认仍是
active;空或非法sort解析为站点默认并最终兜底active,不再静默落到latest。后台「列表默认排序」按现有排序选项渲染并把active标为推荐,补充活跃排序与活动索引的说明。 - Web 可靠性:
无法连接后端 API弹窗改为缓冲探测确认——连接失败先进 pending 并按 1s→2s→4s 退避探测/health,跨过 15s 宽限才打开模态,恢复后自动关闭并出 toast;安全方法(GET)单次原地重试,默认超时放宽到 GET 15s / 写操作 30s 以容忍慢站点。/_nuxt/**chunk 加载失败与动态 import 失败分流为「站点刚发布了新版本,正在刷新」提示加自动刷新(10s 冷却防循环),不再误报后端断线。 - 安全依赖:
dompurify升到 3.4.17,修两条本日公开的公告(GHSA-cg2g-xh64-v4q7:SAFE_FOR_TEMPLATES经拼接模板表达式绕过;GHSA-mrv2-3pqr-j5jr:IN_PLACE模式下移除父/兄弟节点的 hook 导致残留)。正文清洗与 mermaid 渲染共用同一个实例,无需改调用方。
升级提示
- 新增数据库迁移
202610250001_ai_reply_outcomes.sql(建表 + 三条索引 + outcome CHECK),升级时自动执行,无手工步骤。 - AI 执行记录里缓存命中行的
0 ms / 0 token是正确值,不再是需要排查的异常;empty_completion从现在起计入失败,成功率与用量统计口径随之变化。 - 排序:URL 不带
sort仍是站点默认;已把默认排序存为latest的实例不会被自动改写,可在后台一键恢复推荐默认值。 - 本次为正式版,会移动
latest与3.0镜像标签;从 v3.0.13 升级无配置项移除,无需改 env。 - 允许游客或未受信作者发帖的站点建议尽快升级:正文清洗依赖的 dompurify 两条公告已公开,本轮已切到修复版本。
Installation
Docker images:
docker pull ghcr.io/zhuchunshu/sforum-api:v3.0.14
docker pull ghcr.io/zhuchunshu/sforum-migrate:v3.0.14
docker pull ghcr.io/zhuchunshu/sforum-web:v3.0.14Update an existing installation with a verified bootstrap:
(
set -eu
cd /path/to/sforum
bootstrap_dir="$(mktemp -d .sforum-bootstrap.XXXXXX)"
trap 'rm -rf "$bootstrap_dir"' EXIT HUP INT TERM
curl -fsSLo "$bootstrap_dir/sforum-bootstrap.sh" https://github.com/zhuchunshu/SForum/releases/download/v3.0.14/sforum-bootstrap.sh
curl -fsSLo "$bootstrap_dir/SHA256SUMS" https://github.com/zhuchunshu/SForum/releases/download/v3.0.14/SHA256SUMS
(
cd "$bootstrap_dir"
awk '$2 == "sforum-bootstrap.sh" { print }' SHA256SUMS > sforum-bootstrap.sha256
test "$(wc -l < sforum-bootstrap.sha256 | tr -d '[:space:]')" = 1
if command -v sha256sum >/dev/null 2>&1; then
sha256sum -c sforum-bootstrap.sha256
else
shasum -a 256 -c sforum-bootstrap.sha256
fi
if command -v gh >/dev/null 2>&1; then
gh attestation verify sforum-bootstrap.sh --repo zhuchunshu/SForum
fi
)
install -m 0755 "$bootstrap_dir/sforum-bootstrap.sh" ./sforum-bootstrap.sh
rm -rf "$bootstrap_dir"
trap - EXIT HUP INT TERM
./sforum-bootstrap.sh upgrade --version v3.0.14
)Fresh install with the verified deploy bundle:
(
set -eu
mkdir -p sforum
cd sforum
curl -fsSLo sforum-deploy.tar.gz https://github.com/zhuchunshu/SForum/releases/download/v3.0.14/sforum-deploy.tar.gz
curl -fsSLo SHA256SUMS https://github.com/zhuchunshu/SForum/releases/download/v3.0.14/SHA256SUMS
awk '$2 == "sforum-deploy.tar.gz" { print }' SHA256SUMS > sforum-deploy.sha256
test "$(wc -l < sforum-deploy.sha256 | tr -d '[:space:]')" = 1
if command -v sha256sum >/dev/null 2>&1; then
sha256sum -c sforum-deploy.sha256
else
shasum -a 256 -c sforum-deploy.sha256
fi
if command -v gh >/dev/null 2>&1; then
gh attestation verify sforum-deploy.tar.gz --repo zhuchunshu/SForum
fi
tar -xzf sforum-deploy.tar.gz --strip-components=1
./sforum-bootstrap.sh install --yes --version v3.0.14
)Manual download: Download the matching Linux or macOS archive from the assets below.
Documentation
- GitHub Repository
- 中文部署文档
- English Deployment Guide
- 完整变更记录 / Full Changelog:
v3.0.13...v3.0.14