H. Administrator UX cleanup (derived resources, honest counters, revoked-worker deletion, limits + client integration) #140

Open
opened 2026-09-26 21:44:36 +00:00 by kilo · 2 comments
Member

Child H of #132. Fix the misleading post-D-053 administration UX.

1. Resources page

Currently lists only static _config.resources and can be empty while D-053 dynamic resources are live. Show configured resources AND read-only source-derived resources. Derived entries display: resource id, source, provider, model, effort, health/availability. Do NOT duplicate derived resources into durable static configuration; do NOT offer edit/remove actions implying independent configuration (read-only presentation; availability follows the source lifecycle).

2. Sources page counters

errors currently counts merely discovered/unclassified models. Split state honestly: routable / restricted / discovered-unclassified / errors. Normal discovery is never labeled an error. Render the retired list too.

3. Source action text — state-aware remediation

Authenticated source must not be told to log in; auth-required source gets the login remediation; disconnected worker gets worker/service remediation (linking child F's service commands); stale inventory says so; a source with current healthy inventory shows no fake warnings.

4. Revoked worker deletion

Revoked workers currently cannot be removed. Implement safe deletion: only revoked workers; active-worker deletion rejected; deletion rejected while referenced by a Source or static Resource; historical audit records preserved (no rewriting old audit identity); Delete exposed in the UI only when semantically valid; referential-integrity tests.

5. Execution limits UX

Normal operator surface for gateway limits (child D exposes the data; this child renders it): an operator can see why a 128k model request is or is not accepted. No hidden safety policy.

6. Client integration UX

A user configuring a representative OpenAI-compatible client can determine: Base URL, API format, exposed model ids, effective context, effective output limit, available reasoning efforts, TLS/trust status. Prefer standard protocol metadata; use additive x_scarcity_router metadata (child B) or a small integration view where the standard API cannot represent it. No ZCode-specific behavior in the routing core.

Tests

Resources page composition (configured + derived, read-only discipline); counter splits per source state; remediation text per state (table-driven); revoked-worker deletion happy path + each refusal + audit preservation; limits visibility; integration-view payload correctness; no secrets in any rendered surface.

Complexity boundary

server_ui.py, control_api.py, execution_sources.py (view fields), control_server.py service endpoints as needed; ~3 test files. Budget: 120 min wall clock. Depends on child D data (limits) and B (model metadata); independent otherwise.

Acceptance

Full gate green; mandatory UX review (UX impact: assessment, material regression = CHANGES_REQUESTED); PR open for human review; not merged.

Child H of #132. Fix the misleading post-D-053 administration UX. ## 1. Resources page Currently lists only static `_config.resources` and can be empty while D-053 dynamic resources are live. Show configured resources AND read-only source-derived resources. Derived entries display: resource id, source, provider, model, effort, health/availability. Do NOT duplicate derived resources into durable static configuration; do NOT offer edit/remove actions implying independent configuration (read-only presentation; availability follows the source lifecycle). ## 2. Sources page counters `errors` currently counts merely discovered/unclassified models. Split state honestly: `routable / restricted / discovered-unclassified / errors`. Normal discovery is never labeled an error. Render the `retired` list too. ## 3. Source action text — state-aware remediation Authenticated source must not be told to log in; auth-required source gets the login remediation; disconnected worker gets worker/service remediation (linking child F's service commands); stale inventory says so; a source with current healthy inventory shows no fake warnings. ## 4. Revoked worker deletion Revoked workers currently cannot be removed. Implement safe deletion: only revoked workers; active-worker deletion rejected; deletion rejected while referenced by a Source or static Resource; historical audit records preserved (no rewriting old audit identity); Delete exposed in the UI only when semantically valid; referential-integrity tests. ## 5. Execution limits UX Normal operator surface for gateway limits (child D exposes the data; this child renders it): an operator can see why a 128k model request is or is not accepted. No hidden safety policy. ## 6. Client integration UX A user configuring a representative OpenAI-compatible client can determine: Base URL, API format, exposed model ids, effective context, effective output limit, available reasoning efforts, TLS/trust status. Prefer standard protocol metadata; use additive `x_scarcity_router` metadata (child B) or a small integration view where the standard API cannot represent it. No ZCode-specific behavior in the routing core. ## Tests Resources page composition (configured + derived, read-only discipline); counter splits per source state; remediation text per state (table-driven); revoked-worker deletion happy path + each refusal + audit preservation; limits visibility; integration-view payload correctness; no secrets in any rendered surface. ## Complexity boundary `server_ui.py`, `control_api.py`, `execution_sources.py` (view fields), `control_server.py` service endpoints as needed; ~3 test files. Budget: 120 min wall clock. Depends on child D data (limits) and B (model metadata); independent otherwise. ## Acceptance Full gate green; mandatory UX review (`UX impact:` assessment, material regression = CHANGES_REQUESTED); PR open for human review; not merged.
Author
Member

Additive scope note (D-056, PR #147 — frozen scope text above unchanged):

  • §6 client-integration UX is harness-generic per D-056: the integration surface documents the common semantic contract (normal configuration = base URL + API key + logical model id) for ANY conforming harness — ZCode, Kilo, Cline, OpenAI-compatible SDK clients, scripts — not ZCode-specific instructions; no per-client guidance in the product surface, and no client-identity branching anywhere.
  • "Effective context / effective output limit" values rendered here are the D-056 intersection as implemented by child D (#136): render the honest effective numbers, render UNKNOWN as unknown (never a guessed value and never silently the strongest route's), and keep §1's derived-resource read-only truthfulness unchanged. Where per-route effective ceilings differ for one logical model, the surface must not imply they are identical (presentation details follow #136's aggregation outcome).

Authoritative text: D-056 pt 1/pt 6/pt 9 in docs/decisions.md; "Harness-independent execution backend (D-056, #146)" in docs/architecture.md.

Additive scope note (D-056, PR #147 — frozen scope text above unchanged): - §6 client-integration UX is harness-generic per D-056: the integration surface documents the common semantic contract (normal configuration = base URL + API key + logical model id) for ANY conforming harness — ZCode, Kilo, Cline, OpenAI-compatible SDK clients, scripts — not ZCode-specific instructions; no per-client guidance in the product surface, and no client-identity branching anywhere. - "Effective context / effective output limit" values rendered here are the D-056 intersection as implemented by child D (#136): render the honest effective numbers, render UNKNOWN as unknown (never a guessed value and never silently the strongest route's), and keep §1's derived-resource read-only truthfulness unchanged. Where per-route effective ceilings differ for one logical model, the surface must not imply they are identical (presentation details follow #136's aggregation outcome). Authoritative text: D-056 pt 1/pt 6/pt 9 in `docs/decisions.md`; "Harness-independent execution backend (D-056, #146)" in `docs/architecture.md`.
Author
Member

2026-10-27 owner backlog disposition (D-083, governance issue #228). This issue remains open with its wontfix label unchanged; history preserved. Verified against current source: §6 client-integration UX is delivered (D-055/D-058 x_scarcity_router metadata, Client-configuration page); §§1–5 remain unimplemented in the current M09 UI. Producer-owned resource-state correctness (derived/discovered representation, honest availability/freshness, stable consistent projection, no fabricated completeness) is integrated into #183; the administrator-facing remainder (derived-resources display, honest counters, state-aware remediation, revoked-worker deletion, limits visibility) is re-homed to #226, reusing the existing UI and control plane. The former #183 → #140 native dependency was removed as stale. See D-083 in docs/decisions.md.

**2026-10-27 owner backlog disposition (D-083, governance issue #228).** This issue remains open with its `wontfix` label unchanged; history preserved. Verified against current source: §6 client-integration UX is delivered (D-055/D-058 `x_scarcity_router` metadata, Client-configuration page); §§1–5 remain unimplemented in the current M09 UI. Producer-owned resource-state correctness (derived/discovered representation, honest availability/freshness, stable consistent projection, no fabricated completeness) is integrated into **#183**; the administrator-facing remainder (derived-resources display, honest counters, state-aware remediation, revoked-worker deletion, limits visibility) is re-homed to **#226**, reusing the existing UI and control plane. The former #183 → #140 native dependency was removed as stale. See D-083 in `docs/decisions.md`.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Creatidy/scarcity-router#140
No description provided.