Skip to content

ADO Board Hygiene

Established 2026-04-19. Applies to all agents and sessions in the Archon Platform project.

Problem This Solves

Work items created without a sprint or area path are invisible on the ADO board and sprint timeline. Before 2026-04-19, all ~80 open WIs were at the root iteration path (archon-platform) and most had no sub-area path, causing the sprint board to appear empty despite active work.

WI Creation Checklist

Every work item created by any agent or operator must include all of the following:

Field Rule
--area Never root. Always assign to a sub-area (see guide below).
--iteration Never root. Always set to current active sprint (see lookup below).
--type Task for implementation work; Bug for defects; Feature for epics.
--fields System.Tags At least one tag.
--state To Do for new Tasks; Active for Features/Stories started immediately.

Area Path Guide

Work type Area path
Platform IaC, Ansible, k3s, pipelines, security, docs archon-platform\Platform
Application code, CMMS, OpenClaw, Grafana dashboards archon-platform\Apps
Cloudflare, Azure, Terraform archon-platform\Cloud
ADO pipelines, CI/CD archon-platform\Pipelines
OT firmware, MQTT, alarms (ALM-*) archon-platform\OT
Default (when none of the above fit) archon-platform\Platform

Never leave area at the root archon-platform. It routes the WI outside all team board filters.

Sprint Assignment Rule

Always look up the current active sprint dynamically. Do not hardcode sprint names.

CURRENT_SPRINT=$(az devops invoke \
  --area work --resource iterations \
  --route-parameters project=archon-platform team="archon-platform%20Team" \
  --api-version 7.1 --output json 2>/dev/null | \
  python3 -c "
import json, sys
for i in json.load(sys.stdin).get('value', []):
    if i.get('attributes', {}).get('timeFrame') == 'current':
        print(i['path']); break
")

This returns a path like archon-platform\Sprint 2. Use it directly with --iteration.

Mandatory WI Creation Pattern

az boards work-item create \
  --title "<title>" \
  --type Task \
  --project archon-platform \
  --area "archon-platform\Platform" \
  --iteration "$CURRENT_SPRINT" \
  --fields "System.Tags=<tag>"

ALM Alarm WI Handling Policy

Alarm WIs are auto-generated by alarm_bridge when OT alarms fire (ALM-REDACTED, ALM-REDACTED, etc.). They are not operator-actionable tasks and must not pollute the Platform sprint board.

Rules: - Area path: archon-platform\OT (permanently routes them off the Platform board) - Iteration: current active sprint (so they appear on the OT area board, not orphaned) - State: leave as-is (New) unless the alarm is being investigated - Do not reassign ALM WIs to operators unless the alarm triggers a formal incident

The alarm_bridge service must be updated to set these fields at creation time. See cmms_alarm_bridge config in archon-apps for the WI creation call.

Team Board Configuration

Current settings (set 2026-04-19):

Setting Value Notes
Team area filter archon-platform with includeChildren: true Shows all sub-areas on board
Default iteration @currentIteration (Sprint 2 as of Apr 19) Auto-advances each sprint
Backlog visibilities Epics, Features, Stories Tasks appear on sprint board only
Bugs behavior asTasks Bugs appear in sprint task rows

Note: ADO does not support TaskCategory as a backlog level in this process template. Tasks are visible on the sprint board (not the backlog board) once a sprint is assigned.

Board Visibility Check

Run at every session close (built into ccagnt-session-light Step 4 and ccagnt-session-full Step 9).

# WIs with no sprint (root iteration)
az boards query \
  --wiql "SELECT [System.Id],[System.Title],[System.AreaPath],[System.IterationPath] \
  FROM WorkItems WHERE [System.TeamProject]='archon-platform' \
  AND [System.IterationPath] = 'archon-platform' \
  AND [System.State] NOT IN ('Done','Closed','Resolved') ORDER BY [System.Id] DESC" \
  --output table

# WIs with root area path
az boards query \
  --wiql "SELECT [System.Id],[System.Title],[System.AreaPath],[System.IterationPath] \
  FROM WorkItems WHERE [System.TeamProject]='archon-platform' \
  AND [System.AreaPath] = 'archon-platform' \
  AND [System.State] NOT IN ('Done','Closed','Resolved') ORDER BY [System.Id] DESC" \
  --output table

Target state: both queries return zero rows. Any row is a violation that must be fixed before the session closes.

Correcting Existing Violations

# Assign sprint and area path to a single WI
az boards work-item update --id <id> \
  --iteration "$CURRENT_SPRINT" \
  --area "archon-platform\Platform"

# Batch fix -- for a list of IDs
for id in 249 248 247; do
  az boards work-item update --id $id \
    --iteration "$CURRENT_SPRINT" \
    --area "archon-platform\Platform" \
    --output none
done