# Changelog
## 0.2.0.0
* Depend on filepather 0.8, and replace the optics of every data type with
the classy optics recipe of claude-haskell: each data type has a class,
`TLike`, whose method is its own name (`commandLine`, `buildError`,
`directories`, `target`, `context`, `gitDetails`, `imageInfo`,
`outputFile`), each field and constructor has a name, a class in its own
module under Document.Build.Name, and each data type has a manifest
(`lawNamesT`), a synonym and function of inheritance (`InheritT`,
`inheritT`) and, where it holds another data type, a check of inheritance
(`inheritsT`)
* Remove the GetX, HasX, ReviewX and AsX classes, and the Field and Injection
instances of every data type; the field lenses keep their names
(`commandLineProgram`, `outputDirectory`, `gitCommitHash`, `imageWidth`,
`outputPath` and so on), and are read with `view (cloneLens n)`
* `ReviewBuildError e` is a constraint synonym for
`BuildErrorLike Tagged Identity e e`, the class of BuildError at
`review`; it needs FlexibleContexts
* The constructors of BuildError with two or more fields each hold a product
type of their own, in a module under Document.Build.Error: ProcessFailed,
ProcessOutputUnrecognised, OutputFileMissing, StringsMissing,
FileTypeUnsupported, InputFilesTooFew and OutputNotInDirectory, held by
BuildErrorProcessFailed and so on; the prisms `_ProcessFailed` and so on
are the names `processFailed`, `inputFileMissing`, `cycle` and so on, and
BuildError inherits the names of the types it holds, such as `file` and
`commandLine`, as affine traversals
* Move CommandLine to Document.Build.CommandLine, Directories to
Document.Build.Directories, Target to Document.Build.Target, GitDetails to
Document.Build.GitDetails, ImageInfo to Document.Build.ImageInfo and
OutputFile to Document.Build.OutputFile; the prisms `_TargetFile`,
`_TargetDirectory` and `_TargetComplete` are the names `targetFile`,
`targetDirectory` and `targetComplete`, and the lenses
`contextDirectories` and `contextTarget` are `directories` and `target`
* Rename the operations gitDetails and imageInfo to readGitDetails and
readImageInfo, because `gitDetails` and `imageInfo` are the names of
GitDetails and ImageInfo
* Document.Build exports the name `cycle`, which has the same name as
Prelude.cycle
* Remove the dependency on either-n, and depend on tagged
* Build with -Werror=incomplete-patterns, and without
-Wredundant-constraints
* Add hedgehog tests of the classy optics: generators in the shape of each
manifest, the coverage of each sum, the manifest laws, and the laws of the
kind of every instance of every name
## 0.1.0.0
* Start again, replacing the earlier prototype, with the project layout,
linting and CI of either-n
* Depend on filepather 0.7, in this repository, for FilePather and Tracked
build steps
* Add Document.Build.Build: Build and Command, running builds, running
processes, and the assertions requireInput, requireDirectory and
requirePath
* Add Document.Build.Error: BuildError and CommandLine, with prisms,
lenses, exit codes and classy optics, including BuildCycle for a chain of
build steps that would go round in a cycle, and OutputNotInDirectory for a
build step that makes a file outside the output directory, and
ShallowRepository for a git history that is too shallow to give the last
commit of each file
* Add operations for PDF (Document.Build.Pdf), LibreOffice
(Document.Build.LibreOffice), pandoc (Document.Build.Pandoc), images
(Document.Build.Image), git (Document.Build.Git), hashes
(Document.Build.Hash), string replacement (Document.Build.Replace) and
files (Document.Build.File), every one a FilePather value; operations
that take several input files (pdfJoin, pdfConcatenate, pdftk,
imageAppend) take the directory they are in
* Add Document.Build.Operations, which exports every operation
* Add Document.Build.Project: projectPath, placeholders from environment
variables and of each file, from the last commit to change it rather than
of the repository, placeholder aliases, prepareFile, and project fonts
* Add Document.Build.Context: the Directories of a build and the Context
that rules run in, as data with optics, Rules, buildStep, and combinators
that choose the files rules apply to
* Add Document.Build.Rules: rules that prepare, convert, join, split,
count, extract pages of and resize the files of a project, archive files
and write the tree of output files, each with its settings as arguments,
and no defaults
* Add Document.Build.Documents: build and buildProject, which run rules over
the directories of a project until they make no more files, then once
more when the build is complete
* Add Document.Build.Output: the tree of output files of a build, with the
hash, git details, page count and image information of each file, in JSON
and an HTML page
* Add build.hs, the build file of a set of projects, a cabal script with
the settings of every project, and exceptions for some
* Add hedgehog property tests for the laws of the optics, doctests, and
criterion benchmarks