diff --git a/data/crowd_db/SCHEMA.md b/data/crowd_db/SCHEMA.md index 8d1fc4f..07a16ce 100644 --- a/data/crowd_db/SCHEMA.md +++ b/data/crowd_db/SCHEMA.md @@ -12,10 +12,12 @@ | `last_updated` | str (ISO) | ✅ | 本文件最后更新日期,格式 `YYYY-MM-DD` | | `data_year` | int | ✅ | 数据的参考年份(如 `2025` 表示基于 2025 高考数据) | | `source` | str | ✅ | 数据来源描述(人类可读),如 `千问/元宝/百度/豆包 公开推荐汇总` | -| `source_url` | str | ⚠️ | 数据源 URL(如官方/仓库路径/可访问链接;无则填空串 `""`) | +| `source_url` | str | ⚠️ | 主参考来源 URL;不得使用仓库自引用路径冒充来源证明 | | `source_type` | str enum | ✅ | `manual_summary` / `official_release` / `platform_scrape` / `derived` | | `confidence` | float | ✅ | 数据可信度,区间 `[0.0, 1.0]`;0.5 以下视为不可用,触发人工复核提示 | | `score_ranges` | list | ✅ | 分数段列表(结构见下节);骨架文件允许 `[]` 表示待人工整理 | +| `trusted_sources` | list[object] | ⚠️ | 可信参考源数组;用于记录后续年度复核应优先使用的官方/权威来源 | +| `quality_note` | str | ⚠️ | 对当前省份数据可信度口径的人工说明(如“高置信人工整理”/“结构化骨架”) | ### source_type 枚举 @@ -43,7 +45,25 @@ | `predicted_increase` | int | ⚠️ | 预测分数上涨分;无可靠预测可填 `0` | | `alternatives` | list | ⚠️ | 替代院校推荐,可空 | -## 4. 骨架文件约定 +## 4. `trusted_sources` 元素 + +推荐结构: + +```json +{ + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" +} +``` + +说明: + +- `name`: 来源名称 +- `url`: 入口 URL;如仅确认机构类型、尚未完成年度入口复核,可暂为空串 +- `kind`: `national_official` / `province_official_pending_review` / 其他内部约定枚举 + +## 5. 骨架文件约定 未完整整理数据的省份,应输出符合顶层 schema 的骨架: @@ -62,13 +82,13 @@ 骨架文件 `confidence=0.0`,loader 应在 `confidence < 0.5` 时打印 WARN 但不抛错(避免阻断运行)。 -## 5. 27省覆盖范围 +## 6. 27省覆盖范围 - 23省:河北、山西、辽宁、吉林、黑龙江、江苏、浙江、安徽、福建、江西、山东、河南、湖北、湖南、广东、海南、四川、贵州、云南、陕西、甘肃、青海、新疆 - 4直辖市:北京、上海、天津、重庆 - 不含:5个自治区(内蒙古、广西、西藏、宁夏)、香港、澳门、台湾 -## 6. 验证 +## 7. 验证 ```bash python3 -c "import json,glob; [print(p, list(json.load(open(p)).keys())) for p in sorted(glob.glob('data/crowd_db/*.json'))]" diff --git a/data/crowd_db/TRUSTED_SOURCE_BACKFILL_2026-06-21.md b/data/crowd_db/TRUSTED_SOURCE_BACKFILL_2026-06-21.md new file mode 100644 index 0000000..e3bdd81 --- /dev/null +++ b/data/crowd_db/TRUSTED_SOURCE_BACKFILL_2026-06-21.md @@ -0,0 +1,43 @@ +# crowd_db 各省可信来源补齐说明(2026-06-21) + +最后更新: 2026-06-21 +适用范围: `data/crowd_db/*.json` + +## 目标 + +本文件用于解决一个长期误判: + +- 过去各省 `source_url` 大量指向仓库自引用路径,**这只能证明文件存在,不能证明数据来源可信**。 +- 本轮补齐的不是“27 省都已变成高置信推荐数据”,而是**27 省都补齐了可信来源元数据与后续复核入口口径**。 + +## 本轮补齐内容 + +对 27 个省级 JSON 统一补齐: + +- `source_url`: 统一切到可信公开入口(当前使用 `https://gaokao.chsi.com.cn/` 作为国家级主参考入口) +- `trusted_sources`: 新增可信来源数组 + - `教育部阳光高考` + - `教育部官网` + - `各省招生考试机构/教育考试院(待年度复核具体入口)` +- `quality_note`: 明确当前文件是 + - 湖南:高置信人工整理推荐,仍需按年度招生章程复核 + - 其他省份:结构化骨架/人工摘要,补齐的是可信来源与复核入口,不等于高置信推荐已补齐 + +## 解释口径 + +允许: + +- “27 省 crowd_db 已补齐可信来源元数据” +- “湖南为高置信,其余省份仍是 skeleton/usable,后续需继续补内容” + +禁止: + +- “27 省都已补齐高置信推荐数据” +- “source_url 指向仓库文件即可视为可信来源” +- “已补可信来源 = 已完成各省数据建设” + +## 后续动作 + +1. 运营/数据侧按年度补各省考试院/招生考试网的具体入口 +2. 对高考生源大省优先补充更高密度、可复核的推荐内容 +3. 如某省拟升级为 `usable/high`,需同步更新测试与复审结论 diff --git a/data/crowd_db/anhui.json b/data/crowd_db/anhui.json index 7ead206..2928316 100644 --- a/data/crowd_db/anhui.json +++ b/data/crowd_db/anhui.json @@ -1,9 +1,9 @@ { "province": "安徽", - "last_updated": "2026-06-12", + "last_updated": "2026-06-21", "data_year": 2025, - "source": "安徽 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完", - "source_url": "https://github.com/phamnazage-jpg/gaokao-volunteer-system/blob/main/data/crowd_db/anhui.json", + "source": "安徽 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完;可信来源治理补齐 2026-06-21", + "source_url": "https://gaokao.chsi.com.cn/", "source_type": "manual_summary", "confidence": 0.45, "score_ranges": [ @@ -70,5 +70,23 @@ } ] } - ] -} \ No newline at end of file + ], + "trusted_sources": [ + { + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" + }, + { + "name": "教育部官网", + "url": "https://www.moe.gov.cn/", + "kind": "national_official" + }, + { + "name": "安徽招生考试机构/教育考试院", + "url": "", + "kind": "province_official_pending_review" + } + ], + "quality_note": "当前仍为结构化骨架/人工摘要,已补齐可信来源元数据与复核入口口径;这不等于该省已具备高置信推荐。" +} diff --git a/data/crowd_db/beijing.json b/data/crowd_db/beijing.json index d368b9f..be71172 100644 --- a/data/crowd_db/beijing.json +++ b/data/crowd_db/beijing.json @@ -1,9 +1,9 @@ { "province": "北京", - "last_updated": "2026-06-12", + "last_updated": "2026-06-21", "data_year": 2025, - "source": "北京 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完", - "source_url": "https://github.com/phamnazage-jpg/gaokao-volunteer-system/blob/main/data/crowd_db/beijing.json", + "source": "北京 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完;可信来源治理补齐 2026-06-21", + "source_url": "https://gaokao.chsi.com.cn/", "source_type": "manual_summary", "confidence": 0.45, "score_ranges": [ @@ -155,5 +155,23 @@ } ] } - ] -} \ No newline at end of file + ], + "trusted_sources": [ + { + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" + }, + { + "name": "教育部官网", + "url": "https://www.moe.gov.cn/", + "kind": "national_official" + }, + { + "name": "北京招生考试机构/教育考试院", + "url": "", + "kind": "province_official_pending_review" + } + ], + "quality_note": "当前仍为结构化骨架/人工摘要,已补齐可信来源元数据与复核入口口径;这不等于该省已具备高置信推荐。" +} diff --git a/data/crowd_db/chongqing.json b/data/crowd_db/chongqing.json index e6626d0..d03cae4 100644 --- a/data/crowd_db/chongqing.json +++ b/data/crowd_db/chongqing.json @@ -1,9 +1,9 @@ { "province": "重庆", - "last_updated": "2026-06-12", + "last_updated": "2026-06-21", "data_year": 2025, - "source": "重庆 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完", - "source_url": "https://github.com/phamnazage-jpg/gaokao-volunteer-system/blob/main/data/crowd_db/chongqing.json", + "source": "重庆 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完;可信来源治理补齐 2026-06-21", + "source_url": "https://gaokao.chsi.com.cn/", "source_type": "manual_summary", "confidence": 0.45, "score_ranges": [ @@ -70,5 +70,23 @@ } ] } - ] -} \ No newline at end of file + ], + "trusted_sources": [ + { + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" + }, + { + "name": "教育部官网", + "url": "https://www.moe.gov.cn/", + "kind": "national_official" + }, + { + "name": "重庆招生考试机构/教育考试院", + "url": "", + "kind": "province_official_pending_review" + } + ], + "quality_note": "当前仍为结构化骨架/人工摘要,已补齐可信来源元数据与复核入口口径;这不等于该省已具备高置信推荐。" +} diff --git a/data/crowd_db/fujian.json b/data/crowd_db/fujian.json index bc45f26..5dad71e 100644 --- a/data/crowd_db/fujian.json +++ b/data/crowd_db/fujian.json @@ -1,9 +1,9 @@ { "province": "福建", - "last_updated": "2026-06-12", + "last_updated": "2026-06-21", "data_year": 2025, - "source": "福建 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完", - "source_url": "https://github.com/phamnazage-jpg/gaokao-volunteer-system/blob/main/data/crowd_db/fujian.json", + "source": "福建 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完;可信来源治理补齐 2026-06-21", + "source_url": "https://gaokao.chsi.com.cn/", "source_type": "manual_summary", "confidence": 0.45, "score_ranges": [ @@ -57,5 +57,23 @@ } ] } - ] -} \ No newline at end of file + ], + "trusted_sources": [ + { + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" + }, + { + "name": "教育部官网", + "url": "https://www.moe.gov.cn/", + "kind": "national_official" + }, + { + "name": "福建招生考试机构/教育考试院", + "url": "", + "kind": "province_official_pending_review" + } + ], + "quality_note": "当前仍为结构化骨架/人工摘要,已补齐可信来源元数据与复核入口口径;这不等于该省已具备高置信推荐。" +} diff --git a/data/crowd_db/gansu.json b/data/crowd_db/gansu.json index a538073..d38e1ed 100644 --- a/data/crowd_db/gansu.json +++ b/data/crowd_db/gansu.json @@ -1,9 +1,9 @@ { "province": "甘肃", - "last_updated": "2026-06-12", + "last_updated": "2026-06-21", "data_year": 2025, - "source": "甘肃 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完", - "source_url": "https://github.com/phamnazage-jpg/gaokao-volunteer-system/blob/main/data/crowd_db/gansu.json", + "source": "甘肃 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完;可信来源治理补齐 2026-06-21", + "source_url": "https://gaokao.chsi.com.cn/", "source_type": "manual_summary", "confidence": 0.45, "score_ranges": [ @@ -57,5 +57,23 @@ } ] } - ] -} \ No newline at end of file + ], + "trusted_sources": [ + { + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" + }, + { + "name": "教育部官网", + "url": "https://www.moe.gov.cn/", + "kind": "national_official" + }, + { + "name": "甘肃招生考试机构/教育考试院", + "url": "", + "kind": "province_official_pending_review" + } + ], + "quality_note": "当前仍为结构化骨架/人工摘要,已补齐可信来源元数据与复核入口口径;这不等于该省已具备高置信推荐。" +} diff --git a/data/crowd_db/guangdong.json b/data/crowd_db/guangdong.json index bcc0b22..c83d048 100644 --- a/data/crowd_db/guangdong.json +++ b/data/crowd_db/guangdong.json @@ -1,9 +1,9 @@ { "province": "广东", - "last_updated": "2026-06-12", + "last_updated": "2026-06-21", "data_year": 2025, - "source": "广东 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完", - "source_url": "https://github.com/phamnazage-jpg/gaokao-volunteer-system/blob/main/data/crowd_db/guangdong.json", + "source": "广东 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完;可信来源治理补齐 2026-06-21", + "source_url": "https://gaokao.chsi.com.cn/", "source_type": "manual_summary", "confidence": 0.45, "score_ranges": [ @@ -83,5 +83,23 @@ } ] } - ] -} \ No newline at end of file + ], + "trusted_sources": [ + { + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" + }, + { + "name": "教育部官网", + "url": "https://www.moe.gov.cn/", + "kind": "national_official" + }, + { + "name": "广东招生考试机构/教育考试院", + "url": "", + "kind": "province_official_pending_review" + } + ], + "quality_note": "当前仍为结构化骨架/人工摘要,已补齐可信来源元数据与复核入口口径;这不等于该省已具备高置信推荐。" +} diff --git a/data/crowd_db/guizhou.json b/data/crowd_db/guizhou.json index ac83f06..236337e 100644 --- a/data/crowd_db/guizhou.json +++ b/data/crowd_db/guizhou.json @@ -1,9 +1,9 @@ { "province": "贵州", - "last_updated": "2026-06-12", + "last_updated": "2026-06-21", "data_year": 2025, - "source": "贵州 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完", - "source_url": "https://github.com/phamnazage-jpg/gaokao-volunteer-system/blob/main/data/crowd_db/guizhou.json", + "source": "贵州 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完;可信来源治理补齐 2026-06-21", + "source_url": "https://gaokao.chsi.com.cn/", "source_type": "manual_summary", "confidence": 0.45, "score_ranges": [ @@ -29,5 +29,23 @@ } ] } - ] -} \ No newline at end of file + ], + "trusted_sources": [ + { + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" + }, + { + "name": "教育部官网", + "url": "https://www.moe.gov.cn/", + "kind": "national_official" + }, + { + "name": "贵州招生考试机构/教育考试院", + "url": "", + "kind": "province_official_pending_review" + } + ], + "quality_note": "当前仍为结构化骨架/人工摘要,已补齐可信来源元数据与复核入口口径;这不等于该省已具备高置信推荐。" +} diff --git a/data/crowd_db/hainan.json b/data/crowd_db/hainan.json index 5d89a21..c7b155c 100644 --- a/data/crowd_db/hainan.json +++ b/data/crowd_db/hainan.json @@ -1,9 +1,9 @@ { "province": "海南", - "last_updated": "2026-06-12", + "last_updated": "2026-06-21", "data_year": 2025, - "source": "海南 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完", - "source_url": "https://github.com/phamnazage-jpg/gaokao-volunteer-system/blob/main/data/crowd_db/hainan.json", + "source": "海南 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完;可信来源治理补齐 2026-06-21", + "source_url": "https://gaokao.chsi.com.cn/", "source_type": "manual_summary", "confidence": 0.45, "score_ranges": [ @@ -57,5 +57,23 @@ } ] } - ] -} \ No newline at end of file + ], + "trusted_sources": [ + { + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" + }, + { + "name": "教育部官网", + "url": "https://www.moe.gov.cn/", + "kind": "national_official" + }, + { + "name": "海南招生考试机构/教育考试院", + "url": "", + "kind": "province_official_pending_review" + } + ], + "quality_note": "当前仍为结构化骨架/人工摘要,已补齐可信来源元数据与复核入口口径;这不等于该省已具备高置信推荐。" +} diff --git a/data/crowd_db/hebei.json b/data/crowd_db/hebei.json index 54b2e99..988393e 100644 --- a/data/crowd_db/hebei.json +++ b/data/crowd_db/hebei.json @@ -1,9 +1,9 @@ { "province": "河北", - "last_updated": "2026-06-12", + "last_updated": "2026-06-21", "data_year": 2025, - "source": "河北 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完", - "source_url": "https://github.com/phamnazage-jpg/gaokao-volunteer-system/blob/main/data/crowd_db/hebei.json", + "source": "河北 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完;可信来源治理补齐 2026-06-21", + "source_url": "https://gaokao.chsi.com.cn/", "source_type": "manual_summary", "confidence": 0.45, "score_ranges": [ @@ -77,5 +77,23 @@ } ] } - ] -} \ No newline at end of file + ], + "trusted_sources": [ + { + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" + }, + { + "name": "教育部官网", + "url": "https://www.moe.gov.cn/", + "kind": "national_official" + }, + { + "name": "河北招生考试机构/教育考试院", + "url": "", + "kind": "province_official_pending_review" + } + ], + "quality_note": "当前仍为结构化骨架/人工摘要,已补齐可信来源元数据与复核入口口径;这不等于该省已具备高置信推荐。" +} diff --git a/data/crowd_db/heilongjiang.json b/data/crowd_db/heilongjiang.json index d673c21..4cde9af 100644 --- a/data/crowd_db/heilongjiang.json +++ b/data/crowd_db/heilongjiang.json @@ -1,9 +1,9 @@ { "province": "黑龙江", - "last_updated": "2026-06-12", + "last_updated": "2026-06-21", "data_year": 2025, - "source": "黑龙江 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完", - "source_url": "https://github.com/phamnazage-jpg/gaokao-volunteer-system/blob/main/data/crowd_db/heilongjiang.json", + "source": "黑龙江 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完;可信来源治理补齐 2026-06-21", + "source_url": "https://gaokao.chsi.com.cn/", "source_type": "manual_summary", "confidence": 0.45, "score_ranges": [ @@ -70,5 +70,23 @@ } ] } - ] -} \ No newline at end of file + ], + "trusted_sources": [ + { + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" + }, + { + "name": "教育部官网", + "url": "https://www.moe.gov.cn/", + "kind": "national_official" + }, + { + "name": "黑龙江招生考试机构/教育考试院", + "url": "", + "kind": "province_official_pending_review" + } + ], + "quality_note": "当前仍为结构化骨架/人工摘要,已补齐可信来源元数据与复核入口口径;这不等于该省已具备高置信推荐。" +} diff --git a/data/crowd_db/henan.json b/data/crowd_db/henan.json index 605bb64..507bd2a 100644 --- a/data/crowd_db/henan.json +++ b/data/crowd_db/henan.json @@ -1,9 +1,9 @@ { "province": "河南", - "last_updated": "2026-06-12", + "last_updated": "2026-06-21", "data_year": 2025, - "source": "河南 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完", - "source_url": "https://github.com/phamnazage-jpg/gaokao-volunteer-system/blob/main/data/crowd_db/henan.json", + "source": "河南 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完;可信来源治理补齐 2026-06-21", + "source_url": "https://gaokao.chsi.com.cn/", "source_type": "manual_summary", "confidence": 0.45, "score_ranges": [ @@ -57,5 +57,23 @@ } ] } - ] -} \ No newline at end of file + ], + "trusted_sources": [ + { + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" + }, + { + "name": "教育部官网", + "url": "https://www.moe.gov.cn/", + "kind": "national_official" + }, + { + "name": "河南招生考试机构/教育考试院", + "url": "", + "kind": "province_official_pending_review" + } + ], + "quality_note": "当前仍为结构化骨架/人工摘要,已补齐可信来源元数据与复核入口口径;这不等于该省已具备高置信推荐。" +} diff --git a/data/crowd_db/hubei.json b/data/crowd_db/hubei.json index 1df1c7e..2659982 100644 --- a/data/crowd_db/hubei.json +++ b/data/crowd_db/hubei.json @@ -1,9 +1,9 @@ { "province": "湖北", - "last_updated": "2026-06-12", + "last_updated": "2026-06-21", "data_year": 2025, - "source": "湖北 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完", - "source_url": "https://github.com/phamnazage-jpg/gaokao-volunteer-system/blob/main/data/crowd_db/hubei.json", + "source": "湖北 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完;可信来源治理补齐 2026-06-21", + "source_url": "https://gaokao.chsi.com.cn/", "source_type": "manual_summary", "confidence": 0.45, "score_ranges": [ @@ -105,5 +105,23 @@ } ] } - ] -} \ No newline at end of file + ], + "trusted_sources": [ + { + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" + }, + { + "name": "教育部官网", + "url": "https://www.moe.gov.cn/", + "kind": "national_official" + }, + { + "name": "湖北招生考试机构/教育考试院", + "url": "", + "kind": "province_official_pending_review" + } + ], + "quality_note": "当前仍为结构化骨架/人工摘要,已补齐可信来源元数据与复核入口口径;这不等于该省已具备高置信推荐。" +} diff --git a/data/crowd_db/hunan.json b/data/crowd_db/hunan.json index 3933eb1..cc4ff2c 100644 --- a/data/crowd_db/hunan.json +++ b/data/crowd_db/hunan.json @@ -1,21 +1,28 @@ { "province": "湖南", - "last_updated": "2026-06-12", + "last_updated": "2026-06-21", "data_year": 2025, - "source": "千问/元宝/百度/豆包 公开推荐汇总(手动整理),T2.1 扩展覆盖专科批与省外顶尖段", - "source_url": "https://github.com/phamnazage-jpg/gaokao-volunteer-system/blob/main/data/crowd_db/hunan.json", + "source": "千问/元宝/百度/豆包 公开推荐汇总(手动整理),T2.1 扩展覆盖专科批与省外顶尖段;可信来源治理补齐 2026-06-21", + "source_url": "https://gaokao.chsi.com.cn/", "source_type": "manual_summary", "confidence": 0.85, "score_ranges": [ { - "range": [440, 480], + "range": [ + 440, + 480 + ], "note": "专科批临界", "recommendations": [ { "name": "长沙民政职业技术学院", "major": "社会工作", "frequency": 3, - "platforms": ["千问", "元宝", "百度"], + "platforms": [ + "千问", + "元宝", + "百度" + ], "predicted_increase": 10, "alternatives": [ { @@ -34,7 +41,11 @@ "name": "湖南铁道职业技术学院", "major": "铁道机车", "frequency": 3, - "platforms": ["元宝", "百度", "豆包"], + "platforms": [ + "元宝", + "百度", + "豆包" + ], "predicted_increase": 9, "alternatives": [ { @@ -53,7 +64,10 @@ "name": "湖南大众传媒学院", "major": "新闻采编与制作", "frequency": 2, - "platforms": ["千问", "豆包"], + "platforms": [ + "千问", + "豆包" + ], "predicted_increase": 6, "alternatives": [ { @@ -72,7 +86,10 @@ "name": "长沙商贸旅游职业技术学院", "major": "会计电算化", "frequency": 2, - "platforms": ["千问", "百度"], + "platforms": [ + "千问", + "百度" + ], "predicted_increase": 5, "alternatives": [ { @@ -90,14 +107,21 @@ ] }, { - "range": [480, 510], + "range": [ + 480, + 510 + ], "note": "本科批临界段", "recommendations": [ { "name": "湖南文理学院", "major": "汉语言文学", "frequency": 3, - "platforms": ["千问", "元宝", "百度"], + "platforms": [ + "千问", + "元宝", + "百度" + ], "predicted_increase": 8, "alternatives": [ { @@ -116,7 +140,10 @@ "name": "湖南文理学院", "major": "数学与应用数学", "frequency": 2, - "platforms": ["千问", "百度"], + "platforms": [ + "千问", + "百度" + ], "predicted_increase": 6, "alternatives": [ { @@ -135,7 +162,11 @@ "name": "邵阳学院", "major": "临床医学", "frequency": 3, - "platforms": ["元宝", "百度", "豆包"], + "platforms": [ + "元宝", + "百度", + "豆包" + ], "predicted_increase": 9, "alternatives": [ { @@ -154,7 +185,10 @@ "name": "湖南科技学院", "major": "英语", "frequency": 2, - "platforms": ["千问", "豆包"], + "platforms": [ + "千问", + "豆包" + ], "predicted_increase": 5, "alternatives": [ { @@ -173,7 +207,12 @@ "name": "湖南第一师范学院", "major": "小学教育", "frequency": 4, - "platforms": ["千问", "元宝", "百度", "豆包"], + "platforms": [ + "千问", + "元宝", + "百度", + "豆包" + ], "predicted_increase": 12, "alternatives": [ { @@ -192,7 +231,11 @@ "name": "长沙师范学院", "major": "学前教育", "frequency": 3, - "platforms": ["千问", "元宝", "百度"], + "platforms": [ + "千问", + "元宝", + "百度" + ], "predicted_increase": 10, "alternatives": [ { @@ -210,14 +253,22 @@ ] }, { - "range": [510, 540], + "range": [ + 510, + 540 + ], "note": "二本中段", "recommendations": [ { "name": "湖南工商大学", "major": "会计学", "frequency": 4, - "platforms": ["千问", "元宝", "百度", "豆包"], + "platforms": [ + "千问", + "元宝", + "百度", + "豆包" + ], "predicted_increase": 15, "alternatives": [ { @@ -236,7 +287,11 @@ "name": "湖南理工学院", "major": "机械设计制造及其自动化", "frequency": 3, - "platforms": ["千问", "元宝", "百度"], + "platforms": [ + "千问", + "元宝", + "百度" + ], "predicted_increase": 11, "alternatives": [ { @@ -255,7 +310,11 @@ "name": "湖南工程学院", "major": "电气工程及其自动化", "frequency": 3, - "platforms": ["元宝", "百度", "豆包"], + "platforms": [ + "元宝", + "百度", + "豆包" + ], "predicted_increase": 12, "alternatives": [ { @@ -274,7 +333,10 @@ "name": "中南林业科技大学", "major": "林学", "frequency": 2, - "platforms": ["千问", "百度"], + "platforms": [ + "千问", + "百度" + ], "predicted_increase": 6, "alternatives": [ { @@ -293,7 +355,10 @@ "name": "湖南农业大学", "major": "动物科学", "frequency": 2, - "platforms": ["元宝", "豆包"], + "platforms": [ + "元宝", + "豆包" + ], "predicted_increase": 5, "alternatives": [ { @@ -312,7 +377,12 @@ "name": "湖南中医药大学", "major": "中医学", "frequency": 4, - "platforms": ["千问", "元宝", "百度", "豆包"], + "platforms": [ + "千问", + "元宝", + "百度", + "豆包" + ], "predicted_increase": 14, "alternatives": [ { @@ -331,7 +401,10 @@ "name": "湖南第一师范学院", "major": "汉语言文学", "frequency": 2, - "platforms": ["千问", "百度"], + "platforms": [ + "千问", + "百度" + ], "predicted_increase": 6, "alternatives": [ { @@ -350,7 +423,10 @@ "name": "吉首大学", "major": "音乐学", "frequency": 2, - "platforms": ["千问", "豆包"], + "platforms": [ + "千问", + "豆包" + ], "predicted_increase": 5, "alternatives": [ { @@ -368,14 +444,22 @@ ] }, { - "range": [540, 560], + "range": [ + 540, + 560 + ], "note": "二本高段/一本临界", "recommendations": [ { "name": "长沙理工大学", "major": "会计学", "frequency": 4, - "platforms": ["千问", "元宝", "百度", "豆包"], + "platforms": [ + "千问", + "元宝", + "百度", + "豆包" + ], "predicted_increase": 18, "alternatives": [ { @@ -394,7 +478,12 @@ "name": "长沙理工大学", "major": "电气工程及其自动化", "frequency": 4, - "platforms": ["千问", "元宝", "百度", "豆包"], + "platforms": [ + "千问", + "元宝", + "百度", + "豆包" + ], "predicted_increase": 17, "alternatives": [ { @@ -413,7 +502,11 @@ "name": "湖南师范大学", "major": "汉语言文学", "frequency": 3, - "platforms": ["千问", "元宝", "百度"], + "platforms": [ + "千问", + "元宝", + "百度" + ], "predicted_increase": 10, "alternatives": [ { @@ -432,7 +525,11 @@ "name": "中南林业科技大学", "major": "土木工程", "frequency": 3, - "platforms": ["元宝", "百度", "豆包"], + "platforms": [ + "元宝", + "百度", + "豆包" + ], "predicted_increase": 11, "alternatives": [ { @@ -451,7 +548,10 @@ "name": "湖南科技大学", "major": "采矿工程", "frequency": 2, - "platforms": ["千问", "百度"], + "platforms": [ + "千问", + "百度" + ], "predicted_increase": 5, "alternatives": [ { @@ -470,7 +570,12 @@ "name": "湘潭大学", "major": "法学", "frequency": 4, - "platforms": ["千问", "元宝", "百度", "豆包"], + "platforms": [ + "千问", + "元宝", + "百度", + "豆包" + ], "predicted_increase": 16, "alternatives": [ { @@ -489,7 +594,10 @@ "name": "湖南农业大学", "major": "农学", "frequency": 2, - "platforms": ["千问", "豆包"], + "platforms": [ + "千问", + "豆包" + ], "predicted_increase": 5, "alternatives": [ { @@ -508,7 +616,11 @@ "name": "吉首大学", "major": "临床医学", "frequency": 3, - "platforms": ["元宝", "百度", "豆包"], + "platforms": [ + "元宝", + "百度", + "豆包" + ], "predicted_increase": 9, "alternatives": [ { @@ -526,14 +638,21 @@ ] }, { - "range": [560, 580], + "range": [ + 560, + 580 + ], "note": "一本中段", "recommendations": [ { "name": "湖南大学", "major": "会计学", "frequency": 3, - "platforms": ["千问", "元宝", "百度"], + "platforms": [ + "千问", + "元宝", + "百度" + ], "predicted_increase": 12, "alternatives": [ { @@ -552,7 +671,12 @@ "name": "湖南师范大学", "major": "会计学", "frequency": 4, - "platforms": ["千问", "元宝", "百度", "豆包"], + "platforms": [ + "千问", + "元宝", + "百度", + "豆包" + ], "predicted_increase": 15, "alternatives": [ { @@ -571,7 +695,12 @@ "name": "中南大学", "major": "临床医学", "frequency": 4, - "platforms": ["千问", "元宝", "百度", "豆包"], + "platforms": [ + "千问", + "元宝", + "百度", + "豆包" + ], "predicted_increase": 14, "alternatives": [ { @@ -590,7 +719,11 @@ "name": "湖南大学", "major": "土木工程", "frequency": 3, - "platforms": ["千问", "百度", "豆包"], + "platforms": [ + "千问", + "百度", + "豆包" + ], "predicted_increase": 10, "alternatives": [ { @@ -609,7 +742,11 @@ "name": "湘潭大学", "major": "数学与应用数学", "frequency": 3, - "platforms": ["元宝", "百度", "豆包"], + "platforms": [ + "元宝", + "百度", + "豆包" + ], "predicted_increase": 9, "alternatives": [ { @@ -628,7 +765,12 @@ "name": "长沙理工大学", "major": "计算机科学与技术", "frequency": 4, - "platforms": ["千问", "元宝", "百度", "豆包"], + "platforms": [ + "千问", + "元宝", + "百度", + "豆包" + ], "predicted_increase": 16, "alternatives": [ { @@ -647,7 +789,10 @@ "name": "湖南科技大学", "major": "机械设计制造及其自动化", "frequency": 2, - "platforms": ["千问", "元宝"], + "platforms": [ + "千问", + "元宝" + ], "predicted_increase": 7, "alternatives": [ { @@ -666,7 +811,10 @@ "name": "中南林业科技大学", "major": "风景园林", "frequency": 2, - "platforms": ["百度", "豆包"], + "platforms": [ + "百度", + "豆包" + ], "predicted_increase": 5, "alternatives": [ { @@ -684,14 +832,22 @@ ] }, { - "range": [580, 600], + "range": [ + 580, + 600 + ], "note": "一本高段", "recommendations": [ { "name": "湖南大学", "major": "计算机科学与技术", "frequency": 4, - "platforms": ["千问", "元宝", "百度", "豆包"], + "platforms": [ + "千问", + "元宝", + "百度", + "豆包" + ], "predicted_increase": 18, "alternatives": [ { @@ -710,7 +866,12 @@ "name": "中南大学", "major": "计算机科学与技术", "frequency": 4, - "platforms": ["千问", "元宝", "百度", "豆包"], + "platforms": [ + "千问", + "元宝", + "百度", + "豆包" + ], "predicted_increase": 17, "alternatives": [ { @@ -729,7 +890,11 @@ "name": "湖南大学", "major": "金融学", "frequency": 3, - "platforms": ["千问", "元宝", "百度"], + "platforms": [ + "千问", + "元宝", + "百度" + ], "predicted_increase": 13, "alternatives": [ { @@ -748,7 +913,12 @@ "name": "湖南师范大学", "major": "汉语言文学", "frequency": 4, - "platforms": ["千问", "元宝", "百度", "豆包"], + "platforms": [ + "千问", + "元宝", + "百度", + "豆包" + ], "predicted_increase": 14, "alternatives": [ { @@ -767,7 +937,12 @@ "name": "中南大学", "major": "临床医学(八年制)", "frequency": 4, - "platforms": ["千问", "元宝", "百度", "豆包"], + "platforms": [ + "千问", + "元宝", + "百度", + "豆包" + ], "predicted_increase": 15, "alternatives": [ { @@ -786,7 +961,11 @@ "name": "中南大学", "major": "材料科学与工程", "frequency": 3, - "platforms": ["元宝", "百度", "豆包"], + "platforms": [ + "元宝", + "百度", + "豆包" + ], "predicted_increase": 10, "alternatives": [ { @@ -805,7 +984,11 @@ "name": "湘潭大学", "major": "法学", "frequency": 3, - "platforms": ["千问", "元宝", "百度"], + "platforms": [ + "千问", + "元宝", + "百度" + ], "predicted_increase": 11, "alternatives": [ { @@ -824,7 +1007,10 @@ "name": "湖南师范大学", "major": "英语", "frequency": 2, - "platforms": ["千问", "豆包"], + "platforms": [ + "千问", + "豆包" + ], "predicted_increase": 7, "alternatives": [ { @@ -842,14 +1028,22 @@ ] }, { - "range": [600, 620], + "range": [ + 600, + 620 + ], "note": "211 中段", "recommendations": [ { "name": "中南大学", "major": "临床医学", "frequency": 4, - "platforms": ["千问", "元宝", "百度", "豆包"], + "platforms": [ + "千问", + "元宝", + "百度", + "豆包" + ], "predicted_increase": 16, "alternatives": [ { @@ -868,7 +1062,12 @@ "name": "湖南大学", "major": "电气工程及其自动化", "frequency": 4, - "platforms": ["千问", "元宝", "百度", "豆包"], + "platforms": [ + "千问", + "元宝", + "百度", + "豆包" + ], "predicted_increase": 15, "alternatives": [ { @@ -887,7 +1086,12 @@ "name": "中南大学", "major": "软件工程", "frequency": 4, - "platforms": ["千问", "元宝", "百度", "豆包"], + "platforms": [ + "千问", + "元宝", + "百度", + "豆包" + ], "predicted_increase": 17, "alternatives": [ { @@ -906,7 +1110,11 @@ "name": "湖南大学", "major": "车辆工程", "frequency": 3, - "platforms": ["元宝", "百度", "豆包"], + "platforms": [ + "元宝", + "百度", + "豆包" + ], "predicted_increase": 12, "alternatives": [ { @@ -925,7 +1133,10 @@ "name": "湖南大学", "major": "新闻传播学", "frequency": 2, - "platforms": ["千问", "元宝"], + "platforms": [ + "千问", + "元宝" + ], "predicted_increase": 7, "alternatives": [ { @@ -944,7 +1155,11 @@ "name": "中南大学", "major": "工商管理", "frequency": 3, - "platforms": ["千问", "百度", "豆包"], + "platforms": [ + "千问", + "百度", + "豆包" + ], "predicted_increase": 11, "alternatives": [ { @@ -963,7 +1178,10 @@ "name": "湘潭大学", "major": "数学与应用数学", "frequency": 2, - "platforms": ["千问", "豆包"], + "platforms": [ + "千问", + "豆包" + ], "predicted_increase": 6, "alternatives": [ { @@ -982,7 +1200,10 @@ "name": "湖南师范大学", "major": "教育学", "frequency": 2, - "platforms": ["元宝", "百度"], + "platforms": [ + "元宝", + "百度" + ], "predicted_increase": 6, "alternatives": [ { @@ -1000,14 +1221,22 @@ ] }, { - "range": [620, 640], + "range": [ + 620, + 640 + ], "note": "211 高段/985 临界", "recommendations": [ { "name": "中南大学", "major": "计算机科学与技术", "frequency": 4, - "platforms": ["千问", "元宝", "百度", "豆包"], + "platforms": [ + "千问", + "元宝", + "百度", + "豆包" + ], "predicted_increase": 18, "alternatives": [ { @@ -1026,7 +1255,11 @@ "name": "湖南大学", "major": "金融学", "frequency": 3, - "platforms": ["千问", "元宝", "百度"], + "platforms": [ + "千问", + "元宝", + "百度" + ], "predicted_increase": 12, "alternatives": [ { @@ -1045,7 +1278,12 @@ "name": "中南大学", "major": "口腔医学", "frequency": 4, - "platforms": ["千问", "元宝", "百度", "豆包"], + "platforms": [ + "千问", + "元宝", + "百度", + "豆包" + ], "predicted_increase": 17, "alternatives": [ { @@ -1064,7 +1302,11 @@ "name": "国防科技大学", "major": "电子科学与技术", "frequency": 3, - "platforms": ["元宝", "百度", "豆包"], + "platforms": [ + "元宝", + "百度", + "豆包" + ], "predicted_increase": 13, "alternatives": [ { @@ -1083,7 +1325,11 @@ "name": "湖南大学", "major": "建筑学", "frequency": 3, - "platforms": ["千问", "元宝", "百度"], + "platforms": [ + "千问", + "元宝", + "百度" + ], "predicted_increase": 11, "alternatives": [ { @@ -1102,7 +1348,11 @@ "name": "中南大学", "major": "自动化", "frequency": 3, - "platforms": ["千问", "百度", "豆包"], + "platforms": [ + "千问", + "百度", + "豆包" + ], "predicted_increase": 11, "alternatives": [ { @@ -1120,14 +1370,22 @@ ] }, { - "range": [640, 660], + "range": [ + 640, + 660 + ], "note": "985 重点", "recommendations": [ { "name": "国防科技大学", "major": "计算机科学与技术", "frequency": 4, - "platforms": ["千问", "元宝", "百度", "豆包"], + "platforms": [ + "千问", + "元宝", + "百度", + "豆包" + ], "predicted_increase": 18, "alternatives": [ { @@ -1146,7 +1404,12 @@ "name": "国防科技大学", "major": "信息与通信工程", "frequency": 4, - "platforms": ["千问", "元宝", "百度", "豆包"], + "platforms": [ + "千问", + "元宝", + "百度", + "豆包" + ], "predicted_increase": 16, "alternatives": [ { @@ -1165,7 +1428,12 @@ "name": "中南大学", "major": "临床医学(八年制)", "frequency": 4, - "platforms": ["千问", "元宝", "百度", "豆包"], + "platforms": [ + "千问", + "元宝", + "百度", + "豆包" + ], "predicted_increase": 17, "alternatives": [ { @@ -1184,7 +1452,11 @@ "name": "湖南大学", "major": "金融学", "frequency": 3, - "platforms": ["千问", "元宝", "百度"], + "platforms": [ + "千问", + "元宝", + "百度" + ], "predicted_increase": 12, "alternatives": [ { @@ -1203,7 +1475,11 @@ "name": "中南大学", "major": "材料科学与工程", "frequency": 3, - "platforms": ["元宝", "百度", "豆包"], + "platforms": [ + "元宝", + "百度", + "豆包" + ], "predicted_increase": 10, "alternatives": [ { @@ -1222,7 +1498,10 @@ "name": "国防科技大学", "major": "数学与应用数学", "frequency": 2, - "platforms": ["千问", "豆包"], + "platforms": [ + "千问", + "豆包" + ], "predicted_increase": 7, "alternatives": [ { @@ -1240,14 +1519,22 @@ ] }, { - "range": [660, 690], + "range": [ + 660, + 690 + ], "note": "省外顶尖(清北复交浙)", "recommendations": [ { "name": "清华大学", "major": "计算机科学与技术", "frequency": 4, - "platforms": ["千问", "元宝", "百度", "豆包"], + "platforms": [ + "千问", + "元宝", + "百度", + "豆包" + ], "predicted_increase": 20, "alternatives": [ { @@ -1266,7 +1553,12 @@ "name": "北京大学", "major": "金融学", "frequency": 4, - "platforms": ["千问", "元宝", "百度", "豆包"], + "platforms": [ + "千问", + "元宝", + "百度", + "豆包" + ], "predicted_increase": 18, "alternatives": [ { @@ -1285,7 +1577,12 @@ "name": "上海交通大学", "major": "电子科学与技术", "frequency": 4, - "platforms": ["千问", "元宝", "百度", "豆包"], + "platforms": [ + "千问", + "元宝", + "百度", + "豆包" + ], "predicted_increase": 17, "alternatives": [ { @@ -1304,7 +1601,11 @@ "name": "浙江大学", "major": "临床医学(八年制)", "frequency": 3, - "platforms": ["千问", "元宝", "百度"], + "platforms": [ + "千问", + "元宝", + "百度" + ], "predicted_increase": 15, "alternatives": [ { @@ -1323,7 +1624,11 @@ "name": "复旦大学", "major": "新闻传播学", "frequency": 3, - "platforms": ["元宝", "百度", "豆包"], + "platforms": [ + "元宝", + "百度", + "豆包" + ], "predicted_increase": 14, "alternatives": [ { @@ -1342,7 +1647,10 @@ "name": "中国科学技术大学", "major": "数学与应用数学", "frequency": 2, - "platforms": ["千问", "豆包"], + "platforms": [ + "千问", + "豆包" + ], "predicted_increase": 8, "alternatives": [ { @@ -1359,5 +1667,23 @@ } ] } - ] + ], + "trusted_sources": [ + { + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" + }, + { + "name": "教育部官网", + "url": "https://www.moe.gov.cn/", + "kind": "national_official" + }, + { + "name": "湖南招生考试机构/教育考试院", + "url": "", + "kind": "province_official_pending_review" + } + ], + "quality_note": "当前为高置信人工整理推荐,已补齐可信来源元数据;后续仍需按年度招生章程与考试院公告复核。" } diff --git a/data/crowd_db/jiangsu.json b/data/crowd_db/jiangsu.json index 4095f80..9a4109c 100644 --- a/data/crowd_db/jiangsu.json +++ b/data/crowd_db/jiangsu.json @@ -1,9 +1,9 @@ { "province": "江苏", - "last_updated": "2026-06-12", + "last_updated": "2026-06-21", "data_year": 2025, - "source": "江苏 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完", - "source_url": "https://github.com/phamnazage-jpg/gaokao-volunteer-system/blob/main/data/crowd_db/jiangsu.json", + "source": "江苏 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完;可信来源治理补齐 2026-06-21", + "source_url": "https://gaokao.chsi.com.cn/", "source_type": "manual_summary", "confidence": 0.45, "score_ranges": [ @@ -118,5 +118,23 @@ } ] } - ] -} \ No newline at end of file + ], + "trusted_sources": [ + { + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" + }, + { + "name": "教育部官网", + "url": "https://www.moe.gov.cn/", + "kind": "national_official" + }, + { + "name": "江苏招生考试机构/教育考试院", + "url": "", + "kind": "province_official_pending_review" + } + ], + "quality_note": "当前仍为结构化骨架/人工摘要,已补齐可信来源元数据与复核入口口径;这不等于该省已具备高置信推荐。" +} diff --git a/data/crowd_db/jiangxi.json b/data/crowd_db/jiangxi.json index a5777b6..ff952ca 100644 --- a/data/crowd_db/jiangxi.json +++ b/data/crowd_db/jiangxi.json @@ -1,9 +1,9 @@ { "province": "江西", - "last_updated": "2026-06-12", + "last_updated": "2026-06-21", "data_year": 2025, - "source": "江西 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完", - "source_url": "https://github.com/phamnazage-jpg/gaokao-volunteer-system/blob/main/data/crowd_db/jiangxi.json", + "source": "江西 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完;可信来源治理补齐 2026-06-21", + "source_url": "https://gaokao.chsi.com.cn/", "source_type": "manual_summary", "confidence": 0.45, "score_ranges": [ @@ -48,5 +48,23 @@ } ] } - ] -} \ No newline at end of file + ], + "trusted_sources": [ + { + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" + }, + { + "name": "教育部官网", + "url": "https://www.moe.gov.cn/", + "kind": "national_official" + }, + { + "name": "江西招生考试机构/教育考试院", + "url": "", + "kind": "province_official_pending_review" + } + ], + "quality_note": "当前仍为结构化骨架/人工摘要,已补齐可信来源元数据与复核入口口径;这不等于该省已具备高置信推荐。" +} diff --git a/data/crowd_db/jilin.json b/data/crowd_db/jilin.json index 563e602..64ca872 100644 --- a/data/crowd_db/jilin.json +++ b/data/crowd_db/jilin.json @@ -1,9 +1,9 @@ { "province": "吉林", - "last_updated": "2026-06-12", + "last_updated": "2026-06-21", "data_year": 2025, - "source": "吉林 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完", - "source_url": "https://github.com/phamnazage-jpg/gaokao-volunteer-system/blob/main/data/crowd_db/jilin.json", + "source": "吉林 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完;可信来源治理补齐 2026-06-21", + "source_url": "https://gaokao.chsi.com.cn/", "source_type": "manual_summary", "confidence": 0.45, "score_ranges": [ @@ -48,5 +48,23 @@ } ] } - ] -} \ No newline at end of file + ], + "trusted_sources": [ + { + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" + }, + { + "name": "教育部官网", + "url": "https://www.moe.gov.cn/", + "kind": "national_official" + }, + { + "name": "吉林招生考试机构/教育考试院", + "url": "", + "kind": "province_official_pending_review" + } + ], + "quality_note": "当前仍为结构化骨架/人工摘要,已补齐可信来源元数据与复核入口口径;这不等于该省已具备高置信推荐。" +} diff --git a/data/crowd_db/liaoning.json b/data/crowd_db/liaoning.json index 45604e2..9288f85 100644 --- a/data/crowd_db/liaoning.json +++ b/data/crowd_db/liaoning.json @@ -1,9 +1,9 @@ { "province": "辽宁", - "last_updated": "2026-06-12", + "last_updated": "2026-06-21", "data_year": 2025, - "source": "辽宁 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完", - "source_url": "https://github.com/phamnazage-jpg/gaokao-volunteer-system/blob/main/data/crowd_db/liaoning.json", + "source": "辽宁 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完;可信来源治理补齐 2026-06-21", + "source_url": "https://gaokao.chsi.com.cn/", "source_type": "manual_summary", "confidence": 0.45, "score_ranges": [ @@ -70,5 +70,23 @@ } ] } - ] -} \ No newline at end of file + ], + "trusted_sources": [ + { + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" + }, + { + "name": "教育部官网", + "url": "https://www.moe.gov.cn/", + "kind": "national_official" + }, + { + "name": "辽宁招生考试机构/教育考试院", + "url": "", + "kind": "province_official_pending_review" + } + ], + "quality_note": "当前仍为结构化骨架/人工摘要,已补齐可信来源元数据与复核入口口径;这不等于该省已具备高置信推荐。" +} diff --git a/data/crowd_db/loader.py b/data/crowd_db/loader.py index 505da7e..5b73f69 100644 --- a/data/crowd_db/loader.py +++ b/data/crowd_db/loader.py @@ -188,6 +188,10 @@ class CrowdDBLoader: if not data: return None + trusted_sources = data.get("trusted_sources") + if not isinstance(trusted_sources, list): + trusted_sources = [] + return { "province": data.get("province", province), "last_updated": data.get("last_updated", ""), @@ -196,6 +200,9 @@ class CrowdDBLoader: "source_url": data.get("source_url", ""), "source_type": data.get("source_type", ""), "confidence": data.get("confidence"), + "quality_note": data.get("quality_note", ""), + "trusted_sources": trusted_sources, + "trusted_sources_count": len(trusted_sources), "record_count": sum( len(score_range.get("recommendations", [])) for score_range in data.get("score_ranges", []) @@ -217,24 +224,22 @@ class CrowdDBLoader: if file_path and os.path.exists(file_path) else None ) - provinces.append( - { - "province": province, - "file_name": os.path.basename(file_path) if file_path else None, - "exists": data is not None, - "last_updated": data.get("last_updated") if data else None, - "data_year": data.get("data_year") if data else None, - "source_type": data.get("source_type") if data else None, - "confidence": data.get("confidence") if data else None, - "record_count": sum( - len(score_range.get("recommendations", [])) - for score_range in data.get("score_ranges", []) - if isinstance(score_range, dict) - ) - if data - else 0, - } - ) + provinces.append({ + "province": province, + "file_name": os.path.basename(file_path) if file_path else None, + "exists": data is not None, + "last_updated": data.get("last_updated") if data else None, + "data_year": data.get("data_year") if data else None, + "source_type": data.get("source_type") if data else None, + "confidence": data.get("confidence") if data else None, + "record_count": sum( + len(score_range.get("recommendations", [])) + for score_range in data.get("score_ranges", []) + if isinstance(score_range, dict) + ) + if data + else 0, + }) return provinces def _resolve_file_path(self, province: str) -> Optional[str]: @@ -393,6 +398,21 @@ class CrowdDBLoader: # source_url 空时记 warning(不影响 ok,但与人工复核流程相关) if isinstance(su, str) and su == "": validation.warnings.append("empty_source_url: source_url 为空") + elif isinstance(su, str) and ( + "github.com" in su + or "gaokao-volunteer-system/blob" in su + or "localhost" in su + ): + validation.warnings.append( + "self_reference_source_url: source_url 指向仓库/本地路径,不应作为可信来源证明" + ) + + # trusted_sources 可选,但若存在应为 list + trusted_sources = data.get("trusted_sources") + if trusted_sources is not None and not isinstance(trusted_sources, list): + validation.errors.append( + f"type_error: trusted_sources 应为 list, got {type(trusted_sources).__name__}" + ) # 摘要(仅在已加载且含核心字段时) if all( diff --git a/data/crowd_db/qinghai.json b/data/crowd_db/qinghai.json index bc81e76..7f9fb4c 100644 --- a/data/crowd_db/qinghai.json +++ b/data/crowd_db/qinghai.json @@ -1,9 +1,9 @@ { "province": "青海", - "last_updated": "2026-06-12", + "last_updated": "2026-06-21", "data_year": 2025, - "source": "青海 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完", - "source_url": "https://github.com/phamnazage-jpg/gaokao-volunteer-system/blob/main/data/crowd_db/qinghai.json", + "source": "青海 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完;可信来源治理补齐 2026-06-21", + "source_url": "https://gaokao.chsi.com.cn/", "source_type": "manual_summary", "confidence": 0.45, "score_ranges": [ @@ -35,5 +35,23 @@ } ] } - ] -} \ No newline at end of file + ], + "trusted_sources": [ + { + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" + }, + { + "name": "教育部官网", + "url": "https://www.moe.gov.cn/", + "kind": "national_official" + }, + { + "name": "青海招生考试机构/教育考试院", + "url": "", + "kind": "province_official_pending_review" + } + ], + "quality_note": "当前仍为结构化骨架/人工摘要,已补齐可信来源元数据与复核入口口径;这不等于该省已具备高置信推荐。" +} diff --git a/data/crowd_db/shaanxi.json b/data/crowd_db/shaanxi.json index c0d518c..aa2d903 100644 --- a/data/crowd_db/shaanxi.json +++ b/data/crowd_db/shaanxi.json @@ -1,9 +1,9 @@ { "province": "陕西", - "last_updated": "2026-06-12", + "last_updated": "2026-06-21", "data_year": 2025, - "source": "陕西 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完", - "source_url": "https://github.com/phamnazage-jpg/gaokao-volunteer-system/blob/main/data/crowd_db/shaanxi.json", + "source": "陕西 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完;可信来源治理补齐 2026-06-21", + "source_url": "https://gaokao.chsi.com.cn/", "source_type": "manual_summary", "confidence": 0.45, "score_ranges": [ @@ -105,5 +105,23 @@ } ] } - ] -} \ No newline at end of file + ], + "trusted_sources": [ + { + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" + }, + { + "name": "教育部官网", + "url": "https://www.moe.gov.cn/", + "kind": "national_official" + }, + { + "name": "陕西招生考试机构/教育考试院", + "url": "", + "kind": "province_official_pending_review" + } + ], + "quality_note": "当前仍为结构化骨架/人工摘要,已补齐可信来源元数据与复核入口口径;这不等于该省已具备高置信推荐。" +} diff --git a/data/crowd_db/shandong.json b/data/crowd_db/shandong.json index b3b1e1d..7b12dc0 100644 --- a/data/crowd_db/shandong.json +++ b/data/crowd_db/shandong.json @@ -1,9 +1,9 @@ { "province": "山东", - "last_updated": "2026-06-12", + "last_updated": "2026-06-21", "data_year": 2025, - "source": "山东 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完", - "source_url": "https://github.com/phamnazage-jpg/gaokao-volunteer-system/blob/main/data/crowd_db/shandong.json", + "source": "山东 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完;可信来源治理补齐 2026-06-21", + "source_url": "https://gaokao.chsi.com.cn/", "source_type": "manual_summary", "confidence": 0.45, "score_ranges": [ @@ -57,5 +57,23 @@ } ] } - ] -} \ No newline at end of file + ], + "trusted_sources": [ + { + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" + }, + { + "name": "教育部官网", + "url": "https://www.moe.gov.cn/", + "kind": "national_official" + }, + { + "name": "山东招生考试机构/教育考试院", + "url": "", + "kind": "province_official_pending_review" + } + ], + "quality_note": "当前仍为结构化骨架/人工摘要,已补齐可信来源元数据与复核入口口径;这不等于该省已具备高置信推荐。" +} diff --git a/data/crowd_db/shanghai.json b/data/crowd_db/shanghai.json index 6bfd3a4..a1d3c58 100644 --- a/data/crowd_db/shanghai.json +++ b/data/crowd_db/shanghai.json @@ -1,9 +1,9 @@ { "province": "上海", - "last_updated": "2026-06-12", + "last_updated": "2026-06-21", "data_year": 2025, - "source": "上海 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完", - "source_url": "https://github.com/phamnazage-jpg/gaokao-volunteer-system/blob/main/data/crowd_db/shanghai.json", + "source": "上海 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完;可信来源治理补齐 2026-06-21", + "source_url": "https://gaokao.chsi.com.cn/", "source_type": "manual_summary", "confidence": 0.45, "score_ranges": [ @@ -118,5 +118,23 @@ } ] } - ] -} \ No newline at end of file + ], + "trusted_sources": [ + { + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" + }, + { + "name": "教育部官网", + "url": "https://www.moe.gov.cn/", + "kind": "national_official" + }, + { + "name": "上海招生考试机构/教育考试院", + "url": "", + "kind": "province_official_pending_review" + } + ], + "quality_note": "当前仍为结构化骨架/人工摘要,已补齐可信来源元数据与复核入口口径;这不等于该省已具备高置信推荐。" +} diff --git a/data/crowd_db/shanxi.json b/data/crowd_db/shanxi.json index 3f5c850..a16de51 100644 --- a/data/crowd_db/shanxi.json +++ b/data/crowd_db/shanxi.json @@ -1,9 +1,9 @@ { "province": "山西", - "last_updated": "2026-06-12", + "last_updated": "2026-06-21", "data_year": 2025, - "source": "山西 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完", - "source_url": "https://github.com/phamnazage-jpg/gaokao-volunteer-system/blob/main/data/crowd_db/shanxi.json", + "source": "山西 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完;可信来源治理补齐 2026-06-21", + "source_url": "https://gaokao.chsi.com.cn/", "source_type": "manual_summary", "confidence": 0.45, "score_ranges": [ @@ -35,5 +35,23 @@ } ] } - ] -} \ No newline at end of file + ], + "trusted_sources": [ + { + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" + }, + { + "name": "教育部官网", + "url": "https://www.moe.gov.cn/", + "kind": "national_official" + }, + { + "name": "山西招生考试机构/教育考试院", + "url": "", + "kind": "province_official_pending_review" + } + ], + "quality_note": "当前仍为结构化骨架/人工摘要,已补齐可信来源元数据与复核入口口径;这不等于该省已具备高置信推荐。" +} diff --git a/data/crowd_db/sichuan.json b/data/crowd_db/sichuan.json index 6640d7e..0655954 100644 --- a/data/crowd_db/sichuan.json +++ b/data/crowd_db/sichuan.json @@ -1,9 +1,9 @@ { "province": "四川", - "last_updated": "2026-06-12", + "last_updated": "2026-06-21", "data_year": 2025, - "source": "四川 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完", - "source_url": "https://github.com/phamnazage-jpg/gaokao-volunteer-system/blob/main/data/crowd_db/sichuan.json", + "source": "四川 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完;可信来源治理补齐 2026-06-21", + "source_url": "https://gaokao.chsi.com.cn/", "source_type": "manual_summary", "confidence": 0.45, "score_ranges": [ @@ -83,5 +83,23 @@ } ] } - ] -} \ No newline at end of file + ], + "trusted_sources": [ + { + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" + }, + { + "name": "教育部官网", + "url": "https://www.moe.gov.cn/", + "kind": "national_official" + }, + { + "name": "四川招生考试机构/教育考试院", + "url": "", + "kind": "province_official_pending_review" + } + ], + "quality_note": "当前仍为结构化骨架/人工摘要,已补齐可信来源元数据与复核入口口径;这不等于该省已具备高置信推荐。" +} diff --git a/data/crowd_db/tests/test_provenance.py b/data/crowd_db/tests/test_provenance.py index e12ce29..10b27bd 100644 --- a/data/crowd_db/tests/test_provenance.py +++ b/data/crowd_db/tests/test_provenance.py @@ -98,7 +98,7 @@ def test_loader_existing_count_27(): def test_loader_metadata_hunan(): - """load_metadata('湖南') 返回 8 个字段且 record_count > 0""" + """load_metadata('湖南') 返回扩展元数据字段且 record_count > 0""" loader = CrowdDBLoader(warn_low_confidence=False) meta = loader.load_metadata("湖南") assert meta is not None @@ -110,6 +110,9 @@ def test_loader_metadata_hunan(): "source_url", "source_type", "confidence", + "quality_note", + "trusted_sources", + "trusted_sources_count", "record_count", ): assert k in meta, f"meta 缺 {k}" @@ -117,6 +120,8 @@ def test_loader_metadata_hunan(): assert meta["confidence"] >= 0.8, ( f"湖南 confidence 应 ≥ 0.8,实际 {meta['confidence']}" ) + assert meta["trusted_sources_count"] >= 2 + assert isinstance(meta["trusted_sources"], list) and meta["trusted_sources"] def test_loader_low_confidence_warning(): @@ -139,3 +144,29 @@ def test_loader_end_to_end_match(): assert rec is not None, "长沙理工大学 应当在湖南 575 段命中" assert rec["frequency"] >= 1 assert isinstance(rec["platforms"], list) and len(rec["platforms"]) >= 1 + + +def test_all_provinces_have_trusted_sources_and_non_repo_source_url(): + """27 省必须补齐可信来源元数据,source_url 不能再用仓库自引用冒充来源。""" + for fname in _list_json_files(): + d = json.load(open(os.path.join(DATA_DIR, fname), encoding="utf-8")) + source_url = d.get("source_url", "") + assert isinstance(source_url, str) and source_url.startswith("https://"), ( + f"{fname}: source_url 应为 https:// 开头的可信入口, got {source_url!r}" + ) + assert ( + "github.com" not in source_url + and "gaokao-volunteer-system/blob" not in source_url + ), f"{fname}: source_url 不能是仓库自引用路径, got {source_url}" + trusted_sources = d.get("trusted_sources") + assert isinstance(trusted_sources, list) and len(trusted_sources) >= 2, ( + f"{fname}: trusted_sources 应至少包含 2 个可信来源" + ) + assert any( + (item.get("url") or "").startswith("https://") + for item in trusted_sources + if isinstance(item, dict) + ), f"{fname}: trusted_sources 至少 1 个条目应带 https:// 官方入口" + assert isinstance(d.get("quality_note"), str) and d.get("quality_note"), ( + f"{fname}: 缺少 quality_note 可信度口径说明" + ) diff --git a/data/crowd_db/tests/test_quality_summary.py b/data/crowd_db/tests/test_quality_summary.py index 2cef1f4..af3c0a2 100644 --- a/data/crowd_db/tests/test_quality_summary.py +++ b/data/crowd_db/tests/test_quality_summary.py @@ -21,6 +21,8 @@ def test_build_quality_summary_returns_expected_shape(): "data_year", "source_type", }) + hunan = next(p for p in summary["provinces"] if p["province"] == "湖南") + assert hunan["quality_level"] == "high" def test_quality_summary_cli_human_output(capsys): diff --git a/data/crowd_db/tests/test_risk_report.py b/data/crowd_db/tests/test_risk_report.py index f40cdb9..75922a3 100644 --- a/data/crowd_db/tests/test_risk_report.py +++ b/data/crowd_db/tests/test_risk_report.py @@ -167,7 +167,7 @@ def test_risk_dict_includes_provenance_fields(): assert r["source_type_label"] == "报告" assert r["source_type_icon"] == "⚠️" assert r["source_url"].startswith("https://") - assert r["last_updated"] == "2026-06-12" + assert r["last_updated"] == "2026-06-21" assert r["data_year"] == 2025 assert 0 <= r["confidence"] <= 1 assert r["quality_level"] == "high" diff --git a/data/crowd_db/tianjin.json b/data/crowd_db/tianjin.json index 25594e1..e969f5e 100644 --- a/data/crowd_db/tianjin.json +++ b/data/crowd_db/tianjin.json @@ -1,9 +1,9 @@ { "province": "天津", - "last_updated": "2026-06-12", + "last_updated": "2026-06-21", "data_year": 2025, - "source": "天津 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完", - "source_url": "https://github.com/phamnazage-jpg/gaokao-volunteer-system/blob/main/data/crowd_db/tianjin.json", + "source": "天津 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完;可信来源治理补齐 2026-06-21", + "source_url": "https://gaokao.chsi.com.cn/", "source_type": "manual_summary", "confidence": 0.45, "score_ranges": [ @@ -83,5 +83,23 @@ } ] } - ] -} \ No newline at end of file + ], + "trusted_sources": [ + { + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" + }, + { + "name": "教育部官网", + "url": "https://www.moe.gov.cn/", + "kind": "national_official" + }, + { + "name": "天津招生考试机构/教育考试院", + "url": "", + "kind": "province_official_pending_review" + } + ], + "quality_note": "当前仍为结构化骨架/人工摘要,已补齐可信来源元数据与复核入口口径;这不等于该省已具备高置信推荐。" +} diff --git a/data/crowd_db/xinjiang.json b/data/crowd_db/xinjiang.json index 58e4a47..caa4a59 100644 --- a/data/crowd_db/xinjiang.json +++ b/data/crowd_db/xinjiang.json @@ -1,9 +1,9 @@ { "province": "新疆", - "last_updated": "2026-06-12", + "last_updated": "2026-06-21", "data_year": 2025, - "source": "新疆 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完", - "source_url": "https://github.com/phamnazage-jpg/gaokao-volunteer-system/blob/main/data/crowd_db/xinjiang.json", + "source": "新疆 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完;可信来源治理补齐 2026-06-21", + "source_url": "https://gaokao.chsi.com.cn/", "source_type": "manual_summary", "confidence": 0.45, "score_ranges": [ @@ -48,5 +48,23 @@ } ] } - ] -} \ No newline at end of file + ], + "trusted_sources": [ + { + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" + }, + { + "name": "教育部官网", + "url": "https://www.moe.gov.cn/", + "kind": "national_official" + }, + { + "name": "新疆招生考试机构/教育考试院", + "url": "", + "kind": "province_official_pending_review" + } + ], + "quality_note": "当前仍为结构化骨架/人工摘要,已补齐可信来源元数据与复核入口口径;这不等于该省已具备高置信推荐。" +} diff --git a/data/crowd_db/yunnan.json b/data/crowd_db/yunnan.json index 35e1d07..3dfd649 100644 --- a/data/crowd_db/yunnan.json +++ b/data/crowd_db/yunnan.json @@ -1,9 +1,9 @@ { "province": "云南", - "last_updated": "2026-06-12", + "last_updated": "2026-06-21", "data_year": 2025, - "source": "云南 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完", - "source_url": "https://github.com/phamnazage-jpg/gaokao-volunteer-system/blob/main/data/crowd_db/yunnan.json", + "source": "云南 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完;可信来源治理补齐 2026-06-21", + "source_url": "https://gaokao.chsi.com.cn/", "source_type": "manual_summary", "confidence": 0.45, "score_ranges": [ @@ -51,5 +51,23 @@ } ] } - ] -} \ No newline at end of file + ], + "trusted_sources": [ + { + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" + }, + { + "name": "教育部官网", + "url": "https://www.moe.gov.cn/", + "kind": "national_official" + }, + { + "name": "云南招生考试机构/教育考试院", + "url": "", + "kind": "province_official_pending_review" + } + ], + "quality_note": "当前仍为结构化骨架/人工摘要,已补齐可信来源元数据与复核入口口径;这不等于该省已具备高置信推荐。" +} diff --git a/data/crowd_db/zhejiang.json b/data/crowd_db/zhejiang.json index c0b541b..d332758 100644 --- a/data/crowd_db/zhejiang.json +++ b/data/crowd_db/zhejiang.json @@ -1,9 +1,9 @@ { "province": "浙江", - "last_updated": "2026-06-12", + "last_updated": "2026-06-21", "data_year": 2025, - "source": "浙江 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完", - "source_url": "https://github.com/phamnazage-jpg/gaokao-volunteer-system/blob/main/data/crowd_db/zhejiang.json", + "source": "浙江 大厂AI推荐初版骨架(T3.1),仅含头部高校,待人工补完;可信来源治理补齐 2026-06-21", + "source_url": "https://gaokao.chsi.com.cn/", "source_type": "manual_summary", "confidence": 0.45, "score_ranges": [ @@ -57,5 +57,23 @@ } ] } - ] -} \ No newline at end of file + ], + "trusted_sources": [ + { + "name": "教育部阳光高考", + "url": "https://gaokao.chsi.com.cn/", + "kind": "national_official" + }, + { + "name": "教育部官网", + "url": "https://www.moe.gov.cn/", + "kind": "national_official" + }, + { + "name": "浙江招生考试机构/教育考试院", + "url": "", + "kind": "province_official_pending_review" + } + ], + "quality_note": "当前仍为结构化骨架/人工摘要,已补齐可信来源元数据与复核入口口径;这不等于该省已具备高置信推荐。" +} diff --git a/docs/ACTIVE_EXECUTION_BOARD_2026-06-20.md b/docs/ACTIVE_EXECUTION_BOARD_2026-06-20.md index 29635bf..e58dfae 100644 --- a/docs/ACTIVE_EXECUTION_BOARD_2026-06-20.md +++ b/docs/ACTIVE_EXECUTION_BOARD_2026-06-20.md @@ -1,6 +1,6 @@ # ACTIVE_EXECUTION_BOARD_2026-06-20 -最后更新: 2026-06-20 +最后更新: 2026-06-21 状态词: 当前有效问题执行板 真相源: `docs/CURRENT_STATE.md` 问题来源: `docs/ACTIVE_REMEDIATION_2026-06-20.md` @@ -11,8 +11,8 @@ ## 1. 当前门禁结论 -结论: v2.1.1 已完成"retention cleanup 多订单 conn ownership 修复 + 端到端本地 acceptance 步骤"闭环 + 6/20 增量(T12-D conn ownership 修复 + 真相源分层)落地。 -dev-verify 状态: 直接相关子集 205 passed, 0 failed;retention 6 passed;ruff + mypy 通过。完整 dev-verify 跑通结果在 main `f9e68ee` 之后由 `bash scripts/dev-verify.sh` 确认。 +结论: v2.1.1 已完成"retention cleanup 多订单 conn ownership 修复 + 端到端本地 acceptance 步骤"闭环;v2.1.4 已完成性能/集成/用户模拟/部署运维四维本地验证。 +dev-verify 状态: 直接相关子集 205 passed, 0 failed;retention 6 passed;ruff + mypy 通过。2026-06-21 复核:四维验证脚本复跑仍 PASS(性能/集成/用户模拟/部署运维)。完整 dev-verify 当前轮复跑结果见 2026-06-21 审计记录。 禁止事项: @@ -43,7 +43,7 @@ dev-verify 状态: 直接相关子集 205 passed, 0 failed;retention 6 passed ## 3. 仍有效的执行任务清单(按优先级) -### T12-A 真实支付 acceptance +### 3.1 T12-A 真实支付 acceptance - Owner: tech-lead / ops - 优先级: P0 @@ -54,7 +54,7 @@ dev-verify 状态: 直接相关子集 205 passed, 0 failed;retention 6 passed - 外部商户与域名前置 - `data/payments/service.py` 6/19 持久化已就绪 -### T12-B `info_submitted -> serving` 自动主链 +### 3.2 T12-B `info_submitted -> serving` 自动主链 - Owner: engineer - 优先级: P0 @@ -62,7 +62,7 @@ dev-verify 状态: 直接相关子集 205 passed, 0 failed;retention 6 passed - 目标: - 真实 worker/生成服务/线上调度收口 -### T12-D retention cleanup 生产化部署验收(6/20 端到端 acceptance 步骤就绪) +### 3.3 T12-D retention cleanup 生产化部署验收(6/20 端到端 acceptance 步骤就绪) - Owner: ops - 优先级: P1 @@ -74,15 +74,15 @@ dev-verify 状态: 直接相关子集 205 passed, 0 failed;retention 6 passed - `docs/DELIVERY_RETENTION_OPS_RUNBOOK.md` §8 acceptance 步骤已就绪 - 6/20 conn ownership 修复已落地(bug 必现,6/20 已修) -### L-A 隐私政策 / 服务协议正式法务审定 +### 3.4 L-A 隐私政策 / 服务协议正式法务审定 - Owner: PM / legal - 优先级: P1 -- 状态: pending +- 状态: in_progress(草案已补齐,待正式法务审核) - 依赖: - 当前已有 `docs/LEGAL_PRIVACY_BASELINE.md` + `docs/PRIVACY_POLICY_DRAFT.md` + `docs/SERVICE_TERMS.md` + `docs/DATA_RETENTION_AND_DELETION.md` 基线 -### L-B 备份恢复异机演练 + 密钥轮换记录 +### 3.5 L-B 备份恢复异机演练 + 密钥轮换记录 - Owner: ops - 优先级: P1 @@ -90,11 +90,11 @@ dev-verify 状态: 直接相关子集 205 passed, 0 failed;retention 6 passed - 依赖: - 当前已有 `scripts/backup_snapshot.sh` + `scripts/backup_verify.sh` + `scripts/backup_restore_smoke.py` -### Q-A crowd_db 非湖南省份高置信数据密度 +### 3.6 Q-A crowd_db 非湖南省份高置信数据密度 - Owner: data - 优先级: P1 -- 状态: pending +- 状态: in_progress(可信来源元数据已补齐,省级高置信内容仍待深化) - 目标: - 提升非湖南 crowd_db 数据置信度 diff --git a/docs/ACTIVE_REMEDIATION_2026-06-20.md b/docs/ACTIVE_REMEDIATION_2026-06-20.md index b286329..dde8903 100644 --- a/docs/ACTIVE_REMEDIATION_2026-06-20.md +++ b/docs/ACTIVE_REMEDIATION_2026-06-20.md @@ -1,6 +1,6 @@ # ACTIVE_REMEDIATION_2026-06-20 -最后更新: 2026-06-20 +最后更新: 2026-06-21 状态词: 当前仍然有效的问题清单(仅保留未解决项) 真相源: `docs/CURRENT_STATE.md` 来源基线: @@ -36,25 +36,23 @@ ### A. 投产级真实缺口(生产上线仍阻塞) -#### A-1 用户端 Web 自助闭环未完成(仍属 T12) +#### L-A 隐私政策 / 服务协议正式法务审定 -严重度: P0(面向 Web 自助产品时) -当前状态: 本地 MVP 主链已大部分落地,线上闭环仍未收口 -范围归属: T12(后续阶段) +严重度: P1 +当前状态: **草案已补齐,待正式法务审核** +范围归属: 合规/数据治理 -**当前未阻塞的关键能力**: +已完成(2026-06-21 增量): -- 删除/匿名化 180 天保留期门禁(E02002)— 6/19 已落地 -- 支付失败状态持久化(status='failed' + failed_at + failure_reason)— 6/19 已落地 -- **retention cleanup 多订单连续 anonymize 修复 + 端到端本地 acceptance 步骤** — **6/20 已落地**(T12-D conn ownership) +- `docs/PRIVACY_POLICY_DRAFT.md` 已补齐未成年人、委托处理、用户权利、存储删除、联系方式、版本更新等条款 +- `docs/SERVICE_TERMS.md` 已补齐服务边界、支付退款、知识产权、免责、争议解决、版本更新等条款 +- `docs/LEGAL_PRIVACY_BASELINE.md` 已补齐法务审核条款清单与待审状态说明 -**当前仍阻塞的关键能力**: +仍缺: -- 真实支付接入与回调验签的线上 acceptance(T12-A) -- `info_submitted -> serving` 自动处理主链 + 真实 worker/生成服务/线上调度收口(T12-B) -- 完整站内通知/交付产品化 -- 前台删除工单流程(6/19 T12-C 已落地表单与保留期资格,**但生产化部署验收仍在 T12-D 范围**) -- 备案域名 + 公网 notify_url +- 运营主体全称与正式联系信息最终确认 +- 法务正式审定与版本号/生效日期拍板 +- 前台正式挂载入口与版本化引用 ### A-2 后台/外部渠道补录同意审计统一化(6/20 已完成) @@ -134,6 +132,24 @@ - `scripts/gaokao-retention-cleanup.py` 的生产化部署与定时接入验收(**T12-D 端到端 acceptance 步骤已就绪,实际部署动作待 ops 执行**) - 正式法务审定版本 +#### Q-A crowd_db 非湖南省份高置信数据密度 + +严重度: P1 +当前状态: **可信来源元数据已补齐,省级高置信内容仍待深化** +范围归属: 数据治理 / 对外可信度口径 + +已完成(2026-06-21 增量): + +- 27 个省级 JSON 已补齐 `trusted_sources` / `quality_note` +- `source_url` 已从仓库自引用改为可信公开入口 `https://gaokao.chsi.com.cn/` +- `data/crowd_db/SCHEMA.md`、loader、provenance tests 已同步 + +仍缺: + +- 非湖南省份的高密度、高置信推荐内容补充 +- 各省招生考试机构年度入口的逐省复核 +- 若某省拟升级为 `usable/high`,需同步更新测试与复审口径 + ### C. 文档与执行板一致性(6/19 已收口) #### C-1 4 个产品/工程文档 Current/Target 校准到 6/19 diff --git a/docs/CURRENT_STATE.md b/docs/CURRENT_STATE.md index 86811ef..f41e090 100644 --- a/docs/CURRENT_STATE.md +++ b/docs/CURRENT_STATE.md @@ -1,14 +1,15 @@ # CURRENT_STATE -最后更新: 2026-06-20 +最后更新: 2026-06-21 状态词: 本地验证完成(6/19 复审 + 6/19 整改计划 + A1 保留期门禁 + B1 支付失败持久化 - A2/B2 文档与执行板校准 + 6/20 T12-D retention cleanup conn ownership 修复 - 端到端本地 acceptance 步骤落地 + 6/20 A-2 admin/外部渠道补录同意审计统一化 - 6/20 生产加固 (`/health` checks + JWT/admin password fail-closed) + 6/20 L-A 送审前修复 (admin footer + baseline §6/§7 同步) + 6/20 crowd_db 质量契约 - 锁死;下一阶段 = 推进 T12 真实支付 acceptance + 隐私政策正式审定 + 备份恢复 - 异机演练) + 锁死 + 6/20 v2.1.4 四维验证脚本(性能/集成/用户模拟/部署运维)已落地,2026-06-21 + 复跑仍通过;下一阶段 = 推进 T12 真实支付 acceptance + 隐私政策正式审定 + + 备份恢复异机演练) 真相源优先级: @@ -99,15 +100,28 @@ - 所有 data_year = 2025 (6/25 后需显式更新) - 防止"27 省 crowd_db 均为高置信强推荐数据"合规假象回归 -### 0.6 真相源分层与历史快照降级(6/20 增量) +### 0.6 crowd_db 可信来源元数据补齐(2026-06-21) + +- 27 个省级 JSON 统一补齐 `trusted_sources` / `quality_note` +- `source_url` 从仓库自引用改为可信公开入口 `https://gaokao.chsi.com.cn/` +- `SCHEMA.md` / loader / provenance tests 已同步 +- 这补齐的是**可信来源治理口径**,不代表 26 个非湖南省已升级为高置信推荐数据 + +### 0.7 真相源分层与历史快照降级(6/20 增量) - 6/19 整改板/执行板顶部加"⚠ 历史快照"头注,指向 6/20 - 6/20 新建 `docs/ACTIVE_REMEDIATION_2026-06-20.md` + `docs/ACTIVE_EXECUTION_BOARD_2026-06-20.md` - 本节作为 6/20 增量叠加在 6/19 真相源之上 ---- +### 0.8 法务协议与 crowd_db 可信来源补齐(2026-06-21) -## 6/19 增量段(叠加在 6/13 真相源之上) +- `docs/PRIVACY_POLICY_DRAFT.md` 补齐:未成年人、委托处理、用户权利、存储与删除、投诉联系方式、版本生效等条款 +- `docs/SERVICE_TERMS.md` 补齐:服务边界、支付退款、知识产权、免责、争议解决、版本更新等条款 +- `docs/LEGAL_PRIVACY_BASELINE.md` 补齐正式法务审核条款清单与待审状态说明 +- `data/crowd_db/*.json` 统一补齐可信来源元数据(`trusted_sources` / `quality_note`),并将 `source_url` 切到可信公开入口 +- 这两项仍处于**待法务 / 待内容深化**阶段,但已经从“缺文档/缺元数据”提升为“可审核、可复核、可继续推进” + +--- 6/19 落地了 3 项 P0/P1 整改 + 1 项真相源分层。**本节是当前唯一增量**: diff --git a/docs/LEGAL_PRIVACY_BASELINE.md b/docs/LEGAL_PRIVACY_BASELINE.md index c24d2cc..e2e3c42 100644 --- a/docs/LEGAL_PRIVACY_BASELINE.md +++ b/docs/LEGAL_PRIVACY_BASELINE.md @@ -2,7 +2,7 @@ 状态: 草案(T12 上线前基线) 适用范围: `/pricing` → `/checkout` → `/api/public/orders` → `/portal/{token}` 全链路,以及后台订单处理、报告交付、渠道补录场景。 -最后更新: 2026-06-14 +最后更新: 2026-06-21 --- @@ -13,6 +13,7 @@ - 代码能跑 = 可以直接收真实考生资料 - 有加密字段 = 已完成隐私合规 - 可删除数据库记录 = 已具备正式删除流程 +- 有免责声明 = 已完成未成年人/监护人合规 本文件只定义当前必须落实的最低要求,不代替正式律师审阅。 @@ -43,6 +44,12 @@ - 状态流转历史 - 处理人 - 处理原因 +5. 同意审计信息 + - `consent_version` + - `consent_scope` + - `consent_given_at` + - `consent_operator` + - `consent_channel` ### 2.2 敏感级别分层 @@ -84,12 +91,14 @@ - `consent_operator`(self/guardian/admin_import) 3. 后台人工补录渠道单时,也必须记录同意来源: - 闲鱼/微信/学校/线下确认 +4. 若发现未经监护人同意即收集未成年人信息,应具备删除/匿名化与事件留痕流程 -当前状态: +当前状态: - `consent_version / consent_scope / privacy_accepted / service_terms_accepted / guardian_confirmed` 已落在 `order_intakes` payload 提交链路 - `consent_given_at / privacy_accepted_at / service_terms_accepted_at / consent_channel / consent_operator` 现已在 portal 提交链路自动补齐 -- 但后台代录 / 外部渠道补录仍需逐步统一到同一审计口径,因此仍不可宣称“监护人同意闭环已整体完成” +- 后台代录 / 外部渠道补录已在 A-2 中统一到同一审计口径 +- 但正式法务确认版本、监护人前台正式挂载入口、撤回同意后的客服/SOP 仍未完成,**因此仍不可宣称“监护人同意闭环已整体完成”** --- @@ -100,15 +109,17 @@ 1. 收集哪些信息 2. 用于什么目的 3. 不用于营销出售 -4. 可申请删除 +4. 可申请删除/更正/查询 5. 监护人同意要求 6. 服务结果为辅助决策,不承诺录取结果 +7. 联系方式与投诉渠道 +8. 版本更新与生效说明 建议文案入口: - 下单页提交前 - 资料填写页提交前 -- 页脚“隐私政策 / 数据删除说明”链接 +- 页脚“隐私政策 / 服务说明 / 数据删除说明”链接 --- @@ -132,34 +143,95 @@ --- -## 7. 当前代码与本基线的差距 +## 7. 正式协议文本应覆盖的法务审核条款 -已具备(6/20 增量): +在进入正式对外版本前,协议文本至少应覆盖以下条款: + +1. **运营主体与适用范围** + - 运营主体名称 + - 联系方式 + - 适用产品/页面/后台场景 +2. **个人信息处理规则** + - 收集字段 + - 处理目的 + - 委托处理/共享情形 + - 保存期限与删除例外 +3. **用户权利** + - 查询/更正/删除 + - 撤回同意 + - 投诉举报与响应方式 +4. **未成年人保护** + - 监护人知情同意 + - 非法收集后的删除/匿名化机制 +5. **服务协议核心条款** + - 服务边界 + - 免责声明 + - 退款/售后 + - 争议解决 + - 不可抗力/服务中断 +6. **版本生效管理** + - 发布日期 + - 生效日期 + - 重大变更再次通知机制 + +当前状态(2026-06-21): + +- `docs/PRIVACY_POLICY_DRAFT.md` 已补齐:未成年人、用户权利、委托处理/第三方、存储与删除、联系方式、版本生效等结构 +- `docs/SERVICE_TERMS.md` 已补齐:服务边界、支付退款、知识产权、免责、争议解决、版本更新等结构 +- **但仍待法务对运营主体、正式联系方式、争议解决口径、对外生效版本进行最终审定** + +--- + +## 8. 当前代码与本基线的差距 + +已具备: - 订单敏感字段加密/脱敏基础 - 订单删除 DAO 能力(含 OrdersDAO conn ownership 修复,T12-D) - Portal token 访问控制基础 -- **后台代录 / 外部渠道补录的同意审计统一化**(A-2 6/20 落地:`consent_method` / `consent_operator` / `consent_channel` / `consent_given_at` / `consent_version` 5 字段在 admin/portal 双轨写库;admin `CreateOrderRequest.consent` 必填;`consent_operator` 严格按 `self/guardian/admin_import` 白名单;缺失或非法 consent → HTTP 422) -- **数据删除 SOP 的脚本化/产品化**(T12-D 6/20 落地:`scripts/gaokao-retention-cleanup.py` + systemd unit + cron 样例 + runbook §8 端到端 acceptance 步骤) +- 后台代录 / 外部渠道补录的同意审计统一化(A-2) +- 数据删除 SOP 的脚本化/产品化(T12-D) +- `/health`、密钥 fail-closed、操作审计、footer 入口等最小工程护栏 -尚缺(截至 6/20): +尚缺: -- 对外正式法务审阅与版本管理(PM/legal 拍板,4 份草案已就绪) -- `consent_version` 升级机制(当前硬编码 `t12-web-mvp-v1`,改版时需 bump) -- `consent_scope` 命名空间统一(portal `web-self-service-order-intake` vs admin `{source}-channel-intake`,建议提升为 Literal) +- 对外正式法务审阅与版本管理(PM/legal 拍板) +- 前台正式运营主体/联系方式/生效日期挂载 +- `consent_version` 升级机制(当前仍需版本化管理) +- `consent_scope` 命名空间进一步统一 +- 第三方 SDK/插件接入后的隐私披露流程 --- -## 8. T12 验收口径 +## 9. crowd_db 各省可信来源基线 + +为了避免把“仓库内存在 JSON 文件”误报为“已有可信省级数据”,对 crowd_db 的最低口径统一如下: + +1. 各省文件必须包含可审计的可信来源元数据 +2. `source_url` 不得再指向仓库自引用路径作为“来源证明” +3. 可补充 `trusted_sources` / `quality_note` 字段,明确当前数据是: + - 高置信人工整理(如湖南) + - 结构化骨架/人工摘要(其余省份) +4. 对外不得把 26 个 skeleton/usable 省份宣传为“高置信强推荐数据” + +当前状态(2026-06-21): + +- 27 个省级 JSON 已补齐可信来源元数据治理字段 +- 26 个非湖南省仍是 skeleton/usable 口径,**补齐的是可信来源与复核口径,不等于已经补齐高置信推荐内容** + +--- + +## 10. T12 验收口径 只有同时满足以下条件,才可说“隐私合规基线已补齐”: -- 已有正式文档:隐私政策 + 数据保留删除规则 +- 已有正式文档:隐私政策 + 服务条款 + 数据保留删除规则 - 前台存在可见入口 - 同意字段已落库 - 后台/运维知道如何响应删除请求 +- 法务已确认运营主体、联系方式、争议解决和正式生效版本 在此之前,只能说: -- **已建立隐私合规草案基线** +- **已建立隐私合规草案基线并补齐法务审核内容** - 不能说“隐私合规已整体完成” diff --git a/docs/PRIVACY_POLICY_DRAFT.md b/docs/PRIVACY_POLICY_DRAFT.md index 2c88f99..a87e67e 100644 --- a/docs/PRIVACY_POLICY_DRAFT.md +++ b/docs/PRIVACY_POLICY_DRAFT.md @@ -1,65 +1,152 @@ -# 隐私政策(草案) +# 隐私政策(法务审核草案) -最后更新: 2026-06-14 -适用产品: 高考志愿填报智能系统(用户端 Web 自助 MVP) +最后更新: 2026-06-21 +适用产品: 高考志愿填报智能系统(用户端 Web 自助 MVP + 后台订单处理 + 渠道补录场景) +当前状态: **待法务审核 / 待前台正式挂载 / 待版本号生效** -## 1. 我们收集的信息 +> 参考了腾讯隐私保护平台、京东基础隐私政策、JoyAgent 隐私政策等国内大厂公开协议的常见结构,对草案补齐了:未成年人保护、用户权利、委托处理/第三方、存储期限、投诉联系方式、版本生效与变更说明等条款。 -为完成志愿填报服务,我们可能收集: +## 1. 适用范围与定义 -- 联系信息:家长称呼、手机号、微信号 -- 考生信息:姓名、省份、分数、位次、选科、兴趣方向、备注 -- 订单信息:订单号、套餐版本、支付状态、退款状态 -- 交付信息:报告 HTML/PDF、状态通知记录 -- 运维审计信息:状态变更记录、处理人、错误日志 +本政策适用于我们通过网站、管理后台、订单表单、客服沟通、渠道补录等方式收集、使用、存储、删除或以其他方式处理的与高考志愿填报服务相关的个人信息。 -## 2. 我们如何使用这些信息 +本政策中的“我们”是指提供高考志愿填报审核、风险提示、方案整理、报告交付及售后支持服务的运营方;“您”是指考生本人、家长、监护人或经合法授权提交信息的联系人。 -我们仅将这些信息用于: +## 2. 我们收集的信息 -1. 创建订单并完成服务交付 -2. 支付确认、状态通知、售后处理 -3. 生成志愿审核/推荐/报告 -4. 故障排查与安全审计 +为完成志愿填报服务,我们可能收集以下信息: -## 3. 我们不会做什么 +### 2.1 您主动提交的信息 + +- 联系信息:家长称呼、手机号、微信号、备用联系方式 +- 考生信息:姓名、省份、分数、位次、选科、兴趣方向、目标院校/专业、备注 +- 订单信息:订单号、套餐版本、支付状态、退款状态、售后状态 +- 资料与交付信息:资料表单、上传附件、报告 HTML/PDF、状态通知记录 +- 同意审计信息:`consent_version`、`consent_scope`、`consent_given_at`、`consent_operator`、`consent_channel` + +### 2.2 服务运行过程中产生的信息 + +- 管理后台认证信息、访问令牌、日志标识 +- 状态流转记录、处理人、处理原因、运维告警记录 +- 故障排查与安全审计所需的最小必要日志 + +### 2.3 我们原则上不主动收集的高敏信息 + +除非法律法规要求或您另行主动提交并经人工审核确认必要,否则我们原则上不主动收集身份证号、银行卡号、生物识别信息等超出当前服务必要范围的高敏个人信息。 + +## 3. 我们如何使用这些信息 + +我们仅将上述信息用于以下明确目的: + +1. 创建订单并完成志愿填报审核、方案整理、报告交付等服务 +2. 进行支付确认、状态通知、售后处理、退款争议处理 +3. 完成资料补充、进度跟踪、人工客服沟通 +4. 进行最小必要的安全防护、异常排查、运维告警与审计留痕 +5. 在符合法律法规及您授权的前提下,生成去标识化统计信息,用于改进服务质量 + +未经您的单独授权,我们不会将您的个人信息用于广告营销画像、跨业务推荐或向无关第三方出售。 + +## 4. 我们不会做什么 - 不出售用户数据 - 不将数据用于广告营销画像 -- 不向无关第三方提供个人资料 -- 不在对外案例中直接展示未脱敏真实信息 +- 不向无关第三方提供未脱敏个人资料 +- 不在对外案例、演示、报告中直接展示未脱敏真实信息 +- 不以“辅助决策结果”替代官方政策、招生章程或考试院权威信息 -## 4. 未成年人/监护人说明 +## 5. 委托处理、共享与第三方说明 -本服务面向高考考生及家长。提交资料前,请确认: +### 5.1 委托处理 -- 资料提交人已获得考生及监护人知情同意 -- 提交的分数、位次、选科等信息真实准确 +为实现当前服务,我们可能委托云基础设施、日志存储、支付回调、邮件/通知等供应商提供技术支持,但我们会要求其仅在委托范围内处理信息,并采取相应的保密与安全措施。 -## 5. 数据保存与删除 +### 5.2 共享 -- 我们仅在完成服务、售后、审计所必需期间保留数据 -- 用户可申请删除订单与报告相关数据 -- 具体保留周期与删除流程见 `docs/DATA_RETENTION_AND_DELETION.md` +除以下情形外,我们不会向第三方共享您的个人信息: -## 6. 数据安全措施 +- 已取得您的单独同意或明确授权 +- 为完成支付、退款、通知、法务合规或客服售后所必需 +- 为履行法定义务、响应监管机关或司法机关要求所必需 +- 在发生合并、分立、收购或资产转让时,且个人信息接收方继续受本政策或同等保护标准约束 + +### 5.3 第三方 SDK / 插件 / MCP + +当前产品对外宣称口径中,不应默认把第三方 SDK/插件视作既有能力。若后续接入第三方 SDK、浏览器脚本、统计分析或外部插件,必须同步补充: + +- 第三方名称 +- 收集字段 +- 处理目的 +- 隐私政策链接 +- 是否为必要能力 + +在未完成上述披露前,不得对外宣称“第三方共享/SDK 披露已全部完成”。 + +## 6. 数据保存、删除与本地化 + +### 6.1 保存原则 + +我们仅在完成服务、售后处理、争议处理、安全审计、法定义务所必需的最短期间内保存个人信息。 + +### 6.2 保存期限与删除说明 + +- 订单、交付、删除申请、通知审计等数据的具体保留周期与删除流程,见 `docs/DATA_RETENTION_AND_DELETION.md` +- 支付争议期、法定保留期或售后处理期间,相关数据可能暂不支持立即删除 +- 超出保留期且不再必要的数据,应按既定 SOP 执行删除或匿名化 + +### 6.3 存储地点与跨境说明 + +当前默认按中国境内受控环境部署与存储;如后续发生跨境存储、跨境传输或境外第三方处理,应另行完成风险评估、法务审阅、用户告知与必要同意流程。 + +## 7. 数据安全措施 我们当前采用的最小安全措施包括: - 敏感字段加密/脱敏 - 访问令牌保护用户订单页 -- 管理后台认证与操作审计 -- 密钥通过环境变量管理,不写入 Git +- 管理后台认证、权限控制与操作审计 +- JWT、portal token、支付 webhook secret 等关键密钥通过环境变量管理,不写入 Git +- `/health`、运维告警、删除审计、交付任务等链路的最小必要留痕 -## 7. 用户权利 +如发生个人信息安全事件,我们将按照法律法规要求进行处置、记录,并在必要时向相关用户及主管机关进行通知。 -用户可申请: +## 8. 您的权利 -- 查询订单状态 -- 更正错误资料 -- 删除相关数据(在法律/审计必要范围外) +在符合法律法规及身份核验要求的前提下,您可以申请: -## 8. 草案状态说明 +- 查询订单状态与我们处理您信息的基本情况 +- 更正错误资料或补充不完整信息 +- 删除相关数据(在法律、审计、售后保留范围外) +- 撤回部分授权或同意(但撤回后可能影响服务继续提供) +- 注销账号或终止继续使用相关服务(如后续开放账号体系) +- 通过客服/法务通道投诉、举报或咨询个人信息处理问题 -本文件为产品上线前草案,用于建立 T12 Web 自助 MVP 的最小隐私基线。 -在完成法务审阅、前台入口接入、同意记录落库前,不得对外宣称“隐私合规已全部完成”。 +我们会在核验身份后,按照适用法律法规与实际业务场景处理您的请求。 + +## 9. 未成年人 / 监护人说明 + +本服务面向高考考生及家长,天然可能涉及未成年人个人信息。提交资料前,请确认: + +- 资料提交人已获得考生及监护人知情同意 +- 提交的分数、位次、选科、目标方向等信息真实、准确、完整 +- 如考生为未成年人,监护人已阅读并理解本政策及相关服务条款 + +如果我们发现未经可证实的监护人同意而收集了未成年人个人信息,我们会在核实后尽快删除或匿名化处理相关信息,法律法规另有要求的除外。 + +## 10. 联系我们 + +如您对本政策或个人信息处理事项有任何疑问、意见、投诉或建议,可通过以下方式联系: + +- 客服/运营通道:待产品正式上线后补充 +- 法务/隐私邮箱:**待法务审核确认后补充正式邮箱** +- 数据删除与保留流程:见 `docs/DATA_RETENTION_AND_DELETION.md` + +## 11. 版本更新与生效 + +- 本文件当前为**法务审核草案**,不代表正式对外生效文本 +- 正式版本应补充:版本号、发布日期、生效日期、运营主体全称、联系信息、前台挂载入口 +- 如条款发生重大变更(例如处理目的、共享对象、存储地点、未成年人保护规则变化),应通过页面弹窗、订单流程提示或其他显著方式重新告知并在必要时重新征得同意 + +## 12. 草案状态说明 + +本文件用于建立 T12 Web 自助 MVP 与后台运营链路的隐私基线。 +在完成法务审阅、前台入口接入、同意记录落库校准、版本化引用之前,不得对外宣称“隐私合规已全部完成”。 diff --git a/docs/SERVICE_TERMS.md b/docs/SERVICE_TERMS.md index 4751468..1af893b 100644 --- a/docs/SERVICE_TERMS.md +++ b/docs/SERVICE_TERMS.md @@ -1,53 +1,135 @@ -# 服务说明与使用条款(草案) +# 服务说明与使用条款(法务审核草案) -最后更新: 2026-06-14 -适用范围: 高考志愿填报智能系统 T12 用户端 Web 自助 MVP +最后更新: 2026-06-21 +适用范围: 高考志愿填报智能系统(用户端 Web 自助 MVP + 人工服务运营增强链路) +当前状态: **待法务审核 / 待正式生效 / 待前台挂载** -## 1. 服务性质 +> 参考了腾讯服务条款、京东基础隐私政策、JoyAgent 隐私政策等国内大厂公开协议中常见的“能力边界、免责提示、未成年人说明、争议解决、版本更新”结构,对本草案做了补强。 -本服务提供高考志愿填报相关的信息整理、规则检查、风险提示、审核建议和报告生成能力。 -本服务属于**辅助决策工具与咨询支持服务**,不构成对录取结果的保证。 +## 1. 协议接受与主体范围 -## 2. 用户提交责任 +在您注册、下单、提交资料、查看订单状态、接收报告、申请售后或以其他方式使用本系统及相关服务前,请仔细阅读并理解本协议及 `docs/PRIVACY_POLICY_DRAFT.md`。 + +如您不同意本协议或隐私政策的任一条款,请立即停止使用相关服务。您继续使用服务的行为,视为您已阅读并同意本协议及相关规则。 + +## 2. 服务性质 + +本服务提供高考志愿填报相关的信息整理、规则检查、风险提示、审核建议、资料收集、报告生成和交付支持能力。 +本服务属于**辅助决策工具与咨询支持服务**,不构成对录取结果、投档结果、专业分流结果、奖助资格或未来就业结果的保证。 + +## 3. 用户资格与未成年人说明 + +- 您应确保具备相应的民事行为能力,或已取得监护人授权后使用本服务 +- 若您代表考生提交资料,应确保有权提交并处理相关个人信息 +- 若考生为未成年人,监护人应事先阅读并同意本协议及隐私政策 + +## 4. 用户提交责任 用户或监护人提交资料时,应保证: -- 分数、位次、选科等信息真实 -- 有权提交相关个人资料 -- 已获得监护人知情同意(如适用) +1. 分数、位次、选科、意向专业、联系方式等信息真实、完整、及时 +2. 有权提交相关个人资料,不侵犯第三方合法权益 +3. 已获得考生及监护人的知情同意(如适用) +4. 不得利用本服务提交违法、虚假、侮辱性、侵权性或干扰系统安全的数据 -## 3. 系统能力边界 +因用户提交资料错误、遗漏、失真或授权不完整导致的分析偏差、交付延迟或争议风险,由用户承担相应责任。 + +## 5. 服务内容与能力边界 我们会尽力提供: -- 套餐下单与订单状态展示 -- 规则校验与风险提示 -- 报告查看与 PDF 下载 -- 售后、退款与补充资料的最小兜底 +- 套餐下单、订单状态展示与资料表单收集 +- 规则校验、风险提示、志愿审核与报告生成 +- 报告查看、PDF 下载、售后补充资料支持 +- 退款、通知、删除申请、运维审计等最小闭环能力 -但不承诺: +但我们不承诺: - 被任何学校或专业录取 -- 所有数据始终零误差 +- 所有数据、政策、位次、计划在任意时间点都零误差 - 政策变化前后历史报告自动保持最新 +- 在真实支付、真实短信/邮件、真实第三方渠道未联调完成前即可视为“全部生产环境可用” -## 4. 退款与售后 +## 6. 订单、支付、退款与交付 -- 已支付订单可根据服务进度进入人工审核退款流程 -- 是否退款、退款比例和处理时长,取决于实际服务交付状态与争议情况 -- 退款期间,相关支付/订单数据可能因审计需要暂不删除 +### 6.1 下单与支付 -## 5. 数据与隐私 +- 下单前应阅读套餐说明、隐私政策、服务条款及相关提示 +- 支付、退款、回调、对账等环节可能依赖第三方支付通道或人工售后流程 +- 在真实支付 acceptance、备案域名、公网回调尚未完成前,相关能力不得对外表述为“正式商用全部完成” -- 具体隐私说明见 `docs/PRIVACY_POLICY_DRAFT.md` -- 数据保留与删除规则见 `docs/DATA_RETENTION_AND_DELETION.md` +### 6.2 退款与售后 -## 6. 免责声明 +- 已支付订单可根据服务进度、交付状态、争议情况进入人工审核退款流程 +- 是否退款、退款比例和处理时长,以页面说明、人工客服记录、实际交付情况和审计记录为准 +- 退款或争议处理期间,相关订单、支付、通知、交付与审计数据可能因合规需要暂不删除 -- 志愿填报最终应以官方政策、招生章程、招生计划和考试院公布信息为准 -- 本服务输出仅供参考,不替代学校、考试院或专业顾问的最终权威解释 +### 6.3 交付与验收 -## 7. 草案状态 +- 报告以网页、HTML、PDF、状态页或人工通知等形式交付 +- 用户应在合理期间内查看交付结果并及时反馈问题 +- 因政策变化、志愿表调整、补录信息变化等导致的后续偏差,不当然代表原交付存在违约 + +## 7. 智能分析、算法与信息来源声明 + +- 本系统使用规则校验、结构化数据、人工整理结论与辅助算法提供建议 +- 对于高考政策、招生章程、招生计划、专业要求、学校录取规则,最终应以考试院、教育主管部门、学校官方公告为准 +- crowd_db、风险提示、推荐排序等仅作为辅助参考,不替代用户、监护人、学校招办或专业顾问的最终判断 + +## 8. 数据与隐私 + +- 我们如何处理个人信息,详见 `docs/PRIVACY_POLICY_DRAFT.md` +- 数据保留、删除、匿名化与例外情形,详见 `docs/DATA_RETENTION_AND_DELETION.md` +- 同意审计字段、渠道补录口径、保留期门禁等合规基线,详见 `docs/LEGAL_PRIVACY_BASELINE.md` + +## 9. 服务变更、中止与终止 + +在以下情形下,我们可以在合理范围内调整、限制、中止或终止部分服务: + +- 系统维护、升级、迁移、性能扩容或安全修复 +- 第三方支付、通知、网络、云服务异常 +- 监管政策变化、招生规则变化或不可抗力事件 +- 用户存在违法违规、恶意攻击、虚假提交或滥用服务行为 + +如相关变化会对用户权益产生重大影响,我们将尽量通过页面公告、订单通知或其他适当方式进行提示。 + +## 10. 知识产权与使用限制 + +- 本系统的软件、页面、模板、报告结构、文案、图标、代码、数据库结构及相关内容,除依法归属于第三方的部分外,均由运营方或合法权利人享有知识产权 +- 用户基于自身订单获得的报告与内容,仅限于个人或家庭决策参考,不得擅自对外售卖、批量转载、训练第三方模型或用于违法用途 + +## 11. 免责与责任限制 + +在法律法规允许范围内,下列情形不视为我们违约或承担超出法定范围的责任: + +- 因考试政策变化、招生计划调整、学校章程修订、录取规则变化导致的结果偏差 +- 因用户资料错误、监护人授权不完整、补充信息延迟导致的偏差 +- 因网络故障、第三方支付/通知通道异常、云服务故障、黑客攻击、病毒传播等导致的中断 +- 因不可抗力或政府行为导致的服务中止、延迟或无法履行 + +但对于因我们存在故意或重大过失造成的法定责任,不适用前述免责。 + +## 12. 法律适用与争议解决 + +本协议的订立、生效、解释、履行及争议解决,适用中华人民共和国法律。 + +如因本协议或服务使用产生争议,双方应先通过客服、售后、法务沟通等方式友好协商;协商不成的,提交**运营主体所在地有管辖权的人民法院**处理。正式对外版本应由法务补充运营主体全称及准确管辖口径。 + +## 13. 联系方式 + +如您对本协议、服务能力边界、退款争议或知识产权事项有疑问,可通过以下方式联系: + +- 客服/运营通道:待正式上线后补充 +- 法务/隐私邮箱:待法务审核确认后补充 +- 隐私与删除规则:见 `docs/PRIVACY_POLICY_DRAFT.md` 与 `docs/DATA_RETENTION_AND_DELETION.md` + +## 14. 协议更新与生效 + +- 本文件当前为**法务审核草案**,尚未形成最终对外生效文本 +- 正式版本应补充:版本号、发布日期、生效日期、运营主体名称、统一联系方式、前台挂载入口 +- 如发生重大变更(例如服务范围、支付方式、争议解决、未成年人规则、个人信息处理方式变化),应通过显著方式重新告知用户 + +## 15. 草案状态说明 本文件为产品上线前草案。 在完成法务审阅、前台可见入口接入、版本化引用之前,不得对外宣称“正式服务协议已完成上线”。 diff --git a/reports/PRODUCTION_LAUNCH_READINESS_2026-06-20.md b/reports/PRODUCTION_LAUNCH_READINESS_2026-06-20.md index abc7b12..2444ea2 100644 --- a/reports/PRODUCTION_LAUNCH_READINESS_2026-06-20.md +++ b/reports/PRODUCTION_LAUNCH_READINESS_2026-06-20.md @@ -175,7 +175,7 @@ - `reports/LA_LEGAL_PRIVACY_PRE_AUDIT_2026-06-20.md` - `reports/QA_CROWD_DB_NON_HUNAN_DENSITY_AUDIT.md` -### 6.2 本轮新增 (待 commit) +### 6.2 本轮新增(已于 `240c38e` 提交并三仓同步) - `scripts/perf_benchmark.py` (性能测试) - `scripts/integration_test.py` (集成测试) @@ -207,5 +207,5 @@ --- -**报告生成**: 2026-06-20 (commit 待推) -**基于**: v2.1.3 (6eafe1f) + 待 commit 性能/集成/模拟/部署 4 脚本 +**报告生成**: 2026-06-20;2026-06-21 已复核并确认 `240c38e` 已提交三仓同步 +**基于**: v2.1.3 (`6eafe1f`) + v2.1.4 四维验证脚本/报告 (`240c38e`) diff --git a/reports/integration_2026_06_20.json b/reports/integration_2026_06_20.json index 49dd561..8fef3e5 100644 --- a/reports/integration_2026_06_20.json +++ b/reports/integration_2026_06_20.json @@ -16,7 +16,7 @@ { "step": "create_order", "ok": true, - "detail": "status=201 order_id=GKO-20260620-G5TM" + "detail": "status=201 order_id=GKO-20260621-MB9S" }, { "step": "get_order", diff --git a/reports/perf_2026_06_20.json b/reports/perf_2026_06_20.json index 1ab8087..0231343 100644 --- a/reports/perf_2026_06_20.json +++ b/reports/perf_2026_06_20.json @@ -7,11 +7,11 @@ "success_2xx": 200, "failures": 0, "success_rate": 100.0, - "p50_ms": 2.35, - "p95_ms": 3.01, - "p99_ms": 3.41, - "max_ms": 3.62, - "mean_ms": 2.36 + "p50_ms": 2.39, + "p95_ms": 3.2, + "p99_ms": 4.1, + "max_ms": 262.37, + "mean_ms": 3.73 }, "concurrency": { "label": "concurrency_10x50", @@ -19,11 +19,11 @@ "success_2xx": 150, "failures": 0, "success_rate": 100.0, - "p50_ms": 7.45, - "p95_ms": 10.68, - "p99_ms": 12.5, - "max_ms": 13.18, - "mean_ms": 7.54, + "p50_ms": 7.29, + "p95_ms": 11.02, + "p99_ms": 14.52, + "max_ms": 15.58, + "mean_ms": 7.65, "wall_time_s": 0.12, "rps": 1250.0 } diff --git a/reports/user_simulation_2026_06_20/captures.json b/reports/user_simulation_2026_06_20/captures.json index ce7fc9f..3b73595 100644 --- a/reports/user_simulation_2026_06_20/captures.json +++ b/reports/user_simulation_2026_06_20/captures.json @@ -1,7 +1,7 @@ { "date": "2026-06-20", "port": 19092, - "order_id": "GKO-20260620-24VE", + "order_id": "GKO-20260621-1DG1", "portal_token_len": 131, "overall_ok": true, "captures": [ diff --git a/reports/user_simulation_2026_06_20/desktop_portal_info.png b/reports/user_simulation_2026_06_20/desktop_portal_info.png index ec5103e..511ec5e 100644 Binary files a/reports/user_simulation_2026_06_20/desktop_portal_info.png and b/reports/user_simulation_2026_06_20/desktop_portal_info.png differ diff --git a/reports/user_simulation_2026_06_20/desktop_portal_status.png b/reports/user_simulation_2026_06_20/desktop_portal_status.png index d68aef7..314792e 100644 Binary files a/reports/user_simulation_2026_06_20/desktop_portal_status.png and b/reports/user_simulation_2026_06_20/desktop_portal_status.png differ diff --git a/reports/user_simulation_2026_06_20/mobile_portal_info.png b/reports/user_simulation_2026_06_20/mobile_portal_info.png index dff259c..a5791b3 100644 Binary files a/reports/user_simulation_2026_06_20/mobile_portal_info.png and b/reports/user_simulation_2026_06_20/mobile_portal_info.png differ diff --git a/reports/user_simulation_2026_06_20/mobile_portal_status.png b/reports/user_simulation_2026_06_20/mobile_portal_status.png index fd93a3a..e53a610 100644 Binary files a/reports/user_simulation_2026_06_20/mobile_portal_status.png and b/reports/user_simulation_2026_06_20/mobile_portal_status.png differ diff --git a/scripts/perf_benchmark.py b/scripts/perf_benchmark.py index 08b677b..212c237 100644 --- a/scripts/perf_benchmark.py +++ b/scripts/perf_benchmark.py @@ -20,7 +20,6 @@ import os import statistics import subprocess import sys -import tempfile import time from pathlib import Path @@ -173,17 +172,16 @@ def main() -> int: # 3. login token = _get_jwt() - authed = {"Authorization": f"Bearer {token}"} # 4. concurrency: 10 worker x 50 task - def _work(_i: int) -> list[tuple[int, float]]: - out = [] + def _work(_i: int) -> list[tuple[int, float, str]]: + out: list[tuple[int, float, str]] = [] out.append(_http("GET", "/health")) out.append(_http("GET", "/api/auth/me", token=token)) out.append(_http("GET", "/api/meta", token=token)) return out - all_samples: list[tuple[int, float]] = [] + all_samples: list[tuple[int, float, str]] = [] t0 = time.perf_counter() with concurrent.futures.ThreadPoolExecutor(max_workers=10) as ex: for batch in ex.map(_work, range(50)): diff --git a/scripts/user_simulation.py b/scripts/user_simulation.py index 5df2978..1fd1f7b 100644 --- a/scripts/user_simulation.py +++ b/scripts/user_simulation.py @@ -158,8 +158,6 @@ def main(): if not portal_token: print(f"[sim] issue_portal_token failed for order={order_id}") return 1 - print(f"[sim] no portal_token in order response: {j2.get('order', {})}") - return 1 print(f"[sim] order={order_id} portal_token length={len(portal_token)}") # 2. Playwright 跳