Skip to content

v0.23.0

Choose a tag to compare

@github-actions github-actions released this 20 Jul 15:52
9660150

Added

  • Compaction-survival for long single-session /board work runs (#348). A queue of issues
    worked in ONE session eventually auto-compacts, and Claude Code's generic summary drops the
    thread. A new Board-RunLedger.ps1 (-Start/-Update/-Close) keeps a durable run-ledger as
    an [abios-run-ledger] comment on the epic plus a lockfile-sized local .agentic-board/active-run.json
    marker (#349). The SessionStart hook now handles source: "compact" — reading only the local
    marker (offline), it re-injects a pointer to the epic ledger so the session re-grounds and resumes
    the queue unattended; a strict no-op outside an active run (#350). A PreCompact hook snapshots the
    transcript into .agentic-board/compact-snapshots/ as a safety net, never blocking (#351). Works
    around three Claude Code limits (no programmatic /compact, no auto-compact instructions, no cheap
    compaction model — anthropics/claude-code#14160);
    see skills/projects-admin/references/compact-survival.md (#352, #353).
  • Assert-BoardComplete.ps1 — a pass/fail check that the board is fully worked. Exits 0 when the
    board has zero PENDING items (using the exact Test-Pending definition /board work lists from: no
    Status, or a Status that means Backlog — incl. legacy Todo), exit 1 (listing the offenders)
    otherwise. Run it after a /board work sweep, or in CI, to assert a milestone board reached
    zero-pending. Pure Test-BoardItemPending / Get-BoardCompletion helpers, unit-tested; fails closed
    on a gh error so an unreadable board never reads as "complete".
  • Release checklist spec for BI artifacts (#17, M4.1). A new
    references/bi-release-checklist.md defines "ready to release" for a semantic model / report / PBIP:
    every item is marked [tool] (an agentic-board command enforces it — the BPA + TMDL-breaking gate,
    /board changelog, /board triage, /knowledge), [external] (a Fabric/PBI capability the tool
    references but does not rebuild — deployment pipelines, refresh validation), or [manual] (a human
    judgement the tool surfaces but never fakes — report renders, rollback path). Ships the shared
    definition-of-done plus a copy-paste checklist; wired from the roadmap, /board changelog, and the
    projects-admin reference index.
  • Review gate now BLOCKS a merge on semantic-model quality failures (#16, M3.3). When a PR touches
    a *.tmdl model, Board-ReviewGate.ps1 runs two model-quality gates and stops the merge on either,
    the same way a failing CI check does: the TMDL diff review moves from warn-only to blocking
    (Tmdl-DiffReview.ps1 -FailOnBreaking — a BREAKING schema change blocks), and a new
    Bpa-GateReview.ps1 runs Tabular Editor's Best Practice Analyzer (-FailOn error — an error-severity
    violation blocks). Both degrade safely: no model, no committed BPA rules file, or no Tabular Editor
    is a WARN + skip, never a block — a merge is only ever stopped by an actual finding, so a non-BI repo
    is unaffected. Bpa-GateReview.ps1 parses either CLI's GitHub-annotation output (te TE3 or
    TabularEditor.exe TE2); pure ConvertFrom-BpaAnnotations / Get-BpaVerdict helpers, unit-tested.
  • /board triage — fill triage fields from evidence, propose Priority under confirmation (#306).
    Pending items — the only part anyone plans from — sat blank on Type / Area / Estimate / Priority,
    while what little was filled landed in Done, after it could inform anything. Board-Triage.ps1 closes
    that WITHOUT a bulk default (a uniformly-filled board looks prioritised without being so): -Pending
    lists the pending work-list and its blanks; -Issue <n> -Type/-Area/-Estimate writes the evidence
    fields the agent infers from the issue's content; and -Priority Pn -Rationale '...' only PROPOSES
    (prints) the priority — it writes solely under -ConfirmPriority, and refuses a -Priority with no
    rationale, because a business priority is a judgement not in the repo and must never be written
    silently. /board work now triages on start and /board documents it as sub-action 19. New pure
    Get-TriageGaps / Test-PriorityRequest / Format-PriorityProposal helpers, unit-tested.
  • /board cerrar-ciclo — a close-the-loop disposition router for the current branch (#302).
    The careful post-merge teardown (Invoke-SessionCleanup) was reachable ONLY through the fleet path
    (-Sessions -Watch -AutoClean), so an interactive single session never cleaned up — merged local
    branches piled up until /board doctor was run by hand. Board-Work.ps1 -CloseLoop classifies the
    CURRENT branch (uncommitted / commits-no-PR / PR-open / PR-merged / PR-closed / merged-advanced) and
    routes it: it PROPOSES the next command for every state and performs exactly one action — tearing
    down a proven-merged local branch in place (switch to default, git branch -D, prune the session
    entry; confirm or -Force, preview with -DryRun), never on a dirty tree, never a merge (that keeps
    the review gate). Board-Merge.ps1 now also NOTES when its --delete-branch left the local branch
    behind (checked out here or in another worktree) and points at cerrar-ciclo, instead of silently
    believing it cleaned up. New pure Get-CloseLoopDisposition helper, unit-tested across all states.

Fixed

  • The knowledge registry can live as YAML, so allow-list repos can use /knowledge (#298). A repo
    whose pre-commit hook allow-lists code extensions blocks knowledge/registry.json — often on purpose,
    since OAuth credentials.json is .json, so the barrier that guards secrets also shut the registry
    out of exactly the sensitive-data repos that most want a reference catalog. Add-KnowledgeRef.ps1 -Format yaml now initialises registry.yaml instead (.yaml is normally allow-listed); every
    /knowledge command auto-detects and keeps whichever file exists. A shared KnowledgeRegistryIo.ps1
    reads/writes both formats — the YAML is real block style, and every string scalar is serialised
    through the built-in JSON cmdlets (a JSON string token is also a valid YAML double-quoted scalar), so
    URLs with :/# and notes with quotes round-trip losslessly with no YAML dependency and no
    hand-rolled escaping. JSON stays the default; unit-tested both directions.
  • handoff -Save no longer degrades to a silent local-only file when no issue is linked (#304).
    With no issue resolved (no -Issue, no active session, not on an issue-<n> branch) -Save used to
    write a gitignored HANDOFF.md — not portable, and with no MEMORY.md pointer — then say so only
    AFTER writing. It now refuses before writing and prints the choice: link it with -Issue <n>
    (durable [abios-handoff] comment + memo, resumable on another machine) or accept a machine-local
    handoff on purpose with the new -Local switch. -DryRun reports which of linked/local/refuse it
    would do. New pure Get-HandoffSaveMode helper, unit-tested.
  • The CHANGELOG auto-fold now composes with a hand-written [Unreleased] block (#324). New-Release.ps1
    folds by delegating to Board-Changelog.ps1 -Write, which used to insert the generated block ABOVE any
    ## [Unreleased] — stranding the maintainer's curated entries under an orphan [Unreleased] below the very
    version they belonged to. It now RENAMES [Unreleased] to ## [<version>] - <date> and merges the
    board-derived entries into its sections (preserving hand-written sections like ### Security, appending
    board lines after the curated ones, never duplicating an already-cited issue). A release that ships only
    curated prose (no newly-Done issues) still gets its [Unreleased] renamed. The fully board-generated path
    (no [Unreleased]) is unchanged. New pure Update-ChangelogText/Merge-UnreleasedBody helpers, unit-tested
    both directions.
  • New boards are born on the canonical vocabulary, closing the Todo+Backlog dead-end (#299).
    gh project create seeds GitHub's default Status (Todo / In Progress / Done); a board that keeps
    Todo can later be duplicated into an unmergeable Todo+Backlog pair by a plain apply. Resolve-Board.ps1
    now applies the preset at creation (-Lang, opt out with -SkipPreset) while the board is empty, so the
    Todo→Backlog rename is free and the legacy option never exists. The stale field-presets.md guidance
    that sent a Todo+Backlog board "to the UI" now points at Apply-FieldPreset.ps1 -MergeConflicts (shipped
    in #300) and documents why the option must never be re-sent by name (it orphans every item's Status).
  • /board field apply was undocumentable-as-typed and easy to misfire (#297). The /board
    field bullet named only Set-BoardField.ps1 (a bulk-fill script) next to "apply a field
    preset", so the preset applier Apply-FieldPreset.ps1 got reached for by the wrong name; the doc
    now names both scripts distinctly. Apply-FieldPreset.ps1 also accepts -ProjectNum (alias of
    -Number, matching the rest of the suite) and -Preset (alias of -Lang), and its
    missing-preset error now reads Preset file not found: <resolved path> instead of the misleading
    Preset not found: en.