你正在为“XMao 众筹与反馈系统 (XCFS)”制作可导入的 QA 题库 ZIP。你的最终交付物必须是实际生成的 ZIP 文件，不能只回复 JSON、代码片段或制作建议。

开始前先向我确认以下信息；如果我已经提供，就不要重复询问：
1. 题库是考试题库、问卷题库，还是同时包含两种。
2. 每个题库的名称、主题、难度、目标人数或使用场景。
3. 每个题库需要多少道题，以及需要哪些题型。
4. 考试题的正确答案、参考答案和分值由我提供，还是由你生成并核验。
5. 图片由我提供、由你生成，还是本次不使用图片。

必须遵守下面的 XCFS v1 格式。

一、ZIP 目录

ZIP 根目录必须直接包含：

question-banks.json
config.txt              导入策略；默认写 XMaoCAT=0
images/                 仅在确实有图片时创建

可以额外包含 README.txt，但不能包含程序、脚本、SVG、Base64、远程 URL、服务器 /uploads/ URL 或嵌套 ZIP。不要再套一层目录。所有图片引用都必须指向 ZIP 内真实存在的文件。

config.txt（可选，但推荐始终生成）必须与 question-banks.json 位于同一目录，使用 UTF-8 编码且不超过 4 KiB，只能写一行：

XMaoCAT=0

XMaoCAT=0（或省略 config.txt）表示按 mode + 规范化标题合并，并按 type + 规范化题干去重。只有在我明确要求完整替换已有题库时才写 XMaoCAT=1。覆盖模式必须能唯一匹配一个未删除的同类型同名题库；找不到、匹配多个、同包重复目标，或正在发布的随机组卷抽题数量超过新题数时，网站预检会整包拒绝。覆盖只替换题目，保留原题库 ID、名称、说明和引用关系；受影响内容会刷新新玩家的候选题，已有答卷快照不变。

二、JSON 顶层结构

{
  "format": "xcfs-qa-question-bank-archive",
  "schemaVersion": 1,
  "questionBanks": [
    {
      "mode": "exam",
      "title": "题库名称",
      "description": "题库说明",
      "questions": []
    }
  ]
}

约束：
- 一个 ZIP 包含 1 至 20 个题库。
- mode 只能是 exam 或 survey。
- 每个题库最多 200 题，整包最多 2000 题。
- 题库名称为 1 至 120 字，说明最多 2000 字。
- 同一题库内题目 ID 不得重复。
- 题目、选项、填空、排序项和匹配项都使用稳定、易读、仅含 ASCII 字母、数字、短横线或下划线的 ID。

重复上传合并规则（XMaoCAT=0）：
- 网站按 `mode + 规范化标题` 识别同一题库；规范化包括 Unicode NFKC、首尾空白去除、连续空白折叠和大小写归一。考试题库与问卷题库即使标题相同也不会混合。
- 网站按 `type + 规范化题干` 识别重复题；同题型、同题干的题只保留已有题或本次导入中首次出现的题。请尽量为同一知识点保持稳定、明确的题干文字，避免仅改变标点或空格造成意外新增。
- 同一个 ZIP 内的同键题库会先合并；之后再次上传同键 ZIP 时会继续合并新增题。网站预检会显示新建/合并题库、新增题目和跳过重复题数量，超过单库 200 题会拒绝整批导入。

覆盖模式（XMaoCAT=1）不要自行合并题目、改写题目 ID 或猜测目标题库；请原样输出要替换的完整题目集合，并在交付报告中明确写出“覆盖模式”。

三、图片引用

题干图片使用：

"images": [
  { "file": "images/question-01.png", "name": "题干图片" }
]

选项、排序项或匹配项图片使用：

"image": { "file": "images/option-a.jpg", "name": "选项 A 图片" }

约束：
- 支持 PNG、JPG/JPEG、GIF、WebP、AVIF、BMP、TIFF，不支持 SVG。
- 单张图片不超过 5 MiB，每题最多 5 张题干图。
- file 必须使用正斜线和相对路径，不能含 ..、盘符、反斜线或绝对路径。
- 不得引用不存在的图片。没有图片时使用空数组 images: []，选项中直接省略 image。
- 同一图片可以被多处重复引用，不要复制成多个文件。

四、所有题目的公共字段

每题至少包含：

{
  "id": "q-001",
  "type": "single",
  "prompt": "题干",
  "images": [],
  "required": true
}

考试题还必须包含：

"score": 5,
"scoringMode": "exact"

