Skip to content

v0.28.1

Choose a tag to compare

@github-actions github-actions released this 29 Jul 22:31
edf5687

Changed

  • CI run volume cut ~60 %, and Board Sync no longer triggers itself (#504; PR #512). The sync
    workflow listened for assigned while board-sync.sh assigns unassigned issues itself, so its own
    write re-triggered it — every new issue cost at least two runs, the second recomputing a state the
    first had already reconciled. assigned is gone, and a burst of issue events now collapses onto one
    run via concurrency: cancel-in-progress (safe precisely because the sync is a full-state
    reconciler, not an incremental writer; the telemetry snapshot deliberately does NOT cancel, since a
    half-written run there loses data no later run can rebuild).
    ci.yml gates on the pull request only — a push to main is always a merge of something those
    same jobs already passed, so re-running them after the merge doubled the cost of every change
    without ever catching anything new. pr-review and issue-language are grouped per PR / per issue
    and cancel superseded runs: addressing gate feedback with three quick commits used to start three
    reviews of three diffs, two already obsolete — which protects the Max review quota, not just
    Actions minutes. Every job now carries an explicit timeout-minutes (the default is 360, so one
    hung job could eat 12 % of the monthly quota), and test-log artifacts drop from 90-day to 7-day
    retention.

Fixed

  • A mature board no longer reports itself empty (#484). Board-Work.ps1 read board items with
    gh project item-list --limit 200. That call returns exit 0 and exactly 200 items on a bigger
    board — oldest-first, so on a mature board the cap fills with Done work and the Backlog falls
    off the end. Against the tool's own 291-item board, /board work printed
    Sin pendientes. Todo el board esta en progreso o terminado. over 37 open Backlog items.
    Not a truncation warning — a confident false all-clear, landing precisely on the mature boards
    where the stakes are highest, and it silently under-counted the -ListBoards board picker the
    same way.
    Board reads now go through Get-BoardItems.ps1, which returns { Items; Read; Limit; Truncated }
    and treats a read that reached its cap as possibly short. No caller may state an absence off
    one. Every board reader was audited, not just the two in the bug report — the caps ranged from 200
    to 1000 and six surfaces were asserting things a short read cannot support:
    • /board work says how many items it actually saw instead of "sin pendientes"; the board picker
      renders capped counts as N+ with an explicit TRUNCADO line.
    • /board complete fails closed — a PASS is exactly the absence a short read cannot
      support, and CI would read it as ground truth.
    • /board triage no longer prints "(no hay items pendientes)" over an untriaged board.
    • /board field apply --merge-conflicts no longer deletes an option on an unproven verification.
      The worst of the six: it moves items off a legacy option, checks that none remain, then deletes
      it — and its own comment names the stake ("an item silently losing its Status is data loss").
      The check read with a bare gh ... --limit 800 and no cap test, so "0 left" could be an
      artifact of the cap. A truncated verification now aborts on the same grounds as a found item.
    • Backup-Board refuses to write a partial snapshot: it is the safety net taken before a
      destructive operation, so a partial one is worse than none — it would license the delete it
      exists to make reversible.
    • Export-BoardSnapshot refuses to publish a truncated N of M, and /board update publishes
      floors (N+) rather than stating a count and retracting it in a footnote.
    • Set-BoardField warns before its sweep that the pass is partial, instead of printing a
      set=N summary that reads like a complete one.
      The shared ceiling is 2000 and costs nothing: gh pages the underlying GraphQL 100 at a time, so
      request count tracks the items that exist, not the cap — the old 200 bought no savings and cost
      the truth. Regression tests assert that no script hardcodes its own item-list cap and that every
      board reader pulls in the shared one.
      This is the same defect class Invoke-Gh.ps1 was written for (#303): a read consumed as fact.
      Invoke-Gh made a failed read loud; this makes a short one loud. Neither substitutes for
      the other — a truncated read succeeds.