44 lines
2.2 KiB
Markdown
44 lines
2.2 KiB
Markdown
# Evidence / Preprocessing Task 1 Report
|
|
|
|
## Outcome
|
|
|
|
Implemented the additive Evidence source port and canonical corpus records. Existing evidence,
|
|
search, vector, and session runtime code is unchanged.
|
|
|
|
## Contract
|
|
|
|
- `EvidenceSource` is a runtime-checkable protocol with `discover` and `acquire` operations.
|
|
- `SourceObject` and `AcquiredDocument` are frozen, reject extra fields, use independent metadata
|
|
defaults, and restrict metadata to Pydantic `JsonValue` values.
|
|
- `CanonicalDocument`, `CanonicalChunk`, and `CorpusManifest` are frozen and reject extra fields.
|
|
- Provenance includes stable source IDs, canonical URIs, fingerprints, modification time, and
|
|
content hashes.
|
|
- Pipeline versions are recorded on documents, chunks, and manifests. Manifests also carry schema
|
|
version, optional publish ID/vector generation, and paired embedding model/dimension fields.
|
|
- Credential-like metadata keys are rejected recursively. Credentials are not model fields and
|
|
therefore cannot enter serialized canonical artifacts through extras.
|
|
|
|
## TDD evidence
|
|
|
|
The initial focused run failed during collection because `tht.ports.evidence` and `tht.corpus`
|
|
did not exist. After implementation, the focused suite passed.
|
|
|
|
## Verification
|
|
|
|
- Focused models/protocol tests: 13 passed.
|
|
- Harness excluding Docker-backed L0 and the network-dependent wheel packaging test: 444 passed,
|
|
5 deselected.
|
|
- Focused Ruff: passed.
|
|
- Full-repository Ruff remains blocked by 34 pre-existing findings outside the task files.
|
|
- An unrestricted `pytest -q` attempt reached 453 passed and 5 deselected, but reported 47 Docker
|
|
setup errors plus 4 Docker parity failures because the sandbox cannot access the Docker socket;
|
|
the wheel packaging test also failed because its isolated `uv build` needs unavailable network.
|
|
|
|
## Concerns / follow-up
|
|
|
|
- Pydantic's `frozen=True` prevents model field reassignment but does not recursively freeze list
|
|
and dict contents. `default_factory` prevents shared mutable defaults. Later pipeline stages should
|
|
treat these value objects as immutable and construct replacements rather than mutate collections.
|
|
- The adapter and normalization tasks should preserve the credential-free boundary by passing only
|
|
these records beyond acquisition.
|