Revision history for App-FileSync

0.001.5 Sun Oct 25 12:53:45 PM EDT 2026
	[ Bug Fixes ]
	- Log::Abstraction 0.36 is now required, because the client logs its
	  run summary as structured fields in a trailing hashref.  An older
	  copy, which the installer accepted, turned that into
	  "sync finishedHASH(0x...)" in the log file and an empty entry in an
	  array logger, so the counts were lost and t/settings.t failed its
	  seven logger assertions.

0.001.4	Sun Oct 25 09:31:17 AM EDT 2026
	[ Bug Fixes ]
	- t/ssh.t: the stand-in for ssh now names the perl running the tests on
	  its first line instead of "#!/usr/bin/env perl".  The transport starts
	  that file as a program, so the kernel picked whichever perl came first
	  on PATH - on a smoke tester the system perl, which cannot see the
	  modules the build installed - and the filesync-server it then ran died
	  with "Can't locate Params/Validate/Strict.pm" against a build that never
	  lacked it (GitHub issue #4).  The Windows wrapper already named $^X.
	[ Tests ]
	- t/ssh.t checks the interpreter line of the stand-in it writes, so the
	  PATH-dependent first line cannot come back unnoticed.

0.001.3	Sun Oct 25 07:25:08 AM EDT 2026
	[ Documentation ]
	- More improvements
	[ Bug Fixes ]
	- Bump minimim Config::Abstraction

0.001.2	Sat Oct 24 09:02:12 PM EDT 2026
	[ Bug Fixes ]
        - filesync-admin repo create names the server root and the directory
          that blocks it when the root cannot be written, and says to chown
          it to the running account or use --root elsewhere.  It used to
          report only "Permission denied" against a path below the root.
        - That advice is given only when a directory really is unwritable, so
          a full disk or a root that is a file keeps its own error.

	[ Documentation ]
        - The examples are split by machine - what to run on the
          server, on each client, and from cron - and keep the master in a
          home directory, so nothing needs sudo.
        - What a /srv/filesync root needs instead, the wrapper that
          adds --root to filesync-server, and the ssh key the first sync
          requires.
        - The backup and restore commands follow the example's master
          layout, and make the backup directory before cron mirrors into it.
        - The synopsis creates the repo first, so it runs as printed.

0.001.1 Sat Oct 24 09:52:47 AM EDT 2026
	[ Bug Fixes ]
        - Build: test on Windows with Perl 5.42 again.  Its B::Hooks::EndOfScope
          faults at exit, so the plain-Perl hook is used there.
        - filesync, filesync-server and filesync-admin select that hook for
          themselves on 5.42 for Windows, so it no longer has to be set to run
          them; an implementation already in the environment is left alone.
          A test checks the choice in a child process that starts without the
          variable.
        - Security: an ssh server of the form "-v@host" (or a program name
          starting with "-") is refused; it was passed to ssh as an option.
        - Security: client and repo names that are not plain ids ("../x",
          over 64 characters) are refused by the server, admin and client.
        - Server: a conflict copy is kept under the planned name whether or
          not the client names it, and any other name is refused; acks are
          accepted only for actions the client applies; get validates its
          offset and caps its size; an upload larger than announced is
          refused and discarded.
        - Ignore: building a matcher no longer modifies the caller's pattern
          list (which turned "!keep.tmp" into "keep.tmp" and could delete the
          file remotely); "/top" anchors to the root; "build/" matches at any
          depth.
        - Trash: same-day versions sort numerically and are no longer capped
          at .99.  Each client repo has its own local trash; restore still
          finds files in the old shared one.
        - Admin: journal_read works when the server root contains spaces.
        - All messages come from a catalogue (App::FileSync::I18N::en) and can
          be translated; errors no longer show Perl file and line numbers
          unless FILESYNC_TRACE is set.
        - Internals: new Args, Base, Constants, I18N, IO and Platform modules;
          private subs are enforced with Sub::Private; full POD.
        - Removed the unused POSIX and Encode prerequisites.
        - Build: requires Perl 5.14; declares ExtUtils::MakeMaker 6.64 as a
          configure prerequisite so test prerequisites are honoured; the
          gzip and (on macOS) gtar dist settings are now actually applied;
          t/ and xt/ are not indexed; bug tracker link added.
        - $VERSION is a version object (version->declare), so every tool
          reads 0.001.1 as the dotted version v0.1.1.
        - Every module and program carries the same GPL v2 licence notice.

0.001.0	Fri Oct 23 03:44:45 PM EDT 2026
        First draft
