如何基于 vault 的稳定退出码与 --json 输出脚本化 StaffML 题库的构建与校验流程

发布时间:2026/11/4 22:28:39

如何基于 vault 的稳定退出码与 --json 输出脚本化 StaffML 题库的构建与校验流程 如何基于 vault 的稳定退出码与 --json 输出脚本化 StaffML 题库的构建与校验流程【免费下载链接】cs249r_bookMachine Learning Systems项目地址: https://gitcode.com/GitHub_Trending/cs/cs249r_book如果你的目标是把 StaffML 题库question vault的「校验 构建」做成 CI 或本地可重复执行的脚本核心难点是如何区分「题库数据坏了」和「命令敲错了」以及如何拿到结构化的失败明细而不是去解析终端彩色的 rich 输出。cs249r_book 仓库中的interviews/vault-cli包vault命令行正是为此设计的其退出码分类跨版本稳定永不重排编号所有子命令支持--json输出统一信封envelope格式机器可以直接判断成败并提取错误列表。本文基于 interviews/vault-cli/docs/EXIT_CODES.md、interviews/vault-cli/docs/JSON_OUTPUT.md 和 interviews/vault-cli/README.md 的正文内容给出一条「vault check把关 →vault build出 SQLite → JSON 字段做断言」的连续操作路径。适用前提仓库根目录下存在interviews/vault/题库目录本仓库已包含questions/下有数千个 YAML 题面文件Python 版本 ≥ 3.12pyproject.toml 中requires-python 3.12README 说明 CI 固定使用 3.12 以保证 hash 稳定。退出码契约脚本分支的依据vault的退出码定义在 src/vault_cli/exit_codes.pyExitCodeIntEnum文档明确「Codes are STABLE across releases. Never renumber. Scripts pin to these.」即可以安全地按编号写脚本分支退出码符号含义典型原因0SUCCESS命令成功完成正常路径1VALIDATION_FAILURE数据不变量、schema 规则或完整性检查失败YAML 坏文件、内容 hash 不匹配、registry 不一致2USAGE_ERROR命令调用本身非法缺参数、未知 flag、冲突 flag由 Typer/Click 触发3IO_ERROR文件系统或本地 I/O 失败权限不足、磁盘满、预期文件缺失4NETWORK_ERROR对 D1、Cloudflare、LLM API 等外部服务的网络调用失败D1 不可达、超时、上游 5xx5USER_ABORTED交互式确认被拒绝或确认中 Ctrl-C用户在vault rm --hard上输入n64–78—预留sysexits.h标准码仅在上述都不适用时使用文档特别指出几个区分点对脚本的意义1 与 2 的区分决定下一步动作1 表示「数据坏了去 git 里修」2 表示「命令写错了重读 --help」5 单独存在是为了脚本不把「用户取消」误判为 bug。对本文主路径checkbuild纯本地操作而言实际会遇到的就是 0、1、2、3 四类4 主要出现在deploy、ship等联网命令。--json 信封统一的成功/失败结构所有支持--json的子命令共用同一外层信封见 JSON_OUTPUT.md{ ok: true, exit_code: 0, exit_symbol: SUCCESS, command: vault subcommand, cli_version: 0.1.0, data: { }, errors: [], warnings: [] }成功时oktrue、errors[]、data有值失败时okfalse、errors有值、data可能只部分填充即使失败stderr 退出码仍然正确同时 stdout 输出上面的 JSON例如失败时{ok: false, exit_code: 1, exit_symbol: VALIDATION_FAILURE, errors: [...]}。信封的字段契约是版本化的重命名ok/exit_code/data属于 CLI major 版本变更data内新增字段属于 minor 变更。也就是说脚本可以放心依赖这三个顶层字段不必假设data内部结构永不变。errors数组的具体形状按命令而异。以vault check --json为例JSON_OUTPUT.md 给出的是LSP 诊断形状文档示例{ ok: false, exit_code: 1, exit_symbol: VALIDATION_FAILURE, command: vault check, data: { checks_run: 26, checks_passed: 24, checks_failed: 2, tier: structural }, errors: [ { uri: file:///.../questions/cloud/l4/diagnosis/foo-7f3a9c-0001.yaml, severity: 1, code: topic-not-in-taxonomy, source: vault-check, message: topic kv-cachee not found in taxonomy.yaml; did you mean kv-cache-management? } ] }上面的数字26 项检查、2 项失败只是文档示例你的题库实际数值会不同。从当前代码 src/vault_cli/commands/check.py 可以确认errors每项至少包含uriYAML 文件路径、severity1ErrorLSP 规范、code、source、message脚本只需遍历这些字段即可打印可定位的错误清单。vault check --strict --json的data字段则由loaded成功加载的题目数、load_errorsYAML 加载/Schema 错误数、invariant_failures不变量失败数组成全部为 0 时退出码为 0。主路径check 把门、build 出库的脚本两个命令的签名来自 README 与 check.py、build.py 源码vault check [--vault-dir PATH] [--strict] [--tier fast|structural|all] [--json]默认--vault-dir为interviews/vault--strict同时跑 fast structural 两个 tierCI 默认通过时退出 0、任何失败退出 1。--tier slow是 nightly 用的 LSH 场景去重本文主路径不涉及。vault build [--vault-dir PATH] [--output|-o PATH] [--release-id ID] [--json]把vault/questions/下的 YAML 编译为 SQLite默认输出interviews/vault/vault.db默认--release-id为dev。注意一个边界vault build对加载错误是容忍式的——有坏 YAML 时只打 warning、跳过这些记录继续构建只有「一个题目都没加载出来」才以退出码 1 中止。所以校验必须在 build 之前由vault check独立完成不能指望 build 替你把关。下面是把两者串起来的完整脚本#!/usr/bin/env bash # 前提仓库根目录执行依赖 jq自行安装。 set -uo pipefail # ---- 第 1 步校验题库CI 默认 strict 档---- check_out$(vault check --strict --json 21) rc$? case $rc in 0) echo check: PASS ;; 1) echo check: FAIL — 数据问题YAML/schema/registry需在 git 中修复 echo $check_out | jq -r .errors[] | \(.uri)\t\(.code)\t\(.message) ;; 2) echo check: USAGE_ERROR — 命令参数写错重读 vault check --help ;; 3) echo check: IO_ERROR — 检查文件系统权限/磁盘/路径 ;; 4) echo check: NETWORK_ERROR — 外部服务不可达check 本身通常不涉及网络 ;; 5) echo check: USER_ABORTED — 交互确认被取消 ;; *) echo check: 未知退出码 $rc ;; esac if [ $rc -ne 0 ]; then exit $rc fi # ---- 第 2 步构建 vault.db ---- build_out$(vault build --release-id dev --json) rc$? case $rc in 0) echo build: PASS # 断言ok 必须为 true并提取发布戳信息 echo $build_out | jq -e .ok true /dev/null || { echo build: ok 字段异常; exit 1; } echo $build_out | jq -r release_id\(.data.release_id) release_hash\(.data.release_hash) published\(.data.published_count) ;; 1) echo build: VALIDATION_FAILURE如一道题都没加载出来 ;; *) echo build: 退出码 $rc ;; esac exit $rc脚本里每一步的判断依据case分支直接映射 EXIT_CODES.md 的表由于编号稳定这段分支可以跨版本复用。jq -e .ok true是对信封契约而不是具体数值的断言成功时ok必为 true 且errors为空。build成功路径的data字段包含outputvault.db 路径、release_id、release_hash64 位 hex、published_count、policy_versionJSON_OUTPUT.md 的vault build --json条目其中具体数字为文档示例。如果只想在本地前端联调让interviews/staffml的 dev server 直接渲染本地题目可选分支是vault build --local它额外把corpus.json写到interviews/staffml/src/data/corpus.json并镜像到interviews/staffml/public/data/corpus.jsonNext.js 加载器实际取用的静态路径同时镜像题目配图到public/question-visuals/。这是 dev-only 产物生产构建不读这两个文件build.py 的--local-json说明。副作用是会覆盖这些前端目录下的对应文件仅在跑本地开发时执行。验证结果确认构建产物与题库一致主路径跑完check 退出 0、build 输出oktrue后验证方式分两层直接断言vault.db已写到默认路径interviews/vault/vault.db或你--output指定的路径且 build 的 JSON 中data.output指向它。build 命令内部还有一道自校验写入前端 manifestinterviews/staffml/src/data/vault-manifest.json前会核对生成数量与 release policy 过滤后的题量是否一致不一致即以退出码 1 中止——所以oktrue意味着这道校验也已通过。文档声明的发布期校验可选属于发布流水线见 READMEvault verify release-id [--git-ref tag]做「学术可引用性」round-trip其--json输出含expected_hash、computed_hash、leaves_verified、match字段JSON_OUTPUT.md 示例为文档示例值match: false时退出码为 1且errors列出前 10 个不一致的叶子。vault stats --json则输出题库的题量、topic 数、chain 数、按 track/level 的分布适合写进发布记录。限制与排错边界--json-schema命令JSON_OUTPUT.md 提到vault sub --json-schema可打印某命令的完整 JSON schema但当前 src/vault_cli/ 源码中尚未实现该参数全仓库检索不到。文档与代码存在版本差异本文主路径不依赖它如需确认字段以 check.py / build.py 实际输出的 JSON 为准。vault serve与vault api不支持--json前者启动 Datasette、后者是常驻 HTTP 服务不是 JSON 输出命令JSON_OUTPUT.md 明确标注 Not applicable脚本化流程里不要对它们做信封断言。退出码 5 的陷阱如果 CI 中某个带交互确认的命令挂起等待确认后被超时杀掉会得到可区分的 5USER_ABORTED而非一般失败脚本不应把它计入「数据坏了」。本文的 check/build 流程无交互不涉及此项。失败时data可能只部分填充脚本对失败分支只应读errors不要假设data完整。--tier slow不要放进日常 CI它是 nightly 级别的 LSH 场景去重README成本与用途都不同于--strict。本地测试套件开发 vault-cli 本身时才需要pip install -e interviews/vault-cli/[dev]后pytest interviews/vault-cli/tests/README「Run tests」节。下一步脚本化流程跑稳之后仓库文档给出的延伸路径是完整发布流水线vault snapshot ver→vault migrations-emit from to→vault publish ver→vault verify ver均支持--jsonschema 见 JSON_OUTPUT.md以及链式题序chains的构建脚本 scripts/ 五步流程diagnose_chain_coverage.py→build_chains_with_gemini.py→apply_proposed_chains.py→merge_chain_passes.py改动后需重跑vault check --strict与vault build --local-json。这些属于独立任务本文不展开本文的 check→build 脚本即可作为它们的前置质量门复用。【免费下载链接】cs249r_bookMachine Learning Systems项目地址: https://gitcode.com/GitHub_Trending/cs/cs249r_book创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/4 19:10:05

