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
Should have
Problem
syncdeploys project-scoped skills to<projectDir>/.rovodev/skills/<slug>/but generates no<projectDir>/.rovodev/prompts.yml. Rovo Dev builds its available-skills list fromprompts.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.ymlis 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(viainstallandsync --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
installandsync --globalonto the same primitive, and removinginstall'sprompts.ymlrole — 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.ymlduring 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 thesentinel-inlinermodel used for ambient rulebooks inPROJECT.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
syncgenerates<projectDir>/.rovodev/prompts.ymlindexing the project-scoped Rovo Dev skills, so they appear in Rovo Dev's available-skills list.user-invocable: false).syncwith no skill changes leavesprompts.ymlbyte-identical.install,sync --global, and the Claude path are unchanged.Should have
syncrun deploys no Rovo Dev skills, the codeassembly region is removed; if no foreign entries remain, the generated file is removed. Aprompts.ymlwith no codeassembly region (hand-authored) is left untouched.prompts.ymloutput.