ADR-0022: Add show command for stdout rendering
Status: accepted | Date: 2026-02-07
References: RFC-0002, ADR-0021
Context
Context
Agents (Claude, Cursor, etc.) intuitively try govctl rfc show RFC-0001 to read an RFC’s rendered content, but this command doesn’t exist. The error unrecognized subcommand 'show' is a recurring failure mode.
Problem Statement
The current CLI has an asymmetry in read operations:
| Verb | Purpose | Output |
|---|---|---|
get | Read individual field value | stdout |
render | Generate full markdown | file (side effect) |
| (missing) | Read full rendered content | stdout |
The gap: there’s no way to get the full rendered representation to stdout without writing a file.
Current Workarounds
govctl rfc render RFC-0002 --dry-run— shows preview, but semantically wrong (dry-run is for previewing writes)- Read
docs/rfc/RFC-0002.mddirectly — requires knowing the configurable output path
Both are awkward for agents who just want to “see” an artifact.
Constraints
- RFC-0002:C-CRUD-VERBS defines standard CRUD verbs for resources
- RFC-0002:C-OUTPUT-FORMAT specifies output format handling (–output flag, TTY detection)
- ADR-0021 established resource-scoped
renderfor single-item file generation
Mental Model
Unix convention: commands that read data print to stdout; commands that generate files write to filesystem. show fits the “read and display” pattern like cat, kubectl get -o yaml, or docker inspect.
Decision
Decision
We will add a show verb to all renderable resources that outputs content to stdout.
New Commands
govctl rfc show <RFC-ID> # Print rendered RFC to stdout
govctl adr show <ADR-ID> # Print rendered ADR to stdout
govctl work show <WI-ID> # Print rendered work item to stdout
govctl clause show <CLAUSE-ID> # Print clause content to stdout
Output Format
- Default: Markdown text (the human-readable rendered form)
- With
--output json: Structured JSON (equivalent togetwith no field) - Respects RFC-0002:C-OUTPUT-FORMAT conventions
Semantic Distinction
| Command | Purpose | Side Effects |
|---|---|---|
show | Read and display to stdout | None |
render | Generate and write to file | Writes file |
get | Read single field value | None |
Rationale
- Agent-friendly: Natural command that agents try first (
show= “let me see this”) - Unix convention: Read operations → stdout; write operations → filesystem
- Minimal implementation: Reuses existing render logic, just changes output target
- Symmetric with render:
showis torenderascatis tocp - Format flexibility:
--output jsongives structured access when needed
Consequences
Consequences
Positive
- Fixes agent failures:
govctl rfc show RFC-0001will work as expected - Cleaner semantics: Clear separation between read (show) and write (render)
- Pipeable:
govctl rfc show RFC-0002 | lessor| grep patternjust works - Consistent UX: All renderable resources get the same
showverb
Negative
- New verb to learn: Users must understand show vs render distinction
- Mitigation: Intuitive naming makes this self-evident
- Slight command surface growth: 4 new subcommands
- Mitigation: Natural extension of existing pattern, improves discoverability
Neutral
--output jsononshowis functionally equivalent togetwith no field argument — this redundancy is acceptable for discoverability