Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Part A

Part A. What headwater decides

A.1 What a repository depends on

  1. 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.
  2. Every dependency has exactly one identity, whichever declaration names it and whichever source publishes it. Two declarations of one identity are one dependency.
  3. A pin is exactly one version or unknown. A dependency whose pin is unknown is reported as unknown and never as having nothing newer.
  4. 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.
  5. Reading a repository state changes nothing in it. headwater never writes a repository’s content, its history or its configuration.

A.2 Releases and what is new

  1. 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.
  2. 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.
  3. A report holds every release newer than the pin that the source publishes, and none that is not newer.
  4. 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).
  5. 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.
  6. 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.
  7. 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.

A.3 Tiers and cadence

  1. Every dependency of a repository state belongs to exactly one tier.
  2. The tiers and their cadences are read from the repository state. headwater never moves a dependency between tiers, and never changes a cadence.
  3. 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.
  4. 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.
  5. 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.

A.4 Advisories

  1. A dependency whose pin an advisory names is reported as affected, naming the advisory, in every report that holds the dependency.
  2. An advisory is reported apart from notes. headwater never folds an advisory into a release’s notes, and never infers one from them.

A.5 Acknowledgements

  1. 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.
  2. 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.
  3. 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).
  4. An asker may always ask for a report that disregards every acknowledgement, and gets the report the pins alone decide (9).
  5. Every acknowledgement names who gave it and when, and stays readable after the release it acknowledges leaves every report.

A.6 Briefs

  1. 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).
  2. A brief names every declaration of the dependency in the repository state and the pin each gives, so a fixer can move every one.
  3. A brief prescribes nothing. It names no tool that acts on it, and no step a fixer must take.

A.7 Held state

  1. headwater keeps its held state outside the repository’s content. Every checkout of one repository shares one held state.
  2. 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.
  3. 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.
  4. Every report is made from one reading of the repository state. A report never mixes the declarations of two repository states.

A.8 Askers and surfaces

  1. The same question about the same repository state and the same held state gets the same answer, whoever asks and through whichever surface.
  2. Every surface answers from one core. No surface computes a report, a brief, a due tier or an acknowledgement of its own.
  3. 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.
  4. Every answer has one form a program reads, the same through every surface, and that form only ever gains fields.
  5. 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.

A.9 Sources and what they learn

  1. headwater sends a source nothing of the repository but the identities and versions it asks about.
  2. headwater reaches a source with the asker’s own credentials or with none, and never keeps a credential in its held state.
  3. A source’s answer is reported as that source gave it. Where two sources disagree about one release, the report names both and chooses neither.