DeepSeek多模态本地部署:绕过DSH Flash陷阱的实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/4 18:26:59

DNA存储技术:Python实现数据到生物分子的编码转换

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 8:06:02

MindSpore深度解析:国产AI框架的编译器级设计与昇腾全栈优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 15:00:49

基于Hadoop+Spark的民宿智能推荐系统设计与实现

1. 项目概述:大数据时代的民宿智能推荐这个毕业设计项目融合了当前大数据领域最主流的技术栈,构建了一个完整的民宿推荐系统解决方案。作为一名长期从事大数据系统开发的工程师,我认为这个选题非常贴合实际应用场景——随着旅游业的复苏和共享…

2026/11/5 14:10:30

ADS122U04IPWR+STM32F427ZI工业级温度测量信号链设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 14:10:30

UART接口24位ADC搭配RS485,解决远距离温度监控难题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 14:10:30

UART接口24位ADC搭配PIC18F46K22的RTD与热电偶测温实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 13:55:19

GD32E10x官方例程入门:从GPIO点灯到串口调试

简介:这份GD32E10x系列官方例程面向嵌入式硬件与单片机开发者,基于ARM Cortex-M3内核,汇集兆易创新GD32E10x的示例代码,适合工业控制、消费电子、通信设备等场景的学习、验证与二次开发。压缩包共935个文件,约11.16MB&…

2026/11/5 13:50:18

基于Django的运维平台实战:资产、发布、巡检、告警一体化

简介:这份资源是一套基于Django框架开发的运维平台源码,面向具备Python基础、希望了解Web运维系统实现思路的开发者与运维人员,可用于学习主机管理、服务监控、日志查看、任务调度、权限控制、资源统计、脚本执行与故障告警等常见运维模块的落…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