Skip to content

Releases: PaulCAI1593/FnCal

FnCal 0.5.2

Choose a tag to compare

@PaulCAI1593 PaulCAI1593 released this 05 Nov 20:25

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

Choose a tag to compare

@PaulCAI1593 PaulCAI1593 released this 05 Nov 18:04

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.zip 24,738 B。

FnCal 0.4.28

Choose a tag to compare

@PaulCAI1593 PaulCAI1593 released this 05 Nov 15:51

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 失败。
  • m55 287 条: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

Choose a tag to compare

@PaulCAI1593 PaulCAI1593 released this 04 Nov 17:35

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 当 single 2 条变红、删除类提示不写条数 1 条变红;每轮按字节还原。
  • MCP 实机自测(本机实例、真实 HTTP + SSE,未碰生产数据):SUMMARY: OK failures=0。
  • 未验证:真机 A1–A9、AI 在真实客户端里的遵从度、真实客户端断流表现,见 product/M4-0.4.19-范围与验收.md。

FnCal 0.4.16

Choose a tag to compare

@PaulCAI1593 PaulCAI1593 released this 04 Nov 15:02

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

Choose a tag to compare

@PaulCAI1593 PaulCAI1593 released this 02 Nov 21:00

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 设备上的启动结果。