Skip to content

v2.6.5 Beta

Choose a tag to compare

@Horace-Maxwell Horace-Maxwell released this 09 Jun 00:57
· 36 commits to main since this release

Horosa 2.6.5 Beta

Beta release / Beta 测试版:this build is published for hands-on verification before it is promoted as the stable release.
Beta 测试版:本构建用于稳定版前的真实安装与使用检查;安装包、runtime 与 manifest 已完成签名、公证和端到端验证。

Horosa is a local-first metaphysics workstation for Apple Silicon, spanning Western astrology, Chinese traditional systems, AI-assisted analysis, and a notarized desktop delivery stack.
Horosa 是面向 Apple Silicon 的本地优先玄学工作站,覆盖西方占星、中国传统术数、AI 辅助分析,以及正式公证的桌面交付链路。

当前版本亮点 / Release Highlights

  • 当前发布版本 / Current release: v2.6.5 Beta

本版更新 / What's new in this release

v2.6.5 —— 合盘交互链全面重建 + AI「起课时间」挂载 8 → 13 技法:上版残留的合盘失能(端点错切到 chart 服务、子盘下端大块空白、左栏点了没反应、popover 空白)一并根治;AI 分析「起课时间」此前下拉只有 8 项卜卦,本版 + 5 项(皇极经世 / 太玄筮法 / 荆诀 / 五兆 / 神易数),每法的挂载设置都能真传到后端真重算。默认行为与 v2.6.4 完全一致。本版运行时组件已更新(2.6.5-runtime1),升级时自动下载新运行时。

  • 合盘 5 子盘端到端可用:① 端点恢复 Java :9999(v2.6.1 fc7ab74 误切到 chart 服务 :8899,但 request() 对 body 做 RSA 加密、:8899 不解密 → 400 net::ERR_FAILED,「每个技法都用不了」根治);② AstroRelative 加 ResizeObserver 实测真实容器高度(models/astro.js:347 height:660 硬编码不随窗口缩放,大屏出大块空白);③ 左栏交互链 chartStyle / dispatch / onChange 全链路透传 index.js → AstroRelative → 5 子盘 → AstroChartMain;④ 新增 handleRelativeOnChange 直写 fields(不再走 changeCond 那条会先去拉本命盘、失败时静默不更新的路径),componentDidUpdate watch fields.zodiacal/hsys/siderealAyanamsa 变化自动 doChart() 重拉合盘;⑤ 5 子盘删 hidezodiacal/hidehsys(不删则「宫位制与黄道」popover 内 Select 全 null)+ paramsToFields 不再覆盖 hsys/zodiacal/siderealAyanamsa(覆盖则左栏改了显示不变);⑥ 长 ayanāṃśa 名(Lahiri ICRC(官定2022))走 .horosa-relative-page 局部 CSS(overflow + min-width:0 + width:100% + ellipsis),保 50/50 grid 触发框定宽,绝不波及占星等其它顶层页面。
  • AI 分析「起课时间」挂载补全 5 法(13 技法全到位):下拉新增 皇极经世 / 太玄筮法 / 荆诀 / 五兆 / 神易数TaiXuanMain / JingJueMain / WuZhaoMain / ShenYiShuMain 各新增 export async function buildXxxSnapshotForFields(fields, opts),opts 透传到 kentang POST body —— 太玄/荆诀 起筮种子(留空 = 起课时间 yyyyMMddHHmm 派生)、五兆 起例模式(干支/按日/按时/按分/按堂)+ 报数 + 手动分爻、神易数 时辰/季令 auto-or-manual 都真按用户设定起新盘。techniqueMountSettings.js 4 法升级为 kind:'payload' + 显式 FIELDS schema(不升级则 sectionsOnly 路径根本不调 regenerateCaseTechniqueSnapshot,改设置无效),同步收紧 SECTIONS_ONLY = {sixyao, tongshefa, mundane, huangji} 测试常量。huangji 故意保留 sectionsOnly(命盘侧 buildHuangJiSnapshotForFields 按出生重算 / 事盘侧读已存 snapshot 不重算,这是设计意图)。
  • AI 四同步:5 法的 aiExport.js(段表 SECTION_PRESETS / 储存映射 STORE_KEY_MAP / 段过滤分支 / 别名 ALIAS_LIST)均已就位;aiAnalysisContext.js TIMEPOINT_CASTABLE_SETlistAnalysisTechniqueOptions('timepoint') 两份必同步含 13 项;regenerateCaseTechniqueSnapshot switch 5 case 显式读 p.seed/p.mode/p.hourSource/...AIAnalysisMain.js 一键挂载全部式法按钮 onClick 覆盖到 6 个新增 + drawer hint 更新。
  • AI 起课时间合成 record 的「时间 NaN-undefined」修复:起课时间源 record 用 divTime 字段(不是事盘的 birth),buildFieldObject(record) 此前只读 record.birth → fallback new DateTime({zone}) 用当前系统时间 → kentang 后端格式化时间字段时显示 NaN-undefined-undefined undefined:undefined:undefined(尤其 5 个新 builder 全踩);改 record.birth || record.divTime
  • Python 真太阳时辅助接受数值经纬度:地图选点存的浮点 lon:116.4074 lat:39.9042 此前直崩('float' object has no attribute 'lower' / 'int' object is not subscriptable);convertLonStrToDegree / convertLatStrToDegree(helper.py)+ getBaseLonByZone(realsuntime.py)加 isinstance(int, float) 分支,字符串路径原样(向后兼容字节级一致)。
  • 顺手修:① 导航搜索(⌘K)全 22 模块加 keywords 索引(搜「卜卦盘」出辅盘、「皇极经世」出其他卜);② 关于星阙对话框换软件真 icon(不再是占位的「星阙」图);③ 波斯向运「应期年数」表格联动(年数改了表格按新年数重算);④ 事盘字符串 payload.snapshot 在 AI 分析里被识别(之前只认对象式 {content},五兆/太玄/荆诀/神易数 事盘 AI 挂载预览不再泛化);⑤ 中点盘(uranian dial)行运/太阳弧行星 glyph 不再黑色描边(清晰色显);⑥ 策天飞星大运宫名/年龄字重 700/800 → 500/600 防糊;⑦ AI 挂载 source 选择切到 case 后下拉刷新案例。
  • 工程:jest 657 → 658(新增 13-技法 timepoint 锁定断言);preflight 36 → 39 个 sentinel 块——[37] 起课时间 13 技法 + 4 builder opts + 5 switch case + 4 payload schema + divTime 兜底 + 测试锁,[38] 合盘 :9999 端点 + 5 props 透传 + handleRelativeOnChange + ResizeObserver + paramsToFields 净化 + 黄道局部定宽,[39] Python helper 数值 geo 容错。Python 排盘组件已更新 → runtime 2.6.5-runtime1

