Skip to content

Use-case specifications

Each page below specifies one use case as a conversation: the actor asks, Octoform answers, and the exchange ends on a state that appears in the operator context.

The specifications deliberately avoid implementation. They do not name modules, HTTP endpoints, or output formatting. What they fix is the exchange itself: what the actor must supply, what Octoform must say back, what it must not do, and where the conversation can end.

Catalogue

Use case Primary actor Contacts GitHub Can write
validateConfiguration() Policy author No No
migrateConfiguration() Policy author No The configuration file, with --write
inspectConfiguration() Repository operator No No
inspectCapabilities() Repository operator Yes No
auditRepositories() Repository operator Yes No
planChanges() Repository operator Yes No
savePlan() Change reviewer Yes A plan file
applyPlan() Repository operator Yes Yes
applySavedPlan() Change reviewer Yes Yes
classifyRepositories() Repository operator Yes Only with --apply
syncProperties() Repository operator Yes Yes
inspectMembers() Repository operator Yes No
inviteMember() Repository operator Yes Yes, one person
removeMember() Repository operator Yes Yes, one person
convertMember() Repository operator Yes Yes, one person

The last three are the only writes that do not go through a plan. That is deliberate and is argued in each specification: an invitation is an act addressed to a person, not a state a schedule reconciles. Everything the organization itself holds — its profile, member policies, properties, rulesets, teams and roles — is planned like any other change, by planChanges() and applyPlan().

How to read a specification

Every page carries the same sections, so they can be compared:

  • Use-case information fixes the actor, the goal, the level, and the pre- and postconditions.
  • Specification diagram shows the conversation as a state machine. The interior states are deliberately unnamed: the notes on the transitions carry the exchange, and the state names live in the table below the diagram.
  • Detailed conversation repeats the exchange as a table, so it can be read without the drawing.
  • Connection with the context names the transition the use case implements.
  • Vocabulary lists the verbs used for the actor and for the system, because a specification that mixes vocabulary hides who is responsible for what.

The one rule that governs all of them

In every conversation, the actor requests and decides; Octoform observes, reports, and asks. Octoform never decides on the operator's behalf, and never converts an omission into an instruction. That constraint is why the specifications are worth having: the moment a conversation shows Octoform choosing something the actor did not ask for, the requirement is wrong.