Skip to content

No way to save a preset or add a library folder from the interface (FR-STATE-030, FR-LIB-010) #32

Description

@ErwanLegrand

Two Must requirements whose user-facing mechanism does not exist. Both are currently carried as **PARTIAL** rows, which reads as verification debt; they are feature gaps.

FR-STATE-030 — save and recall a named preset

The requirement is that a user can save the current state as a named preset and recall it, interchangeably between the standalone app and the CLAP plugin.

  • UiIntent (crates/namir-ui/src/host.rs) has exactly seven variants — SetParam, ResetParamToDefault, LibraryQueryChanged, LoadLibraryEntry, RescanLibraryRequested, CancelScanRequested, DismissNotice. None saves or loads a preset.
  • AppHost::save_state / load_state exist in crates/namir-app/src/host.rs, and their own doc comment says outright that this is "not a UiIntent today". Their only caller in the tree is a test.
  • namir-clap has no equivalent at all.

The document format is built and tested (namir-state, docs/04-state-and-preset-format.md, xtask preset). What is missing is any way for a user to reach it. "Save my tone and get it back" is the flagship story for the U2/U3 user classes.

FR-LIB-010 — nominate one or more library directories

Library roots are hard-coded to <config_dir>/Library by namir_worker::library::LibraryService::open_at/open_default. AppSettings has no roots field, and there is no add-root or remove-root intent. A user with their NAM captures and IRs anywhere else has no way to point Namir at them short of moving their files.

Scope

Both need the same shape of work: new UiIntent variants, new UiSnapshot fields, and bridges in both product shells (namir-app/src/host.rs and namir-clap/src/ui_host.rs, which implement UiHost independently by design). FR-LIB-010 additionally needs roots persisted in settings, and a directory picker — which must respect NFR-PORT-030's "no blocking dialog on an audio-affecting path" clause.

These are two of nine unbuilt user surfaces found in a sweep of the 66 partials; see also #26 (audio-device panel). Together they are large enough to be a milestone phase rather than exit-checklist items.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions