feat(admin): classifier knob coverage and categorized Controls page #113

Merged
alee merged 15 commits from feat/admin-knob-taxonomy into main 2026-10-06 00:50:19 +00:00

15 Commits

Author SHA1 Message Date
adlee-was-taken
7f616dc256 style(admin-ui): drop the note pill under the unit in persisted cells
The badge-only wrap fixed the 800px overflow but left classifier.degraded_warn_min
with a three-line pill squeezed beside its unit. Letting the hints span wrap
puts the unit on one line and the pill under it in two, matching how
degraded_warn_threshold already reads. Table width at 800 is unchanged (732px).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KkCGRantZsSwmcFpet6FTa
2026-10-05 01:46:15 -04:00
adlee-was-taken
e08560ea40 fix(admin): test degraded_warn_threshold bounds, restore challenger dial hints
POST /admin/api/runtime/classifier_degraded_warn_threshold with null is now
pinned as a clean 422 (it was a TypeError/500 before the neutral_path guard).
Covered: null, bool, string, 0.0, below-floor and above-max all 422 and leave
cfg untouched; floor, 0.2 and max return 200 and update cfg.

The float handler's 422 text had lost "or null for neutral" and "(null means
neutral, not 0.0)" for every float knob, including the challenger dial, which
does have a neutral. They are back, conditional on the knob having a
neutral_path, and degraded_warn_threshold's 422s never mention null. Tests pin
both directions.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KkCGRantZsSwmcFpet6FTa
2026-10-05 01:43:40 -04:00
adlee-was-taken
5024a27805 fix(admin-ui): fit controls at 800px and seed Advanced collapsed per category
Overflow: the persisted-cell note badge is white-space:nowrap, so the
classifier.degraded_warn_min note set the column's min-content width and the
Knobs table measured 821px in a 797px frame (Layer column cut off). The
badge now wraps inside its own pill: 733px at 800, the pre-taxonomy figure.
The previous rule targeted .setting-control .ms-2, but d-inline-flex is
!important and the cell is a plain td, so it never matched.

Seeding: Advanced accordions were seeded collapsed once, on the first render.
The runtime payload lands before the config payload and watchdog.detector.* are
persisted-only, so Watchdog had no advanced rows on that render, was marked
seeded anyway, and loaded EXPANDED. seedAdvancedCollapsed now seeds a category
the first time it renders an advanced row. It is a pure function between
SEED_ADV_COLLAPSED markers, covered by three node tests (a config render after
a runtime-only render stays collapsed; a toggled-open section survives
re-render; a plain-only category is not marked seeded).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KkCGRantZsSwmcFpet6FTa
2026-10-05 01:43:40 -04:00
adlee-was-taken
dfd19d6fef docs: revert stray CLAUDE.md line, correct classifier coverage wording
Reverts 2d145d6, which appended "CLIREF.md updated to CLAUDE.md for current
project state mapping" to the end of CLAUDE.md. It is a stray sentence
describing a rename that never happened.

Correction for b774d55: its subject and body say "CLIREF.md". No such file
exists in this repository; the 17 lines that commit describes (the North Star 1
classifier-coverage paragraphs) are in CLAUDE.md. History is not rewritten.

Also rewords the first of those paragraphs: "partially covered" understated
it. Every classifier scalar is now a control, card-backed, or a recorded
excuse, and fallback_category / max_input_chars are persisted-only.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KkCGRantZsSwmcFpet6FTa
2026-10-05 01:43:40 -04:00
adlee-was-taken
2d145d6db2 docs: update state mapping reference 2026-10-05 01:28:41 -04:00
adlee-was-taken
d25cda31e6 test(admin): integrate card-backed paths into coverage gate 2026-10-05 01:28:39 -04:00
adlee-was-taken
944f91f8cb fix(admin): correct null handling and thresholds for float knobs 2026-10-05 01:28:37 -04:00
adlee-was-taken
d914ca9395 fix(admin): fix controls overflow, accordion seeding, and non-ascii chars 2026-10-05 01:28:36 -04:00
adlee-was-taken
72e641460b test: fix runtime assertions to expect taxonomy fields
Update explicit value checks for circuit_breaker_enabled and default_flex_preference to include category and advanced flags.

Ultraworked with Sisyphus

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-10-05 00:33:22 -04:00
adlee-was-taken
01bc4ec6a4 test: update runtime API assertions for taxonomy fields
Update set checks to include 'category' and 'advanced' keys in /admin/api/runtime responses. Remove unused ClassifierConfig import.

Ultraworked with Sisyphus

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-10-05 00:30:34 -04:00
adlee-was-taken
43f30dfe8c fix: remove unused ClassifierConfig import and add status to deferred-knobs.md
Ultraworked with Sisyphus

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-10-05 00:16:09 -04:00
adlee-was-taken
b774d55f99 docs: update knob taxonomy docs, CLIREF.md, and add deferred-knobs tracker
Update admin-portal.md Controls section with categories/accordion/coverage sources. Update CLIREF.md North Star 1 for completed classifier coverage. Add plans/deferred-knobs.md listing 39 outside-gate + 31 warning knobs.

Ultraworked with Sisyphus

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-10-05 00:12:47 -04:00
adlee-was-taken
6d00b87944 feat(admin-ui): regroup controls page by category with advanced accordion
Restructure config-list tbody: category header rows with chevron toggle, Advanced accordion sub-headers, renderStaticIcons() for both. Add metadata for 7 new classifier knobs (UNITS, KNOB_NOTES, NUMBER_BOUNDS). Collapse state in JS Set preserved across 30s re-renders.

Ultraworked with Sisyphus

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-10-05 00:12:42 -04:00
adlee-was-taken
572bf26240 feat(admin): register classifier knobs, taxonomy metadata, and coverage tests
Add all 7 classifier knobs to registry/allowlist, _KNOB_CATEGORY dict (35 entries), _CARD_BACKED_PATHS (21 entries), DELIBERATELY_NOT_IN_ADMIN reasons, _CONFIG_GET_ORDER reorder, and two-way coverage test.

Ultraworked with Sisyphus

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-10-05 00:12:40 -04:00
adlee-was-taken
9aba0fa11d feat(config): add ClassifierConfig validators and named constants for knob coverage
Add COOLDOWN_FLOOR, FALLBACK_TIER_MIN, DEGRADED_WARN_MIN_CEILING, etc. constants and field_validators for cooldown_seconds, fallback_tier, degraded_warn_min. Update test_admin_config.py for category/advanced fields.

Ultraworked with Sisyphus

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-10-05 00:12:34 -04:00