headwater reads only the dependencies a repository state declares,
and invents none. A declaration it cannot read is reported unread,
naming the declaration, and is never dropped from a report.
Every dependency has exactly one identity, whichever declaration
names it and whichever source publishes it. Two declarations of one
identity are one dependency.
A pin is exactly one version or unknown. A dependency whose pin is
unknown is reported as unknown and never as having nothing newer.
A dependency declared at more than one pin in one repository state
is reported with every declaration and its pin. A release is newer
for that dependency when it is newer than the oldest of them.
Reading a repository state changes nothing in it. headwater never
writes a repository’s content, its history or its configuration.
A release is newer than a pin only by the dependency’s own version
order. headwater never orders two versions by their dates, by their
names’ spelling, or by the order a source lists them.
A release whose order against the pin cannot be decided is reported
as undecided, beside the newer ones, never as newer and never left
out.
A report holds every release newer than the pin that the source
publishes, and none that is not newer.
The pin alone decides what is new. headwater reads no record of
what it reported before to decide it, so every scan reports a release
until the pin reaches or passes it, or an acknowledgement leaves it
out (21).
A release has one identity for ever: its dependency’s identity and
its version. Every scan, surface and host names the same release
the same way, so an asker can key on it.
A release is reported with what its source published of it: its
version, its date, its link and its notes, as upstream wrote them.
headwater never summarises, rewords, translates, ranks or judges a
release, and no model reads notes inside headwater.
Every report and every brief gives each release’s notes whole, or
gives the part an asker asked for together with a way to read the
whole again. headwater keeps no part of notes it cannot give whole.
Every dependency of a repository state belongs to exactly one tier.
The tiers and their cadences are read from the repository state.
headwater never moves a dependency between tiers, and never changes
a cadence.
A scan of what is due reaches the sources of the due tiers’
dependencies and of no others. A scan of a named tier reaches its
sources whether or not it is due.
A scan that leaves a tier incomplete reports every dependency it
could read, reports the rest as unread with the reason, and leaves
the tier due.
Asking what headwater holds reaches no source and writes nothing.
The answer is the newest report for each tier, and says when each
was made and whether its tier is due.
An acknowledgement is only ever given by a person or an acting
session, for one release of one dependency. headwater never infers
one, and never gives one when a pin moves.
A dismissed release is left out of reports. A skipped release is
left out until a release newer than it is published, which is then
reported with the skipped one beside it.
An acknowledgement never changes a pin, a version order or an
advisory. A dependency with an advisory naming its pin is reported
as affected whatever its acknowledgements say (18).
An asker may always ask for a report that disregards every
acknowledgement, and gets the report the pins alone decide (9).
Every acknowledgement names who gave it and when, and stays readable
after the release it acknowledges leaves every report.
For any release a report holds, headwater gives a brief. Asking for
one reaches no source but the notes and advisory sources, and writes
nothing but notes it keeps whole (12).
A brief names every declaration of the dependency in the repository
state and the pin each gives, so a fixer can move every one.
A brief prescribes nothing. It names no tool that acts on it, and no
step a fixer must take.
headwater keeps its held state outside the repository’s content.
Every checkout of one repository shares one held state.
Everything in the held state but acknowledgements can be discarded,
and the next scan rebuilds it with no report changed but the times
it gives.
Two scans of one repository at once leave the held state as one or
the other would have left it. Neither leaves it half written, and no
acknowledgement is lost.
Every report is made from one reading of the repository state. A
report never mixes the declarations of two repository states.
The same question about the same repository state and the same held
state gets the same answer, whoever asks and through whichever
surface.
Every surface answers from one core. No surface computes a report,
a brief, a due tier or an acknowledgement of its own.
Nothing headwater reports depends on which surface asked, which
recorder will keep it, or which fixer will act on it, and headwater
needs none of them to answer.
Every answer has one form a program reads, the same through every
surface, and that form only ever gains fields.
headwater never acts on a release. A surface may hand a brief to a
fixer, and the change the fixer makes is the fixer’s.