Files
6krrt/plans/deferred-knobs.md
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

117 lines
7.2 KiB
Markdown

# Deferred admin portal knobs
Status: reference -- Tracker for knobs outside current admin gate
This file tracks config knobs that are outside the admin portal's current
gate. The coverage test in `tests/test_admin_knob_coverage.py` enforces that
every knob in a section the portal reaches is either covered or excused with a
reason. Sections the portal has not reached are out of scope for that test,
but they still need a recorded home so the first control added under a section
does not leave half its siblings orphaned.
Rows use four columns:
| Column | Meaning |
|---|---|
| Knob | Dotted config path in `config/config.yaml`. |
| Section | Top-level config section. |
| Disposition | `deferred` (future admin page) or `excused-with-reason` (deployment wiring or file path). |
| Future Home | The page or surface that should own this knob when the portal reaches the section. |
## Outside-gate knobs
These are `RouterConfig` scalars in sections the portal has not reached yet.
They fall into two buckets:
- Sections not yet reached: `context`, `database`, `dispatch_settings`,
`escalation`, `exploration`, `freshness`, `iteration`, `local_energy`,
`proficiency`, `tiering`.
- Deployment wiring inside those sections: endpoints, model ids, credentials,
filesystem paths, and device names.
| Knob | Section | Disposition | Future Home |
|---|---|---|---|
| `context.default_output_reserve_tokens` | context | deferred | Context page |
| `context.max_output_reserve_fraction` | context | deferred | Context page |
| `context.safety_factor` | context | deferred | Context page |
| `database.path` | database | excused-with-reason | N/A (file path) |
| `dispatch_settings.default_provider` | dispatch_settings | deferred | Providers page |
| `escalation.enabled` | escalation | deferred | Routing page |
| `escalation.max_tier` | escalation | deferred | Routing page |
| `escalation.min_confidence_before_bump` | escalation | deferred | Routing page |
| `escalation.preemptive_on_low_confidence` | escalation | deferred | Routing page |
| `exploration.enabled` | exploration | deferred | Routing page |
| `exploration.epsilon` | exploration | deferred | Routing page |
| `exploration.max_cost_ratio` | exploration | deferred | Routing page |
| `exploration.max_tier` | exploration | deferred | Routing page |
| `freshness.exclude_deprecated` | freshness | deferred | Catalog page |
| `freshness.exclude_stale` | freshness | deferred | Catalog page |
| `freshness.repoll_after_allowlist_change_seconds` | freshness | deferred | Catalog page |
| `freshness.stale_after_days` | freshness | deferred | Catalog page |
| `iteration.enabled` | iteration | deferred | Routing page |
| `iteration.max_attempts_interactive` | iteration | deferred | Routing page |
| `iteration.max_rebill_prompt_tokens` | iteration | deferred | Routing page |
| `local_energy.enabled` | local_energy | deferred | Local Hardware page |
| `local_energy.grid_intensity_g_per_kwh` | local_energy | deferred | Local Hardware page |
| `local_energy.meter` | local_energy | excused-with-reason | N/A (deployment wiring) |
| `local_energy.sample_interval_seconds` | local_energy | deferred | Local Hardware page |
| `local_energy.tariff_usd_per_kwh` | local_energy | deferred | Local Hardware page |
| `proficiency.leaderboard_weight` | proficiency | deferred | Proficiency page |
| `proficiency.outcome_prior_strength` | proficiency | deferred | Proficiency page |
| `proficiency.self_eval_min_samples` | proficiency | deferred | Proficiency page |
| `proficiency.self_eval_weight` | proficiency | deferred | Proficiency page |
| `tiering.cheap_completion_max` | tiering | deferred | Routing page |
| `tiering.tier1_context_max` | tiering | deferred | Routing page |
## Objective warning knobs
These 31 `objective.*` knobs are currently excused from the admin portal in
`tests/test_admin_knob_coverage.py`. They tune `/metrics` warnings and report
series rather than dispatch behavior. Their natural future home is a
**Warnings page** that collects all alarm and report thresholds in one place.
| Knob | Section | Disposition | Future Home |
|---|---|---|---|
| `objective.adoption_window_seconds` | objective | deferred | Warnings page |
| `objective.assumed_cache_rate` | objective | deferred | Warnings page |
| `objective.assumed_completion_tokens` | objective | deferred | Warnings page |
| `objective.billing_reset_day` | objective | deferred | Warnings page |
| `objective.cache_rate_warn_margin` | objective | deferred | Warnings page |
| `objective.cache_rate_warn_min_observations` | objective | deferred | Warnings page |
| `objective.cache_rate_window_hours` | objective | deferred | Warnings page |
| `objective.cost_calibration_min_observations` | objective | deferred | Warnings page |
| `objective.cost_calibration_window_hours` | objective | deferred | Warnings page |
| `objective.credit_attenuation.enabled` | objective | deferred | Warnings page |
| `objective.credit_attenuation.max_multiplier` | objective | deferred | Warnings page |
| `objective.credit_attenuation.refresh_seconds` | objective | deferred | Warnings page |
| `objective.credit_attenuation.soft_floor_usd` | objective | deferred | Warnings page |
| `objective.credit_attenuation.zero_floor_usd` | objective | deferred | Warnings page |
| `objective.cumulative_spend_warn_min_rows` | objective | deferred | Warnings page |
| `objective.cumulative_spend_warn_usd` | objective | deferred | Warnings page |
| `objective.incumbent_rate_min_observations` | objective | deferred | Warnings page |
| `objective.incumbent_rate_refresh_seconds` | objective | deferred | Warnings page |
| `objective.latency_min_observations` | objective | deferred | Warnings page |
| `objective.latency_window_hours` | objective | deferred | Warnings page |
| `objective.plan_pace_warn_ratio` | objective | deferred | Warnings page |
| `objective.proficiency_depth_warn_min_rows` | objective | deferred | Warnings page |
| `objective.proficiency_depth_warn_min_samples` | objective | deferred | Warnings page |
| `objective.quota_burn_min_segment_hours` | objective | deferred | Warnings page |
| `objective.quota_burn_min_segment_samples` | objective | deferred | Warnings page |
| `objective.quota_burn_window_hours` | objective | deferred | Warnings page |
| `objective.quota_runway_warning_hours` | objective | deferred | Warnings page |
| `objective.rejection_warning_baseline_hours` | objective | deferred | Warnings page |
| `objective.rejection_warning_min_count` | objective | deferred | Warnings page |
| `objective.rejection_warning_window_hours` | objective | deferred | Warnings page |
| `objective.selection_coverage_window_hours` | objective | deferred | Warnings page |
## Notes
- A section moves from "outside gate" to "in scope" the moment the portal adds
its first control there. At that point every scalar under it must be covered,
excused, or removed from this tracker into `DELIBERATELY_NOT_IN_ADMIN`.
- Deployment wiring (endpoints, model ids, credentials, paths, devices) is
deliberately off the admin allowlist. Those knobs should stay
`excused-with-reason` even after their section is reached.
- The Warnings page is not built yet. When it is, these `objective.*` knobs
should move from `DELIBERATELY_NOT_IN_ADMIN` into registry or allowlist
entries, and this table should shrink.