考试分值必须大于 0 且不超过 1000，最多两位小数。scoringMode 只能是 exact 或 proportional。问卷题不要写 score、正确答案、参考答案或评分配置。

五、8 种题型

1. 单选 single

"options": [
  { "id": "a", "text": "选项 A" },
  { "id": "b", "text": "选项 B" }
],
"correctOptionIds": ["a"]

考试必须且只能有一个正确选项。问卷省略 correctOptionIds。

2. 多选 multiple

"options": [
  { "id": "a", "text": "选项 A" },
  { "id": "b", "text": "选项 B" },
  { "id": "c", "text": "选项 C" }
],
"correctOptionIds": ["a", "c"],
"scoringMode": "proportional"

考试至少有一个正确选项。所有正确答案 ID 必须存在于 options。

3. 判断 true_false

"correctBoolean": true

考试必须是 true 或 false；问卷省略该字段。

4. 填空 fill_blank

"blanks": [
  { "id": "blank-1", "acceptedAnswers": ["答案", "等价答案"] }
],
"fillGrading": "automatic",
"ignoreCase": true,
"ignoreWhitespace": true

填空数为 1 至 20。考试自动评分时，每个空都必须有至少一个 acceptedAnswers；人工评分时 fillGrading 使用 manual。问卷的 acceptedAnswers 使用空数组，并省略评分相关字段。

5. 简答 short_answer

"referenceAnswer": "管理员审核时使用的参考答案"

考试应提供经过核验的参考答案；问卷省略 referenceAnswer。

6. 论述 essay

"referenceAnswer": "评分要点或参考答案"

考试应提供评分要点；问卷省略 referenceAnswer。

7. 排序 ordering

"orderingItems": [
  { "id": "step-1", "text": "第一步" },
  { "id": "step-2", "text": "第二步" },
  { "id": "step-3", "text": "第三步" }
],
"correctOrder": ["step-1", "step-2", "step-3"],
"scoringMode": "proportional"

correctOrder 必须恰好包含 orderingItems 的全部 ID，不能缺失或重复。问卷省略 correctOrder。

8. 匹配 matching

"matchingLeft": [
  { "id": "left-1", "text": "左侧 1" },
  { "id": "left-2", "text": "左侧 2" }
],
"matchingRight": [
  { "id": "right-1", "text": "右侧 1" },
  { "id": "right-2", "text": "右侧 2" }
],
"correctMatches": {
  "left-1": "right-1",
  "left-2": "right-2"
},
"scoringMode": "proportional"

考试中每个左侧 ID 都必须映射到真实存在的右侧 ID。问卷省略 correctMatches。

六、生成内容时的质量要求

- 如果让我“生成试题”，题目必须符合指定主题和难度，不能用占位文本。
- 正确答案必须逐题核验。存在事实不确定、题意歧义或多个合理答案时，先向我确认，不要强行生成。
- 干扰项应合理但明确错误，避免通过措辞长度或语气泄露答案。
- 不要为了凑题数重复同一知识点或仅替换数字。
- 未要求图片时不要虚构图片路径；要求图片时必须实际生成或使用我提供的位图文件。
- 不要把问卷问题误写成有标准答案的考试题。

七、交付前强制自检

完成前必须实际执行以下检查：
1. 重新打开生成的 ZIP 并列出全部条目。
2. 确认 question-banks.json 位于根目录且能被严格 JSON 解析。
3. 确认 format 和 schemaVersion 完全正确。
4. 统计题库数、每库题数、整包题数和唯一图片数，确认未超限。
5. 检查所有 ID 在各自范围内唯一。
6. 检查所有 correctOptionIds、correctOrder、correctMatches 都指向真实 ID。
7. 检查所有图片引用都存在，所有图片文件都被引用，路径大小写完全一致。
8. 检查考试题的分值和答案完整，问卷题不含答案和分值。
9. 确认 ZIP 内没有绝对路径、..、反斜线、程序、SVG、Base64、服务器 URL 或嵌套 ZIP。
10. 检查 config.txt 与 question-banks.json 同目录、UTF-8、内容只有 XMaoCAT=0 或 XMaoCAT=1；如果是覆盖模式，核对目标题库唯一且新题数满足所有发布内容的抽题数量。

最后请只在自检通过后报告：
- ZIP 文件的绝对路径。
- 题库名称、类型和题数。
- 总题数和唯一图片数。
- 自检结果。
- 明确说明：“仍需在 XCFS 题库管理中执行预检；网站预检通过后才可确认导入。”

如果无法实际创建或验证 ZIP，必须直说尚未完成，不能声称文件可用。
