v1.5.4 — Governance
Release v1.5.4 — Governance Subcommand Next-Action Menus
Patch release.
ges governance list,show, andverifynow show an interactive "next action" menu after their output instead of dropping users back to the shell with no guidance. No breaking changes.
Previous release: v1.5.3
Release date: 2026-06-20
Highlights
Read-Only Subcommands No Longer Leave You Stuck
In v1.5.3, parent commands (ges governance, ges policy, etc.) gained interactive guided menus. But the read-only subcommands list, show <id>, and verify <id> still printed their output and exited — leaving users with no clue what to do next.
Now they show a context-aware "What would you like to do next?" menu:
$ ges governance list
Governance Records (1)
○ DRAFT My System
ID gov-1781991485573-1
Type ai-system | Risk HIGH
By NOT RECORDED
Ev 0 reference(s)
────────────────────────────────────────────────────
What would you like to do next?
? Choose your next action:
❯ Show a record's full provenance chain — all dimensions in detail
Verify a record's completeness — check all 8 dimensions
Create a new governance record — start a new approval chain
Exit — return to terminal
Context-Aware Choices
The menu adapts to what you just did:
| Command | Menu Options |
|---|---|
ges governance list |
Show a record / Verify a record / Create new / Exit |
ges governance show <id> |
Verify THIS record / Approve / Evidence / Risk / Policy / Create new / Exit |
ges governance verify <id> |
Same as show (single-record scope) |
When list shows multiple records, selecting "Show a record" or "Verify a record" opens a record picker. When only one record exists, it is auto-selected.
Selected actions dispatch via execSync(cmd, { stdio: "inherit" }), reusing the proven next-steps.ts pattern — so the target subcommand's own .action() runs in full.
CI/CD Safe — No Hangs in Non-TTY Mode
The menu is gated behind process.stdin.isTTY && process.stdout.isTTY. In non-interactive contexts (pipes, scripts, CI):
- Output prints normally
- No menu is shown
- Process exits cleanly with code 0
$ echo "" | ges governance list # exits 0, no hang
$ ges governance list | jq ... # exits 0, no hang
Changes
packages/cli/src/commands/governance.ts
- Added
showGovernanceNextAction(root, records, lastShownId?)helper — renders a context-awareselect()menu after read-only subcommands. Dispatches chosen action viaexecSync. - Updated
listaction (line 422) — callsshowGovernanceNextAction(root, records)after printing records. Also handles empty-state (calls the helper, which still offers "Create new record"). - Updated
showaction (line 564) — callsshowGovernanceNextAction(root, [record], record.id)after printing the full provenance chain. - Updated
verifyaction (line 619) — callsshowGovernanceNextAction(root, [record], record.id)after printing the verification report.
Verification
| Check | Result |
|---|---|
| All 16 packages build clean | ✓ |
| Full test suite | ✓ 483/483 passing |
ges governance list (TTY) — menu renders |
✓ via expect PTY |
ges governance show <id> (TTY) — menu renders |
✓ via expect PTY |
ges governance verify <id> (TTY) — menu renders |
✓ via expect PTY |
list / show / verify (non-TTY) — exits 0, no hang |
✓ via piped stdin |
Menu dispatch works (selecting "Verify" runs ges governance verify <id>) |
✓ |
Context-aware choices (single-record scope after show/verify) |
✓ |
Upgrade Notes
No breaking changes. No configuration changes. Existing scripts and CI pipelines continue to work unchanged — non-TTY behavior is identical to v1.5.3.
Install / upgrade:
npm install -g @greenarmor/ges@1.5.4
# or
npx @greenarmor/ges@1.5.4 governance listFull changelog: v1.5.3...v1.5.4