Key points
display_optionacceptslistorgraph; any other value is rejected by validation.- An empty or absent value falls back to
graph. - It selects which tab opens first in run detail; the other tabs stay reachable.
- The same value drives the git-bot GitHub check-run summary, so it changes what a reviewer sees on a pull request.
Examples
display_option: listname: release-service
description: Build, verify, and publish the payments service.
container_image: alpine:3.20
working_directory: /workspace
timeout: 45m
display_option: list
variables:
- RELEASE_CHANNEL
- platform/shared:ARTIFACT_BUCKET
steps:
- name: build
script: |
make build
echo "1.0.$(date +%s)" > /nopsai/outputs/BUILD_TAG
outputs:
- name: BUILD_TAG
- name: verify
image: golang:1.24
depends_on: [build]
runtime_pool: ci
volumes:
- build-cache:/root/.cache
script: |
go vet ./...
go test ./...
- name: checks
depends_on: [verify]
tasks:
- name: licenses
ignore_failure: true
script: |
./scripts/license-check.sh
- name: sbom
script: |
./scripts/sbom.sh > /workspace/sbom.json
sha256sum /workspace/sbom.json | cut -d' ' -f1 > /nopsai/outputs/SBOM_DIGEST
outputs:
- name: SBOM_DIGEST
- name: report
depends_on: [checks.licenses, checks.sbom]
variables:
SBOM_DIGEST: $steps.checks.sbom.outputs.SBOM_DIGEST
script: |
echo "checks complete"
echo "sbom $SBOM_DIGEST"
- name: package
depends_on: [checks]
secrets:
- REGISTRY_TOKEN
- platform/shared:SIGNING_KEY
variables:
BUILD_TAG: $steps.build.outputs.BUILD_TAG
script: |
./scripts/package.sh "$BUILD_TAG"
echo "channel $RELEASE_CHANNEL, bucket $ARTIFACT_BUCKET"
./scripts/mint-token.sh > /nopsai/outputs/PUBLISH_TOKEN
./scripts/sign.sh --key "$SIGNING_KEY" --token "$REGISTRY_TOKEN"
outputs:
- name: PUBLISH_TOKEN
sensitive: true
- name: announce
depends_on: [package]
condition: Only run when the release channel is stable.
ignore_failure: true
script: |
./scripts/announce.shdisplay_option: timelineField reference
display_optionpipelinestringOptionalgraph
How run progress is presented, both as the first tab opened in the UI run detail and as the git-bot GitHub check-run summary.
display_option: listlist, graph
- Any other value is rejected by pipeline validation.
- An empty or absent value falls back to the graph.
- In the UI it selects the tab that opens first; the other tabs stay reachable.
services/git-bot/internal/checkrender/render.go
How it works
This is the smallest directive in the chapter and a good illustration of the rule the whole reference follows: a directive with a fixed set of values documents that set, and validation rejects everything else rather than silently falling back.
Choose list for a long, mostly linear pipeline where the sequence matters, and graph when concurrency is the thing a reader needs to see.
Implementation evidence
services/nopsai/pkg/validation/pipeline.goRules the validator enforces on this directive set.
services/git-bot/internal/checkrender/render.goCheck-run summary rendering for the selected display option.

