Core Principles
This skill only accepts screenshots of charts already cast by an external APP or manual transcriptions provided by the user; it does not cast charts itself. The host first transcribes palace by palace, then hands the object to lib/chart.js 's normalizeChart(transcribed); it must not call flyStars, and must not use model mental calculation to fill in the chart.
Execution Flow
- Confirm the source is "external APP" or "manual transcription," and record the source name. Screenshots are read by the host; the code does not claim to have image recognition capability.
- According to methodology.md , transcribe the chart-level
月令、值符、值使, as well as the方向、天盘干、地盘干、八门、九星、八神、标记。 - of the eight directions plus the central palace, nine palaces in total; every marker is retained in the audit
chartasraw、source、school. Door break and door pressure are recorded separately under their different original terms, not interchanged and not merged. - Call
normalizeChart(transcribed)。errors; when non-empty, only display the structured safe errors and the one-time supplementary list and stop Qimen interpretation; unknown field names belong tountrusted-audit-onlyinput and do not enter public errors; errors only give stable$unexpected[n]references under the parent container. Per-container unknown fields, total public errors, number of nine palaces, and number of single-palace markers are all limited by frozen constants; when exceeded, give the fixedunexpected_fields_truncated、errors_truncated、palace_count_exceededormarker_count_exceededrespectively, without deeply traversing out-of-bounds content.chartis for local audit only and does not enter the model context or the report. errorsWhen empty, only handsafeChartto interpretation and reporting.safeChartcontains only confirmed enums, presence flags, and stableprovenanceRef, and does not contain source names,raw、source、schoolfree text; expression and action renderREPORT_CONTRACT.evidenceRulesandREPORT_CONTRACT.redlinesas-is, and this file does not rewrite them.
State Input
Explicit values can be transcribed directly as strings. When screenshots are missing or doubtful, use { "status": "missing|unreadable|uncertain|unknown", "raw": "外部盘原词" }。raw to retain the original image text only in the audit chart ; it is forbidden to change doubtful fields into definite values in order to pass validation. When it is confirmed that there are no palace-level markers, an empty array must be explicitly filled in, and the field must not be omitted.
Routing Boundaries
When only birth information is available and no external Qimen chart is provided, transfer to bazi; for explicit marriage and relationship questions, transfer to love-marriage; for explicit career and wealth questions, transfer to wealth-career, where Qimen serves only as an optional external enhancement. When career and marriage/relationship are explicitly asked about at the same time, transfer to bazi to output an overview, and explain that one may then enter the two domain skills separately for deeper analysis. Palm photos transfer to palm. Residential feng shui and divination capabilities are both future / undelivered; they are currently unsupported and non-existent skills must not be called.
When the user explicitly names a skill, it overrides automatic routing, but the boundary that this skill does not cast charts itself must still be observed. When information is insufficient, ask once for all missing items and stop; when the user asks this skill to cast a chart, explain that chart casting is currently not implemented and ask them to provide a trustworthy external APP chart.
Single Source of Safety
Read lib/chart.js from REPORT_CONTRACT. Its disclaimer is generated by the shared disclaimerFor('奇门') , andevidenceRules and redlines are also shared safety snapshots. The report must output these fields verbatim one by one, and must not write or rewrite synonymous safety wording within the skill.