fix(engine): small correctness fixes found in the 1.1.1 review #152

Merged
james.maes merged 2 commits from fix/151-engine-small-fixes into main 2026-11-10 21:32:36 +00:00
2 Commits
Author SHA1 Message Date
james.maesandClaude Fable 5.2 61fb8c253b fix(engine): address the independent review of the small fixes
An absent concurrency is the default, not the minimum; the invalid-paths
sentence is about the working tree; a log that gave up on a held file does
not wait again before a cool-down; the cache keeps eight clients and hashes
the token as it is; the CLI marks a run as canceled when cancellation kept
a path recovery from happening; tests no longer depend on the wall clock.

Refs #151

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Signed-off-by: James Maes <james@kof22.com>
2026-11-10 15:32:31 -06:00
james.maesandClaude Fable 5.2 b592898fcb fix(engine): small correctness fixes found in the 1.1.1 review
- A target folder that is a drive root ('C:\', '/') rejected every
  repository: the root keeps its separator when trimmed, and a second one
  was appended. The root now ends in exactly one.
- The Windows-invalid character set was asked of the running platform, so
  the Windows rules answered differently elsewhere. It is written out.
- SyncSummary.WasCanceled reported the token at the end of the run, so a
  cancellation that arrived after the last repository finished marked a
  complete run as canceled (and the CLI exited 1). It is now true exactly
  when a repository was canceled.
- A concurrency read from accounts.json was used as stored. Account now
  keeps it between 1 and 64 however it is set. The engine's handling of a
  value below one has a test.
- ProcessRunner wrote the child's input outside the block that ends the
  child, and a child that exited before reading its input failed the call
  with an I/O error. Every way out now ends a child that is still alive,
  and such a child answers with its exit code and error output.
- The gateway cache kept up to eight clients, keyed by the token, and
  emptied itself when full. GatewayCache keeps four, keyed by a hash of
  the token, and drops only the one unused the longest.
- The activity log: timestamps carry their offset from UTC; the clock is
  read once per entry, so the timestamp and the daily file agree at
  midnight; daily files older than 30 days are removed; a write that finds
  the file held by another process (the app and the CLI share it) waits
  briefly and tries again instead of dropping the entry.
- The invalid-paths message ended with "Nothing was checked out.", which
  is wrong for a repository that already has a working tree. It now ends
  with "No files were written.", which holds for a clone and a pull.

docs/CLI.md named the wrong log folder; corrected with the above.

Closes #151

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Signed-off-by: James Maes <james@kof22.com>
2026-11-10 15:07:55 -06:00