You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
A board run no longer discards an edit made to a real file.
Fixed
<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 twoicaclssteps as the run directory on Windows,mkdir -m 700on POSIX), each copy is named by its SHA-256, and amanifest.txtmaps 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; astopdoes not remove it. Changesreferences/run-safety.md(S2 and S5), the matching clause inreferences/lens-prompts.mdand one sentence in the on-disk ledger ofSKILL.md, so the seats read the same rule. — test:scripts/lib/run-safety.test.mjsscripts/configure.mjskeeps 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.gitentry 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.mjsscripts/configure.mjsrefuses a config that removes both human gates. Each flag was checked alone, so--coalboardMode auto --applyConsent falsewas 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.mjsChanged
.github/workflows/front-door-links.yml(7c582bd7, first adopted atdb4173d4),scripts/front-door-links.mjs(3793a056),scripts/lib/front-door-links.mjs(7df59db6) andscripts/front-door-links.test.mjs(3cff2b30) are copied from the canon (.githubatbea2b3d) and the test is listed inscripts/test.mjs. The workflow was re-copied at7c582bd7(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.mjsscripts/verify-release-shape.mjsis re-copied from the canon at270e43d1(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.mjsscripts/lib/test-teardown.mjstakes 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.github/workflows/coverage.ymlcarries the canon's gate comment,.github/workflows/dependabot-auto-merge.ymlthe canon's allowlist condition (patch and minor only), andscripts/verify-release-shape.mjsthe canon's blob, which adds object and string checks on the published Release JSON. The room keeps its own job timeouts.Notes
skills/coalboard/SKILL.mdbody 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.Release page · CoalBoard
All reactions