synastry
当两个人的出生信息需要一份带不确定度的 JSON v2 合盘计算时使用,包括合盘、星盘配对、精确时间、有界的时间窗口或只有日期的记录。不适用于解读已有的 v2 文件、旧版 TXT、单人本命盘、行运、预测或所谓契合度分数。
- 分组
- 占星
- 版本
- 0.8.4
- 许可证
- AGPL-3.0-or-later
安装
/plugin install astrology@misoto22然后这样调用:
/astrology:synastry这个技能只负责算,不负责解读。它的核心是把不确定度当作一等公民:出生时间未知或只精确到小时,会被表示成一个有界的时间窗口,而不是随便取个中间值假装精确。计算结果写成 JSON v2 文件,其中记录了用的是哪个星历后端、哪个版本,好让结论可以被复核。默认按隐私最小化处理,只有明确要求归档模式时才保留完整出生信息。算完之后它会把文件交给解读技能,两步之间的边界是刻意的——计算可以复核,解读会随语境变化。
什么时候会触发
CI 实际用来评测这个技能的 prompt——所以它们不会和技能的真实行为脱节。
会触发
- Calculate a synastry JSON v2 artifact for two people. Both supplied exact birth times, accuracy in minutes, IANA timezones, and coordinates.
- Run synastry for us, but I know only one person's birth date and timezone; preserve that uncertainty instead of inventing a time.
- 合盘:其中一人的出生时间只知道在 09:00 到 11:00 之间,请把这个时间范围保留下来。
- Build a privacy-minimal, uncertainty-aware synastry v2 request and calculate it with the strict Swiss Ephemeris backend.
不会触发
- What's my rising sign from this one birth record?
- Use astrology to predict whether I will begin a relationship next month.
- Interpret the attached validated synastry v2 JSON artifact and save the reading.
- Use this legacy synastry_A_B.txt as the calculator request.
Produce one validated schema_version: "2.0" calculation artifact, then hand its exact path to $synastry-reading. Keep interpretation out of the calculator artifact.
Prepare the request
- Start from references/request.example.json.
- Assign two distinct stable subject
idvalues. Include a display name or pronouns only when the user supplied them; never invent an identity, salutation, gender, relationship role, or preferred location. - Resolve each civil date and IANA timezone. For an
exactrecord, also resolve latitude and longitude. - When given only a place name, consult a current authoritative source, choose a country-qualified result, state the selected place, timezone, coordinates, and source, and ask before continuing when the place is ambiguous. Never recall or default coordinates.
- Choose one declared time mode for each subject:
| Mode | Required birth fields | Calculation boundary |
|---|---|---|
exact | date, time, time_accuracy_minutes from 0 through 15, IANA timezone, latitude, longitude | Calculate one instant, houses, angles, derived values when enabled, and overlays when both subjects are exact. |
window | date, same-date time_window.start and later time_window.end, IANA timezone | Sample the closed interval; omit houses, angles, sect, lots, and overlays. |
date-only | date, IANA timezone | Sample the complete local civil day with the same restrictions as window. |
Never convert uncertainty into an exact noon chart. When the user gives an imprecise phrase, ask for a bounded window or confirm date-only instead of inventing endpoints.
Reject nonexistent civil times. For an ambiguous exact time, require timezone_fold or both a documented utc_offset_hours and utc_offset_reason. For an ambiguous window endpoint, require a reasoned offset for the interval; do not choose a daylight-saving fold silently.
- Fill every
optionsfield. Read references/calculation-conventions.md before choosing profiles, orbs, houses, derived values, or backend policy. Keepswiss-onlyfail-closed unless the user explicitly accepts the recorded Moshier limitation. - Use
privacy: "minimal"unless the user explicitly requests an archival artifact. Useprivacy: "full"only after explaining that it retains the supplied local birth and location provenance. - Record only relationship context the user explicitly supplied. When none was supplied, use a neutral description and an empty
requested_domainsarray; never infer context from chart data.
The request schema is closed. Remove no required field and add no undocumented field.
Run the calculator
Prefer a protected request file or standard input over inline JSON, which may remain in shell history.
python3 scripts/compute_synastry.py --request request.json --out artifacts
Use --request - for standard input or --json only when inline data exposure is acceptable. Add --ephemeris-path when Swiss data files live outside the binding default. Add --overwrite only when the user explicitly authorizes replacement of the deterministic destination.
Stop on any nonzero exit. Preserve the bounded error and resolve the request, timezone, backend, or filesystem problem instead of improvising an artifact.
Enforce JSON-only output
Retain the one path printed after wrote. Confirm that it exists, ends in .json, and names the calculated chart ID. Do not create a TXT companion, compatibility alias, prose report, or second calculation artifact.
Treat the artifact as sensitive. Report its path and material limitations without pasting birth data or chart contents into chat.
Hand off automatically
After a successful write:
- Invoke
$synastry-readingimmediately with the exact JSON path. - Pass along only the explicit relationship context and requested domains from the user or request; the calculation artifact does not authorize a relationship-specific reading module.
- Do not ask whether the user also wants an interpretation.
- Do not invoke the reader when calculation failed or the JSON path is absent.
- If the reader is unavailable, report the JSON path and the missing component instead of interpreting inline.
After the reader succeeds, report the JSON path, the validated Markdown path, and any limitation that materially constrains the reading. Keep the reply in the user's language.
Read references/examples.md for exact, date-only, daylight-saving ambiguity, and strict-backend cases.