Skip to content

feat(studio): settings — runtime inventory, storage health, settings workspace - #1762

Merged
samuv merged 1 commit into
plan/studio-settingsfrom
studio/settings
Sep 23, 2026
Merged

samuv merged 1 commit into
plan/studio-settingsfrom
studio/settings

Conversation

@samuv

@samuv samuv commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

Summary

What lands

  • BFF: GET /api/v1/settings/runtime (read-only allowlisted projection; server.info only under the server_info feature, models.list only under modelSelection) and GET /api/v1/storage/health (gated on storageHealth); both behind the session gate; no mutations.
  • Web: the eight-section settings workspace (profile with sign-out, agent, appearance, memory, learning, models, storage, about); the sheet, switch, and use-mobile primitives restored; chat's and the side thread's model pickers re-wired to the live inventory; "Settings" joins the nav.

Verification

89 server and 227 web Vitest proofs (14 ACs, 0 missing); task studio:check, task docs pass; smoke against mecated --mock (runtime settings served with exactly the contract's keys; degraded paths for models and storage).

Further amendments

  • "Report a problem" now links to stacklok/mecatl issues.

  • The models section lists the deployment-managed controls with their reasons.

  • Two comments that referred to a component this repository does not have are rewritten.

  • Plan status. This layer's diff moves its acceptance plan to landed (header and index), per the plan lifecycle; the transition is authoritative only when this PR merges, and task ac-trace-strict now gates the plan.

Re-verified on the rebased stack: task studio:check passes (128 server + 268 web Vitest), and task ac-trace-strict passes with every Studio plan gated as landed (141 ACs, 0 failures).

Development stage

  • Plan / Interface
  • Implementation
  • Combined
  • Spike / Routine / Cleanup

Contract linkage

  • Work classification: Bounded
  • Classification rationale: adds the read-only runtime-settings and storage-health surface inside the boundary ADR 0351 fixed
  • Decision record: None — see the plan layer
  • Human waiver of spine: Yes — the directing human chose stacked (gh stack) delivery for the whole Studio series: nothing merges until every layer is reviewed, so the plan's approval-by-merge event is deferred to the end (recorded in each plan's Delivery line), and each implementation layer records the exact plan commit it built against.
  • Acceptance plan: docs/acceptance/studio-settings.md
  • Human decisions resolved and recorded: Yes
  • Plan / Interface PR: docs(plan): Mecatl Studio settings acceptance plan #1761
  • Approved commit baseline: f43bcb09b5c78331bc8566a1bfe66dd198d125d8 (the plan layer below; not yet merged — stacking exception above)
  • Combined/exemption rationale: N/A

Interface conformance

  • Matches the plan's contract.

Issue relationship

Relates to #1750 (parent #1736; stack #1766). Non-closing: the step completes when both of its layers merge.

Type of change

  • Behavioral/interface plan
  • Bug fix
  • New feature
  • Refactoring (no behavior change)
  • Dependency update
  • Documentation/process

Test plan

Baseline checks

  • Acceptance-plan checker
  • Linting (task lint)
  • Offline test suite (task test)
  • Offline demo (go run ./cmd/mecademo)
  • Markdown changed: docs generation/link checks (task docs)

Studio gates (this workspace is not covered by task lint / task test, which are Go-only): task studio:check (Biome, typecheck, Vitest, generated-drift), task ac-trace — all pass; see Verification above.

User-facing change

Studio gains Settings and a live model picker in chat.

Special notes for reviewers

Part of a fourteen-layer stack; review bottom-up. Nothing merges until the whole series is reviewed.

…workspace

Implementation layer of docs/acceptance/studio-settings.md, built
against plan commit f43bcb0.

BFF: GET /api/v1/settings/runtime as a read-only allowlisted projection
(build id, server implementation, provider display endpoint, model and
provider inventory with synthesised provider rows, fixed deployment-
managed management flags), calling server.info only under the
server_info feature and models.list only under modelSelection; GET
/api/v1/storage/health mapping the daemon's storage health with decimal-
string counts and null byte figures unless marked available, gated on
storageHealth. Both behind the bootstrap's session gate; no mutations.

Web: the eight-section settings workspace ported from the prototype
(profile with sign-out, agent, appearance, memory, learning, models,
storage, about); the sheet, switch, and use-mobile primitives restored;
chat's and the side thread's model pickers re-wired to the live
inventory, replacing the chat layer's empty stub; "Settings" joins the
nav. The keyboard-shortcuts link waits for its own layer.

89 server and 227 web Vitest proofs; smoke-tested against a spawned
mecated --mock (degraded paths: no models listed, storage health off).

Tracking: #1736

Signed-off-by: Samuele Verzi <samu@stacklok.com>
@samuv
samuv merged commit 3b393b7 into main Sep 23, 2026
33 checks passed
@samuv
samuv deleted the studio/settings branch September 23, 2026 13:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant