Skip to content
VERASPEC
Repository
Errata ledgerstable

Appendix A — Implementation notes (45 findings)

These findings are defects of the reference pipeline (services/verd/, scripts/), not of VER 1.0. This branch is a standards-track branch: it patches only the eleven items the decisions brief authorises (D7.0), because the rest need model and vector-database coverage this environment cannot exercise. Everything else is recorded here so that its absence is a decision rather than an oversight.

IDSummaryDisposition
EMB-01Mid-chain model fallback changes the embedding space without a loud warningdocumented — not patched
EMB-02Qdrant collection is guarded by vector size only, never by space_iddocumented — not patched
QD-01No query path filters by space_id; one scalar space_id covers three named vectorsdocumented — not patched
QD-02must_tags is an OR filter despite its name and CLI helpdocumented — not patched
SC-01weights_sha256 folds the filename into the preimage, so it is not the file digestdocumented — not patched; preimage defined by ADR-0007
SC-02Weights digest depends on local HuggingFace cache state, not on the checkpointdocumented — not patched; ADR-0007
SC-03Multi-file weights preimage has no length framing between name and contentdocumented — not patched; ADR-0007
SC-04Descriptor cache re-emits a stale weights_sha256 after weights changedocumented — not patched
SC-05No model revision is pinned, so one space_id can denote different weights over timedocumented — not patched
SC-06Derived space_id for unregistered checkpoints violates the schema patterndocumented — not patched; 1.1 §11.6 relaxes the pattern
FUSE-01Fused space_id is a constant naming siglip2 regardless of the real base spacedocumented — not patched
FUSE-02Fusion runs with no same-space or same-dimension check on its inputsdocumented — not patched; validator-rule VER704 catches the record-level form
FUSE-03Embeddings indexed by role, discarding all but the last of each roledocumented — not patched
FUSE-04Bare next() raises StopIteration on a schema-valid record with an absent spacedocumented — not patched; validator-rule VER501
FUSE-06Fused embeddings are written to records but never upserted into the indexdocumented — not patched
MIG-01Migration scrolls without vectors, then deletes the collection — vectors unrecoverabledocumented — not patched (do not run this script as written)
MIG-02Every vector decoded as little-endian fp16, ignoring the declared dtypedocumented — not patched; validator-rule VER602/VER604
MIG-03Collection dimension taken from whichever record is read firstdocumented — not patched
MIG-04Vectors indexed by pixel_hash while points are keyed by (producer, pixel_hash)documented — not patched; annex E27
CFG-01Tag threshold is a global scalar with no binding to the space it was calibrated ondocumented — not patched
CFG-02No configuration surface for the embedding space; the chain is a module constantdocumented — not patched
CFG-03Scripts hard-code the records directory, ignoring the documented settingdocumented — not patched
EMB-03One space_id denotes device-dependent arithmetic with no declared tolerancedocumented — not patched; annex E12/N5
EMB-04l2_normalize emits a zero vector for a zero row despite normalization: l2documented — not patched
TAG-01Anchor cache is not validated against weights_sha256documented — not patched
TAG-02tag_scores are published without the taxonomy version that produced themdocumented — not patched; drafted-in-1.1 §14 (VER-F)
HASH-01pdq_hash returns pdq/1.0:<hex> and that whole string lands in perceptual[].valuefixed in this branch (D7.0 #1); validator-rule VER801
MOD-01Wire identity hash/dimension fields are unconstrained str/intfixed in this branch (D7.0 #2, #8); drafted-in-1.1 §14.3
REC-01conformance_level hardcoded L1 even when raw capture failedfixed in this branch (D7.0 #4); validator-rule VER302
REC-02availability.c2pa hardcoded absent — a positive claim never checkeddocumented — not patched; validator-rule VER1103
REC-07encode_vector hardcodes fp16 while the embedding declares the space's dtypedocumented — not patched; validator-rule VER602/VER604; annex E24
CPNP-01Decoder's own format string passed through to the closed image.format enumdocumented — not patched
REC-12Records written unvalidated, non-atomically, with locale-default encodingdocumented — not patched
CPNP-11§4's alpha formula is delegated to a third-party fixed-point routinedocumented — not patched; annex E4 pins the arithmetic domain
WIRE-06Remotely triggerable arbitrary file write from an unvalidated firehose pixelSha256fixed in this branch (D7.0 #3); drafted-in-1.1 §14.3
WIRE-20handle_event's totality contract is false — hostile base64 raises out of the handlerdocumented — not patched
WIRE-22Thumbnail cache keyed on pixel_hash alone is shared with foreign producersdocumented — not patched; annex E27
WIRE-23Federated re-embed decodes stranger-supplied bytes with no sandboxdocumented — not patched; annex E12
WIRE-27Publish path never validates the source record against the authoritative schemadocumented — not patched; the profile validator now makes this a one-line check
TEST-COLLECT-ABORTpytest tests/ aborts at collection, taking the thesis test with itfixed in this branch (D7.0 #7, tests/conftest.py)
ENV-CREDS-PARSEcp .env.example .env yields non-empty garbage atproto credentialsdocumented — not patched
TEST-QDRANT-PROBE-IMPORTTIMEqdrant_up() runs at import time with a network timeout per moduledocumented — not patched; the standards tests are network-free by construction
TEST-SETTINGS-SINGLETON-MUTATIONA module-scoped fixture mutates the cached global Settings singletondocumented — not patched
TEST-A2-MODEL-DEPENDENTA2 asserts exact counts over zero-shot model outputdocumented — not patched
SCRIPT-ROLE-AS-KEYScripts index embeddings by role, destroying the dual-embed migration pathdocumented — not patched

Fixed in this branch (the D7.0 set, in full): HASH-01 (bare PDQ digest), MOD-01 (wire-model field constraints plus a regression test), WIRE-06 (hex-guard before path construction), REC-01 and IMPL-CONFORMANCE-SELF-DECLARED (conformance-level honesty), REC-09 and IMPL-RECORD-ID-COLLIDES (record_id preimage), RUFF-CONFIG-UNREACHABLE and PYTEST-TESTPATHS-ESCAPE (root tool config), TEST-COLLECT-ABORT (tests/conftest.py), DOCKER-UNPINNED (pinned image plus healthcheck), THESIS-01, CLAUDEMD-STALE, and DOCTRINE-PIXHASH-HALF-APPLIED (README and CLAUDE.md). MOD-02 is fixed as a documentation change in the same pass: the Hashes docstring in services/verd/src/verd/models.py no longer claims that pixel does not change when metadata changes, and states E1's survival profile instead. No behaviour of that module changes.

TEST-A3-INCOMPLETE is deliberately not patched. A3 is the thesis test; the brief's ruling is that it is not weakened, extended, or touched on a standards branch.

Intentional behavior change riding on the MOD-01 fix: RecordIdentity.phashDct64 is now pattern-constrained (^[a-f0-9]{16}$), so atp.lite_from_full raises a ValidationError for a full record that carries no phash-dct/64 perceptual digest, where it previously published an empty string onto the wire. This is the correct reading of spec §5 (phash-dct/64 is the baseline perceptual digest the reference pipeline always computes) and an empty-string digest on a public firehose was itself a defect — but any downstream producer publishing records without a pHash will now fail closed at publication rather than silently emitting a malformed wire record.