diff --git a/README.md b/README.md
index 752dd94b7ac2407049fcc75173518325164c01da..d67217bbe3875a9906c32188886ef357f6dd9e84 100644
--- a/README.md
+++ b/README.md
@@ -32,3 +32,50 @@ delete the packages folder.
 If you need to do additional manual overrides to the nix code, such as
 `addPkgconfigDepends`, edit the `configuration.nix` overlay, which is applied
 afterwards.
+
+## Package Set Policy
+
+This package set has the following policy.
+
+* GHC will advance as often as possible
+* Nonversioned locations (git, unversioned tarballs) are permitted to allow
+  GHC to advance.
+* The following packages must always build:
+  * aeson
+  * beam-postgres
+  * composite-base
+  * dhall
+  * haskell-language-server
+  * hedgehog
+  * pandoc
+  * persistent-postgresql
+  * polysemy
+  * servant
+  * sydtest
+  * tasty
+  * xmonad-contrib
+  * xmonad
+  * wai-app-static
+  * warp
+* Tags will be of the form `unstable-<yyyy>-<mm>-<dd>-r<N>` where any
+  unversioned source is used.
+* Tags will be of the form `stable-<yyyy>-<mm>-<dd>-r<N>` where all
+stable sources are used.
+
+## Commit Policy
+
+* All commits should evaluate with `nix flake show`.
+* All commits should pass all checks with `nix flake check`.
+* All derivations in `packages` should build.
+* Where possible, commits should be atomic, of the form
+  * foo: init at <version>
+  * foo: <old-version> -> <new-version>
+* If multiple packages need to be maintained in lockstep,
+  the commit message should contain all changes.
+
+## ChangeLog Policy
+
+* ChangeLogs should clearly show source stability changes between versions,
+  of the form:
+  * stabilized source: aeson, lens
+  * destabilized source: pandoc