
OpenProject 16.0.1 补丁版本详解活动 API 内部注释属性与关键缺陷修复【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openprojectOpenProject 16.0.1 是于 2025-06-05 发布的补丁版本核心使命是修复 16.0 主版本上线后暴露的一系列稳定性问题。本指南以官方发布说明为骨架逐条剖析本次更新包含的 1 项 API 功能增强与 10 项缺陷修复从活动Activity评论 API 新增的internal属性到从模板创建项目、层级自定义字段、会议模块迁移与工作包轮询等热点问题的根因与修复路径。读完本文你将掌握这些变更的 API 行为差异、对应的源码实现位置以及升级到 16.0.1 时应关注的验证要点。版本概览OpenProject 16.0.1 是 16.x 系列的第二个发布版本紧随 16.0 主版本之后。发布说明明确指出本次发布包含若干缺陷修复several bug fixes官方推荐所有用户升级到最新版本。发布说明的完整变更清单由自动化脚本生成见 docs/release-notes/16/16-0-1/README.md 中BEGIN/END AUTOMATED SECTION标记这意味着清单与社区工作包Work Package系统严格同步确保可追溯性。本次更新的全部内容可归纳为两大块1 项功能Feature活动评论activity comments读取 API 新增internal:boolean属性10 项缺陷修复Bugfix覆盖项目模板、工作包列表拖拽、层级自定义字段、活动标签页轮询、工作包 API PATCH、会议模块迁移、内部评论鉴权等多个子系统。功能增强活动评论 API 新增 internal 属性本次更新唯一的功能性变更位于 API v3 的活动模块为活动评论activity comments的读取接口新增了internal:boolean属性对应社区工作包 #62130。属性语义与源码实现internal属性用于标识一条活动评论是否为内部评论internal comment。在 OpenProject 中内部评论仅对项目成员可见且需要用户具备专门的内部评论权限是团队内部讨论与外部协作隔离的关键机制。在仓库中该属性的序列化实现位于 lib/api/v3/activities/activity_representer.rb通过property :internal直接透出property :id, render_nil: true formattable_property :notes, as: :comment, getter: -(*) { formatted_notes(represented) } property :details, exec_context: :decorator, getter: -(*) { formatted_details(represented) }, render_nil: true property :version, render_nil: true property :internal # ← 16.0.1 新增的内部评论标记这段代码来自API::V3::Activities::ActivityRepresenter它是活动资源的单一对象代表器Single Representer负责将 Journal工作包变更日志序列化为 API v3 响应。从_type方法的实现可以看出同文件 lib/api/v3/activities/activity_representer.rb当资源带有notes或为noop?时其类型为Activity::Comment此时internal字段即为该评论的内部标记其余情况下类型为Activity纯字段变更记录无internal语义。内部评论的权限边界internal属性并非单纯的展示字段它与编辑权限紧密绑定。在 app/models/work_package.rb 中journal_editable_by?方法明确了内部评论的编辑判定def journal_editable_by?(journal, user) if journal.internal? user.allowed_in_project?(:edit_others_internal_comments, project) || (user.allowed_in_project?(:edit_own_internal_comments, project) journal.user_id user.id) else # 外部评论的编辑判定分支 end end也就是说内部评论的编辑需要edit_others_internal_comments或edit_own_internal_comments项目权限外部评论则走普通编辑权限分支。本次 API 属性新增使得客户端如前端活动标签页可以在不加载额外数据的前提下直接根据internal布尔值渲染内部/外部评论的差异化 UI是权限模型向 API 消费者的一次透明化暴露。适用提示internal属性仅对工作包等可携带内部评论的 Journal 资源有意义对于无 notes 的纯变更 Activity该字段返回false或不参与序列化。集成方在解析 API 响应时应注意资源_type的区分。缺陷修复逐条解析1. 从模板创建项目丢失日期与调度模式#62426现象当从模板template创建项目时部分日期与调度模式scheduling mode数据丢失。影响范围涉及项目模板复制链路中与工作包日期/调度相关字段的快照与迁移逻辑。这类问题通常源于模板复制时对自定义字段、日期字段与调度模式手动/自动调度的序列化不完整。验证建议升级后用包含手动调度 特定开始/结束日期工作包的模板创建项目核对子项目的日期字段与调度模式是否与模板一致。2. 空会议非空空白面板创建 Section 的边界情况#63422现象在为空的非 blankslate 会议创建 Section议程区块时触发边界错误。实现背景会议模块中MeetingSection是议程的组织单元模型定义位于 modules/meeting/app/models/meeting_section.rb其通过acts_as_list scope: [:meeting_id, { backlog: false }]维护排序并依赖last_position计算新议程项的位置同文件 modules/meeting/app/models/meeting_section.rb。空会议场景下位置计算与 Section 创建顺序的交互是该缺陷的修复重点。验证建议升级后在一个全新会议无任何 Section中直接添加 Section并反复创建/删除验证位置序列无异常。3. 工作包列表拖拽到其子级时报错#63499现象在工作包列表中将某个工作包拖拽到它的子级children之下时抛出错误。实现背景层级拖拽涉及父子关系的环检测。OpenProject 工作包通过work_package_hierarchy_relations维护层级相关控制器与关系校验逻辑位于 app/controllers/work_package_hierarchy_relations_controller.rb 与 app/controllers/work_package_relations_controller.rb。将父节点拖到自身后代之下会形成循环引用本次修复应是对该边界的校验兜底。验证建议升级后在启用层级关系的列表中尝试将父工作包拖入其子工作包确认被正确拦截而非报错。4. 层级自定义字段创建子项触发 500#63855现象在层级hierarchy类型自定义字段中创建子项sub-item时返回 500 错误。实现背景层级自定义字段的子项创建涉及CustomOption的层级树维护相关实现位于 app/models/custom_option.rb 与 app/helpers/custom_field_hierarchy_tree_view_helper.rb。500 通常意味着创建路径上的异常未被捕获为可读的错误消息本次修复将其转为正常的校验反馈。验证建议升级后在层级自定义字段的管理界面创建多级子项确认可正常保存且无 500。5. 活动标签页周期性更新的错误处理缺失#64073现象活动activity标签页的周期性更新轮询缺少或不正确的错误处理异常轮询失败可能导致界面状态异常。实现背景工作包详情视图的活动标签页采用独立轮询机制前端相关注释可见于 frontend/src/app/features/work-packages/routing/wp-full-view/wp-full-view.component.tscurrently used by the new activities tab which does its own polling。本次修复补齐了轮询失败时的错误处理分支。6/7. 轮询会议/工作包活动更新触发浏览器 Basic Auth 弹窗#64088、#64091现象轮询会议meeting更新与轮询工作包活动更新时浏览器可能弹出 Basic Auth 认证框。根因分析这两个问题同源——周期性的轮询请求通常携带过期的或格式不完整的认证信息触发了浏览器的 HTTP 401 质询流程浏览器随即弹出原生 Basic Auth 对话框而非静默失败。修复方向是确保轮询请求在认证失效时优雅降级返回 JSON 错误/触发重新登录跳转而不是让浏览器发起原生认证质询。验证建议升级后在会话过期场景下停留在工作包详情页与会议页观察轮询是否静默失败而不弹认证框。8. PATCH /work_packages/:id 触发 NoMethodError#64133现象对PATCH::API::V3::WorkPackages::WorkPackagesAPI#/work_packages/:id/发起部分更新时抛出NoMethodError。实现背景该端点对应工作包 v3 API 的更新路径实现位于 lib/api/v3/work_packages 下WorkPackagesAPI 的:id路由。NoMethodError通常指向参数解析链路中某个可选对象为 nil 却被调用方法本次修复补上了空值防护。验证建议升级后对工作包执行局部 PATCH如仅更新 subject覆盖自定义字段与普通字段混用的载荷确认不再抛 500。9. 数据库迁移 20240405131352_create_meeting_sections 在 Update 时失败#64298现象执行数据库迁移20240405131352_create_meeting_sections创建meeting_sections表时在已有数据库的 Update 场景下失败。实现背景会议模块的迁移历史可在 modules/meeting/db/migrate/1003016_aggregated_meeting_migrations.rb 与 modules/meeting/db/migrate/20250404061503_migrate_classic_meetings.rb 中查看。经典会议classic meetings向新会议模型迁移时若目标表已存在或存在既有数据冲突迁移会在 Update 流程中失败。本次修复保证了从 16.0 原地升级而非全新安装时迁移可重复执行且幂等。验证建议从 16.0 原地升级到 16.0.1 时执行bin/rails db:migrate确认meeting_sections相关迁移顺利通过。10. 部分场景下无有效 Token 也能添加内部评论#64324现象在某些情况下无需有效 Token鉴权凭据即可添加内部评论。实现背景内部评论的创建鉴权与 app/models/work_package.rb 中journal_editable_by?的权限模型联动——该逻辑要求内部评论编辑者具备edit_others_internal_comments或edit_own_internal_comments权限。本次修复堵住了绕过该鉴权的漏洞路径属于安全相关修复建议优先升级。验证建议升级后以无内部评论权限的账号尝试通过 API 添加内部评论确认被拒绝。升级建议与验证清单官方在发布说明中明确推荐升级。综合本次变更内容升级到 16.0.1 后建议按以下清单回归验证功能域验证点活动 API调用工作包活动读取接口确认评论资源含internal布尔属性且内部/外部评论区分正确项目模板用含手动调度工作包的模板创建项目核对日期与调度模式层级自定义字段创建多级子项确认无 500工作包列表将父项拖入子项确认被正确拦截会议模块空会议建 Section从 16.0 原地跑bin/rails db:migrate轮询与认证会话过期后停留在工作包/会议页确认无 Basic Auth 弹窗内部评论无权限账号无法新增内部评论如何获取完整变更明细发布说明正文中由自动化脚本维护的完整变更清单位于 docs/release-notes/16/16-0-1/README.mdBEGIN/END AUTOMATED SECTION之间的条目每条均附社区工作包编号可在 OpenProject 社区实例中追踪对应讨论与提交。该文件位于仓库的发布说明目录树docs/release-notes/16/下与 16.x 系列其他版本的说明并列便于横向对比各补丁版本的修复范围。对于希望从源码层面深入验证的读者以下文件是最直接的切入点活动 API 序列化lib/api/v3/activities/activity_representer.rb内部评论权限判定app/models/work_package.rb会议 Section 模型与迁移modules/meeting/app/models/meeting_section.rb、modules/meeting/db/migrate/1003016_aggregated_meeting_migrations.rb活动标签页轮询前端frontend/src/app/features/work-packages/routing/wp-full-view/wp-full-view.component.ts总而言之16.0.1 是一个聚焦稳定性的补丁版本对 API 消费者而言internal属性的加入让内部评论的识别与渲染变得更加直接对运维与升级方而言模板复制、层级字段、会议迁移与认证弹窗等高频痛点均得到针对性修复值得尽快落地。【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openproject创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考