Package-level declarations

Types

Link copied to clipboard
interface ArchiveFiles

Where archive files live: whole files as bytes, since a tar is not text.

Link copied to clipboard

Builds the case directory for one comparison from the engine's full structured results. Nothing here depends on time, paths or the host, so the bytes are the same on every target. The results/ file is empty: outcomes of experiments are ingested later (6d3).

Link copied to clipboard
class CaseFile(files: Map<String, String>)

A case directory in memory: relative path to canonical text, sorted by path. Every file is generated output, so the same inputs give the same bytes. The archive writer and verify of 6d4 start from archiveEntries and check; they add certificate.json, confirmed/, reproduce/ and report.html beside these files and extend the chain over results/.

Link copied to clipboard
interface CaseFiles

Where case files live: the host reads them and each target supplies its own writer.

Link copied to clipboard
sealed interface CaseProblem

A reason a case directory cannot be read or does not check out; never thrown.

Link copied to clipboard
sealed interface CaseRead
Link copied to clipboard
object CaseStore

Writes and reads a CaseFile under a directory; a bad file is a typed result, not a throw.

Link copied to clipboard
sealed interface CaseWrite
Link copied to clipboard
object Chain

The hash chain over observation records. An entry's hash covers the previous hash and the canonical content (the record without its prev and hash fields).

Link copied to clipboard
data class ChainBroken(val path: String, val index: Int, val detail: String) : CaseProblem

The first observation whose link to the chain does not hold; ChainBroken.index counts from 0.

Link copied to clipboard
enum Detail : Enum<Detail>

How much of the structured result to show. The engine and the case files do not know it.

Link copied to clipboard
data class HashMismatch(val path: String, val expected: String, val actual: String) : CaseProblem
Link copied to clipboard
data class MalformedFile(val path: String, val detail: String) : CaseProblem
Link copied to clipboard
class MemoryArchiveFiles(val files: MutableMap<String, ByteArray> = mutableMapOf()) : ArchiveFiles
Link copied to clipboard
class MemoryCaseFiles(val files: MutableMap<String, String> = mutableMapOf()) : CaseFiles
Link copied to clipboard
data class MissingFile(val path: String) : CaseProblem
Link copied to clipboard
object Render

Plain text for a ranking and a plan, at three levels from the same data. The inputs are the canonical JSON of Ranking and Plan, which is what a case directory holds, so a live result and a case read back render the same. Lines stay within WIDTH columns.

Link copied to clipboard
object Tar

Plain USTAR tar of text files, written the same way on every target: sorted names, mode 0644, uid and gid 0, mtime 0, no compression, two zero blocks at the end. read accepts only archives that write would have produced, so reading and writing back gives the same bytes.

Link copied to clipboard
data class TarBadHeader(val entry: Int, val detail: String) : TarProblem
Link copied to clipboard
data class TarBadText(val path: String) : TarProblem
Link copied to clipboard
data class TarDuplicate(val path: String) : TarProblem
Link copied to clipboard
Link copied to clipboard
data class TarOversized(val detail: String) : TarProblem
Link copied to clipboard
sealed interface TarProblem

Why a tar archive was refused; never thrown.

Link copied to clipboard
sealed interface TarRead
Link copied to clipboard
data class TarTruncated(val detail: String) : TarProblem
Link copied to clipboard
data class TarUnsafePath(val path: String) : TarProblem
Link copied to clipboard
data class TarUnsupported(val path: String, val type: Char) : TarProblem
Link copied to clipboard
data class UnsupportedSchema(val path: String, val found: Long?, val supported: Long) : CaseProblem

UnsupportedSchema.found is null when the file has no readable schema number.