v2.6.5 Beta
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.5Beta
本版更新 / 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不解密 → 400net::ERR_FAILED,「每个技法都用不了」根治);②AstroRelative加 ResizeObserver 实测真实容器高度(models/astro.js:347 height:660硬编码不随窗口缩放,大屏出大块空白);③ 左栏交互链chartStyle / dispatch / onChange全链路透传index.js → AstroRelative → 5 子盘 → AstroChartMain;④ 新增handleRelativeOnChange直写 fields(不再走changeCond那条会先去拉本命盘、失败时静默不更新的路径),componentDidUpdatewatchfields.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.js4 法升级为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.jsTIMEPOINT_CASTABLE_SET与listAnalysisTechniqueOptions('timepoint')两份必同步含 13 项;regenerateCaseTechniqueSnapshotswitch 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→ fallbacknew 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/relativeto the chart service:8899, butrequest()RSA-encrypts the body and:8899doesn't decrypt → 400net::ERR_FAILEDmade every sub-technique fail); (2)AstroRelativeadds a ResizeObserver to measure the real container height (the globalheight: 660inmodels/astro.jswas 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 newhandleRelativeOnChangewrites the fields directly (bypassing the natal-chartchangeCondpath that silently swallowed the change), withcomponentDidUpdatewatching the fields to auto-doChart(); (5) sub-charts drop thehidezodiacal / hidehsysflags (without that, the Houses & Zodiac popover renders nothing) andparamsToFieldsstops overwritinghsys / 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 / ShenYiShuMaineach exportbuildXxxSnapshotForFields(fields, opts), andoptsflows through to the kentang POST body — TaiXuan/JingJue divination-seed (empty = derived from Set-TimeyyyyMMddHHmm), WuZhao casting mode (ganzhi/day/hour/minute/tang) + number + manual splits, ShenYiShu hour/season auto-or-manual all genuinely re-cast on change.techniqueMountSettings.jslifts the four entries fromsectionsOnlytokind: 'payload'with explicit FIELDS schemas (without the lift,sectionsOnlynever invokesregenerateCaseTechniqueSnapshotand settings changes are silently dropped); theSECTIONS_ONLY = {sixyao, tongshefa, mundane, huangji}test invariant is tightened in lock-step. HuangJi intentionally stayssectionsOnly(natal path usesbuildHuangJiSnapshotForFieldsto 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.jskeepsTIMEPOINT_CASTABLE_SETandlistAnalysisTechniqueOptions('timepoint')in lock-step at 13 items;regenerateCaseTechniqueSnapshotadds 5 explicitcasebranches that pullp.seed / p.mode / p.hourSource / ...;AIAnalysisMain.jscovers 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
recordkeeps the time inrecord.divTime(notrecord.birth);buildFieldObjectpreviously read onlyrecord.birth, fell through tonew DateTime({zone})(which uses the current wall-clock time), and the kentang back end then formatted the timestamp asNaN-undefined-undefined undefined:undefined:undefined(most visibly on the five new builders). Now falls back throughrecord.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) andgetBaseLonByZone(realsuntime.py) add anisinstance(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.snapshotis 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
:9999endpoint + 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.5is 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
- 下载 / Download
Horosa-Installer-macos-arm64-offline.pkg - 双击
.pkg开始安装 / Double-click the.pkgto start installation - 安装完成后直接打开
/Applications/星阙.app/ Open/Applications/星阙.appafter install - 如系统提示安全确认,请在“系统设置 -> 隐私与安全性”中放行 / 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.