okf-refactor — convert existing knowledge into an OKF bundle
Goal
Take knowledge that already exists in some other shape — a folder of loose
markdown notes, a wiki, README/docs, a data-catalog export, a database schema, a
JSON/CSV metadata dump — and emit a conformant OKF v0.1 bundle: a directory of
one-concept-per-file markdown docs with YAML frontmatter, navigable index.md
files, and a cross-linked knowledge graph.
This skill depends on the okf skill for the format itself. Read
../okf/reference/SPEC.md (the bundled OKF v0.1 spec) before refactoring — it is
the source of truth. Use ../okf/scripts/validate_okf.py to check the result.
Inputs and outputs
- Input (
<src>): a directory, file set, or export to read FROM. Treat it as
immutable ground truth — never edit the source in place.
- Output (
<out>): the bundle directory to write TO. New, separate from <src>.
Confirm both paths before writing. If <out> is omitted, default to
./bundles/<name> and state the choice.
The refactor pass (run in order; plan before writing)
Survey the source. Inventory every item of knowledge and its natural
boundaries. Identify what each "thing" is (a table, an endpoint, a concept, a
runbook) — that becomes a concept's type. Note relationships between things
(foreign keys, "see also", parent/child) — those become cross-links.
Design the taxonomy = the directory layout. Group concepts into top-level
directories by type or domain (tables/, datasets/, references/,
concepts/, playbooks/…). Start flat; nest only when a level earns it.
Directories are the coarse taxonomy; frontmatter tags carry cross-cutting
facets.
Map each source item to one concept doc. Atomic — one concept per file,
<group>/<slug>.md, kebab-case stable slug. Never pack two concepts into one
file; split multi-topic source notes.
Write frontmatter for each concept. Always set a non-empty type. Derive
title and description (one line — this is what indexes show). Set
resource to the canonical URI when the item has one. Map source metadata to
tags and timestamp. Preserve any source-specific metadata as extra
frontmatter keys (consumers tolerate unknown keys) rather than dropping it.
Write the body. Move structured fields under # Schema (prefer a table),
runnable usage under # Examples, and sources under # Citations. Keep prose
tight; favor structural markdown. Do not invent facts not present in the source.
Wire the graph. Convert every relationship into an inline markdown link
using absolute bundle-relative paths ([orders](/tables/orders.md)).
Ensure no concept is fully orphaned — each should link, or be linked by, at
least one other where a real relationship exists.
Mint reference docs. External authoritative sources cited by many concepts
become standalone references/<slug>.md concept docs (with their own type,
e.g. Reference), linked from # Citations.
Generate indexes. Write an index.md per navigable directory (no
frontmatter; group under # sections; copy each bullet's description from the
linked concept). Write the bundle-root index.md with okf_version: "0.1"
frontmatter linking the top-level groups.
Seed log.md. At the root, record an ## <YYYY-MM-DD> entry noting the
* **Initialization**: Refactored from <source>. Use the real current date.
Validate. Run validate_okf.py <out>. Fix every error. Broken
cross-links are warnings (the spec tolerates them) — resolve the ones you can,
report the rest.
Fidelity rules
- Lossless of meaning. Restructuring may drop redundant words, never facts.
If the source has metadata with no obvious home, keep it as a custom frontmatter
key rather than discarding it.
- No invention. Don't fabricate descriptions, schemas, or links the source
doesn't support. Mark genuine gaps plainly instead of guessing.
- Source stays immutable. All writes land in
<out>; <src> is read-only.
- Idempotent-ish. Re-running against the same source should converge on the
same bundle, not accumulate duplicates.
Report
After the pass, summarize: number of concepts emitted (by type/group), index and
reference docs created, cross-links wired, and any unresolved gaps or broken links
the source left dangling. Then show the bundle tree.
Checklist
1---2name: okf-refactor3description: Refactor existing knowledge into an Open Knowledge Format (OKF) bundle — convert loose notes, docs, READMEs, wikis, or a catalog/metadata export into markdown concept files with YAML frontmatter, index.md, and a knowledge graph. Use when migrating existing knowledge to OKF, normalizing a notes folder, or exporting a catalog to OKF.4---5
6# okf-refactor — convert existing knowledge into an OKF bundle
7
8## Goal
9
10Take knowledge that already exists in some other shape — a folder of loose
11markdown notes, a wiki, README/docs, a data-catalog export, a database schema, a
12JSON/CSV metadata dump — and emit a conformant **OKF v0.1** bundle: a directory of
13one-concept-per-file markdown docs with YAML frontmatter, navigable `index.md`
14files, and a cross-linked knowledge graph.
15
16This skill depends on the **okf** skill for the format itself. Read
17`../okf/reference/SPEC.md` (the bundled OKF v0.1 spec) before refactoring — it is
18the source of truth. Use `../okf/scripts/validate_okf.py` to check the result.
19
20## Inputs and outputs
21
22- **Input** (`<src>`): a directory, file set, or export to read FROM. Treat it as
23 immutable ground truth — never edit the source in place.
24- **Output** (`<out>`): the bundle directory to write TO. New, separate from `<src>`.
25
26Confirm both paths before writing. If `<out>` is omitted, default to
27`./bundles/<name>` and state the choice.
28
29## The refactor pass (run in order; plan before writing)
30
311. **Survey the source.** Inventory every item of knowledge and its natural
32 boundaries. Identify what each "thing" is (a table, an endpoint, a concept, a
33 runbook) — that becomes a concept's `type`. Note relationships between things
34 (foreign keys, "see also", parent/child) — those become cross-links.
35
362. **Design the taxonomy = the directory layout.** Group concepts into top-level
37 directories by `type` or domain (`tables/`, `datasets/`, `references/`,
38 `concepts/`, `playbooks/`…). Start flat; nest only when a level earns it.
39 Directories are the coarse taxonomy; frontmatter `tags` carry cross-cutting
40 facets.
41
423. **Map each source item to one concept doc.** Atomic — one concept per file,
43 `<group>/<slug>.md`, kebab-case stable slug. Never pack two concepts into one
44 file; split multi-topic source notes.
45
464. **Write frontmatter for each concept.** Always set a non-empty `type`. Derive
47 `title` and `description` (one line — this is what indexes show). Set
48 `resource` to the canonical URI when the item has one. Map source metadata to
49 `tags` and `timestamp`. Preserve any source-specific metadata as extra
50 frontmatter keys (consumers tolerate unknown keys) rather than dropping it.
51
525. **Write the body.** Move structured fields under `# Schema` (prefer a table),
53 runnable usage under `# Examples`, and sources under `# Citations`. Keep prose
54 tight; favor structural markdown. Do not invent facts not present in the source.
55
566. **Wire the graph.** Convert every relationship into an inline markdown link
57 using **absolute bundle-relative** paths (`[orders](/tables/orders.md)`).
58 Ensure no concept is fully orphaned — each should link, or be linked by, at
59 least one other where a real relationship exists.
60
617. **Mint reference docs.** External authoritative sources cited by many concepts
62 become standalone `references/<slug>.md` concept docs (with their own `type`,
63 e.g. `Reference`), linked from `# Citations`.
64
658. **Generate indexes.** Write an `index.md` per navigable directory (no
66 frontmatter; group under `#` sections; copy each bullet's description from the
67 linked concept). Write the bundle-root `index.md` with `okf_version: "0.1"`
68 frontmatter linking the top-level groups.
69
709. **Seed `log.md`.** At the root, record an `## <YYYY-MM-DD>` entry noting the
71 `* **Initialization**: Refactored from <source>.` Use the real current date.
72
7310. **Validate.** Run `validate_okf.py <out>`. Fix every error. Broken
74 cross-links are warnings (the spec tolerates them) — resolve the ones you can,
75 report the rest.
76
77## Fidelity rules
78
79- **Lossless of meaning.** Restructuring may drop redundant words, never facts.
80 If the source has metadata with no obvious home, keep it as a custom frontmatter
81 key rather than discarding it.
82- **No invention.** Don't fabricate descriptions, schemas, or links the source
83 doesn't support. Mark genuine gaps plainly instead of guessing.
84- **Source stays immutable.** All writes land in `<out>`; `<src>` is read-only.
85- **Idempotent-ish.** Re-running against the same source should converge on the
86 same bundle, not accumulate duplicates.
87
88## Report
89
90After the pass, summarize: number of concepts emitted (by `type`/group), index and
91reference docs created, cross-links wired, and any unresolved gaps or broken links
92the source left dangling. Then show the bundle tree.
93
94## Checklist
95
96- [ ] Confirmed `<src>` (read-only) and `<out>` (new) paths.
97- [ ] Read ../okf/reference/SPEC.md before refactoring.
98- [ ] One concept per file; multi-topic notes split; stable kebab-case slugs.
99- [ ] Every concept has a non-empty `type`, plus `title` + `description`.
100- [ ] Relationships wired as absolute bundle-relative links; no true orphans.
101- [ ] Root index.md has `okf_version: "0.1"`; per-directory indexes generated.
102- [ ] log.md seeded with the initialization entry (real date).
103- [ ] validate_okf.py run; errors fixed; remaining broken links reported.
104- [ ] No facts invented; source-specific metadata preserved as custom keys.