Repository navigation
Commit c6b3970
engine: give one answer about a name on every machine
Five findings from going through the environment questions - filesystems,
locales, encodings, permissions, shells - on Windows, on exFAT and on Linux.
TWO NAMES DIFFERING ONLY IN CASE WERE TWO FILES
The collision check read "one name" as "the same string". Most filesystems
people run this on disagree: NTFS, APFS and exFAT keep the case somebody typed
and match without it, ext4 matches exactly. Measured on Windows:
report.txt and REPORT.TXT exit 0, "2 file(s) in 2 target(s)"
on disk one file
the manifest two entries
tfg verify wrong-size report.txt, exit 7
One file written over by the other, a manifest describing something that is
not there, and the tool's own check failing on its own output a second later -
which is the defect the collision check exists to stop, reached by changing the
case of a letter. Refused everywhere now, including ext4 where they really are
two files, for the reason the separator rule already gives: a recipe travels
between machines and one that quietly loses a file on somebody else's is worse
than one refused on both.
A COLON WAS LEFT TO THE LOCAL MACHINE TO INTERPRET
Measured: "a:b.txt" was accepted on Linux and refused on Windows from one
recipe, because filepath.VolumeName answers for the system it runs on. And
"AB:c.txt" on Windows is not a drive at all - it names an alternate data
stream, so the run reported the file as not produced, ended with the partial
code, and left an empty file called AB in the directory: not in the manifest,
reported by verify as something nobody asked for, beyond the reach of cleanup
for good.
Refused on every system now, like a separator, and the volume test no longer
asks the local machine.
A RECIPE IN ANY ENCODING WAS READ AS BEST IT COULD BE
Measured: a recipe saved as cp1250 with Polish letters in a file name was
accepted with exit 0, and the file arrived called "za" followed by four
replacement characters. The manifest recorded the same mangled name, so verify
agreed with the disk and nothing said the name was not the one asked for.
Notepad still offers ANSI when saving and this tool is aimed at testers on
Windows. It is refused now, with what to do about it.
A DIRECTORY WE CANNOT WRITE IN SAID THE MANIFEST ALREADY EXISTED
My own regression from earlier today: every failure to claim the manifest name
was reported as a collision, so an empty directory with writes denied produced
"manifest.json already exists ... it is the only record of what an earlier run
wrote". Untrue, and it sends somebody looking for a run that never happened. A
second message about failing to write the manifest followed it, for one fault,
because Started was set before the claim rather than after it.
WHAT WAS CHECKED AND FOUND CORRECT
Worth recording, because these were the questions and the answer was yes:
- the manifest records UTC with the Z on it, unmoved by TZ (checked in three
zones)
- numbers and messages do not change with LC_ALL (checked C, pl_PL, de_DE)
- a system error under a Polish locale still arrives in English with its number
- names Windows will not take - star, question mark, pipe, over 255 characters
- end with the partial code and a manifest entry saying so, which is D10
working rather than failing
- exFAT takes generate, verify and cleanup end to end, and the new case rule
fires there, which is where it matters most
- a dot file, brackets, spaces, ampersands and emoji all survive as typed
- the whole guard suite passes on Linux ext4 as well as on Windows
Six guards, each seen red first, and seven mutations. The permission one skips
on Windows, where denying a write needs an ACL rather than a mode, and was
proven on Linux.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>1 parent 08c64b5 commit c6b3970
5 files changed
Lines changed: 411 additions & 12 deletions
File tree
- internal
- core
- engine
- guard
- recipe
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
60 | 60 | | |
61 | 61 | | |
62 | 62 | | |
63 | | - | |
64 | | - | |
65 | | - | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
66 | 72 | | |
67 | 73 | | |
68 | 74 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
| 14 | + | |
14 | 15 | | |
15 | 16 | | |
16 | 17 | | |
| |||
254 | 255 | | |
255 | 256 | | |
256 | 257 | | |
257 | | - | |
| 258 | + | |
258 | 259 | | |
259 | 260 | | |
260 | 261 | | |
| |||
318 | 319 | | |
319 | 320 | | |
320 | 321 | | |
321 | | - | |
322 | | - | |
323 | | - | |
324 | | - | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
325 | 347 | | |
326 | | - | |
| 348 | + | |
327 | 349 | | |
328 | 350 | | |
329 | 351 | | |
| |||
447 | 469 | | |
448 | 470 | | |
449 | 471 | | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
450 | 479 | | |
451 | 480 | | |
452 | 481 | | |
| |||
478 | 507 | | |
479 | 508 | | |
480 | 509 | | |
481 | | - | |
482 | 510 | | |
483 | 511 | | |
484 | 512 | | |
485 | 513 | | |
486 | 514 | | |
| 515 | + | |
487 | 516 | | |
488 | 517 | | |
489 | 518 | | |
| |||
505 | 534 | | |
506 | 535 | | |
507 | 536 | | |
508 | | - | |
| 537 | + | |
| 538 | + | |
| 539 | + | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
| 543 | + | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
509 | 547 | | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
510 | 557 | | |
511 | 558 | | |
512 | 559 | | |
| |||
743 | 790 | | |
744 | 791 | | |
745 | 792 | | |
| 793 | + | |
| 794 | + | |
| 795 | + | |
| 796 | + | |
| 797 | + | |
| 798 | + | |
| 799 | + | |
| 800 | + | |
| 801 | + | |
| 802 | + | |
| 803 | + | |
| 804 | + | |
| 805 | + | |
| 806 | + | |
| 807 | + | |
| 808 | + | |
| 809 | + | |
| 810 | + | |
| 811 | + | |
746 | 812 | | |
747 | 813 | | |
748 | 814 | | |
| |||
765 | 831 | | |
766 | 832 | | |
767 | 833 | | |
768 | | - | |
| 834 | + | |
| 835 | + | |
| 836 | + | |
| 837 | + | |
| 838 | + | |
| 839 | + | |
| 840 | + | |
769 | 841 | | |
770 | 842 | | |
771 | 843 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
0 commit comments