Skip to content

v2.8.5 - a board run no longer discards an edit made to a real file

Choose a tag to compare

@github-actions github-actions released this 16 Oct 17:52
· 89 commits to main since this release
v2.8.5
175c7b2

A board run no longer discards an edit made to a real file.

Fixed

  • A board run that restores a real file it changed first saves the version it found. When a run that executes a command against your target changes a real file in the tool's reach, run safety restores the file from its backup and reports the change. If another process legitimately edited that file while the run was going, the restore used to overwrite that edit, and the backup is deleted at the end of the run, so nothing kept it. Now, before it restores, run safety saves the file's post-run version into a private folder, <run-id>.post-run/, that sits beside the run directory under the lab root: never inside the run directory (the cleanup deletes that), never inside your project or .coalboard/. The folder is restricted to your user (the same two icacls steps as the run directory on Windows, mkdir -m 700 on POSIX), each copy is named by its SHA-256, and a manifest.txt maps each copy to its original path. It holds copies of real configs and may contain a secret, so the report names only the folder path, never the content. The cleanup keeps the folder so you can reconcile the saved copy with the restored file and then delete the folder yourself; a stop does not remove it. Changes references/run-safety.md (S2 and S5), the matching clause in references/lens-prompts.md and one sentence in the on-disk ledger of SKILL.md, so the seats read the same rule. — test: scripts/lib/run-safety.test.mjs
  • scripts/configure.mjs keeps a legacy config file whenever a repository surrounds it and git cannot say whether it tracks the file, including when no git is on PATH. It deletes the legacy file when git answers that the file is not tracked, or when no .git entry exists in its directory or any ancestor; any other answer inside a repository (a tracked file, no git on PATH, an unreadable index, a timeout) keeps it and prints why. This corrects [2.8.2], which deleted the file when no git was on PATH. Not shipped in the plugin. — test: scripts/configure.test.mjs
  • scripts/configure.mjs refuses a config that removes both human gates. Each flag was checked alone, so --coalboardMode auto --applyConsent false was written as a gateless auto-apply pair; the cross-key check now runs on the final object before any write, and a refusal exits 1 and writes nothing. A pair split across the global and the project file is not visible to this check; the skill refuses it at run time. Not shipped in the plugin. — test: scripts/configure.test.mjs

Changed

  • The org canon's front-door links check is adopted by blob; not shipped in the plugin. .github/workflows/front-door-links.yml (7c582bd7, first adopted at db4173d4), scripts/front-door-links.mjs (3793a056), scripts/lib/front-door-links.mjs (7df59db6) and scripts/front-door-links.test.mjs (3cff2b30) are copied from the canon (.github at bea2b3d) and the test is listed in scripts/test.mjs. The workflow was re-copied at 7c582bd7 (the canon moved to setup-node v7.1.0), so its first blob above (db4173d4) is superseded; the other three are unchanged. — test: scripts/front-door-links.test.mjs
  • scripts/verify-release-shape.mjs is re-copied from the canon at 270e43d1 (it now trims trailing whitespace before it compares, and the room's test pins the leading-whitespace case); not shipped in the plugin. — test: scripts/verify-release-shape.test.mjs
  • The teardown test is stricter and no longer depends on the wall clock; not shipped in the plugin. scripts/lib/test-teardown.mjs takes an injected clock and wait, so the budget is asserted by call count instead of elapsed time, and the held-folder leg now probes whether a plain removal is blocked on the volume and skips visibly where it is not. — test: scripts/lib/test-teardown.test.mjs
  • Two workflow comments and one script are re-synced from the org canon; not shipped in the plugin. .github/workflows/coverage.yml carries the canon's gate comment, .github/workflows/dependabot-auto-merge.yml the canon's allowlist condition (patch and minor only), and scripts/verify-release-shape.mjs the canon's blob, which adds object and string checks on the published Release JSON. The room keeps its own job timeouts.

Notes

  • The skills/coalboard/SKILL.md body is now 50,159 characters (49,796 in 2.8.4), against the last declared bound of 45,959 ([2.3.1]). The growth is one on-disk ledger sentence for the post-run folder, a rail, not explanation; the body was already past the declared bound before this release, and a re-carve is open.