What to build
Replace the dual JSON+Markdown inventory format with a single .md\ file using YAML frontmatter (camelCase, typed fields) + readable Markdown body. This is a clean break — no backward compatibility with legacy JSON states.
Scope
- \Cargo.toml: swap \serde_yaml\ for \yaml_serde 0.10\ via package rename (zero import changes, maintained fork by YAML org)
- \inventory.rs: rewrite \write_inventory_at\ to emit .md\ with frontmatter;
ead_inventory_at\ to parse frontmatter; \inventory_path\ returns .orquestra/skills_inventory.md; remove \inventory_md_path\
- YAML 1.1 protection: #[serde(deserialize_with)]\ on \SkillInventory\ string fields — reject ambiguous YAML booleans (
ame: yes) with an error asking for quotes (no silent coercion)
- No legacy JSON fallback — pre-publication clean break
- \lib.rs: remove \inventory_md_path\ from exports, keep \scan_one_skill\ export
- Update tests: YAML round-trip, YAML 1.1 rejection, write/read cycle
Acceptance criteria
Blocked by
None — can start immediately.
What to build
Replace the dual JSON+Markdown inventory format with a single .md\ file using YAML frontmatter (camelCase, typed fields) + readable Markdown body. This is a clean break — no backward compatibility with legacy JSON states.
Scope
ead_inventory_at\ to parse frontmatter; \inventory_path\ returns .orquestra/skills_inventory.md; remove \inventory_md_path\
ame: yes) with an error asking for quotes (no silent coercion)
Acceptance criteria
ead_inventory_at\ parses the file back correctly
ame: yes\ in YAML frontmatter raises an error (not silently coerced to boolean)
Blocked by
None — can start immediately.