Removes content-authoring scripts, figure and data generators, and their working notes, which are not needed to build, check, or release the books and sites. The vault CLI drops the matching subcommands and doctor check; docs, comments, ignore rules, and the codegen hash are updated to match what remains.
6.2 KiB
vault-cli — StaffML Question Vault CLI
Authoring, building, and releasing the StaffML question vault.
Status: v1.1 — sidecar chain architecture + tier-aware UI in place. Design baseline is
../vault/ARCHITECTURE.md(§3.6 captures the v1.1 deltas).
Install (local editable)
# from the monorepo root
pip install -e staffml/vault-cli/
vault --version
Python ≥3.12 required. CI pins 3.12 exactly for hash stability (see
docs/EXIT_CODES.md and ARCHITECTURE.md §3.5).
Quickstart
Authoring:
vault new --track cloud --level l4 --zone diagnosis \
--topic kv-cache --title "..." # content-addressed ID + registry append + authors
vault edit <id> # $EDITOR; failure injects comment block, re-opens
vault move <id> --to <track>/<level>/<zone> # dirty-tree / chain / applicability refusals
vault rm <id> [--hard] # soft (deprecate) by default; --hard needs typed confirm
vault restore <id> # undo soft-delete
vault renumber <id> # recover from post-rebase dedup-seq collision
vault mark-exemplar <id> # promote to the reviewed exemplar pool
Build + check:
vault build # YAML → vault.db
vault check --strict # fast + structural tiers
vault check --tier slow # nightly LSH scenario-dedup
vault stats [--format-prometheus|--exemplar-coverage]
vault codegen --check # shared-types drift guard
vault doctor [--check <name>] # 8 diagnostic subchecks
Release pipeline:
vault snapshot 1.0.0 # stage to releases/.pending-1.0.0/
vault migrations-emit 0.9.0 1.0.0 # forward + inverse SQL (all 4 tables)
vault export-paper 1.0.0 # SQL → macros.tex + corpus_stats.json
vault tag 1.0.0 # git commit + tag
vault publish 1.0.0 [--resume|--sign] # composed product; atomic POSIX rename
vault verify 1.0.0 [--git-ref v1.0.0] # academic-citability round-trip
vault diff 0.9.0 1.0.0 --classify # cosmetic|semantic|structural
vault deploy 1.0.0 --env staging # D1 migration + snapshot + POP probe
vault rollback <v> --env production [--method snapshot|sql]
vault ship 1.0.0 --env production [--resume] [--skip-legs paper]
vault promote <id> | --all-drafts # drafts → published with provenance bump
Local dev:
vault build --local # YAML → vault.db AND mirror corpus.json into app/public/data/
# so `cd staffml/app && npm run dev` renders local edits
# instead of fetching the production worker. Also writes the
# legacy src/data/corpus.json for build tooling. The StaffML
# predev hook calls this automatically; see
# staffml/app/README.md for the full dev workflow.
vault api --db <path>.db --port 8002 # mirror Worker endpoint surface from local vault.db
vault serve # Datasette over vault.db (127.0.0.1 only)
All commands support --json for machine-readable output per
docs/JSON_OUTPUT.md. Exit codes are stable per
docs/EXIT_CODES.md.
Chains (v1.1+)
Chains are pedagogical progressions through Bloom levels (L1→L6+) within
one (track, topic) bucket. staffml/vault/chains.json is the
authoritative registry; YAMLs no longer carry a chains: field.
Intermediate files live under staffml/vault/_pipeline/, which is
gitignored as a unit; only the durable registry (chains.json) gets
committed.
# Surface (track, topic) buckets that need chains. Writes
# staffml/vault/chain-coverage.json (gitignored — regeneratable).
python3 scripts/diagnose_chain_coverage.py
# Validate a proposed chain file and apply it as chains.json.
python3 scripts/apply_proposed_chains.py \
--proposed ../vault/_pipeline/chains.proposed.json
apply_proposed_chains.py and the validator tolerate a missing tier
field on chain entries (defaulting to "primary"). After any change, run
vault check --strict and vault build --local-json.
Run tests
pip install -e staffml/vault-cli/[dev]
pytest staffml/vault-cli/tests/
Layout
vault-cli/
├── pyproject.toml
├── README.md # this file
├── docs/
│ ├── EXIT_CODES.md # stable exit-code taxonomy
│ ├── JSON_OUTPUT.md # per-command --json schemas
│ └── CUTOVER_QA.md # manual cutover QA checklist
├── src/vault_cli/ # Typer app + library
│ ├── __init__.py
│ ├── compiler.py / loader.py / yaml_io.py
│ ├── legacy_export.py # corpus.json + chain_tiers emitter
│ ├── policy.py # release-policy filter
│ ├── validator.py # fast / structural / slow tiers
│ └── main.py # Typer app entry
├── scripts/ # maintenance tools
│ ├── diagnose_chain_coverage.py # surface uncovered buckets
│ ├── apply_proposed_chains.py # gate proposed chains.json
│ └── ... # chain checks, D1 emit, etc.
└── tests/ # pytest suite
Architecture
See the sibling vault/ directory:
ARCHITECTURE.md— full design doc.REVIEWS.md— adversarial review ledger.TESTING.md— test plan.schema/EVOLUTION.md— schema-version rules.
Contributing
See ../CONTRIBUTING.md.
License
MIT — see project root.