diff --git a/COPY.md b/COPY.md index 6029172c..ca0c0348 100644 --- a/COPY.md +++ b/COPY.md @@ -157,6 +157,8 @@ The Skill behaviors panel shows a behavior reading under each SKILL.md match tha Name the model plainly, as a language model. Never call a reading a review, a scan, a safety call, or a false positive. The strings live in `layers/registry/app/components/_SkillBehaviors.vue`. +- If the rules fail: `Skill behaviors are unavailable. Run skilld run to check every file.` + - Each match: `SKILL.md:42 · Quoted example. {reason}`. `behaviorVerdictLabel` in `shared/behavior-readings.ts` owns the five labels: `Instruction`, `Quoted example`, `Prohibition`, `Documentation`, `Unclear`. - Panel note, shown when a match has a reading: `A language model read each match that needs approval in its context. Its reading is no guarantee and changes no approval.` - The skilld CLI approval message adds `(model reading: quoted example. {reason})` to each match, and ends its list with `A language model on skilld.dev wrote each model reading. A reading is no guarantee and changes no approval.` The CLI owns that string, so change it there first. diff --git a/layers/registry/app/components/SkillDetail.vue b/layers/registry/app/components/SkillDetail.vue index 3eb102d3..88b29434 100644 --- a/layers/registry/app/components/SkillDetail.vue +++ b/layers/registry/app/components/SkillDetail.vue @@ -122,7 +122,7 @@ interface SourceFacts { capabilityScopes: ('read' | 'write' | 'exec' | 'net')[] mcpServers: string[] } - behaviors: SkillBehavior[] + behaviors: SkillBehavior[] | null } interface NeighborSkill { @@ -191,6 +191,7 @@ const skillFetch = useFetch( githubUrl: string description: string | null license: string | null + licenseSource: 'skill' | 'repository' | null stars: number forks: number pushedAt: string | null @@ -446,8 +447,7 @@ const { data: skillFiles } = useFetch( total: number } | null>> -// Prefer the live ungh-walked file list when available (catches markdown -// siblings the sync job hasn't registered yet); fall back to data.assets. +// Prefer the stored file inventory endpoint; fall back to detail metadata. const treeAssets = computed(() => { if (data.value?.sourceGone) return [] @@ -1655,7 +1655,7 @@ useHead(computed(() => ({ v-if="licenseFile" type="button" class="skill-chip skill-chip-link" - :title="`License: ${data.license}. Opens ${licenseFile}.`" + :title="`${data.licenseSource === 'repository' ? 'Repository license' : 'License'}: ${data.license}. Opens ${licenseFile}.`" @click="() => { void resolveAndOpen(licenseFile!) }" >