Skip to content

v0.34.0

Choose a tag to compare

@github-actions github-actions released this 04 Aug 21:51
da7f7fd

The pending queue, cleared by the tool's own expert mode. All seven triaged issues on the
board (#413#419) were worked in one day by autonomous /board expert auto sessions — one
isolated worktree and one persona-briefed agent per issue, launched in dependency-safe waves,
each finishing at a reviewed PR with recorded evidence and the merge held for the supervising
session. The batch fixes the fleet's two operational leaks (teardown handles, watch re-polling),
hardens /board plan with a prior-art gate, keeps large prose off the command line, and pivots
documentation from generated wiki pages to DeepWiki routing plus its MCP integration.

Fixed

  • -Sessions -Watch no longer re-polls every registered session on every 30-second cycle (#414).
    Three related defects: (1) sessions already reported LISTO in a prior cycle were re-polled on
    every subsequent cycle — 31 zombie entries from 2026-07-13 drove ~33 API calls per cycle,
    exhausting the 5 000/hr GraphQL quota within four watch runs. Fix: a $doneSet tracks issues
    already known to be done; at the start of each cycle ReadSessions output is filtered through
    it, so a done session is never polled again. (2) zombie sessions (dead PID + workPath gone from
    disk) were never pruned and kept accumulating in sessions.json. Fix: injectable $IsStale
    scriptblock detects these; when stale, the session is removed from the registry via
    Remove-SessionRegistryEntry -Outcome stale-prune — zero API calls, no GetStatus probe at all.
    (3) when gh failed due to a rate-limit error, Get-SessionLiveStatus silently fell back to
    process-liveness and printed LISTO: proceso terminado — indistinguishable in the output from a
    verified LISTO: PR merged. Fix: Get-SessionLiveStatus captures stderr with 2>&1, checks
    $LASTEXITCODE, and returns { done=$false; reason='UNKNOWN (rate limit)'; rateLimited=$true }
    on any rate-limit hit — never degrading to a PID signal that looks verified. The watch loop
    prints rate-limited sessions in DarkYellow so the degraded state is visible. Four new Pester
    tests cover: no re-poll after LISTO, stale-prune skips GetStatus, stale-prune writes
    stale-prune outcome, rate-limited session never reported done.
  • Large inline text payloads no longer abort Board-Plan / Board-Handoff (#419). The tool-layer
    path guard pattern-matches the full command string: prose containing slash-commands (/board,
    /scan, /knowledge, /expert) passed as inline parameters was misread as a filesystem path
    and caused the whole command to abort before the script ran — accounting for 65 field failures
    across 945 sessions (Board-Plan.ps1 at 30.3% failure rate, Board-Handoff.ps1 at 22%). The fix
    is to keep large payloads off the command line entirely. Board-Plan.ps1 now accepts
    -DescriptionFile, -ResearchFile, and -PriorArtFile (each a path to a plain-text file);
    Board-Handoff.ps1 now accepts -BodyFile (path to a JSON file with NextStep, Done,
    OpenThreads, Traps, KeyFiles keys). Inline parameters remain supported unchanged for short
    text. The new Resolve-TextParam and Read-HandoffBodyFile pure helpers are covered by 14 new
    Pester tests (file reads content, slashes treated as data, destructive text never executed,
    missing-file and directory-path throw, file wins over inline — a field present in the JSON
    overrides even when explicitly empty, while an absent field falls back to the inline default).
  • -AutoClean teardown now kills the Windows Terminal tab shell and deletes the worktree folder (#413). Board-Work.ps1 -Sessions -Watch -AutoClean previously left the pwsh -NoExit tab shell alive (its handle blocked git worktree remove from deleting the directory) and printed a manual-cleanup note. The fix: before running git worktree remove, teardown finds the tab's shell by its launch-script command line (launch-<n>.ps1 — exact match on the issue number, so sibling sessions are never touched), kills it via Stop-ProcessTree, waits 500 ms for the OS to release the handle, then runs Remove-Item after git de-registers the worktree. When no shell is found (session already closed, or non-wt launch), teardown falls back to the same attempt. Two helper additions: Find-WtTabShellCore (pure, testable) + Find-WtTabShell (thin CIM wrapper, mockable) in BoardWork.Processes.ps1; 6 new Pester tests including the "do not kill a different issue's shell" guard.
  • Publish-DocsWiki.ps1 no longer generates Docs-Command-* wiki pages (#418).
    commands/*.md files are agent instruction files (system prompts addressed to an AI),
    not documentation. Publishing them verbatim produced a 31 KB Docs-Command-Board page
    full of internal recipes, script paths and conditional branches — instructions readable
    only by the agent that would execute them. The _Sidebar no longer links to command
    pages. Docs-Home is now purely the README with HTML stripped. Stale Docs-Command-*
    pages left in the wiki are automatically removed on the next publish (the clone-write-
    git add -A cycle stages their deletion). The CI freshness step is annotated to explain
    why "it generates" was never evidence that "it reads" — a check that cannot ask that
    question will report green on garbage forever. For code and architecture reference, route
    to DeepWiki instead of generating. 15 Pester tests updated; the Docs-Command-<X>
    describe block (7 tests) was removed; 2 new tests (does NOT generate any Docs-Command-* pages, does NOT link to any Docs-Command-* page) enforce the invariant.

Added

  • /docs is now a router, not a generator (#417). commands/docs.md documents the split
    between what is generated and what is routed: /docs wiki generates pages from repo content
    (README + knowledge registry) and pushes them to the GitHub Wiki; /docs deepwiki resolves the
    repo, checks visibility, and reports (or navigates to) the AI-authored wiki on DeepWiki without
    generating anything. commands/*.md agent instruction files are explicitly excluded from
    generation — publishing them verbatim produces AI system prompts dressed as documentation.
    Three new Pester tests enforce the contract: commands/docs.md must not reference
    Docs-Command-* pages (regression guard for #418), must document both subcommands, and must
    declare the public-repos-only limit for DeepWiki at the point of use.
  • DeepWiki MCP integration (#416). Three connected pieces: (1) mcp.json toolkit catalog
    entry registers the DeepWiki MCP server (cognitionai/deepwiki, three tools:
    read_wiki_structure / read_wiki_contents / ask_question) so /tools can install it via
    claude mcp add like any other referenced tool. (2) /docs deepwiki verb — runs
    Get-DeepWikiStatus.ps1 to resolve the current repo from origin, check GitHub visibility,
    probe deepwiki.com, and report indexed, not-indexed, private, or unknown. The
    public-repos-only limit (private repos require paid Devin) is documented at the point of use,
    never buried. (3) tools-catalog skill's research <id> action now calls ask_question as
    the first probe when the MCP is configured, before any clone. Machinery: new mcp toolkit
    kind (next to skill-clone and plugin), detected via claude mcp list through new
    Get-InstalledMcpServers.ps1; Get-ToolsCatalog and Install-ToolFromCatalog extended to
    handle the new kind; 17 new Pester tests across Get-DeepWikiStatus, Get-ToolsCatalog (mcp
    kind), and Install-ToolFromCatalog (mcp kind).
  • /board plan prior-art gate (#415). Board-Plan.ps1 now refuses to create an epic
    unless the caller provides either -PriorArt "<block>" (queries run, candidates found with
    stars/license/adoption, and the explicit build-vs-reference-vs-extend decision) or -NoPriorArt
    (for genuinely novel work). In both cases the outcome lands in a ## Prior-art gate section of
    the epic body, making the decision auditable later. A silent skip — the failure mode that cost
    five PRs on the wiki epic (#401) — is no longer possible: the script throws before creating
    anything. Same enforcement shape as the -Rationale requirement in /board triage. Verified by
    9 new Pester tests covering both paths (gate and skip).