Repository navigation
Releases: PaulCAI1593/FnCal
Releases · PaulCAI1593/FnCal
Release list
FnCal 0.5.2
0.5.2 — 审批回执与提案显示统一(2026-11-06)
新增
- 审批结果即时回执(推送):审批页判定成功后,向该凭据当前打开的
GET /mcp事件流发一条 JSON-RPC 通知notifications/fncal/approval-decision,参数proposalId、action(accept/reject)、ok、decidedAt、credentialId。没有打开的流时只写一条mcp-approval-push-failed日志,审批照常成功;通知不含审批链接、令牌或 PIN。 - 新工具
wait_for_approval:参数timeoutSeconds(默认 60 秒、范围 5–120)与可选proposalIds;返回{decided, pending, timedOut}。decided是已判定提案的回执,超时返回timedOut:true并列出未决提案 id;等待期间不阻塞同进程其他请求。 - 回执搭车:任何工具回包在存在未交付回执时追加
receipts(最多 20 条,字段proposalId、action、ok、decidedAt)并标记已交付;同一条回执只出现一次。回执保留 24 小时,过期丢弃并写日志;没有回执时不出现该字段。 - 提案列表与审批页显示统一:两处卡片都按同一行序显示「名称 → 日历 → 时间+地点 → 日程描述一行 →(条件)改动 → 按钮」。正文那一行显示日程描述(换行折叠、单行省略、悬停看全文),AI 给的提案备注不再占正文,只接在悬停提示后面;描述为空时才回落显示 AI 备注。审批页补上地点与描述,与提案队列一致。
变更
- 技能包补三条口径:写操作回包里的
approvalUrl直接给用户、wait_for_approval的用法、receipts回执字段。
版本说明
- 上一对外发布版是 0.5.0。本版新增审批回执能力;审批页与提案队列的正文行改为显示日程描述(同一口径),不改日历接口、elicitation 语义与审批页视觉风格。
- 版本号说明:0.5.1 是内部测试号,从未对外发布,相关提交已回退;本版从 0.5.0 直接升到 0.5.2。
升级
- 应用中心覆盖安装(保留数据)→ 停止 FnCal → 启动 → 强制刷新(
Ctrl+Shift+R)。
FnCal 0.5.0
0.5.0 — 项目介绍页与 AI 协作说明(2026-11-06)
新增
- 项目介绍页:https://paulcai1593.github.io/FnCal/(GitHub Pages,单文件、零第三方资源、无脚本)。页面含 AI 助手接入流程 4 张步骤图、功能清单、安装 4 步、下载与校验哈希、常见问题。
- README 开头加项目页面地址;「与 AI 助手协作」一节补写日历授权、提案模式、一次性审批链接(10 分钟、每条一次)、PIN 与代办批准的口径,并附 4 张界面图。
- 仓库 About 的 Website 指向项目页面;飞牛应用中心「发布者」链接指向项目页面,「开发者」仍是 GitHub 仓库。
修复
- 介绍页事实修正:发布日期、安装包期望哈希合并为单行(复制不带换行)、飞牛 OS 数据目录改为
/vol1/@appdata/FnCal/、三个下载链接补无障碍名称、补分享缩略图与规范化元数据。
版本说明
- 0.4.29 / 0.4.30 都只出过测试包、未对外发布,其内容(应用介绍加项目页面地址、发布者链接指向项目页面)并入本版;上一对外发布版是 0.4.28。
- 应用代码、前端资源、接口与数据结构与 0.4.28 相同;本版只改安装包元数据、版本文档与项目页面。
升级
- 应用中心覆盖安装(保留数据)→ 停止 FnCal → 启动 → 强制刷新(
Ctrl+Shift+R)。0.4.29 / 0.4.30 测试包不要再安装。 - 安装包 703,352 B,校验值见 Release 附件
SHA256SUMS.txt;技能包FnCal-MCP-Skill-0.5.0.zip24,738 B。
FnCal 0.4.28
0.4.28 — 主题色悬停/按下与文字链接的对比度(2026-11-05)
修复
- 主题色按钮的悬停、按下态在浅色主题色下看不清:原先两态一律「加深」。深墨文字(浅色主题色如橙
#c26a1f、青#1f9e8f、灰蓝#4b5162)加深后文字与底色的对比度反而下降。现在按文字色方向取色:白字继续加深(悬停 −12%、按下 −20%),深墨字改为提亮(+12%、+20%);若对比度仍不足 4.5:1,再沿「远离文字色」的方向每步 4% 继续走,最多 8 步。 - 悬停态肉眼看不出来:加可见差兜底——悬停对常态的对比度差不足 0.35、且相对亮度差不足 0.05 时继续走一步,直到两态可分;纯白、纯黑这类已在方向边界的颜色反向走一步,保证悬停/按下一定与常态不同。
- 正文链接悬停的文字对比度不足:全站唯一把主题色当文字色的地方(
.linkified:hover,如事件描述里的链接)改用专用变量--accent-link-hover:浅色表面先 −12% 再确保白底 4.5:1,深色表面先 +12% 再确保深底 4.5:1。此前它借用按钮悬停色,青色、橙色下最低只有 2.83:1、3.27:1。
变更
- 浏览器预涂脚本
web/public/accent-prepaint.js与服务端app/lib/accent.mjs的派生结果逐字段相同(m55校验);审批页的令牌回退块(用户未改主题色时生效)补--accent-link-hover,并把悬停、按下与深色默认色对齐站点tokens.css(浅色悬停#29538b、按下#264b7e;深色主题色#5c82b3、悬停#7091bc、按下#7d9bc2)。 --accent-ink-on-soft从引用--accent-hover改为字面值,避免「软底文字色」跟着按钮态一起变。- 默认深色主题色以算法产出为准(
#5c82b3,悬停#7091bc、按下#7d9bc2),tokens.css与之对齐;新增前端断言(ui-0428-accent-defaults)防 CSS 与脚本再次漂移。
版本说明
- 0.4.26 / 0.4.27 只出过测试包、未对外发布,其内容并入本版;上一对外发布版是 0.4.19。
- 本版把
code/fnos/manifest的版本号同步为 0.4.28。 - 不改令牌语义、权限模型、提案判定、接口与页面结构。
验证状态
- 本地:后端 50 个文件 / 3,012 条断言 / 0 失败(
m37-static、m6-reconcile-heal、m7-0210-dav因沙箱文件句柄EPERM,用仅替换临时目录的副本跑,分别 34/34、24/0、18/0);前端 140 个文件 / 1,748 条通过 / 0 失败。 m55287 条:6 个预设 +#zzzzzz等非法值 + 空白 + 纯白/纯黑边界,两处实现的accent/ink/vars逐字段相等;悬停/按下对文字色 ≥4.5:1;方向与可见差断言;--accent-link-hover在浅/深表面 ≥4.5:1。- 反证两组:派生改回固定「加深」→ 58 条变红;
--accent-link-hover直接等于按钮悬停色 → 5 条变红;每轮按字节还原并核对 SHA。 - 五项审计 0 命中;Node.js 候选静态检查 31/31;impeccable
detect返回[]。 - 6 个预设 × 浅/深 × 常态/悬停/按下共 36 态出图(真实无头浏览器):悬停对常态的对比度差 0.94–1.35,全部两态可分;文字链接最低 4.62:1。
- 审批页回退令牌块按真实渲染核对:浅色白字悬停 7.77:1、按下 8.79:1,深色深墨字 4.73 / 5.77 / 6.55,文字链接 5.90:1;与站点默认令牌逐项一致,旧值已无残留。
- 未验证:真机观感、iOS Safari、用户自定义主题色下与应用内并排比对。
FnCal 0.4.19
0.4.19 — AI 端处理提案前先选「全部批准 / 逐条审批」(2026-11-05)
新增
- MCP 新增工具
decide_proposals:AI 要在对话里处理待确认提案时,必须先用它选模式——scope: "all"(全部批准)或scope: "single"(逐条审批)。返回action、mode、total/ok/failed与逐条结果,AI 可以直接重调执行。 - 模式选择优先用客户端弹窗:支持 MCP elicitation 的客户端会先收到一张表单,三个选项「全部批准(N 条)」「逐条审批」「取消」;点取消、超时或断流,一条都不执行。
- 不支持弹窗的客户端由 AI 用文字问;服务端在既没有模式、客户端也给不出弹窗时返回
mode_required并附一句现成的问句,一条都不执行——不再靠 AI 自觉。 - 待批提案里有删除类时,模式弹窗标题与返回文本写明「其中 N 条为删除日程」;回收站模式写「N 天内可还原」,提案模式写「批准后无法恢复」。
- 「全部批准」沿用网页端的批量判定(新抽出的
runProposalBatch,网页端与 AI 端共用一份逻辑),上限 100 条,逐条执行、部分失败不中断,结果给出失败原因(已过期 / 已处理 / 日历不存在 / 权限不足)。
变更
approve_proposal/reject_proposal保留,只处理单条;批量入口统一走decide_proposals,网页端与 AI 端不再各写一份判定。- 审计:批量执行记一条
proposal-batch-decision,带via: "mcp"与mode(all / single);逐条受理仍记confirmation(elicitation或text)。 - 回收站感知的受理下沉到共享服务层:删除类提案在回收站模式下先写回收站再受理,受理失败回滚回收站记录。
修复
- AI 端不再可能不经用户选模式就直接批量批准:没有
scope、客户端又给不出弹窗时,服务端返回mode_required,零执行。
技能包与文档
- 技能包(
FnCal-MCP-Skill-0.4.19.zip)新增「保持最新」一节:用户说「升级技能包 / 立即更新技能」时,AI 从仓库skills/fncal-mcp/按 gh-proxy → jsDelivr → raw 顺序拉取最新SKILL.md与参考文件,比较 frontmatter 版本取高者;升级只换说明文件,不动服务端、不需要重启。三个地址都失败就用本地版本、不阻塞对话。 - 技能包事实订正:§1 原写「无状态、
GET /mcp返回 405」,0.4.18 起已是会话 + SSE,按实现改写。 - README 的 MCP 工具表补
decide_proposals,技能包文件名改为 0.4.19。
版本说明
- 0.4.18 与 0.4.17 均未单独对外发布,内容并入本版;已对外发布的上一版是 0.4.16。
- 本版因此同时包含:0.4.17 的批准前结构化文字确认(
confirmed: true与服务端生成的摘要)、0.4.18 的 MCP 弹窗确认(客户端支持 elicitation 时弹选项,不支持时降级文字)与会话 + SSE 通道,以及本版的批准模式选择。权限模型、删除与回收站规则未变。
验证状态
- 本地:前端 139 个测试文件 / 1736 条通过 / 0 失败;后端 44 个文件 / 2114 条断言 / 0 失败;
m50新增 103 条(含弹窗断流后重连改走文字确认、且不执行的断言);五项审计 0 命中;Node.js 候选静态检查 31/31。 - 反证三组:删掉
mode_required闸门 6 条变红、all当single2 条变红、删除类提示不写条数 1 条变红;每轮按字节还原。 - MCP 实机自测(本机实例、真实 HTTP + SSE,未碰生产数据):
SUMMARY: OK failures=0。 - 未验证:真机 A1–A9、AI 在真实客户端里的遵从度、真实客户端断流表现,见
product/M4-0.4.19-范围与验收.md。
FnCal 0.4.16
0.4.16 — 删除类卡片按钮顺序、批准后立即刷新;并入 0.4.15 与 0.4.14、0.4.13 的全部内容(2026-11-04)
变更
- 删除类提案卡的两个按钮交换位置:「删除」在左、「保留」在右;删除仍是危险色、必须二次确认,保留仍是次要按钮、点了直接拒绝不弹确认;键盘 Tab 顺序随视觉顺序调整。
- 回收站记录卡的按钮文字由「恢复」改为「还原」,同组文案一并统一:「还原中…」「还可恢复 N 天」「日程已还原到「日历名」」「同名日程已存在,无法还原」,读屏标签为「还原「标题」」。
修复
- 提案批准后日历没有立即变化、需要手动刷新:单条批准、批量批准、回收站还原成功后,面板会立即重载日历数据并重绘月视图、周视图、议程视图与任务列表;点「保留」或「拒绝」不重载;批量批准全部失败不重载;重载在后台进行,不阻塞按钮,失败不弹错误,下次手动刷新仍可用。
版本说明
- 0.4.5 – 0.4.15 为 0.4.4 之后的内部测试包,均未对外发布,其内容并入本版。
验证状态
- 本地:前端 139 个测试文件 / 1736 条通过 / 0 条跳过 / 0 失败;后端 41 个文件 / 1858 条断言 / 0 失败;安装包级检查 40 项 0 失败;五项审计 0 命中;界面审计新增 0 条;Node.js 候选静态检查 31/31。
- 三档实测(420 / 375 / 320,真实 DOM + 真实样式,无头 Edge 真排版):删除类卡片按钮顺序为「删除 → 保留」,420 与 375 档按钮 62×36、320 档收为 32×32 图标并带 aria-label;回收站「还原」按钮 86×36、文字 28px 不截断(320 档按规范收为 32×32 图标);三档文档与面板横向溢出均为 0。
- 未验证项见
product/M4-0.4.16-真机验收清单(用户版).md。
并入 0.4.15 与 0.4.14、0.4.13 的内容
新增
- 检查更新弹窗右上角新增关闭按钮:与 Esc、点遮罩走同一条关闭路径,检查进行中也能关;关掉不中断请求,结果丢弃。
- 全部批准时若含删除类提案,二次确认里多一行提醒:「其中 N 条为删除日程,批准后会被永久删除,无法恢复」。不含删除类不出现这行;全部拒绝不提示。
- 删除类提案卡片重做:不再显示「前 …(将删除)」对比行;说明行改成固定影响文案,提案模式「将删除这一条日程」,回收站模式「将删除这一条日程,N 天内可在最近删除里恢复」;AI 原话只放在悬停提示里,不再与时间行重复。
- 删除类操作按钮改为「保留」与「删除」:保留是次要按钮,点了直接拒绝、不弹确认;删除是危险按钮,必弹确认,确认文案按该凭据当前模式区分可恢复与不可恢复。
- 提案标题在显示层剥离开头连续的表情与符号(AI 常用 🗑 起头):卡片标题、确认弹窗、读屏标签都不再出现装饰图标,数据与后端字段不动。
- 动作徽标改为两段式「凭据名 │ 动作」:长凭据名省略、悬停看全名,动作词始终完整;删除动作词用危险色。
- 回收站记录卡重做:标题与「已删除」徽标、日历色点与名称、删除时间、还可恢复天数、右对齐的恢复按钮;回收站模式下提案面板首行显示当前删除方式提示(混合模式另有一句)。
- 保留期文案改为联动设置:说明行、确认框与模式提示里的天数取「自动清理」设置(3 / 7 / 14 / 30 天),不再写死 7 天。
变更
- 删除类提案在回收站模式下被批准时改走回收站:先写入回收站再受理,写入失败或受理失败回滚条目、日程不删;提案模式行为不变。
- 窄屏按钮断点统一:宽度 ≤340 时删除卡的「保留 / 删除」与回收站的「恢复」收为 32×32 图标按钮(带完整 aria-label),≥341 一律文字按钮;此前 341–420 图标、≤340 文字的旧规则已改。
- 回收站记录卡在 ≤340 时隐藏「删除于」时间,给标题与剩余天数让位。
修复
- 删除类提案卡标题被 AI 传入的图标污染,显示成「🗑 台球」;已改为显示层剥离,标题只留文字。
- 删除类提案卡说明行重复时间行内容(AI 原话把时间又写一遍),信息冗余且卡片显乱;已改为固定影响文案。
- 删除类提案卡出现只有「前」没有「后」的对比行,用户无法理解;已整行移除。
版本说明
- 0.4.5 – 0.4.14 为 0.4.4 之后的内部测试包,均未对外发布,其内容并入本版。
验证状态
- 本地:前端 138 个测试文件 / 1725 条通过 / 0 条跳过 / 0 失败;后端 41 个文件 / 1858 条断言 / 0 失败;安装包级检查 40 项 0 失败;五项审计 0 命中;界面审计新增 0 条;Node.js 候选静态检查 31/31。
- 三档实测(420 / 375 / 320,真实 DOM + 真实样式,无头 Edge 真排版):提案面板块宽 388 / 343 / 288,删除卡 362 / 317 / 262,三档横向溢出 0;删除卡不出「前 / 后」对比行,影响行 420 与 375 档单行不省略、320 档按单行省略(16px);动作徽标两段式,删除动作词 26px 完整不截断,超长凭据名省略;≤340 档「保留 / 删除 / 恢复」均 32×32 图标钮并带 aria-label,「还可恢复 N 天」73px 三档均不截断;更新弹窗关闭按钮 36×36,标题与按钮间距 286 / 241 / 186,无重叠。
- 未验证项见
product/M4-0.4.15-真机验收清单(用户版).md。
并入 0.4.14 与 0.4.13 的内容
新增
权限设置:两组对称的双模式
- 设置 → AI 接入 → 编辑凭据,权限下方新增「操作方式」一块,两组同样式控件上下相邻:新建、修改(直接通过 / 提案)与删除(回收站 / 提案),默认都是「提案」。
- 两组都按凭据设置,与日历权限矩阵同层;改一条凭据不影响另一条。只读凭据两组禁用并注明不生效。
- 切「直接通过」或切「回收站」都要二次确认,默认焦点在「取消」;取消后控件回到「提案」,服务端值不变。切回「提案」不弹确认,但旁注说明已进回收站的日程仍可恢复。
- AI 接入关闭时两组禁用。旧文案「删除操作无论哪档都以提案形式确认」已删除。
AI 删除回收站
- 回收站模式下 AI 提删除立即生效:先把日程完整内容写入回收站,再删除对象;写回收站失败就不删,返回「删除失败:回收站写入失败,日程未删除」。删除对象失败时回滚回收站条目。
- 回收站设置只在需要时出现:该凭据「删除」选「回收站」时,在「操作方式」下方展开一块,含自动清理周期(3 / 7 / 14 / 30 天,默认 7 天)、当前条目数与「清空回收站」;切回「提案」立即收起,取消编辑不出现。AI 接入关闭时这块仍可用(本地数据,关掉 AI 不关恢复入口)。
- 回收站入口只有一处:提案面板底部「最近删除」。0 条不显示;有条目时显示标题、计数、折叠按钮,每条显示标题、日历名、删除时间、「还可恢复 N 天」与恢复按钮。
- 恢复按原 UID 写回原日历;同名日程已存在时拒绝,提示「同名日程已存在,无法恢复」,不覆盖新数据。
- 上限 200 条,超出淘汰最旧;读取时修剪过期条目,不依赖定时任务。
对话内代办批准
- 每条凭据新增「允许代办批准」开关,默认关闭;打开需二次确认。含义是授权 AI 助手在对话里代你执行提案,但每次都必须先把提案摘要交给你、由你明确同意,AI 不能自行批准。
- 打开后 AI 助手侧可用
list_proposals、approve_proposal、reject_proposal处理自己的待确认提案;一次只处理一条,禁止批量静默执行。关闭时调用直接回「凭据未开启 AI 端代办批准」,不静默失败。 - 批准前二次校验提案所属日历仍在该凭据可见且为写档,否则拒绝。只读凭据打开无效。
- 审计记
decidedBy: agent与凭据 id;用户自己批准仍记为用户。凭据行显示「对话内代办」「可直删」标记。
检查更新
- 用户头像菜单「立即同步」下方新增「检查更新」。点击打开「更新」弹窗:当前版本、检查结果、更新源、操作按钮与两行旁注。打开即查一次。
- 更新源两档:「国内加速(推荐)」与「GitHub 直连」。选择只存本浏览器,刷新后保持;切换后立即重新检查。国内加速失效时自动回退到 GitHub 直连,状态行右侧标本源。
- 检查结果为「已是最新版本」「发现新版本 x.y.z」「无法连接到更新服务,请检查网络后重试」「请求过于频繁,请稍后再试」四种,均用中文,不显示错误码。
- 「打开下载页」只在发现新版本时可用,按所选源给加速地址或 GitHub 官方地址,其余状态禁用但不隐藏。
- 旁注写明:国内加速由第三方代理提供,可能随时失效,失败会自动回退;安装前请核对 SHA-256。
提案卡片与批量审批(0.4.12 并入)
- 提案卡片显示发起凭据名称:动作徽标前加凭据名,如「test 新建」。未记录凭据时只显示动作词,不编造名称。
- 提案队列头部「全部批准」「全部拒绝」:一次确认、一次请求处理当前全部待确认提案。部分失败按原因汇总为中文:已过期 / 内容已变化,需重新发起 / 目标日历已删除 / 处理失败,不展示英文错误码。
- 提案批量接口
POST /api/v1/ai/proposals/batch:一次最多 100 条,逐条返回结果,单条失败不中止其余。 - 已处理(批准 / 拒绝)的提案在 7 天后自动清理;待确认提案不受清理影响。
- 提案队列面板头部固定:面板滚动时标题、待确认条数与「刷新」始终可见,刷新按钮贴面板右侧。
- 提案卡片固定行序:名称、日历(色点 + 名称)、时间与地点、备注、变更对比、操作区;每行单行省略,卡片高度不随内容长短变化。
- 时间显示:定时事件
11-09 周一 18:30–22:30,全天事件11-09 周一 全天,跨天用→连接,跨年两端带年份。时间按本地时区显示。 - 提案接口返回
start/end/allDay/location:从该提案自己的 iCalendar 解析,不向前端返回整份日历;解析失败返回空值,列表接口不报错。
变更
- 删除方式不再全局:
PUT /api/v1/ai/settings带deleteMode返回 400,改为用PATCH /api/v1/ai/credentials/:id按凭据设置。 - 回收站设置从「AI 接入」页底部移到凭据编辑器的「操作方式」下方,只在删除选「回收站」时出现;设置页不再常显这一块。
- 「AI 端批准」改名「对话内代办批准」:开关含义由「AI 可自行批准」改为「AI 必须先问、你同意后代你执行」,徽标由「AI 可批准」改为「对话内代办」,关闭时的提示文案同步改。
- 设置 → AI 接入的凭据编辑器顺序:名称、日历权限矩阵、操作方式、代办批准、时间窗、字段、操作。
- AI 接入关闭时顶部铃铛隐藏;开启后无待确认显示描边,有待确认显示主题色填色。关闭时若面板开着,面板一并收起。
- 顶栏左区在宽度大于 720px 时固定为左侧栏宽度:左端 logo 与名称,右端铃铛;宽度不够只隐藏名称,logo 与铃铛保留。铃铛右边缘与左侧栏边界线在 721 / 768 / 900 / 1023 / 1440 五个宽度实测差值为 0。
- 窄屏(≤720px)底部工具栏 8 项:铃铛、年 / 月 / 周 / 四日 / 日 / 日程、任务;每项命中区不小于 44px。
- 提案队列从「设置 → AI」页签迁出,设置页原位置整块删除;顶栏齿轮红点与「AI」页签红点一并移除。
修复
- 提案面板顶部露底:滚动容器把内边距加在自身,吸顶标题行只能贴到内容盒,顶边与标题行之间留 13px 条带,滚上去的卡片从条带露出。改为面板顶部内边距归零、留白由吸顶标题行自带,间隙只剩 1px 边框。
- 议程视图日期头:吸顶时与下方日程重叠,顶部还留 16px 条带露出日程;同时日期列被网格默认拉满整行高,sticky 没有移动余量。改为日期头用议程底色不透明、顶部留白移到日期头自身、日期列按内容高度对齐。间隙 -34px → 0px,未滚动时首屏几何与改前一致。
- 提案卡片时间按本地时区显示:iCalendar 以 UTC 写入,卡片此前直接截取串内时分,10:00 的提案显示成 02:00。
- 全天提案卡片恢复日期行:全天事件写成
DTSTART;VALUE=DATE:2026-11-21(带连字符),解析端只认 8 位YYYYMMDD,整行字段为空导致卡片没有时间行。 - 全天事件的 iCalendar 改为 RFC 5545 要求的 8 位日期
20261121,第三方 CalDAV 客户端可正常读取;解析端同时兼容两种写法。 - 全天日期不再依赖服务器时区:此前用服务器本地年月日生成,服务器时区为 UTC 时会早一天。
- 移除设置页底部的保存诊断小字;保存失败的行内红字错误保留,回读校验与本地诊断记录仍在。
版本说明
- 0.4.5 – 0.4.13 为 0.4.4 之后的内部测试包,均未对外发布,其内容并入本版。
验证状态
- 本地:前端 137 个测试文件 / 1696 条通过 / 0 条跳过 / 0 失败;后端 40 个文件 / 1819 条断言 / 0 失败;安装包级检查 40 项 0 失败;五项审计 0 命中;界面审计新增 0 条;Node.js 候选静态检查 31/31。
- 三档实测(420 / 375 / 320,真实 DOM + 真实样式,无头 Edge 真排版):操作方式两组块宽 354 / 309 / 254,两组行
scrollWidth等于clientWidth、无横向溢出,标签单行不换行;回收站小节行 354 / 309 / 254 无溢出,自动清理下拉 96×38,条目数旁注一行不截断;最近删除标题行 362 / 317 / 262 无溢出,恢复按钮 32×32(≤340 回落文字按钮 86×36),「还可恢复 N 天」66.97 未截断;检查更新弹窗块宽 388 / 343 / 288 无横向溢出,320 宽度下失败态状态文字折 2 行、弹窗高 424.56 不超出视口。分段控件命中高 28px 为既有全局组件尺寸,本版不改,另立全局触屏尺寸任务。 - 未验证项见
product/M4-0.4.14-真机验收清单(用户版).md。
FnCal 0.4.4
0.4.4 — 修复日历色点与 Node.js 运行时定位、共享入口标注(2026-11-03)
修复
- 事件编辑器「日历」框的色点、日历下拉列表的色点、详情卡左上角的大色块,颜色改为取所属日历本身的颜色。此前这三处被一个同名的局部取色函数遮蔽,日历颜色以
#RRGGBB保存时一律显示默认靛蓝;左侧栏与详情卡的日历行用的是正确版本,所以同一屏会出现两种颜色。 - 侧栏日历菜单的预设色勾选改为按颜色值比较。此前判定用调色板名称与已保存的颜色值比较,保存后永远不相等,菜单从不显示当前颜色。
- 启动脚本的 Node.js 候选路径从 11 项扩到 15 项,补上依赖应用不带
target层的布局:<卷>/@appcenter/nodejs_v22/bin/node、<卷>/@appcenter/nodejs/bin/node,以及同级目录下的两种bin形式。此前只认.../nodejs_v22/target/bin/node,在把 Node.js 22 装在bin布局的飞牛设备上会报「未找到 Node.js 运行时」并拒绝启动。 - 启动失败时的诊断逐条列出全部 15 个候选与三态(存在且可执行 / 存在但不可执行 / 不存在),并给出处理建议,写入服务日志与应用日志。
- 升级脚本(
upgrade_callback)使用同一份候选集合,升级路径行为与首次启动一致。
变更
- 侧栏日历菜单里禁用的「共享」入口,标注由「共享(0.3.0)」改为「共享(后续支持)」,不写尚未兑现的版本号。
版本说明
- 0.4.2 与 0.4.3 是内部测试包,未单独对外发布;0.4.4 汇总了这段期间的全部内容:0.4.2 修 Node.js 运行时定位,0.4.3 修日历色点,0.4.4 另把「共享」入口的标注改为「后续支持」。
验证状态
- 本地:前端 127 个测试文件 / 1595 条通过 / 0 条跳过 / 0 失败;后端 38 个测试文件 / 1545 条断言 0 失败;安装包级检查 40 项 0 失败;五项审计 0 命中;Node.js 候选静态检查 31/31;新增 6 条色点回归用例,反向自证可复现失败。
- 未验证:真机浅色与深色模式下的实际观感、改色后已打开编辑器的即时跟随、375px 窄屏排版、真实飞牛OS 设备上的启动结果。