Skip to content

Project-scoped Rovo Dev skills don't appear in the available-skills list #877

Description

@williamthorsen

Problem

sync deploys project-scoped skills to <projectDir>/.rovodev/skills/<slug>/ but generates no <projectDir>/.rovodev/prompts.yml. Rovo Dev builds its available-skills list from prompts.yml, so a project-scoped skill is invocable by name yet never appears in the list. The Claude harness discovers skills by directory presence and is unaffected.

Context

prompts.yml is Rovo Dev's file, not codeassembly's: it may hold hand-authored prompt entries that must be preserved. Generation must therefore be an entry-level merge into the shared file, not a whole-file write.

The home domain already produces ~/.rovodev/prompts.yml (via install and sync --global, both whole-file writers); the repo domain has no equivalent — the gap this ticket closes.

This ticket builds a reusable merge primitive and applies it to the repo domain only. The home domain — converging install and sync --global onto the same primitive, and removing install's prompts.yml role — is #886, which this blocks. Until #886, the project file (managed region) and the home file (whole-file) deliberately differ in shape.

Proposed solution

Generate <projectDir>/.rovodev/prompts.yml during project-scoped Rovo Dev skill deployment as an entry-level merge into the shared file.

codeassembly owns a single sentinel-delimited region within the prompts: sequence; the sentinels (YAML comments) are the ownership marker. The region is a projection of the deployed .rovodev/skills/ (user-invocable skills only), regenerated wholesale each sync, mirroring the sentinel-inliner model used for ambient rulebooks in PROJECT.md. Everything outside the region is preserved verbatim. Generation runs after skill reconciliation and is scoped to the Rovo Dev harness and the repo domain.

Acceptance criteria

Must have

  • sync generates <projectDir>/.rovodev/prompts.yml indexing the project-scoped Rovo Dev skills, so they appear in Rovo Dev's available-skills list.
  • The index includes only user-invocable skills (excludes user-invocable: false).
  • Generation merges into a codeassembly-owned region within the shared file; entries outside the region are preserved verbatim.
  • Re-running sync with no skill changes leaves prompts.yml byte-identical.
  • Generation is scoped to the Rovo Dev harness and the repo domain; install, sync --global, and the Claude path are unchanged.
  • New behavior is covered by tests, with home-directory writes isolated to a temporary home.

Should have

  • When a sync run deploys no Rovo Dev skills, the codeassembly region is removed; if no foreign entries remain, the generated file is removed. A prompts.yml with no codeassembly region (hand-authored) is left untouched.
  • Sync documentation notes the project-local prompts.yml output.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions