Skip to content

Governance

Governance in Shoehorn helps you define and enforce engineering standards across your organization. Track compliance, assign remediation actions, and monitor improvement over time.

Actions are trackable items that represent work needed to meet engineering standards. They can be created manually or generated automatically from scorecards and security findings.

FieldDescription
TitleWhat needs to be done
EntityThe service or component affected
Prioritycritical, high, medium, low
StatusCurrent state (see workflow below)
SourceWhere the action originated: scorecard, security, policy, or manual
Assigned ToPerson responsible
Due DateSLA deadline
Resolution NoteHow it was resolved
open ──> in_progress ──> resolved
│ │ │
│ │ └──> open (reopen)
│ │
└──> dismissed ──────────> open (reopen)
└──> wont_fix ──────────> open (reopen)
  1. Navigate to Governance > Actions
  2. Click Create Action
  3. Select the entity, set priority and title
  4. Optionally assign and set a due date
Terminal window
curl -X POST https://shoehorn.example.com/api/v1/governance/actions \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"entity_id": "<entity-uuid>",
"title": "Add README documentation",
"priority": "medium",
"source_type": "policy",
"sla_days": 30
}'
Terminal window
curl -X PATCH https://shoehorn.example.com/api/v1/governance/actions/<id> \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"status": "resolved",
"resolution_note": "Added comprehensive README with API examples"
}'
Terminal window
# Filter by status and priority
curl "https://shoehorn.example.com/api/v1/governance/actions?status=open&priority=critical" \
-H "Authorization: Bearer <token>"
# Filter overdue actions
curl "https://shoehorn.example.com/api/v1/governance/actions?overdue=true" \
-H "Authorization: Bearer <token>"
# Filter by entity
curl "https://shoehorn.example.com/api/v1/governance/actions?entity_id=<uuid>" \
-H "Authorization: Bearer <token>"
# Filter by assignee
curl "https://shoehorn.example.com/api/v1/governance/actions?assigned_to=<user>" \
-H "Authorization: Bearer <token>"
# Show closed actions (resolved, dismissed, won't-fix)
curl "https://shoehorn.example.com/api/v1/governance/actions?closed=true" \
-H "Authorization: Bearer <token>"

closed=true returns every closed action and can’t be combined with a filter that only matches active actions (status=open, status=in_progress, or actionable=true) — that pairing is rejected.

Move several actions to the same status in one request:

Terminal window
curl -X POST https://shoehorn.example.com/api/v1/governance/actions/bulk \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"ids": ["<id1>", "<id2>"], "status": "resolved"}'

The response reports how many actions changed ({"requested": 2, "updated": 2}). Actions already in a final state are left as-is and don’t count toward updated.

From the CLI:

Terminal window
shoehorn governance actions bulk <id1> <id2> --status resolved

Navigate to Governance > Dashboard for an organization-wide view:

MetricDescription
Health ScoreAverage scorecard score across all entities
Health GradeLetter grade (A+ to F)
Open ActionsCount of unresolved actions
In ProgressActions being worked on
OverdueActions past their due date
Resolved (30d)Actions resolved in the last 30 days
Doc CoveragePercentage of entities with README
Grade DistributionCount of entities per grade

Navigate to Governance > Documentation to track documentation coverage:

MetricDescription
Has READMEEntity has a README file
Has RunbooksRunbooks are defined
Has ChangelogChangelog path is set
Has API DocsAPI interfaces are documented
Doc ScoreScorecard documentation category score
FreshnessHow recently docs were updated

Filter by: missing README, no runbooks, stale documentation.

View governance actions for a specific entity:

  1. Navigate to the entity detail page
  2. Click the Governance tab
  3. See open actions, compliance status, and history

Or via API:

Terminal window
curl https://shoehorn.example.com/api/v1/entities/<id>/governance/actions \
-H "Authorization: Bearer <token>"

Deleting a governance action removes it permanently. There’s no soft-delete or recovery, so delete only actions you no longer need to track.