# G6 雷诺曼本地规则与素材说明 本模块固定使用 36 张 Petit Lenormand 符号牌,提供三张连读和五张对照。洗牌、抽牌校验、牌序冻结、本地释义及组合提示全部在本地完成;模型只解释已经冻结的排列。规则版本为 `lenormand-line-v1`,图像版本为 `lenormand-art-v1`。 ## 牌组、编号与资料来源 固定编号按发行者自己的 [As We Wish Lenormand 原始指南](https://shop.vermilion.cc/pages/guidebook-for-as-we-wish-lenormand)逐项核对。该指南的现代插图和解释文字没有复制进本项目。博物馆 [36 张 Lenormand 藏品记录](https://www.britishmuseum.org/collection/object/P_1896-0501-413)用于核对这种牌组的历史形态:36 张牌和独立场景符号,编号 1 是骑手。不能凭这一藏品页声称所有年代牌组的编号分布完全一致。 | 编号 | 本项目名称 | 编号 | 本项目名称 | 编号 | 本项目名称 | |---|---|---|---|---|---| | 1 | 骑士 | 13 | 孩童 | 25 | 戒指 | | 2 | 四叶草 | 14 | 狐狸 | 26 | 书 | | 3 | 船 | 15 | 熊 | 27 | 信 | | 4 | 房屋 | 16 | 星 | 28 | 男士 | | 5 | 树 | 17 | 鹳 | 29 | 女士 | | 6 | 云 | 18 | 犬 | 30 | 百合 | | 7 | 蛇 | 19 | 塔 | 31 | 太阳 | | 8 | 棺 | 20 | 花园 | 32 | 月亮 | | 9 | 花束 | 21 | 山 | 33 | 钥匙 | | 10 | 镰刀 | 22 | 岔路 | 34 | 鱼 | | 11 | 鞭 | 23 | 鼠 | 35 | 锚 | | 12 | 鸟 | 24 | 心 | 36 | 十字架 | 名称是传统符号的中文译名;全部关键词、象征说明、行动建议和组合例句为本项目原创中文内容。人物牌保留传统名称,角色由用户明确说明,不从图像推断现实性别、伴侣或特定人物。首版不加入额外人物牌,不加入扑克插图层,不制作 36 张大牌阵。 ## 本地排列约定 不同实践者的连读方式存在差别。下面是本项目公开且固定的产品规则,并不宣称它是唯一历史读法。 三张 `line-3` 从左至右冻结为 1、2、3。第 2 张是中心主题;依次阅读 1→2 和 2→3。前一张给出对象,后一张限定对象的表现方式。最后围绕中心主题把两个候选短句连成与问题有关的情境。左右位置分别标为“左侧条件”“中心主题”“右侧展开”,不自动当作过去、现在、未来,也不把第三张说成注定的结果。 五张 `line-5` 从左至右冻结为 1 至 5。第 3 张是中心主题;依次阅读 1→2、2→3、3→4、4→5,再对照两端 1↔5 和近侧 2↔4。对照用于检查相距的条件是否呼应,保留左对象、右条件的读法,不替代相邻短句。位置分别标为“左端背景”“左近条件”“中心主题”“右近展开”“右端延伸”。相邻读法和对照读法冲突时解释各自条件,不删除冲突、不凭位置推断精确日期。 两种排列都没有正逆位。抽取次序决定排列次序,揭示顺序不改变它。选中的牌不能重复,也不能因为解释不顺畅而自动更换。 ## 组合而非单牌堆叠 核心保存 24 条定向组合例句。同一对牌调换顺序时,对象和条件发生变化: | 组合 | 候选短句 | 应核对的条件 | |---|---|---| | 心→信 | 情感通过书面消息表达 | 实际文字是否表达了情感;不断言将收到表白 | | 信→心 | 书面消息带有情感投入 | 消息措辞和用户已知关系;不认定双方相互喜欢 | | 戒指→鼠 | 持续约定被小消耗侵蚀 | 琐碎失约或担忧是否正在影响履约 | | 鼠→戒指 | 小消耗正在形成重复循环 | 损耗为何重复,以及可停止的环节 | | 山→钥匙 | 障碍需要一个关键解法 | 哪个实际条件能改变限制 | | 钥匙→山 | 关键入口仍受到阻碍 | 知道解法和能够执行之间的差距 | | 书→信 | 未公开内容正在被写明 | 是否有可查阅的资料,以及披露范围 | | 信→书 | 文字背后仍有未说明内容 | 缺失的条款、证据或需要追问的说明 | 其余不同牌组合采用公开的本地语法:左牌的 `noun` 作为对象,右牌的 `modifier` 提供条件。返回 `kind:'composed'` 并注明“候选短句,需围绕问题和中牌检查,不是已知事实或固定预言”。已编写的例句返回 `kind:'curated'`;它代表本项目预写示例,同样不能当作事实。没有假称已经人工核对全部 1,260 种传统组合。 三张对照样例 `[26 书, 13 孩童, 35 锚]`:中牌是小规模新起点;书→孩童说明学习或未公开内容处于初始阶段,孩童→锚说明新的尝试需要稳定坚持。可以据此讨论小步学习、固定练习安排及待核实资料,不把三个单牌摘要分别列出就视为完成解读。 五张对照样例 `[24 心, 27 信, 6 云, 21 山, 33 钥匙]`:第 3 张云确定信息缺口主题;心→信、信→云、云→山、山→钥匙逐步描述情感表达、文字含糊、含糊与阻碍、关键澄清条件。1↔5 对照情感与关键条件,2↔4 对照文字与障碍。解读应提出需要写明的具体问题,不能断言关系结局。 ## 生成解读时必须保留的依据 Host 将冻结问题、牌号/牌名、位置、中心牌、相邻组合、五张对照及 `readingGuide` 作为用户资料传入所选模型。系统解读规则应要求先说明中心主题,再连读相邻短句,五张还需讨论对照;最后给出与问题相关的观察和行动。不要套用塔罗逆位、大小阿尔卡那或“现状/阻碍/建议”牌位。 生日、身份、健康、财务和事件日期只引用用户明确提供的信息,不从牌面补齐。棺不推断死亡,鹳不推断怀孕,蛇或狐狸不认定某人骗人,鱼不预测投资收益。模型推测不写成背景记忆中的本人事实。追问保留首次冻结的牌序和背景版本,取消与部分输出遵守模块公共流程。 ## 原创素材与许可 `src/assets/lenormand/` 内有 36 幅独立 SVG,每幅由本项目编写的 SVG 几何路径构成,画布 `300×480`,采用统一纸色、墨绿线描和几何符号。未下载或描摹现代牌组插图,未嵌入外部图像、图标库、脚本或字体文件。中文标签使用设备字体。`manifest.json` 按每张记录编号、名称、文件、SHA-256、原创说明、参考链接、创作者和 MIT 许可;目录内 `LICENSE` 提供完整许可。 `src/lenormand/assets.ts` 从实际 SVG UTF-8 字节生成 36 条 `data:image/svg+xml;utf8,` URI,供客户端直接打包离线加载;不依赖 Host 静态资源路由。自动化测试对 URI 解码结果与原 SVG 逐字节核对,避免派生数据与素材源不一致。修改 SVG 后必须重新生成对应 URI 和 manifest 哈希。 ## 核心接口与边界 - `LENORMAND_CARDS`、`LENORMAND_SPREADS`:冻结的内容定义。 - `createLenormandDeck(randomBelow)`:Host 注入 `crypto.randomInt(exclusiveMax)`;Fisher–Yates 对全部 36 张洗牌并冻结。没有默认 `Math.random`。 - `calculateLenormand({question,spreadId,cardIds,createdAt})`:校验数量、唯一性、牌号、问题长度和有效 ISO 日期,返回纯本地冻结结果。 - `lenormandPair(left,right,indices)`:返回定向短句、解释及 `curated`/`composed` 来源标记。 - `lenormandAssets`:编号到原创 SVG 数据 URI 的只读映射。 核心返回结果仅用于已经揭示完的排列。Host 洗牌状态中的全部暗牌编号不可序列化到浏览器;选择阶段只发送槽位和已揭示牌,不提前发送完整结果。UI 不能依赖看见暗牌身份进行选择。 ## 定向验证 `node --import tsx --test tests/lenormand.test.ts` 覆盖八组本地检查:36 张编号与内容、两种排列结构、注入随机源的边界及唯一性、三张冻结连读、五张相邻与对照、全部不同牌的定向候选语法、输入拒绝,以及 36 幅原 SVG/哈希/离线 URI 逐字节一致。它不证明真实模型的组合解读质量,也不替代 Host 暗牌防泄露、跨模块背景与原生桌面验收。