v2.6.5 — Synastry interaction chain rebuilt end-to-end + AI "Set-Time" mount expanded from 8 → 13 techniques: the carry-over Synastry breakage (endpoint mis-routed to the chart service, large blank below sub-charts, left-panel changes had no effect, popovers were empty) is fully resolved; AI Analysis "Set-Time" mount only listed 8 divinatory methods before — this release adds 5 more (HuangJi / TaiXuan / JingJue / WuZhao / ShenYiShu), and the mount-settings drawer for each truly feeds the back end and recomputes the snapshot. Default behavior is bit-for-bit identical to v2.6.4. The runtime is updated this release (2.6.5-runtime1) and downloads automatically on upgrade.

  • Synastry — all 5 sub-charts end-to-end usable: (1) endpoint restored to Java :9999 (v2.6.1 silently moved /modern/relative to the chart service :8899, but request() RSA-encrypts the body and :8899 doesn't decrypt → 400 net::ERR_FAILED made every sub-technique fail); (2) AstroRelative adds a ResizeObserver to measure the real container height (the global height: 660 in models/astro.js was hard-coded and never tracked the window, producing a large blank below Synastry/Marks on tall screens); (3) the left-panel chain (chartStyle / dispatch / onChange) is forwarded end-to-end (index.js → AstroRelative → 5 sub-charts → AstroChartMain); (4) a new handleRelativeOnChange writes the fields directly (bypassing the natal-chart changeCond path that silently swallowed the change), with componentDidUpdate watching the fields to auto-doChart(); (5) sub-charts drop the hidezodiacal / hidehsys flags (without that, the Houses & Zodiac popover renders nothing) and paramsToFields stops overwriting hsys / zodiacal / siderealAyanamsa (without that, the left panel reverted on every re-render); (6) long ayanāṃśa names (Lahiri ICRC(官定2022)) wrap via Synastry-scoped CSS (overflow + min-width:0 + ellipsis) so the trigger box stays a fixed 50/50 — natal/BaZi/ZiWei pages unaffected.
  • AI Analysis "Set-Time" mount completed with 5 more techniques (13 in total): the dropdown now offers HuangJi / TaiXuan / JingJue / WuZhao / ShenYiShu. TaiXuanMain / JingJueMain / WuZhaoMain / ShenYiShuMain each export buildXxxSnapshotForFields(fields, opts), and opts flows through to the kentang POST body — TaiXuan/JingJue divination-seed (empty = derived from Set-Time yyyyMMddHHmm), WuZhao casting mode (ganzhi/day/hour/minute/tang) + number + manual splits, ShenYiShu hour/season auto-or-manual all genuinely re-cast on change. techniqueMountSettings.js lifts the four entries from sectionsOnly to kind: 'payload' with explicit FIELDS schemas (without the lift, sectionsOnly never invokes regenerateCaseTechniqueSnapshot and settings changes are silently dropped); the SECTIONS_ONLY = {sixyao, tongshefa, mundane, huangji} test invariant is tightened in lock-step. HuangJi intentionally stays sectionsOnly (natal path uses buildHuangJiSnapshotForFields to recompute, case path reads the stored snapshot; this is the intended design).
  • AI four-way mirror sync: aiExport.js (section presets / store-key map / per-tech section filter / alias list) was already in place; aiAnalysisContext.js keeps TIMEPOINT_CASTABLE_SET and listAnalysisTechniqueOptions('timepoint') in lock-step at 13 items; regenerateCaseTechniqueSnapshot adds 5 explicit case branches that pull p.seed / p.mode / p.hourSource / ...; AIAnalysisMain.js covers the new 5 in its "one-click all techniques" button and updates the drawer hint.
  • Set-Time synthetic-record "time NaN-undefined" fix: the Set-Time source record keeps the time in record.divTime (not record.birth); buildFieldObject previously read only record.birth, fell through to new DateTime({zone}) (which uses the current wall-clock time), and the kentang back end then formatted the timestamp as NaN-undefined-undefined undefined:undefined:undefined (most visibly on the five new builders). Now falls back through record.birth || record.divTime.
  • Python true-solar-time helpers accept numeric lon/lat/zone: charts saved via the map picker stored decimal-degree floats and used to crash with 'float' object has no attribute 'lower' / 'int' object is not subscriptable; convertLonStrToDegree / convertLatStrToDegree (helper.py) and getBaseLonByZone (realsuntime.py) add an isinstance(int, float) branch while leaving the DMS-string path bit-for-bit unchanged.
  • Smaller fixes folded in: (i) command-palette (⌘K) navigation now indexes all 22 modules' inner techniques via keywords (search "卜卦盘" now reaches the auxiliary-chart page; "皇极经世" reaches the other-divination page); (ii) the About dialog uses the actual app icon (no more "星阙" placeholder); (iii) Persian Directed "years to follow" now triggers the right-side table to recompute; (iv) string-typed payload.snapshot is accepted by the AI analysis preview (previously only object-shaped {content} was recognised, so WuZhao/TaiXuan/JingJue/ShenYiShu case-store previews fell back to a generic summary); (v) Uranian dial planet glyphs no longer get a black stroke (clean colour fill); (vi) Cetian "Da Yun" palace name + age dropped from font-weight 700/800 to 500/600 to stay legible; (vii) the AI mount source select refreshes the case list when reopened.
  • Engineering: jest 657 → 658 (added a 13-technique Set-Time list lock-in test); preflight 36 → 39 sentinel blocks — [37] Set-Time 13 techniques + 4 builder opts + 5 switch cases + 4 payload schemas + divTime fallback + test invariant, [38] Synastry :9999 endpoint + 5 props forwarding + handleRelativeOnChange + ResizeObserver + paramsToFields purity + scoped zodiac-select width, [39] Python helper numeric-geo tolerance. Python compute modules updated → runtime 2.6.5-runtime1.
  • v2.6.5 是桌面发布线的 beta 扩展版,重点覆盖新命法/卜法后端、本地数据管理、结构化 AI 导出、设置持久化与明暗主题。
  • v2.6.5 is a beta expansion of the desktop release train, focused on new traditional-method engines, local data management, structured AI export, persistent settings, and light/dark UI polish.
  • 新增并规范接入太乙、金口诀、皇极经世、五兆、太玄、荆诀、神易数、Kin Astro、七政四余、奇门等命法与卜法后端。
  • Added and normalized backend integrations for Taiyi, Jin Kou, Huangji/Wangji, Wuzhao, Taixuan, Jingjue, Shenyishu, Kin Astro, Qizheng, Qimen, and related specialty methods.
  • 三式合一中奇门与太乙固定走 kentang2017 后端口径,六壬保留现有本地六壬实现。
  • Sanshi United routes Qimen and Taiyi through the kentang2017 backend while LiuReng remains on the existing local LiuReng implementation.
  • 奇门和三式合一页面已移除后端不支持的月家奇门选项,不再静默回退到旧本地算法。
  • Unsupported Qimen month-chart selection was removed from Qimen and Sanshi surfaces instead of silently falling back to the old local calculation.
  • 管理命盘与管理事盘会保留新技法输入、标签、快照、后端原始结构化数据、JSON 导入导出与重开恢复行为。
  • Chart management and case management preserve new-method inputs, tags, snapshots, raw backend payloads, JSON import/export, and reopening behavior.
  • AI 导出直接读取结构化后端数据,并为每个支持技法、tab 与页面提供可勾选导出分段。
  • AI export reads structured backend data and exposes selectable export groups for each supported technique, tab, and page.
  • 用户设置、桌面窗口大小与必要 UI 选项会在关闭、重开和版本更新后继续沿用。
  • User settings, desktop window size, and necessary UI choices persist across close/reopen and app updates.
  • 启动控制台采用 Daily / Offline Ready / Failed 共用骨架,实时跟随后端进度,并统一使用新版星阙 icon。
  • The startup console now uses one shared Daily / Offline Ready / Failed skeleton, follows real backend progress, and consistently uses the new Xingque icon.
  • 窗口恢复已按首个可见帧验收,避免重开时先大后小或大小跳动。
  • Window restoration is verified from the first visible frame to prevent launch-size flashing or bouncing.
  • 全局明暗主题、下拉层、弹层、加载态、管理列表与导出控件已再次检查并打磨。
  • App-wide light/dark mode contrast, dropdowns, overlays, loading states, management lists, and export controls were audited and polished.
  • 保留此前奇门遁甲一致性与桌面交付修复。
  • Previous Qimen Dunjia parity and desktop delivery fixes remain preserved.

下载 / Download

  • 推荐安装包 / Recommended download: Horosa-Installer-macos-arm64-offline.pkg
  • 适合普通用户、中国大陆、弱网和离线转发场景。
  • Best for ordinary users, weak-network environments, and offline forwarding.
  • 当前平台目标 / Platform target: Apple Silicon (arm64)

安装步骤 / Installation

  1. 下载 / Download Horosa-Installer-macos-arm64-offline.pkg
  2. 双击 .pkg 开始安装 / Double-click the .pkg to start installation
  3. 安装完成后直接打开 /Applications/星阙.app / Open /Applications/星阙.app after install
  4. 如系统提示安全确认,请在“系统设置 -> 隐私与安全性”中放行 / If macOS asks for confirmation, allow it in System Settings -> Privacy & Security

仓库入口 / Repository Entry Points

自动更新与桌面交付 / Auto-Update And Desktop Delivery

  • 自动更新继续依赖 horosa-latest.json、桌面安装包与独立 runtime 资产,不要求改变客户端协议。
  • Auto-update continues to rely on horosa-latest.json, desktop release assets, and the separate runtime artifact without changing the client protocol.

已知限制 / Known Limitations

  • 仓库中的一部分 legacy 模块仍保留较强的本地运行和内部依赖假设。
  • Some legacy modules in the repository still assume a strongly local runtime environment and internal dependency chain.

技术资产 / Technical Assets

此 Release 中其余资产是安装器与自动更新器使用的内部支持文件,普通用户可以忽略。
The remaining assets in this release are internal support files for the installer and auto-updater. Ordinary users should ignore them.