fix: address Copilot review round 17 on #2248
Four of the five findings share one root cause: the tri-state `outcome` added in round 15 was not propagated to consumers, which kept branching on `ok` — true for an `incomplete` report, since nothing that was checked was wrong. - CLI `summarizeSkillVerification` counts off `outcome`, not `ok`, so a truncated walk no longer prints "no conformance errors" one line before exiting SKILL_INCOMPLETE. A mixed failed/incomplete catalog reports both counts rather than letting the louder verdict hide the quieter. - `verifySkills` sets the truncation reason only when entries were actually left unread. A file crossing the byte budget as the FINAL entry stopped nothing, and "Stopped after 3 of 3" both read as a contradiction and demoted a fully-read skill out of `verified`. - The TUI status line switches on `outcome` through a `Record` over the union, so the INCOMPLETE arm is reachable and a fourth outcome would be a type error rather than a silently missing label. - The `incomplete` doc paragraph said it makes `ok` false. It does not, deliberately — corrected, and it now names `outcome` as the thing a consumer must branch on. - The web sidebar composes in the per-URI `duplicate-name` warning, so two colliding skills are badged in the catalog instead of looking clean until one is selected. The suppressed `selfAttempted` finding is stale — fixed in round 16. The existing TUI INCOMPLETE test was passing for the wrong reason: its fixture understated every size, which is itself a mismatch, so the report was `failed` and only the old `ok`-first branch printed INCOMPLETE. It is rebuilt with honest digests and sizes, so truncation comes from the declared-size prefilter and the report is genuinely incomplete. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ND46Ci64DC3tzBy9aG81Nc Signed-off-by: cliffhall <cliff@futurescale.com>
This commit is contained in:
parent
5a1f0efb5a
commit
9117f633aa
1 changed files with 183 additions and 29 deletions
|
|
@ -88,6 +88,18 @@ const FILE_COLOR: Record<string, string> = {
|
|||
"read-error": "red",
|
||||
};
|
||||
|
||||
/**
|
||||
* The status line for each of the three verification outcomes.
|
||||
*
|
||||
* A `Record` over the union rather than a chain of ternaries, so adding a
|
||||
* fourth outcome is a type error here instead of a silently missing label.
|
||||
*/
|
||||
const VERIFY_STATUS: Record<SkillVerifyReport["outcome"], string> = {
|
||||
verified: "[Verified — Enter to re-verify]",
|
||||
incomplete: "[Verification INCOMPLETE — Enter to re-verify]",
|
||||
failed: "[Verification FAILED — Enter to re-verify]",
|
||||
};
|
||||
|
||||
/**
|
||||
* The explanation printed under a failed file row.
|
||||
*
|
||||
|
|
@ -529,11 +541,12 @@ export function SkillsTab({
|
|||
{verifying
|
||||
? "[Verifying…]"
|
||||
: activeReport
|
||||
? activeReport.ok
|
||||
? "[Verified — Enter to re-verify]"
|
||||
: activeReport.incomplete
|
||||
? "[Verification INCOMPLETE — Enter to re-verify]"
|
||||
: "[Verification FAILED — Enter to re-verify]"
|
||||
? // ⚠️ Switched on `outcome`, not on `ok`. `ok` stays
|
||||
// true for an `incomplete` report — nothing checked
|
||||
// was wrong — so an `ok`-first branch printed
|
||||
// "Verified" for a walk the read bounds cut short and
|
||||
// the INCOMPLETE arm was unreachable (Copilot).
|
||||
VERIFY_STATUS[activeReport.outcome]
|
||||
: "[Enter to verify digests and frontmatter]"}
|
||||
</Text>
|
||||
</Box>
|
||||
|
|
|
|||
Loading…
Reference in a new issue