SvEx.Manifest.FileEntry (SvEx v0.4.2)

One file a plugin owns or contributes to (SDD 7.3).

mode and key are exclusive. :contributes names one block inside a file the plugin shares with others, and :manual names a hunk that cannot be appended safely and is applied as conflict markers instead. Both are positional inside a file someone else owns, so both REQUIRE a key. :sole_owner and :seed take the whole file and must carry none. A nil key is omitted from the encoded entry rather than written as key: nil, so the bytes match SDD 8.2 exactly.

:manual extends SDD 7.3's three modes. It is not a phantom class like :overwritable: apply acts on it by writing markers and mix sv_ex.check acts on it by failing while one remains.

There is no :overwritable mode. It is SDD 4.1 defect 5/6 — a mode nothing downstream can act on — and it appears here only as a value the last clause of validate!/1 rejects, so it can never become a phantom class.

Summary

Types

mode()

@type mode() :: :sole_owner | :contributes | :seed | :manual

t()

@type t() :: %SvEx.Manifest.FileEntry{
  hash: String.t(),
  key: atom() | nil,
  mode: mode(),
  path: String.t()
}