katana-markdown-engine 0.1.0

Renderer-neutral Markdown document model for the KatanA ecosystem
Documentation
# KME Cross-repo Handoff

## 結論

KMEで実現すべきことは、MarkdownをKatanA ecosystem共通の文書モデルとして解釈することである。

KMEはHTML変換器ではない。KMEはviewer、editor、export、KatanA統合が共有する文書構造、source mapping、metadata target解決の正本である。

KMEは同期制御を持たない。editor-viewer同期はKatanAが担い、KatanAがviewerやeditorへ命令する。

## 現時点の判断

全体計画はまだ完全には安定していない。KMEの実装は進められるが、downstream連携は次の順序を守る。

1. P0 `katana-ast-lint`
2. P1 `katana-markdown-engine`
3. P2 `katana-ui-widget`
4. P3 `katana-document-viewer`
5. P3 `katana-language-editor`
6. P3 `katana-canvas-forge`
7. P3 `katana` integration

KCFは外部描画へ責務を縮小する。既存exportはKDV移譲まで維持するが、新規export計画はKDVへ移す。

## Repository別責務

### katana-markdown-engine

KMEは次を所有する。

- Markdown document model
- source range
- line-column
- raw snippet
- stable node id
- text fingerprint
- metadata schema
- target resolution
- parser adapter boundary

KMEは次を所有しない。

- viewer UI
- editor save UI
- export rendering
- Floem widget
- KatanA workspace state
- editor-viewer同期制御

### katana-ast-lint

KALは分離repoの共通AST lint gateを所有する。

KMEは `katana-ast-lint = "0.1.0"` を使う。KME固有の一時lintで代替しない。

### katana-ui-widget

KUWは未作成である。これは全体計画のリスクである。

KUWは次を所有する予定。

- Floem共通UI部品
- metadata badge
- unresolved metadata表示
- toolbar
- tabs
- copy/edit affordance

KUWがない状態でkdpやKatanA本体へUI部品を増やしすぎない。

### katana-document-viewer

KDVはKME public DTOを入力にしてviewer表示、hit-test、HTML/PDF/PNG/JPG exportを担う。

KDVはKME parserを再実装しない。KME内部parser型へ依存しない。

### katana-language-editor

kleは保存直後のmetadata同期を担う。

kleはold source、new source、metadataをKMEへ渡し、resolved / moved / conflicted / unresolvedを受け取る。

kleはmetadataを削除しない。unresolvedは保持する。

### katana-canvas-forge

kcfは現時点ではpendingである。

kcfはMermaid、Draw.io、PlantUML、mathなどの外部描画を担う。

既存exportはKDV実装完了まで維持する。KDVにviewer/exportが入った後、KCF側のHTML/PDF/PNG/JPG exportはKDVへ移譲して削除する。

### katana

KatanA本体はfixture authorityとintegrationを所有する。

KatanAはKME、KDV、KLE、KCF、KUWを統合するが、KME内部parser型へ依存しない。

KatanAはeditor-viewer同期のcoordinatorである。KMEのnode id、source range、line-column、raw snippet、fingerprintを使って対応付けを行い、viewerまたはeditorへ命令する。

## v0.1.0 release PR後の作業

1. `release/v0.1.0` PRを `master` へmergeする。
2. `docs/release-runbook.md` に沿ってGitHub Releaseとcrates.io公開を行う。
3. 公開後verifyを実行する。
4. release後のbranch hygieneを実行する。

downstream handoffの正本は `docs/downstream-handoff.md` とする。

## 検証結果

2026-05-06 に以下を確認済みである。

- `katana-markdown-engine`: `scripts/openspec validate "bootstrap-kme-document-model" --strict`
- `katana`: `scripts/openspec validate "establish-kme-markdown-platform" --strict`
- `katana`: `scripts/openspec validate "adopt-kme-in-katana" --strict`
- `katana`: `scripts/openspec validate "extract-katana-ui-widget" --strict`
- `katana-document-viewer`(現repo名は `katana-document-preview`): `npx -y @fission-ai/openspec validate "adopt-kme-preview-model" --strict`
- `katana-language-editor`: `npx -y @fission-ai/openspec validate "sync-kme-metadata-on-save" --strict`
- `katana-canvas-forge`: `npx -y @fission-ai/openspec validate "v0-1-3-export-css-debug" --strict`
- `katana-ast-lint`: `scripts/openspec validate "shared-ast-lint" --strict`
- `katana-markdown-engine`: `just check`
- `katana-markdown-engine`: `cargo package --locked --allow-dirty`
- `katana-markdown-engine`: `cargo publish --dry-run --locked --allow-dirty`

## やってはいけないこと

- KMEより先にkcfでmetadata schemaを作る。
- KDVやKLEでKME parserを再実装する。
- KME、KDV、KLEへeditor-viewer同期制御を持たせる。
- KME public DTOにthird-party parser ASTを漏らす。
- KUW未作成のままKatanA本体に共通UI部品を増やす。
- OpenSpecが薄いまま別セッションへ渡す。