SKILL · 兵马俑出行看板(qinling-trip-board)
> 对标包:gugong-family-trip / mogao-trip-board。骨架纪律同源,内容全部兵马俑原生。
> 第一原则:页面 = 单日期实例。数据层 = 全部档位与规则。 用户输入日期 → 生成时查表算值 → 页面每个数字只属于那一天;页面不出现档位表、不解释分支体系。
0. 本技能解决什么(兵马俑的三条独有维度)
- 一票双园、一半人白买——120 元含丽山园(铜车马真品在那),旅行团集体跳过,黑车话术"丽山园没啥好看的"。看板必须显式推丽山园。
- 预约即门槛——实名分时、人证票合一、无现场窗口、免票也要预约、节假日一证限约一次、没身份证的孩子用户口本。错过即进不去。
- 档位随公告走——开放时段、承载量、放票节奏全部分档,必须按输入日期算 + 当期公告现核。已建独立档位五档:旺季常规(3.16–11.15)/ 淡季常规(
else)/ 暑期延时(7–8 月)/ 国庆前段(9.25–9.30)/ 国庆峰值(10.1–10.7)——常规档按官网公示的旺淡季两套时段拆开,淡季闭馆比旺季早 30 分钟;其余法定节假日(元旦 / 春节 / 清明 / 五一 / 端午 / 中秋)走「待公告档」——命中即按常规日口径估算并显式标注「待公告」,绝不显示为"平峰日"(见 §9)。另有一个与之正交的「日型」维度(周末 / 周五 / 周一 / 周中,见 §9 与03§一之三):只作用于排队话术、改期建议与分时段人流,不碰开放时刻、承载量、票价——官网这三项一律不分周末,按周末另建档位行等于暗示硬值不同,是编造。
1. GATE 0:日期解析(三分支)
- 具体日期:"10 月 2 日" → 直接进入 GATE 1。日期早于今天 → 不生成,回一句"这一天已经过去了,要不要查明天的"(
build.py对过去日期直接报错退出、退出码 2,不是只靠自觉)。 - 时间段:"国庆去""下周六" → 取段内建议日(优先非峰值:假期首尾日),向用户确认一次后再生成。
- 泛问(没给日期):"想去兵马俑" → 给一句话分档结论(今天距国庆/暑期多远、当前档位票价时段),附一句"给我个日期,我给你排那一天",不生成完整看板。
- 同行人与偏好(带娃/老人/看演出/赶高铁):用户提了就按需裁剪主线可选节点;不追问,用默认全量。
2. GATE 1:L1 离线计算(不联网,跑 build.py)
python scripts/build.py --date 2026-10-02 --out output
build.py直接解析references/03-时间与档位.md的 §一 档位表(开放时段 / 闭馆 / 停止检票 / 承载量 / 票价)、§二 L3 快照表(统一放票日 + 适用年度)与 §一之三 日型表,再按 §七 推导规则算出行程时刻——档位值与日型分类都不在代码里另写一份。解析失败才退回内置兜底值,并在 stderr 告警。- 同时解析 §一之二逐年假期表(法定节假日的窗口、兜底档位、官方依据)。日期命中且命中的档位行「类型」列不是
节假日时进入待公告态:时段与承载仍按常规档估算,但标签改「待公告」、页头出提示条、页脚追加依据,stderr 打告警并给用户话术。 - 日型表(§一之三)同时解析:按星期几派生
weekend/fri/mon/midweek,只对常规类档位生效——节假日档(国庆峰值 / 前段 / 将来的春节档)与待公告态判为不生效,页面整段删除。脚本校验 7 个星期是否恰好覆盖一次:缺一天则该天静默退回通用话术,重一天则优先级取决于表内顺序,两者都[WARN]。 - 判据是 §一 的「类型」列,不是"是否落到
else兜底行"——旺季常规档(03-16~11-15)会先把清明/五一这类日期"接住",此时若沿用"落到else才算平峰"的判据,它们会静默变成"平峰日"。同一条判据也就是待公告的出口:官方公告发布后在 §一 新增该节假日档位行、类型写节假日,当日即自动退出待公告。 - 逐年假期表未覆盖的年份(如尚未建表的 2028)会在页脚提示"该年度假期表未建立"——避免下一年度静默退回平峰口径。
- 一并算出:季节票价档、D-x 倒计时、假期第 N 天、长恨歌开售日(参观日 −7)、票况分支(已放票 / 未放票 / 放票安排待公告 / 通道常开)、时间轴形态(极值 / 中间 / 轻松三版之一)、日型及其四支话术(周末 / 周五 / 周一 / 周中)、叁区人潮强度条的相对高度(形态 × 日型六种)、肆区费用账(门票取命中档位行的票价列)。
- 叁区人潮强度条是本技能唯一的可视化(
PACING_RHYTHM,内联 SVG,图代文,取代原先的三行文字):只有"分时段人流"具备跨时间轴分布形态,其余数据全是单值。三条硬约束——无量纲不标人数(官网不公示分时段客流)、带【参考】、必须档位/日型感知(周一与待公告画等高虚线框、不给规律)。理由与边界见03§五 可视化纪律。 - 票况只在 §二 登记的「年度」= 参观年时才承认放票日:跨年(如拿 2026 的 9/21 算 2027-10-02)或年度未登记时退 B 态「放票安排待公告」——不给倒计时,只给发布节奏(往年通常 9 月中旬)+复核路径。禁止跨年套用往年放票日(与 §一之二 的待公告同源,见 §6)。
- 产出两份:
output/兵马俑出行看板-<YYYYMMDD>.html(token 已全量填值、OPT 段已按档位择一)+output/values-<YYYYMMDD>.json(全部计算值 +_flags开关状态 +_allowed_dates)。 - 核 / 参考标签是数据驱动的:由
03§一「值来源」列决定——含「参考」即参考级(往年/第三方口径),否则为「核」。不按档位名写死:按档位名硬编码会在跨年降级时与告警互相矛盾(档位名说"核"、时效门禁判"参考")。 - 数据时效门禁(三级,基准随"本次命中的档位行"走):① 该行在
03§二 登记了「年度」→ 年度覆盖参观年即不过期;② 只登记核验日期 → 同年且距今 ≤365 天;③ 都没有(如常规档,值来自 L4B 常年结构)→ 退回全表最早基准。过期即把该档位标签降为「参考」、页头追加提示、stderr 打告警并给出对用户话术。 - 禁止把"全表最早核验日"当统一基准:只要 §二 里留着一条往年快照,此后所有年份都会被判跨年——新档位即便在当年公告发布后核验过,也会被污染成「参考」。基准必须随"本次命中的档位行"走(见上一条三级门禁)。禁止跨年静默套用往年公告;也禁止"日志说已标参考、页面仍标核"这类自相矛盾。
- 退出码:填值有缺口(
[ERR] 未填充 token)即 exit 1,不得交付;参观日早于今天 → exit 2(§1 禁令在脚本层闭环,且不会静默把过去日期当"已过期"往下走);另有[WARN] 模板一致性(开关无对应<!--OPT:-->段 / token 产出但模板未用)需尽快修。 - 若 build.py 不可用:按
03册手工查表得出同一组值,填入模板同名{{TOKEN}},并同样跑verify.py。 - 禁改:不得绕过
03册自行发明数值或时刻;03册没有的数字要么现查(GATE 2),要么标「未查到」。
3. GATE 2:L2 现查(每次必做,查到才写)
- 天气:按
references/09-天气接入.md查临潼区预报,然后用脚本参数落值——python scripts/build.py --date <日期> --out output/ --weather-status "<statusbar 短句>" --weather-detail "<天气卡整句,含三条决策联动>"。不要手工改产物 HTML(那正是本次重构拆掉的"模型重写文件"隐患)。若已跑过不带参数的产物,查到天气后重跑一次带参数即可(脚本幂等,产物覆盖)。
- 有效边界:距出发 ≤7 天可查——≤3天精确级(温度区间+降水概率),4–7天趋势级(只给趋势,不给数值,注明"出发前 3 天再核")。
->7天不查、也不猜:脚本已按 delta 写好边界说明("距出发 N 天 · 未进入预报范围 …… 出发前 3 天再看板")。此时不要传--weather-*参数,更不要为了"把空填上"而编一个天气——那会被用户读成预报。脚本层已闭环:>7天仍传参时build.py会告警并拒用该参数,保留边界说明(纪律有禁令、脚本也有拦截,同 GATE 0 过去日期)。
- 该填没填(≤7天仍留「待现查」)时verify.py第 3 项会 FAIL,不得交付;>7天的边界说明不含「待现查」,不会被误判为未填。 - 当期公告:查官网 bmy.com.cn 与官方公众号——参观日所在档是否已有当期公告(延时时段、承载量、统一放票日)。公告 ≠ 状态判定:解析生效区间,确认对参观日生效才可用;查不到当期公告就用
03册 L3 快照,并明标 B 态「官方尚未公布」+通常何时发布——不得只写“未查到”,那会让用户不知道是“该等”还是“该自己去看”(三态见 §6)。 - 临时闭馆/管控:查到即置顶红框收敛输出(见 §6 收敛分支)。
- 长恨歌场次/票价:可选现查锁定口径;不查就按
01锚点表 /06册参考口径写。 - 未定项按三态分开写(§6 有措辞模板):A“本次未取到” / B“官方尚未公布” / C“官方未单列口径”——三态对用户的行动含义不同(该重试 / 该等 / 该现场确认),不得混用,也不得用推测值冒充官方口径。
- 重试口径:同一环节失败最多「换渠道 → 换关键词」重试 2 次;仍失败即如实写「本次未查到」+说明检索渠道+给兜底。禁止把失败包装成「已确认」,也禁止无脑循环重试。
- 任何 L2 数据不得写回 references,不得缓存。
4. GATE 3:生成(token 填充 + OPT 段择一)
- 以
templates/board.html为底。模板里不含任何需要 AI 现场重写的整段——所有日期、时刻、数值、形态话术都已是{{TOKEN}},由build.py一次填到底。本技能不设"生成期改写"机制:让模型每次重写整段是"改一处漏三处"的根因,故values.json里也没有待重写清单,模板里除{{TOKEN}}与<!--OPT:…-->外没有第三种标记。 - 分支内容用
<!--OPT:名-->…<!--/OPT-->标记,build.py按当日档位确定性删除未启用段。当前开关:national_only/not_national/firstwave/released/countdown/pending_release/rolling/pending_notice/daytype。每个开关必须在模板里有对应段(脚本会自查,缺段即[WARN])。 - 模板里禁止出现日期字面量;新增日期一律加 token。新增时刻一律先在
03§七 推导规则表补一行(含依据),再落到build.py。禁止在模板写死时刻、禁止生成时凭感觉填。 - 结构固定不动:区块顺序(现在该做 → 当日主线 → 壹…玖)、页头 statusbar、图例、贰区「票售罄两问两答」固定卡、避坑对照表、预案卡、玖区联系卡。
- 决策卡(页头「现在必须想清楚的三件事」)位置与三条结构固定:① 改不改期 ② 丽山园去不去 ③ 联不联华清宫 / 看不看《长恨歌》,每条给「代价 / 得到 / 反悔成本」三要素。
- 输出单文件 HTML 到
output/,文件名兵马俑出行看板-YYYYMMDD.html。 - 收尾必做:跑 §7 的
verify.py。退出码非 0 即不得交付。
5. 交付纪律(十轮样稿沉淀,逐条执行)
- 页面 = 单日期实例;数据层管分支,页面管结果。页面不出现档位表、不解释分支体系。
- 红/黄/绿分级与预算:秦朱(
--red)仅警示,只给"会出事"的三件事——赶不上首波、散场无车、联游前提待确认。预算:时间轴.tl-warn≤3 处、动作标签.tag.warn≤2 处、两者合计 ≤5(实测基线 3+2,由scripts/verify.py第 7 项机器校验)。次级警示(存疑、待核)用土黄.tl-caution/.tag.pend,不占红色预算。红色通胀 = 警示失焦。 - 顺序类编号全页一套(①–⑧);章节与步骤条编号体系分开。
- 待办 = checkbox + due 截止 + 性质标签(先决策 / 立即办 / 出发前晚);页头必答"我现在什么状态"。
- 时长只用双口径(净游 / 含步行排队休息),全页一套;步行量三档统一。
- "核 / 参考"双标:每个「核」数字必须能对上
01锚点表或03档位表;每个「参考」必须标来源与检索日;跨年/超期档位强制降为「参考」并追加页头提示。口径锁定写法(如长恨歌票价注明检索日与"以官方实时价为准")。 - 推测不包装成官方机制:只有官方渠道明确给出过的才写「核」;第三方/往年/攻略口径一律「参考」;官方没给的写“官方未单列口径”+ 保守建议,没取到的写“本次未取到”+ 兜底,官方尚未发布的写“官方尚未公布”+ 预计发布时点——三态分开写,都不编造(详见 §6)。
- 打法的风险内嵌在打法框里;跨天前置动作(买演出票)必须进"现在该做"。
- 排版:长句拆数字卡、长列表分组、宽表改 frow、禁彩色 emoji、图例置顶。
- 指路用可点元素(chip 带/锚点卡),不做纯文字死胡同;分区角色声明一行小字。
- 同义不重复:同一个判断(如"基本不排队""随到随看")在一页里只说一次。排队节点只说「到场时刻 + 排队预期」,开园节点只说「进去先干什么」,叁区节奏卡只说「节奏 + 分时段人流强度」,肆区钱账只说「分项费用 + 最低合计」——各司其职,禁止互相复述。物理距离近的两处(同一节点内、相邻节点)尤其要查。
6. 收敛分支与失败话术
- 参观日闭馆/临时管控(L2 查到):收敛输出"为什么去不了 + 最近可去日期 + 当天替代安排",不渲染任何"行程暗示能去"的内容。
- 当日公告未发布(远期日期):用
03册 L3 快照 + 明标"按当期公告口径,公告发布后请重新生成"。 - 跨年档位(
build.py已自动降级):档位标签为「参考」,页头追加"该档位为往年口径,请以当年公告为准",生成时对该句不得删除。 - 跨年/未公布的放票安排(
build.py已自动处理):03§二 登记的「年度」≠ 参观年、或该行未登记年度时,票况退 B 态——贰区状态卡为「放票安排待公告」,写"官方尚未公布 X 年的统一放票安排(往年通常 9 月中旬发布)"+"公告发布后请重新生成",不渲染倒计时卡、不给任何确定放票时点(往年放票日只作节奏参考,不得当今年日期用)。B 态两要素(标明是哪一态 + 标明等到何时)不得删除或改写,与 §一之二的待公告提示条同源——它承载"这天还没有可倒计时的确定时点"这一核心事实。 - 法定节假日(待公告档)——本例即 B 态(官方尚未公布)的标准范式:
build.py已自动处理——标签「待公告」+页头提示条(<!--OPT:pending_notice-->段)+页脚依据。提示条文案自带 B 态两要素:「官方尚未发布…公告」(标明是哪一态)+「以出行前 1–2 周发布的官方公告为准」(标明等到何时)。该提示条不得删除或改写:它承载"当前时段与承载是按常规日估算的"这一核心免责。GATE 2 若查到官方公告已发布,应按 §8 更新03§一 后重新生成,而不是手改产物 HTML。 - 天气查不到(A 态):statusbar 如实写“本次未取到”+ 已查渠道,其余照常。不得写成“官方尚未公布”——天气预报不存在“官方尚未公布”,那是入口故障,用户该重试而不是该等。
- 天气超出有效期(距出发
>7天):不查、不猜。脚本默认值本身就是边界说明,保持原样即可——不要改成"多云""有雨"之类会被读成预报的词。 - 未定项三态(措辞模板,三者不得混用)——判断标准是“官方到底会不会给这个数”:
| 态 | 触发 | 页面措辞(模板) | 对用户的行动含义 |
|---|---|---|---|
| A 本次未取到 | 入口超时 / 页面结构变了 / 检索无结果(我方问题) | 「这项这次没取到」+ 说明查了哪里 + 给兜底 | 该重试,或自己去看 |
| B 官方尚未公布 | 官方原文写「另行通知」/ 公告尚未发布,且有明确发布节奏 | 「官方尚未公布」+ 通常何时发布 | 该等 |
| C 官方无此口径 | 官方渠道存在,但该项从未给出(不是“待发布”) | 「官方未单列口径」+ 保守建议 + 务必现场确认 | 无法判断——按保守值走、现场确认 |
- A 与 B 不可互换:A 是“我这次没拿到,你可以让我重试”,B 是“官方还没出,你只能等”。把 A 写成 B = 编造——会让用户一直等一个不会来的东西。
- C 与 B 也不可互换:B 有确定的发布节奏(等得到),C 永远不会有(等不到)。把 C 写成 B 同样是编造。
- 禁止把推测值写成官方值;也禁止三态中的任一态只写“未查到”三字——用户无法据此行动。
- 三态的实例对照:临时管控公告=A(该重试);当年延时开放/承载上调公告=B(该等,通常假期前 1–2 周发布);跨年(次年国庆)的统一放票安排=B(该等,往年通常 9 月中旬发布,故贰区状态卡不给倒计时);丽山园摆渡末班=C(官方从未单列,只能现场确认,已登记
07§七 永久待核清单)。 - 报错必须说人话:任何环节失败,给用户一句白话解释 + 已生成的部分照样交付,不裸抛堆栈。
- 不代抢票、不爬余票、不接第三方代售入口;半成品不发往消息渠道。
7. 验收(发布前两道关)
第一道 · 机器校验(一票否决,先跑)
python scripts/verify.py output/兵马俑出行看板-YYYYMMDD.html --date YYYY-MM-DD
退出码非 0 → 不得交付。它逐项挡住 11 类问题:
| # | 校验项 | 失败含义 |
|---|---|---|
| 1 | 无 {{TOKEN}} 残留 |
有值没填上 |
| 2 | 无组装标记残留(<!--GEN: / <!--/GEN--> / <!--OPT: / <!--/OPT--> / <!--#inc / <!--#set) |
分支没择一、模板被原样吐出 |
| 3 | 无 L2 占位残留(待现查) |
≤7 天可查却没填天气;>7 天的边界说明不算残留 |
| 4 | 日期一致性(对照同批 values-*.json 的 _allowed_dates) |
页面里冒出了与输入日期无关的日期 |
| 5 | 档位名未泄漏(允许"(档位名)"标签与页头 daybadge) | 档位表漏进页面 |
| 6 | 无外部资源依赖(只看 script / link / img / iframe 的 src 与 url();外链 <a href> 不计) |
单文件离线打开会缺资源 |
| 7 | 红色用量(.tl-warn ≤3、.tag.warn ≤2、合计 ≤5) |
警示通胀 |
| 8 | 待公告一致性(values 标了待公告档时,页面须出现「待公告」且不得出现「平峰日」) |
法定节假日退化回平峰口径 |
| 9 | 档位值真源一致(外部口径对照):values 的开放/闭馆/停止检票须能在 03 §一 可查;页面凡「时刻+档位语义词」(闭馆 | 停止检票 | 红线 | 首波)的表述须等于本档值 |
模板写死别的档位时刻(如峰值档的 20:00 闭园 / 16:30 红线),或值绕过真源另写一份。第 1–8 项全是内部自洽,自洽≠正确 |
| 10 | 日型一致性:values 的 _daytype_days 须含参观日的真实星期;命中日型时页面须恰好 1 处「周内规律」行且带参考角标;未命中(节假日档 / 待公告)时页面不得出现该行;周末 / 周五日型("挤"的判断)不得与「平峰日」标签同页 |
日型判定与日期脱钩、算了却没落到页面、越界挂到假期页上,或 statusbar 标签与日型话术自相矛盾 |
| 11 | 未定项三态措辞完整(§6):A 态须带检索渠道或兜底 | B 态须带预计公布时点 | C 态须带「现场确认」或保守建议;并挡住把 A 与 C 揉成一句的畸形措辞(如「未查到官方口径」)与裸「未查到」 | 三种"没拿到"被混为一谈——用户看到"未查到"无从判断该重试、该等、还是该现场确认。把抓取失败写成"官方尚未公布"=编造(对行动的含义相反) |
第二道 · 人工过一遍
- [ ] 真红用量在预算内:时间轴
.tl-warn≤3 处(赶不上首波 / 散场无车 / 联游前提),.tag.warn≤2,合计 ≤5 - [ ] 编号唯一:①–⑧ 无第二套顺序编号
- [ ] 图例(核/参考)在导航下方第一屏
- [ ] 每个「核」数字能对上
01锚点表或03档位表;每个「参考」标有来源;跨年档位已降为「参考」且页头提示在位;跨年 / 年度未登记时票况为「放票安排待公告」,页面上没有倒计时卡 - [ ] 法定节假日页面带「待公告」标签 + 页头提示条(含官方依据),且全页不出现「平峰日」
- [ ] 同义判断无重复("不排队 / 随到随看"全页只出现一次;排队节点 / 开园节点 / 叁区节奏卡三处不互相复述)
- [ ] 日型判断单支:常规档页面不得出现"工作日…;周末…"这类并列句(同一页同时陈述两种日型=把判断丢回用户);周一页不得给"低峰 / 不用改期"的结论(口径有分歧,见
03§一之三);节假日档与待公告页不得出现「周内规律」行;周末 / 周五页的 statusbar 不得写「平峰日」(与日型话术互斥) - [ ] 天气 2 处接入点齐全:
≤7天填精确/趋势预报;>7天写边界说明("已超出预报有效范围,出发前 3 天再看板")——两种情况都不得出现会被读成预报的模糊天气词 - [ ] 丽山园红线、寄存最后一公里、回程卡、预案卡、蹲回流「非官方机制」标注在位
- [ ] 未定项三态措辞各自完整(§6):A 态带检索渠道或兜底 | B 态带预计发布时点 | C 态带保守建议与“现场确认”——不得只写“未查到”三字;不得把 A 写成 B,也不得把 C 写成 B
- [ ] 决策卡三条(改期 / 丽山园 / 联游)在页头可见,各带代价·得到·反悔成本
- [ ] 手机宽度(≤420px)下无横向滚动、宽表已卡片化
- [ ] D-x / 假期第 N 天 / 开售日与输入日期一致
8. 数据维护(改数据怎么走)
| 要改什么 | 只改哪里 | 然后 |
|---|---|---|
| 档位 / 开放时段 / 承载量 / 票价 / 统一放票日 | references/03-时间与档位.md §一、§二 两张表 |
重跑 build.py → 跑 verify.py。不要在 build.py 里改值(它解析 03 册;只有解析失败才退内置兜底并告警)。票价取命中档位行的「票价」列(不是按日期算的)——改行即联动,代码内不再另算一份 |
| 法定节假日窗口 / 新增年度(元旦 / 春节 / 清明 / 五一 / 端午 / 中秋) | 03 §一之二 逐年假期表(加行或改行,含 核验日期) |
重跑 build.py → 跑 verify.py。官方放假安排发布后先把窗口换成官方日期,页面会自动从「待公告」转回正常标签。加行前先核锚点日(农历/节气),窗口边界按惯例保守取值;官方依据 列必须写全称、不写"同上"(该列整句上页面)。若该假期已正式公告、要"建档",改走下一行——§一之二 的窗口行保留作归档即可,判定由 §一 的「类型」列接管 |
| 新增一个档位(如公告发布后建"春节假期档") | 03 §一 表加行(必须填「类型」列、必须填「票价」列)+ 03 §二 表加一行登记「年度 / 核验日期」+ 建议同步 build.py 的 TIER_KEYS 与 TIER_HOLIDAY |
值来源列决定核/参考标签(不含「参考」即标「核」,前提是 §二 的年度覆盖参观年,否则被时效门禁降级)。TIER_KEYS 未登记不阻断:值照常生效、待公告照常退出,只是时间轴形态退回 regular(脚本 [WARN] 提示补登记)。verify.py 第 5 项的档位名清单需同步 |
| 日型分类(周末 / 周五 / 周一 / 周中) | 03 §一之三 日型表(改「适用星期」或「客流定性」;键保持 weekend / fri / mon / midweek) |
重跑 build.py → 跑 verify.py。话术正本在 build.py(如 crowd_queue / decide_date / pacing_rhythm),改表只改分类与定性句。表内「值来源」列决定页面标签,本表全部标【参考】(官网不公示分日型客流);改行后若 7 个星期覆盖不全,脚本 [WARN] |
| 人潮强度条的相对高度(叁区节奏卡) | build.py 的 _BAND_LV(依据规格 03 §五 分档修饰表) |
重跑 build.py → 跑 verify.py。改口径时两处对齐(_BAND_LV 与 03 §五 表);无量纲、不标人数、周一/待公告不给形状——越界即编造 |
| 行程时刻(到场 / 出馆 / 丽山园 等) | 先补 03 §七 推导规则表一行(含依据),再改 build.py 实现 |
同上。禁止在模板写死时刻 |
| L4B 运营值(票价规则 / 免票 / 电话 / 寄存 / 长恨歌规则) | references/01-数值锚点表.md(更新核验日期) |
全文检索该数字或短语同步模板与各册(无注释锚点,理由见 01 册开头)。费用类还须同步 build.py 的 money_account(肆区「这趟大概多少钱」由脚本生成,门票取 03 §一 票价列、交通/讲解/演出同源于本表;无机器校验覆盖此耦合,见 01 册开头) |
| 层别判断 / 组装机制 | references/00-数据分层总纲.md(§一 五层模型、§二 允许的三种标记) |
— |
| 话术文案 | build.py 对应形态字典(正源) |
依据或分工变化时同步 03 §四/§五 的说明 |
> 一致性由两道自查兜住:build.py 的 [WARN] 模板一致性(开关无对应段 / token 未被模板用)+ verify.py 的 11 项校验。
9. 本技能不做什么(边界)
- 不做「窗口型」:不按"通常几点放票、几点有车"这类时间窗口给建议(如"建议 8:00–9:00 进场"式的模糊窗口排期),页面上只给本日期算出的确定时刻 + 判断依据。理由:窗口型建议无法验证、无法机器校验,且与"页面=单日期实例"冲突——用户拿到的是"几点做什么",不是"大概什么时候去"。
- 不做数据仪表盘:页面是决策清单,不是数据看板。图表只允许出现在叁区人潮强度条一处(唯一具备跨时间轴分布形态的数据,见 §3 与
03§五 可视化纪律)。承载量 / 票价 / 开放时段 / 步行量等都是单值——把它们图化不产生新信息,做跨档位对比图更会让「档位表本身」漏进页面(违反第一原则)。"关键数据提炼"已由既有的五层体系完成(页头 statusbar / 14 张数字卡 / 决策卡 / 待办步骤条 / 主线节点),不再新增汇总面板(同义重复 + 无验收口径)。 - 不代抢票、不爬余票、不接任何第三方代售入口。
- 不预测尚未发布的公告内容;只标注“官方尚未公布”并给出行前复核路径(B 态)。
- 永久待核清单不得当结论输出:
07册 §七 列出的未定项(丽山园摆渡末班 / 《长恨歌》儿童免票身高 / 华清宫票有效期 / 展厅拍摄规定 / 周一口径 / 常规日放票机制)在任何情况下都不得给出确定判断,页面出现时必须带保守建议或“以现场为准”(按 §6 归入 A 或 C 态)。 - 不把参考口径包装成官方口径(§5 第 6/7 条)。
- 不生成"泛问"的完整看板(无日期只给分档结论,见 §1)。
- 不跨年静默套用往年档位(§2 时效门禁),也不跨年套用往年放票日(§6 B 态:放票安排待公告,不给倒计时)。
- 天气有有效期,不给模糊天气:距出发
>7天不查、不猜(09 册 §一);>7天传--weather-*时脚本拒用并告警。 - 日型只改话术,不改硬值:日型(周末 / 周五 / 周一 / 周中)只允许作用于排队话术、改期建议、分时段人流三处,外加 statusbar 的日型标签(周末 / 周五把「平峰日」换成日型名——只换用语、不给任何数值,理由是标签不能与同页话术打架:页面上写着"周末是一周里最挤的两天",标签就不该写"平峰日");禁止用它改开放时刻、承载量、票价、丽山园红线——那些是官方口径,日型对它没有依据。同理不允许按周末另建档位行(官网三项硬值都不分周末,建行即暗示硬值不同)。生效边界三条:① 只对常规类档位生效;② 节假日档不叠加;③ 待公告态优先。
- 周一口径有分歧,不给结论:多份第三方攻略称"周一拥挤与周末相当"(其他博物馆周一闭馆、客流分流),但也有口径称"周一相对缓和"——多来源不一致,故页面只提示"别把它当低峰押注、出行前查实时余票",不给确定判断。这是与「待公告」同源的诚实边界:宁可说口径有分歧,也不挑一个说法当事实。
- 档位覆盖边界(已建机制,仍须知道口径来源):
03§一 现五档——国庆峰值(10/1–10/7)、国庆前段(9/25–9/30)、暑期(7–8 月)、旺季常规(3/16–11/15)、淡季常规(else);「类型」列区分节假日与常规。其余法定节假日(元旦 / 春节 / 清明 / 五一 / 端午 / 中秋)走 §一之二「待公告档」:命中且档位行类型非节假日时按常规日口径估算并显式标注「待公告」,不再显示为"平峰日"。
> 春节档 ≠ 国庆档:春节落淡季(90 元 / 16:30 停止检票 / 18:00 闭馆),国庆在旺季(120 元 / 17:00 检票 / 18:30 闭馆)且由公告延时至 20:00。各按当年公告建值,不得复用。
> 为什么只能"估算"而不是"给对值":这些日期的延时时段与承载上调只出现在当年公告里,且通常假期前 1–2 周才发布——远期咨询物理上拿不到确定值。给一个看起来确定的错值,比说清"现在只能估"危害更大。
>03§一之二 未覆盖的年份(当前只建到 2027):脚本会在页脚提示"该年度假期表未建立"。下一年度咨询前,必须先补 §一之二 表(方法见 §8)——这是本技能唯一会随时间自然失效的部分,也是每年唯一的常规维护动作。
10. 包内文件(对外说明与示例也算交付物)
| 文件 | 作用 |
|---|---|
SKILL.md |
本文件——AI 执行用:GATE 流程、交付纪律、验收清单 |
README.md |
对外说明,双层组织:前段给使用者(解决什么问题 / 使用方法 / 使用场景示例 / 它是怎么跑的,尽量不含内部术语);后段给要改它的人(内部结构 / 数据层 / 它不做什么)。与 SKILL.md 分工:SKILL.md 写给 AI 执行,README 写给人决策 |
references/00–10 |
数据层资料册(真源 + 依据规格 + 设计系统) |
templates/board.html |
看板模板({{TOKEN}} + <!--OPT:-->) |
scripts/build.py / scripts/verify.py |
生成器 / 交付前校验器(11 项) |
examples/ |
示例成品(preview-*.html),内置示例数据、双击即看。不是模板——实际生成一律走 scripts/build.py |
icon.png |
技能图标(512×512) |
examples/里三份分别对应三种输出形态:峰值档(preview-peak.html,国庆峰值日)、常规档(preview-regular.html,淡季周末)、待公告档(preview-pending.html,法定节假日无当期公告)。README 的「使用场景示例」一节与它们一一对应。- 示例即产物快照:改
templates/或build.py后,示例会与真实产物脱节——须按 §8 同步重新生成(命令见 README「内部结构」节)。示例里显示的是示例数据,不代表当期官方口径。