The Zcash Trailing Finality Layer design book.
This repository is the source text and rendering configuration for the book. To read the book, use the link above.
The mdbook tool renders the contents into a pretty format from markdown based source code
There are two GitHub CI workflows:
merge-acceptance.yaml: triggers onpull_requestto check thatmdbook buildsucceeds and there aren’t danglingmdfiles (e.g. you remove an entry inSUMMARY.mdbut forget to rm the file.)render-site.yaml: triggers onpushtomainto render the site to https://electric-coin-company.github.io/tfl-book/- Warning: this workflow relies on full read/write access to the
gh-pagesbranch. Don’t mess with that branch unless you're very confident in the impacts.
- Warning: this workflow relies on full read/write access to the
There is a directory git-hooks that we advocate all contributors use.
Use this command to enable it:
git config --local core.hooksPath git-hooks
Note: Nix users can rely on flake.nix which packages the final rendered HTML into <prefix>/share/doc/tfl-book. Users can install this via nix profile install 'github:Electric-Coin-Company/tfl-book', or to build the local version nix build.
cargo install mdbookcargo install mdbook-admonishcargo install mdbook-graphvizcargo install mdbook-katexcargo install mdbook-linkcheck
graphviz- on debian-like:sudo apt install graphviz
mdbook build
Releases are defined as distinct revisions that embody a consistent set of changes from the prior releases, identified by a version with XXX.YYY.ZZZ format. Releases serve a few purposes. They
- ensure that readers can better notice changes or updates between readings or in discussions with others;
- signify that the authors have converged after a period of editing onto a coherent integrated result;
- signify approximate maturity of the design, based on the version number; and
- serve as a natural milestone for announcements on design updates.
The versioning scheme isn’t precise and roughly follows this rubrik:
When a version X.Y.Z increments, the scope of change since the prior release is implied by the new version:
<X+1>.0.0- This release represents a complete, well analyzed design which the authors believe could be a suitable candidate for Zcash (or other crypto networks) to productionize by developing conforming implementations that activate in production.X.<Y+1>.0- This release introduces or changes substantial design decisions or analyses, or it changes the presentation (such as the order or content of chapters) significantly. A reader of only the prior release may be missing essential details in understanding this new release.X.Y.<Z+1>- This release improves the wording, layout, rendering, or other content in a manner that doesn’t rise to the threshold of the previous case.
To create a new release:
- Decide that the
mainbranch is in a coherent state without likely sources of confusion or self-inconsistency. - Decide the new release’s version as in Versioning Schema above.
- Create a release branch named
release-<NEW VERSION>. - Update the release branch with these changes:
book.toml: Modify thetitleto end withvX.Y.Z. This ensures the version is visible to readers on all pages.src/version-history.md: Introduce a new heading## X.Y.Z - <RELEASE TITLE>above all prior entries (i.e. reverse chronologically).- The
RELEASE TITLEshould be a shorthand title capturing the primary change of the release. - The release body should always begin with a link titled
Issue Trackingthat navigates to the GitHub milestone page of completed issues in this release. - The rest of the release body should be a one- to three-sentence summary of changes. Readers who need more detail can follow issue tracking.
- The
src/introduction.md: The first paragraph saysThis is <VERSION LINK> of the book.Update that link to point to the new release’s entry insrc/version-history.md.
- Submit those changes for GitHub pull-request review, resolve any blocking concerns, then merge to the
mainbranch. Note: This step will render the release. - Create a git tag on the git commit that merges into
main:git tag vX.Y.Z && git push --tags
Note: We don’t use GitHub "releases" since there’s no release artifact other than the already published rendering.