Story: Provisioners from the shell — analysis and design
Table of Contents
This page documents a story in Sprint 20. It captures the goal, current status, acceptance criteria, and the tasks that compose it.
Goal
Today a system can only be provisioned through the Qt wizards: the
system provisioner (bootstrap admin, base system, initial tenant), the
tenant provisioner (bundles, data sources, parties) and the party
provisioner (counterparties, reports, activation). The end goal is to
run all of this from ores.shell, driven by an org-mode tangled
script library with an end-to-end provisioning script.
This story is the analysis and design phase only: walk every wizard
page and map its inputs and backend calls onto the existing shell
command surface (capability coverage, not a 1-1 UI mapping — see
* Decisions); brainstorm what the provisioning interaction should
feel like in the medium of ores-shell; and decide the implementation
approach. The decision task scoped the follow-up work into two
stories: Implement ores-shell provisioning commands and
Provisioning script library.
Status
| Field | Value |
|---|---|
| State | DONE |
| Parent sprint | Sprint 20 |
| Now | Nothing. |
| Waiting on | Nothing. |
| Next | Nothing. |
| Last touched | 2026-06-10 |
Acceptance
- Every page of all three provisioner wizards is mapped: fields, defaults, validation, backend NATS messages, and the existing shell command that covers it or the explicitly identified gap.
- The ores-shell provisioning interface has been brainstormed in the medium's own terms, with candidate command surfaces compared and a recommendation made.
- Implementation decisions are recorded in
* Decisionsand the follow-up implementation story/stories are scoped from the backlog capture with right-sized tasks. - The shell is usable from the Qt UI (fixed-width font fix), so the designed interaction can actually be exercised.
Tasks
| Task | State | Start | End | Description |
|---|---|---|---|---|
| Analyse provisioner wizard pages and map each to shell commands | DONE | 2026-06-06 | 2026-06-06 | Map every wizard page's inputs and backend calls to existing or missing shell commands. |
| Brainstorm the ores-shell provisioning interface | DONE | 2026-06-06 | 2026-06-06 | Design the idiomatic shell interaction for provisioning, taking the medium seriously rather than copying the wizards. |
| Decide the provisioning implementation approach and scope follow-up stories | DONE | 2026-06-06 | 2026-06-06 | Turn the analysis and interface brainstorm into decisions and a concrete implementation story breakdown. |
| ores.shell output misaligned: not using a fixed-width font | DONE | 2026-06-10 | 2026-06-10 | Pin a monospace font on the shell's display contexts (Qt first) so table output aligns; the shell is unusable from the Qt UI without it. |
Decisions
- No 1-1 wizard-to-shell mapping. The shell does not replicate the wizard UI. The wizard pages define the required capability coverage — every input and backend effect must be reachable — but the command surface should be designed for the medium of ores-shell: think about what makes the interaction smoother there (sensible defaults, one command spanning what the GUI splits across several pages, flags instead of sequential prompts, scriptability first). Where the shell medium suggests a better interaction shape than the wizard's, prefer it.
- Interface design. Porcelain + plumbing surface; positional
required arguments with optional
--flags;loadis stop-on-error with--continue-on-error;provision partytakes an explicit UUID or exact full name (no session party state). Full design in the brainstorm task's Result. - Shell
bootstrapverified. It sends onlycreate_initial_admin_request(iam.v1.bootstrap.create-admin); the tenant_id/name in its response is the system tenant context.iam.v1.bootstrap.provision-tenantis genuinely uncovered —provision systemadds it. - Script library home.
projects/ores.shell/scripts/— org sources and tangled.oresco-located with the component that runs them; the emacs batch tangle is a CMake target of ores.shell. - Two implementation stories. Implement ores-shell provisioning commands (C++: infrastructure, plumbing, porcelain; 7 tasks) and Provisioning script library (org library, provision_all, tangle target, manual; 4 tasks; depends on the first). The manual task is re-homed to the latter.
- Party-name lock-step accepted. The e2e script hard-codes the
party full name, pinned by the synthetic seed; the manual will show
parties list --status Inactivefor operators on other datasets. - Continuation lines deferred. One command per line in
.oresscripts; revisit only if real scripts become unreadable.
Out of scope
- Implementation of the provisioning commands, the script library, the end-to-end script, and the tangle build — scoped into the Implement ores-shell provisioning commands and Provisioning script library stories.
- Changes to the Qt wizards themselves; they remain the interactive path.
- Interactive, wizard-style guided prompting inside the shell — the target is scripted/command-line provisioning.