Skip to content

v0.43.0 — Azure: expired policies and board columns, told honestly

Choose a tag to compare

@keparlak keparlak released this 06 Oct 09:41
· 25 commits to main since this release
aa62e82

Two Azure DevOps defects found by comparing Baron with the toolkit it was extracted from, fixed.

Beetegre-V2 — the project Baron came out of — kept growing its own Azure DevOps scripts after the
extraction, and two lessons it learned by measurement never flowed back. Both are in Baron now.

An expired branch policy no longer reads as one still waiting to run

Azure marks a branch-policy evaluation expired once the target branch moves past what it
evaluated, and it does not re-run an expired evaluation by itself. azure-devops-node-api's enum
deserializer knows six statuses and turns any other string into 0 — Queued — so Baron counted
an expired policy as pending, and task-land told you to wait for something that was never going
to happen. The evaluations are now read raw; an expired policy, or any status Baron does not
recognise, counts as failed with a remedy that names the policy and says to re-queue it, and
task-land prints that remedy. A 404 from the evaluations API reads as unknown, never none.
(#227, #228)

A board column is never dropped in silence

A role's board column was written only through an item's Kanban column field and skipped without a
word when the field was absent — which is every Bug and Task on a sprint Taskboard. Azure then
shows the card in the last column mapped to its state, so a card moved to Test read as
Waiting for Release with nothing verified.

  • Taskboard columns are now written through the Work API, in the item's own sprint, after the state.
  • An uncustomized Taskboard — no columns of its own, one per state — takes a column named like the
    target state, and the state write places the card.
  • When an item cannot take its role's column at all (on no board, a column its Taskboard lacks for
    its type, or a column whose own state mapping disagrees with the role's state), the core decides
    before anything is written, by gapPolicy.separateBoardColumn: error (the default) refuses
    with BOARD_COLUMN_UNREACHABLE and the reason; degrade moves the state alone and warns.
  • The contract gains an optional IssuesTransport.boardColumnUnreachable, pinned by a new
    conformance suite.

If your Azure policy maps board columns and some items sit on no board, transitions that used to
"succeed" with the column silently ignored now stop and say why. Set
gapPolicy.azure-devops.separateBoardColumn to degrade to keep the old outcome, with a warning.
(#229, #230)

What is next

The rest of the comparison is filed as #231–#239: role variants (two columns inside one state),
mergeability as an enum, re-queueing stale checks, arming auto-complete after review, a verified
pull-request ↔ work-item link, and the read side an orchestrator needs (open PRs, their files,
remote branches, @others).