infospace-bench/infospaces/lefevre-reminiscences-of-a-stock-operator/exports/content-explorer/PROJECTION.md
tegwick fd0dc5fc02
All checks were successful
CI Smoke / host-smoke (push) Successful in 1s
CI Smoke / container-smoke (push) Successful in 2s
feat(presentation): project Lefevre into a content-explorer snapshot
Map the Lefevre infospace to a schema 0.1 snapshot and presentation
manifest. Category kinds, Gutenberg rights, and chunk provenance stay
on the projection. Relation blocks are included only when both ends
match a stored entity title.

Assistant: grok
Assistant-Session: 01a137af-2bea-7940-9a65-acd892344a72
2026-10-14 02:28:33 +02:00

2.7 KiB
Raw Blame History

Content-explorer projection

lefevre-reminiscences-of-a-stock-operator is the worked example of the reusable infospace projection. A later infospace uses the same function, infospace_bench.presentation.project_infospace, and the same snapshot and manifest shape. It does not get a separate screen.

Infospace-bench remains the system of record. Content-explorer only presents artifacts infospace-bench still owns. The files in this directory are a projection, not a second copy of the knowledge.

Rule

One infospace becomes one content-explorer snapshot (schema version 0.1) and one presentation manifest (schema version 0.1).

  • The dataspace id is the infospace slug.
  • Each rights-bearing work becomes one sources[] row. license is the stored rights string, uri is source_url or the identifier, and title is the work title. Chunk digests and original paths stay in that source’s attribution provenance. They are not presentation kinds.
  • Each kind: entity file becomes one entity. kindId is the ## Category value normalized with slugify (evidence_bearing_claim becomes evidence-bearing-claim, and event stays event). The id is urn:ce:<slug>:<kindId>:<key>. The title comes from the heading, without a leading Entity Title: label. tldr and summary come from ## Definition. sourceRefs point at the work-level source. Provenance (workflow_id, stage_id, input_artifact_id, provider) is copied onto properties.
  • Storage kinds source, entity, relation, and generated are not presentation kinds. Generated summaries, entity bundles, and evaluations stay out of the browse set.
  • A relation block is included only when both subject and object match one stored entity title under slugify (the same normalizer already used for entity keys). That is exact normalized equality, not a fuzzy or partial match. The snapshot predicate is ## Relation Type passed through slugify (actor_venue becomes actor-venue). The free-text ## Predicate is not the predicate id. Unresolved or ambiguous ends are quarantined and omitted from the snapshot.
  • The manifest carries kind labels, kindViews columns and facets, featured kinds, navigation, relationLabels forward and inverse wording for every predicate the snapshot actually emits, panels limited to summary, relations, evidence, and claims, and a factPolicy. No content-explorer UI code is required.

snapshot.json and manifest.json beside this note are the Lefevre projection produced by that function. The published-example minimum (at least three kinds and eight entities) is met by this mapping. The raw artifacts/ tree is not a snapshot.