<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>GooseForum</title>
    <link>https://furrytools.net</link>
    <description>一个现代化的论坛系统</description>
    <managingEditor>example@example.example (GooseForum)</managingEditor>
    <pubDate>Tue, 16 Jun 2026 11:02:28 +0800</pubDate>
    <lastBuildDate>Tue, 16 Jun 2026 11:02:28 +0800</lastBuildDate>
    <item>
      <title>Flarum 2.0.0-rc.1 发布 🎉</title>
      <link>https://furrytools.net/p/post/3</link>
      <description>转载并翻译 我们做到了。历经近三年的开发、八个测试版、397 个合并的拉取请求以及 30 位贡献者之后——Flarum 2.0 现已推出首个发布候选版本（Release Candidate 1）。 可供早期采用者在生产环境中安全使用 。从此版本到稳定版的升级路径已完全支持——从 rc.1 到最终 2.0.0 的升级将十分顺畅。请采取常规预防措施：备份数据库，先在本地或预发布环境中测试（若有），并制...</description>
      <content:encoded><![CDATA[<blockquote>
<p>转载并翻译 <a href="https://discuss.flarum.org/d/39118-flarum-200-rc1-released-the-last-mile-to-20">https://discuss.flarum.org/d/39118-flarum-200-rc1-released-the-last-mile-to-20</a></p>
</blockquote>
<p>我们做到了。历经近三年的开发、八个测试版、397 个合并的拉取请求以及 30 位贡献者之后——Flarum 2.0 现已推出首个发布候选版本（Release Candidate 1）。</p>
<p>✅ <strong>可供早期采用者在生产环境中安全使用</strong>。从此版本到稳定版的升级路径已完全支持——从 rc.1 到最终 2.0.0 的升级将十分顺畅。请采取常规预防措施：备份数据库，先在本地或预发布环境中测试（若有），并制定回滚计划。</p>
<p>👀 <strong>你已经在运行它了</strong>。就在这个论坛 —— discuss.flarum.org —— 也已更新至 rc.1。</p>
<p>🧪 <strong>想抢先体验 Flarum 2.0？</strong> 欢迎查看我们的每日构建演示站点：<a href="https://nightly.flarum.site">nightly.flarum.site</a>，该站点每天根据最新的 2.x 代码重建。</p>
<h2 id="发布候选版本-究竟意味着什么">🧭 “发布候选版本” 究竟意味着什么？</h2>
<p>RC 版本是我们认为已经准备好正式发布的版本。它功能完整，API 已冻结，如果没有发现关键问题，rc.1 将直接成为 2.0.0 正式版，且不会再有功能性变更。</p>
<p>具体来说：</p>
<ul>
<li><strong>不再有破坏性变更</strong>。扩展 API 已锁定。一个针对 rc.1 构建、兼容 2.x 的扩展，在 2.0.0 正式版上依然可以工作。</li>
<li><strong>从此拥有干净的升级路径</strong>。如果你正在使用 rc.1，升级到 2.0.0 只需执行一条 <code>composer update</code> 命令——绝无意外。</li>
<li><strong>我们将快速处理回归问题</strong>。任何在 rc.1 中报告的、影响实际使用的回归问题，都将被列为最高优先级处理。</li>
</ul>
<p>现在，轮到你了——<strong>我们需要有人在真实论坛上运行此版本</strong>。我们看到的安装场景越多，2.0.0 正式版发布时的意外就越少。</p>
<ul>
<li><strong>安装它</strong>。在本地，或者在你的预发布环境中——最好能基于一份真实数据的副本。</li>
<li><strong>像日常使用论坛一样使用它</strong>。发帖、回复、管理、上传、搜索、个性化。尝试你依赖的扩展。</li>
<li><strong>告诉我们使用体验</strong>——好的坏的都行。Bug、升级过程中的卡顿、无法工作的扩展、用户界面上的小瑕疵、奇怪的性能下降。另外，“它就这么直接能用了” 对我们来说也很有参考价值。</li>
</ul>
<p><strong>反馈渠道：</strong></p>
<ul>
<li>核心代码的 Bug —— 提交至 <a href="https://github.com/flarum/framework/issues">flarum/framework issues</a></li>
<li>一般性反馈、问题、扩展行为 —— 发布在 <a href="https://discuss.flarum.org/t/support">Support</a> 板块</li>
<li>安全问题 —— 发送邮件至 <code>security@flarum.org</code>（请勿公开讨论）</li>
</ul>
<p>不确定问题属于哪一类？在论坛上发帖讨论即可，我们会帮你归类。</p>
<h2 id="rc-1-中有哪些新变化">✨ rc.1 中有哪些新变化？</h2>
<p>rc.1 是一个侧重于<strong>完善与强化</strong>的版本。除了测试版周期中收到的一些小功能请求外，重点放在了性能、安全性和整体打磨上。以下变化自 <code>beta.8</code> 发布后添加。</p>
<h3 id="安全性强化">🔒 安全性强化</h3>
<p>rc.1 中整合了一系列针对密码流程和会话管理的修复。</p>
<ul>
<li><strong>密码重置令牌现在会在提交时检查是否过期</strong>。此前仅在渲染重置表单时验证过期时间窗口——一个已过期的令牌如果被直接提交，仍有可能完成密码重置。</li>
<li><strong>更改密码后，现在会使所有现有会话失效</strong>。当密码更改时，用户的所有会话、”记住我“令牌和开发者令牌都会被清除。</li>
<li><strong>请求新的密码重置会删除旧的令牌</strong>。任何时候，一个用户只能存在一个有效的密码重置令牌。</li>
<li><strong>强化了通过 URL 获取头像的过程</strong>。用于获取远程头像的 Guzzle HTTP 客户端现在禁用了重定向，强制执行短超时，并在将响应缓冲到内存前拒绝过大的响应。</li>
<li><strong>现在会验证 Logo、Favicon 和深色模式 Logo 的上传</strong>。之前只有头像会通过图片验证器——rc.1 引入了一个共享的 <code>AbstractImageValidator</code>，并将其接入到所有图片上传的控制器中，弥补了之前管理后台图片端点接受非图片上传的漏洞。</li>
</ul>
<h3 id="性能提升">⚡ 性能提升</h3>
<ul>
<li><strong>消除了讨论列表中的 N+1 查询问题</strong>。讨论列表中的一系列 N+1 查询模式（如标签权限子查询、点赞/用户组预加载、擦除请求和消息计数的可见性守卫）已被解决——与 <code>beta.8</code> 相比，论坛首页现在大约只发出四分之一数量的查询。</li>
<li><strong>为 <code>notifications</code> 表添加了新的复合索引</strong>。在大型论坛上，未读计数查询变得明显缓慢。新的 <code>(user_id, is_deleted, read_at, type)</code> 复合索引解决了此问题。</li>
<li><strong>标签别名（slug）现在通过一次查询解析</strong>。<code>TagFilter</code> 之前为每个别名执行一次查询；rc.1 将它们批量处理为一个 <code>whereIn</code> 查询。</li>
<li><strong>前端性能优化</strong>。在文档头部添加了预连接 / DNS 预取提示；为 Logo 应用了 <code>fetchpriority</code> 属性和预加载提示；以及一个基于 <code>sessionStorage</code> 的 CSS 加载器，消除了冷加载时可能出现的无样式内容闪烁。视口（viewport）元标记也已放宽，移动端不再禁止捏合缩放。</li>
</ul>
<h3 id="小功能添加">➕ 小功能添加</h3>
<ul>
<li><strong>扩展管理页上的重置设置按钮</strong>。每个捆绑扩展的管理页面现在都有一个 “重置为默认值” 按钮，由新的 <code>DELETE /api/settings</code> 端点和 <code>Settings\Event\Reset</code> 事件支持，扩展可以监听该事件以执行自己的清理工作。</li>
<li><strong>HiDPI 头像</strong>。上传的头像现在会自动生成 <code>@2x</code> 和 <code>@3x</code> 变体，并且 <code>&lt;Avatar&gt;</code> 组件会渲染 <code>srcset</code> 属性，使头像在高清视网膜屏和移动设备上显示得更清晰。</li>
<li><strong>废弃扩展列表每周自动同步</strong>。面向管理员的废弃扩展包警告系统现在会每周重新同步 <code>flarum/abandoned-extensions</code> 列表，提供了一个可按需触发的 “立即检查” 按钮，并在已安装的扩展变为废弃状态时发送管理员通知。</li>
<li><strong>新增 <code>forum-widget</code> 扩展分类</strong>。在扩展列表中的“主题”和“语言包”之间，新增了一个用于小部件风格扩展的分类。</li>
<li><strong>新增“存在频道”（Presence Channel）授权扩展器</strong>。实时扩展（realtime）获得了一个新的 <code>Realtime::authorizePresenceChannel</code> 扩展器，允许扩展在 WebSocket 认证层控制对“存在频道”的访问权限。</li>
</ul>
<h2 id="修复与打磨">🛠️ 修复与打磨</h2>
<h3 id="前端与移动端">📱 前端与移动端</h3>
<ul>
<li>在移动端撰写回复时，<code>ReplyPlaceholder</code> 组件会显示用户头像和徽章。</li>
<li>返回导航不再丢失已加载页面或滚动位置——<code>PaginatedListState</code> 现在通过值而非引用比较参数。</li>
<li>恢复 <code>UserCard</code> 控件图标，使移动端的控制按钮重新可见。</li>
<li>管理后台的导航下拉菜单在移动端不再闪烁。</li>
<li>修复管理后台 <code>StatusWidget</code> 在移动端的布局——项目现在以网格形式排列，工具按钮横跨整行。</li>
<li>修复 FontAwesome Kit 不再覆盖隐藏图标上的 <code>display: none</code> 样式。同时清理了标签选择和订阅下拉菜单的标记。</li>
<li>修复某些布局中底部页面内边距被裁剪的问题。</li>
<li>修复单选按钮组冲突——同一页面上的多个单选按钮组不再共享相同的 <code>name</code> 属性并相互干扰。</li>
<li>全新安装时，管理后台的头像驱动选择器现在会显示正确的默认值，废弃扩展同步状态消息也有了合适的内边距。</li>
</ul>
<h3 id="路由与-url">🧭 路由与 URL</h3>
<ul>
<li>URL 末尾的斜杠不再导致 404 错误。<code>ResolveRoute</code> 现在会在分派请求前去除末尾的斜杠，因此 <code>/d/123-foo/</code> 和 <code>/d/123-foo</code> 的解析结果相同。</li>
<li>名称格式错误的扩展不再引发 PHP 警告。<code>ExtensionManager</code> 现在会跳过不符合 <code>供应商/包名</code> 格式的包名，而不是在 <code>nameToId()</code> 函数中产生“未定义数组键”的警告。</li>
</ul>
<h3 id="标签扩展">🏷️ 标签扩展</h3>
<ul>
<li><code>bypassTagCounts</code> 权限现在对非管理员用户也生效——之前的检查使用了仅限管理员的快捷方式，而实际上应该调用 <code>hasPermission</code> 方法。</li>
<li>标签首页的元描述现在会使用你的论坛描述（仅在未设置描述时回退使用 “All Tags” 的翻译）。</li>
</ul>
<h3 id="置顶扩展">📌 置顶扩展</h3>
<ul>
<li>修复了 <code>is_unread_sticky</code> 子查询中 <code>id</code> 列歧义的问题——那些需要关联讨论表的扩展（如 byobu）不再会因为 MySQL 报“列歧义”错误而中断。</li>
</ul>
<h3 id="api-与序列化">🔌 API 与序列化</h3>
<ul>
<li>属性字段现在能正确通过 <code>serializeValue</code> 方法处理——修复了一个长期存在的 Bug，即 <code>allowSignUp</code> 这类布尔值之前被作为字符串输出。</li>
<li>当类型为 <code>Str</code> 转换的属性返回数组时，数组值得以保留，避免了扩展中出现 “Array to string conversion” 错误。</li>
<li><code>Arr::serialize()</code> 现在能正确处理如 <code>MessageBag</code> 这类实现了 <code>JsonSerializable</code> 接口的对象。</li>
</ul>
<h3 id="社区用语">💬 社区用语</h3>
<ul>
<li>将用户界面中的一处 “community” 措辞替换为 “forum” 以保持一致性。</li>
</ul>
<h2 id="生态系统已准备就绪">🌱 生态系统已准备就绪</h2>
<p>rc.1 是向扩展生态系统发出的信号：API 已经稳定。如果你维护着一个扩展，现在是时候发布你兼容 2.x 的版本了。</p>
<p><strong>语言包</strong>——<a href="https://discuss.flarum.org/u/rob006">@rob006</a> 一直在协调语言包的更新。如果你维护着某个翻译，请关注相关的讨论帖。</p>
<p><strong>Flarum 之友 (FoF)</strong>——FoF 扩展目录已几乎完全覆盖 2.x 版本。感谢所有相关贡献者。</p>
<p><strong>扩展开发者</strong>——在 rc.1 到稳定版之间，我们正在优先解决最后的兼容性障碍。如果核心代码中存在阻碍你发布扩展的问题，请提交 issue。</p>
<h2 id="亲自尝试">🚀 亲自尝试</h2>
<ul>
<li><strong>在线演示</strong>：<a href="https://nightly.flarum.site">nightly.flarum.site</a>，每日重建</li>
<li><strong>就在此处</strong>：<a href="https://discuss.flarum.org">discuss.flarum.org</a> 正在运行 rc.1</li>
<li><strong>更新你的安装</strong>：<code>composer update -W</code>，然后执行 <code>php flarum migrate</code>，<code>php flarum cache:clear</code>，以及 <code>php flarum assets:publish</code>（请务必先备份，并在本地或预发布环境中测试）</li>
</ul>
<h2 id="致谢">💙 致谢</h2>
<p>感谢所有为此版本贡献代码、报告 Bug 以及测试测试版的各位。</p>
<p>特别感谢 <a href="https://discuss.flarum.org/u/ClaudiusH">@ClaudiusH</a>——他投入了大量时间运行每日构建版本，在整个测试版周期中不断发现大大小小的问题，并不知疲倦地维护德语语言包。本版本中很大一部分打磨工作都源于他的报告。谢谢你，Claudius。</p>
<h2 id="完整更新日志">📋 完整更新日志</h2>
<h3 id="新增-added">新增 (Added)</h3>
<ul>
<li>(core) 在扩展管理页面添加“重置设置”按钮及确认弹窗，由 <code>DELETE /api/settings</code> 和 <code>Settings\Event\Reset</code> 事件支持 (<a href="https://github.com/ianm">@IanM</a> #4522)</li>
<li>(core) 新增 <code>forum-widget</code> 扩展分类 (<a href="https://github.com/ianm">@IanM</a> #4543)</li>
<li>(core) 支持 HiDPI 头像 srcset — 上传时生成 @2x/@3x 变体，并在用户资源中暴露 <code>avatarSrcset</code> (<a href="https://github.com/ianm">@IanM</a> #4555)</li>
<li>(core) 废弃扩展列表每周自动同步，并附带管理员通知和手动“立即检查”按钮 (<a href="https://github.com/ianm">@IanM</a> #4560)</li>
<li>(realtime) 新增 <code>Realtime::authorizePresenceChannel</code> 扩展器，用于控制“存在频道”的访问权限 (<a href="https://github.com/ianm">@IanM</a> #4573)</li>
</ul>
<h3 id="安全-security">安全 (Security)</h3>
<ul>
<li>(core) 在提交密码重置令牌时强制执行过期检查 (<a href="https://github.com/ianm">@IanM</a> #4550)</li>
<li>(core) 更改密码时使现有会话失效 (<a href="https://github.com/ianm">@IanM</a> #4551)</li>
<li>(core) 请求新重置时删除旧的密码令牌 (<a href="https://github.com/ianm">@IanM</a> #4552)</li>
<li>(core) 强化通过 URL 获取头像的 Guzzle 客户端 — 禁用重定向，添加超时和大小限制 (<a href="https://github.com/ianm">@IanM</a> #4553)</li>
<li>(core) 通过共享的 <code>AbstractImageValidator</code> 验证 Logo、favicon 和深色模式 Logo 的上传 (<a href="https://github.com/luceos">@luceos</a> #4579)</li>
</ul>
<h3 id="修复-fixed">修复 (Fixed)</h3>
<ul>
<li>(core) 修复扩展名缺少 <code>供应商/包名</code> 格式时引发 PHP 警告的问题 (<a href="https://github.com/ianm">@IanM</a> #4510)</li>
<li>(core) 在路由分发前去除 URI 末尾的斜杠 (<a href="https://github.com/ianm">@IanM</a> #4511)</li>
<li>(core) 修复底部页面内边距不正确的问题 (<a href="https://github.com/ianm">@IanM</a> #4518)</li>
<li>(core) <code>Api\Serializer</code> 属性字段现在会经过 <code>serializeValue</code> 处理，因此布尔值不再被序列化为字符串 (<a href="https://github.com/ianm">@IanM</a> #4530)</li>
<li>(core) <code>PaginatedListState::paramsChanged()</code> 使用值比较，使返回导航能保留已加载页面和滚动位置 (<a href="https://github.com/ianm">@IanM</a> #4532)</li>
<li>(core) 修复在移动端撰写状态时，<code>ReplyPlaceholder</code> 组件显示头像和徽章 (<a href="https://github.com/ianm">@IanM</a> #4533)</li>
<li>(core) 在 <code>Attribute::serializeValue</code> 中保留数组值，避免为 <code>Str</code> 类型属性返回数组的扩展出现“数组转字符串”错误 (<a href="https://github.com/ianm">@IanM</a> #4534)</li>
<li>(core) 小幅正确性和可访问性修复 — 序列化器元数据缓存、队列异常处理器、<code>@hasSection</code> 指令、复选框 inputAttrs、表单组 Switch 的 aria-describedby (<a href="https://github.com/ianm">@IanM</a> #4562)</li>
<li>(core) 恢复 <code>UserCard</code> 上的控件图标，使移动端的控制按钮可见 (<a href="https://github.com/ianm">@IanM</a> #4568)</li>
<li>(core) 移除 <code>FormGroup</code> 中硬编码的单选按钮 <code>name</code>，使多个单选按钮组可以共存 (<a href="https://github.com/rafaucau">@rafaucau</a> #4571)</li>
<li>(core) 防止 FontAwesome Kit 覆盖隐藏图标元素上的 <code>display</code> 样式 (<a href="https://github.com/ianm">@IanM</a> #4575)</li>
<li>(admin) 改进仪表盘中 <code>StatusWidget</code> 在移动端的布局 (<a href="https://github.com/ianm">@IanM</a> #4531)</li>
<li>(admin) 修复头像驱动默认值以及废弃扩展同步消息的内边距 (<a href="https://github.com/ianm">@IanM</a> #4567)</li>
<li>(admin) 修复移动端导航下拉菜单闪烁的问题 (<a href="https://github.com/luceos">@luceos</a> #4578)</li>
<li>(sticky) 在 <code>is_unread_sticky</code> 子查询中限定有歧义的 <code>id</code> 列，避免需要关联讨论表的扩展出错 (<a href="https://github.com/ianm">@IanM</a> #4520)</li>
<li>(tags) 在 <code>bypassTagCounts</code> 中使用 <code>hasPermission</code>，使该权限对受限标签下的非管理员用户生效 (<a href="https://github.com/ianm">@IanM</a> #4539)</li>
<li>(tags) 在标签首页使用论坛描述作为元描述 (<a href="https://github.com/ianm">@IanM</a> #4558)</li>
</ul>
<h3 id="变更-changed">变更 (Changed)</h3>
<ul>
<li>(core) 将用户界面中的一处 “community” 措辞替换为 “forum” 以保持一致性 (<a href="https://github.com/luceos">@luceos</a> #4580)</li>
<li>(webpack-config) 从配置中移除已弃用的 Babel 插件 (<a href="https://github.com/rafaucau">@rafaucau</a> #4498)</li>
</ul>
<h3 id="性能-performance">性能 (Performance)</h3>
<ul>
<li>(core) 消除讨论列表中的 N+1 查询 (<a href="https://github.com/ianm">@IanM</a> #4508)</li>
<li>(core) 为 <code>notifications</code> 表添加复合索引，修复慢速的未读计数查询 (<a href="https://github.com/ianm">@IanM</a> #4509)</li>
<li>(core) 前端性能改进 — 预连接提示、<code>fetchpriority</code>、修复无样式内容闪烁 (FOUC)、视口设置 (<a href="https://github.com/ianm">@IanM</a> #4561)</li>
<li>(tags) 在 <code>TagFilter</code> 中通过单次批量查询解析标签别名 (<a href="https://github.com/ianm">@IanM</a> #4563)</li>
</ul>
]]></content:encoded>
      <guid>https://furrytools.net/p/post/3</guid>
      <pubDate>Tue, 16 Jun 2026 11:01:53 +0800</pubDate>
    </item>
    <item>
      <title>RT,HELLO</title>
      <link>https://furrytools.net/p/post/2</link>
      <description>,PIN5</description>
      <content:encoded><![CDATA[<p>RT,PIN5</p>
]]></content:encoded>
      <guid>https://furrytools.net/p/post/2</guid>
      <pubDate>Tue, 16 Jun 2026 09:53:51 +0800</pubDate>
    </item>
    <item>
      <title>Hi With GooseForum</title>
      <link>https://furrytools.net/p/post/1</link>
      <description>hi 欢迎使用 GooseForum 管理你的社区 GooseForum 是一个基于 的论坛程序。 现在你可以开始你的社区建设了～。</description>
      <content:encoded><![CDATA[<h1 id="hi-欢迎使用-gooseforum-管理你的社区">hi 欢迎使用 GooseForum 管理你的社区</h1>
<p><a href="https://github.com/leancodebox/GooseForum">GooseForum</a> 是一个基于 <a href="https://golang.org/">Go</a> 的论坛程序。</p>
<p>现在你可以开始你的社区建设了～。</p>
]]></content:encoded>
      <guid>https://furrytools.net/p/post/1</guid>
      <pubDate>Mon, 15 Jun 2026 18:30:34 +0800</pubDate>
    </item>
  </channel>
</rss>