katana-markdown-engine 0.1.0

Renderer-neutral Markdown document model for the KatanA ecosystem
Documentation
# Tasks: bootstrap-kme-document-model

## 0. 全体見直し

### Definition of Ready

- [x] KMEがMarkdown仕様の中核であり、viewer、editor、exportがKME文書モデルを消費する方針が確認済みである
- [x] KCFは外部描画へ縮小し、既存exportはKDV移譲まで維持する方針が確認済みである
- [x] 親OpenSpec `katana/openspec/changes/establish-kme-markdown-platform` に、KMEを出発点にした実装順序とrepo別DoR/DoDが反映されている
- [x] 周辺repoのOpenSpecに、KME完了前に進めてよい範囲とpending条件が反映されている

### Tasks

- [x] 0.1 KMEの責務を「HTML変換器ではなく文書モデルの正本」として再確認する
- [x] 0.2 KCFを外部描画へ縮小し、既存exportをKDV実装まで維持する条件を明記する
- [x] 0.3 KMEから見たcross-repo実装順序をhandoffに固定する
- [x] 0.4 `katana-ui-widget` が未作成であることをリスクとして明記する
- [x] 0.5 KDV / KLE / KCF / KatanA統合のDoRがKME完了条件を参照しているか確認する

### Definition of Done

- [x] 別セッションがKME OpenSpecだけを読んでも、次に何を実装するか判断できる
- [x] 親計画とKME計画の順序が矛盾していない
- [x] KDV/KLE/KCF/KatanAがKMEより先に独自metadataや独自文書モデルを作らないことが明記されている

## 1. Repository Baseline

### Definition of Ready

- [x] `katana/openspec/changes/establish-kme-markdown-platform` でKMEの責務が定義されている
- [x] P0 `katana-ast-lint` v0.1.0 がcrates.ioで利用可能である

### Tasks

- [x] 1.1 KME crate構成を決める
- [x] 1.2 public DTOと内部parser moduleの境界を決める
- [x] 1.3 KCF/KDV/KatanA/editorへ依存しないことを検証する
- [x] 1.4 `katana-ast-lint = "0.1.0"` をKME品質ゲートへ接続する
- [x] 1.5 `just check``lefthook`、CI、repo-local skillを横展開する
- [x] 1.6 GitHub repositoryを作成し、`master` をdefault branchにする
- [x] 1.7 KML相当のbranch protectionを `release-preflight.yml` push後に再設定する

### Definition of Done

- [x] KMEが単独repositoryとして成立している
- [x] public contractに既存parser ASTが漏れていない
- [x] KME固有の一時AST lintや除外設定を品質ゲートにしていない
- [x] `just check` がPASSする

## 2. Document Model Bootstrap

### Definition of Ready

- [x] 初期fixture contractが決まっている
- [x] canonical fixtureの取り込み方法が決まっている

### Tasks

- [x] 2.1 `sample.md` の主要nodeを軽量fixtureでモデル化する
- [x] 2.2 README badgeをHTML block / badge rowとしてモデル化する
- [x] 2.3 alertとdescription listをモデル化する
- [x] 2.4 tableに行、列、cell、alignmentを持たせる
- [x] 2.5 table/gridのcell単位source rangeを持たせる
- [x] 2.6 emojiを削除せず、Unicodeとshortcode情報を保持する専用nodeを追加する
- [x] 2.7 footnote、image、link、HTML inline、math inlineをKatanA現行仕様として棚卸しする
- [x] 2.8 `katana/assets/fixtures/sample.md``sample_basic.md``katana/README.md` badgeをcanonical fixtureとして同期する

### Definition of Done

- [x] KatanA現行fixtureの主要構造がKME nodeとして固定されている
- [x] node種別、source range、raw snippet、fingerprintがfixture testで固定されている
- [x] KMEのpublic DTOだけでKDV / KLE / KCF / KatanAが参照できる

## 3. Metadata Target Resolution

### Definition of Ready

- [x] metadataをMarkdown本文へ埋め込まない方針が決まっている

### Tasks

