How do I sign off a screen?

Table of Contents

Signing off a screen is the last step of the screen pipeline in Screen pipeline topics. It is one procedure for every screen and every reviewer: the browser harness of How do I run the browser harness against the environment? answers the lines of the Screen review checklist it has a check for, and a person walks the rest. The outcome is one sheet beside the task that owns the screen.

1. Question

How do I sign off a screen against the UX language, and where does the outcome go?

2. Answer

The environment must be up and the Acme tenant provisioned, as How do I ready up an environment? says. The screen must be one the harness knows: a record kind in RECORD_ROUTES or a classification list, named by the describe title the harness gives it, record currencies or classification calendar-type.

  1. Run the harness on the screen alone. The filter drops every other screen and keeps the setup project, so the sign-in and the check that the harness's Acme facts match the provisioning script still run, and the run takes under a minute:

    cd projects/ores.web/packages/harness
    npx playwright test --grep "record currencies"
    

    Run it twice when a check fails. A failure that moves between the runs is timing, not the screen; read its trace under .runtime/harness/results before you count it.

  2. Fold the run into the sheet. The script reads the JSON report the run wrote and prints every checklist line with the harness's mark where it has one and walk where the person judges:

    mkdir -p <story>/evidence
    python3 projects/ores.web/scripts/screen_sign_off.py currencies \
      > <story>/evidence/sign_off_currencies.org
    

    The Harness column is the run's and is not edited. A line with more than one identifier shows the mark per identifier the harness checks, and the Note names the identifiers it does not. A column name can differ from the baseline table's: a rule the baseline splits by stage, such as ES-REFRESH-16 list and ES-REFRESH-16 record, keeps its bare name on a screen where only one stage checks it.

  3. Walk the lines marked walk. Open the screen as the tenant administrator and as a member, with How do I open the web as an Acme user?. For each line write Meets, Gap or N/A in the Person column and what you saw in the Note: the words on the screen, the address, the control. A line you could not try, because the state needs a server fault or a second person, gets Not checked and the reason. The configuration screen section is N/A for a record screen, and the exceptions section is N/A unless the standard names the screen. An agent may walk the lines to find the gaps early, as the worked example did; the sign off that closes a topic is a person's walk, and the sheet says who walked it.
  4. Record the outcome on the task. Below the table write the verdict in one sentence: signed off only when no harness mark is ✗ and no Person cell is Gap or Not checked; otherwise not signed off with the count of gaps and of lines not checked. Name the sheet in the task's Measurements table with the commit the harness ran at, and in its Result. Each Gap goes where the checklist says: into the story or task that owns the screen, or into a capture when nothing owns it yet, with the identifier it breaks.
  5. Sign off again after the fix. A later run replaces the sheet. The old sheet stays in the history of the file, which is the before and after the pipeline asks for.

3. Script

projects/ores.web/scripts/screen_sign_off.py folds the report with the same functions as harness_baseline.py and reads the checklist's lines by their identifiers, so a new line or a new check appears in the sheet without a change to the script. A screen the run does not hold is refused with the names of the screens it does.

4. Tested by

The sheet of the currencies screen in the evidence folder of the task Write the screen sign off recipe is the worked example: the run of 2026-10-25, the walk as the tenant administrator and as a member, and the verdict.

5. See also

Emacs 29.3 (Org mode 9.6.15)