OKF Record-Model — Owner feedback round 3 (authoritative direction)
OKF Record-Model — Owner feedback round 3 (authoritative direction)
Section titled “OKF Record-Model — Owner feedback round 3 (authoritative direction)”This is the product owner’s verbatim feedback after reviewing okf-record-model-v2.md and
okf-record-model-v2-CRITIC-CORRECTIONS.md. It RESOLVES several v2 blockers with domain knowledge
and OPENS new design questions. Treat as authoritative direction for the v3 pass.
Read alongside (prior-round context, all in .user-scratch/):
corpus-structure-feedback.md(round-1 feedback + the “Valuable Documentation” historic doc list)okf-record-model-v2.md(the v2 model — being refined)okf-record-model-v2-CRITIC-CORRECTIONS.md(the adversarial critic’s defects)
A. Confirmed / settled (do NOT re-litigate — fold in)
Section titled “A. Confirmed / settled (do NOT re-litigate — fold in)”- 3-layer model (L-raw / L-records / L-concepts) — RATIFIED.
- OKF = knowledge map, not a record store — confirmed.
- content_items elimination (direction) — RATIFIED (“100%, but cheaper than it appears” — owner believes the consumer surface is less scary than the critic implied; see §C).
- op_id = per-run provenance, no identity role — settled.
- Drop Canonical-id-in-bundle (D5 superseded) — settled. BUT see §D record-identity nuance.
- Drop
content_item_workspacesM2M coupling — RATIFIED. - FULL-REPLACE re-ingest — CONFIRMED. Re-ingest runs on a NEW, EMPTY, preview branch; when ready, cut over to replace Phew’s current DB content.
- CITE-EXT (extend citations target kinds) — RATIFIED, subject to §C/§D context.
- RAG: goal is NOT “remove RAG”. Goal = best outcomes from the underlying data — OKF as a map for humans AND AI, plus records to bring applications to life. Reduce lossy RAG where the curated layer makes direct traversal better; keep retrieval where it serves the outcome.
B. Single-tenant + gated-corpus corrections (RESOLVE v2 critic blockers)
Section titled “B. Single-tenant + gated-corpus corrections (RESOLVE v2 critic blockers)”- Each tenant has their OWN DB and pipeline instance.
_KH_PIPELINE_DOC_NSbeing a single global constant is therefore FINE — there is no cross-tenant collision surface. The DB + pipeline were designed multi-tenant, but multi-tenant is NOT a requirement — the concept “crept in” to prior context and should be dropped. → This dissolves the critic’s “no tenant discriminator” half of BLOCKER 1. - The corpus is GATED. Original + ongoing intent: gate the
source_documentsthat get ingested so (i) they are authoritative sources, and (ii) we help businesses prepare/organise their data to create and upload more authoritative sources. The ontology pipeline was “phase 0” of enabling this capability. The v1 cocoindex pipeline monitors a gated corpus for changes, with the corpus structure for source documents arranged in a way WE define (at least initially, for the first client), and Q&A pairs structured in a format WE define. The first client HAS Q&A pairs; future clients may NOT. rel_pathseed is BY-DESIGN forsource_documents(flow.py:1630-1640). The owner AGREES with the critic: re-ingesting the same file mints the same PK → UPSERT-in-place idempotency. The “rel_path is THE offender / switch to content_hash” framing over-generalised a Q&A problem onto documents. → v3 must KEEP rel_path for source_documents and treat the Q&A identity as the real (and separable) problem (see §D).
C. content_items decomposition — owner’s read (re-ground against CURRENT head)
Section titled “C. content_items decomposition — owner’s read (re-ground against CURRENT head)”- Owner can “quite quickly cut through what is/isn’t required for
hybrid_search”. Result-shape change should NOT be dramatic:reference_itemsandq_a_pairswere EXTRACTED fromcontent_items, and much of what is actually valuable oncontent_itemsis likely already onsource_documents. cite_contentshould already be sourcing from the dedicated table.get_content_win_rate“already doesn’t sound logical” — likely already migrated to q&a-pair / form-related tables. VERIFY.- Column homes (owner’s view):
author_name→ source_document;thumbnail_url→ reference_items;platform/source_domainMAY or may not be required (the ontology may help decide, or owner can advise). - content_text_hash / dedup:
content_items.content_text_hashis a GENERATED md5 of NORMALISED text. Couldsource_documentscarry acontent_text_hash(normalised) rather than the plain file hash? MORE IMPORTANTLY: under the new model, where is dedup actually valuable, given that the concept of acontent_itemis already incorrect? (i.e., don’t port dedup blindly — justify it.) - Removing the
content_itemabstraction should SIMPLIFY manual/TS authoring (see0.9-edit-flow-investigationfor the edit use-cases). When AI-tooling creates content — a user with Claude + the Canonical MCP, or a headless agent creating something a user approves — the artifact will clearly be ONE of the three types (source_document/reference_item/q_a_pair), so how it is seeded becomes much clearer. There is no requirement for “~58 cols”.
D. Record-identity (D5-v2) — owner nuance
Section titled “D. Record-identity (D5-v2) — owner nuance”- Concept-identity = OKF path (client-owned bundle). Settled.
- The
.mdfiles represent CONCEPTS (tables, datasets, metrics, playbooks, runbooks…), NOT data records and NOT what we previously called acontent_item. Client raw sources stay with the client (local-fs, Notion, Gmail). The cocoindex pipeline extracts CONCEPTS + related info to create OKF bundles; the source docs remain the authoritative source (provenance, audit trail, historical context, citations), which an enrichment agent populates during a second pass. - “Host the files in a private git repo” (round-1 step 4) referred ONLY to the OKF bundles. The private GitHub repo storing the OKF bundles is CLIENT-OWNED.
- Given client-owned bundle: a “Canonical-owned frontmatter id” would cause issues. A Q&A pair isn’t a concept, it’s a record — so it would presumably never be IN an OKF bundle. (Confirm this understanding.)
- Open: §2.2 record-identity — do we separate
qa:{rel_path}:{idx}to simplify? E.g. Q&A pairs as DB-only (no rel_path-derived identity)?
E. Governance / freshness / lifecycle — promote to its own schema?
Section titled “E. Governance / freshness / lifecycle — promote to its own schema?”- Should the governance / freshness / lifecycle column family be promoted to its OWN schema (table),
ALONG WITH the current
governance_config, and then be applicable tosource_document,reference_item, ANDq_a_pair— or justsource_document? (v2 landed it on source_documents only; owner is asking whether a shared governance facet is better.)
F. Entities stay in the DB (corrects v2 §8 risk 5)
Section titled “F. Entities stay in the DB (corrects v2 §8 risk 5)”- There is NO intention for
entity_relationships/entity_mentionsto “leave the DB”. They would be extracted fromsource_document/reference_item/q_a_pair, just no longer fromcontent_items. The cocoindex docs-to-knowledge-graph example describes this. → v3 must drop the “entities may leave the DB” risk and replace it with “re-parent the extraction source to the 3 typed tables”.
G. cocoindex docs-to-knowledge-graph — central grounding question
Section titled “G. cocoindex docs-to-knowledge-graph — central grounding question”- Reference:
https://cocoindex.io/docs/examples/docs-to-knowledge-graph/(and the self-updating wiki blog:https://cocoindex.io/blogs/multi-codebase-summarization/). - Are we already using (or intending to use) this approach for (a) source-doc extraction (entities/relationships from the 3 typed tables) and/or (b) the approach to CREATING the OKF bundles?
- Owner’s PRODUCER hypothesis: cocoindex docs-to-knowledge-graph adapted to create the .md’s, then a pre-built enrichment agent (Google reference_agent) for the enrichment pass.
- EMB-STORE: is the dedicated embeddings store covered by adopting the docs-to-knowledge-graph approach + related feedback, or still net-new?
H. Ontology pass
Section titled “H. Ontology pass”- We may need a PASS of the ontology to ensure it accurately reflects the three-layer model and moves
away from
content_items. The ontology also contains valuable context for platform-related concepts, INCLUDING where something is core-platform vs client-configurable. - Ontology docs:
docs-site/.../specs/wp6-ontology-harness/,.../themes/phase-0-investigation/phase-b-prerequisite-1-onthology-pipeline(+ its-feedback-investigation). - Ontology as semantic linter (allowed_types / allowed_relations kept in sync; governance for what gets added to the OKF directory AND what gets extracted).
I. content_templates
Section titled “I. content_templates”- We have
content_templates. What is the current purpose? Could these be used as part of how our AI-tooling creates NEW content (source_document/reference_item/q_a_pair)?
J. Forms
Section titled “J. Forms”- Do forms need a MANIFEST? Or could it be: a user provides a form → our cataloguing skill “maps” the form → it gets added to the platform → Q&A pairs are used to COMPLETE the form?
- Relevant:
specs/id-80-forms-path-b/, thecatalogue-form-requirementsskill,form_templates.
K. id-127.4 — purpose reframe (CHANGES Task C)
Section titled “K. id-127.4 — purpose reframe (CHANGES Task C)”- The MAIN purpose of {127.4} is to ensure we have a synthetic corpus for our Platform staging/prod pipeline and DB, for E2E / dogfooding — NOT to validate id-45. So what {127.4} ultimately requires is whatever is needed to ensure robust E2E is in place that lets us CONFIDENTLY PROMOTE CLIENTS to new DB / App / pipeline releases.
- (v2 said “shrink to a tiny fixture” because it mis-read the purpose as id-45 validation. Re-derive what {127.4} actually needs for promotion-confidence E2E / dogfooding.)
the-propel-pathwaysSupabase project = NOT a client; a separate project’s DB on the same org. Ignore it.source_url: drop fromcontent_items(confirmed). Open: drop fromsource_documentstoo? (Check whether SD even has it.) It MUST remain onreference_items.- Full first-client corpus:
Documents/development/local-fs-client(corpus at.../local-fs-client/corpus).