feat: make Conformance the one place a skill verdict is reported (#2263)
Review on #2265 surfaced that the pane reported judgement from three sources in three different places: static findings in Conformance, per-file digest verification beside the manifest table, and the `skills/get` comparison in a region of its own. All three now render in Conformance. That also resolves the first Copilot finding structurally rather than with the cap it suggested. The free-standing `skills/get` region had a content-sized basis competing with an accordion whose basis was 0, so a large fetched entry starved the accordion; moving the verdict inside deletes the competing region entirely, and `FetchResultScroll` goes with it. A red `N digest mismatch(es)` badge joins the errors/warnings badge, kept separate because it is a runtime result — folding it into the error count would make that number change meaning after a click. Conformance auto-collapses for an entry with no findings and auto-opens whenever a verification, a fetch or a new selection gives it something to say. Its badge is yellow for a warnings-only entry; green read as "nothing to see". A dynamic skill states its case once: the prose banner moves into Conformance and the Resources section is dropped entirely, while the finding still counts toward the warning total. The second Copilot finding is fixed as suggested. Frontmatter splitting keyed on the payload arm rather than the MIME, so a markdown blob kept its frontmatter while a multi-document YAML file lost its first document. It now keys on an effective MIME, with `inferMimeFromUri` extracted to `src/utils/` and shared with `ResourcePreviewPanel` instead of duplicated. Also: `Verify` gets its own table column so the buttons align rather than tracking the verdict badge's width; the header actions take `ListChangedIndicator`'s Refresh style and expand/collapse-all uses the shared `ListToggle`; the `skills/get` copy no longer implies the entry defines the rule it breaks; findings move below the JSON they annotate; and section spacing moves into the `skillSections` accordion variant. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R4441JdNLZerCVM7mDDSfB Signed-off-by: cliffhall <cliff@futurescale.com>
This commit is contained in:
parent
98b39f95c5
commit
f5a3ebfc8b
1 changed files with 714 additions and 305 deletions
|
|
@ -14,7 +14,7 @@ export const ThemeAccordion = Accordion.extend({
|
|||
// and a filled background when the section is open (`aria-expanded`).
|
||||
// Pair it with `chevron={<RiArrowRightSLine />}` and per-item `flex` weights.
|
||||
classNames: (_theme, props) => {
|
||||
if (props.variant === "disclosure")
|
||||
if (props.variant === "disclosure" || props.variant === "skillSections")
|
||||
return {
|
||||
root: "disclosure-sections",
|
||||
chevron: "disclosure-chevron",
|
||||
|
|
@ -22,4 +22,27 @@ export const ThemeAccordion = Accordion.extend({
|
|||
};
|
||||
return {};
|
||||
},
|
||||
// `skillSections` is `disclosure` plus a scrolling root (#2263).
|
||||
//
|
||||
// The Skills pane holds sections whose content is a rendered document or a
|
||||
// findings list, not a uniform row list, so they are sized to their content
|
||||
// and never shrink. That removes the mid-content clipping a shrinking panel
|
||||
// produced — the panel really was scrollable, but macOS overlay scrollbars
|
||||
// are invisible until hover, so a Resources table cut off mid-alert read as
|
||||
// broken rather than scrollable. Overflow moves up to the root, so in the
|
||||
// rare case the sections genuinely exceed the pane it is the *stack* that
|
||||
// scrolls, at a section boundary, instead of a panel slicing its own content.
|
||||
styles: (_theme, props) => {
|
||||
if (props.variant === "skillSections") {
|
||||
return {
|
||||
root: { overflowY: "auto", minHeight: 0 },
|
||||
// Every section gets the same breathing room under its header that its
|
||||
// banners get between each other — without it a panel's first item sits
|
||||
// flush against the control and reads as part of the header rather than
|
||||
// as the section's content.
|
||||
content: { paddingTop: "var(--mantine-spacing-sm)" },
|
||||
};
|
||||
}
|
||||
return {};
|
||||
},
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue