Vijay Janapa Reddi
|
42f4d1ca8b
|
fix(vault): Round-3 correctness + vault ship + authoring contract
Round-3 review (4 reviewers on v2.1) surfaced two code-correctness
Criticals that this commit fixes, plus the contracted-but-missing
`vault ship` coordinator and David's authoring-UX gaps.
Critical fixes (real bugs in landed code):
worker/src/index.ts
- SCHEMA_FINGERPRINT placeholder fail-closed (Chip R3-C1 / Dean R3-NH-3).
Was: placeholder auto-passed and silently disabled the fingerprint
check. Now: placeholder forces degraded mode until operator sets
real fingerprint.
- DDL hash now includes triggers (FTS5-aware).
- release_id change invalidates schema-fingerprint memoization
(Dean R3-NH-4).
- wrangler.toml now pins the real fingerprint.
staffml/public/sw.js
- /manifest polling TTL-throttled to 5min (Chip R3-C2). Was:
per-request fetch nullified the §10.4 cost model.
- API origin persisted to IndexedDB; rehydrated on activate so cold
offline wake-ups serve cached content (Chip R3-H3).
vault-cli/src/vault_cli/release.py
- emit_migrations diffs all 4 tables via PRAGMA-driven column
introspection (Dean R3-NC-1 + R3-NH-2). Was: only questions table,
silently missing chains/chain_questions/tags. Rollback-symmetry
test extended to populate + verify all tables.
vault-cli/src/vault_cli/commands/release.py
- vault verify --git-ref reconstructs release from 'git archive <ref>'
into a tempdir (Dean R3-NC-2). Was: always rebuilt from HEAD, so
verifying a historical release always failed post-authoring.
Academic-citability contract (C-3) now actually holds.
vault-cli/src/vault_cli/ship.py (NEW)
- vault ship composed verb with journaling (Dean R3-NH-1):
* Legs run D1 → Next.js → paper-tag-last (§6.1.1 ordering).
* Journal at releases/<v>/.ship-journal.json records per-leg state;
--resume continues interrupted ships idempotently.
* Pre-paper failure auto-rolls back in reverse order.
* Paper-leg failure pages operator; does NOT auto-rollback earlier
legs (git tag is remote-durable per §6.1.1).
- 4 unit tests cover happy path, pre-paper failure auto-rollback,
paper-leg needs-manual, --resume across interruptions.
vault-cli/src/vault_cli/commands/authoring.py
- vault new appends to id-registry.yaml (David R3-H3 + C-5
enforcement); `git pull --rebase` before allocation.
- authors: auto-populated from git config user.email (David R3-H4 /
M-15). Was: field never set.
- vault edit injects validation-error comment block at top of YAML
and re-opens up to --retries=3 times (David R3-H1). Was: terminal
traceback mid-authoring session.
- vault move refuses dirty tree, chained question, excluded-cell
per applicability matrix (David R3-H2). Was: unchecked git mv.
- vault renumber command (NEW): post-rebase seq-collision recovery.
Bumps seq, renames file, updates id field, appends registry
(David R3-N-2, was spec-only).
- vault mark-exemplar command (NEW): promotes to vault/exemplars/
with provenance + human_reviewed_at gate (David R3-N-9).
vault-cli/src/vault_cli/compiler.py
- FTS5 virtual table + sync triggers added to DDL (B.5). Triggers
keep questions_fts in sync via AFTER INSERT/UPDATE/DELETE.
schema_fingerprint accounts for triggers now.
tests/test_hashing.py
- Nested-dict hash-stability fixture (Soumith R3-F-4). Was: test
only reordered top-level keys + collapsed details to one key.
All 28 tests pass (22 → 28: +4 ship journaling, +1 multi-table
migration symmetry, +1 nested-dict hash stability). release_hash
unchanged at 1b304282... — FTS5 addition doesn't affect content
Merkle per §3.5 input-only design.
|
2026-04-16 13:10:16 -04:00 |
|
Vijay Janapa Reddi
|
8205d8a5f9
|
feat(vault): Phase 2 release pipeline — snapshot, migrations, export-paper, publish, verify
Primitives (§4.2):
vault snapshot <v> — stage to releases/.pending-<v>/.
vault migrations-emit A B — forward + inverse SQL; rollback embeds full
prior-row bodies for UPDATE/DELETE so rollback
works without mechanical inversion (C-1).
vault export-paper <v> — emit macros.tex + corpus_stats.json via SQL
over releases/<v>/vault.db. Replaces
paper/scripts/generate_macros.py; paper + site
agree by construction (H-21 runtime closure).
vault tag <v> — git-commit + git-tag v<version>.
vault verify <v> — reconstruct release_hash from YAML source and
assert equality with release.json (C-3
academic-citability property).
Composed product (§4.3):
vault publish <v> — check --strict + build + snapshot +
migrations-emit. Stages to .pending-<v>/ and
swaps to final via POSIX rename(2) as the
last step (C-7 non-atomic fix). --resume
detects orphaned pending dirs.
latest symlink swap via rename-over-tmp.
First citable release artifact committed: releases/0.9.0/ with
vault.db (25 MB), release.json (release_hash, policy_version,
git_sha, timestamp), d1-migration.sql + d1-rollback.sql stubs.
Gitignore updated: /vault.db at vault/ root excludes the transient
build artifact, but vault.db inside releases/<v>/ IS committed per
§13 (academic integrity — permanently citable).
Tests (22 pass, +3):
- test_snapshot_copies_db_and_writes_release_json
- test_migrations_emit_added_modified_removed: verifies rollback embeds
prior-row body (C-1 correctness)
- test_rollback_symmetry_property: apply-forward-then-rollback returns
dump identical to pre-migration state (closes M-1 property test).
Phase 2 milestone: PASSED. End-to-end:
vault publish 0.9.0 # composed product
vault verify 0.9.0 # from-source round-trip
vault export-paper 0.9.0 # emits macros.tex + stats
→ release_hash 1b304282... reproducible from YAML.
|
2026-04-16 12:40:04 -04:00 |
|