The hash registry extends per ADR-018: bytes 0x03/0x04 (git-object
sha-1/sha-256), preimage-identity hashing over git's loose-object form
as the stored preimage — the digest byte-identical to git's oid, every
kind included. Re-derived from poc-o-git-objects, ADR-stamped, not
merged.
- Registry + Algorithm members after the blob members (total order
rides the registry bytes, 0x02 < 0x03 < 0x04); the derivation arms
(derive's len parameter inert for the family — documented,
test-pinned); the BlobHasher no-preamble arms (finish pinned equal
to derive); from_git_oid_hex's contract pinned blob-family-only.
- keys.rs: the extended physical layout round-trips in total order;
rejects-never-guesses unchanged (0x05 is the unknown-tag example).
- put path: put_git_object(algorithm, len, stream) public — family
members only (KeyInvalid otherwise), known-length only, the
inherited Verification/Io mappings — via put_known_as; the
unknown-length drivers take their derivation from callers.
- fleet threading (ADR-018 §7): every hasher site
derivation-parameterized (put_known_as; fleet_put_pglo_known/
_unknown); put_git_object under a fleet declaration lands through
the joint entry+pin tx / pg-lo consolidation / pin-first staged
forms — pinned by two env-driven tests with exact-count sweep
outcomes (kv joint form byte-exact + dedup row-alone; consolidation
form with LO pages landing and dying exactly).
- git_interop: the family tests green against the real git CLI
(tree/commit/tag byte-exact, dedup, the blob-tag negative, the
sha-256 sibling), the seam guard (blob algorithms reject), the
preimage-length stat assertion; in-module empty-tree known-answer
vectors.
- Conformance: the INV-1/2/6 reference rows gain family legs
(round-trip incl. the staged form, dedup-by-oid, the stored-preimage
stat semantic); backlog pins + README inventory updated.
- kind-decision delta (ADR-018 §2): behavior unchanged, texts honest —
the ops module doc's digest-wire-form paragraph, digest_ingress's
doc, the specs' headers.
- fuzz: the key_encoding generator + shared battery extended to the
four-member registry (family keys, known-answer vectors, the len
inertness pin, 0x05 as the invalid tag); committed corpus
regenerated per policy (0x03 was an invalid-tag seed — 117 rewritten,
67 added); idempotent after landing.
Verification: cargo test (default, 153+54+7+2), cargo test
--all-features server-less (skip-clean) and against the live pglo-poc
harness (336+125+7+3), cargo clippy --all-targets both feature
variants (-D warnings), cargo fmt --check, cargo doc --no-deps, Cargo
test --manifest-path fuzz/shared/Cargo.toml (the corpus-replay gate).
Task: tasks/c1-git-object-family-impl.md (status completed, notes +
summary recorded).