From 93a37f9aa54b6ad66d30862c26d8427789e083db Mon Sep 17 00:00:00 2001 From: vitya Date: Thu, 21 May 2026 21:36:28 +0300 Subject: [PATCH] feat(setup-wiki, using-wiki): add contradictions/ and open-questions/ as canonical page types MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extends Karpathy LLM Wiki canon with two new artifact types alongside existing entities/concepts/packages/sources. Inspired by community discussion that highlighted explicit tracking of surfaced tensions and unanswered questions as missing aggregation points in the canonical layout — they currently get scattered into concepts/ or lost in log.md. Scope is schema-level only — no new ingest behaviour prescribed. Policy on when to escalate an inline `> **Противоречие:**` flag into a contradictions/.md page (and the analogous flow for open-questions) stays the user's call. setup-wiki [v1.0.0 → v1.1.0, MINOR — additive page types]: - Discovery (Phase 1) now requires 6 content dirs for `noop` mode - Phase 2 plan blocks list new dirs in greenfield + migrate - CLAUDE.md schema template gains two page-type entries with status enums (contradictions: open|resolved|accepted-divergence; open-questions: open|answered|obsolete) - index.md template gains two empty sections - Phase 4a .gitkeep list, Phase 4b mkdir + touch, Phase 5 verify count (four → six dirs), Phase 6 report count all updated - README.md layout tree + content-dirs sentence using-wiki [v1.0.0 → v1.1.0, MINOR — additive type values]: - Prerequisites: four → six content directories - Page frontmatter type enum: + contradiction | open-question - Per-type frontmatter extensions documented (status + affects/touches) - File naming patterns: + contradictions/.md, open-questions/.md - index.md sections-by-type list updated - README.md mirrors SKILL.md changes dist/: setup-wiki.skill + using-wiki.skill rebuilt. project-bootstrap inline reference block intentionally untouched — it's labelled "Reference (for context only — setup-wiki is the source of truth)" and drift-tolerant by design. Co-Authored-By: Claude Opus 4.7 (1M context) --- dist/setup-wiki.skill | Bin 6397 -> 6713 bytes dist/using-wiki.skill | Bin 6684 -> 6923 bytes skills/setup-wiki/README.md | 8 +++++--- skills/setup-wiki/SKILL.md | 32 +++++++++++++++++++++----------- skills/using-wiki/README.md | 7 +++++-- skills/using-wiki/SKILL.md | 16 ++++++++++------ 6 files changed, 41 insertions(+), 22 deletions(-) diff --git a/dist/setup-wiki.skill b/dist/setup-wiki.skill index 603f17e4b80fcf706603dd1be00e91dc991a65b7..fbe00ca454c361aa784263f51bf94256d62290e1 100644 GIT binary patch delta 6628 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 W?NsEUVgB_9;-3Qka|7}J)%_RaDWP`& diff --git a/skills/setup-wiki/README.md b/skills/setup-wiki/README.md index 7d2cedb..5ba64d8 100644 --- a/skills/setup-wiki/README.md +++ b/skills/setup-wiki/README.md @@ -25,7 +25,7 @@ Canonical layout reference: | Mode | Trigger | Action | |---|---|---| | **greenfield** | No `.wiki/` exists | Create the canonical layout from scratch. | -| **noop** | `.wiki/` already canon (all five canon files + four content dirs) | Report and exit — no writes. | +| **noop** | `.wiki/` already canon (all five canon files + six content dirs) | Report and exit — no writes. | | **migrate** | `.wiki/` exists with non-canon files (`SUMMARY.md`, `WORKFLOW.md`, `source/`) or missing canon files | Move legacy files (e.g. `source/*.md` → `concepts/*.md` via `git mv`), create missing canon files, drop a timestamped `.backup-*/` next to it. | Migration **does not auto-rewrite** existing concept content — it only moves @@ -45,10 +45,12 @@ job. ├── entities/ ← entity pages (people, services, modules) ├── concepts/ ← design decisions, recurring ideas ├── packages/ ← code packages -└── sources/ ← one summary per ingested source +├── sources/ ← one summary per ingested source +├── contradictions/ ← surfaced tensions worth tracking long-term +└── open-questions/ ← unresolved questions raised during ingest/query ``` -The four content directories each get a `.gitkeep` so git tracks them. +The six content directories each get a `.gitkeep` so git tracks them. ## Hard rules diff --git a/skills/setup-wiki/SKILL.md b/skills/setup-wiki/SKILL.md index bd343a2..f93f77c 100644 --- a/skills/setup-wiki/SKILL.md +++ b/skills/setup-wiki/SKILL.md @@ -1,7 +1,7 @@ --- name: setup-wiki -version: 1.0.0 -description: Creates or migrates a project's `.wiki/` to the canonical Karpathy LLM Wiki layout — `CLAUDE.md` schema, `index.md`, `log.md`, `overview.md`, `raw/README.md`, plus empty `entities/`, `concepts/`, `packages/`, `sources/`. Use when the user says "set up wiki", "init wiki", "настрой вики", "инициализируй вики", "create wiki", "migrate wiki to canon", "wiki сломана", "wiki layout broken", or whenever `using-wiki` detects a missing or non-canonical `.wiki/`. Two modes — greenfield (no wiki) and migrate (existing non-canonical layout). Confirmation gate before writing. Cross-platform. +version: 1.1.0 +description: Creates or migrates a project's `.wiki/` to the canonical Karpathy LLM Wiki layout — `CLAUDE.md` schema, `index.md`, `log.md`, `overview.md`, `raw/README.md`, plus empty `entities/`, `concepts/`, `packages/`, `sources/`, `contradictions/`, `open-questions/`. Use when the user says "set up wiki", "init wiki", "настрой вики", "инициализируй вики", "create wiki", "migrate wiki to canon", "wiki сломана", "wiki layout broken", or whenever `using-wiki` detects a missing or non-canonical `.wiki/`. Two modes — greenfield (no wiki) and migrate (existing non-canonical layout). Confirmation gate before writing. Cross-platform. --- # setup-wiki @@ -35,7 +35,7 @@ The procedure mutates the project's `.wiki/`. **Pause for explicit confirmation Inspect `.wiki/`: - **No `.wiki/`** → mode = `greenfield`. -- **`.wiki/` exists AND has all of:** `CLAUDE.md`, `index.md`, `log.md`, `overview.md`, `raw/README.md`, plus directories `entities/`, `concepts/`, `packages/`, `sources/` → mode = `noop` (already canon; report and exit). +- **`.wiki/` exists AND has all of:** `CLAUDE.md`, `index.md`, `log.md`, `overview.md`, `raw/README.md`, plus directories `entities/`, `concepts/`, `packages/`, `sources/`, `contradictions/`, `open-questions/` → mode = `noop` (already canon; report and exit). - **`.wiki/` exists but missing some canon files OR has non-canon files** (`SUMMARY.md`, `WORKFLOW.md`, `source/`) → mode = `migrate`. Report findings to the user as a short summary: @@ -56,7 +56,7 @@ Show the plan in one block: Will create .wiki/ with canonical layout: CLAUDE.md (schema), index.md, log.md, overview.md raw/README.md - entities/, concepts/, packages/, sources/ (with .gitkeep) + entities/, concepts/, packages/, sources/, contradictions/, open-questions/ (with .gitkeep) ``` **Migrate:** @@ -65,7 +65,7 @@ Will rename: source/*.md → concepts/*.md (via git mv when in a git repo, plain mv otherwise) Will create: CLAUDE.md, index.md, log.md, overview.md, raw/README.md - entities/, packages/, sources/ (with .gitkeep) + entities/, packages/, sources/, contradictions/, open-questions/ (with .gitkeep) Will delete: SUMMARY.md, WORKFLOW.md, raw/.gitkeep, source/ (after moves) Will not touch existing files in raw/ — they're immutable sources. @@ -101,6 +101,8 @@ The `using-wiki` skill enforces the workflow and file formats. This file overrid - `concepts/` — recurring ideas, design decisions, gotchas. - `packages/` — code packages this project produces or consumes. - `sources/` — one summary page per ingested external doc; carries `ingested:` and `raw_path:`. +- `contradictions/` — surfaced tensions between sources or pages worth tracking long-term; each page cross-links the affected entities/concepts/sources and carries a status (`open` / `resolved` / `accepted-divergence`). +- `open-questions/` — unresolved questions raised during ingest or query that the wiki cannot answer yet; each page cross-links the pages/sources that touch the question and carries a status (`open` / `answered` / `obsolete`). - `overview.md` — single project-wide overview. ## Naming @@ -137,6 +139,14 @@ Catalog of all wiki pages. One line per page, organized by type. Updated on ever ## Sources + + +## Contradictions + + + +## Open Questions + ``` @@ -190,7 +200,7 @@ For large or path-sensitive sources outside the repo, register them here: \`\`\` ``` -**Empty `.gitkeep`** in each of `entities/`, `concepts/`, `packages/`, `sources/` so git tracks the dirs. +**Empty `.gitkeep`** in each of `entities/`, `concepts/`, `packages/`, `sources/`, `contradictions/`, `open-questions/` so git tracks the dirs. ### Phase 4b — Migrate @@ -198,7 +208,7 @@ If migrate mode: combine creation (for missing canon files) with file moves (for ```bash # 1. Create missing directories -mkdir -p .wiki/concepts .wiki/entities .wiki/packages .wiki/sources +mkdir -p .wiki/concepts .wiki/entities .wiki/packages .wiki/sources .wiki/contradictions .wiki/open-questions # 2. Move source/* → concepts/* (use git mv if in a git repo) if git rev-parse --git-dir >/dev/null 2>&1; then @@ -215,8 +225,8 @@ rmdir .wiki/source 2>/dev/null # 3. Create missing canon files (CLAUDE.md, index.md, log.md, overview.md, raw/README.md) # using the templates from Phase 4a, but skip files that already exist. -# 4. Add .gitkeep to entities/, packages/, sources/ -touch .wiki/entities/.gitkeep .wiki/packages/.gitkeep .wiki/sources/.gitkeep +# 4. Add .gitkeep to entities/, packages/, sources/, contradictions/, open-questions/ +touch .wiki/entities/.gitkeep .wiki/packages/.gitkeep .wiki/sources/.gitkeep .wiki/contradictions/.gitkeep .wiki/open-questions/.gitkeep ``` For migrated `concepts/*.md` pages, **do not rewrite their content** — just prepend a minimal frontmatter if missing: @@ -242,7 +252,7 @@ Append a line to `log.md`: After writes, confirm: - All canon files exist: `CLAUDE.md`, `index.md`, `log.md`, `overview.md`, `raw/README.md`. -- Four content directories exist (with at least `.gitkeep` or content). +- Six content directories exist (`entities/`, `concepts/`, `packages/`, `sources/`, `contradictions/`, `open-questions/`) — with at least `.gitkeep` or content. - No leftover non-canon files (`SUMMARY.md`, `WORKFLOW.md`, `source/`). - For migrate mode: every migrated page has frontmatter with `type: concept`. @@ -255,7 +265,7 @@ Print final state: ``` ✅ Wiki ready at .wiki/. Mode: greenfield | migrate - Files: 5 canon + 4 dirs + N migrated concept pages + Files: 5 canon + 6 dirs + N migrated concept pages Backup (if migrate): .wiki/.backup-/ Next steps for the user: diff --git a/skills/using-wiki/README.md b/skills/using-wiki/README.md index f859dd2..09d9170 100644 --- a/skills/using-wiki/README.md +++ b/skills/using-wiki/README.md @@ -86,7 +86,7 @@ line to `log.md` with the findings. ```yaml --- title: Человекочитаемое имя -type: entity | concept | package | source | overview +type: entity | concept | package | source | contradiction | open-question | overview tags: [short, tokens] sources: [../sources/foo.md, ../sources/bar.md] updated: 2026-04-21 @@ -94,13 +94,16 @@ updated: 2026-04-21 ``` Source pages also carry `ingested: YYYY-MM-DD` and `raw_path: ../raw/...`. +Contradiction pages also carry `status: open | resolved | accepted-divergence` and `affects: [../entities/x.md, ../concepts/y.md]`. +Open-question pages also carry `status: open | answered | obsolete` and `touches: [../entities/x.md, ../sources/z.md]`. ### File naming - `kebab-case.md`, **Latin only**. Transliterate Cyrillic / non-Latin in filenames; keep the original title in H1 + frontmatter. - `entities/.md`, `concepts/.md`, `packages/.md` - (no `@org/` prefix), `sources/.md`. + (no `@org/` prefix), `sources/.md`, `contradictions/.md`, + `open-questions/.md`. ### `log.md` — append-only, grep-parseable diff --git a/skills/using-wiki/SKILL.md b/skills/using-wiki/SKILL.md index cd986db..64d1f26 100644 --- a/skills/using-wiki/SKILL.md +++ b/skills/using-wiki/SKILL.md @@ -1,6 +1,6 @@ --- name: using-wiki -version: 1.0.0 +version: 1.1.0 description: Policy skill for working with an existing `.wiki/` (Karpathy LLM Wiki pattern). Use when the user asks to ingest a document, answer from the wiki, lint/health-check it, or says "use project wiki", "обнови вики", "проверь вики", "запроси вики", "заингесть", "query the wiki". Also use when modifying any file under `.wiki/` — the workflow and formats below are mandatory, and project-specific conventions live in `.wiki/CLAUDE.md`. If `.wiki/` is missing or non-canonical, delegate to `setup-wiki` first (it has its own confirmation gate). Renamed from `wiki-maintainer` at v1.0.0. --- @@ -10,9 +10,9 @@ description: Policy skill for working with an existing `.wiki/` (Karpathy LLM Wi ## Prerequisites -This skill assumes the project has a canonical `.wiki/` layout: `CLAUDE.md` (schema), `index.md` (catalog), `log.md` (op log), `overview.md`, `raw/README.md`, and the four content directories `entities/`, `concepts/`, `packages/`, `sources/`. +This skill assumes the project has a canonical `.wiki/` layout: `CLAUDE.md` (schema), `index.md` (catalog), `log.md` (op log), `overview.md`, `raw/README.md`, and the six content directories `entities/`, `concepts/`, `packages/`, `sources/`, `contradictions/`, `open-questions/`. -If `.wiki/` is **missing**, or the layout is **non-canonical** (e.g. `SUMMARY.md` instead of `index.md`, or `source/` instead of `concepts/`/`sources/`) — invoke the `setup-wiki` skill first. It detects the situation (greenfield vs migrate) and creates or migrates the structure with its own confirmation gate. Only after `setup-wiki` finishes should this skill proceed with the operations below. +If `.wiki/` is **missing**, or the layout is **non-canonical** (e.g. `SUMMARY.md` instead of `index.md`, or `source/` instead of `concepts/`/`sources/`, or `contradictions/`/`open-questions/` directories are absent) — invoke the `setup-wiki` skill first. It detects the situation (greenfield vs migrate) and creates or migrates the structure with its own confirmation gate. Only after `setup-wiki` finishes should this skill proceed with the operations below. ## Three layers (do not blur) @@ -70,7 +70,7 @@ Append one line to `log.md` summarizing the findings. ```yaml --- title: Человекочитаемое имя -type: entity | concept | package | source | overview +type: entity | concept | package | source | contradiction | open-question | overview tags: [short, tokens] sources: [../sources/foo.md, ../sources/bar.md] updated: 2026-04-21 @@ -79,10 +79,14 @@ updated: 2026-04-21 Source pages also carry `ingested: YYYY-MM-DD` and `raw_path: ../raw/...`. +Contradiction pages also carry `status: open | resolved | accepted-divergence` and `affects: [../entities/x.md, ../concepts/y.md]`. + +Open-question pages also carry `status: open | answered | obsolete` and `touches: [../entities/x.md, ../sources/z.md]`. + ### File naming - `kebab-case.md`, **Latin only**. Transliterate Cyrillic / other scripts in filenames (`план переписывания` → `ozon-client-rewrite.md`). Keep the original title in the H1 and frontmatter. -- `entities/.md`, `concepts/.md`, `packages/.md` (no `@org/` prefix), `sources/.md`. +- `entities/.md`, `concepts/.md`, `packages/.md` (no `@org/` prefix), `sources/.md`, `contradictions/.md`, `open-questions/.md`. ### `log.md` — append-only, grep-parseable @@ -98,7 +102,7 @@ Parseable with: `grep "^## \[" .wiki/log.md | tail -20`. ### `index.md` -Catalog, not narrative. One line per page: `- [Title](path) — hook.` Sections by type (entities / concepts / packages / sources). Update on every ingest. +Catalog, not narrative. One line per page: `- [Title](path) — hook.` Sections by type (entities / concepts / packages / sources / contradictions / open-questions). Update on every ingest. ### Cross-references