Skip to main content

Module satchel

Module satchel 

Source
Expand description

A slice of the seat, packed so somebody else can open it.

“Give the new person project X and tasks Y” is not one of the questions any of these tools answers. The tracker knows the work, the deed store knows what the work produced, and the pack knows what was learned; handing over a piece of that means taking a slice across all three and making it stand on its own somewhere else.

What a slice has to carry, beyond the issues somebody named:

  • what they stand on. An issue whose blockers are absent is a task with no account of why it is not done, so the closure walks blockers.
  • what plan they belong to. A child with no parent is a task with no reason.
  • what the work produced, by accession. The deeds themselves come from the deed store, which is the only thing that can vouch for them; this names them and the receiver fetches or refuses.

The shape is BagIt (RFC 8493): a data/ payload, a manifest of every file in it with a digest, and a bag-info.txt saying who packed it and when. A receiver checks the manifest before reading anything, which is the property a tarball does not have. satchel.json beside the payload is the self-description RO-Crate argues a package needs (doi:10.3233/DS-210053): the parts alone do not say what the whole was meant to be, or which of the parts were asked for rather than pulled in.

This packs what the tracker holds. Deed bytes are the deed store’s to export and atoms are the pack’s, and needs is the list the deed store takes, so the three halves compose on pipes without this crate depending on either of them:

$ vissue satchel --out bag --project x --issue y
$ packset export --into bag/data/atoms | deedar export --into bag/data/deeds -
$ jq -r '.needs[]' bag/data/satchel.json | deedar export --into bag/data/deeds -
$ vissue satchel --seal bag && vissue satchel --verify bag

The accession is what makes that work. It is the one identifier crossing all three stores, so each of them can name what it needs from the others without reading their formats.

Structs§

Report
What a pack or a check found.
Satchel
The self-description written beside the payload.
Slice
What was asked for, as opposed to what came along with it.

Constants§

VERSION
The format this writes, so a reader that meets a later one can say so rather than guess.

Functions§

describe
Read a satchel’s description without checking it.
pack
Pack a slice of the tracker into dest.
seal
Re-manifest a satchel over everything now in its payload.
verify
Check a satchel: every file the manifest names is present and hashes right, and nothing in the payload is unaccounted for.