The snapshot and manifest schemas, both example dataspaces, and the shared text renderer now pass the fixture validator and the negative contract tests. JSON, NDJSON, and Markdown frontmatter publish a snapshot only when rights, identity, and references allow it. CONTENT-WP-0001 and CONTENT-WP-0003 are marked finished against those artifacts. CONTENT-WP-0000-T04 stays open. SCOPE.md and the 19:05 scope-against-intent note record the stop. Assistant: grok Assistant-Session: 01a130f1-abfb-7d71-9cd6-a8b75ec7f95a
1.5 KiB
CONTENT-WP-0003 implementation notes
Date: 2026-10-12
The build-time connector is content_explorer/ingest.py, version 0.1.0. It reads a JSON list or {records} object, NDJSON, or a directory of Markdown files with YAML frontmatter. PyYAML parses the frontmatter. The three loaders return the same record shape plus a SHA-256 digest of the bytes they read.
Projection collects live keys first, then resolves relations against that set. A target that is not an accepted key is dangling. Two live records with the same kind and key, or a key that is both tombstoned and live, are identity conflicts. Any dangling reference, identity conflict, unknown kind, or missing relation label leaves snapshot null and published false.
Publication allows only CC0-1.0, CC-BY-4.0, and MIT. CC-BY-4.0 also requires a non-empty attribution. Other licenses, including CC-BY-NC-4.0 and a missing license, are quarantined. The connector does not guess a license.
Each live entity gets one asserted tldr claim whose evidenceRefs is the source id. publish_directory writes snapshot.json, manifest.json, import-report.json, and import-report.md into a temporary directory and renames it into place. A quarantined result raises RuntimeError and does not replace an existing directory.
The manifest is generated from the caller-supplied kind list and relation labels. Predicate wording is not invented. connectors/json_fixture.py still only reads a snapshot that already exists. Remote fetch, pagination, and a third connector are not part of this module.