Stop the test suite taking the reader's clipboard A path pasted from the clipboard did not exist, and the file that did exist had a different name four seconds earlier. The clipboard was not the reader's. `/export` copies its path to the clipboard, and two tests called the real exporter: one wrote `<stamp>-repo-atif.json` into `~/.openagents/exports`, took the clipboard, and deleted the file it had just named. A test run four seconds after a real export replaced that export's path with a path to nothing. The reader pasted it and was told, correctly, that it did not exist. The clipboard is now opt-out and both tests opt out. The session takes an export directory so its test writes into its own, and asserts it wrote there rather than deleting afterwards — a suite that has to clean up after itself in someone's directory should not have been writing there. Checked by comparing the clipboard across a full run: unchanged. One leftover `repo-atif.json` from a run whose cleanup did not fire is removed. 416 tests pass.
Stop the test suite taking the reader's clipboard
Deploy story
What this commit did to the running system — joined from the forge receipt chain, the part a commit page elsewhere cannot show.
Not deployed through the forge lane
No push, promotion, build, or deploy receipt references this commit (receipts are scanned over a bounded recent window). Changes shipped by full node replacement carry their proof in the release gate receipt instead.
Changed files
-
modified
packages/openagents-cli/src/coder-export.ts -
modified
packages/openagents-cli/src/coder-session.ts -
modified
packages/openagents-cli/test/coder-export.test.ts -
modified
packages/openagents-cli/test/coder-session.test.ts
Diff
4 files changed, +52 -7
packages/openagents-cli/src/coder-export.ts modified +11 -1
@@ -235,6 +235,15 @@ export function exportTrajectory(
| 235 | 235 |
|
| 236 | 236 |
|
| 237 | 237 |
|
| 238 |
|
|
| 239 |
|
|
| 240 |
|
|
| 241 |
|
|
| 242 |
|
|
| 243 |
|
|
| 244 |
|
|
| 245 |
|
|
| 246 |
|
|
| 238 | 247 |
|
| 239 | 248 |
|
| 240 | 249 |
|
@@ -276,5 +285,6 @@ export function exportTrajectory(
| 276 | 285 |
|
| 277 | 286 |
|
| 278 | 287 |
|
| 279 |
|
|
| 288 |
|
|
| 289 |
|
|
| 280 | 290 |
|
packages/openagents-cli/src/coder-session.ts modified +10
@@ -374,6 +374,13 @@ export class CoderSession {
| 374 | 374 |
|
| 375 | 375 |
|
| 376 | 376 |
|
| 377 |
|
|
| 378 |
|
|
| 379 |
|
|
| 380 |
|
|
| 381 |
|
|
| 382 |
|
|
| 383 |
|
|
| 377 | 384 |
|
| 378 | 385 |
|
| 379 | 386 |
|
@@ -528,6 +535,9 @@ export class CoderSession {
| 528 | 535 |
|
| 529 | 536 |
|
| 530 | 537 |
|
| 538 |
|
|
| 539 |
|
|
| 540 |
|
|
| 531 | 541 |
|
| 532 | 542 |
|
| 533 | 543 |
|
packages/openagents-cli/test/coder-export.test.ts modified +21
@@ -33,6 +33,8 @@ const write = (entries: ReadonlyArray<CoderEntry>) => {
| 33 | 33 |
|
| 34 | 34 |
|
| 35 | 35 |
|
| 36 |
|
|
| 37 |
|
|
| 36 | 38 |
|
| 37 | 39 |
|
| 38 | 40 |
|
@@ -214,6 +216,25 @@ describe("exporting a conversation as ATIF", () => {
| 214 | 216 |
|
| 215 | 217 |
|
| 216 | 218 |
|
| 219 |
|
|
| 220 |
|
|
| 221 |
|
|
| 222 |
|
|
| 223 |
|
|
| 224 |
|
|
| 225 |
|
|
| 226 |
|
|
| 227 |
|
|
| 228 |
|
|
| 229 |
|
|
| 230 |
|
|
| 231 |
|
|
| 232 |
|
|
| 233 |
|
|
| 234 |
|
|
| 235 |
|
|
| 236 |
|
|
| 237 |
|
|
| 217 | 238 |
|
| 218 | 239 |
|
| 219 | 240 |
|
packages/openagents-cli/test/coder-session.test.ts modified +10 -6
@@ -1,4 +1,6 @@
| 1 |
|
|
| 1 |
|
|
| 2 |
|
|
| 3 |
|
|
| 2 | 4 |
|
| 3 | 5 |
|
| 4 | 6 |
|
@@ -410,7 +412,10 @@ describe("the /export command", () => {
| 410 | 412 |
|
| 411 | 413 |
|
| 412 | 414 |
|
| 413 |
|
|
| 415 |
|
|
| 416 |
|
|
| 417 |
|
|
| 418 |
|
|
| 414 | 419 |
|
| 415 | 420 |
|
| 416 | 421 |
|
@@ -420,10 +425,9 @@ describe("the /export command", () => {
| 420 | 425 |
|
| 421 | 426 |
|
| 422 | 427 |
|
| 423 |
|
|
| 424 |
|
|
| 425 |
|
|
| 426 |
|
|
| 428 |
|
|
| 429 |
|
|
| 430 |
|
|
| 427 | 431 |
|
| 428 | 432 |
|
| 429 | 433 |
|