\newcommand{\has}{\sqsupseteq}
\newcommand{\isin}{\sqsubseteq}
-\newcommand{\nothaspatch}{\mathrel{\,\not\!\not\relax\haspatch}}
+\newcommand{\nothaspatch}{\mathrel{\,\!\not\relax\haspatch}}
\newcommand{\notpatchisin}{\mathrel{\,\not\!\not\relax\patchisin}}
\newcommand{\haspatch}{\sqSupset}
\newcommand{\patchisin}{\sqSubset}
+\newcommand{\zhaspatch}{\mathrel{\sqSupset_{\degree}}}
\newif\ifhidehack\hidehackfalse
\DeclareRobustCommand\hidefromedef[2]{%
A partial function from commits to commits.
See Unique Base, below.
-\item[ $ C \haspatch \p $ ]
+\item[ $ C \zhaspatch \p $ ]
$\displaystyle \bigforall_{D \in \py} D \isin C \equiv D \le C $.
~ Informally, $C$ has all the reachable contents of $\p$.
+\item[ $ C \haspatch \p $ ]
+$\displaystyle C \zhaspatch \p \land \exists_{D \in \py} D \le C $.
+~ Informally, $C$ nontrivially has all the reachable contents of $\p$.
+
\item[ $ C \nothaspatch \p $ ]
$\displaystyle \bigforall_{D \in \py} D \not\isin C $.
~ Informally, $C$ has none of the contents of $\p$.
-Note that $\haspatch$ and $\nothaspatch$ are not mutually exclusive.
+Note that $\zhaspatch$ and $\nothaspatch$ are not mutually exclusive.
+$\haspatch$ and $\nothaspatch$ are.
Commits on Non-Topbloke branches are $\nothaspatch \p$ for all $\p$. This
includes commits on plain git branches made by applying a Topbloke