You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
After #2521 narrowed the AgentsPanel type union to drop "skills" and stripped the top-level agentSkills* state fields, additional skills-related residue remains in the UI: a nested skills* state block on the host interface, a consumed skillsLabel helper, and a render site that displays the label. The skills subsystem is fully gutted per CLAUDE.md § Fork Context, and none of this residue is behind any user-reachable control after #2520 removed the Tools tab.
Evidence
Residual state fields (host interface)
ui/src/ui/app-view-state.ts carries four skills* fields inside a nested block:
Declared on the interface but not observed as @state fields on RemoteClawApp or assigned anywhere — matches the pattern that #2521 cleaned up for agentSkills*.
Why this is safe
Read-only orphans with no writer. Removing unread fields is a type-narrowing operation — tsgo will surface any missed consumer. Smoke tests (app.smoke.test.ts, app.computed-style.test.ts) assert required host-interface fields; narrowing the interface removes those assertions automatically.
Changes
Host interface (ui/src/ui/app-view-state.ts:185-190): delete the four skills* fields from the nested block. Re-verify that no @state decorator on RemoteClawApp declares any of them (expected: zero).
Helper (ui/src/ui/views/agents-utils.ts:142): remove skillsLabel from the context type; at line 174, remove the computation. If skillFilter / skillCount inputs become unused after this, remove those too (likely orphaned upstream).
Render site (ui/src/ui/views/agents-panels-status-files.ts:44): delete the <div>${context.skillsLabel}</div> render line. If the surrounding block becomes empty, simplify.
Handlers: the gut(ui): strip residual skills state + types + i18n #2521 subprocess mentioned "6 handlers" — rg 'onSkills|loadSkills|skillsStatus' ui/src/ui/ currently returns zero. If implementation discovers any hidden handlers (e.g., via different naming like handleSkill*), remove them; if none exist, note "zero additional handlers found" in the PR.
AC
grep -rn 'skillsLoading\|skillsError\|skillsFilter\|skillsBusyKey' ui/src/ returns zero hits
grep -rn 'skillsLabel' ui/src/ returns zero hits
No @state decorators on RemoteClawApp reference skills*
pnpm check green (format + tsgo + oxlint + CSS class drift audit)
pnpm test green
pnpm test:ui:smoke green
Context
Follow-up to #2521 (gut(ui): strip residual skills state + types + i18n, merged as #2536 / commit 80d311d25a). The #2521 subprocess flagged "adjacent dead weight (6 handlers + 6 skills* state fields + ~13 CSS rules) — candidates for a successor gut wave" as out-of-scope.
Surfaced during batch 20260424-6b79. The counts in #2521's subprocess report were as-of-pre-merge; current-main re-verification (above) found 4 state fields + 3 consumer hits + 0 handlers + 0 CSS rules — scope is narrower than claimed but still real.
Summary
After #2521 narrowed the
AgentsPaneltype union to drop"skills"and stripped the top-levelagentSkills*state fields, additional skills-related residue remains in the UI: a nestedskills*state block on the host interface, a consumedskillsLabelhelper, and a render site that displays the label. The skills subsystem is fully gutted per CLAUDE.md § Fork Context, and none of this residue is behind any user-reachable control after #2520 removed the Tools tab.Evidence
Residual state fields (host interface)
ui/src/ui/app-view-state.tscarries fourskills*fields inside a nested block:These are distinct from the top-level
agentSkills*fields that #2521 already removed.Consumer chain
The
skillsLabelis computed inagents-utils.tsand rendered inagents-panels-status-files.ts:44. With no skills subsystem to label, both are dead.Reader check
Declared on the interface but not observed as
@statefields onRemoteClawAppor assigned anywhere — matches the pattern that #2521 cleaned up foragentSkills*.Why this is safe
Read-only orphans with no writer. Removing unread fields is a type-narrowing operation —
tsgowill surface any missed consumer. Smoke tests (app.smoke.test.ts,app.computed-style.test.ts) assert required host-interface fields; narrowing the interface removes those assertions automatically.Changes
ui/src/ui/app-view-state.ts:185-190): delete the fourskills*fields from the nested block. Re-verify that no@statedecorator onRemoteClawAppdeclares any of them (expected: zero).ui/src/ui/views/agents-utils.ts:142): removeskillsLabelfrom the context type; at line 174, remove the computation. IfskillFilter/skillCountinputs become unused after this, remove those too (likely orphaned upstream).ui/src/ui/views/agents-panels-status-files.ts:44): delete the<div>${context.skillsLabel}</div>render line. If the surrounding block becomes empty, simplify.rg -n 'skill' ui/src/styles.cssreturns zero — so either gut(ui): strip residual skills state + types + i18n #2521's sweep already consumed those rules, or they live in a CSS file not instyles.css. During implementation, re-sweepui/src/**/*.cssand any colocated component styles.rg 'onSkills|loadSkills|skillsStatus' ui/src/ui/currently returns zero. If implementation discovers any hidden handlers (e.g., via different naming likehandleSkill*), remove them; if none exist, note "zero additional handlers found" in the PR.AC
grep -rn 'skillsLoading\|skillsError\|skillsFilter\|skillsBusyKey' ui/src/returns zero hitsgrep -rn 'skillsLabel' ui/src/returns zero hits@statedecorators onRemoteClawAppreferenceskills*pnpm checkgreen (format + tsgo + oxlint + CSS class drift audit)pnpm testgreenpnpm test:ui:smokegreenContext
Follow-up to #2521 (
gut(ui): strip residual skills state + types + i18n, merged as #2536 / commit80d311d25a). The #2521 subprocess flagged "adjacent dead weight (6 handlers + 6skills*state fields + ~13 CSS rules) — candidates for a successor gut wave" as out-of-scope.Surfaced during batch
20260424-6b79. The counts in #2521's subprocess report were as-of-pre-merge; current-main re-verification (above) found 4 state fields + 3 consumer hits + 0 handlers + 0 CSS rules — scope is narrower than claimed but still real.