Task: Name the bootstrap commands consistently

Table of Contents

This page documents a task in the Implement the setup journeys in ores.web story. It captures the goal, current status, acceptance, and any notes or results.

1. Goal

A person setting an installation up types bootstrap status, bootstrap create-initial-admin and bootstrap setup: one menu whose verbs never repeat it.

2. Status

Field Value
State DONE
Parent story Implement the setup journeys in ores.web
Now Nothing.
Waiting on Nothing.
Next Nothing.
Last touched 2026-09-29

3. Acceptance

  • bootstrap status is the command a caller types; the other two verbs are unchanged.
  • The model can state a command verb, and a verb that is not one is refused when the model is read.
  • The generated unit, the recipe it documents and the tangled script agree, and every gate is green.

4. Plan

(Implementation strategy. Written when work starts; key decisions are distilled into the parent story's * Decisions at close, but the plan itself stays — it is the historical record of what we did.)

5. Measurements

Every number this task claims about a tree, with the command that produced it and the commit it was measured at. A number without both is not a measurement, because a clean-up record describes a tree and trunk moves under a branch: a consumer count, a gate's component count and a suite's size all change with no code changing, and the reader of a bare number cannot tell which tree it came from. Where the raw output matters, put it in an evidence/ file beside the task and name that file in the Command column.

What Value Command Commit
       

6. Notes

7. Test Scenarios

Manual QA scenarios (scaffolded via compass add test_scenario) that verify this task. Link new ones here as they're created; the scenario doc itself links back via its "Verifies task" field.

Scenario State Notes
     

8. PRs

PR Title
#2393 [codegen] Let a model state its command verb

9. Review

Comment summary File Decision Notes
       

10. Result

The generated command for iam.v1.bootstrap.status was bootstrap-status, because a message named bootstrap_status_request becomes the command bootstrap-status and the menu is already bootstrap. A caller therefore typed bootstrap bootstrap-status, which is the menu twice, next to bootstrap setup and bootstrap create-initial-admin, which read properly.

The generator now reads a :shell_command: property on a message, so a model that names a message after the artefact and the action both can state the verb a person types. The bootstrap status read states status, and a verb that is not lowercase words joined by hyphens is refused where the model is read, so a typo fails the model rather than producing a command no one can type.

The command name is also what the generated recipe documents and what the tangled script runs, so both follow: the script library holds bootstrap-status.ores containing bootstrap status, and the stale script the tangle left behind is removed.

The codegen suite grew five cases for the new property, including one measured on the real bootstrap model rather than restated, and every gate is green.

Emacs 29.3 (Org mode 9.6.15)