- [x] 3.1 `README.md.metadata.json` のschema初期案を定義する
- [x] 3.2 file path、node id、byte range、line-column、fingerprint、前後文脈をtargetに含める
- [x] 3.3 旧本文と新本文からtarget移動を判定する
- [x] 3.4 復元できないtargetをunresolvedとして返す
- [x] 3.5 conflict状態をpublic DTOとして追加する
- [x] 3.6 PDFページング、LLM注釈、AST単位copy/editをmetadata用途としてfixture化する
- [x] 3.7 editor保存時に必要なrequest/result DTOをkleがそのまま使える形へ固定する

### Definition of Done

- [x] 保存時metadata更新に必要なAPIがkleから利用できる
- [x] unresolved targetが削除されず保持される
- [x] conflictが未定義のままdownstreamへ流れない

## 4. Parser Strategy

### Definition of Ready

- [x] KatanA現行fixtureとbadge fixtureの必須node一覧がある

### Tasks

- [x] 4.1 現行の初期parserを維持するか、parser engineを差し替えるかを評価する
- [x] 4.2 候補parserがOS依存emojiを壊さないか確認する
- [x] 4.3 parser内部型をpublic DTOへ出さないadapter境界を固定する
- [x] 4.4 table/grid、HTML badge、alert、description list、footnote、diagram、mathのparse contractをtestで固定する

### Definition of Done

- [x] parser engineを差し替えてもpublic DTOが壊れない
- [x] KatanA現行挙動を再現できないparserを選ばない

## 5. Cross-repo Handoff

### Definition of Ready

- [x] KME public DTOとmetadata APIのv0境界が固定されている

### Tasks

- [x] 5.1 KDVへ渡すviewer/export inputとhit-test metadataを定義する
- [x] 5.2 KLEへ渡すsave-time metadata sync contractを定義する
- [x] 5.3 KUWへ渡すmetadata/unresolved表示DTOを定義する
- [x] 5.4 KCFを外部描画へ縮小し、既存exportをKDV移譲まで維持する条件を定義する
- [x] 5.5 KatanA統合で必要なfixture authorityとdependency version policyを定義する
- [x] 5.6 KatanAがeditor-viewer同期制御を担い、viewerまたはeditorへ命令する条件を文書化する

### Definition of Done

- [x] downstream repoがKME内部parser型へ依存しない
- [x] downstream repoが独自metadata schemaを作らない
- [x] KDV、KCF、KLE、KatanAの責務境界が明確である

## 6. Verification

- [x] 6.1 `just check` を実行する
- [x] 6.2 KME fixture testsを実行する
- [x] 6.3 KAL AST lintのKME adapterで検査できることを確認する
- [x] 6.4 `scripts/openspec validate "bootstrap-kme-document-model" --strict` を実行する
- [x] 6.5 親OpenSpecと周辺repo OpenSpecを再検証する

## 7. v0.1.0分割計画

`bootstrap-kme-document-model` は初期立ち上げの親計画として残す。

未完了項目は、`docs/roadmap.md` と次のOpenSpec changeへ分割して進める。

- `stabilize-release-readiness-gates`
  - 1.7 branch protection
  - release前検査
  - `just check` / `release-check`
- `stabilize-canonical-fixtures`
  - 2.7 footnote、image、link、HTML inline、math inlineの棚卸し
  - 2.8 canonical fixture同期
- `finalize-metadata-resolution-contract`
  - 3.5 conflict状態
  - 3.6 metadata用途fixture
  - 3.7 editor保存時DTO
- `lock-parser-adapter-strategy`
  - 4.1から4.4のparser strategy
- `prepare-manual-harness`
  - 構造確認補助tool
  - `just harness-up`
- `prepare-downstream-handoff-contract`
  - 5.1から5.6のcross-repo handoff
- `publish-v0-1-0-release`
  - 全change完了後の `v0.1.0` GitHub Releaseとcrates.io公開

### Tasks

- [x] 7.1 `docs/roadmap.md``v0.1.0` までの順序とbranch戦略を明記する
- [x] 7.2 未完了項目を小さなOpenSpec changeへ分割する
- [x] 7.3 `v0.1.0` までは全change完了前に公開しない条件を明記する
- [x] 7.4 `release/v0.1.0` PR準備範囲と実リリース後に残す範囲を分離する
- [ ] 7.5 PR merge後にGitHub Release、crates.io公開、公開後verify、branch hygieneを実施する

7.5は実リリース後の作業である。`v0.1.0` の公開境界を広げる精度向上は含めない。